diff --git a/data/data_symbols.csv b/data/data_symbols.csv index 0fe1d7e5..d3b21d15 100644 --- a/data/data_symbols.csv +++ b/data/data_symbols.csv @@ -1,3 +1,12 @@ +0x000000710002264c,_ZN11ColourTable9getColourE16eMinecraftColour +0x00000071010E2BF0,_ZN11ColourTable13s_colourNamesE +0x00000071010ED740,_ZTV13fuiRenderNode +0x00000071010EDA60,_ZTV18fuiRenderNodeStage +0x00000071010EDB00,_ZTV21fuiRenderNodeTimeline +0x0000007101111230,_ZTV16UIScene_MainMenu +0x0000007101114D98,_ZTV19AbstractTexturePack +0x0000007101117400,_ZTV18DefaultTexturePack +0x000000710112E838,_ZTV11TexturePack 0x0000007101781BBC,AABB__sThreadStorageCount 0x0000007101781BC0,AABB__sDefaultThreadStorage 0x0000007101781BE0,_ZN6Blocks8RegistryE @@ -838,6 +847,7 @@ 0x00000071017A1958,_ZN11PlanksBlock7Variant8VARIANTSE 0x00000071017A1988,_ZN11PlanksBlock9PREDICATEE 0x00000071017A1A30,_ZN15RangedAttribute12ATTACK_SPEEDE +0x00000071017a1a40,_ZN14DataFixerUpper16DATA_VERSION_KEYE 0x00000071017A1BB0,_ZN9Direction4Axis9PREDICATEE 0x00000071017A1E70,_ZN15PrismarineBlock7VARIANTE 0x00000071017A1E78,_ZN15PrismarineBlock7Variant8VARIANTSE @@ -891,16 +901,623 @@ 0x00000071017A2AE0,_ZZN17RedSandStoneBlock26createBlockStateDefinitionEvE10properties 0x00000071017A2AF8,ReedsBlock__sAgeProperties 0x00000071017A2B00,ReedsBlock_hasCreatedDefinition +0x00000071017A2DF8,_ZN11SoundEvents16MOB_SLIME_ATTACKE +0x00000071017A2E00,_ZN11SoundEvents17MOB_SLIME_SMALL_7E +0x00000071017A2E08,_ZN11SoundEvents15MOB_SLIME_BIG_6E +0x00000071017A2E10,_ZN11SoundEvents17MOB_SLIME_SMALL_6E +0x00000071017A2E18,_ZN11SoundEvents15MOB_SLIME_BIG_5E +0x00000071017A2E20,_ZN11SoundEvents17MOB_SLIME_SMALL_9E +0x00000071017A2E28,_ZN11SoundEvents15MOB_SLIME_BIG_8E +0x00000071017A2E30,_ZN11SoundEvents17MOB_SLIME_SMALL_8E +0x00000071017A2E38,_ZN11SoundEvents15MOB_SLIME_BIG_7E +0x00000071017A2E40,_ZN11SoundEvents12RANDOM_BOW_9E +0x00000071017A2EA0,_ZN11SoundEvents13RANDOM_BOW_10E +0x00000071017A2EA8,_ZN11SoundEvents22ENTITY_SNOWMAN_AMBIENTE +0x00000071017A2EB0,_ZN11SoundEvents19ENTITY_SNOWMAN_HURTE +0x00000071017A2EB8,_ZN11SoundEvents20ENTITY_SNOWMAN_DEATHE +0x00000071017A2F98,_ZN10SoundEvent7NEXT_IDE +0x00000071017A2FA0,_ZN10SoundEvent8RegistryE +0x00000071017A3070,_ZN11SoundEvents17AMBIENT_CAVE_CAVEE +0x00000071017A3078,_ZN11SoundEvents9DIG_STONEE +0x00000071017A3080,_ZN11SoundEvents18RANDOM_ANVIL_BREAKE +0x00000071017A3088,_ZN11SoundEvents17RANDOM_ANVIL_LANDE +0x00000071017A3090,_ZN11SoundEvents10STEP_STONEE +0x00000071017A3098,_ZN11SoundEvents19RANDOM_ANVIL_LAND_2E +0x00000071017A30A0,_ZN11SoundEvents19RANDOM_ANVIL_LAND_3E +0x00000071017A30A8,_ZN11SoundEvents12STEP_STONE_2E +0x00000071017A30B0,_ZN11SoundEvents16RANDOM_ANVIL_USEE +0x00000071017A30B8,_ZN11SoundEvents23ENTITY_ARMORSTAND_BREAKE +0x00000071017A30C0,_ZN11SoundEvents8DIG_WOODE +0x00000071017A30C8,_ZN11SoundEvents21ENTITY_ARMORSTAND_HITE +0x00000071017A30D0,_ZN11SoundEvents11DIG_STONE_2E +0x00000071017A30D8,_ZN11SoundEvents22ITEM_ARMOR_EQUIP_CHAINE +0x00000071017A30E0,_ZN11SoundEvents24ITEM_ARMOR_EQUIP_DIAMONDE +0x00000071017A30E8,_ZN11SoundEvents26ITEM_ARMOR_EQUIP_LEATHER_2E +0x00000071017A30F0,_ZN11SoundEvents24ITEM_ARMOR_EQUIP_GENERICE +0x00000071017A30F8,_ZN11SoundEvents21ITEM_ARMOR_EQUIP_GOLDE +0x00000071017A3100,_ZN11SoundEvents21ITEM_ARMOR_EQUIP_IRONE +0x00000071017A3108,_ZN11SoundEvents24ITEM_ARMOR_EQUIP_LEATHERE +0x00000071017A3110,_ZN11SoundEvents13RANDOM_BOWHITE +0x00000071017A3118,_ZN11SoundEvents21RANDOM_SUCCESSFUL_HITE +0x00000071017A3120,_ZN11SoundEvents10RANDOM_BOWE +0x00000071017A3128,_ZN11SoundEvents12MOB_BAT_IDLEE +0x00000071017A3130,_ZN11SoundEvents13MOB_BAT_DEATHE +0x00000071017A3138,_ZN11SoundEvents12MOB_BAT_HURTE +0x00000071017A3140,_ZN11SoundEvents15MOB_BAT_TAKEOFFE +0x00000071017A3148,_ZN11SoundEvents17MOB_BLAZE_BREATHEE +0x00000071017A3150,_ZN11SoundEvents9FIRE_FIREE +0x00000071017A3158,_ZN11SoundEvents15MOB_BLAZE_DEATHE +0x00000071017A3160,_ZN11SoundEvents13MOB_BLAZE_HITE +0x00000071017A3168,_ZN11SoundEvents18MOB_GHAST_FIREBALLE +0x00000071017A3170,_ZN11SoundEvents19ENTITY_BOBBER_THROWE +0x00000071017A3178,_ZN11SoundEvents24ENTITY_BOBBER_RETRIEVE_2E +0x00000071017A3180,_ZN11SoundEvents17ITEM_BOTTLE_EMPTYE +0x00000071017A3188,_ZN11SoundEvents16ITEM_BOTTLE_FILLE +0x00000071017A3190,_ZN11SoundEvents29ITEM_BOTTLE_FILL_DRAGONBREATHE +0x00000071017A3198,_ZN11SoundEvents24BLOCK_BREWING_STAND_BREWE +0x00000071017A31A0,_ZN11SoundEvents17ITEM_BUCKET_EMPTYE +0x00000071017A31A8,_ZN11SoundEvents22ITEM_BUCKET_EMPTY_LAVAE +0x00000071017A31B0,_ZN11SoundEvents16ITEM_BUCKET_FILLE +0x00000071017A31B8,_ZN11SoundEvents21ITEM_BUCKET_FILL_LAVAE +0x00000071017A31C0,_ZN11SoundEvents12MOB_CAT_MEOWE +0x00000071017A31C8,_ZN11SoundEvents11MOB_CAT_HITE +0x00000071017A31D0,_ZN11SoundEvents12MOB_CAT_HISSE +0x00000071017A31D8,_ZN11SoundEvents13MOB_CAT_HIT_2E +0x00000071017A31E0,_ZN11SoundEvents12MOB_CAT_PURRE +0x00000071017A31E8,_ZN11SoundEvents15MOB_CAT_PURREOWE +0x00000071017A31F0,_ZN11SoundEvents18RANDOM_CHESTCLOSEDE +0x00000071017A31F8,_ZN11SoundEvents17RANDOM_DOOR_CLOSEE +0x00000071017A3200,_ZN11SoundEvents16RANDOM_CHESTOPENE +0x00000071017A3208,_ZN11SoundEvents16MOB_CHICKEN_IDLEE +0x00000071017A3210,_ZN11SoundEvents16MOB_CHICKEN_HURTE +0x00000071017A3218,_ZN11SoundEvents16MOB_CHICKEN_PLOPE +0x00000071017A3220,_ZN11SoundEvents18MOB_CHICKEN_HURT_2E +0x00000071017A3228,_ZN11SoundEvents16MOB_CHICKEN_STEPE +0x00000071017A3230,_ZN11SoundEvents25BLOCK_CHORUS_FLOWER_DEATHE +0x00000071017A3238,_ZN11SoundEvents24BLOCK_CHORUS_FLOWER_GROWE +0x00000071017A3240,_ZN11SoundEvents19MOB_ENDERMEN_PORTALE +0x00000071017A3248,_ZN11SoundEvents9DIG_CLOTHE +0x00000071017A3250,_ZN11SoundEvents10STEP_CLOTHE +0x00000071017A3258,_ZN11SoundEvents12STEP_CLOTH_2E +0x00000071017A3260,_ZN11SoundEvents11DIG_CLOTH_2E +0x00000071017A3268,_ZN11SoundEvents12STEP_CLOTH_3E +0x00000071017A3270,_ZN11SoundEvents15RANDOM_CLICK_73E +0x00000071017A3278,_ZN11SoundEvents12MOB_COW_IDLEE +0x00000071017A3280,_ZN11SoundEvents12MOB_COW_HURTE +0x00000071017A3288,_ZN11SoundEvents14MOB_COW_HURT_2E +0x00000071017A3290,_ZN11SoundEvents15ENTITY_COW_MILKE +0x00000071017A3298,_ZN11SoundEvents12MOB_COW_STEPE +0x00000071017A32A0,_ZN11SoundEvents17MOB_CREEPER_DEATHE +0x00000071017A32A8,_ZN11SoundEvents16MOB_CREEPER_HURTE +0x00000071017A32B0,_ZN11SoundEvents11RANDOM_FUSEE +0x00000071017A32B8,_ZN11SoundEvents14RANDOM_CLICK_2E +0x00000071017A32C0,_ZN11SoundEvents14RANDOM_CLICK_3E +0x00000071017A32C8,_ZN11SoundEvents12RANDOM_BOW_2E +0x00000071017A32D0,_ZN11SoundEvents21MOB_HORSE_DONKEY_IDLEE +0x00000071017A32D8,_ZN11SoundEvents22MOB_HORSE_DONKEY_ANGRYE +0x00000071017A32E0,_ZN11SoundEvents18MOB_CHICKEN_PLOP_2E +0x00000071017A32E8,_ZN11SoundEvents22MOB_HORSE_DONKEY_DEATHE +0x00000071017A32F0,_ZN11SoundEvents20MOB_HORSE_DONKEY_HITE +0x00000071017A32F8,_ZN11SoundEvents12RANDOM_BOW_3E +0x00000071017A3300,_ZN11SoundEvents23MOB_GUARDIAN_ELDER_IDLEE +0x00000071017A3308,_ZN11SoundEvents22MOB_GUARDIAN_LAND_IDLEE +0x00000071017A3310,_ZN11SoundEvents18MOB_GUARDIAN_CURSEE +0x00000071017A3318,_ZN11SoundEvents24MOB_GUARDIAN_ELDER_DEATHE +0x00000071017A3320,_ZN11SoundEvents23MOB_GUARDIAN_LAND_DEATHE +0x00000071017A3328,_ZN11SoundEvents17MOB_GUARDIAN_FLOPE +0x00000071017A3330,_ZN11SoundEvents22MOB_GUARDIAN_ELDER_HITE +0x00000071017A3338,_ZN11SoundEvents21MOB_GUARDIAN_LAND_HITE +0x00000071017A3340,_ZN11SoundEvents18ITEM_ELYTRA_FLYINGE +0x00000071017A3348,_ZN11SoundEvents31BLOCK_ENCHANTMENT_TABLE_ENCHANTE +0x00000071017A3350,_ZN11SoundEvents22BLOCK_ENDERCHEST_CLOSEE +0x00000071017A3358,_ZN11SoundEvents21BLOCK_ENDERCHEST_OPENE +0x00000071017A3360,_ZN11SoundEvents21MOB_ENDERDRAGON_GROWLE +0x00000071017A3368,_ZN11SoundEvents19MOB_ENDERDRAGON_ENDE +0x00000071017A3370,_ZN11SoundEvents14RANDOM_EXPLODEE +0x00000071017A3378,_ZN11SoundEvents21MOB_ENDERDRAGON_WINGSE +0x00000071017A3380,_ZN11SoundEvents23MOB_ENDERDRAGON_GROWL_2E +0x00000071017A3388,_ZN11SoundEvents19MOB_ENDERDRAGON_HITE +0x00000071017A3390,_ZN11SoundEvents20MOB_GHAST_FIREBALL_2E +0x00000071017A3398,_ZN11SoundEvents22ENTITY_ENDEREYE_LAUNCHE +0x00000071017A33A0,_ZN11SoundEvents21ENTITY_ENDEREYE_DEATHE +0x00000071017A33A8,_ZN11SoundEvents17MOB_ENDERMEN_IDLEE +0x00000071017A33B0,_ZN11SoundEvents18MOB_ENDERMEN_DEATHE +0x00000071017A33B8,_ZN11SoundEvents16MOB_ENDERMEN_HITE +0x00000071017A33C0,_ZN11SoundEvents19MOB_ENDERMAN_SCREAME +0x00000071017A33C8,_ZN11SoundEvents18MOB_ENDERMAN_STAREE +0x00000071017A33D0,_ZN11SoundEvents21MOB_ENDERMEN_PORTAL_2E +0x00000071017A33D8,_ZN11SoundEvents19MOB_SILVERFISH_IDLEE +0x00000071017A33E0,_ZN11SoundEvents19MOB_SILVERFISH_KILLE +0x00000071017A33E8,_ZN11SoundEvents18MOB_SILVERFISH_HITE +0x00000071017A33F0,_ZN11SoundEvents19MOB_SILVERFISH_STEPE +0x00000071017A33F8,_ZN11SoundEvents12RANDOM_BOW_4E +0x00000071017A3400,_ZN11SoundEvents16RANDOM_EXPLODE_2E +0x00000071017A3408,_ZN11SoundEvents27BLOCK_END_PORTAL_FRAME_FILLE +0x00000071017A3410,_ZN11SoundEvents22BLOCK_END_PORTAL_SPAWNE +0x00000071017A3418,_ZN11SoundEvents29ENTITY_EVOCATION_FANGS_ATTACKE +0x00000071017A3420,_ZN11SoundEvents32ENTITY_EVOCATION_ILLAGER_AMBIENTE +0x00000071017A3428,_ZN11SoundEvents35ENTITY_EVOCATION_ILLAGER_CAST_SPELLE +0x00000071017A3430,_ZN11SoundEvents30ENTITY_EVOCATION_ILLAGER_DEATHE +0x00000071017A3438,_ZN11SoundEvents29ENTITY_EVOCATION_ILLAGER_HURTE +0x00000071017A3440,_ZN11SoundEvents39ENTITY_EVOCATION_ILLAGER_PREPARE_ATTACKE +0x00000071017A3448,_ZN11SoundEvents39ENTITY_EVOCATION_ILLAGER_PREPARE_SUMMONE +0x00000071017A3450,_ZN11SoundEvents39ENTITY_EVOCATION_ILLAGER_PREPARE_WOLOLOE +0x00000071017A3458,_ZN11SoundEvents12RANDOM_BOW_5E +0x00000071017A3460,_ZN11SoundEvents10RANDOM_ORBE +0x00000071017A3468,_ZN11SoundEvents12RANDOM_ORB_2E +0x00000071017A3470,_ZN11SoundEvents22BLOCK_FENCE_GATE_CLOSEE +0x00000071017A3478,_ZN11SoundEvents21BLOCK_FENCE_GATE_OPENE +0x00000071017A3480,_ZN11SoundEvents20MOB_GHAST_FIREBALL_3E +0x00000071017A3488,_ZN11SoundEvents15FIREWORKS_BLASTE +0x00000071017A3490,_ZN11SoundEvents19FIREWORKS_BLAST_FARE +0x00000071017A3498,_ZN11SoundEvents21FIREWORKS_LARGE_BLASTE +0x00000071017A34A0,_ZN11SoundEvents25FIREWORKS_LARGE_BLAST_FARE +0x00000071017A34A8,_ZN11SoundEvents16FIREWORKS_LAUNCHE +0x00000071017A34B0,_ZN11SoundEvents12RANDOM_BOW_6E +0x00000071017A34B8,_ZN11SoundEvents17FIREWORKS_TWINKLEE +0x00000071017A34C0,_ZN11SoundEvents21FIREWORKS_TWINKLE_FARE 0x00000071017A34C8,_ZN11SoundEvents12FIRE_AMBIENTE +0x00000071017A34D0,_ZN11SoundEvents11RANDOM_FIZZE +0x00000071017A34D8,_ZN11SoundEvents11FIRE_IGNITEE +0x00000071017A34E0,_ZN11SoundEvents26BLOCK_FURNACE_FIRE_CRACKLEE +0x00000071017A34E8,_ZN11SoundEvents14DAMAGE_FALLBIGE +0x00000071017A34F0,_ZN11SoundEvents13RANDOM_FIZZ_2E +0x00000071017A34F8,_ZN11SoundEvents16DAMAGE_HURTFLESHE +0x00000071017A3500,_ZN11SoundEvents12RANDOM_DRINKE +0x00000071017A3508,_ZN11SoundEvents10RANDOM_EATE +0x00000071017A3510,_ZN11SoundEvents16RANDOM_EXPLODE_3E +0x00000071017A3518,_ZN11SoundEvents13RANDOM_FIZZ_3E +0x00000071017A3520,_ZN11SoundEvents18DAMAGE_HURTFLESH_2E +0x00000071017A3528,_ZN11SoundEvents16DAMAGE_FALLSMALLE +0x00000071017A3530,_ZN11SoundEvents13RANDOM_SPLASHE +0x00000071017A3538,_ZN11SoundEvents11LIQUID_SWIME +0x00000071017A3540,_ZN11SoundEvents14MOB_GHAST_MOANE +0x00000071017A3548,_ZN11SoundEvents15MOB_GHAST_DEATHE +0x00000071017A3550,_ZN11SoundEvents16MOB_GHAST_SCREAME +0x00000071017A3558,_ZN11SoundEvents18MOB_GHAST_SCREAM_2E +0x00000071017A3560,_ZN11SoundEvents20MOB_GHAST_FIREBALL_4E +0x00000071017A3568,_ZN11SoundEvents16MOB_GHAST_CHARGEE +0x00000071017A3570,_ZN11SoundEvents12RANDOM_GLASSE +0x00000071017A3578,_ZN11SoundEvents12STEP_STONE_3E +0x00000071017A3580,_ZN11SoundEvents12STEP_STONE_4E +0x00000071017A3588,_ZN11SoundEvents11DIG_STONE_3E +0x00000071017A3590,_ZN11SoundEvents12STEP_STONE_5E +0x00000071017A3598,_ZN11SoundEvents9DIG_GRASSE +0x00000071017A35A0,_ZN11SoundEvents10STEP_GRASSE +0x00000071017A35A8,_ZN11SoundEvents12STEP_GRASS_2E +0x00000071017A35B0,_ZN11SoundEvents11DIG_GRASS_2E +0x00000071017A35B8,_ZN11SoundEvents12STEP_GRASS_3E +0x00000071017A35C0,_ZN11SoundEvents10DIG_GRAVELE +0x00000071017A35C8,_ZN11SoundEvents11STEP_GRAVELE +0x00000071017A35D0,_ZN11SoundEvents13STEP_GRAVEL_2E +0x00000071017A35D8,_ZN11SoundEvents12DIG_GRAVEL_2E +0x00000071017A35E0,_ZN11SoundEvents13STEP_GRAVEL_3E +0x00000071017A35E8,_ZN11SoundEvents20ENTITY_GUARDIAN_IDLEE +0x00000071017A35F0,_ZN11SoundEvents24MOB_GUARDIAN_LAND_IDLE_2E +0x00000071017A35F8,_ZN11SoundEvents19MOB_GUARDIAN_ATTACKE +0x00000071017A3600,_ZN11SoundEvents18MOB_GUARDIAN_DEATHE +0x00000071017A3608,_ZN11SoundEvents25MOB_GUARDIAN_LAND_DEATH_2E +0x00000071017A3610,_ZN11SoundEvents19MOB_GUARDIAN_FLOP_2E +0x00000071017A3618,_ZN11SoundEvents16MOB_GUARDIAN_HITE +0x00000071017A3620,_ZN11SoundEvents23MOB_GUARDIAN_LAND_HIT_2E +0x00000071017A3628,_ZN11SoundEvents13ITEM_HOE_TILLE +0x00000071017A3630,_ZN11SoundEvents14MOB_HORSE_IDLEE +0x00000071017A3638,_ZN11SoundEvents15MOB_HORSE_ANGRYE +0x00000071017A3640,_ZN11SoundEvents15MOB_HORSE_ARMORE +0x00000071017A3648,_ZN11SoundEvents17MOB_HORSE_BREATHEE +0x00000071017A3650,_ZN11SoundEvents15MOB_HORSE_DEATHE +0x00000071017A3658,_ZN11SoundEvents16ENTITY_HORSE_EATE +0x00000071017A3660,_ZN11SoundEvents16MOB_HORSE_GALLOPE +0x00000071017A3668,_ZN11SoundEvents13MOB_HORSE_HITE +0x00000071017A3670,_ZN11SoundEvents14MOB_HORSE_JUMPE +0x00000071017A3678,_ZN11SoundEvents14MOB_HORSE_LANDE +0x00000071017A3680,_ZN11SoundEvents17MOB_HORSE_LEATHERE +0x00000071017A3688,_ZN11SoundEvents14MOB_HORSE_SOFTE +0x00000071017A3690,_ZN11SoundEvents14MOB_HORSE_WOODE +0x00000071017A3698,_ZN11SoundEvents26GAME_HOSTILE_HURT_FALL_BIGE +0x00000071017A36A0,_ZN11SoundEvents16GAME_HOSTILE_DIEE +0x00000071017A36A8,_ZN11SoundEvents18DAMAGE_HURTFLESH_3E +0x00000071017A36B0,_ZN11SoundEvents28GAME_HOSTILE_HURT_FALL_SMALLE +0x00000071017A36B8,_ZN11SoundEvents24GAME_HOSTILE_SWIM_SPLASHE +0x00000071017A36C0,_ZN11SoundEvents17GAME_HOSTILE_SWIME +0x00000071017A36C8,_ZN11SoundEvents16ENTITY_HUSK_IDLEE +0x00000071017A36D0,_ZN11SoundEvents17ENTITY_HUSK_DEATHE +0x00000071017A36D8,_ZN11SoundEvents16ENTITY_HUSK_HURTE +0x00000071017A36E0,_ZN11SoundEvents16ENTITY_HUSK_STEPE +0x00000071017A36E8,_ZN11SoundEvents31ENTITY_ILLUSION_ILLAGER_AMBIENTE +0x00000071017A36F0,_ZN11SoundEvents34ENTITY_ILLUSION_ILLAGER_CAST_SPELLE +0x00000071017A36F8,_ZN11SoundEvents29ENTITY_ILLUSION_ILLAGER_DEATHE +0x00000071017A3700,_ZN11SoundEvents28ENTITY_ILLUSION_ILLAGER_HURTE +0x00000071017A3708,_ZN11SoundEvents35ENTITY_ILLUSION_ILLAGER_MIRROR_MOVEE +0x00000071017A3710,_ZN11SoundEvents41ENTITY_ILLUSION_ILLAGER_PREPARE_BLINDNESSE +0x00000071017A3718,_ZN11SoundEvents38ENTITY_ILLUSION_ILLAGER_PREPARE_MIRRORE +0x00000071017A3720,_ZN11SoundEvents19MOB_IRONGOLEM_THROWE +0x00000071017A3728,_ZN11SoundEvents19MOB_IRONGOLEM_DEATHE +0x00000071017A3730,_ZN11SoundEvents17MOB_IRONGOLEM_HITE +0x00000071017A3738,_ZN11SoundEvents18MOB_IRONGOLEM_WALKE +0x00000071017A3740,_ZN11SoundEvents21BLOCK_IRON_DOOR_CLOSEE +0x00000071017A3748,_ZN11SoundEvents20BLOCK_IRON_DOOR_OPENE +0x00000071017A3750,_ZN11SoundEvents25BLOCK_IRON_TRAPDOOR_CLOSEE +0x00000071017A3758,_ZN11SoundEvents24BLOCK_IRON_TRAPDOOR_OPENE +0x00000071017A3760,_ZN11SoundEvents24ENTITY_ITEMFRAME_ADDITEME +0x00000071017A3768,_ZN11SoundEvents22ENTITY_ITEMFRAME_BREAKE +0x00000071017A3770,_ZN11SoundEvents22ENTITY_ITEMFRAME_PLACEE +0x00000071017A3778,_ZN11SoundEvents27ENTITY_ITEMFRAME_REMOVEITEME +0x00000071017A3780,_ZN11SoundEvents27ENTITY_ITEMFRAME_ROTATEITEME +0x00000071017A3788,_ZN11SoundEvents12RANDOM_BREAKE +0x00000071017A3790,_ZN10SoundEvent11ITEM_PICKUPE +0x00000071017A3798,_ZN11SoundEvents10DIG_WOOD_2E +0x00000071017A37A0,_ZN11SoundEvents11STEP_LADDERE +0x00000071017A37A8,_ZN11SoundEvents13STEP_LADDER_2E +0x00000071017A37B0,_ZN11SoundEvents10DIG_WOOD_3E +0x00000071017A37B8,_ZN11SoundEvents13STEP_LADDER_3E +0x00000071017A37C0,_ZN11SoundEvents11LIQUID_LAVAE +0x00000071017A37C8,_ZN11SoundEvents13RANDOM_FIZZ_4E +0x00000071017A37D0,_ZN11SoundEvents14LIQUID_LAVAPOPE +0x00000071017A37D8,_ZN11SoundEvents22ENTITY_LEASHKNOT_BREAKE +0x00000071017A37E0,_ZN11SoundEvents22ENTITY_LEASHKNOT_PLACEE +0x00000071017A37E8,_ZN11SoundEvents14RANDOM_CLICK_4E +0x00000071017A37F0,_ZN11SoundEvents16RANDOM_EXPLODE_4E +0x00000071017A37F8,_ZN11SoundEvents23AMBIENT_WEATHER_THUNDERE +0x00000071017A3800,_ZN11SoundEvents12RANDOM_BOW_7E +0x00000071017A3808,_ZN11SoundEvents20ENTITY_LLAMA_AMBIENTE +0x00000071017A3810,_ZN11SoundEvents18ENTITY_LLAMA_ANGRYE +0x00000071017A3818,_ZN11SoundEvents18MOB_CHICKEN_PLOP_3E +0x00000071017A3820,_ZN11SoundEvents18ENTITY_LLAMA_DEATHE +0x00000071017A3828,_ZN11SoundEvents16ENTITY_LLAMA_EATE +0x00000071017A3830,_ZN11SoundEvents17ENTITY_LLAMA_HURTE +0x00000071017A3838,_ZN11SoundEvents17ENTITY_LLAMA_SPITE +0x00000071017A3840,_ZN11SoundEvents17ENTITY_LLAMA_STEPE +0x00000071017A3848,_ZN11SoundEvents17ENTITY_LLAMA_SWAGE +0x00000071017A3850,_ZN11SoundEvents13MOB_SLIME_BIGE +0x00000071017A3858,_ZN11SoundEvents15MOB_SLIME_BIG_2E +0x00000071017A3860,_ZN11SoundEvents18MOB_MAGMACUBE_JUMPE +0x00000071017A3868,_ZN11SoundEvents17MOB_MAGMACUBE_BIGE +0x00000071017A3870,_ZN11SoundEvents11DIG_STONE_4E +0x00000071017A3878,_ZN11SoundEvents12STEP_STONE_6E +0x00000071017A3880,_ZN11SoundEvents12STEP_STONE_7E +0x00000071017A3888,_ZN11SoundEvents11DIG_STONE_5E +0x00000071017A3890,_ZN11SoundEvents14RANDOM_CLICK_5E +0x00000071017A3898,_ZN11SoundEvents14RANDOM_CLICK_6E +0x00000071017A38A0,_ZN11SoundEvents12STEP_STONE_8E +0x00000071017A38A8,_ZN11SoundEvents15MINECART_INSIDEE +0x00000071017A38B0,_ZN11SoundEvents13MINECART_BASEE +0x00000071017A38B8,_ZN11SoundEvents15MOB_SHEEP_SHEARE +0x00000071017A38C0,_ZN11SoundEvents23MOB_HORSE_DONKEY_IDLE_2E +0x00000071017A38C8,_ZN11SoundEvents24MOB_HORSE_DONKEY_DEATH_2E +0x00000071017A38D0,_ZN11SoundEvents22MOB_HORSE_DONKEY_HIT_2E +0x00000071017A38D8,_ZN11SoundEvents18MOB_CHICKEN_PLOP_4E +0x00000071017A38E0,_ZN11SoundEvents7NOTE_BDE +0x00000071017A38E8,_ZN11SoundEvents15NOTE_BASSATTACKE +0x00000071017A38F0,_ZN11SoundEvents9NOTE_HARPE +0x00000071017A38F8,_ZN11SoundEvents8NOTE_HATE +0x00000071017A3900,_ZN11SoundEvents10NOTE_PLINGE +0x00000071017A3908,_ZN11SoundEvents10NOTE_SNAREE +0x00000071017A3910,_ZN11SoundEvents21ENTITY_PAINTING_BREAKE +0x00000071017A3918,_ZN11SoundEvents21ENTITY_PAINTING_PLACEE +0x00000071017A3920,_ZN11SoundEvents21ENTITY_PARROT_AMBIENTE +0x00000071017A3928,_ZN11SoundEvents19ENTITY_PARROT_DEATHE +0x00000071017A3930,_ZN11SoundEvents17ENTITY_PARROT_EATE +0x00000071017A3938,_ZN11SoundEvents17ENTITY_PARROT_FLYE +0x00000071017A3940,_ZN11SoundEvents18ENTITY_PARROT_HURTE +0x00000071017A3948,_ZN11SoundEvents23MOB_BLAZE_BREATHE_ALIASE +0x00000071017A3950,_ZN11SoundEvents17RANDOM_FUSE_ALIASE +0x00000071017A3958,_ZN11SoundEvents28MOB_GUARDIAN_LAND_IDLE_ALIASE +0x00000071017A3960,_ZN11SoundEvents27MOB_ENDERDRAGON_GROWL_ALIASE +0x00000071017A3968,_ZN11SoundEvents23MOB_ENDERMEN_IDLE_ALIASE +0x00000071017A3970,_ZN11SoundEvents25MOB_SILVERFISH_IDLE_ALIASE +0x00000071017A3978,_ZN11SoundEvents38ENTITY_EVOCATION_ILLAGER_AMBIENT_ALIASE +0x00000071017A3980,_ZN11SoundEvents20MOB_GHAST_MOAN_ALIASE +0x00000071017A3988,_ZN11SoundEvents22ENTITY_HUSK_IDLE_ALIASE +0x00000071017A3990,_ZN11SoundEvents37ENTITY_ILLUSION_ILLAGER_AMBIENT_ALIASE +0x00000071017A3998,_ZN11SoundEvents23MOB_MAGMACUBE_BIG_ALIASE +0x00000071017A39A0,_ZN11SoundEvents27ENTITY_POLARBEAR_IDLE_ALIASE +0x00000071017A39A8,_ZN11SoundEvents28ENTITY_SHULKER_AMBIENT_ALIASE +0x00000071017A39B0,_ZN11SoundEvents27MOB_SILVERFISH_IDLE_ALIAS_2E +0x00000071017A39B8,_ZN11SoundEvents23MOB_SKELETON_IDLE_ALIASE +0x00000071017A39C0,_ZN11SoundEvents19MOB_SLIME_BIG_ALIASE +0x00000071017A39C8,_ZN11SoundEvents21MOB_SPIDER_IDLE_ALIASE +0x00000071017A39D0,_ZN11SoundEvents23ENTITY_STRAY_IDLE_ALIASE +0x00000071017A39D8,_ZN11SoundEvents21ENTITY_VEX_IDLE_ALIASE +0x00000071017A39E0,_ZN11SoundEvents40ENTITY_VINDICATION_ILLAGER_AMBIENT_ALIASE +0x00000071017A39E8,_ZN11SoundEvents23ENTITY_WITCH_IDLE_ALIASE +0x00000071017A39F0,_ZN11SoundEvents21MOB_WITHER_IDLE_ALIASE +0x00000071017A39F8,_ZN11SoundEvents25MOB_SKELETON_IDLE_ALIAS_2E +0x00000071017A3A00,_ZN11SoundEvents19MOB_WOLF_BARK_ALIASE +0x00000071017A3A08,_ZN11SoundEvents21MOB_ZOMBIE_IDLE_ALIASE +0x00000071017A3A10,_ZN11SoundEvents24MOB_ZOMBIEPIG_IDLE_ALIASE +0x00000071017A3A18,_ZN11SoundEvents23MOB_ZOMBIE_IDLE_ALIAS_2E +0x00000071017A3A20,_ZN11SoundEvents18ENTITY_PARROT_STEPE +0x00000071017A3A28,_ZN11SoundEvents12MOB_PIG_IDLEE +0x00000071017A3A30,_ZN11SoundEvents13MOB_PIG_DEATHE +0x00000071017A3A38,_ZN11SoundEvents14MOB_PIG_IDLE_2E +0x00000071017A3A40,_ZN11SoundEvents19MOB_HORSE_LEATHER_2E +0x00000071017A3A48,_ZN11SoundEvents12MOB_PIG_STEPE +0x00000071017A3A50,_ZN11SoundEvents14TILE_PISTON_INE +0x00000071017A3A58,_ZN11SoundEvents15TILE_PISTON_OUTE +0x00000071017A3A60,_ZN11SoundEvents25ENTITY_PLAYER_ATTACK_CRITE +0x00000071017A3A68,_ZN11SoundEvents30ENTITY_PLAYER_ATTACK_KNOCKBACKE +0x00000071017A3A70,_ZN11SoundEvents25ENTITY_PLAYER_ATTACK_WEAKE +0x00000071017A3A78,_ZN11SoundEvents27ENTITY_PLAYER_ATTACK_STRONGE +0x00000071017A3A80,_ZN11SoundEvents26ENTITY_PLAYER_ATTACK_SWEEPE +0x00000071017A3A88,_ZN11SoundEvents27ENTITY_PLAYER_ATTACK_WEAK_2E +0x00000071017A3A90,_ZN11SoundEvents25GAME_PLAYER_HURT_FALL_BIGE +0x00000071017A3A98,_ZN11SoundEvents13RANDOM_BREATHE +0x00000071017A3AA0,_ZN11SoundEvents11RANDOM_BURPE +0x00000071017A3AA8,_ZN11SoundEvents18DAMAGE_HURTFLESH_4E +0x00000071017A3AB0,_ZN11SoundEvents18DAMAGE_HURTFLESH_5E +0x00000071017A3AB8,_ZN11SoundEvents14RANDOM_LEVELUPE +0x00000071017A3AC0,_ZN11SoundEvents18DAMAGE_FALLSMALL_2E +0x00000071017A3AC8,_ZN11SoundEvents23GAME_PLAYER_SWIM_SPLASHE +0x00000071017A3AD0,_ZN11SoundEvents16GAME_PLAYER_SWIME +0x00000071017A3AD8,_ZN11SoundEvents21ENTITY_POLARBEAR_IDLEE +0x00000071017A3AE0,_ZN11SoundEvents25ENTITY_POLARBEAR_BABYIDLEE +0x00000071017A3AE8,_ZN11SoundEvents22ENTITY_POLARBEAR_DEATHE +0x00000071017A3AF0,_ZN11SoundEvents21ENTITY_POLARBEAR_HURTE +0x00000071017A3AF8,_ZN11SoundEvents21ENTITY_POLARBEAR_STEPE +0x00000071017A3B00,_ZN11SoundEvents24ENTITY_POLARBEAR_WARNINGE +0x00000071017A3B08,_ZN11SoundEvents13PORTAL_PORTALE +0x00000071017A3B10,_ZN11SoundEvents13PORTAL_TRAVELE +0x00000071017A3B18,_ZN11SoundEvents14PORTAL_TRIGGERE +0x00000071017A3B20,_ZN11SoundEvents18ENTITY_RABBIT_IDLEE +0x00000071017A3B28,_ZN11SoundEvents20ENTITY_RABBIT_ATTACKE +0x00000071017A3B30,_ZN11SoundEvents16MOB_RABBIT_DEATHE +0x00000071017A3B38,_ZN11SoundEvents18ENTITY_RABBIT_HURTE +0x00000071017A3B40,_ZN11SoundEvents17ENTITY_RABBIT_HOPE +0x00000071017A3B48,_ZN11SoundEvents9RECORD_11E +0x00000071017A3B50,_ZN11SoundEvents9RECORD_13E +0x00000071017A3B58,_ZN11SoundEvents6BLOCKSE +0x00000071017A3B60,_ZN11SoundEvents3CATE +0x00000071017A3B68,_ZN11SoundEvents5CHIRPE +0x00000071017A3B70,_ZN11SoundEvents3FARE +0x00000071017A3B78,_ZN11SoundEvents4MALLE +0x00000071017A3B80,_ZN11SoundEvents7MELLOHIE +0x00000071017A3B88,_ZN11SoundEvents4STALE +0x00000071017A3B90,_ZN11SoundEvents5STRADE +0x00000071017A3B98,_ZN11SoundEvents16WHERE_ARE_WE_NOWE +0x00000071017A3BA0,_ZN11SoundEvents4WARDE +0x00000071017A3BA8,_ZN11SoundEvents13RANDOM_FIZZ_5E +0x00000071017A3BB0,_ZN11SoundEvents8DIG_SANDE +0x00000071017A3BB8,_ZN11SoundEvents9STEP_SANDE +0x00000071017A3BC0,_ZN11SoundEvents11STEP_SAND_2E +0x00000071017A3BC8,_ZN11SoundEvents10DIG_SAND_2E +0x00000071017A3BD0,_ZN11SoundEvents11STEP_SAND_3E +0x00000071017A3BD8,_ZN11SoundEvents14MOB_SHEEP_IDLEE +0x00000071017A3BE0,_ZN11SoundEvents16MOB_SHEEP_IDLE_2E +0x00000071017A3BE8,_ZN11SoundEvents16MOB_SHEEP_IDLE_3E +0x00000071017A3BF0,_ZN11SoundEvents17MOB_SHEEP_SHEAR_2E +0x00000071017A3BF8,_ZN11SoundEvents14MOB_SHEEP_STEPE +0x00000071017A3C00,_ZN11SoundEvents17ITEM_SHIELD_BLOCKE +0x00000071017A3C08,_ZN11SoundEvents14RANDOM_BREAK_2E +0x00000071017A3C10,_ZN11SoundEvents14SHOVEL_FLATTENE +0x00000071017A3C18,_ZN11SoundEvents22ENTITY_SHULKER_AMBIENTE +0x00000071017A3C20,_ZN11SoundEvents22BLOCK_SHULKER_BOX_OPENE +0x00000071017A3C28,_ZN11SoundEvents23BLOCK_SHULKER_BOX_CLOSEE +0x00000071017A3C30,_ZN11SoundEvents25ENTITY_SHULKER_BULLET_HITE +0x00000071017A3C38,_ZN11SoundEvents27ENTITY_SHULKER_BULLET_HIT_2E +0x00000071017A3C40,_ZN11SoundEvents20ENTITY_SHULKER_CLOSEE +0x00000071017A3C48,_ZN11SoundEvents20ENTITY_SHULKER_DEATHE +0x00000071017A3C50,_ZN11SoundEvents19ENTITY_SHULKER_HURTE +0x00000071017A3C58,_ZN11SoundEvents26ENTITY_SHULKER_HURT_CLOSEDE +0x00000071017A3C60,_ZN11SoundEvents19ENTITY_SHULKER_OPENE +0x00000071017A3C68,_ZN11SoundEvents20ENTITY_SHULKER_SHOOTE +0x00000071017A3C70,_ZN11SoundEvents21MOB_ENDERMEN_PORTAL_3E +0x00000071017A3C78,_ZN11SoundEvents21MOB_SILVERFISH_IDLE_2E +0x00000071017A3C80,_ZN11SoundEvents21MOB_SILVERFISH_KILL_2E +0x00000071017A3C88,_ZN11SoundEvents20MOB_SILVERFISH_HIT_2E +0x00000071017A3C90,_ZN11SoundEvents21MOB_SILVERFISH_STEP_2E +0x00000071017A3C98,_ZN11SoundEvents17MOB_SKELETON_IDLEE +0x00000071017A3CA0,_ZN11SoundEvents18MOB_SKELETON_DEATHE +0x00000071017A3CA8,_ZN11SoundEvents23MOB_HORSE_SKELETON_IDLEE +0x00000071017A3CB0,_ZN11SoundEvents24MOB_HORSE_SKELETON_DEATHE +0x00000071017A3CB8,_ZN11SoundEvents22MOB_HORSE_SKELETON_HITE +0x00000071017A3CC0,_ZN11SoundEvents17MOB_SKELETON_HURTE +0x00000071017A3CC8,_ZN11SoundEvents12RANDOM_BOW_8E +0x00000071017A3CD0,_ZN11SoundEvents17MOB_SKELETON_STEPE +0x00000071017A3CD8,_ZN11SoundEvents15MOB_SLIME_BIG_3E +0x00000071017A3CE0,_ZN11SoundEvents15MOB_SLIME_SMALLE +0x00000071017A3CE8,_ZN11SoundEvents17MOB_SLIME_SMALL_2E +0x00000071017A3CF0,_ZN11SoundEvents15MOB_SLIME_BIG_4E +0x00000071017A3CF8,_ZN11SoundEvents17MOB_SLIME_SMALL_3E +0x00000071017A3D00,_ZN11SoundEvents17MOB_SLIME_SMALL_4E +0x00000071017A3D08,_ZN11SoundEvents17MOB_SLIME_SMALL_5E +0x00000071017A3D10,_ZN11SoundEvents19MOB_MAGMACUBE_SMALLE +0x00000071017A3D18,_ZN11SoundEvents8DIG_SNOWE +0x00000071017A3D20,_ZN11SoundEvents9STEP_SNOWE +0x00000071017A3D28,_ZN11SoundEvents11STEP_SNOW_2E +0x00000071017A3D30,_ZN11SoundEvents10DIG_SNOW_2E +0x00000071017A3D38,_ZN11SoundEvents11STEP_SNOW_3E +0x00000071017A3D40,_ZN11SoundEvents15MOB_SPIDER_IDLEE +0x00000071017A3D48,_ZN11SoundEvents16MOB_SPIDER_DEATHE +0x00000071017A3D50,_ZN11SoundEvents17MOB_SPIDER_IDLE_2E +0x00000071017A3D58,_ZN11SoundEvents15MOB_SPIDER_STEPE +0x00000071017A3D60,_ZN11SoundEvents14RANDOM_GLASS_2E +0x00000071017A3D68,_ZN11SoundEvents13RANDOM_BOW_11E +0x00000071017A3D70,_ZN11SoundEvents17ENTITY_SQUID_IDLEE +0x00000071017A3D78,_ZN11SoundEvents18ENTITY_SQUID_DEATHE +0x00000071017A3D80,_ZN11SoundEvents17ENTITY_SQUID_HURTE +0x00000071017A3D88,_ZN11SoundEvents11DIG_STONE_6E +0x00000071017A3D90,_ZN11SoundEvents14RANDOM_CLICK_7E +0x00000071017A3D98,_ZN11SoundEvents14RANDOM_CLICK_8E +0x00000071017A3DA0,_ZN11SoundEvents12STEP_STONE_9E +0x00000071017A3DA8,_ZN11SoundEvents13STEP_STONE_10E +0x00000071017A3DB0,_ZN11SoundEvents11DIG_STONE_7E +0x00000071017A3DB8,_ZN11SoundEvents14RANDOM_CLICK_9E +0x00000071017A3DC0,_ZN11SoundEvents15RANDOM_CLICK_10E +0x00000071017A3DC8,_ZN11SoundEvents13STEP_STONE_11E +0x00000071017A3DD0,_ZN11SoundEvents17ENTITY_STRAY_IDLEE +0x00000071017A3DD8,_ZN11SoundEvents18ENTITY_STRAY_DEATHE +0x00000071017A3DE0,_ZN11SoundEvents17ENTITY_STRAY_HURTE +0x00000071017A3DE8,_ZN11SoundEvents17ENTITY_STRAY_STEPE +0x00000071017A3DF0,_ZN11SoundEvents18ENCHANT_THORNS_HITE +0x00000071017A3DF8,_ZN11SoundEvents13RANDOM_FUSE_2E +0x00000071017A3E00,_ZN11SoundEvents14ITEM_TOTEM_USEE +0x00000071017A3E08,_ZN11SoundEvents15RANDOM_CLICK_11E +0x00000071017A3E10,_ZN11SoundEvents15RANDOM_CLICK_12E +0x00000071017A3E18,_ZN11SoundEvents15RANDOM_CLICK_13E +0x00000071017A3E20,_ZN11SoundEvents15RANDOM_BOWHIT_2E 0x00000071017A3E28,_ZN11SoundEvents12RANDOM_CLICKE +0x00000071017A3E30,_ZN11SoundEvents15ENTITY_VEX_IDLEE +0x00000071017A3E38,_ZN11SoundEvents17ENTITY_VEX_CHARGEE +0x00000071017A3E40,_ZN11SoundEvents16ENTITY_VEX_DEATHE +0x00000071017A3E48,_ZN11SoundEvents15ENTITY_VEX_HURTE +0x00000071017A3E50,_ZN11SoundEvents17MOB_VILLAGER_IDLEE +0x00000071017A3E58,_ZN11SoundEvents18MOB_VILLAGER_DEATHE +0x00000071017A3E60,_ZN11SoundEvents16MOB_VILLAGER_HITE +0x00000071017A3E68,_ZN11SoundEvents15MOB_VILLAGER_NOE +0x00000071017A3E70,_ZN11SoundEvents19MOB_VILLAGER_HAGGLEE +0x00000071017A3E78,_ZN11SoundEvents16MOB_VILLAGER_YESE +0x00000071017A3E80,_ZN11SoundEvents34ENTITY_VINDICATION_ILLAGER_AMBIENTE +0x00000071017A3E88,_ZN11SoundEvents32ENTITY_VINDICATION_ILLAGER_DEATHE +0x00000071017A3E90,_ZN11SoundEvents31ENTITY_VINDICATION_ILLAGER_HURTE +0x00000071017A3E98,_ZN11SoundEvents21BLOCK_WATERLILY_PLACEE +0x00000071017A3EA0,_ZN11SoundEvents12LIQUID_WATERE +0x00000071017A3EA8,_ZN11SoundEvents20AMBIENT_WEATHER_RAINE +0x00000071017A3EB0,_ZN11SoundEvents22AMBIENT_WEATHER_RAIN_2E +0x00000071017A3EB8,_ZN11SoundEvents17ENTITY_WITCH_IDLEE +0x00000071017A3EC0,_ZN11SoundEvents18ENTITY_WITCH_DEATHE +0x00000071017A3EC8,_ZN11SoundEvents18ENTITY_WITCH_DRINKE +0x00000071017A3ED0,_ZN11SoundEvents17ENTITY_WITCH_HURTE +0x00000071017A3ED8,_ZN11SoundEvents18ENTITY_WITCH_THROWE +0x00000071017A3EE0,_ZN11SoundEvents15MOB_WITHER_IDLEE +0x00000071017A3EE8,_ZN11SoundEvents20MOB_ZOMBIE_WOODBREAKE +0x00000071017A3EF0,_ZN11SoundEvents16MOB_WITHER_DEATHE +0x00000071017A3EF8,_ZN11SoundEvents15MOB_WITHER_HURTE +0x00000071017A3F00,_ZN11SoundEvents16MOB_WITHER_SHOOTE +0x00000071017A3F08,_ZN11SoundEvents19MOB_SKELETON_IDLE_2E +0x00000071017A3F10,_ZN11SoundEvents20MOB_SKELETON_DEATH_2E +0x00000071017A3F18,_ZN11SoundEvents19MOB_SKELETON_HURT_2E +0x00000071017A3F20,_ZN11SoundEvents19MOB_SKELETON_STEP_2E +0x00000071017A3F28,_ZN11SoundEvents16MOB_WITHER_SPAWNE +0x00000071017A3F30,_ZN11SoundEvents13MOB_WOLF_BARKE +0x00000071017A3F38,_ZN11SoundEvents14MOB_WOLF_DEATHE +0x00000071017A3F40,_ZN11SoundEvents14MOB_WOLF_GROWLE +0x00000071017A3F48,_ZN11SoundEvents13MOB_WOLF_HOWLE +0x00000071017A3F50,_ZN11SoundEvents13MOB_WOLF_HURTE +0x00000071017A3F58,_ZN11SoundEvents16MOB_WOLF_PANTINGE +0x00000071017A3F60,_ZN11SoundEvents14MOB_WOLF_SHAKEE +0x00000071017A3F68,_ZN11SoundEvents13MOB_WOLF_STEPE +0x00000071017A3F70,_ZN11SoundEvents14MOB_WOLF_WHINEE +0x00000071017A3F78,_ZN11SoundEvents23BLOCK_WOODEN_DOOR_CLOSEE +0x00000071017A3F80,_ZN11SoundEvents22BLOCK_WOODEN_DOOR_OPENE +0x00000071017A3F88,_ZN11SoundEvents27BLOCK_WOODEN_TRAPDOOR_CLOSEE +0x00000071017A3F90,_ZN11SoundEvents26BLOCK_WOODEN_TRAPDOOR_OPENE +0x00000071017A3F98,_ZN11SoundEvents10DIG_WOOD_4E +0x00000071017A3FA0,_ZN11SoundEvents15RANDOM_CLICK_14E +0x00000071017A3FA8,_ZN11SoundEvents15RANDOM_CLICK_15E +0x00000071017A3FB0,_ZN11SoundEvents9STEP_WOODE +0x00000071017A3FB8,_ZN11SoundEvents11STEP_WOOD_2E +0x00000071017A3FC0,_ZN11SoundEvents10DIG_WOOD_5E +0x00000071017A3FC8,_ZN11SoundEvents15RANDOM_CLICK_16E +0x00000071017A3FD0,_ZN11SoundEvents15RANDOM_CLICK_17E +0x00000071017A3FD8,_ZN11SoundEvents11STEP_WOOD_3E +0x00000071017A3FE0,_ZN11SoundEvents15MOB_ZOMBIE_IDLEE +0x00000071017A3FE8,_ZN11SoundEvents15MOB_ZOMBIE_WOODE +0x00000071017A3FF0,_ZN11SoundEvents16MOB_ZOMBIE_METALE +0x00000071017A3FF8,_ZN11SoundEvents22MOB_ZOMBIE_WOODBREAK_2E +0x00000071017A4000,_ZN11SoundEvents16MOB_ZOMBIE_DEATHE +0x00000071017A4008,_ZN11SoundEvents21MOB_HORSE_ZOMBIE_IDLEE +0x00000071017A4010,_ZN11SoundEvents22MOB_HORSE_ZOMBIE_DEATHE +0x00000071017A4018,_ZN11SoundEvents20MOB_HORSE_ZOMBIE_HITE +0x00000071017A4020,_ZN11SoundEvents15MOB_ZOMBIE_HURTE +0x00000071017A4028,_ZN11SoundEvents17MOB_ZOMBIE_INFECTE +0x00000071017A4030,_ZN11SoundEvents18MOB_ZOMBIEPIG_IDLEE +0x00000071017A4038,_ZN11SoundEvents19MOB_ZOMBIEPIG_ANGRYE +0x00000071017A4040,_ZN11SoundEvents19MOB_ZOMBIEPIG_DEATHE +0x00000071017A4048,_ZN11SoundEvents18MOB_ZOMBIEPIG_HURTE +0x00000071017A4050,_ZN11SoundEvents15MOB_ZOMBIE_STEPE +0x00000071017A4058,_ZN11SoundEvents17MOB_ZOMBIE_IDLE_2E +0x00000071017A4060,_ZN11SoundEvents17MOB_ZOMBIE_UNFECTE +0x00000071017A4068,_ZN11SoundEvents17MOB_ZOMBIE_REMEDYE +0x00000071017A4070,_ZN11SoundEvents18MOB_ZOMBIE_DEATH_2E +0x00000071017A4078,_ZN11SoundEvents17MOB_ZOMBIE_HURT_2E +0x00000071017A4080,_ZN11SoundEvents17MOB_ZOMBIE_STEP_2E +0x00000071017A4088,_ZN11SoundEvents13MG01_SHOWDOWNE +0x00000071017A4090,_ZN11SoundEvents16MG01_CELEBRATIONE +0x00000071017A4098,_ZN11SoundEvents10MG01_CHESTE +0x00000071017A40A0,_ZN11SoundEvents10MG01_DEATHE +0x00000071017A40A8,_ZN11SoundEvents10MG01_GRACEE +0x00000071017A40B0,_ZN11SoundEvents14MG01_GRACEZEROE +0x00000071017A40B8,_ZN11SoundEvents10MG01_LOBBYE +0x00000071017A40C0,_ZN11SoundEvents16MG01_LOBBYACCENTE +0x00000071017A40C8,_ZN11SoundEvents14MG01_LOBBYZEROE +0x00000071017A40D0,_ZN11SoundEvents14MG01_GAMESTARTE +0x00000071017A40D8,_ZN11SoundEvents19MG01_STARTCOUNTDOWNE +0x00000071017A40E0,_ZN11SoundEvents13MG02_SHOWDOWNE +0x00000071017A40E8,_ZN11SoundEvents14MG02_GAMESTARTE +0x00000071017A40F0,_ZN11SoundEvents12MG02_GAMEENDE +0x00000071017A40F8,_ZN11SoundEvents10MG02_DEATHE +0x00000071017A4100,_ZN11SoundEvents19MG02_STARTCOUNTDOWNE +0x00000071017A4108,_ZN11SoundEvents12MG02_FALLINGE +0x00000071017A4110,_ZN11SoundEvents10MG03_DEATHE +0x00000071017A4118,_ZN11SoundEvents15MG03_CHECKPOINTE 0x00000071017A4120,_ZN10SoundEvent11ENTER_BOOSTE +0x00000071017A4128,_ZN11SoundEvents13MG03_BESTTIMEE +0x00000071017A4130,_ZN11SoundEvents15MG03_FINISHLINEE +0x00000071017A4138,_ZN11SoundEvents24MG03_FINISHLINEBESTSCOREE +0x00000071017A4140,_ZN11SoundEvents23MG03_FINISHLINEBESTTIMEE +0x00000071017A4148,_ZN11SoundEvents18MG03_FINISHLINE1STE +0x00000071017A4150,_ZN11SoundEvents27MG03_FINISHLINE1STBESTSCOREE +0x00000071017A4158,_ZN11SoundEvents26MG03_FINISHLINE1STBESTTIMEE +0x00000071017A4160,_ZN11SoundEvents18MG03_FINISHLINE2NDE +0x00000071017A4168,_ZN11SoundEvents27MG03_FINISHLINE2NDBESTSCOREE +0x00000071017A4170,_ZN11SoundEvents26MG03_FINISHLINE2NDBESTTIMEE +0x00000071017A4178,_ZN11SoundEvents18MG03_FINISHLINE3RDE +0x00000071017A4180,_ZN11SoundEvents27MG03_FINISHLINE3RDBESTSCOREE +0x00000071017A4188,_ZN11SoundEvents26MG03_FINISHLINE3RDBESTTIMEE 0x00000071017A4190,_ZN10SoundEvent13ENTER_THERMALE +0x00000071017A4198,_ZN11SoundEvents11MG03_WINNERE +0x00000071017A41A0,_ZN11SoundEvents19MG03_WINNERANNOUNCEE +0x00000071017A41A8,_ZN11SoundEvents14MG03_BESTSCOREE +0x00000071017A41B0,_ZN11SoundEvents17MG03_REDALERTLOOPE +0x00000071017A41B8,_ZN11SoundEvents17MG03_FARALERTSOLOE +0x00000071017A41C0,_ZN11SoundEvents21MG03_EMERALDPOINTTICKE +0x00000071017A41C8,_ZN11SoundEvents20MG03_EMERALDPOINTTOKE +0x00000071017A41D0,_ZN11SoundEvents18MG03_GOLDPOINTTICKE +0x00000071017A41D8,_ZN11SoundEvents17MG03_GOLDPOINTTOKE +0x00000071017A41E0,_ZN11SoundEvents17MG03_DIAMONDPOINTE +0x00000071017A41E8,_ZN11SoundEvents12MG03_RESPAWNE +0x00000071017A41F0,_ZN11SoundEvents18MG03_COUNTDOWNZEROE +0x00000071017A41F8,_ZN11SoundEvents18MG03_FALLBIG_ALIASE +0x00000071017A4200,_ZN11SoundEvents20MG03_FALLSMALL_ALIASE +0x00000071017A4208,_ZN11SoundEvents14MG03_HIT_ALIASE +0x00000071017A4210,_ZN11SoundEvents4BACKE +0x00000071017A4218,_ZN11SoundEvents5CRAFTE +0x00000071017A4220,_ZN11SoundEvents9CRAFTFAILE +0x00000071017A4228,_ZN11SoundEvents5FOCUSE 0x00000071017A4230,_ZN10SoundEvent8UI_PRESSE +0x00000071017A4238,_ZN11SoundEvents6SCROLLE +0x00000071017A4240,_ZN11SoundEvents20BLOCK_NOTE_XYLOPHONEE +0x00000071017A4248,_ZN11SoundEvents15BLOCK_NOTE_BELLE +0x00000071017A4250,_ZN11SoundEvents16BLOCK_NOTE_CHIMEE +0x00000071017A4258,_ZN11SoundEvents16BLOCK_NOTE_FLUTEE +0x00000071017A4260,_ZN11SoundEvents17BLOCK_NOTE_GUITARE +0x00000071017A4268,_ZN11SoundEvents23ENTITY_BOAT_PADDLE_LANDE +0x00000071017A4270,_ZN11SoundEvents24ENTITY_BOAT_PADDLE_WATERE +0x00000071017A4278,_ZN11SoundEvents22ENTITY_BOBBER_RETRIEVEE +0x00000071017A4280,_ZN11SoundEvents24ENTITY_PLAYER_HURT_DROWNE +0x00000071017A4288,_ZN11SoundEvents26ENTITY_PLAYER_HURT_ON_FIREE +0x00000071017A4290,_ZN11SoundEvents20RANDOM_EXPLODE_ALIASE +0x00000071017A4298,_ZN11SoundEvents19RANDOM_SPLASH_ALIASE +0x00000071017A42A0,_ZN11SoundEvents21RANDOM_SPLASH_ALIAS_2E +0x00000071017A42A8,_ZN11SoundEvents21RANDOM_SPLASH_ALIAS_8E +0x00000071017A42B0,_ZN11SoundEvents21RANDOM_SPLASH_ALIAS_3E +0x00000071017A42B8,_ZN11SoundEvents21RANDOM_SPLASH_ALIAS_4E +0x00000071017A42C0,_ZN11SoundEvents21RANDOM_SPLASH_ALIAS_5E +0x00000071017A42C8,_ZN11SoundEvents21RANDOM_SPLASH_ALIAS_6E +0x00000071017A42D0,_ZN11SoundEvents21RANDOM_SPLASH_ALIAS_7E 0x00000071017A42D8,_ZN9SoundType4WOODE -0x00000071017A42E0,SoundType::DIRT -0x00000071017A42E8,SoundType::GRASS -0x00000071017A42F0,SoundType::STONE -0x00000071017A4318,SoundType::SNOW +0x00000071017A42E0,_ZN9SoundType4DIRTE +0x00000071017A42E8,_ZN9SoundType5GRASSE +0x00000071017A42F0,_ZN9SoundType5STONEE +0x00000071017A42F8,_ZN9SoundType5METALE +0x00000071017A4300,_ZN9SoundType5GLASSE +0x00000071017A4308,_ZN9SoundType4WOOLE +0x00000071017A4310,_ZN9SoundType4SANDE +0x00000071017A4318,_ZN9SoundType4SNOWE +0x00000071017A4320,_ZN9SoundType6LADDERE +0x00000071017A4328,_ZN9SoundType5ANVILE +0x00000071017A4330,_ZN9SoundType11SLIME_BLOCKE 0x00000071017A4AC0,_ZN10StoneBlock7VARIANTE 0x00000071017A4AC8,_ZN10StoneBlock7Variant5STONEE 0x00000071017A4AD0,_ZN10StoneBlock7Variant7GRANITEE @@ -920,10 +1537,13 @@ 0x00000071017A4BE0,_ZN15StoneBrickBlock7Variant7CRACKEDE 0x00000071017A4BE8,_ZN15StoneBrickBlock7Variant8CHISELEDE 0x00000071017A53F8,SynchedEntityData__sIdMap +0x00000071017A58E8,_ZN4Vec34ZEROE 0x00000071017A5ED8,_ZZN10StoneBlock26createBlockStateDefinitionEvE10properties +0x00000071017A66C8,_ZN11ColourTable14s_nameToColourE 0x00000071017A8380,_ZN3fui9sInstanceE 0x00000071017AA788,CGameNetworkManager__sInstance 0x00000071017AA808,_ZN19ConsoleUIController9sInstanceE +0x00000071017BE240,_ZN8Tutorial11STATE_ORDERE 0x00000071017C0A20,_ZN20CConsoleMinecraftApp9sInstanceE 0x00000071017C0A60,_ZN10DLCManager9sInstanceE 0x00000071017C1600,StringTable::instance @@ -956,7 +1576,7 @@ 0x00000071017C57B8,_ZN9Minecraft9sInstanceE 0x00000071017C5884,_ZN9Minecraft4sUnkE 0x00000071017C5888,_ZN15MinecraftServer9sInstanceE -0x00000071017DA3C0,TexturePackRepository::sDefaultTexturePack +0x00000071017DA3C0,_ZN21TexturePackRepository19sDefaultTexturePackE 0x00000071017DB488,Compression::tlsIndex 0x00000071017DB490,Compression::threadStorage 0x00000071017DB4A0,_ZL29stbi__vertically_flip_on_load diff --git a/data/mcswitch_functions.csv b/data/mcswitch_functions.csv index 186c2e38..5c469487 100644 --- a/data/mcswitch_functions.csv +++ b/data/mcswitch_functions.csv @@ -1799,13 +1799,13 @@ Address,Quality,Size,Name 0x00000071000441a4,U,000424,_ZN14BiomeDecoratorC2Ev 0x000000710004434c,U,000052,_ZN12ReedsFeatureC1Ev 0x0000007100044380,U,000052,_ZN13CactusFeatureC1Ev -0x00000071000443b4,O,000052,_ZN16WaterlilyFeatureC1Ev +0x00000071000443b4,O,000052,_ZN16WaterlilyFeatureC2Ev 0x00000071000443e8,U,000484,_ZN14BiomeDecoratorD2Ev 0x00000071000445cc,U,000036,_ZN14BiomeDecoratorD0Ev 0x00000071000445f0,U,001040,_ZN14BiomeDecorator8decorateEP5LevelR6RandomP5BiomeRK8BlockPos 0x0000007100044a00,O,000096,_ZNK10BlockState8setValueIPN10StoneBlock7VariantEEEPKS_P8PropertyT_ 0x0000007100044a60,U,004100,_ZN14BiomeDecorator8decorateEP5BiomeP5LevelR6Random -0x0000007100045a64,O,000052,_ZN14PumpkinFeatureC1Ev +0x0000007100045a64,O,000052,_ZN14PumpkinFeatureC2Ev 0x0000007100045a98,U,000416,_ZN14BiomeDecorator12decorateOresEP5LevelR6Random 0x0000007100045c38,U,000300, 0x0000007100045d64,U,000268, @@ -2319,7 +2319,7 @@ Address,Quality,Size,Name 0x00000071000628b0,U,000028, 0x00000071000628cc,U,000092,_ZN23BlockRegionUpdatePacketD2Ev 0x0000007100062928,U,000056, -0x0000007100062960,U,000004,_ZN6PacketD2Ev +0x0000007100062960,O,000004,_ZN6PacketD2Ev 0x0000007100062964,U,000036,_ZN23BlockRegionUpdatePacketD0Ev 0x0000007100062988,U,000100,_ZN23BlockRegionUpdatePacketC1Ev 0x00000071000629ec,U,000976,_ZN23BlockRegionUpdatePacketC_gen @@ -4201,7 +4201,7 @@ Address,Quality,Size,Name 0x00000071000b49f0,O,000024,_ZNSt3__113unordered_mapI16ResourceLocation11eINSTANCEOFNS_4hashIS1_EENS_8equal_toIS1_EENS_9allocatorINS_4pairIKS1_S2_EEEEE2atERS9_ 0x00000071000b4a08,M,000300,_ZNSt3__112__hash_tableINS_17__hash_value_typeI16ResourceLocation11eINSTANCEOFEENS_22__unordered_map_hasherIS2_S4_NS_4hashIS2_EELb1EEENS_21__unordered_map_equalIS2_S4_NS_8equal_toIS2_EELb1EEENS_9allocatorIS4_EEE4findIS2_EENS_15__hash_iteratorIPNS_11__hash_nodeIS4_PvEEEERKT_ 0x00000071000b4b34,M,000008,_ZNKSt3__14hashI16ResourceLocationEclERKS1_ -0x00000071000b4b3c,M,000012,_ZNK16ResourceLocationeqERKS_ +0x00000071000b4b3c,M,000012,_ZNKSt3__18equal_toI16ResourceLocationEclERKS1_S4_ 0x00000071000b4b48,U,000604, 0x00000071000b4da4,O,000108,_ZNSt3__112__hash_tableINS_17__hash_value_typeI16ResourceLocation11eINSTANCEOFEENS_22__unordered_map_hasherIS2_S4_NS_4hashIS2_EELb1EEENS_21__unordered_map_equalIS2_S4_NS_8equal_toIS2_EELb1EEENS_9allocatorIS4_EEE21__construct_node_hashIRKNS_21piecewise_construct_tEJNS_5tupleIJRKS2_EEENSK_IJEEEEEENS_10unique_ptrINS_11__hash_nodeIS4_PvEENS_22__hash_node_destructorINSD_ISS_EEEEEEmOT_DpOT0_ 0x00000071000b4e10,U,000932, @@ -6298,8 +6298,8 @@ Address,Quality,Size,Name 0x00000071000e6c88,U,000056, 0x00000071000e6cc0,U,000332, 0x00000071000e6e0c,U,000192, -0x00000071000e6ecc,U,000024, -0x00000071000e6ee4,U,000040, +0x00000071000e6ecc,O,000024,_ZN14XLockFreeStackIhEC2Ev +0x00000071000e6ee4,O,000040,_ZN14XLockFreeStackIhED2Ev 0x00000071000e6f0c,U,000012, 0x00000071000e6f18,U,000100, 0x00000071000e6f7c,O,000072,_ZN22CompressedBlockStorage6createEjj @@ -6323,10 +6323,10 @@ Address,Quality,Size,Name 0x00000071000e85cc,U,000252, 0x00000071000e86c8,U,000284, 0x00000071000e87e4,O,000068,_ZN22CompressedBlockStorage10staticCtorEv -0x00000071000e8828,U,000004, -0x00000071000e882c,U,000108, +0x00000071000e8828,O,000004,_ZN14XLockFreeStackIhE11doSomethingEv +0x00000071000e882c,O,000108,_ZN14XLockFreeStackIhE4PushEPh 0x00000071000e8898,M,000156,_ZN22CompressedBlockStorage4tickEv -0x00000071000e8934,U,000096,_ZN14XLockFreeStackIhE3PopEv +0x00000071000e8934,O,000096,_ZN14XLockFreeStackIhE3PopEv 0x00000071000e8994,U,000124, 0x00000071000e8a10,O,000100,_ZN22CompressedBlockStorage5writeEP16DataOutputStream 0x00000071000e8a74,O,000164,_ZN22CompressedBlockStorage4readEP15DataInputStream @@ -16936,8 +16936,8 @@ Address,Quality,Size,Name 0x000000710026ab1c,O,000324,_ZN21NetherFlatLevelSource11createChunkEii 0x000000710026ac60,O,000016,_ZN21NetherFlatLevelSource10lightChunkEP10LevelChunk 0x000000710026ac70,M,000604,_ZN21NetherFlatLevelSource11postProcessEii -0x000000710026aecc,O,000052,_ZN15HellFireFeatureC1Ev -0x000000710026af00,O,000052,_ZN15LightGemFeatureC1Ev +0x000000710026aecc,O,000052,_ZN15HellFireFeatureC2Ev +0x000000710026af00,O,000052,_ZN15LightGemFeatureC2Ev 0x000000710026af34,O,000068,_ZN21NetherFlatLevelSource9getMobsAtEP11MobCategoryRK8BlockPos 0x000000710026af78,O,000008,_ZN21NetherFlatLevelSource22postProcessLoadedChunkEP10LevelChunkii 0x000000710026af80,O,000008,_ZN21NetherFlatLevelSource21findNearestMapFeatureEP5LevelRKNSt3__112basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEERK8BlockPosb @@ -17495,7 +17495,7 @@ Address,Quality,Size,Name 0x000000710028bd18,O,000056,_ZN31ServerboundContainerClosePacket6createEv 0x000000710028bd50,U,000056,_ZN30ServerboundCustomPayloadPacket6createEv 0x000000710028bd88,O,000056,_ZN26ServerboundKeepAlivePacket6createEv -0x000000710028bdc0,U,000056,_ZN32ServerboundPlayerAbilitiesPacket6createEv +0x000000710028bdc0,O,000056,_ZN32ServerboundPlayerAbilitiesPacket6createEv 0x000000710028bdf8,O,000056,_ZN29ServerboundResourcePackPacket6createEv 0x000000710028be30,O,000056,_ZN31ServerboundSetCarriedItemPacket6createEv 0x000000710028be68,U,000056,_ZN27ServerboundSignUpdatePacket6createEv @@ -17815,7 +17815,7 @@ Address,Quality,Size,Name 0x0000007100294a00,U,000004, 0x0000007100294a04,U,000004,_ZN16PerformanceTimerC2Ev 0x0000007100294a08,U,000004,_ZN16PerformanceTimer16PrintElapsedTimeERKNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEE -0x0000007100294a0c,U,000036,_ZN6PacketD0Ev +0x0000007100294a0c,M,000036,_ZN6PacketD0Ev 0x0000007100294a30,O,000004,_ZN8MaterialD2Ev 0x0000007100294a34,O,000036,_ZN8MaterialD0Ev 0x0000007100294a58,U,000036,_ZN11LadderBlockD0Ev @@ -18806,13 +18806,13 @@ Address,Quality,Size,Name 0x00000071002a10fc,U,000004,_ZNSt3__120__shared_ptr_pointerIP30ServerboundCustomPayloadPacketNS_14default_deleteIS1_EENS_9allocatorIS1_EEE21__on_zero_shared_weakEv 0x00000071002a1100,U,000016,_ZNSt3__110shared_ptrI30ServerboundCustomPayloadPacketED2Ev 0x00000071002a1110,U,000016,_ZNSt3__18weak_ptrI30ServerboundCustomPayloadPacketED2Ev -0x00000071002a1120,U,000216,_ZNSt3__120__shared_ptr_pointerIP32ServerboundPlayerAbilitiesPacketNS_14default_deleteIS1_EENS_9allocatorIS1_EEEC_gen -0x00000071002a11f8,U,000036,_ZNSt3__120__shared_ptr_pointerIP32ServerboundPlayerAbilitiesPacketNS_14default_deleteIS1_EENS_9allocatorIS1_EEED0Ev -0x00000071002a121c,U,000024,_ZNSt3__120__shared_ptr_pointerIP32ServerboundPlayerAbilitiesPacketNS_14default_deleteIS1_EENS_9allocatorIS1_EEE16__on_zero_sharedEv -0x00000071002a1234,U,000028,_ZNKSt3__120__shared_ptr_pointerIP32ServerboundPlayerAbilitiesPacketNS_14default_deleteIS1_EENS_9allocatorIS1_EEE13__get_deleterERKSt9type_info -0x00000071002a1250,U,000004,_ZNSt3__120__shared_ptr_pointerIP32ServerboundPlayerAbilitiesPacketNS_14default_deleteIS1_EENS_9allocatorIS1_EEE21__on_zero_shared_weakEv -0x00000071002a1254,U,000016,_ZNSt3__110shared_ptrI32ServerboundPlayerAbilitiesPacketED2Ev -0x00000071002a1264,U,000016,_ZNSt3__18weak_ptrI32ServerboundPlayerAbilitiesPacketED2Ev +0x00000071002a1120,O,000216,_ZNSt3__110shared_ptrI6PacketEC2I32ServerboundPlayerAbilitiesPacketEEPT_NS_9enable_ifIXsr14is_convertibleIS6_PS1_EE5valueENS2_5__natEE4typeE +0x00000071002a11f8,O,000036,_ZNSt3__120__shared_ptr_pointerIP32ServerboundPlayerAbilitiesPacketNS_14default_deleteIS1_EENS_9allocatorIS1_EEED0Ev +0x00000071002a121c,O,000024,_ZNSt3__120__shared_ptr_pointerIP32ServerboundPlayerAbilitiesPacketNS_14default_deleteIS1_EENS_9allocatorIS1_EEE16__on_zero_sharedEv +0x00000071002a1234,O,000028,_ZNKSt3__120__shared_ptr_pointerIP32ServerboundPlayerAbilitiesPacketNS_14default_deleteIS1_EENS_9allocatorIS1_EEE13__get_deleterERKSt9type_info +0x00000071002a1250,O,000004,_ZNSt3__120__shared_ptr_pointerIP32ServerboundPlayerAbilitiesPacketNS_14default_deleteIS1_EENS_9allocatorIS1_EEE21__on_zero_shared_weakEv +0x00000071002a1254,O,000016,_ZNSt3__110shared_ptrI32ServerboundPlayerAbilitiesPacketED2Ev +0x00000071002a1264,O,000016,_ZNSt3__18weak_ptrI32ServerboundPlayerAbilitiesPacketED2Ev 0x00000071002a1274,O,000216,_ZNSt3__110shared_ptrI6PacketEC2I29ServerboundResourcePackPacketEEPT_NS_9enable_ifIXsr14is_convertibleIS6_PS1_EE5valueENS2_5__natEE4typeE 0x00000071002a134c,O,000036,_ZNSt3__120__shared_ptr_pointerIP29ServerboundResourcePackPacketNS_14default_deleteIS1_EENS_9allocatorIS1_EEED0Ev 0x00000071002a1370,O,000024,_ZNSt3__120__shared_ptr_pointerIP29ServerboundResourcePackPacketNS_14default_deleteIS1_EENS_9allocatorIS1_EEE16__on_zero_sharedEv @@ -21622,21 +21622,21 @@ Address,Quality,Size,Name 0x00000071003105a0,O,000080,_ZN27ServerboundPaddleBoatPacket6handleEP14PacketListener 0x00000071003105f0,O,000008,_ZN27ServerboundPaddleBoatPacket7getLeftEv 0x00000071003105f8,O,000008,_ZN27ServerboundPaddleBoatPacket8getRightEv -0x0000007100310600,U,000064,_ZN32ServerboundPlayerAbilitiesPacketC1Ev -0x0000007100310640,U,000132,_ZN32ServerboundPlayerAbilitiesPacketC_gen -0x00000071003106c4,U,000012, -0x00000071003106d0,U,000012, -0x00000071003106dc,U,000012, -0x00000071003106e8,U,000012, -0x00000071003106f4,U,000008, -0x00000071003106fc,U,000008, -0x0000007100310704,U,000152,_ZN32ServerboundPlayerAbilitiesPacket4readEP15DataInputStream -0x000000710031079c,U,000168,_ZN32ServerboundPlayerAbilitiesPacket5writeEP16DataOutputStream -0x0000007100310844,U,000008, -0x000000710031084c,U,000008, -0x0000007100310854,U,000008, -0x000000710031085c,U,000008, -0x0000007100310864,U,000080,_ZN32ServerboundPlayerAbilitiesPacket6handleEP14PacketListener +0x0000007100310600,O,000064,_ZN32ServerboundPlayerAbilitiesPacketC1Ev +0x0000007100310640,O,000132,_ZN32ServerboundPlayerAbilitiesPacketC1EP9Abilities +0x00000071003106c4,O,000012,_ZN32ServerboundPlayerAbilitiesPacket15setInvulnerableEb +0x00000071003106d0,O,000012,_ZN32ServerboundPlayerAbilitiesPacket9setFlyingEb +0x00000071003106dc,O,000012,_ZN32ServerboundPlayerAbilitiesPacket9setCanFlyEb +0x00000071003106e8,O,000012,_ZN32ServerboundPlayerAbilitiesPacket13setInstabuildEb +0x00000071003106f4,O,000008,_ZN32ServerboundPlayerAbilitiesPacket14setFlyingSpeedEf +0x00000071003106fc,O,000008,_ZN32ServerboundPlayerAbilitiesPacket15setWalkingSpeedEf +0x0000007100310704,O,000152,_ZN32ServerboundPlayerAbilitiesPacket4readEP15DataInputStream +0x000000710031079c,O,000168,_ZN32ServerboundPlayerAbilitiesPacket5writeEP16DataOutputStream +0x0000007100310844,O,000008,_ZN32ServerboundPlayerAbilitiesPacket14isInvulnerableEv +0x000000710031084c,O,000008,_ZN32ServerboundPlayerAbilitiesPacket8isFlyingEv +0x0000007100310854,O,000008,_ZN32ServerboundPlayerAbilitiesPacket6canFlyEv +0x000000710031085c,O,000008,_ZN32ServerboundPlayerAbilitiesPacket13canInstabuildEv +0x0000007100310864,O,000080,_ZN32ServerboundPlayerAbilitiesPacket6handleEP14PacketListener 0x00000071003108b4,O,000068,_ZN29ServerboundPlayerActionPacketC1Ev 0x00000071003108f8,U,000120,_ZN29ServerboundPlayerActionPacketC_gen 0x0000007100310970,O,000116,_ZN29ServerboundPlayerActionPacket4readEP15DataInputStream @@ -22490,9 +22490,9 @@ Address,Quality,Size,Name 0x0000007100326b2c,U,000040,_ZN27ServerboundPaddleBoatPacketD2Ev 0x0000007100326b54,U,000036,_ZN27ServerboundPaddleBoatPacketD0Ev 0x0000007100326b78,O,000008,_ZN27ServerboundPaddleBoatPacket11getPacketIdEv -0x0000007100326b80,U,000040,_ZN32ServerboundPlayerAbilitiesPacketD2Ev -0x0000007100326ba8,U,000036,_ZN32ServerboundPlayerAbilitiesPacketD0Ev -0x0000007100326bcc,U,000008,_ZN32ServerboundPlayerAbilitiesPacket11getPacketIdEv +0x0000007100326b80,O,000040,_ZN32ServerboundPlayerAbilitiesPacketD2Ev +0x0000007100326ba8,O,000036,_ZN32ServerboundPlayerAbilitiesPacketD0Ev +0x0000007100326bcc,O,000008,_ZN32ServerboundPlayerAbilitiesPacket11getPacketIdEv 0x0000007100326bd4,O,000040,_ZN29ServerboundPlayerActionPacketD2Ev 0x0000007100326bfc,O,000036,_ZN29ServerboundPlayerActionPacketD0Ev 0x0000007100326c20,O,000008,_ZN29ServerboundPlayerActionPacket11getPacketIdEv @@ -23404,7 +23404,7 @@ Address,Quality,Size,Name 0x0000007100341f90,O,000064,_ZNSt3__110shared_ptrI27ServerboundMovePlayerPacketEC2IS1_EERKNS_8weak_ptrIT_EENS_9enable_ifIXsr14is_convertibleIPS5_PS1_EE5valueENS2_5__natEE4typeE 0x0000007100341fd0,O,000064,_ZNSt3__110shared_ptrI28ServerboundMoveVehiclePacketEC2IS1_EERKNS_8weak_ptrIT_EENS_9enable_ifIXsr14is_convertibleIPS5_PS1_EE5valueENS2_5__natEE4typeE 0x0000007100342010,O,000064,_ZNSt3__110shared_ptrI27ServerboundPaddleBoatPacketEC2IS1_EERKNS_8weak_ptrIT_EENS_9enable_ifIXsr14is_convertibleIPS5_PS1_EE5valueENS2_5__natEE4typeE -0x0000007100342050,U,000064, +0x0000007100342050,O,000064,_ZNSt3__110shared_ptrI32ServerboundPlayerAbilitiesPacketEC2IS1_EERKNS_8weak_ptrIT_EENS_9enable_ifIXsr14is_convertibleIPS5_PS1_EE5valueENS2_5__natEE4typeE 0x0000007100342090,O,000064,_ZNSt3__110shared_ptrI29ServerboundPlayerActionPacketEC2IS1_EERKNS_8weak_ptrIT_EENS_9enable_ifIXsr14is_convertibleIPS5_PS1_EE5valueENS2_5__natEE4typeE 0x00000071003420d0,O,000064,_ZNSt3__110shared_ptrI30ServerboundPlayerCommandPacketEC2IS1_EERKNS_8weak_ptrIT_EENS_9enable_ifIXsr14is_convertibleIPS5_PS1_EE5valueENS2_5__natEE4typeE 0x0000007100342110,O,000064,_ZNSt3__110shared_ptrI28ServerboundPlayerInputPacketEC2IS1_EERKNS_8weak_ptrIT_EENS_9enable_ifIXsr14is_convertibleIPS5_PS1_EE5valueENS2_5__natEE4typeE @@ -23930,24 +23930,24 @@ Address,Quality,Size,Name 0x000000710034f0d4,U,000076,_ZN13SoulSandBlockC_gen 0x000000710034f120,U,000016,_ZN13SoulSandBlock11getClipAABBEPK10BlockStateP11LevelSourceRK8BlockPos 0x000000710034f130,U,000044,_ZN13SoulSandBlock12entityInsideEP5LevelRK8BlockPosPK10BlockStateRKSt10shared_ptrI6EntityE -0x000000710034f15c,U,000068, -0x000000710034f1a0,U,000072, -0x000000710034f1e8,U,000016, -0x000000710034f1f8,U,000008, -0x000000710034f200,U,000016, -0x000000710034f210,U,000008, +0x000000710034f15c,O,000068,_ZN10SoundEventC1ENSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEEf +0x000000710034f1a0,M,000072,_ZN10SoundEventC1ENSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEEfi +0x000000710034f1e8,O,000016,_ZN10SoundEvent7getNameEv +0x000000710034f1f8,O,000008,_ZN10SoundEvent8getRangeEv +0x000000710034f200,O,000016,_ZN10SoundEvent9isUISoundEv +0x000000710034f210,O,000008,_ZN10SoundEvent5setIdEi 0x000000710034f218,U,000140,_ZN14MappedRegistryI16ResourceLocationPK10SoundEventNSt3__14hashIS0_EENS4_8equal_toIS0_EENS5_IS3_EENS7_IS3_EEEC_gen 0x000000710034f2a4,U,000072,_ZN14MappedRegistryI16ResourceLocationPK10SoundEventNSt3__14hashIS0_EENS4_8equal_toIS0_EENS5_IS3_EENS7_IS3_EEEC_gen2 -0x000000710034f2ec,U,042176,_ZN11SoundEvents10staticCtorEv -0x00000071003597ac,U,000164, -0x0000007100359850,U,000096,_ZN11SoundEvents13registerSoundERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEE +0x000000710034f2ec,O,042176,_ZN11SoundEvents10staticCtorEv +0x00000071003597ac,O,000164,_ZN10SoundEvent13registerEventEPS_ +0x0000007100359850,O,000096,_ZN11SoundEvents13registerSoundERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEE 0x00000071003598b0,U,000116,registerMapping -0x0000007100359924,U,001192,_ZN9SoundType10StaticCtorEv -0x0000007100359dcc,U,000024,_ZN9SoundTypeC1EffPK10SoundEventS2_S2_S2_S2_ -0x0000007100359de4,U,000008, -0x0000007100359dec,U,000008, -0x0000007100359df4,U,000008, -0x0000007100359dfc,U,000008, +0x0000007100359924,O,001192,_ZN9SoundType10staticCtorEv +0x0000007100359dcc,O,000024,_ZN9SoundTypeC1EffPK10SoundEventS2_S2_S2_S2_ +0x0000007100359de4,O,000008,_ZN9SoundType13getBreakSoundEv +0x0000007100359dec,O,000008,_ZN9SoundType12getStepSoundEv +0x0000007100359df4,O,000008,_ZN9SoundType11getHitSoundEv +0x0000007100359dfc,O,000008,_ZN9SoundType12getFallSoundEv 0x0000007100359e04,U,000064,_ZN17SparseDataStorage10staticCtorEv 0x0000007100359e44,U,000028, 0x0000007100359e60,U,000024, @@ -27822,7 +27822,7 @@ Address,Quality,Size,Name 0x00000071003f4d1c,U,000604, 0x00000071003f4f78,U,000108, 0x00000071003f4fe4,U,000244,ConvertSoundPathToName__11SoundEngineFRCQ2_3std78basic_string__tm__58_wQ2_3std20char_traits__tm__2_wQ2_3std18allocator__tm__2_wb -0x00000071003f50d8,U,000040, +0x00000071003f50d8,O,000040,_ZN21TexturePackRepository14isUsingDefaultEv 0x00000071003f5100,U,000056, 0x00000071003f5138,U,000044, 0x00000071003f5164,U,000184, @@ -28018,12 +28018,12 @@ Address,Quality,Size,Name 0x00000071003fa798,U,000044, 0x00000071003fa7c4,U,000680, 0x00000071003faa6c,U,000004, -0x00000071003faa70,U,000156,_ZN11ColourTable10staticCtorEv -0x00000071003fab0c,U,000004, -0x00000071003fab10,U,000172, -0x00000071003fabbc,U,000064, -0x00000071003fabfc,U,000056, -0x00000071003fac34,U,000008,_ZN11ColourTable9getColourE16eMinecraftColour +0x00000071003faa70,O,000156,_ZN11ColourTable10staticCtorEv +0x00000071003fab0c,O,000004,_ZN11ColourTableC1EPhj +0x00000071003fab10,M,000172,_ZN11ColourTable4readEPhj +0x00000071003fabbc,O,000064,_ZN11ColourTableC1ERKS_Phj +0x00000071003fabfc,O,000056,_ZN11ColourTable9setColourERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEEj +0x00000071003fac34,O,000008,_ZN11ColourTable9getColourE16eMinecraftColour 0x00000071003fac3c,U,000236,_ZNSt3__115basic_stringbufIwNS_11char_traitsIwEENS_9allocatorIwEEEC_gen20 0x00000071003fad28,U,000288, 0x00000071003fae48,U,000076,_ZN16cNintendoDLCInfoC_gen @@ -30438,11 +30438,11 @@ Address,Quality,Size,Name 0x0000007100487ad0,U,000276,_ZN3fuiC1Ev 0x0000007100487be4,O,000048,_ZN3fui13setScreenSizeEff 0x0000007100487c14,U,000728,_ZN3fui4loadE15arrayWithLengthIhEbi -0x0000007100487eec,U,000564,_ZN7fuiFile4loadE15arrayWithLengthIhEi +0x0000007100487eec,M,000564,_ZN7fuiFile4loadE15arrayWithLengthIhEi 0x0000007100488120,O,000008,_ZN7fuiFile8setIndexEi 0x0000007100488128,U,000084,_ZN3fui26allocatePermanentFileIndexEi 0x000000710048817c,U,000040, -0x00000071004881a4,U,000264,_ZN7fuiFile17resolveReferencesEPS_ +0x00000071004881a4,M,000264,_ZN7fuiFile17resolveReferencesEPS_ 0x00000071004882ac,O,000008,_ZN18fuiRenderNodeStage8addChildEP13fuiRenderNode 0x00000071004882b4,M,000280,_ZN3fui11unloadSceneEP7fuiFile 0x00000071004883cc,U,000012, @@ -30453,8 +30453,8 @@ Address,Quality,Size,Name 0x0000007100488588,O,000012,_ZN3fui6renderEP7fuiFileffff 0x0000007100488594,O,000560,_ZN3fui6renderEP7fuiFileffffff 0x00000071004887c4,U,000104,_ZN3fui9preRenderEP7fuiFile -0x000000710048882c,M,000104,_ZN3fui21dispatchKeyboardEventEP7fuiFilebi -0x0000007100488894,M,000104,_ZN3fui22dispatchMouseMoveEventEP7fuiFileff +0x000000710048882c,O,000104,_ZN3fui21dispatchKeyboardEventEP7fuiFilebi +0x0000007100488894,O,000104,_ZN3fui22dispatchMouseMoveEventEP7fuiFileff 0x00000071004888fc,U,000168,_ZN3fui23dispatchEnterFrameEventEv 0x00000071004889a4,U,000020, 0x00000071004889b8,O,000016,_ZN13fuiRenderNode11disableCtorEv @@ -30500,19 +30500,19 @@ Address,Quality,Size,Name 0x0000007100489ea0,U,000048, 0x0000007100489ed0,U,000052, 0x0000007100489f04,O,000020,_ZN7fuiFileC1Ev -0x0000007100489f18,U,000192,_ZN7fuiFileD1Ev +0x0000007100489f18,M,000192,_ZN7fuiFileD1Ev 0x0000007100489fd8,M,000032,_ZN7fuiFile13addDataRegionEjjPPhPm 0x0000007100489ff8,U,000132,_ZN16fuiTimelineEventaSERK25fuiTimelineEvent_version0 0x000000710048a07c,U,000472,_ZN7fuiFile23initialiseRenderTextureEP9fuiBitmapb -0x000000710048a254,U,000044,setPlaying__21fuiRenderNodeTimelineFb -0x000000710048a280,U,000048,setFrame__21fuiRenderNodeTimelineFUi +0x000000710048a254,O,000044,_ZN21fuiRenderNodeTimeline10setPlayingEb +0x000000710048a280,M,000048,_ZN21fuiRenderNodeTimeline8setFrameEj 0x000000710048a2b0,O,000008,_ZN7fuiFile11getRootNodeEv 0x000000710048a2b8,O,000008,_ZN7fuiFile21setCustomDrawCallbackEPFvPvPKcP7fuiRectES0_ 0x000000710048a2c0,O,000008,_ZN7fuiFile13getStageWidthEv 0x000000710048a2c8,O,000008,_ZN7fuiFile14getStageHeightEv 0x000000710048a2d0,O,000268,_ZN13fuiRenderNodeC2EPS_S0_P9fuiObjectj14eFuiObjectTypehP7fuiRGBAhbP7fuiFile -0x000000710048a3dc,U,000068,_ZN13fuiRenderNodeD2Ev -0x000000710048a420,U,000036,_ZN13fuiRenderNodeD0Ev +0x000000710048a3dc,O,000068,_ZN13fuiRenderNodeD2Ev +0x000000710048a420,O,000036,_ZN13fuiRenderNodeD0Ev 0x000000710048a444,O,000004,_ZN13fuiRenderNode8shutdownEv 0x000000710048a448,O,000080,_ZN13fuiRenderNode18handleAddedToStageEv 0x000000710048a498,O,000008,_ZN13fuiRenderNode8getStageEv @@ -30626,33 +30626,33 @@ Address,Quality,Size,Name 0x000000710048ea80,U,000928, 0x000000710048ee20,O,000240,_ZN9fuiMatrix3mulERKS_S1_RS_ 0x000000710048ef10,O,000100,_ZN18fuiRenderNodeStageC2EP7fuiFile -0x000000710048ef74,U,000084,_ZN18fuiRenderNodeStageD2Ev +0x000000710048ef74,O,000084,_ZN18fuiRenderNodeStageD2Ev 0x000000710048efc8,O,000036,_ZN18fuiRenderNodeStageD0Ev -0x000000710048efec,U,000020, -0x000000710048f000,U,000016, -0x000000710048f010,U,000016, -0x000000710048f020,U,000016, -0x000000710048f030,U,000008, +0x000000710048efec,O,000020,_ZN18fuiRenderNodeStage6gatherEb +0x000000710048f000,O,000016,_ZN18fuiRenderNodeStage9preRenderEv +0x000000710048f010,O,000016,_ZN18fuiRenderNodeStage6renderEP7fuiRectP9fuiMatrix +0x000000710048f020,O,000016,_ZN18fuiRenderNodeStage8findNodeEPKc +0x000000710048f030,O,000008,_ZN18fuiRenderNodeStage13getStageWidthEv 0x000000710048f038,O,000008,_ZN18fuiRenderNodeStage14getStageHeightEv -0x000000710048f040,U,000208,_ZN21fuiRenderNodeTimelineC1EP13fuiRenderNodeS1_P9fuiObjectjhP7fuiRGBAhbP7fuiFile -0x000000710048f110,U,000088,_ZN21fuiRenderNodeTimeline8shutdownEv -0x000000710048f168,U,000168,_ZN21fuiRenderNodeTimelineD2Ev +0x000000710048f040,M,000208,_ZN21fuiRenderNodeTimelineC1EP13fuiRenderNodeS1_P9fuiObjectjhP7fuiRGBAhbP7fuiFile +0x000000710048f110,O,000088,_ZN21fuiRenderNodeTimeline8shutdownEv +0x000000710048f168,O,000168,_ZN21fuiRenderNodeTimelineD2Ev 0x000000710048f210,U,000092, 0x000000710048f26c,U,000056, 0x000000710048f2a4,U,000056, -0x000000710048f2dc,U,000036,_ZN21fuiRenderNodeTimelineD0Ev +0x000000710048f2dc,O,000036,_ZN21fuiRenderNodeTimelineD0Ev 0x000000710048f300,U,002704, 0x000000710048fd90,U,000312, 0x000000710048fec8,U,000524, 0x00000071004900d4,U,000052, -0x0000007100490108,U,000120,_ZN21fuiRenderNodeTimeline21expandBoundsFromChildER7fuiRect +0x0000007100490108,M,000120,_ZN21fuiRenderNodeTimeline21expandBoundsFromChildER7fuiRect 0x0000007100490180,U,001720, 0x0000007100490838,U,001120, -0x0000007100490c98,U,000096, +0x0000007100490c98,O,000096,_ZN21fuiRenderNodeTimeline9preRenderEv 0x0000007100490cf8,U,001196, -0x00000071004911a4,U,000092,_ZN21fuiRenderNodeTimeline18handleAddedToStageEv -0x0000007100491200,U,000112,_ZN21fuiRenderNodeTimeline8findNodeEPKc -0x0000007100491270,U,000180,_ZN21fuiRenderNodeTimeline15getNodeFromPathEPKc +0x00000071004911a4,O,000092,_ZN21fuiRenderNodeTimeline18handleAddedToStageEv +0x0000007100491200,O,000112,_ZN21fuiRenderNodeTimeline8findNodeEPKc +0x0000007100491270,O,000180,_ZN21fuiRenderNodeTimeline15getNodeFromPathEPKc 0x0000007100491324,U,000116,getFrame__21fuiRenderNodeTimelineFPCc 0x0000007100491398,U,000060,setFrame__21fuiRenderNodeTimelineFPCc 0x00000071004913d4,U,000012, @@ -30664,8 +30664,8 @@ Address,Quality,Size,Name 0x0000007100491544,U,000228, 0x0000007100491628,U,000588, 0x0000007100491874,U,000020, -0x0000007100491888,U,000084,_ZN21fuiRenderNodeTimeline20generateGlobalMatrixEv -0x00000071004918dc,U,000152,_ZN21fuiRenderNodeTimeline17updateBoundsLocalEv +0x0000007100491888,O,000084,_ZN21fuiRenderNodeTimeline20generateGlobalMatrixEv +0x00000071004918dc,O,000152,_ZN21fuiRenderNodeTimeline17updateBoundsLocalEv 0x0000007100491974,U,000044,_ZN17fuiTextureManagerC1Ev 0x00000071004919a0,U,000208,_ZN17fuiTextureManager10initialiseEv 0x0000007100491a70,U,000780, @@ -34897,7 +34897,7 @@ Address,Quality,Size,Name 0x000000710052427c,U,000088, 0x00000071005242d4,U,000208, 0x00000071005243a4,U,000432, -0x0000007100524554,U,020248,_ZN8Tutorial10staticCtorEv +0x0000007100524554,O,020248,_ZN8Tutorial10staticCtorEv 0x000000710052946c,U,020236,_ZN8Tutorial8AddHintsEv 0x000000710052e378,U,006848, 0x000000710052fe38,U,000128, @@ -35355,7 +35355,7 @@ Address,Quality,Size,Name 0x000000710054c770,U,000384,_ZN20UIComponent_Panorama6renderEiiN9C4JRender13eViewportTypeE 0x000000710054c8f0,U,000044,_ZN20UIComponent_Panorama12handleReloadEv 0x000000710054c91c,U,000416,_ZN28UIComponent_PressStartToPlayC1EiP7UILayer -0x000000710054cabc,U,000092,_ZN9UIControl10setVisibleEb +0x000000710054cabc,O,000092,_ZN9UIControl10setVisibleEb 0x000000710054cb18,U,000088, 0x000000710054cb70,U,000028, 0x000000710054cb8c,U,000048, @@ -35447,14 +35447,14 @@ Address,Quality,Size,Name 0x00000071005530e8,O,000172,_ZN9UIControl12setupControlEP7UISceneP13fuiRenderNodeRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE 0x0000007100553194,O,000096,_ZN9UIControl13UpdateControlEv 0x00000071005531f4,O,000072,_ZN9UIControl6ReInitEv -0x000000710055323c,U,000008, -0x0000007100553244,U,000008,_ZN9UIControl7getXPosEv -0x000000710055324c,U,000008,_ZN9UIControl7getYPosEv -0x0000007100553254,U,000008, -0x000000710055325c,U,000008, -0x0000007100553264,U,000068, -0x00000071005532a8,U,000048,_ZN9UIControl10getVisibleEb -0x00000071005532d8,U,000008,_ZN9UIControl15removeUINodeRefEv +0x000000710055323c,O,000008,_ZN9UIControl16getFuiRenderNodeEv +0x0000007100553244,O,000008,_ZN9UIControl7getXPosEv +0x000000710055324c,O,000008,_ZN9UIControl7getYPosEv +0x0000007100553254,O,000008,_ZN9UIControl8getWidthEv +0x000000710055325c,O,000008,_ZN9UIControl9getHeightEv +0x0000007100553264,O,000068,_ZN9UIControl8setWidthEf +0x00000071005532a8,M,000048,_ZN9UIControl10getVisibleEv +0x00000071005532d8,O,000008,_ZN9UIControl15removeUINodeRefEv 0x00000071005532e0,U,000160,_ZN19ConsoleUIControllerD2Ev 0x0000007100553380,O,000108,_ZN19ConsoleUIController4initEii 0x00000071005533ec,O,000028,_ZN19ConsoleUIController7preInitEii @@ -35668,17 +35668,17 @@ Address,Quality,Size,Name 0x000000710055b3a8,U,000204,_ZN16UIControl_Button4initE8UIStringi 0x000000710055b474,O,000076,_ZN16UIControl_Button6ReInitEv 0x000000710055b4c0,O,000064,_ZN16UIControl_Button4tickEv -0x000000710055b500,U,000096,_ZN16UIControl_Button9setEnableEbb +0x000000710055b500,O,000096,_ZN16UIControl_Button9setEnableEbb 0x000000710055b560,O,000092,_ZN16UIControl_Button8setFocusEb 0x000000710055b5bc,O,000048,_ZN20UIControl_ButtonListC1Ev 0x000000710055b5ec,O,000092,_ZN14UIControl_ListC2Ev -0x000000710055b648,U,000072,_ZN20UIControl_ButtonList12setupControlEP7UISceneP13fuiRenderNodeRKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEE -0x000000710055b690,U,000004, +0x000000710055b648,O,000072,_ZN20UIControl_ButtonList12setupControlEP7UISceneP13fuiRenderNodeRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE +0x000000710055b690,O,000004,_ZN14UIControl_List12setupControlEP7UISceneP13fuiRenderNodeRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE 0x000000710055b694,U,000008, 0x000000710055b69c,O,000008,_ZN7UIScene10getFuiFileEv 0x000000710055b6a4,O,000164,_ZN14UIControl_List10addElementEN9UIControl14eUIControlTypeEi 0x000000710055b748,U,000120, -0x000000710055b7c0,U,000132, +0x000000710055b7c0,U,000132,_ZN14UIControl_List4tickEv 0x000000710055b844,U,000120, 0x000000710055b8bc,U,000156, 0x000000710055b958,U,000156, @@ -35694,13 +35694,13 @@ Address,Quality,Size,Name 0x000000710055bc20,U,000056, 0x000000710055bc58,U,000016, 0x000000710055bc68,U,000012, -0x000000710055bc74,U,000048,_ZN16UIControl_CursorC1Ev -0x000000710055bca4,U,000072, +0x000000710055bc74,O,000048,_ZN16UIControl_CursorC1Ev +0x000000710055bca4,O,000072,_ZN16UIControl_Cursor12setupControlEP7UISceneP13fuiRenderNodeRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE 0x000000710055bcec,U,000072, 0x000000710055bd34,U,000168, 0x000000710055bddc,U,000016, 0x000000710055bdec,U,000048,_ZN22UIControl_DynamicLabelC1Ev -0x000000710055be1c,U,000056,_ZN15UIControl_LabelC1Ev +0x000000710055be1c,O,000056,_ZN15UIControl_LabelC1Ev 0x000000710055be54,U,000072, 0x000000710055be9c,U,000016, 0x000000710055beac,U,000004, @@ -35747,8 +35747,8 @@ Address,Quality,Size,Name 0x000000710055d65c,U,000076,_ZN19UIControl_HTMLLabel6ReInitEv 0x000000710055d6a8,U,000096, 0x000000710055d708,U,000144, -0x000000710055d798,U,000072,_ZN15UIControl_Label12setupControlEP7UISceneP13fuiRenderNodeRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE -0x000000710055d7e0,U,000080,_ZN15UIControl_Label6ReInitEv +0x000000710055d798,O,000072,_ZN15UIControl_Label12setupControlEP7UISceneP13fuiRenderNodeRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE +0x000000710055d7e0,O,000080,_ZN15UIControl_Label6ReInitEv 0x000000710055d830,U,000048,_ZN29UIControl_LayerIconButtonListC_gen 0x000000710055d860,U,000072, 0x000000710055d8a8,U,000012, @@ -35778,8 +35778,8 @@ Address,Quality,Size,Name 0x000000710055e004,O,000036,_ZN14UIControl_ListD0Ev 0x000000710055e028,U,000044, 0x000000710055e054,U,000124,_ZN14UIControl_List4initEi -0x000000710055e0d0,U,000088, -0x000000710055e128,U,000064, +0x000000710055e0d0,U,000088,_ZN14UIControl_List6ReInitEv +0x000000710055e128,U,000064,_ZN14UIControl_List13UpdateControlEv 0x000000710055e168,U,000056,_ZN14UIControl_List26PendingSetCurrentSelectionC_gen 0x000000710055e1a0,U,000048,_ZN14UIControl_List17PendingRemoveItemC_gen 0x000000710055e1d0,U,000008, @@ -35793,9 +35793,9 @@ Address,Quality,Size,Name 0x000000710055e358,U,000660, 0x000000710055e5ec,U,000144,__ct__25UIControl_MinecraftPlayerFv 0x000000710055e67c,U,000808, -0x000000710055e9a4,U,000048,_ZN19UIControl_MultiListC2Ev -0x000000710055e9d4,U,000072, -0x000000710055ea1c,U,000244, +0x000000710055e9a4,O,000048,_ZN19UIControl_MultiListC2Ev +0x000000710055e9d4,O,000072,_ZN19UIControl_MultiList12setupControlEP7UISceneP13fuiRenderNodeRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE +0x000000710055ea1c,U,000244,_ZN19UIControl_MultiList20setAllPossibleLabelsEijPPw 0x000000710055eb10,U,000056, 0x000000710055eb48,U,000060, 0x000000710055eb84,U,000056, @@ -35861,15 +35861,15 @@ Address,Quality,Size,Name 0x0000007100560860,U,000256, 0x0000007100560960,U,000008, 0x0000007100560968,U,000096, -0x00000071005609c8,U,000056,_ZN18UIControl_SlotListC1Ev -0x0000007100560a00,U,000084, -0x0000007100560a54,U,000040, +0x00000071005609c8,O,000056,_ZN18UIControl_SlotListC1Ev +0x0000007100560a00,O,000084,_ZN18UIControl_SlotList12setupControlEP7UISceneP13fuiRenderNodeRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE +0x0000007100560a54,O,000040,_ZN18UIControl_SlotList6ReInitEv 0x0000007100560a7c,U,000032, 0x0000007100560a9c,U,000080,_ZN18UIControl_SlotList8addSlotsEji 0x0000007100560aec,U,000084, 0x0000007100560b40,U,000028, 0x0000007100560b5c,U,000028, -0x0000007100560b78,U,000040, +0x0000007100560b78,U,000040,_ZN18UIControl_SlotList8setFocusEb 0x0000007100560ba0,U,000072,_ZN27UIControl_SpaceIndicatorBarC_gen 0x0000007100560be8,U,000072, 0x0000007100560c30,U,000100, @@ -35894,8 +35894,8 @@ Address,Quality,Size,Name 0x000000710056131c,U,000012, 0x0000007100561328,U,000008, 0x0000007100561330,U,000024, -0x0000007100561348,U,000048,_ZN15UIControl_TouchC1Ev -0x0000007100561378,U,000072, +0x0000007100561348,O,000048,_ZN15UIControl_TouchC1Ev +0x0000007100561378,O,000072,_ZN15UIControl_Touch12setupControlEP7UISceneP13fuiRenderNodeRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE 0x00000071005613c0,U,000040, 0x00000071005613e8,U,000040, 0x0000007100561410,U,001148, @@ -36972,7 +36972,7 @@ Address,Quality,Size,Name 0x0000007100596a64,U,000004, 0x0000007100596a68,U,000036,_ZN18LeaderboardManagerD0Ev 0x0000007100596a8c,U,000036,_ZN17DebugReadListenerD0Ev -0x0000007100596ab0,U,000036,_ZN9UIControlD0Ev +0x0000007100596ab0,O,000036,_ZN9UIControlD0Ev 0x0000007100596ad4,O,000004,_ZN9UIControl8setFocusEb 0x0000007100596ad8,O,000008,_ZN9UIControl8hasFocusEv 0x0000007100596ae0,U,000004,_ZN17CTelemetryManagerD2Ev @@ -37041,7 +37041,7 @@ Address,Quality,Size,Name 0x0000007100597320,U,000008,_ZN30IUIScene_AbstractContainerMenu16overrideTooltipsENS_13ESceneSectionE12not_null_ptrI12ItemInstanceEbbbiR12EToolTipItemS5_S5_S5_S5_S5_S5_ 0x0000007100597328,U,000052,_ZN25UIControl_TexturePackListC_gen2 0x000000710059735c,U,000036,_ZN25UIControl_TexturePackListD0Ev -0x0000007100597380,U,000036,_ZN15UIControl_LabelD0Ev +0x0000007100597380,O,000036,_ZN15UIControl_LabelD0Ev 0x00000071005973a4,U,000036,_ZN19UIControl_HTMLLabelD0Ev 0x00000071005973c8,U,000036,_ZN20UIControl_BitmapIconD0Ev 0x00000071005973ec,U,000052,_ZN16UIControl_SliderC_gen2 @@ -37157,10 +37157,10 @@ Address,Quality,Size,Name 0x0000007100599e48,U,000036,_ZN26UIControl_AchievementsListD0Ev 0x0000007100599e6c,U,000036,_ZN28UIControl_BeaconEffectButtonD0Ev 0x0000007100599e90,O,000036,_ZN16UIControl_ButtonD0Ev -0x0000007100599eb4,U,000036,_ZN20UIControl_ButtonListD0Ev +0x0000007100599eb4,O,000036,_ZN20UIControl_ButtonListD0Ev 0x0000007100599ed8,U,000036,_ZN27UIControl_DynamicButtonListD0Ev 0x0000007100599efc,U,000036,_ZN28UIControl_CheckboxButtonListD0Ev -0x0000007100599f20,U,000036,_ZN16UIControl_CursorD0Ev +0x0000007100599f20,O,000036,_ZN16UIControl_CursorD0Ev 0x0000007100599f44,U,000036,_ZN23UIControl_DLCButtonListD0Ev 0x0000007100599f68,U,000036,_ZN22UIControl_DynamicLabelD0Ev 0x0000007100599f8c,U,000052,_ZN27UIControl_EnchantmentButtonC_gen2 @@ -37169,14 +37169,14 @@ Address,Quality,Size,Name 0x000000710059a008,O,000052,_ZN14UIControl_BaseD1Ev 0x000000710059a03c,U,000036,_ZN25UIControl_LeaderboardListD0Ev 0x000000710059a060,U,000036,_ZN28UIControl_LeftIconButtonListD0Ev -0x000000710059a084,U,000036,_ZN19UIControl_MultiListD0Ev +0x000000710059a084,O,000036,_ZN19UIControl_MultiListD0Ev 0x000000710059a0a8,U,000036,_ZN26UIControl_PlayerButtonListD0Ev 0x000000710059a0cc,U,000068,_ZN27UIControl_PlayerSkinPreviewD2Ev 0x000000710059a110,U,000036,_ZN27UIControl_PlayerSkinPreviewD0Ev 0x000000710059a134,U,000036,_ZN18UIControl_ProgressD0Ev 0x000000710059a158,U,000036,_ZN18UIControl_SaveListD0Ev 0x000000710059a17c,U,000036,_ZN30UIControl_ScoreboardButtonListD0Ev -0x000000710059a1a0,U,000036,_ZN18UIControl_SlotListD0Ev +0x000000710059a1a0,O,000036,_ZN18UIControl_SlotListD0Ev 0x000000710059a1c4,U,000052,_ZN27UIControl_SpaceIndicatorBarC_gen2 0x000000710059a1f8,U,000036,_ZN27UIControl_SpaceIndicatorBarD0Ev 0x000000710059a21c,U,000036,_ZN19UIControl_TextInputD0Ev @@ -37382,7 +37382,7 @@ Address,Quality,Size,Name 0x00000071005a4d30,U,000052,_ZN25UIControl_EnchantmentBookC_gen2 0x00000071005a4d64,U,000036,_ZN25UIControl_EnchantmentBookD0Ev 0x00000071005a4d88,U,000036,_ZN24UIControl_MinecraftHorseD0Ev -0x00000071005a4dac,U,000020,_ZN9UIControlD1Ev +0x00000071005a4dac,O,000020,_ZN9UIControlD1Ev 0x00000071005a4dc0,U,000036,_ZN25UIControl_MinecraftPlayerD0Ev 0x00000071005a4de4,U,000060, 0x00000071005a4e20,U,000060, @@ -38592,16 +38592,16 @@ Address,Quality,Size,Name 0x00000071005d8924,U,000032, 0x00000071005d8944,U,000016, 0x00000071005d8954,O,001400,_ZN16UIScene_MainMenuC2EiPvP7UILayer -0x00000071005d8ecc,U,000176,_ZN13CMinecraftApp14hasArchiveFileERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEEb -0x00000071005d8f7c,U,000176,_ZN13CMinecraftApp14getArchiveFileERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEEb +0x00000071005d8ecc,M,000176,_ZN13CMinecraftApp14hasArchiveFileERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEEb +0x00000071005d8f7c,M,000176,_ZN13CMinecraftApp14getArchiveFileERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEEb 0x00000071005d902c,U,000008,CMinecraftApp::setLevelGenerationOptions -0x00000071005d9034,M,000164,_ZN16UIScene_MainMenuD2Ev +0x00000071005d9034,O,000164,_ZN16UIScene_MainMenuD2Ev 0x00000071005d90d8,O,000036,_ZN16UIScene_MainMenuD0Ev 0x00000071005d90fc,U,000324,_ZN16UIScene_MainMenu14updateTooltipsEv 0x00000071005d9240,O,000064,_ZN16UIScene_MainMenu16updateComponentsEv 0x00000071005d9280,U,000752,_ZN16UIScene_MainMenu15handleGainFocusEb 0x00000071005d9570,U,000004, -0x00000071005d9574,U,000064, +0x00000071005d9574,O,000064,_ZN16UIScene_MainMenu12getMoviePathEv 0x00000071005d95b4,O,000052,_ZN16UIScene_MainMenu12handleReloadEv 0x00000071005d95e8,U,000460,_ZN16UIScene_MainMenu11handleInputEiibbbRb 0x00000071005d97b4,U,000128, @@ -39297,7 +39297,7 @@ Address,Quality,Size,Name 0x000000710060012c,U,000480, 0x000000710060030c,U,000140, 0x0000007100600398,U,000012, -0x00000071006003a4,U,000172,_ZN13CMinecraftApp16loadMediaArchiveEv +0x00000071006003a4,O,000172,_ZN13CMinecraftApp16loadMediaArchiveEv 0x0000007100600450,U,000068, 0x0000007100600494,U,002004, 0x0000007100600c68,U,000132, @@ -39381,8 +39381,8 @@ Address,Quality,Size,Name 0x0000007100604c7c,U,000112, 0x0000007100604cec,U,000556, 0x0000007100604f18,U,000144, -0x0000007100604fa8,U,000032,_ZN11ArchiveFile7hasFileERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEE -0x0000007100604fc8,U,000696,_ZN11ArchiveFile7getFileERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEE +0x0000007100604fa8,O,000032,_ZN11ArchiveFile7hasFileERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEE +0x0000007100604fc8,M,000696,_ZN11ArchiveFile7getFileERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEE 0x0000007100605280,U,000044,_Z12GetTickCountv 0x00000071006052ac,U,000044, 0x00000071006052d8,U,000052, @@ -39491,7 +39491,7 @@ Address,Quality,Size,Name 0x00000071006081f0,U,000008, 0x00000071006081f8,U,000360,_Z18GetFileAttributesAPKc 0x0000007100608360,U,000008,_Z9MoveFileAPKcS0_ -0x0000007100608368,U,000116, +0x0000007100608368,U,000116,_Z14SetFilePointerPN2nn2fs10FileHandleEiPij 0x00000071006083dc,U,000084, 0x0000007100608430,U,000072, 0x0000007100608478,U,000008, @@ -39501,7 +39501,7 @@ Address,Quality,Size,Name 0x000000710060851c,U,000044,_Z14FindFirstFileAPKcP17_WIN32_FIND_DATAA 0x0000007100608548,U,000008,_Z13FindNextFileAiP17_WIN32_FIND_DATAA 0x0000007100608550,U,000012,GlobalMemoryStatus -0x000000710060855c,U,000004, +0x000000710060855c,O,000004,_Z21DeleteCriticalSectionPN2nn2os9MutexTypeE 0x0000007100608560,U,000020,_Z8TlsAllocv 0x0000007100608574,U,000064, 0x00000071006085b4,U,000144, @@ -39619,34 +39619,35 @@ Address,Quality,Size,Name 0x000000710060da60,U,000016, 0x000000710060da70,U,000008, 0x000000710060da78,U,000016, -0x000000710060da88,U,000152,_ZN19AbstractTexturePackC_gen -0x000000710060db20,U,000024,_ZN11TexturePackC_gen -0x000000710060db38,U,000004, -0x000000710060db3c,U,000004, -0x000000710060db40,U,000004, -0x000000710060db44,U,000004, +0x000000710060da88,M,000152,_ZN19AbstractTexturePackC2EjP4FileRKNSt3__112basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEP11TexturePack +0x000000710060db20,O,000024,_ZN11TexturePackC2Ev +0x000000710060db38,O,000004,_ZN19AbstractTexturePack8loadIconEv +0x000000710060db3c,O,000004,_ZN19AbstractTexturePack5unk28Ev +0x000000710060db40,O,000004,_ZN19AbstractTexturePack5unk29Ev +0x000000710060db44,O,000004,_ZN19AbstractTexturePack5unk30Ev 0x000000710060db48,U,000112, 0x000000710060dbb8,U,000036, 0x000000710060dbdc,U,000092, 0x000000710060dc38,U,000112, -0x000000710060dca8,U,000008, -0x000000710060dcb0,U,000012, +0x000000710060dca8,O,000008,_ZN19AbstractTexturePack5getIdEv +0x000000710060dcb0,O,000012,_ZN19AbstractTexturePack4unk8Ev 0x000000710060dcbc,U,000012, -0x000000710060dcc8,U,000012, -0x000000710060dcd4,U,000012, +0x000000710060dcc8,O,000012,_ZN19AbstractTexturePack4unk9Ev +0x000000710060dcd4,O,000012,_ZN19AbstractTexturePack5unk10Ev 0x000000710060dce0,U,000012, 0x000000710060dcec,U,001200, 0x000000710060e19c,U,000188, -0x000000710060e258,U,000008, +0x000000710060e258,O,000008,_ZN11TexturePack5unk13ERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEE 0x000000710060e260,U,000012, -0x000000710060e26c,U,000036, -0x000000710060e290,U,000472, -0x000000710060e468,U,000088, +0x000000710060e26c,O,000036,_ZN19AbstractTexturePack15loadColourTableEv +0x000000710060e290,M,000252,_ZN19AbstractTexturePack22loadDefaultColourTableEv +0x000000710060e38c,O,000220,_ZN19AbstractTexturePack19loadHTMLColourTableEv +0x000000710060e468,M,000088,_ZN19AbstractTexturePack20loadStructureManagerEv 0x000000710060e4c0,U,000012, -0x000000710060e4cc,U,000004, -0x000000710060e4d0,U,000004, -0x000000710060e4d4,U,000076, -0x000000710060e520,U,000076, +0x000000710060e4cc,O,000004,_ZN19AbstractTexturePack5unk19Ev +0x000000710060e4d0,O,000004,_ZN19AbstractTexturePack5unk20Ev +0x000000710060e4d4,O,000076,_ZN19AbstractTexturePack7getIconEPi +0x000000710060e520,O,000076,_ZN19AbstractTexturePack16getSecondaryIconEPi 0x000000710060e56c,U,000008, 0x000000710060e574,U,000008, 0x000000710060e57c,U,000008, @@ -39683,10 +39684,10 @@ Address,Quality,Size,Name 0x000000710060e7c4,U,000008, 0x000000710060e7cc,U,000096, 0x000000710060e82c,U,000304, -0x000000710060e95c,U,001180,_ZN11ArchiveFile10readHeaderEP15DataInputStream +0x000000710060e95c,M,001180,_ZN11ArchiveFile10readHeaderEP15DataInputStream 0x000000710060edf8,U,000012, 0x000000710060ee04,U,000004, -0x000000710060ee08,U,000288,_ZN11ArchiveFileC1E4File +0x000000710060ee08,M,000288,_ZN11ArchiveFileC1E4File 0x000000710060ef28,U,000104, 0x000000710060ef90,U,000004, 0x000000710060ef94,U,000004, @@ -39856,12 +39857,12 @@ Address,Quality,Size,Name 0x0000007100618c64,U,000024, 0x0000007100618c7c,U,000008, 0x0000007100618c84,U,000008, -0x0000007100618c8c,U,000016,_ZN13BlockRenderer15hasFixedTextureEv -0x0000007100618c9c,U,000008,_ZN13BlockRenderer16setLightOverrideEi -0x0000007100618ca4,U,000012,_ZN13BlockRenderer18clearLightOverrideEv -0x0000007100618cb0,U,000016,hasLightOverride__13BlockRendererFv +0x0000007100618c8c,O,000016,_ZN13BlockRenderer15hasFixedTextureEv +0x0000007100618c9c,O,000008,_ZN13BlockRenderer16setLightOverrideEi +0x0000007100618ca4,O,000012,_ZN13BlockRenderer18clearLightOverrideEv +0x0000007100618cb0,O,000016,_ZN13BlockRenderer16hasLightOverrideEv 0x0000007100618cc0,U,000112, -0x0000007100618d30,U,000160,_ZN13BlockRenderer8setShapeEPK4AABB +0x0000007100618d30,O,000160,_ZN13BlockRenderer8setShapeEPK4AABB 0x0000007100618dd0,U,000112, 0x0000007100618e40,U,000008, 0x0000007100618e48,U,000100,_ZN13BlockRenderer28tesselateInWorldFixedTextureEPK10BlockStateRK8BlockPosP18TextureAtlasSprite @@ -39918,12 +39919,12 @@ Address,Quality,Size,Name 0x0000007100628f0c,U,000200,tesselateObserverInWorld__13BlockRendererFPC10BlockStateRC8BlockPos 0x0000007100628fd4,U,000320, 0x0000007100629114,U,000088,_ZN13BlockRenderer10getTextureEPK10BlockStatePK9Direction -0x000000710062916c,U,000284,renderNorth__13BlockRendererFPC10BlockStatedN22P18TextureAtlasSprite -0x0000007100629288,U,000284,renderSouth__13BlockRendererFPC10BlockStatedN22P18TextureAtlasSprite -0x00000071006293a4,U,000284,renderWest__13BlockRendererFPC10BlockStatedN22P18TextureAtlasSprite -0x00000071006294c0,U,000284,renderEast__13BlockRendererFPC10BlockStatedN22P18TextureAtlasSprite -0x00000071006295dc,U,000276,renderFaceUp__13BlockRendererFPC10BlockStatedN22P18TextureAtlasSprite -0x00000071006296f0,U,000276,renderFaceDown__13BlockRendererFPC10BlockStatedN22P18TextureAtlasSprite +0x000000710062916c,O,000284,_ZN13BlockRenderer11renderNorthEPK10BlockStatedddP18TextureAtlasSprite +0x0000007100629288,O,000284,_ZN13BlockRenderer11renderSouthEPK10BlockStatedddP18TextureAtlasSprite +0x00000071006293a4,O,000284,_ZN13BlockRenderer10renderWestEPK10BlockStatedddP18TextureAtlasSprite +0x00000071006294c0,O,000284,_ZN13BlockRenderer10renderEastEPK10BlockStatedddP18TextureAtlasSprite +0x00000071006295dc,O,000276,_ZN13BlockRenderer12renderFaceUpEPK10BlockStatedddP18TextureAtlasSprite +0x00000071006296f0,O,000276,_ZN13BlockRenderer14renderFaceDownEPK10BlockStatedddP18TextureAtlasSprite 0x0000007100629804,U,018276,_ZN13BlockRenderer53tesselateBlockInWorldWithAmbienceOcclusionTexLightingEPK10BlockStateRK8BlockPosfffib 0x000000710062df68,U,002584,tesselateBlockInWorld__13BlockRendererFPC10BlockStateRC8BlockPosfN23 0x000000710062e980,U,000056, @@ -39949,12 +39950,12 @@ Address,Quality,Size,Name 0x00000071006312dc,U,000084,_ZN13BlockRenderer15tesselateEndRodEPK10BlockStatefff 0x0000007100631330,O,002276,_ZN13BlockRenderer21tesselateEndRodCenterEPK10BlockStatefff 0x0000007100631c14,U,002088,_ZN13BlockRenderer19tesselateEndRodBaseEPK10BlockStatefff -0x000000710063243c,M,001352,_ZN13BlockRenderer12renderFaceUpEPK10BlockStatedddP18TextureAtlasSpriteffff -0x0000007100632984,M,001368,_ZN13BlockRenderer14renderFaceDownEPK10BlockStatedddP18TextureAtlasSpriteffff -0x0000007100632edc,M,001388,_ZN13BlockRenderer11renderNorthEPK10BlockStatedddP18TextureAtlasSpriteffff -0x0000007100633448,M,001388,_ZN13BlockRenderer11renderSouthEPK10BlockStatedddP18TextureAtlasSpriteffff -0x00000071006339b4,M,001380,_ZN13BlockRenderer10renderEastEPK10BlockStatedddP18TextureAtlasSpriteffff -0x0000007100633f18,M,001384,_ZN13BlockRenderer10renderWestEPK10BlockStatedddP18TextureAtlasSpriteffff +0x000000710063243c,m,001352,_ZN13BlockRenderer12renderFaceUpEPK10BlockStatedddP18TextureAtlasSpriteffff +0x0000007100632984,m,001368,_ZN13BlockRenderer14renderFaceDownEPK10BlockStatedddP18TextureAtlasSpriteffff +0x0000007100632edc,m,001388,_ZN13BlockRenderer11renderNorthEPK10BlockStatedddP18TextureAtlasSpriteffff +0x0000007100633448,m,001388,_ZN13BlockRenderer11renderSouthEPK10BlockStatedddP18TextureAtlasSpriteffff +0x00000071006339b4,m,001380,_ZN13BlockRenderer10renderEastEPK10BlockStatedddP18TextureAtlasSpriteffff +0x0000007100633f18,m,001384,_ZN13BlockRenderer10renderWestEPK10BlockStatedddP18TextureAtlasSpriteffff 0x0000007100634480,U,000436, 0x0000007100634634,O,000008,_ZN13BufferBuilder6bucketEi 0x000000710063463c,U,000112,_ZN13BlockRenderer10getTextureEPK10BlockStateP11LevelSourceRK8BlockPosPK9Direction @@ -40563,17 +40564,17 @@ Address,Quality,Size,Name 0x0000007100659d14,U,000008, 0x0000007100659d1c,U,000048,_ZN15DefaultRendererC_gen 0x0000007100659d4c,U,000112, -0x0000007100659dbc,U,000184,_ZN18DefaultTexturePackC_gen -0x0000007100659e74,U,000200,DefaultTexturePack__loadIcon -0x0000007100659f3c,U,000016, -0x0000007100659f4c,U,000048, +0x0000007100659dbc,M,000184,_ZN18DefaultTexturePackC1Ev +0x0000007100659e74,O,000200,_ZN18DefaultTexturePack8loadIconEv +0x0000007100659f3c,O,000016,_ZN18DefaultTexturePack5unk29Ev +0x0000007100659f4c,M,000048,_ZN18DefaultTexturePack5unk30Ev 0x0000007100659f7c,U,000008, -0x0000007100659f84,U,000008, -0x0000007100659f8c,U,000068, -0x0000007100659fd0,U,000068, +0x0000007100659f84,O,000008,_ZN18DefaultTexturePack5unk12Ev +0x0000007100659f8c,O,000068,_ZN18DefaultTexturePack4unk8Ev +0x0000007100659fd0,O,000068,_ZN18DefaultTexturePack4unk9Ev 0x000000710065a014,U,000140, 0x000000710065a0a0,U,000036, -0x000000710065a0c4,U,000004, +0x000000710065a0c4,O,000004,_ZN18DefaultTexturePack5unk19Ev 0x000000710065a0c8,U,000968,_ZN19DefaultVertexFormat10staticCtorEv 0x000000710065a490,U,000212,_ZN18DerivedServerLevelC_gen 0x000000710065a564,U,000080,_ZN18DerivedServerLevelD2Ev @@ -40743,7 +40744,7 @@ Address,Quality,Size,Name 0x00000071006650f4,U,000036, 0x0000007100665118,U,000008, 0x0000007100665120,O,001224,_ZN16UIScene_MainMenu19mapElementsAndNamesEv -0x00000071006655e8,U,000008, +0x00000071006655e8,O,000008,_ZN16UIScene_MainMenu12getSceneTypeEv 0x00000071006655f0,O,000008,_ZN16UIScene_MainMenu8hasFocusEi 0x00000071006655f8,U,000008, 0x0000007100665600,U,000680,_ZN21UIScene_MapSelectMenu19mapElementsAndNamesEv @@ -40819,14 +40820,14 @@ Address,Quality,Size,Name 0x000000710066a4a4,U,000064,_ZN18AbstractHorseModel7getNameEv 0x000000710066a4e4,U,000036,_ZN21AbstractHorseRendererD0Ev 0x000000710066a508,U,000004,_ZN14EntityRenderer12SetItemFrameEb -0x000000710066a50c,U,000092,_ZN19AbstractTexturePackC_gen2 -0x000000710066a568,U,000036,_ZN19AbstractTexturePackD0Ev +0x000000710066a50c,O,000092,_ZN19AbstractTexturePackD2Ev +0x000000710066a568,O,000036,_ZN19AbstractTexturePackD0Ev 0x000000710066a58c,O,000008,_ZN11TexturePack8hasAudioEv 0x000000710066a594,O,000012,_ZN11TexturePack11setHasAudioEb 0x000000710066a5a0,O,000004,_ZN11TexturePack8loadDataEv -0x000000710066a5a4,U,000008, -0x000000710066a5ac,U,000008, -0x000000710066a5b4,U,000008, +0x000000710066a5a4,O,000008,_ZN19AbstractTexturePack14getColourTableEv +0x000000710066a5ac,O,000008,_ZN19AbstractTexturePack19getStructureManagerEv +0x000000710066a5b4,O,000008,_ZN19AbstractTexturePack10getArchiveEv 0x000000710066a5bc,U,000044, 0x000000710066a5e8,U,000036, 0x000000710066a60c,U,000016, @@ -40908,12 +40909,12 @@ Address,Quality,Size,Name 0x000000710066b00c,U,000020,_ZN6ScreenD2Ev 0x000000710066b020,U,000036,_ZN15DefaultRendererD0Ev 0x000000710066b044,U,000008, -0x000000710066b04c,U,000036,_ZN18DefaultTexturePackD0Ev -0x000000710066b070,U,000008, -0x000000710066b078,U,000008, -0x000000710066b080,U,000008, -0x000000710066b088,U,000008, -0x000000710066b090,U,000008, +0x000000710066b04c,O,000036,_ZN18DefaultTexturePackD0Ev +0x000000710066b070,O,000008,_ZN18DefaultTexturePack4unk1Ev +0x000000710066b078,O,000008,_ZN18DefaultTexturePack4unk2Ev +0x000000710066b080,O,000008,_ZN18DefaultTexturePack8hasAudioEv +0x000000710066b088,O,000008,_ZN18DefaultTexturePack4unk3Ev +0x000000710066b090,O,000008,_ZN18DefaultTexturePack5unk14Ev 0x000000710066b098,U,000008, 0x000000710066b0a0,U,000004, 0x000000710066b0a4,U,000036,_ZN18DerivedServerLevel32DerivedLevelBorderChangeListenerD0Ev @@ -41086,7 +41087,7 @@ Address,Quality,Size,Name 0x000000710066f324,U,000060, 0x000000710066f360,U,000060, 0x000000710066f39c,U,000040, -0x000000710066f3c4,U,000004, +0x000000710066f3c4,O,000004,_ZN11TexturePackD2Ev 0x000000710066f3c8,U,000004, 0x000000710066f3cc,U,000004, 0x000000710066f3d0,U,000004, @@ -44270,7 +44271,7 @@ Address,Quality,Size,Name 0x0000007100718d30,U,000008, 0x0000007100718d38,U,000008, 0x0000007100718d40,O,000132,_ZNK16ResourceLocation8toStringEv -0x0000007100718dc4,U,000064, +0x0000007100718dc4,O,000064,_ZNK16ResourceLocation8hashCodeEv 0x0000007100718e04,O,000300,_ZNK16ResourceLocationeqEPKS_ 0x0000007100718f30,U,000316, 0x000000710071906c,U,000288, @@ -44575,7 +44576,7 @@ Address,Quality,Size,Name 0x000000710072b56c,U,000632, 0x000000710072b7e4,U,000052,_ZN17BonusChestFeatureC_gen 0x000000710072b818,U,000180, -0x000000710072b8cc,U,000084,_ZN21TexturePackRepository11getSelectedEv +0x000000710072b8cc,O,000084,_ZN21TexturePackRepository11getSelectedEv 0x000000710072b920,U,000172, 0x000000710072b9cc,U,000384, 0x000000710072bb4c,U,000376, @@ -45116,23 +45117,23 @@ Address,Quality,Size,Name 0x000000710075df00,O,000180,_ZN12TextureAtlas15addIconWithNameEbiiRKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEES8_ 0x000000710075dfb4,U,000192,_ZN12TextureAtlas11addIconSizeEbiiRKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEEii 0x000000710075e074,O,000752,_ZNSt3__113unordered_mapINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEP18TextureAtlasSpriteNS_4hashIS6_EENS_8equal_toIS6_EENS4_INS_4pairIKS6_S8_EEEEEixEOS6_ -0x000000710075e364,U,000020,_ZN18TextureAtlasSprite7initUVsEffff +0x000000710075e364,O,000020,_ZN18TextureAtlasSprite7initUVsEffff 0x000000710075e378,U,000152,_ZN18TextureAtlasSpriteC1ERKNSt3__112basic_stringIwNS0_11char_traitsIwEENS0_9allocatorIwEEEES8_ffff 0x000000710075e410,U,000200,_ZN18TextureAtlasSprite17freeFrameTexturesEv 0x000000710075e4d8,U,000056, 0x000000710075e510,U,000148,_ZN18TextureAtlasSpriteD2Ev 0x000000710075e5a4,U,000036,_ZN18TextureAtlasSpriteD0Ev -0x000000710075e5c8,U,000008,_ZNK18TextureAtlasSprite4getXEv -0x000000710075e5d0,U,000008,_ZNK18TextureAtlasSprite4getYEv -0x000000710075e5d8,U,000008,_ZNK18TextureAtlasSprite8getWidthEv -0x000000710075e5e0,U,000008,_ZNK18TextureAtlasSprite9getHeightEv -0x000000710075e5e8,U,000028,_ZNK18TextureAtlasSprite5getU0Eb -0x000000710075e604,U,000028,_ZNK18TextureAtlasSprite5getU1Eb -0x000000710075e620,U,000128,_ZNK18TextureAtlasSprite4getUEd -0x000000710075e6a0,U,000028,_ZNK18TextureAtlasSprite5getV0Eb -0x000000710075e6bc,U,000028,_ZNK18TextureAtlasSprite5getV1Eb -0x000000710075e6d8,U,000128,_ZNK18TextureAtlasSprite4getVEd -0x000000710075e758,U,000080,_ZN18TextureAtlasSprite8adjustUVERfRf +0x000000710075e5c8,O,000008,_ZNK18TextureAtlasSprite4getXEv +0x000000710075e5d0,O,000008,_ZNK18TextureAtlasSprite4getYEv +0x000000710075e5d8,O,000008,_ZNK18TextureAtlasSprite8getWidthEv +0x000000710075e5e0,O,000008,_ZNK18TextureAtlasSprite9getHeightEv +0x000000710075e5e8,O,000028,_ZNK18TextureAtlasSprite5getU0Eb +0x000000710075e604,O,000028,_ZNK18TextureAtlasSprite5getU1Eb +0x000000710075e620,O,000128,_ZNK18TextureAtlasSprite4getUEd +0x000000710075e6a0,O,000028,_ZNK18TextureAtlasSprite5getV0Eb +0x000000710075e6bc,O,000028,_ZNK18TextureAtlasSprite5getV1Eb +0x000000710075e6d8,O,000128,_ZNK18TextureAtlasSprite4getVEd +0x000000710075e758,O,000080,_ZN18TextureAtlasSprite8adjustUVERfS0_ 0x000000710075e7a8,U,000012,_ZNK18TextureAtlasSprite7getNameEv 0x000000710075e7b4,U,000020,_ZNK18TextureAtlasSprite14getSourceWidthEv 0x000000710075e7c8,U,000020,_ZNK18TextureAtlasSprite15getSourceHeightEv @@ -45147,8 +45148,8 @@ Address,Quality,Size,Name 0x000000710075efcc,U,000132, 0x000000710075f050,U,000312, 0x000000710075f188,U,000176, -0x000000710075f238,U,000056, -0x000000710075f270,M,000256,_ZN21TexturePackRepositoryC1E4FileP9Minecraft +0x000000710075f238,O,000056,_ZN11TexturePack5unk15Eb +0x000000710075f270,O,000256,_ZN21TexturePackRepositoryC1E4FileP9Minecraft 0x000000710075f370,U,000556, 0x000000710075f59c,U,000004,_ZN21TexturePackRepository13addDebugPacksEv 0x000000710075f5a0,U,000044, @@ -45216,8 +45217,8 @@ Address,Quality,Size,Name 0x000000710076360c,U,000076, 0x0000007100763658,U,000060,_ZN20ThrownPotionRendererC_gen 0x0000007100763694,U,000080, -0x00000071007636e4,U,000068,_ZN5TimerC1Ef -0x0000007100763728,U,000312,_ZN5Timer11advanceTimeEv +0x00000071007636e4,O,000068,_ZN5TimerC1Ef +0x0000007100763728,M,000312,_ZN5Timer11advanceTimeEv 0x0000007100763860,U,000048,_ZN21TippableArrowRendererC_gen 0x0000007100763890,U,000100, 0x00000071007638f4,U,000120,_ZN11TitleScreenC1Ev @@ -45465,8 +45466,8 @@ Address,Quality,Size,Name 0x0000007100773634,U,000036,_ZN15ServerBossEventD0Ev 0x0000007100773658,O,000008,_ZN16ServerChunkCache8getCacheEv 0x0000007100773660,U,000036,_ZN15TeleportCommandD0Ev -0x0000007100773684,U,000036,_ZN11TexturePackD0Ev -0x00000071007736a8,U,000008, +0x0000007100773684,M,000036,_ZN11TexturePackD0Ev +0x00000071007736a8,O,000008,_ZN11TexturePack5unk14Ev 0x00000071007736b0,U,000036,_ZN19ServerLevelListenerD0Ev 0x00000071007736d4,U,000052,_ZN16ServerScoreboardD2Ev 0x0000007100773708,U,000036,_ZN16ServerScoreboardD0Ev @@ -45857,7 +45858,7 @@ Address,Quality,Size,Name 0x0000007100780350,O,000028,_ZN11Compression23UseDefaultThreadStorageEv 0x000000710078036c,O,000092,_ZN11Compression20ReleaseThreadStorageEv 0x00000071007803c8,O,000036,_ZN11Compression14getCompressionEv -0x00000071007803ec,U,000468,_ZN11Compression19internalCompressRleEPvPjS0_j +0x00000071007803ec,M,000468,_ZN11Compression19internalCompressRleEPvPjS0_j 0x00000071007805c0,O,000232,_ZN11Compression21internalDecompressRleEPvPjS0_j 0x00000071007806a8,O,000176,_ZN11Compression14CompressLZXRLEEPvPjS0_j 0x0000007100780758,O,000108,_ZN11Compression8CompressEPvPjS0_j @@ -45888,7 +45889,7 @@ Address,Quality,Size,Name 0x0000007100781288,O,000024,_ZN11TextureUtil18ByteFlipRGBAToARGBERj 0x00000071007812a0,O,000204,_ZN11TextureUtil15LoadTextureDataEPKcPiS2_PS2_ 0x000000710078136c,O,000104,_ZN8StbiFile4readEPvPci -0x00000071007813d4,U,000076,_ZN8StbiFile4skipEPvi +0x00000071007813d4,O,000076,_ZN8StbiFile4skipEPvi 0x0000007100781420,M,000060,_ZN8StbiFile3eofEPv 0x000000710078145c,O,000100,_ZN8StbiFile10CreateFileEPKc 0x00000071007814c0,O,000016,_ZN8StbiFile11IsValidFileEv @@ -46024,7 +46025,7 @@ Address,Quality,Size,Name 0x000000710078dab8,O,000116,_ZL21stbi__zhuffman_decodeP10stbi__zbufP14stbi__zhuffman 0x000000710078db2c,O,000160,_ZL30stbi__zhuffman_decode_slowpathP10stbi__zbufP14stbi__zhuffman 0x000000710078dbcc,O,000092,_ZL19stbi__hdr_test_coreP13stbi__contextPKc -0x000000710078dc28,U,000004, +0x000000710078dc28,O,000004,_ZN8StbiFile8fromUserEPv 0x000000710078dc2c,U,000052, 0x000000710078dc60,U,000004, 0x000000710078dc64,U,000052, @@ -46326,17 +46327,17 @@ Address,Quality,Size,Name 0x000000710079591c,U,000016, 0x000000710079592c,U,000020, 0x0000007100795940,U,000016, -0x0000007100795950,U,000040,Renderer__getContext +0x0000007100795950,M,000040,Renderer__getContext 0x0000007100795978,U,000048, -0x00000071007959a8,M,000524,_ZN8Renderer7ContextC1EPS_b +0x00000071007959a8,m,000524,_ZN8Renderer7ContextC1EPS_b 0x0000007100795bb4,U,000004, -0x0000007100795bb8,U,000016, -0x0000007100795bc8,U,000016, -0x0000007100795bd8,U,000020, -0x0000007100795bec,U,000020, -0x0000007100795c00,U,000016, -0x0000007100795c10,U,000016, -0x0000007100795c20,U,000016, +0x0000007100795bb8,O,000016,_ZL24nvnBlendStateSetDefaultsP13NVNblendState +0x0000007100795bc8,O,000016,_ZL31nvnDepthStencilStateSetDefaultsP20NVNdepthStencilState +0x0000007100795bd8,O,000020,_ZL38nvnDepthStencilStateSetDepthTestEnableP20NVNdepthStencilStateh +0x0000007100795bec,O,000020,_ZL32nvnDepthStencilStateSetDepthFuncP20NVNdepthStencilState12NVNdepthFunc +0x0000007100795c00,O,000016,_ZL24nvnColorStateSetDefaultsP13NVNcolorState +0x0000007100795c10,O,000016,_ZL26nvnPolygonStateSetDefaultsP15NVNpolygonState +0x0000007100795c20,O,000016,_ZL30nvnChannelMaskStateSetDefaultsP19NVNchannelMaskState 0x0000007100795c30,O,000008,_ZN8Renderer17InitialiseContextEv 0x0000007100795c38,M,000072,_ZN8Renderer17InitialiseContextEb 0x0000007100795c80,O,000008,_ZN8Renderer10InitialiseEv @@ -46444,20 +46445,20 @@ Address,Quality,Size,Name 0x0000007100798530,U,000016,_ZN8Renderer38GetNumCommandBufferVertsDrawnLastFrameEv 0x0000007100798540,U,000120,_ZN8Renderer26GetNumVertsInCommandBufferEi 0x00000071007985b8,U,000008, -0x00000071007985c0,U,000176,Renderer__MultWithStack -0x0000007100798670,U,000036,_ZN8Renderer10MatrixModeEi -0x0000007100798694,U,000100,_ZN8Renderer17MatrixSetIdentityEv -0x00000071007986f8,U,000040,_ZN8Renderer15MatrixTranslateEfff +0x00000071007985c0,M,000176,_ZN8Renderer13MultWithStackE12MatrixStruct +0x0000007100798670,O,000036,_ZN8Renderer10MatrixModeEi +0x0000007100798694,O,000100,_ZN8Renderer17MatrixSetIdentityEv +0x00000071007986f8,O,000040,_ZN8Renderer15MatrixTranslateEfff 0x0000007100798720,U,000788,_ZN8Renderer12MatrixRotateEffff -0x0000007100798a34,U,000064,_ZN8Renderer11MatrixScaleEfff +0x0000007100798a34,M,000064,_ZN8Renderer11MatrixScaleEfff 0x0000007100798a74,U,000548,_ZN8Renderer17MatrixPerspectiveEffff -0x0000007100798c98,U,000116,_ZN8Renderer16MatrixOrthogonalEffffff -0x0000007100798d0c,U,000060,_ZN8Renderer9MatrixPopEv -0x0000007100798d48,U,000092,_ZN8Renderer10MatrixPushEv +0x0000007100798c98,M,000116,_ZN8Renderer16MatrixOrthogonalEffffff +0x0000007100798d0c,O,000060,_ZN8Renderer9MatrixPopEv +0x0000007100798d48,O,000092,_ZN8Renderer10MatrixPushEv 0x0000007100798da4,O,000012,_ZN8Renderer10MatrixMultEPf -0x0000007100798db0,U,000092,_ZN8Renderer9MatrixGetEi +0x0000007100798db0,M,000092,_ZN8Renderer9MatrixGetEi 0x0000007100798e0c,U,000056, -0x0000007100798e44,U,000164,_ZN8Renderer15Set_matrixDirtyEv +0x0000007100798e44,O,000164,_ZN8Renderer15Set_matrixDirtyEv 0x0000007100798ee8,O,000320,_ZN8Renderer16SetupMemoryPoolsEv 0x0000007100799028,O,000016,_ZL31nvnMemoryPoolBuilderSetDefaultsP20NVNmemoryPoolBuilder 0x0000007100799038,O,000016,_ZL29nvnMemoryPoolBuilderSetDeviceP20NVNmemoryPoolBuilderP9NVNdevice @@ -48457,7 +48458,7 @@ Address,Quality,Size,Name 0x00000071007eb428,O,000008,zcfree 0x00000071007eb430,U,000012,Libz_SigloMiddlewareInfo 0x00000071007eb43c,U,002004, -0x00000071007ebc10,U,013384,nvnLoadCProcs +0x00000071007ebc10,O,013384,nvnLoadCProcs 0x00000071007ef058,U,000068, 0x00000071007ef09c,U,000024, 0x00000071007ef0b4,U,000120, diff --git a/src/4JLibraries_Source/NX/MemSect.cpp b/src/4JLibraries_Source/NX/MemSect.cpp new file mode 100644 index 00000000..2a196ee9 --- /dev/null +++ b/src/4JLibraries_Source/NX/MemSect.cpp @@ -0,0 +1,4 @@ +#include "NX/Platform.h" + +/** No operation on Switch (0x7100609ed0). */ +void MemSect(int) {} diff --git a/src/4JLibraries_Source/NX/Platform.cpp b/src/4JLibraries_Source/NX/Platform.cpp index e1d7c3b3..315d854a 100644 --- a/src/4JLibraries_Source/NX/Platform.cpp +++ b/src/4JLibraries_Source/NX/Platform.cpp @@ -18,9 +18,9 @@ void XPhysicalFree(void* ptr) { free(ptr); } +#ifndef _WIN32 void __debugbreak() {} // I assume this just calls compiler intrinsic on x86 - -void MemSect(int) {} +#endif void PIXBeginNamedEvent(float, const char*, ...) {} void PIXEndNamedEvent() {} diff --git a/src/4JLibraries_Source/NX/Render/C4JRender.h b/src/4JLibraries_Source/NX/Render/C4JRender.h index 46ba7dc4..f40622f1 100644 --- a/src/4JLibraries_Source/NX/Render/C4JRender.h +++ b/src/4JLibraries_Source/NX/Render/C4JRender.h @@ -1,6 +1,6 @@ #pragma once -#include "arm_neon.h" +#include class _XSOCIAL_PREVIEWIMAGE; class ImageFileBuffer; @@ -41,7 +41,7 @@ class C4JRender { virtual void MatrixPop() = 0; virtual void MatrixPush() = 0; virtual float32x4_t MatrixMult(float*) = 0; - virtual void MatrixGet(int) = 0; + virtual float* MatrixGet(int) = 0; virtual void Set_matrixDirty() = 0; virtual void Initialise() = 0; virtual void InitialiseContext() = 0; diff --git a/src/4JLibraries_Source/NX/Render/NvnProcLoader.cpp b/src/4JLibraries_Source/NX/Render/NvnProcLoader.cpp new file mode 100644 index 00000000..be3bd864 --- /dev/null +++ b/src/4JLibraries_Source/NX/Render/NvnProcLoader.cpp @@ -0,0 +1,1436 @@ +#include "nvn/nvn_FuncPtrBase.h" + +extern "C" { +PFNNVNDEVICEBUILDERSETDEFAULTSPROC pfnc_nvnDeviceBuilderSetDefaults; +PFNNVNDEVICEBUILDERSETFLAGSPROC pfnc_nvnDeviceBuilderSetFlags; +PFNNVNDEVICEINITIALIZEPROC pfnc_nvnDeviceInitialize; +PFNNVNDEVICEFINALIZEPROC pfnc_nvnDeviceFinalize; +PFNNVNDEVICESETDEBUGLABELPROC pfnc_nvnDeviceSetDebugLabel; +PFNNVNDEVICEGETPROCADDRESSPROC pfnc_nvnDeviceGetProcAddress; +PFNNVNDEVICEGETINTEGERPROC pfnc_nvnDeviceGetInteger; +PFNNVNDEVICEGETCURRENTTIMESTAMPINNANOSECONDSPROC pfnc_nvnDeviceGetCurrentTimestampInNanoseconds; +PFNNVNDEVICESETINTERMEDIATESHADERCACHEPROC pfnc_nvnDeviceSetIntermediateShaderCache; +PFNNVNDEVICEGETTEXTUREHANDLEPROC pfnc_nvnDeviceGetTextureHandle; +PFNNVNDEVICEGETTEXELFETCHHANDLEPROC pfnc_nvnDeviceGetTexelFetchHandle; +PFNNVNDEVICEGETIMAGEHANDLEPROC pfnc_nvnDeviceGetImageHandle; +PFNNVNDEVICEINSTALLDEBUGCALLBACKPROC pfnc_nvnDeviceInstallDebugCallback; +PFNNVNDEVICEGENERATEDEBUGDOMAINIDPROC pfnc_nvnDeviceGenerateDebugDomainId; +PFNNVNDEVICESETWINDOWORIGINMODEPROC pfnc_nvnDeviceSetWindowOriginMode; +PFNNVNDEVICESETDEPTHMODEPROC pfnc_nvnDeviceSetDepthMode; +PFNNVNDEVICEREGISTERFASTCLEARCOLORPROC pfnc_nvnDeviceRegisterFastClearColor; +PFNNVNDEVICEREGISTERFASTCLEARCOLORIPROC pfnc_nvnDeviceRegisterFastClearColori; +PFNNVNDEVICEREGISTERFASTCLEARCOLORUIPROC pfnc_nvnDeviceRegisterFastClearColorui; +PFNNVNDEVICEREGISTERFASTCLEARDEPTHPROC pfnc_nvnDeviceRegisterFastClearDepth; +PFNNVNDEVICEGETWINDOWORIGINMODEPROC pfnc_nvnDeviceGetWindowOriginMode; +PFNNVNDEVICEGETDEPTHMODEPROC pfnc_nvnDeviceGetDepthMode; +PFNNVNDEVICEGETTIMESTAMPINNANOSECONDSPROC pfnc_nvnDeviceGetTimestampInNanoseconds; +PFNNVNDEVICEAPPLYDEFERREDFINALIZESPROC pfnc_nvnDeviceApplyDeferredFinalizes; +PFNNVNDEVICEFINALIZECOMMANDHANDLEPROC pfnc_nvnDeviceFinalizeCommandHandle; +PFNNVNDEVICEWALKDEBUGDATABASEPROC pfnc_nvnDeviceWalkDebugDatabase; +PFNNVNDEVICEGETSEPARATETEXTUREHANDLEPROC pfnc_nvnDeviceGetSeparateTextureHandle; +PFNNVNDEVICEGETSEPARATESAMPLERHANDLEPROC pfnc_nvnDeviceGetSeparateSamplerHandle; +PFNNVNDEVICEISEXTERNALDEBUGGERATTACHEDPROC pfnc_nvnDeviceIsExternalDebuggerAttached; +PFNNVNQUEUEGETERRORPROC pfnc_nvnQueueGetError; +PFNNVNQUEUEGETTOTALCOMMANDMEMORYUSEDPROC pfnc_nvnQueueGetTotalCommandMemoryUsed; +PFNNVNQUEUEGETTOTALCONTROLMEMORYUSEDPROC pfnc_nvnQueueGetTotalControlMemoryUsed; +PFNNVNQUEUEGETTOTALCOMPUTEMEMORYUSEDPROC pfnc_nvnQueueGetTotalComputeMemoryUsed; +PFNNVNQUEUERESETMEMORYUSAGECOUNTSPROC pfnc_nvnQueueResetMemoryUsageCounts; +PFNNVNQUEUEBUILDERSETDEVICEPROC pfnc_nvnQueueBuilderSetDevice; +PFNNVNQUEUEBUILDERSETDEFAULTSPROC pfnc_nvnQueueBuilderSetDefaults; +PFNNVNQUEUEBUILDERSETFLAGSPROC pfnc_nvnQueueBuilderSetFlags; +PFNNVNQUEUEBUILDERSETCOMMANDMEMORYSIZEPROC pfnc_nvnQueueBuilderSetCommandMemorySize; +PFNNVNQUEUEBUILDERSETCOMPUTEMEMORYSIZEPROC pfnc_nvnQueueBuilderSetComputeMemorySize; +PFNNVNQUEUEBUILDERSETCONTROLMEMORYSIZEPROC pfnc_nvnQueueBuilderSetControlMemorySize; +PFNNVNQUEUEBUILDERGETQUEUEMEMORYSIZEPROC pfnc_nvnQueueBuilderGetQueueMemorySize; +PFNNVNQUEUEBUILDERSETQUEUEMEMORYPROC pfnc_nvnQueueBuilderSetQueueMemory; +PFNNVNQUEUEBUILDERSETCOMMANDFLUSHTHRESHOLDPROC pfnc_nvnQueueBuilderSetCommandFlushThreshold; +PFNNVNQUEUEINITIALIZEPROC pfnc_nvnQueueInitialize; +PFNNVNQUEUEFINALIZEPROC pfnc_nvnQueueFinalize; +PFNNVNQUEUESETDEBUGLABELPROC pfnc_nvnQueueSetDebugLabel; +PFNNVNQUEUESUBMITCOMMANDSPROC pfnc_nvnQueueSubmitCommands; +PFNNVNQUEUEFLUSHPROC pfnc_nvnQueueFlush; +PFNNVNQUEUEFINISHPROC pfnc_nvnQueueFinish; +PFNNVNQUEUEPRESENTTEXTUREPROC pfnc_nvnQueuePresentTexture; +PFNNVNQUEUEACQUIRETEXTUREPROC pfnc_nvnQueueAcquireTexture; +PFNNVNWINDOWBUILDERSETDEVICEPROC pfnc_nvnWindowBuilderSetDevice; +PFNNVNWINDOWBUILDERSETDEFAULTSPROC pfnc_nvnWindowBuilderSetDefaults; +PFNNVNWINDOWBUILDERSETNATIVEWINDOWPROC pfnc_nvnWindowBuilderSetNativeWindow; +PFNNVNWINDOWBUILDERSETTEXTURESPROC pfnc_nvnWindowBuilderSetTextures; +PFNNVNWINDOWBUILDERSETPRESENTINTERVALPROC pfnc_nvnWindowBuilderSetPresentInterval; +PFNNVNWINDOWBUILDERGETNATIVEWINDOWPROC pfnc_nvnWindowBuilderGetNativeWindow; +PFNNVNWINDOWBUILDERGETPRESENTINTERVALPROC pfnc_nvnWindowBuilderGetPresentInterval; +PFNNVNWINDOWINITIALIZEPROC pfnc_nvnWindowInitialize; +PFNNVNWINDOWFINALIZEPROC pfnc_nvnWindowFinalize; +PFNNVNWINDOWSETDEBUGLABELPROC pfnc_nvnWindowSetDebugLabel; +PFNNVNWINDOWACQUIRETEXTUREPROC pfnc_nvnWindowAcquireTexture; +PFNNVNWINDOWGETNATIVEWINDOWPROC pfnc_nvnWindowGetNativeWindow; +PFNNVNWINDOWGETPRESENTINTERVALPROC pfnc_nvnWindowGetPresentInterval; +PFNNVNWINDOWSETPRESENTINTERVALPROC pfnc_nvnWindowSetPresentInterval; +PFNNVNWINDOWSETCROPPROC pfnc_nvnWindowSetCrop; +PFNNVNWINDOWGETCROPPROC pfnc_nvnWindowGetCrop; +PFNNVNPROGRAMINITIALIZEPROC pfnc_nvnProgramInitialize; +PFNNVNPROGRAMFINALIZEPROC pfnc_nvnProgramFinalize; +PFNNVNPROGRAMSETDEBUGLABELPROC pfnc_nvnProgramSetDebugLabel; +PFNNVNPROGRAMSETSHADERSPROC pfnc_nvnProgramSetShaders; +PFNNVNMEMORYPOOLBUILDERSETDEVICEPROC pfnc_nvnMemoryPoolBuilderSetDevice; +PFNNVNMEMORYPOOLBUILDERSETDEFAULTSPROC pfnc_nvnMemoryPoolBuilderSetDefaults; +PFNNVNMEMORYPOOLBUILDERSETSTORAGEPROC pfnc_nvnMemoryPoolBuilderSetStorage; +PFNNVNMEMORYPOOLBUILDERSETFLAGSPROC pfnc_nvnMemoryPoolBuilderSetFlags; +PFNNVNMEMORYPOOLBUILDERGETMEMORYPROC pfnc_nvnMemoryPoolBuilderGetMemory; +PFNNVNMEMORYPOOLBUILDERGETSIZEPROC pfnc_nvnMemoryPoolBuilderGetSize; +PFNNVNMEMORYPOOLBUILDERGETFLAGSPROC pfnc_nvnMemoryPoolBuilderGetFlags; +PFNNVNMEMORYPOOLINITIALIZEPROC pfnc_nvnMemoryPoolInitialize; +PFNNVNMEMORYPOOLSETDEBUGLABELPROC pfnc_nvnMemoryPoolSetDebugLabel; +PFNNVNMEMORYPOOLFINALIZEPROC pfnc_nvnMemoryPoolFinalize; +PFNNVNMEMORYPOOLMAPPROC pfnc_nvnMemoryPoolMap; +PFNNVNMEMORYPOOLFLUSHMAPPEDRANGEPROC pfnc_nvnMemoryPoolFlushMappedRange; +PFNNVNMEMORYPOOLINVALIDATEMAPPEDRANGEPROC pfnc_nvnMemoryPoolInvalidateMappedRange; +PFNNVNMEMORYPOOLGETBUFFERADDRESSPROC pfnc_nvnMemoryPoolGetBufferAddress; +PFNNVNMEMORYPOOLMAPVIRTUALPROC pfnc_nvnMemoryPoolMapVirtual; +PFNNVNMEMORYPOOLGETSIZEPROC pfnc_nvnMemoryPoolGetSize; +PFNNVNMEMORYPOOLGETFLAGSPROC pfnc_nvnMemoryPoolGetFlags; +PFNNVNTEXTUREPOOLINITIALIZEPROC pfnc_nvnTexturePoolInitialize; +PFNNVNTEXTUREPOOLSETDEBUGLABELPROC pfnc_nvnTexturePoolSetDebugLabel; +PFNNVNTEXTUREPOOLFINALIZEPROC pfnc_nvnTexturePoolFinalize; +PFNNVNTEXTUREPOOLREGISTERTEXTUREPROC pfnc_nvnTexturePoolRegisterTexture; +PFNNVNTEXTUREPOOLREGISTERIMAGEPROC pfnc_nvnTexturePoolRegisterImage; +PFNNVNTEXTUREPOOLGETMEMORYPOOLPROC pfnc_nvnTexturePoolGetMemoryPool; +PFNNVNTEXTUREPOOLGETMEMORYOFFSETPROC pfnc_nvnTexturePoolGetMemoryOffset; +PFNNVNTEXTUREPOOLGETSIZEPROC pfnc_nvnTexturePoolGetSize; +PFNNVNSAMPLERPOOLINITIALIZEPROC pfnc_nvnSamplerPoolInitialize; +PFNNVNSAMPLERPOOLSETDEBUGLABELPROC pfnc_nvnSamplerPoolSetDebugLabel; +PFNNVNSAMPLERPOOLFINALIZEPROC pfnc_nvnSamplerPoolFinalize; +PFNNVNSAMPLERPOOLREGISTERSAMPLERPROC pfnc_nvnSamplerPoolRegisterSampler; +PFNNVNSAMPLERPOOLREGISTERSAMPLERBUILDERPROC pfnc_nvnSamplerPoolRegisterSamplerBuilder; +PFNNVNSAMPLERPOOLGETMEMORYPOOLPROC pfnc_nvnSamplerPoolGetMemoryPool; +PFNNVNSAMPLERPOOLGETMEMORYOFFSETPROC pfnc_nvnSamplerPoolGetMemoryOffset; +PFNNVNSAMPLERPOOLGETSIZEPROC pfnc_nvnSamplerPoolGetSize; +PFNNVNBUFFERBUILDERSETDEVICEPROC pfnc_nvnBufferBuilderSetDevice; +PFNNVNBUFFERBUILDERSETDEFAULTSPROC pfnc_nvnBufferBuilderSetDefaults; +PFNNVNBUFFERBUILDERSETSTORAGEPROC pfnc_nvnBufferBuilderSetStorage; +PFNNVNBUFFERBUILDERGETMEMORYPOOLPROC pfnc_nvnBufferBuilderGetMemoryPool; +PFNNVNBUFFERBUILDERGETMEMORYOFFSETPROC pfnc_nvnBufferBuilderGetMemoryOffset; +PFNNVNBUFFERBUILDERGETSIZEPROC pfnc_nvnBufferBuilderGetSize; +PFNNVNBUFFERINITIALIZEPROC pfnc_nvnBufferInitialize; +PFNNVNBUFFERSETDEBUGLABELPROC pfnc_nvnBufferSetDebugLabel; +PFNNVNBUFFERFINALIZEPROC pfnc_nvnBufferFinalize; +PFNNVNBUFFERMAPPROC pfnc_nvnBufferMap; +PFNNVNBUFFERGETADDRESSPROC pfnc_nvnBufferGetAddress; +PFNNVNBUFFERFLUSHMAPPEDRANGEPROC pfnc_nvnBufferFlushMappedRange; +PFNNVNBUFFERINVALIDATEMAPPEDRANGEPROC pfnc_nvnBufferInvalidateMappedRange; +PFNNVNBUFFERGETMEMORYPOOLPROC pfnc_nvnBufferGetMemoryPool; +PFNNVNBUFFERGETMEMORYOFFSETPROC pfnc_nvnBufferGetMemoryOffset; +PFNNVNBUFFERGETSIZEPROC pfnc_nvnBufferGetSize; +PFNNVNBUFFERGETDEBUGIDPROC pfnc_nvnBufferGetDebugID; +PFNNVNTEXTUREBUILDERSETDEVICEPROC pfnc_nvnTextureBuilderSetDevice; +PFNNVNTEXTUREBUILDERSETDEFAULTSPROC pfnc_nvnTextureBuilderSetDefaults; +PFNNVNTEXTUREBUILDERSETFLAGSPROC pfnc_nvnTextureBuilderSetFlags; +PFNNVNTEXTUREBUILDERSETTARGETPROC pfnc_nvnTextureBuilderSetTarget; +PFNNVNTEXTUREBUILDERSETWIDTHPROC pfnc_nvnTextureBuilderSetWidth; +PFNNVNTEXTUREBUILDERSETHEIGHTPROC pfnc_nvnTextureBuilderSetHeight; +PFNNVNTEXTUREBUILDERSETDEPTHPROC pfnc_nvnTextureBuilderSetDepth; +PFNNVNTEXTUREBUILDERSETSIZE1DPROC pfnc_nvnTextureBuilderSetSize1D; +PFNNVNTEXTUREBUILDERSETSIZE2DPROC pfnc_nvnTextureBuilderSetSize2D; +PFNNVNTEXTUREBUILDERSETSIZE3DPROC pfnc_nvnTextureBuilderSetSize3D; +PFNNVNTEXTUREBUILDERSETLEVELSPROC pfnc_nvnTextureBuilderSetLevels; +PFNNVNTEXTUREBUILDERSETFORMATPROC pfnc_nvnTextureBuilderSetFormat; +PFNNVNTEXTUREBUILDERSETSAMPLESPROC pfnc_nvnTextureBuilderSetSamples; +PFNNVNTEXTUREBUILDERSETSWIZZLEPROC pfnc_nvnTextureBuilderSetSwizzle; +PFNNVNTEXTUREBUILDERSETDEPTHSTENCILMODEPROC pfnc_nvnTextureBuilderSetDepthStencilMode; +PFNNVNTEXTUREBUILDERGETSTORAGESIZEPROC pfnc_nvnTextureBuilderGetStorageSize; +PFNNVNTEXTUREBUILDERGETSTORAGEALIGNMENTPROC pfnc_nvnTextureBuilderGetStorageAlignment; +PFNNVNTEXTUREBUILDERSETSTORAGEPROC pfnc_nvnTextureBuilderSetStorage; +PFNNVNTEXTUREBUILDERSETPACKAGEDTEXTUREDATAPROC pfnc_nvnTextureBuilderSetPackagedTextureData; +PFNNVNTEXTUREBUILDERSETPACKAGEDTEXTURELAYOUTPROC pfnc_nvnTextureBuilderSetPackagedTextureLayout; +PFNNVNTEXTUREBUILDERSETSTRIDEPROC pfnc_nvnTextureBuilderSetStride; +PFNNVNTEXTUREBUILDERSETGLTEXTURENAMEPROC pfnc_nvnTextureBuilderSetGLTextureName; +PFNNVNTEXTUREBUILDERGETSTORAGECLASSPROC pfnc_nvnTextureBuilderGetStorageClass; +PFNNVNTEXTUREBUILDERGETFLAGSPROC pfnc_nvnTextureBuilderGetFlags; +PFNNVNTEXTUREBUILDERGETTARGETPROC pfnc_nvnTextureBuilderGetTarget; +PFNNVNTEXTUREBUILDERGETWIDTHPROC pfnc_nvnTextureBuilderGetWidth; +PFNNVNTEXTUREBUILDERGETHEIGHTPROC pfnc_nvnTextureBuilderGetHeight; +PFNNVNTEXTUREBUILDERGETDEPTHPROC pfnc_nvnTextureBuilderGetDepth; +PFNNVNTEXTUREBUILDERGETLEVELSPROC pfnc_nvnTextureBuilderGetLevels; +PFNNVNTEXTUREBUILDERGETFORMATPROC pfnc_nvnTextureBuilderGetFormat; +PFNNVNTEXTUREBUILDERGETSAMPLESPROC pfnc_nvnTextureBuilderGetSamples; +PFNNVNTEXTUREBUILDERGETSWIZZLEPROC pfnc_nvnTextureBuilderGetSwizzle; +PFNNVNTEXTUREBUILDERGETDEPTHSTENCILMODEPROC pfnc_nvnTextureBuilderGetDepthStencilMode; +PFNNVNTEXTUREBUILDERGETPACKAGEDTEXTUREDATAPROC pfnc_nvnTextureBuilderGetPackagedTextureData; +PFNNVNTEXTUREBUILDERGETSTRIDEPROC pfnc_nvnTextureBuilderGetStride; +PFNNVNTEXTUREBUILDERGETSPARSETILELAYOUTPROC pfnc_nvnTextureBuilderGetSparseTileLayout; +PFNNVNTEXTUREBUILDERGETGLTEXTURENAMEPROC pfnc_nvnTextureBuilderGetGLTextureName; +PFNNVNTEXTUREBUILDERGETZCULLSTORAGESIZEPROC pfnc_nvnTextureBuilderGetZCullStorageSize; +PFNNVNTEXTUREBUILDERGETMEMORYPOOLPROC pfnc_nvnTextureBuilderGetMemoryPool; +PFNNVNTEXTUREBUILDERGETMEMORYOFFSETPROC pfnc_nvnTextureBuilderGetMemoryOffset; +PFNNVNTEXTUREVIEWSETDEFAULTSPROC pfnc_nvnTextureViewSetDefaults; +PFNNVNTEXTUREVIEWSETLEVELSPROC pfnc_nvnTextureViewSetLevels; +PFNNVNTEXTUREVIEWSETLAYERSPROC pfnc_nvnTextureViewSetLayers; +PFNNVNTEXTUREVIEWSETFORMATPROC pfnc_nvnTextureViewSetFormat; +PFNNVNTEXTUREVIEWSETSWIZZLEPROC pfnc_nvnTextureViewSetSwizzle; +PFNNVNTEXTUREVIEWSETDEPTHSTENCILMODEPROC pfnc_nvnTextureViewSetDepthStencilMode; +PFNNVNTEXTUREVIEWSETTARGETPROC pfnc_nvnTextureViewSetTarget; +PFNNVNTEXTUREVIEWGETLEVELSPROC pfnc_nvnTextureViewGetLevels; +PFNNVNTEXTUREVIEWGETLAYERSPROC pfnc_nvnTextureViewGetLayers; +PFNNVNTEXTUREVIEWGETFORMATPROC pfnc_nvnTextureViewGetFormat; +PFNNVNTEXTUREVIEWGETSWIZZLEPROC pfnc_nvnTextureViewGetSwizzle; +PFNNVNTEXTUREVIEWGETDEPTHSTENCILMODEPROC pfnc_nvnTextureViewGetDepthStencilMode; +PFNNVNTEXTUREVIEWGETTARGETPROC pfnc_nvnTextureViewGetTarget; +PFNNVNTEXTUREVIEWCOMPAREPROC pfnc_nvnTextureViewCompare; +PFNNVNTEXTUREINITIALIZEPROC pfnc_nvnTextureInitialize; +PFNNVNTEXTUREGETZCULLSTORAGESIZEPROC pfnc_nvnTextureGetZCullStorageSize; +PFNNVNTEXTUREFINALIZEPROC pfnc_nvnTextureFinalize; +PFNNVNTEXTURESETDEBUGLABELPROC pfnc_nvnTextureSetDebugLabel; +PFNNVNTEXTUREGETSTORAGECLASSPROC pfnc_nvnTextureGetStorageClass; +PFNNVNTEXTUREGETVIEWOFFSETPROC pfnc_nvnTextureGetViewOffset; +PFNNVNTEXTUREGETFLAGSPROC pfnc_nvnTextureGetFlags; +PFNNVNTEXTUREGETTARGETPROC pfnc_nvnTextureGetTarget; +PFNNVNTEXTUREGETWIDTHPROC pfnc_nvnTextureGetWidth; +PFNNVNTEXTUREGETHEIGHTPROC pfnc_nvnTextureGetHeight; +PFNNVNTEXTUREGETDEPTHPROC pfnc_nvnTextureGetDepth; +PFNNVNTEXTUREGETLEVELSPROC pfnc_nvnTextureGetLevels; +PFNNVNTEXTUREGETFORMATPROC pfnc_nvnTextureGetFormat; +PFNNVNTEXTUREGETSAMPLESPROC pfnc_nvnTextureGetSamples; +PFNNVNTEXTUREGETSWIZZLEPROC pfnc_nvnTextureGetSwizzle; +PFNNVNTEXTUREGETDEPTHSTENCILMODEPROC pfnc_nvnTextureGetDepthStencilMode; +PFNNVNTEXTUREGETSTRIDEPROC pfnc_nvnTextureGetStride; +PFNNVNTEXTUREGETTEXTUREADDRESSPROC pfnc_nvnTextureGetTextureAddress; +PFNNVNTEXTUREGETSPARSETILELAYOUTPROC pfnc_nvnTextureGetSparseTileLayout; +PFNNVNTEXTUREWRITETEXELSPROC pfnc_nvnTextureWriteTexels; +PFNNVNTEXTUREWRITETEXELSSTRIDEDPROC pfnc_nvnTextureWriteTexelsStrided; +PFNNVNTEXTUREREADTEXELSPROC pfnc_nvnTextureReadTexels; +PFNNVNTEXTUREREADTEXELSSTRIDEDPROC pfnc_nvnTextureReadTexelsStrided; +PFNNVNTEXTUREFLUSHTEXELSPROC pfnc_nvnTextureFlushTexels; +PFNNVNTEXTUREINVALIDATETEXELSPROC pfnc_nvnTextureInvalidateTexels; +PFNNVNTEXTUREGETMEMORYPOOLPROC pfnc_nvnTextureGetMemoryPool; +PFNNVNTEXTUREGETMEMORYOFFSETPROC pfnc_nvnTextureGetMemoryOffset; +PFNNVNTEXTUREGETSTORAGESIZEPROC pfnc_nvnTextureGetStorageSize; +PFNNVNTEXTURECOMPAREPROC pfnc_nvnTextureCompare; +PFNNVNTEXTUREGETDEBUGIDPROC pfnc_nvnTextureGetDebugID; +PFNNVNSAMPLERBUILDERSETDEVICEPROC pfnc_nvnSamplerBuilderSetDevice; +PFNNVNSAMPLERBUILDERSETDEFAULTSPROC pfnc_nvnSamplerBuilderSetDefaults; +PFNNVNSAMPLERBUILDERSETMINMAGFILTERPROC pfnc_nvnSamplerBuilderSetMinMagFilter; +PFNNVNSAMPLERBUILDERSETWRAPMODEPROC pfnc_nvnSamplerBuilderSetWrapMode; +PFNNVNSAMPLERBUILDERSETLODCLAMPPROC pfnc_nvnSamplerBuilderSetLodClamp; +PFNNVNSAMPLERBUILDERSETLODBIASPROC pfnc_nvnSamplerBuilderSetLodBias; +PFNNVNSAMPLERBUILDERSETCOMPAREPROC pfnc_nvnSamplerBuilderSetCompare; +PFNNVNSAMPLERBUILDERSETBORDERCOLORPROC pfnc_nvnSamplerBuilderSetBorderColor; +PFNNVNSAMPLERBUILDERSETBORDERCOLORIPROC pfnc_nvnSamplerBuilderSetBorderColori; +PFNNVNSAMPLERBUILDERSETBORDERCOLORUIPROC pfnc_nvnSamplerBuilderSetBorderColorui; +PFNNVNSAMPLERBUILDERSETMAXANISOTROPYPROC pfnc_nvnSamplerBuilderSetMaxAnisotropy; +PFNNVNSAMPLERBUILDERSETREDUCTIONFILTERPROC pfnc_nvnSamplerBuilderSetReductionFilter; +PFNNVNSAMPLERBUILDERSETLODSNAPPROC pfnc_nvnSamplerBuilderSetLodSnap; +PFNNVNSAMPLERBUILDERGETMINMAGFILTERPROC pfnc_nvnSamplerBuilderGetMinMagFilter; +PFNNVNSAMPLERBUILDERGETWRAPMODEPROC pfnc_nvnSamplerBuilderGetWrapMode; +PFNNVNSAMPLERBUILDERGETLODCLAMPPROC pfnc_nvnSamplerBuilderGetLodClamp; +PFNNVNSAMPLERBUILDERGETLODBIASPROC pfnc_nvnSamplerBuilderGetLodBias; +PFNNVNSAMPLERBUILDERGETCOMPAREPROC pfnc_nvnSamplerBuilderGetCompare; +PFNNVNSAMPLERBUILDERGETBORDERCOLORPROC pfnc_nvnSamplerBuilderGetBorderColor; +PFNNVNSAMPLERBUILDERGETBORDERCOLORIPROC pfnc_nvnSamplerBuilderGetBorderColori; +PFNNVNSAMPLERBUILDERGETBORDERCOLORUIPROC pfnc_nvnSamplerBuilderGetBorderColorui; +PFNNVNSAMPLERBUILDERGETMAXANISOTROPYPROC pfnc_nvnSamplerBuilderGetMaxAnisotropy; +PFNNVNSAMPLERBUILDERGETREDUCTIONFILTERPROC pfnc_nvnSamplerBuilderGetReductionFilter; +PFNNVNSAMPLERBUILDERGETLODSNAPPROC pfnc_nvnSamplerBuilderGetLodSnap; +PFNNVNSAMPLERINITIALIZEPROC pfnc_nvnSamplerInitialize; +PFNNVNSAMPLERFINALIZEPROC pfnc_nvnSamplerFinalize; +PFNNVNSAMPLERSETDEBUGLABELPROC pfnc_nvnSamplerSetDebugLabel; +PFNNVNSAMPLERGETMINMAGFILTERPROC pfnc_nvnSamplerGetMinMagFilter; +PFNNVNSAMPLERGETWRAPMODEPROC pfnc_nvnSamplerGetWrapMode; +PFNNVNSAMPLERGETLODCLAMPPROC pfnc_nvnSamplerGetLodClamp; +PFNNVNSAMPLERGETLODBIASPROC pfnc_nvnSamplerGetLodBias; +PFNNVNSAMPLERGETCOMPAREPROC pfnc_nvnSamplerGetCompare; +PFNNVNSAMPLERGETBORDERCOLORPROC pfnc_nvnSamplerGetBorderColor; +PFNNVNSAMPLERGETBORDERCOLORIPROC pfnc_nvnSamplerGetBorderColori; +PFNNVNSAMPLERGETBORDERCOLORUIPROC pfnc_nvnSamplerGetBorderColorui; +PFNNVNSAMPLERGETMAXANISOTROPYPROC pfnc_nvnSamplerGetMaxAnisotropy; +PFNNVNSAMPLERGETREDUCTIONFILTERPROC pfnc_nvnSamplerGetReductionFilter; +PFNNVNSAMPLERCOMPAREPROC pfnc_nvnSamplerCompare; +PFNNVNSAMPLERGETDEBUGIDPROC pfnc_nvnSamplerGetDebugID; +PFNNVNBLENDSTATESETDEFAULTSPROC pfnc_nvnBlendStateSetDefaults; +PFNNVNBLENDSTATESETBLENDTARGETPROC pfnc_nvnBlendStateSetBlendTarget; +PFNNVNBLENDSTATESETBLENDFUNCPROC pfnc_nvnBlendStateSetBlendFunc; +PFNNVNBLENDSTATESETBLENDEQUATIONPROC pfnc_nvnBlendStateSetBlendEquation; +PFNNVNBLENDSTATESETADVANCEDMODEPROC pfnc_nvnBlendStateSetAdvancedMode; +PFNNVNBLENDSTATESETADVANCEDOVERLAPPROC pfnc_nvnBlendStateSetAdvancedOverlap; +PFNNVNBLENDSTATESETADVANCEDPREMULTIPLIEDSRCPROC pfnc_nvnBlendStateSetAdvancedPremultipliedSrc; +PFNNVNBLENDSTATESETADVANCEDNORMALIZEDDSTPROC pfnc_nvnBlendStateSetAdvancedNormalizedDst; +PFNNVNBLENDSTATEGETBLENDTARGETPROC pfnc_nvnBlendStateGetBlendTarget; +PFNNVNBLENDSTATEGETBLENDFUNCPROC pfnc_nvnBlendStateGetBlendFunc; +PFNNVNBLENDSTATEGETBLENDEQUATIONPROC pfnc_nvnBlendStateGetBlendEquation; +PFNNVNBLENDSTATEGETADVANCEDMODEPROC pfnc_nvnBlendStateGetAdvancedMode; +PFNNVNBLENDSTATEGETADVANCEDOVERLAPPROC pfnc_nvnBlendStateGetAdvancedOverlap; +PFNNVNBLENDSTATEGETADVANCEDPREMULTIPLIEDSRCPROC pfnc_nvnBlendStateGetAdvancedPremultipliedSrc; +PFNNVNBLENDSTATEGETADVANCEDNORMALIZEDDSTPROC pfnc_nvnBlendStateGetAdvancedNormalizedDst; +PFNNVNCOLORSTATESETDEFAULTSPROC pfnc_nvnColorStateSetDefaults; +PFNNVNCOLORSTATESETBLENDENABLEPROC pfnc_nvnColorStateSetBlendEnable; +PFNNVNCOLORSTATESETLOGICOPPROC pfnc_nvnColorStateSetLogicOp; +PFNNVNCOLORSTATESETALPHATESTPROC pfnc_nvnColorStateSetAlphaTest; +PFNNVNCOLORSTATEGETBLENDENABLEPROC pfnc_nvnColorStateGetBlendEnable; +PFNNVNCOLORSTATEGETLOGICOPPROC pfnc_nvnColorStateGetLogicOp; +PFNNVNCOLORSTATEGETALPHATESTPROC pfnc_nvnColorStateGetAlphaTest; +PFNNVNCHANNELMASKSTATESETDEFAULTSPROC pfnc_nvnChannelMaskStateSetDefaults; +PFNNVNCHANNELMASKSTATESETCHANNELMASKPROC pfnc_nvnChannelMaskStateSetChannelMask; +PFNNVNCHANNELMASKSTATEGETCHANNELMASKPROC pfnc_nvnChannelMaskStateGetChannelMask; +PFNNVNMULTISAMPLESTATESETDEFAULTSPROC pfnc_nvnMultisampleStateSetDefaults; +PFNNVNMULTISAMPLESTATESETMULTISAMPLEENABLEPROC pfnc_nvnMultisampleStateSetMultisampleEnable; +PFNNVNMULTISAMPLESTATESETSAMPLESPROC pfnc_nvnMultisampleStateSetSamples; +PFNNVNMULTISAMPLESTATESETALPHATOCOVERAGEENABLEPROC pfnc_nvnMultisampleStateSetAlphaToCoverageEnable; +PFNNVNMULTISAMPLESTATESETALPHATOCOVERAGEDITHERPROC pfnc_nvnMultisampleStateSetAlphaToCoverageDither; +PFNNVNMULTISAMPLESTATEGETMULTISAMPLEENABLEPROC pfnc_nvnMultisampleStateGetMultisampleEnable; +PFNNVNMULTISAMPLESTATEGETSAMPLESPROC pfnc_nvnMultisampleStateGetSamples; +PFNNVNMULTISAMPLESTATEGETALPHATOCOVERAGEENABLEPROC pfnc_nvnMultisampleStateGetAlphaToCoverageEnable; +PFNNVNMULTISAMPLESTATEGETALPHATOCOVERAGEDITHERPROC pfnc_nvnMultisampleStateGetAlphaToCoverageDither; +PFNNVNMULTISAMPLESTATESETRASTERSAMPLESPROC pfnc_nvnMultisampleStateSetRasterSamples; +PFNNVNMULTISAMPLESTATEGETRASTERSAMPLESPROC pfnc_nvnMultisampleStateGetRasterSamples; +PFNNVNMULTISAMPLESTATESETCOVERAGEMODULATIONMODEPROC pfnc_nvnMultisampleStateSetCoverageModulationMode; +PFNNVNMULTISAMPLESTATEGETCOVERAGEMODULATIONMODEPROC pfnc_nvnMultisampleStateGetCoverageModulationMode; +PFNNVNMULTISAMPLESTATESETCOVERAGETOCOLORENABLEPROC pfnc_nvnMultisampleStateSetCoverageToColorEnable; +PFNNVNMULTISAMPLESTATEGETCOVERAGETOCOLORENABLEPROC pfnc_nvnMultisampleStateGetCoverageToColorEnable; +PFNNVNMULTISAMPLESTATESETCOVERAGETOCOLOROUTPUTPROC pfnc_nvnMultisampleStateSetCoverageToColorOutput; +PFNNVNMULTISAMPLESTATEGETCOVERAGETOCOLOROUTPUTPROC pfnc_nvnMultisampleStateGetCoverageToColorOutput; +PFNNVNMULTISAMPLESTATESETSAMPLELOCATIONSENABLEPROC pfnc_nvnMultisampleStateSetSampleLocationsEnable; +PFNNVNMULTISAMPLESTATEGETSAMPLELOCATIONSENABLEPROC pfnc_nvnMultisampleStateGetSampleLocationsEnable; +PFNNVNMULTISAMPLESTATEGETSAMPLELOCATIONSGRIDPROC pfnc_nvnMultisampleStateGetSampleLocationsGrid; +PFNNVNMULTISAMPLESTATESETSAMPLELOCATIONSGRIDENABLEPROC pfnc_nvnMultisampleStateSetSampleLocationsGridEnable; +PFNNVNMULTISAMPLESTATEGETSAMPLELOCATIONSGRIDENABLEPROC pfnc_nvnMultisampleStateGetSampleLocationsGridEnable; +PFNNVNMULTISAMPLESTATESETSAMPLELOCATIONSPROC pfnc_nvnMultisampleStateSetSampleLocations; +PFNNVNPOLYGONSTATESETDEFAULTSPROC pfnc_nvnPolygonStateSetDefaults; +PFNNVNPOLYGONSTATESETCULLFACEPROC pfnc_nvnPolygonStateSetCullFace; +PFNNVNPOLYGONSTATESETFRONTFACEPROC pfnc_nvnPolygonStateSetFrontFace; +PFNNVNPOLYGONSTATESETPOLYGONMODEPROC pfnc_nvnPolygonStateSetPolygonMode; +PFNNVNPOLYGONSTATESETPOLYGONOFFSETENABLESPROC pfnc_nvnPolygonStateSetPolygonOffsetEnables; +PFNNVNPOLYGONSTATEGETCULLFACEPROC pfnc_nvnPolygonStateGetCullFace; +PFNNVNPOLYGONSTATEGETFRONTFACEPROC pfnc_nvnPolygonStateGetFrontFace; +PFNNVNPOLYGONSTATEGETPOLYGONMODEPROC pfnc_nvnPolygonStateGetPolygonMode; +PFNNVNPOLYGONSTATEGETPOLYGONOFFSETENABLESPROC pfnc_nvnPolygonStateGetPolygonOffsetEnables; +PFNNVNDEPTHSTENCILSTATESETDEFAULTSPROC pfnc_nvnDepthStencilStateSetDefaults; +PFNNVNDEPTHSTENCILSTATESETDEPTHTESTENABLEPROC pfnc_nvnDepthStencilStateSetDepthTestEnable; +PFNNVNDEPTHSTENCILSTATESETDEPTHWRITEENABLEPROC pfnc_nvnDepthStencilStateSetDepthWriteEnable; +PFNNVNDEPTHSTENCILSTATESETDEPTHFUNCPROC pfnc_nvnDepthStencilStateSetDepthFunc; +PFNNVNDEPTHSTENCILSTATESETSTENCILTESTENABLEPROC pfnc_nvnDepthStencilStateSetStencilTestEnable; +PFNNVNDEPTHSTENCILSTATESETSTENCILFUNCPROC pfnc_nvnDepthStencilStateSetStencilFunc; +PFNNVNDEPTHSTENCILSTATESETSTENCILOPPROC pfnc_nvnDepthStencilStateSetStencilOp; +PFNNVNDEPTHSTENCILSTATEGETDEPTHTESTENABLEPROC pfnc_nvnDepthStencilStateGetDepthTestEnable; +PFNNVNDEPTHSTENCILSTATEGETDEPTHWRITEENABLEPROC pfnc_nvnDepthStencilStateGetDepthWriteEnable; +PFNNVNDEPTHSTENCILSTATEGETDEPTHFUNCPROC pfnc_nvnDepthStencilStateGetDepthFunc; +PFNNVNDEPTHSTENCILSTATEGETSTENCILTESTENABLEPROC pfnc_nvnDepthStencilStateGetStencilTestEnable; +PFNNVNDEPTHSTENCILSTATEGETSTENCILFUNCPROC pfnc_nvnDepthStencilStateGetStencilFunc; +PFNNVNDEPTHSTENCILSTATEGETSTENCILOPPROC pfnc_nvnDepthStencilStateGetStencilOp; +PFNNVNVERTEXATTRIBSTATESETDEFAULTSPROC pfnc_nvnVertexAttribStateSetDefaults; +PFNNVNVERTEXATTRIBSTATESETFORMATPROC pfnc_nvnVertexAttribStateSetFormat; +PFNNVNVERTEXATTRIBSTATESETSTREAMINDEXPROC pfnc_nvnVertexAttribStateSetStreamIndex; +PFNNVNVERTEXATTRIBSTATEGETFORMATPROC pfnc_nvnVertexAttribStateGetFormat; +PFNNVNVERTEXATTRIBSTATEGETSTREAMINDEXPROC pfnc_nvnVertexAttribStateGetStreamIndex; +PFNNVNVERTEXSTREAMSTATESETDEFAULTSPROC pfnc_nvnVertexStreamStateSetDefaults; +PFNNVNVERTEXSTREAMSTATESETSTRIDEPROC pfnc_nvnVertexStreamStateSetStride; +PFNNVNVERTEXSTREAMSTATESETDIVISORPROC pfnc_nvnVertexStreamStateSetDivisor; +PFNNVNVERTEXSTREAMSTATEGETSTRIDEPROC pfnc_nvnVertexStreamStateGetStride; +PFNNVNVERTEXSTREAMSTATEGETDIVISORPROC pfnc_nvnVertexStreamStateGetDivisor; +PFNNVNCOMMANDBUFFERINITIALIZEPROC pfnc_nvnCommandBufferInitialize; +PFNNVNCOMMANDBUFFERFINALIZEPROC pfnc_nvnCommandBufferFinalize; +PFNNVNCOMMANDBUFFERSETDEBUGLABELPROC pfnc_nvnCommandBufferSetDebugLabel; +PFNNVNCOMMANDBUFFERSETMEMORYCALLBACKPROC pfnc_nvnCommandBufferSetMemoryCallback; +PFNNVNCOMMANDBUFFERSETMEMORYCALLBACKDATAPROC pfnc_nvnCommandBufferSetMemoryCallbackData; +PFNNVNCOMMANDBUFFERADDCOMMANDMEMORYPROC pfnc_nvnCommandBufferAddCommandMemory; +PFNNVNCOMMANDBUFFERADDCONTROLMEMORYPROC pfnc_nvnCommandBufferAddControlMemory; +PFNNVNCOMMANDBUFFERGETCOMMANDMEMORYSIZEPROC pfnc_nvnCommandBufferGetCommandMemorySize; +PFNNVNCOMMANDBUFFERGETCOMMANDMEMORYUSEDPROC pfnc_nvnCommandBufferGetCommandMemoryUsed; +PFNNVNCOMMANDBUFFERGETCOMMANDMEMORYFREEPROC pfnc_nvnCommandBufferGetCommandMemoryFree; +PFNNVNCOMMANDBUFFERGETCONTROLMEMORYSIZEPROC pfnc_nvnCommandBufferGetControlMemorySize; +PFNNVNCOMMANDBUFFERGETCONTROLMEMORYUSEDPROC pfnc_nvnCommandBufferGetControlMemoryUsed; +PFNNVNCOMMANDBUFFERGETCONTROLMEMORYFREEPROC pfnc_nvnCommandBufferGetControlMemoryFree; +PFNNVNCOMMANDBUFFERBEGINRECORDINGPROC pfnc_nvnCommandBufferBeginRecording; +PFNNVNCOMMANDBUFFERENDRECORDINGPROC pfnc_nvnCommandBufferEndRecording; +PFNNVNCOMMANDBUFFERCALLCOMMANDSPROC pfnc_nvnCommandBufferCallCommands; +PFNNVNCOMMANDBUFFERCOPYCOMMANDSPROC pfnc_nvnCommandBufferCopyCommands; +PFNNVNCOMMANDBUFFERBINDBLENDSTATEPROC pfnc_nvnCommandBufferBindBlendState; +PFNNVNCOMMANDBUFFERBINDCHANNELMASKSTATEPROC pfnc_nvnCommandBufferBindChannelMaskState; +PFNNVNCOMMANDBUFFERBINDCOLORSTATEPROC pfnc_nvnCommandBufferBindColorState; +PFNNVNCOMMANDBUFFERBINDMULTISAMPLESTATEPROC pfnc_nvnCommandBufferBindMultisampleState; +PFNNVNCOMMANDBUFFERBINDPOLYGONSTATEPROC pfnc_nvnCommandBufferBindPolygonState; +PFNNVNCOMMANDBUFFERBINDDEPTHSTENCILSTATEPROC pfnc_nvnCommandBufferBindDepthStencilState; +PFNNVNCOMMANDBUFFERBINDVERTEXATTRIBSTATEPROC pfnc_nvnCommandBufferBindVertexAttribState; +PFNNVNCOMMANDBUFFERBINDVERTEXSTREAMSTATEPROC pfnc_nvnCommandBufferBindVertexStreamState; +PFNNVNCOMMANDBUFFERBINDPROGRAMPROC pfnc_nvnCommandBufferBindProgram; +PFNNVNCOMMANDBUFFERBINDVERTEXBUFFERPROC pfnc_nvnCommandBufferBindVertexBuffer; +PFNNVNCOMMANDBUFFERBINDVERTEXBUFFERSPROC pfnc_nvnCommandBufferBindVertexBuffers; +PFNNVNCOMMANDBUFFERBINDUNIFORMBUFFERPROC pfnc_nvnCommandBufferBindUniformBuffer; +PFNNVNCOMMANDBUFFERBINDUNIFORMBUFFERSPROC pfnc_nvnCommandBufferBindUniformBuffers; +PFNNVNCOMMANDBUFFERBINDTRANSFORMFEEDBACKBUFFERPROC pfnc_nvnCommandBufferBindTransformFeedbackBuffer; +PFNNVNCOMMANDBUFFERBINDTRANSFORMFEEDBACKBUFFERSPROC pfnc_nvnCommandBufferBindTransformFeedbackBuffers; +PFNNVNCOMMANDBUFFERBINDSTORAGEBUFFERPROC pfnc_nvnCommandBufferBindStorageBuffer; +PFNNVNCOMMANDBUFFERBINDSTORAGEBUFFERSPROC pfnc_nvnCommandBufferBindStorageBuffers; +PFNNVNCOMMANDBUFFERBINDTEXTUREPROC pfnc_nvnCommandBufferBindTexture; +PFNNVNCOMMANDBUFFERBINDTEXTURESPROC pfnc_nvnCommandBufferBindTextures; +PFNNVNCOMMANDBUFFERBINDIMAGEPROC pfnc_nvnCommandBufferBindImage; +PFNNVNCOMMANDBUFFERBINDIMAGESPROC pfnc_nvnCommandBufferBindImages; +PFNNVNCOMMANDBUFFERSETPATCHSIZEPROC pfnc_nvnCommandBufferSetPatchSize; +PFNNVNCOMMANDBUFFERSETINNERTESSELLATIONLEVELSPROC pfnc_nvnCommandBufferSetInnerTessellationLevels; +PFNNVNCOMMANDBUFFERSETOUTERTESSELLATIONLEVELSPROC pfnc_nvnCommandBufferSetOuterTessellationLevels; +PFNNVNCOMMANDBUFFERSETPRIMITIVERESTARTPROC pfnc_nvnCommandBufferSetPrimitiveRestart; +PFNNVNCOMMANDBUFFERBEGINTRANSFORMFEEDBACKPROC pfnc_nvnCommandBufferBeginTransformFeedback; +PFNNVNCOMMANDBUFFERENDTRANSFORMFEEDBACKPROC pfnc_nvnCommandBufferEndTransformFeedback; +PFNNVNCOMMANDBUFFERPAUSETRANSFORMFEEDBACKPROC pfnc_nvnCommandBufferPauseTransformFeedback; +PFNNVNCOMMANDBUFFERRESUMETRANSFORMFEEDBACKPROC pfnc_nvnCommandBufferResumeTransformFeedback; +PFNNVNCOMMANDBUFFERDRAWTRANSFORMFEEDBACKPROC pfnc_nvnCommandBufferDrawTransformFeedback; +PFNNVNCOMMANDBUFFERDRAWARRAYSPROC pfnc_nvnCommandBufferDrawArrays; +PFNNVNCOMMANDBUFFERDRAWELEMENTSPROC pfnc_nvnCommandBufferDrawElements; +PFNNVNCOMMANDBUFFERDRAWELEMENTSBASEVERTEXPROC pfnc_nvnCommandBufferDrawElementsBaseVertex; +PFNNVNCOMMANDBUFFERDRAWARRAYSINSTANCEDPROC pfnc_nvnCommandBufferDrawArraysInstanced; +PFNNVNCOMMANDBUFFERDRAWELEMENTSINSTANCEDPROC pfnc_nvnCommandBufferDrawElementsInstanced; +PFNNVNCOMMANDBUFFERDRAWARRAYSINDIRECTPROC pfnc_nvnCommandBufferDrawArraysIndirect; +PFNNVNCOMMANDBUFFERDRAWELEMENTSINDIRECTPROC pfnc_nvnCommandBufferDrawElementsIndirect; +PFNNVNCOMMANDBUFFERMULTIDRAWARRAYSINDIRECTCOUNTPROC pfnc_nvnCommandBufferMultiDrawArraysIndirectCount; +PFNNVNCOMMANDBUFFERMULTIDRAWELEMENTSINDIRECTCOUNTPROC pfnc_nvnCommandBufferMultiDrawElementsIndirectCount; +PFNNVNCOMMANDBUFFERCLEARCOLORPROC pfnc_nvnCommandBufferClearColor; +PFNNVNCOMMANDBUFFERCLEARCOLORIPROC pfnc_nvnCommandBufferClearColori; +PFNNVNCOMMANDBUFFERCLEARCOLORUIPROC pfnc_nvnCommandBufferClearColorui; +PFNNVNCOMMANDBUFFERCLEARDEPTHSTENCILPROC pfnc_nvnCommandBufferClearDepthStencil; +PFNNVNCOMMANDBUFFERDISPATCHCOMPUTEPROC pfnc_nvnCommandBufferDispatchCompute; +PFNNVNCOMMANDBUFFERDISPATCHCOMPUTEINDIRECTPROC pfnc_nvnCommandBufferDispatchComputeIndirect; +PFNNVNCOMMANDBUFFERSETVIEWPORTPROC pfnc_nvnCommandBufferSetViewport; +PFNNVNCOMMANDBUFFERSETVIEWPORTSPROC pfnc_nvnCommandBufferSetViewports; +PFNNVNCOMMANDBUFFERSETVIEWPORTSWIZZLESPROC pfnc_nvnCommandBufferSetViewportSwizzles; +PFNNVNCOMMANDBUFFERSETSCISSORPROC pfnc_nvnCommandBufferSetScissor; +PFNNVNCOMMANDBUFFERSETSCISSORSPROC pfnc_nvnCommandBufferSetScissors; +PFNNVNCOMMANDBUFFERSETDEPTHRANGEPROC pfnc_nvnCommandBufferSetDepthRange; +PFNNVNCOMMANDBUFFERSETDEPTHBOUNDSPROC pfnc_nvnCommandBufferSetDepthBounds; +PFNNVNCOMMANDBUFFERSETDEPTHRANGESPROC pfnc_nvnCommandBufferSetDepthRanges; +PFNNVNCOMMANDBUFFERSETTILEDCACHEACTIONPROC pfnc_nvnCommandBufferSetTiledCacheAction; +PFNNVNCOMMANDBUFFERSETTILEDCACHETILESIZEPROC pfnc_nvnCommandBufferSetTiledCacheTileSize; +PFNNVNCOMMANDBUFFERBINDSEPARATETEXTUREPROC pfnc_nvnCommandBufferBindSeparateTexture; +PFNNVNCOMMANDBUFFERBINDSEPARATESAMPLERPROC pfnc_nvnCommandBufferBindSeparateSampler; +PFNNVNCOMMANDBUFFERBINDSEPARATETEXTURESPROC pfnc_nvnCommandBufferBindSeparateTextures; +PFNNVNCOMMANDBUFFERBINDSEPARATESAMPLERSPROC pfnc_nvnCommandBufferBindSeparateSamplers; +PFNNVNCOMMANDBUFFERSETSTENCILVALUEMASKPROC pfnc_nvnCommandBufferSetStencilValueMask; +PFNNVNCOMMANDBUFFERSETSTENCILMASKPROC pfnc_nvnCommandBufferSetStencilMask; +PFNNVNCOMMANDBUFFERSETSTENCILREFPROC pfnc_nvnCommandBufferSetStencilRef; +PFNNVNCOMMANDBUFFERSETBLENDCOLORPROC pfnc_nvnCommandBufferSetBlendColor; +PFNNVNCOMMANDBUFFERSETPOINTSIZEPROC pfnc_nvnCommandBufferSetPointSize; +PFNNVNCOMMANDBUFFERSETLINEWIDTHPROC pfnc_nvnCommandBufferSetLineWidth; +PFNNVNCOMMANDBUFFERSETPOLYGONOFFSETCLAMPPROC pfnc_nvnCommandBufferSetPolygonOffsetClamp; +PFNNVNCOMMANDBUFFERSETALPHAREFPROC pfnc_nvnCommandBufferSetAlphaRef; +PFNNVNCOMMANDBUFFERSETSAMPLEMASKPROC pfnc_nvnCommandBufferSetSampleMask; +PFNNVNCOMMANDBUFFERSETRASTERIZERDISCARDPROC pfnc_nvnCommandBufferSetRasterizerDiscard; +PFNNVNCOMMANDBUFFERSETDEPTHCLAMPPROC pfnc_nvnCommandBufferSetDepthClamp; +PFNNVNCOMMANDBUFFERSETCONSERVATIVERASTERENABLEPROC pfnc_nvnCommandBufferSetConservativeRasterEnable; +PFNNVNCOMMANDBUFFERSETCONSERVATIVERASTERDILATEPROC pfnc_nvnCommandBufferSetConservativeRasterDilate; +PFNNVNCOMMANDBUFFERSETSUBPIXELPRECISIONBIASPROC pfnc_nvnCommandBufferSetSubpixelPrecisionBias; +PFNNVNCOMMANDBUFFERCOPYBUFFERTOTEXTUREPROC pfnc_nvnCommandBufferCopyBufferToTexture; +PFNNVNCOMMANDBUFFERCOPYTEXTURETOBUFFERPROC pfnc_nvnCommandBufferCopyTextureToBuffer; +PFNNVNCOMMANDBUFFERCOPYTEXTURETOTEXTUREPROC pfnc_nvnCommandBufferCopyTextureToTexture; +PFNNVNCOMMANDBUFFERCOPYBUFFERTOBUFFERPROC pfnc_nvnCommandBufferCopyBufferToBuffer; +PFNNVNCOMMANDBUFFERCLEARBUFFERPROC pfnc_nvnCommandBufferClearBuffer; +PFNNVNCOMMANDBUFFERCLEARTEXTUREPROC pfnc_nvnCommandBufferClearTexture; +PFNNVNCOMMANDBUFFERCLEARTEXTUREIPROC pfnc_nvnCommandBufferClearTexturei; +PFNNVNCOMMANDBUFFERCLEARTEXTUREUIPROC pfnc_nvnCommandBufferClearTextureui; +PFNNVNCOMMANDBUFFERUPDATEUNIFORMBUFFERPROC pfnc_nvnCommandBufferUpdateUniformBuffer; +PFNNVNCOMMANDBUFFERREPORTCOUNTERPROC pfnc_nvnCommandBufferReportCounter; +PFNNVNCOMMANDBUFFERRESETCOUNTERPROC pfnc_nvnCommandBufferResetCounter; +PFNNVNCOMMANDBUFFERREPORTVALUEPROC pfnc_nvnCommandBufferReportValue; +PFNNVNCOMMANDBUFFERSETRENDERENABLEPROC pfnc_nvnCommandBufferSetRenderEnable; +PFNNVNCOMMANDBUFFERSETRENDERENABLECONDITIONALPROC pfnc_nvnCommandBufferSetRenderEnableConditional; +PFNNVNCOMMANDBUFFERSETRENDERTARGETSPROC pfnc_nvnCommandBufferSetRenderTargets; +PFNNVNCOMMANDBUFFERDISCARDCOLORPROC pfnc_nvnCommandBufferDiscardColor; +PFNNVNCOMMANDBUFFERDISCARDDEPTHSTENCILPROC pfnc_nvnCommandBufferDiscardDepthStencil; +PFNNVNCOMMANDBUFFERDOWNSAMPLEPROC pfnc_nvnCommandBufferDownsample; +PFNNVNCOMMANDBUFFERTILEDDOWNSAMPLEPROC pfnc_nvnCommandBufferTiledDownsample; +PFNNVNCOMMANDBUFFERDOWNSAMPLETEXTUREVIEWPROC pfnc_nvnCommandBufferDownsampleTextureView; +PFNNVNCOMMANDBUFFERTILEDDOWNSAMPLETEXTUREVIEWPROC pfnc_nvnCommandBufferTiledDownsampleTextureView; +PFNNVNCOMMANDBUFFERBARRIERPROC pfnc_nvnCommandBufferBarrier; +PFNNVNCOMMANDBUFFERWAITSYNCPROC pfnc_nvnCommandBufferWaitSync; +PFNNVNCOMMANDBUFFERFENCESYNCPROC pfnc_nvnCommandBufferFenceSync; +PFNNVNCOMMANDBUFFERSETTEXTUREPOOLPROC pfnc_nvnCommandBufferSetTexturePool; +PFNNVNCOMMANDBUFFERSETSAMPLERPOOLPROC pfnc_nvnCommandBufferSetSamplerPool; +PFNNVNCOMMANDBUFFERSETSHADERSCRATCHMEMORYPROC pfnc_nvnCommandBufferSetShaderScratchMemory; +PFNNVNCOMMANDBUFFERSAVEZCULLDATAPROC pfnc_nvnCommandBufferSaveZCullData; +PFNNVNCOMMANDBUFFERRESTOREZCULLDATAPROC pfnc_nvnCommandBufferRestoreZCullData; +PFNNVNCOMMANDBUFFERSETCOPYROWSTRIDEPROC pfnc_nvnCommandBufferSetCopyRowStride; +PFNNVNCOMMANDBUFFERSETCOPYIMAGESTRIDEPROC pfnc_nvnCommandBufferSetCopyImageStride; +PFNNVNCOMMANDBUFFERGETCOPYROWSTRIDEPROC pfnc_nvnCommandBufferGetCopyRowStride; +PFNNVNCOMMANDBUFFERGETCOPYIMAGESTRIDEPROC pfnc_nvnCommandBufferGetCopyImageStride; +PFNNVNCOMMANDBUFFERDRAWTEXTUREPROC pfnc_nvnCommandBufferDrawTexture; +PFNNVNPROGRAMSETSUBROUTINELINKAGEPROC pfnc_nvnProgramSetSubroutineLinkage; +PFNNVNCOMMANDBUFFERSETPROGRAMSUBROUTINESPROC pfnc_nvnCommandBufferSetProgramSubroutines; +PFNNVNCOMMANDBUFFERBINDCOVERAGEMODULATIONTABLEPROC pfnc_nvnCommandBufferBindCoverageModulationTable; +PFNNVNCOMMANDBUFFERRESOLVEDEPTHBUFFERPROC pfnc_nvnCommandBufferResolveDepthBuffer; +PFNNVNCOMMANDBUFFERPUSHDEBUGGROUPSTATICPROC pfnc_nvnCommandBufferPushDebugGroupStatic; +PFNNVNCOMMANDBUFFERPUSHDEBUGGROUPDYNAMICPROC pfnc_nvnCommandBufferPushDebugGroupDynamic; +PFNNVNCOMMANDBUFFERPUSHDEBUGGROUPPROC pfnc_nvnCommandBufferPushDebugGroup; +PFNNVNCOMMANDBUFFERPOPDEBUGGROUPPROC pfnc_nvnCommandBufferPopDebugGroup; +PFNNVNCOMMANDBUFFERPOPDEBUGGROUPIDPROC pfnc_nvnCommandBufferPopDebugGroupId; +PFNNVNCOMMANDBUFFERINSERTDEBUGMARKERSTATICPROC pfnc_nvnCommandBufferInsertDebugMarkerStatic; +PFNNVNCOMMANDBUFFERINSERTDEBUGMARKERDYNAMICPROC pfnc_nvnCommandBufferInsertDebugMarkerDynamic; +PFNNVNCOMMANDBUFFERINSERTDEBUGMARKERPROC pfnc_nvnCommandBufferInsertDebugMarker; +PFNNVNCOMMANDBUFFERGETMEMORYCALLBACKPROC pfnc_nvnCommandBufferGetMemoryCallback; +PFNNVNCOMMANDBUFFERGETMEMORYCALLBACKDATAPROC pfnc_nvnCommandBufferGetMemoryCallbackData; +PFNNVNCOMMANDBUFFERISRECORDINGPROC pfnc_nvnCommandBufferIsRecording; +PFNNVNSYNCINITIALIZEPROC pfnc_nvnSyncInitialize; +PFNNVNSYNCFINALIZEPROC pfnc_nvnSyncFinalize; +PFNNVNSYNCSETDEBUGLABELPROC pfnc_nvnSyncSetDebugLabel; +PFNNVNQUEUEFENCESYNCPROC pfnc_nvnQueueFenceSync; +PFNNVNSYNCWAITPROC pfnc_nvnSyncWait; +PFNNVNQUEUEWAITSYNCPROC pfnc_nvnQueueWaitSync; +PFNNVNEVENTBUILDERSETDEFAULTSPROC pfnc_nvnEventBuilderSetDefaults; +PFNNVNEVENTBUILDERSETSTORAGEPROC pfnc_nvnEventBuilderSetStorage; +PFNNVNEVENTINITIALIZEPROC pfnc_nvnEventInitialize; +PFNNVNEVENTFINALIZEPROC pfnc_nvnEventFinalize; +PFNNVNEVENTGETVALUEPROC pfnc_nvnEventGetValue; +PFNNVNEVENTSIGNALPROC pfnc_nvnEventSignal; +PFNNVNCOMMANDBUFFERWAITEVENTPROC pfnc_nvnCommandBufferWaitEvent; +PFNNVNCOMMANDBUFFERSIGNALEVENTPROC pfnc_nvnCommandBufferSignalEvent; + +void nvnLoadCProcs(const NVNdevice* device, PFNNVNDEVICEGETPROCADDRESSPROC getProcAddress) { + pfnc_nvnDeviceBuilderSetDefaults + = (PFNNVNDEVICEBUILDERSETDEFAULTSPROC)getProcAddress(device, "nvnDeviceBuilderSetDefaults"); + pfnc_nvnDeviceBuilderSetFlags + = (PFNNVNDEVICEBUILDERSETFLAGSPROC)getProcAddress(device, "nvnDeviceBuilderSetFlags"); + pfnc_nvnDeviceInitialize = (PFNNVNDEVICEINITIALIZEPROC)getProcAddress(device, "nvnDeviceInitialize"); + pfnc_nvnDeviceFinalize = (PFNNVNDEVICEFINALIZEPROC)getProcAddress(device, "nvnDeviceFinalize"); + pfnc_nvnDeviceSetDebugLabel + = (PFNNVNDEVICESETDEBUGLABELPROC)getProcAddress(device, "nvnDeviceSetDebugLabel"); + pfnc_nvnDeviceGetProcAddress + = (PFNNVNDEVICEGETPROCADDRESSPROC)getProcAddress(device, "nvnDeviceGetProcAddress"); + pfnc_nvnDeviceGetInteger = (PFNNVNDEVICEGETINTEGERPROC)getProcAddress(device, "nvnDeviceGetInteger"); + pfnc_nvnDeviceGetCurrentTimestampInNanoseconds + = (PFNNVNDEVICEGETCURRENTTIMESTAMPINNANOSECONDSPROC)getProcAddress( + device, "nvnDeviceGetCurrentTimestampInNanoseconds"); + pfnc_nvnDeviceSetIntermediateShaderCache = (PFNNVNDEVICESETINTERMEDIATESHADERCACHEPROC)getProcAddress( + device, "nvnDeviceSetIntermediateShaderCache"); + pfnc_nvnDeviceGetTextureHandle + = (PFNNVNDEVICEGETTEXTUREHANDLEPROC)getProcAddress(device, "nvnDeviceGetTextureHandle"); + pfnc_nvnDeviceGetTexelFetchHandle + = (PFNNVNDEVICEGETTEXELFETCHHANDLEPROC)getProcAddress(device, "nvnDeviceGetTexelFetchHandle"); + pfnc_nvnDeviceGetImageHandle + = (PFNNVNDEVICEGETIMAGEHANDLEPROC)getProcAddress(device, "nvnDeviceGetImageHandle"); + pfnc_nvnDeviceInstallDebugCallback + = (PFNNVNDEVICEINSTALLDEBUGCALLBACKPROC)getProcAddress(device, "nvnDeviceInstallDebugCallback"); + pfnc_nvnDeviceGenerateDebugDomainId + = (PFNNVNDEVICEGENERATEDEBUGDOMAINIDPROC)getProcAddress(device, "nvnDeviceGenerateDebugDomainId"); + pfnc_nvnDeviceSetWindowOriginMode + = (PFNNVNDEVICESETWINDOWORIGINMODEPROC)getProcAddress(device, "nvnDeviceSetWindowOriginMode"); + pfnc_nvnDeviceSetDepthMode + = (PFNNVNDEVICESETDEPTHMODEPROC)getProcAddress(device, "nvnDeviceSetDepthMode"); + pfnc_nvnDeviceRegisterFastClearColor + = (PFNNVNDEVICEREGISTERFASTCLEARCOLORPROC)getProcAddress(device, "nvnDeviceRegisterFastClearColor"); + pfnc_nvnDeviceRegisterFastClearColori + = (PFNNVNDEVICEREGISTERFASTCLEARCOLORIPROC)getProcAddress(device, "nvnDeviceRegisterFastClearColori"); + pfnc_nvnDeviceRegisterFastClearColorui = (PFNNVNDEVICEREGISTERFASTCLEARCOLORUIPROC)getProcAddress( + device, "nvnDeviceRegisterFastClearColorui"); + pfnc_nvnDeviceRegisterFastClearDepth + = (PFNNVNDEVICEREGISTERFASTCLEARDEPTHPROC)getProcAddress(device, "nvnDeviceRegisterFastClearDepth"); + pfnc_nvnDeviceGetWindowOriginMode + = (PFNNVNDEVICEGETWINDOWORIGINMODEPROC)getProcAddress(device, "nvnDeviceGetWindowOriginMode"); + pfnc_nvnDeviceGetDepthMode + = (PFNNVNDEVICEGETDEPTHMODEPROC)getProcAddress(device, "nvnDeviceGetDepthMode"); + pfnc_nvnDeviceGetTimestampInNanoseconds = (PFNNVNDEVICEGETTIMESTAMPINNANOSECONDSPROC)getProcAddress( + device, "nvnDeviceGetTimestampInNanoseconds"); + pfnc_nvnDeviceApplyDeferredFinalizes + = (PFNNVNDEVICEAPPLYDEFERREDFINALIZESPROC)getProcAddress(device, "nvnDeviceApplyDeferredFinalizes"); + pfnc_nvnDeviceFinalizeCommandHandle + = (PFNNVNDEVICEFINALIZECOMMANDHANDLEPROC)getProcAddress(device, "nvnDeviceFinalizeCommandHandle"); + pfnc_nvnDeviceWalkDebugDatabase + = (PFNNVNDEVICEWALKDEBUGDATABASEPROC)getProcAddress(device, "nvnDeviceWalkDebugDatabase"); + pfnc_nvnDeviceGetSeparateTextureHandle = (PFNNVNDEVICEGETSEPARATETEXTUREHANDLEPROC)getProcAddress( + device, "nvnDeviceGetSeparateTextureHandle"); + pfnc_nvnDeviceGetSeparateSamplerHandle = (PFNNVNDEVICEGETSEPARATESAMPLERHANDLEPROC)getProcAddress( + device, "nvnDeviceGetSeparateSamplerHandle"); + pfnc_nvnDeviceIsExternalDebuggerAttached = (PFNNVNDEVICEISEXTERNALDEBUGGERATTACHEDPROC)getProcAddress( + device, "nvnDeviceIsExternalDebuggerAttached"); + pfnc_nvnQueueGetError = (PFNNVNQUEUEGETERRORPROC)getProcAddress(device, "nvnQueueGetError"); + pfnc_nvnQueueGetTotalCommandMemoryUsed = (PFNNVNQUEUEGETTOTALCOMMANDMEMORYUSEDPROC)getProcAddress( + device, "nvnQueueGetTotalCommandMemoryUsed"); + pfnc_nvnQueueGetTotalControlMemoryUsed = (PFNNVNQUEUEGETTOTALCONTROLMEMORYUSEDPROC)getProcAddress( + device, "nvnQueueGetTotalControlMemoryUsed"); + pfnc_nvnQueueGetTotalComputeMemoryUsed = (PFNNVNQUEUEGETTOTALCOMPUTEMEMORYUSEDPROC)getProcAddress( + device, "nvnQueueGetTotalComputeMemoryUsed"); + pfnc_nvnQueueResetMemoryUsageCounts + = (PFNNVNQUEUERESETMEMORYUSAGECOUNTSPROC)getProcAddress(device, "nvnQueueResetMemoryUsageCounts"); + pfnc_nvnQueueBuilderSetDevice + = (PFNNVNQUEUEBUILDERSETDEVICEPROC)getProcAddress(device, "nvnQueueBuilderSetDevice"); + pfnc_nvnQueueBuilderSetDefaults + = (PFNNVNQUEUEBUILDERSETDEFAULTSPROC)getProcAddress(device, "nvnQueueBuilderSetDefaults"); + pfnc_nvnQueueBuilderSetFlags + = (PFNNVNQUEUEBUILDERSETFLAGSPROC)getProcAddress(device, "nvnQueueBuilderSetFlags"); + pfnc_nvnQueueBuilderSetCommandMemorySize = (PFNNVNQUEUEBUILDERSETCOMMANDMEMORYSIZEPROC)getProcAddress( + device, "nvnQueueBuilderSetCommandMemorySize"); + pfnc_nvnQueueBuilderSetComputeMemorySize = (PFNNVNQUEUEBUILDERSETCOMPUTEMEMORYSIZEPROC)getProcAddress( + device, "nvnQueueBuilderSetComputeMemorySize"); + pfnc_nvnQueueBuilderSetControlMemorySize = (PFNNVNQUEUEBUILDERSETCONTROLMEMORYSIZEPROC)getProcAddress( + device, "nvnQueueBuilderSetControlMemorySize"); + pfnc_nvnQueueBuilderGetQueueMemorySize = (PFNNVNQUEUEBUILDERGETQUEUEMEMORYSIZEPROC)getProcAddress( + device, "nvnQueueBuilderGetQueueMemorySize"); + pfnc_nvnQueueBuilderSetQueueMemory + = (PFNNVNQUEUEBUILDERSETQUEUEMEMORYPROC)getProcAddress(device, "nvnQueueBuilderSetQueueMemory"); + pfnc_nvnQueueBuilderSetCommandFlushThreshold + = (PFNNVNQUEUEBUILDERSETCOMMANDFLUSHTHRESHOLDPROC)getProcAddress( + device, "nvnQueueBuilderSetCommandFlushThreshold"); + pfnc_nvnQueueInitialize = (PFNNVNQUEUEINITIALIZEPROC)getProcAddress(device, "nvnQueueInitialize"); + pfnc_nvnQueueFinalize = (PFNNVNQUEUEFINALIZEPROC)getProcAddress(device, "nvnQueueFinalize"); + pfnc_nvnQueueSetDebugLabel + = (PFNNVNQUEUESETDEBUGLABELPROC)getProcAddress(device, "nvnQueueSetDebugLabel"); + pfnc_nvnQueueSubmitCommands + = (PFNNVNQUEUESUBMITCOMMANDSPROC)getProcAddress(device, "nvnQueueSubmitCommands"); + pfnc_nvnQueueFlush = (PFNNVNQUEUEFLUSHPROC)getProcAddress(device, "nvnQueueFlush"); + pfnc_nvnQueueFinish = (PFNNVNQUEUEFINISHPROC)getProcAddress(device, "nvnQueueFinish"); + pfnc_nvnQueuePresentTexture + = (PFNNVNQUEUEPRESENTTEXTUREPROC)getProcAddress(device, "nvnQueuePresentTexture"); + pfnc_nvnQueueAcquireTexture + = (PFNNVNQUEUEACQUIRETEXTUREPROC)getProcAddress(device, "nvnQueueAcquireTexture"); + pfnc_nvnWindowBuilderSetDevice + = (PFNNVNWINDOWBUILDERSETDEVICEPROC)getProcAddress(device, "nvnWindowBuilderSetDevice"); + pfnc_nvnWindowBuilderSetDefaults + = (PFNNVNWINDOWBUILDERSETDEFAULTSPROC)getProcAddress(device, "nvnWindowBuilderSetDefaults"); + pfnc_nvnWindowBuilderSetNativeWindow + = (PFNNVNWINDOWBUILDERSETNATIVEWINDOWPROC)getProcAddress(device, "nvnWindowBuilderSetNativeWindow"); + pfnc_nvnWindowBuilderSetTextures + = (PFNNVNWINDOWBUILDERSETTEXTURESPROC)getProcAddress(device, "nvnWindowBuilderSetTextures"); + pfnc_nvnWindowBuilderSetPresentInterval = (PFNNVNWINDOWBUILDERSETPRESENTINTERVALPROC)getProcAddress( + device, "nvnWindowBuilderSetPresentInterval"); + pfnc_nvnWindowBuilderGetNativeWindow + = (PFNNVNWINDOWBUILDERGETNATIVEWINDOWPROC)getProcAddress(device, "nvnWindowBuilderGetNativeWindow"); + pfnc_nvnWindowBuilderGetPresentInterval = (PFNNVNWINDOWBUILDERGETPRESENTINTERVALPROC)getProcAddress( + device, "nvnWindowBuilderGetPresentInterval"); + pfnc_nvnWindowInitialize = (PFNNVNWINDOWINITIALIZEPROC)getProcAddress(device, "nvnWindowInitialize"); + pfnc_nvnWindowFinalize = (PFNNVNWINDOWFINALIZEPROC)getProcAddress(device, "nvnWindowFinalize"); + pfnc_nvnWindowSetDebugLabel + = (PFNNVNWINDOWSETDEBUGLABELPROC)getProcAddress(device, "nvnWindowSetDebugLabel"); + pfnc_nvnWindowAcquireTexture + = (PFNNVNWINDOWACQUIRETEXTUREPROC)getProcAddress(device, "nvnWindowAcquireTexture"); + pfnc_nvnWindowGetNativeWindow + = (PFNNVNWINDOWGETNATIVEWINDOWPROC)getProcAddress(device, "nvnWindowGetNativeWindow"); + pfnc_nvnWindowGetPresentInterval + = (PFNNVNWINDOWGETPRESENTINTERVALPROC)getProcAddress(device, "nvnWindowGetPresentInterval"); + pfnc_nvnWindowSetPresentInterval + = (PFNNVNWINDOWSETPRESENTINTERVALPROC)getProcAddress(device, "nvnWindowSetPresentInterval"); + pfnc_nvnWindowSetCrop = (PFNNVNWINDOWSETCROPPROC)getProcAddress(device, "nvnWindowSetCrop"); + pfnc_nvnWindowGetCrop = (PFNNVNWINDOWGETCROPPROC)getProcAddress(device, "nvnWindowGetCrop"); + pfnc_nvnProgramInitialize = (PFNNVNPROGRAMINITIALIZEPROC)getProcAddress(device, "nvnProgramInitialize"); + pfnc_nvnProgramFinalize = (PFNNVNPROGRAMFINALIZEPROC)getProcAddress(device, "nvnProgramFinalize"); + pfnc_nvnProgramSetDebugLabel + = (PFNNVNPROGRAMSETDEBUGLABELPROC)getProcAddress(device, "nvnProgramSetDebugLabel"); + pfnc_nvnProgramSetShaders = (PFNNVNPROGRAMSETSHADERSPROC)getProcAddress(device, "nvnProgramSetShaders"); + pfnc_nvnMemoryPoolBuilderSetDevice + = (PFNNVNMEMORYPOOLBUILDERSETDEVICEPROC)getProcAddress(device, "nvnMemoryPoolBuilderSetDevice"); + pfnc_nvnMemoryPoolBuilderSetDefaults + = (PFNNVNMEMORYPOOLBUILDERSETDEFAULTSPROC)getProcAddress(device, "nvnMemoryPoolBuilderSetDefaults"); + pfnc_nvnMemoryPoolBuilderSetStorage + = (PFNNVNMEMORYPOOLBUILDERSETSTORAGEPROC)getProcAddress(device, "nvnMemoryPoolBuilderSetStorage"); + pfnc_nvnMemoryPoolBuilderSetFlags + = (PFNNVNMEMORYPOOLBUILDERSETFLAGSPROC)getProcAddress(device, "nvnMemoryPoolBuilderSetFlags"); + pfnc_nvnMemoryPoolBuilderGetMemory + = (PFNNVNMEMORYPOOLBUILDERGETMEMORYPROC)getProcAddress(device, "nvnMemoryPoolBuilderGetMemory"); + pfnc_nvnMemoryPoolBuilderGetSize + = (PFNNVNMEMORYPOOLBUILDERGETSIZEPROC)getProcAddress(device, "nvnMemoryPoolBuilderGetSize"); + pfnc_nvnMemoryPoolBuilderGetFlags + = (PFNNVNMEMORYPOOLBUILDERGETFLAGSPROC)getProcAddress(device, "nvnMemoryPoolBuilderGetFlags"); + pfnc_nvnMemoryPoolInitialize + = (PFNNVNMEMORYPOOLINITIALIZEPROC)getProcAddress(device, "nvnMemoryPoolInitialize"); + pfnc_nvnMemoryPoolSetDebugLabel + = (PFNNVNMEMORYPOOLSETDEBUGLABELPROC)getProcAddress(device, "nvnMemoryPoolSetDebugLabel"); + pfnc_nvnMemoryPoolFinalize + = (PFNNVNMEMORYPOOLFINALIZEPROC)getProcAddress(device, "nvnMemoryPoolFinalize"); + pfnc_nvnMemoryPoolMap = (PFNNVNMEMORYPOOLMAPPROC)getProcAddress(device, "nvnMemoryPoolMap"); + pfnc_nvnMemoryPoolFlushMappedRange + = (PFNNVNMEMORYPOOLFLUSHMAPPEDRANGEPROC)getProcAddress(device, "nvnMemoryPoolFlushMappedRange"); + pfnc_nvnMemoryPoolInvalidateMappedRange = (PFNNVNMEMORYPOOLINVALIDATEMAPPEDRANGEPROC)getProcAddress( + device, "nvnMemoryPoolInvalidateMappedRange"); + pfnc_nvnMemoryPoolGetBufferAddress + = (PFNNVNMEMORYPOOLGETBUFFERADDRESSPROC)getProcAddress(device, "nvnMemoryPoolGetBufferAddress"); + pfnc_nvnMemoryPoolMapVirtual + = (PFNNVNMEMORYPOOLMAPVIRTUALPROC)getProcAddress(device, "nvnMemoryPoolMapVirtual"); + pfnc_nvnMemoryPoolGetSize = (PFNNVNMEMORYPOOLGETSIZEPROC)getProcAddress(device, "nvnMemoryPoolGetSize"); + pfnc_nvnMemoryPoolGetFlags + = (PFNNVNMEMORYPOOLGETFLAGSPROC)getProcAddress(device, "nvnMemoryPoolGetFlags"); + pfnc_nvnTexturePoolInitialize + = (PFNNVNTEXTUREPOOLINITIALIZEPROC)getProcAddress(device, "nvnTexturePoolInitialize"); + pfnc_nvnTexturePoolSetDebugLabel + = (PFNNVNTEXTUREPOOLSETDEBUGLABELPROC)getProcAddress(device, "nvnTexturePoolSetDebugLabel"); + pfnc_nvnTexturePoolFinalize + = (PFNNVNTEXTUREPOOLFINALIZEPROC)getProcAddress(device, "nvnTexturePoolFinalize"); + pfnc_nvnTexturePoolRegisterTexture + = (PFNNVNTEXTUREPOOLREGISTERTEXTUREPROC)getProcAddress(device, "nvnTexturePoolRegisterTexture"); + pfnc_nvnTexturePoolRegisterImage + = (PFNNVNTEXTUREPOOLREGISTERIMAGEPROC)getProcAddress(device, "nvnTexturePoolRegisterImage"); + pfnc_nvnTexturePoolGetMemoryPool + = (PFNNVNTEXTUREPOOLGETMEMORYPOOLPROC)getProcAddress(device, "nvnTexturePoolGetMemoryPool"); + pfnc_nvnTexturePoolGetMemoryOffset + = (PFNNVNTEXTUREPOOLGETMEMORYOFFSETPROC)getProcAddress(device, "nvnTexturePoolGetMemoryOffset"); + pfnc_nvnTexturePoolGetSize + = (PFNNVNTEXTUREPOOLGETSIZEPROC)getProcAddress(device, "nvnTexturePoolGetSize"); + pfnc_nvnSamplerPoolInitialize + = (PFNNVNSAMPLERPOOLINITIALIZEPROC)getProcAddress(device, "nvnSamplerPoolInitialize"); + pfnc_nvnSamplerPoolSetDebugLabel + = (PFNNVNSAMPLERPOOLSETDEBUGLABELPROC)getProcAddress(device, "nvnSamplerPoolSetDebugLabel"); + pfnc_nvnSamplerPoolFinalize + = (PFNNVNSAMPLERPOOLFINALIZEPROC)getProcAddress(device, "nvnSamplerPoolFinalize"); + pfnc_nvnSamplerPoolRegisterSampler + = (PFNNVNSAMPLERPOOLREGISTERSAMPLERPROC)getProcAddress(device, "nvnSamplerPoolRegisterSampler"); + pfnc_nvnSamplerPoolRegisterSamplerBuilder = (PFNNVNSAMPLERPOOLREGISTERSAMPLERBUILDERPROC)getProcAddress( + device, "nvnSamplerPoolRegisterSamplerBuilder"); + pfnc_nvnSamplerPoolGetMemoryPool + = (PFNNVNSAMPLERPOOLGETMEMORYPOOLPROC)getProcAddress(device, "nvnSamplerPoolGetMemoryPool"); + pfnc_nvnSamplerPoolGetMemoryOffset + = (PFNNVNSAMPLERPOOLGETMEMORYOFFSETPROC)getProcAddress(device, "nvnSamplerPoolGetMemoryOffset"); + pfnc_nvnSamplerPoolGetSize + = (PFNNVNSAMPLERPOOLGETSIZEPROC)getProcAddress(device, "nvnSamplerPoolGetSize"); + pfnc_nvnBufferBuilderSetDevice + = (PFNNVNBUFFERBUILDERSETDEVICEPROC)getProcAddress(device, "nvnBufferBuilderSetDevice"); + pfnc_nvnBufferBuilderSetDefaults + = (PFNNVNBUFFERBUILDERSETDEFAULTSPROC)getProcAddress(device, "nvnBufferBuilderSetDefaults"); + pfnc_nvnBufferBuilderSetStorage + = (PFNNVNBUFFERBUILDERSETSTORAGEPROC)getProcAddress(device, "nvnBufferBuilderSetStorage"); + pfnc_nvnBufferBuilderGetMemoryPool + = (PFNNVNBUFFERBUILDERGETMEMORYPOOLPROC)getProcAddress(device, "nvnBufferBuilderGetMemoryPool"); + pfnc_nvnBufferBuilderGetMemoryOffset + = (PFNNVNBUFFERBUILDERGETMEMORYOFFSETPROC)getProcAddress(device, "nvnBufferBuilderGetMemoryOffset"); + pfnc_nvnBufferBuilderGetSize + = (PFNNVNBUFFERBUILDERGETSIZEPROC)getProcAddress(device, "nvnBufferBuilderGetSize"); + pfnc_nvnBufferInitialize = (PFNNVNBUFFERINITIALIZEPROC)getProcAddress(device, "nvnBufferInitialize"); + pfnc_nvnBufferSetDebugLabel + = (PFNNVNBUFFERSETDEBUGLABELPROC)getProcAddress(device, "nvnBufferSetDebugLabel"); + pfnc_nvnBufferFinalize = (PFNNVNBUFFERFINALIZEPROC)getProcAddress(device, "nvnBufferFinalize"); + pfnc_nvnBufferMap = (PFNNVNBUFFERMAPPROC)getProcAddress(device, "nvnBufferMap"); + pfnc_nvnBufferGetAddress = (PFNNVNBUFFERGETADDRESSPROC)getProcAddress(device, "nvnBufferGetAddress"); + pfnc_nvnBufferFlushMappedRange + = (PFNNVNBUFFERFLUSHMAPPEDRANGEPROC)getProcAddress(device, "nvnBufferFlushMappedRange"); + pfnc_nvnBufferInvalidateMappedRange + = (PFNNVNBUFFERINVALIDATEMAPPEDRANGEPROC)getProcAddress(device, "nvnBufferInvalidateMappedRange"); + pfnc_nvnBufferGetMemoryPool + = (PFNNVNBUFFERGETMEMORYPOOLPROC)getProcAddress(device, "nvnBufferGetMemoryPool"); + pfnc_nvnBufferGetMemoryOffset + = (PFNNVNBUFFERGETMEMORYOFFSETPROC)getProcAddress(device, "nvnBufferGetMemoryOffset"); + pfnc_nvnBufferGetSize = (PFNNVNBUFFERGETSIZEPROC)getProcAddress(device, "nvnBufferGetSize"); + pfnc_nvnBufferGetDebugID = (PFNNVNBUFFERGETDEBUGIDPROC)getProcAddress(device, "nvnBufferGetDebugID"); + pfnc_nvnTextureBuilderSetDevice + = (PFNNVNTEXTUREBUILDERSETDEVICEPROC)getProcAddress(device, "nvnTextureBuilderSetDevice"); + pfnc_nvnTextureBuilderSetDefaults + = (PFNNVNTEXTUREBUILDERSETDEFAULTSPROC)getProcAddress(device, "nvnTextureBuilderSetDefaults"); + pfnc_nvnTextureBuilderSetFlags + = (PFNNVNTEXTUREBUILDERSETFLAGSPROC)getProcAddress(device, "nvnTextureBuilderSetFlags"); + pfnc_nvnTextureBuilderSetTarget + = (PFNNVNTEXTUREBUILDERSETTARGETPROC)getProcAddress(device, "nvnTextureBuilderSetTarget"); + pfnc_nvnTextureBuilderSetWidth + = (PFNNVNTEXTUREBUILDERSETWIDTHPROC)getProcAddress(device, "nvnTextureBuilderSetWidth"); + pfnc_nvnTextureBuilderSetHeight + = (PFNNVNTEXTUREBUILDERSETHEIGHTPROC)getProcAddress(device, "nvnTextureBuilderSetHeight"); + pfnc_nvnTextureBuilderSetDepth + = (PFNNVNTEXTUREBUILDERSETDEPTHPROC)getProcAddress(device, "nvnTextureBuilderSetDepth"); + pfnc_nvnTextureBuilderSetSize1D + = (PFNNVNTEXTUREBUILDERSETSIZE1DPROC)getProcAddress(device, "nvnTextureBuilderSetSize1D"); + pfnc_nvnTextureBuilderSetSize2D + = (PFNNVNTEXTUREBUILDERSETSIZE2DPROC)getProcAddress(device, "nvnTextureBuilderSetSize2D"); + pfnc_nvnTextureBuilderSetSize3D + = (PFNNVNTEXTUREBUILDERSETSIZE3DPROC)getProcAddress(device, "nvnTextureBuilderSetSize3D"); + pfnc_nvnTextureBuilderSetLevels + = (PFNNVNTEXTUREBUILDERSETLEVELSPROC)getProcAddress(device, "nvnTextureBuilderSetLevels"); + pfnc_nvnTextureBuilderSetFormat + = (PFNNVNTEXTUREBUILDERSETFORMATPROC)getProcAddress(device, "nvnTextureBuilderSetFormat"); + pfnc_nvnTextureBuilderSetSamples + = (PFNNVNTEXTUREBUILDERSETSAMPLESPROC)getProcAddress(device, "nvnTextureBuilderSetSamples"); + pfnc_nvnTextureBuilderSetSwizzle + = (PFNNVNTEXTUREBUILDERSETSWIZZLEPROC)getProcAddress(device, "nvnTextureBuilderSetSwizzle"); + pfnc_nvnTextureBuilderSetDepthStencilMode = (PFNNVNTEXTUREBUILDERSETDEPTHSTENCILMODEPROC)getProcAddress( + device, "nvnTextureBuilderSetDepthStencilMode"); + pfnc_nvnTextureBuilderGetStorageSize + = (PFNNVNTEXTUREBUILDERGETSTORAGESIZEPROC)getProcAddress(device, "nvnTextureBuilderGetStorageSize"); + pfnc_nvnTextureBuilderGetStorageAlignment = (PFNNVNTEXTUREBUILDERGETSTORAGEALIGNMENTPROC)getProcAddress( + device, "nvnTextureBuilderGetStorageAlignment"); + pfnc_nvnTextureBuilderSetStorage + = (PFNNVNTEXTUREBUILDERSETSTORAGEPROC)getProcAddress(device, "nvnTextureBuilderSetStorage"); + pfnc_nvnTextureBuilderSetPackagedTextureData + = (PFNNVNTEXTUREBUILDERSETPACKAGEDTEXTUREDATAPROC)getProcAddress( + device, "nvnTextureBuilderSetPackagedTextureData"); + pfnc_nvnTextureBuilderSetPackagedTextureLayout + = (PFNNVNTEXTUREBUILDERSETPACKAGEDTEXTURELAYOUTPROC)getProcAddress( + device, "nvnTextureBuilderSetPackagedTextureLayout"); + pfnc_nvnTextureBuilderSetStride + = (PFNNVNTEXTUREBUILDERSETSTRIDEPROC)getProcAddress(device, "nvnTextureBuilderSetStride"); + pfnc_nvnTextureBuilderSetGLTextureName = (PFNNVNTEXTUREBUILDERSETGLTEXTURENAMEPROC)getProcAddress( + device, "nvnTextureBuilderSetGLTextureName"); + pfnc_nvnTextureBuilderGetStorageClass + = (PFNNVNTEXTUREBUILDERGETSTORAGECLASSPROC)getProcAddress(device, "nvnTextureBuilderGetStorageClass"); + pfnc_nvnTextureBuilderGetFlags + = (PFNNVNTEXTUREBUILDERGETFLAGSPROC)getProcAddress(device, "nvnTextureBuilderGetFlags"); + pfnc_nvnTextureBuilderGetTarget + = (PFNNVNTEXTUREBUILDERGETTARGETPROC)getProcAddress(device, "nvnTextureBuilderGetTarget"); + pfnc_nvnTextureBuilderGetWidth + = (PFNNVNTEXTUREBUILDERGETWIDTHPROC)getProcAddress(device, "nvnTextureBuilderGetWidth"); + pfnc_nvnTextureBuilderGetHeight + = (PFNNVNTEXTUREBUILDERGETHEIGHTPROC)getProcAddress(device, "nvnTextureBuilderGetHeight"); + pfnc_nvnTextureBuilderGetDepth + = (PFNNVNTEXTUREBUILDERGETDEPTHPROC)getProcAddress(device, "nvnTextureBuilderGetDepth"); + pfnc_nvnTextureBuilderGetLevels + = (PFNNVNTEXTUREBUILDERGETLEVELSPROC)getProcAddress(device, "nvnTextureBuilderGetLevels"); + pfnc_nvnTextureBuilderGetFormat + = (PFNNVNTEXTUREBUILDERGETFORMATPROC)getProcAddress(device, "nvnTextureBuilderGetFormat"); + pfnc_nvnTextureBuilderGetSamples + = (PFNNVNTEXTUREBUILDERGETSAMPLESPROC)getProcAddress(device, "nvnTextureBuilderGetSamples"); + pfnc_nvnTextureBuilderGetSwizzle + = (PFNNVNTEXTUREBUILDERGETSWIZZLEPROC)getProcAddress(device, "nvnTextureBuilderGetSwizzle"); + pfnc_nvnTextureBuilderGetDepthStencilMode = (PFNNVNTEXTUREBUILDERGETDEPTHSTENCILMODEPROC)getProcAddress( + device, "nvnTextureBuilderGetDepthStencilMode"); + pfnc_nvnTextureBuilderGetPackagedTextureData + = (PFNNVNTEXTUREBUILDERGETPACKAGEDTEXTUREDATAPROC)getProcAddress( + device, "nvnTextureBuilderGetPackagedTextureData"); + pfnc_nvnTextureBuilderGetStride + = (PFNNVNTEXTUREBUILDERGETSTRIDEPROC)getProcAddress(device, "nvnTextureBuilderGetStride"); + pfnc_nvnTextureBuilderGetSparseTileLayout = (PFNNVNTEXTUREBUILDERGETSPARSETILELAYOUTPROC)getProcAddress( + device, "nvnTextureBuilderGetSparseTileLayout"); + pfnc_nvnTextureBuilderGetGLTextureName = (PFNNVNTEXTUREBUILDERGETGLTEXTURENAMEPROC)getProcAddress( + device, "nvnTextureBuilderGetGLTextureName"); + pfnc_nvnTextureBuilderGetZCullStorageSize = (PFNNVNTEXTUREBUILDERGETZCULLSTORAGESIZEPROC)getProcAddress( + device, "nvnTextureBuilderGetZCullStorageSize"); + pfnc_nvnTextureBuilderGetMemoryPool + = (PFNNVNTEXTUREBUILDERGETMEMORYPOOLPROC)getProcAddress(device, "nvnTextureBuilderGetMemoryPool"); + pfnc_nvnTextureBuilderGetMemoryOffset + = (PFNNVNTEXTUREBUILDERGETMEMORYOFFSETPROC)getProcAddress(device, "nvnTextureBuilderGetMemoryOffset"); + pfnc_nvnTextureViewSetDefaults + = (PFNNVNTEXTUREVIEWSETDEFAULTSPROC)getProcAddress(device, "nvnTextureViewSetDefaults"); + pfnc_nvnTextureViewSetLevels + = (PFNNVNTEXTUREVIEWSETLEVELSPROC)getProcAddress(device, "nvnTextureViewSetLevels"); + pfnc_nvnTextureViewSetLayers + = (PFNNVNTEXTUREVIEWSETLAYERSPROC)getProcAddress(device, "nvnTextureViewSetLayers"); + pfnc_nvnTextureViewSetFormat + = (PFNNVNTEXTUREVIEWSETFORMATPROC)getProcAddress(device, "nvnTextureViewSetFormat"); + pfnc_nvnTextureViewSetSwizzle + = (PFNNVNTEXTUREVIEWSETSWIZZLEPROC)getProcAddress(device, "nvnTextureViewSetSwizzle"); + pfnc_nvnTextureViewSetDepthStencilMode = (PFNNVNTEXTUREVIEWSETDEPTHSTENCILMODEPROC)getProcAddress( + device, "nvnTextureViewSetDepthStencilMode"); + pfnc_nvnTextureViewSetTarget + = (PFNNVNTEXTUREVIEWSETTARGETPROC)getProcAddress(device, "nvnTextureViewSetTarget"); + pfnc_nvnTextureViewGetLevels + = (PFNNVNTEXTUREVIEWGETLEVELSPROC)getProcAddress(device, "nvnTextureViewGetLevels"); + pfnc_nvnTextureViewGetLayers + = (PFNNVNTEXTUREVIEWGETLAYERSPROC)getProcAddress(device, "nvnTextureViewGetLayers"); + pfnc_nvnTextureViewGetFormat + = (PFNNVNTEXTUREVIEWGETFORMATPROC)getProcAddress(device, "nvnTextureViewGetFormat"); + pfnc_nvnTextureViewGetSwizzle + = (PFNNVNTEXTUREVIEWGETSWIZZLEPROC)getProcAddress(device, "nvnTextureViewGetSwizzle"); + pfnc_nvnTextureViewGetDepthStencilMode = (PFNNVNTEXTUREVIEWGETDEPTHSTENCILMODEPROC)getProcAddress( + device, "nvnTextureViewGetDepthStencilMode"); + pfnc_nvnTextureViewGetTarget + = (PFNNVNTEXTUREVIEWGETTARGETPROC)getProcAddress(device, "nvnTextureViewGetTarget"); + pfnc_nvnTextureViewCompare + = (PFNNVNTEXTUREVIEWCOMPAREPROC)getProcAddress(device, "nvnTextureViewCompare"); + pfnc_nvnTextureInitialize = (PFNNVNTEXTUREINITIALIZEPROC)getProcAddress(device, "nvnTextureInitialize"); + pfnc_nvnTextureGetZCullStorageSize + = (PFNNVNTEXTUREGETZCULLSTORAGESIZEPROC)getProcAddress(device, "nvnTextureGetZCullStorageSize"); + pfnc_nvnTextureFinalize = (PFNNVNTEXTUREFINALIZEPROC)getProcAddress(device, "nvnTextureFinalize"); + pfnc_nvnTextureSetDebugLabel + = (PFNNVNTEXTURESETDEBUGLABELPROC)getProcAddress(device, "nvnTextureSetDebugLabel"); + pfnc_nvnTextureGetStorageClass + = (PFNNVNTEXTUREGETSTORAGECLASSPROC)getProcAddress(device, "nvnTextureGetStorageClass"); + pfnc_nvnTextureGetViewOffset + = (PFNNVNTEXTUREGETVIEWOFFSETPROC)getProcAddress(device, "nvnTextureGetViewOffset"); + pfnc_nvnTextureGetFlags = (PFNNVNTEXTUREGETFLAGSPROC)getProcAddress(device, "nvnTextureGetFlags"); + pfnc_nvnTextureGetTarget = (PFNNVNTEXTUREGETTARGETPROC)getProcAddress(device, "nvnTextureGetTarget"); + pfnc_nvnTextureGetWidth = (PFNNVNTEXTUREGETWIDTHPROC)getProcAddress(device, "nvnTextureGetWidth"); + pfnc_nvnTextureGetHeight = (PFNNVNTEXTUREGETHEIGHTPROC)getProcAddress(device, "nvnTextureGetHeight"); + pfnc_nvnTextureGetDepth = (PFNNVNTEXTUREGETDEPTHPROC)getProcAddress(device, "nvnTextureGetDepth"); + pfnc_nvnTextureGetLevels = (PFNNVNTEXTUREGETLEVELSPROC)getProcAddress(device, "nvnTextureGetLevels"); + pfnc_nvnTextureGetFormat = (PFNNVNTEXTUREGETFORMATPROC)getProcAddress(device, "nvnTextureGetFormat"); + pfnc_nvnTextureGetSamples = (PFNNVNTEXTUREGETSAMPLESPROC)getProcAddress(device, "nvnTextureGetSamples"); + pfnc_nvnTextureGetSwizzle = (PFNNVNTEXTUREGETSWIZZLEPROC)getProcAddress(device, "nvnTextureGetSwizzle"); + pfnc_nvnTextureGetDepthStencilMode + = (PFNNVNTEXTUREGETDEPTHSTENCILMODEPROC)getProcAddress(device, "nvnTextureGetDepthStencilMode"); + pfnc_nvnTextureGetStride = (PFNNVNTEXTUREGETSTRIDEPROC)getProcAddress(device, "nvnTextureGetStride"); + pfnc_nvnTextureGetTextureAddress + = (PFNNVNTEXTUREGETTEXTUREADDRESSPROC)getProcAddress(device, "nvnTextureGetTextureAddress"); + pfnc_nvnTextureGetSparseTileLayout + = (PFNNVNTEXTUREGETSPARSETILELAYOUTPROC)getProcAddress(device, "nvnTextureGetSparseTileLayout"); + pfnc_nvnTextureWriteTexels + = (PFNNVNTEXTUREWRITETEXELSPROC)getProcAddress(device, "nvnTextureWriteTexels"); + pfnc_nvnTextureWriteTexelsStrided + = (PFNNVNTEXTUREWRITETEXELSSTRIDEDPROC)getProcAddress(device, "nvnTextureWriteTexelsStrided"); + pfnc_nvnTextureReadTexels = (PFNNVNTEXTUREREADTEXELSPROC)getProcAddress(device, "nvnTextureReadTexels"); + pfnc_nvnTextureReadTexelsStrided + = (PFNNVNTEXTUREREADTEXELSSTRIDEDPROC)getProcAddress(device, "nvnTextureReadTexelsStrided"); + pfnc_nvnTextureFlushTexels + = (PFNNVNTEXTUREFLUSHTEXELSPROC)getProcAddress(device, "nvnTextureFlushTexels"); + pfnc_nvnTextureInvalidateTexels + = (PFNNVNTEXTUREINVALIDATETEXELSPROC)getProcAddress(device, "nvnTextureInvalidateTexels"); + pfnc_nvnTextureGetMemoryPool + = (PFNNVNTEXTUREGETMEMORYPOOLPROC)getProcAddress(device, "nvnTextureGetMemoryPool"); + pfnc_nvnTextureGetMemoryOffset + = (PFNNVNTEXTUREGETMEMORYOFFSETPROC)getProcAddress(device, "nvnTextureGetMemoryOffset"); + pfnc_nvnTextureGetStorageSize + = (PFNNVNTEXTUREGETSTORAGESIZEPROC)getProcAddress(device, "nvnTextureGetStorageSize"); + pfnc_nvnTextureCompare = (PFNNVNTEXTURECOMPAREPROC)getProcAddress(device, "nvnTextureCompare"); + pfnc_nvnTextureGetDebugID = (PFNNVNTEXTUREGETDEBUGIDPROC)getProcAddress(device, "nvnTextureGetDebugID"); + pfnc_nvnSamplerBuilderSetDevice + = (PFNNVNSAMPLERBUILDERSETDEVICEPROC)getProcAddress(device, "nvnSamplerBuilderSetDevice"); + pfnc_nvnSamplerBuilderSetDefaults + = (PFNNVNSAMPLERBUILDERSETDEFAULTSPROC)getProcAddress(device, "nvnSamplerBuilderSetDefaults"); + pfnc_nvnSamplerBuilderSetMinMagFilter + = (PFNNVNSAMPLERBUILDERSETMINMAGFILTERPROC)getProcAddress(device, "nvnSamplerBuilderSetMinMagFilter"); + pfnc_nvnSamplerBuilderSetWrapMode + = (PFNNVNSAMPLERBUILDERSETWRAPMODEPROC)getProcAddress(device, "nvnSamplerBuilderSetWrapMode"); + pfnc_nvnSamplerBuilderSetLodClamp + = (PFNNVNSAMPLERBUILDERSETLODCLAMPPROC)getProcAddress(device, "nvnSamplerBuilderSetLodClamp"); + pfnc_nvnSamplerBuilderSetLodBias + = (PFNNVNSAMPLERBUILDERSETLODBIASPROC)getProcAddress(device, "nvnSamplerBuilderSetLodBias"); + pfnc_nvnSamplerBuilderSetCompare + = (PFNNVNSAMPLERBUILDERSETCOMPAREPROC)getProcAddress(device, "nvnSamplerBuilderSetCompare"); + pfnc_nvnSamplerBuilderSetBorderColor + = (PFNNVNSAMPLERBUILDERSETBORDERCOLORPROC)getProcAddress(device, "nvnSamplerBuilderSetBorderColor"); + pfnc_nvnSamplerBuilderSetBorderColori + = (PFNNVNSAMPLERBUILDERSETBORDERCOLORIPROC)getProcAddress(device, "nvnSamplerBuilderSetBorderColori"); + pfnc_nvnSamplerBuilderSetBorderColorui = (PFNNVNSAMPLERBUILDERSETBORDERCOLORUIPROC)getProcAddress( + device, "nvnSamplerBuilderSetBorderColorui"); + pfnc_nvnSamplerBuilderSetMaxAnisotropy = (PFNNVNSAMPLERBUILDERSETMAXANISOTROPYPROC)getProcAddress( + device, "nvnSamplerBuilderSetMaxAnisotropy"); + pfnc_nvnSamplerBuilderSetReductionFilter = (PFNNVNSAMPLERBUILDERSETREDUCTIONFILTERPROC)getProcAddress( + device, "nvnSamplerBuilderSetReductionFilter"); + pfnc_nvnSamplerBuilderSetLodSnap + = (PFNNVNSAMPLERBUILDERSETLODSNAPPROC)getProcAddress(device, "nvnSamplerBuilderSetLodSnap"); + pfnc_nvnSamplerBuilderGetMinMagFilter + = (PFNNVNSAMPLERBUILDERGETMINMAGFILTERPROC)getProcAddress(device, "nvnSamplerBuilderGetMinMagFilter"); + pfnc_nvnSamplerBuilderGetWrapMode + = (PFNNVNSAMPLERBUILDERGETWRAPMODEPROC)getProcAddress(device, "nvnSamplerBuilderGetWrapMode"); + pfnc_nvnSamplerBuilderGetLodClamp + = (PFNNVNSAMPLERBUILDERGETLODCLAMPPROC)getProcAddress(device, "nvnSamplerBuilderGetLodClamp"); + pfnc_nvnSamplerBuilderGetLodBias + = (PFNNVNSAMPLERBUILDERGETLODBIASPROC)getProcAddress(device, "nvnSamplerBuilderGetLodBias"); + pfnc_nvnSamplerBuilderGetCompare + = (PFNNVNSAMPLERBUILDERGETCOMPAREPROC)getProcAddress(device, "nvnSamplerBuilderGetCompare"); + pfnc_nvnSamplerBuilderGetBorderColor + = (PFNNVNSAMPLERBUILDERGETBORDERCOLORPROC)getProcAddress(device, "nvnSamplerBuilderGetBorderColor"); + pfnc_nvnSamplerBuilderGetBorderColori + = (PFNNVNSAMPLERBUILDERGETBORDERCOLORIPROC)getProcAddress(device, "nvnSamplerBuilderGetBorderColori"); + pfnc_nvnSamplerBuilderGetBorderColorui = (PFNNVNSAMPLERBUILDERGETBORDERCOLORUIPROC)getProcAddress( + device, "nvnSamplerBuilderGetBorderColorui"); + pfnc_nvnSamplerBuilderGetMaxAnisotropy = (PFNNVNSAMPLERBUILDERGETMAXANISOTROPYPROC)getProcAddress( + device, "nvnSamplerBuilderGetMaxAnisotropy"); + pfnc_nvnSamplerBuilderGetReductionFilter = (PFNNVNSAMPLERBUILDERGETREDUCTIONFILTERPROC)getProcAddress( + device, "nvnSamplerBuilderGetReductionFilter"); + pfnc_nvnSamplerBuilderGetLodSnap + = (PFNNVNSAMPLERBUILDERGETLODSNAPPROC)getProcAddress(device, "nvnSamplerBuilderGetLodSnap"); + pfnc_nvnSamplerInitialize = (PFNNVNSAMPLERINITIALIZEPROC)getProcAddress(device, "nvnSamplerInitialize"); + pfnc_nvnSamplerFinalize = (PFNNVNSAMPLERFINALIZEPROC)getProcAddress(device, "nvnSamplerFinalize"); + pfnc_nvnSamplerSetDebugLabel + = (PFNNVNSAMPLERSETDEBUGLABELPROC)getProcAddress(device, "nvnSamplerSetDebugLabel"); + pfnc_nvnSamplerGetMinMagFilter + = (PFNNVNSAMPLERGETMINMAGFILTERPROC)getProcAddress(device, "nvnSamplerGetMinMagFilter"); + pfnc_nvnSamplerGetWrapMode + = (PFNNVNSAMPLERGETWRAPMODEPROC)getProcAddress(device, "nvnSamplerGetWrapMode"); + pfnc_nvnSamplerGetLodClamp + = (PFNNVNSAMPLERGETLODCLAMPPROC)getProcAddress(device, "nvnSamplerGetLodClamp"); + pfnc_nvnSamplerGetLodBias = (PFNNVNSAMPLERGETLODBIASPROC)getProcAddress(device, "nvnSamplerGetLodBias"); + pfnc_nvnSamplerGetCompare = (PFNNVNSAMPLERGETCOMPAREPROC)getProcAddress(device, "nvnSamplerGetCompare"); + pfnc_nvnSamplerGetBorderColor + = (PFNNVNSAMPLERGETBORDERCOLORPROC)getProcAddress(device, "nvnSamplerGetBorderColor"); + pfnc_nvnSamplerGetBorderColori + = (PFNNVNSAMPLERGETBORDERCOLORIPROC)getProcAddress(device, "nvnSamplerGetBorderColori"); + pfnc_nvnSamplerGetBorderColorui + = (PFNNVNSAMPLERGETBORDERCOLORUIPROC)getProcAddress(device, "nvnSamplerGetBorderColorui"); + pfnc_nvnSamplerGetMaxAnisotropy + = (PFNNVNSAMPLERGETMAXANISOTROPYPROC)getProcAddress(device, "nvnSamplerGetMaxAnisotropy"); + pfnc_nvnSamplerGetReductionFilter + = (PFNNVNSAMPLERGETREDUCTIONFILTERPROC)getProcAddress(device, "nvnSamplerGetReductionFilter"); + pfnc_nvnSamplerCompare = (PFNNVNSAMPLERCOMPAREPROC)getProcAddress(device, "nvnSamplerCompare"); + pfnc_nvnSamplerGetDebugID = (PFNNVNSAMPLERGETDEBUGIDPROC)getProcAddress(device, "nvnSamplerGetDebugID"); + pfnc_nvnBlendStateSetDefaults + = (PFNNVNBLENDSTATESETDEFAULTSPROC)getProcAddress(device, "nvnBlendStateSetDefaults"); + pfnc_nvnBlendStateSetBlendTarget + = (PFNNVNBLENDSTATESETBLENDTARGETPROC)getProcAddress(device, "nvnBlendStateSetBlendTarget"); + pfnc_nvnBlendStateSetBlendFunc + = (PFNNVNBLENDSTATESETBLENDFUNCPROC)getProcAddress(device, "nvnBlendStateSetBlendFunc"); + pfnc_nvnBlendStateSetBlendEquation + = (PFNNVNBLENDSTATESETBLENDEQUATIONPROC)getProcAddress(device, "nvnBlendStateSetBlendEquation"); + pfnc_nvnBlendStateSetAdvancedMode + = (PFNNVNBLENDSTATESETADVANCEDMODEPROC)getProcAddress(device, "nvnBlendStateSetAdvancedMode"); + pfnc_nvnBlendStateSetAdvancedOverlap + = (PFNNVNBLENDSTATESETADVANCEDOVERLAPPROC)getProcAddress(device, "nvnBlendStateSetAdvancedOverlap"); + pfnc_nvnBlendStateSetAdvancedPremultipliedSrc + = (PFNNVNBLENDSTATESETADVANCEDPREMULTIPLIEDSRCPROC)getProcAddress( + device, "nvnBlendStateSetAdvancedPremultipliedSrc"); + pfnc_nvnBlendStateSetAdvancedNormalizedDst = (PFNNVNBLENDSTATESETADVANCEDNORMALIZEDDSTPROC)getProcAddress( + device, "nvnBlendStateSetAdvancedNormalizedDst"); + pfnc_nvnBlendStateGetBlendTarget + = (PFNNVNBLENDSTATEGETBLENDTARGETPROC)getProcAddress(device, "nvnBlendStateGetBlendTarget"); + pfnc_nvnBlendStateGetBlendFunc + = (PFNNVNBLENDSTATEGETBLENDFUNCPROC)getProcAddress(device, "nvnBlendStateGetBlendFunc"); + pfnc_nvnBlendStateGetBlendEquation + = (PFNNVNBLENDSTATEGETBLENDEQUATIONPROC)getProcAddress(device, "nvnBlendStateGetBlendEquation"); + pfnc_nvnBlendStateGetAdvancedMode + = (PFNNVNBLENDSTATEGETADVANCEDMODEPROC)getProcAddress(device, "nvnBlendStateGetAdvancedMode"); + pfnc_nvnBlendStateGetAdvancedOverlap + = (PFNNVNBLENDSTATEGETADVANCEDOVERLAPPROC)getProcAddress(device, "nvnBlendStateGetAdvancedOverlap"); + pfnc_nvnBlendStateGetAdvancedPremultipliedSrc + = (PFNNVNBLENDSTATEGETADVANCEDPREMULTIPLIEDSRCPROC)getProcAddress( + device, "nvnBlendStateGetAdvancedPremultipliedSrc"); + pfnc_nvnBlendStateGetAdvancedNormalizedDst = (PFNNVNBLENDSTATEGETADVANCEDNORMALIZEDDSTPROC)getProcAddress( + device, "nvnBlendStateGetAdvancedNormalizedDst"); + pfnc_nvnColorStateSetDefaults + = (PFNNVNCOLORSTATESETDEFAULTSPROC)getProcAddress(device, "nvnColorStateSetDefaults"); + pfnc_nvnColorStateSetBlendEnable + = (PFNNVNCOLORSTATESETBLENDENABLEPROC)getProcAddress(device, "nvnColorStateSetBlendEnable"); + pfnc_nvnColorStateSetLogicOp + = (PFNNVNCOLORSTATESETLOGICOPPROC)getProcAddress(device, "nvnColorStateSetLogicOp"); + pfnc_nvnColorStateSetAlphaTest + = (PFNNVNCOLORSTATESETALPHATESTPROC)getProcAddress(device, "nvnColorStateSetAlphaTest"); + pfnc_nvnColorStateGetBlendEnable + = (PFNNVNCOLORSTATEGETBLENDENABLEPROC)getProcAddress(device, "nvnColorStateGetBlendEnable"); + pfnc_nvnColorStateGetLogicOp + = (PFNNVNCOLORSTATEGETLOGICOPPROC)getProcAddress(device, "nvnColorStateGetLogicOp"); + pfnc_nvnColorStateGetAlphaTest + = (PFNNVNCOLORSTATEGETALPHATESTPROC)getProcAddress(device, "nvnColorStateGetAlphaTest"); + pfnc_nvnChannelMaskStateSetDefaults + = (PFNNVNCHANNELMASKSTATESETDEFAULTSPROC)getProcAddress(device, "nvnChannelMaskStateSetDefaults"); + pfnc_nvnChannelMaskStateSetChannelMask = (PFNNVNCHANNELMASKSTATESETCHANNELMASKPROC)getProcAddress( + device, "nvnChannelMaskStateSetChannelMask"); + pfnc_nvnChannelMaskStateGetChannelMask = (PFNNVNCHANNELMASKSTATEGETCHANNELMASKPROC)getProcAddress( + device, "nvnChannelMaskStateGetChannelMask"); + pfnc_nvnMultisampleStateSetDefaults + = (PFNNVNMULTISAMPLESTATESETDEFAULTSPROC)getProcAddress(device, "nvnMultisampleStateSetDefaults"); + pfnc_nvnMultisampleStateSetMultisampleEnable + = (PFNNVNMULTISAMPLESTATESETMULTISAMPLEENABLEPROC)getProcAddress( + device, "nvnMultisampleStateSetMultisampleEnable"); + pfnc_nvnMultisampleStateSetSamples + = (PFNNVNMULTISAMPLESTATESETSAMPLESPROC)getProcAddress(device, "nvnMultisampleStateSetSamples"); + pfnc_nvnMultisampleStateSetAlphaToCoverageEnable + = (PFNNVNMULTISAMPLESTATESETALPHATOCOVERAGEENABLEPROC)getProcAddress( + device, "nvnMultisampleStateSetAlphaToCoverageEnable"); + pfnc_nvnMultisampleStateSetAlphaToCoverageDither + = (PFNNVNMULTISAMPLESTATESETALPHATOCOVERAGEDITHERPROC)getProcAddress( + device, "nvnMultisampleStateSetAlphaToCoverageDither"); + pfnc_nvnMultisampleStateGetMultisampleEnable + = (PFNNVNMULTISAMPLESTATEGETMULTISAMPLEENABLEPROC)getProcAddress( + device, "nvnMultisampleStateGetMultisampleEnable"); + pfnc_nvnMultisampleStateGetSamples + = (PFNNVNMULTISAMPLESTATEGETSAMPLESPROC)getProcAddress(device, "nvnMultisampleStateGetSamples"); + pfnc_nvnMultisampleStateGetAlphaToCoverageEnable + = (PFNNVNMULTISAMPLESTATEGETALPHATOCOVERAGEENABLEPROC)getProcAddress( + device, "nvnMultisampleStateGetAlphaToCoverageEnable"); + pfnc_nvnMultisampleStateGetAlphaToCoverageDither + = (PFNNVNMULTISAMPLESTATEGETALPHATOCOVERAGEDITHERPROC)getProcAddress( + device, "nvnMultisampleStateGetAlphaToCoverageDither"); + pfnc_nvnMultisampleStateSetRasterSamples = (PFNNVNMULTISAMPLESTATESETRASTERSAMPLESPROC)getProcAddress( + device, "nvnMultisampleStateSetRasterSamples"); + pfnc_nvnMultisampleStateGetRasterSamples = (PFNNVNMULTISAMPLESTATEGETRASTERSAMPLESPROC)getProcAddress( + device, "nvnMultisampleStateGetRasterSamples"); + pfnc_nvnMultisampleStateSetCoverageModulationMode + = (PFNNVNMULTISAMPLESTATESETCOVERAGEMODULATIONMODEPROC)getProcAddress( + device, "nvnMultisampleStateSetCoverageModulationMode"); + pfnc_nvnMultisampleStateGetCoverageModulationMode + = (PFNNVNMULTISAMPLESTATEGETCOVERAGEMODULATIONMODEPROC)getProcAddress( + device, "nvnMultisampleStateGetCoverageModulationMode"); + pfnc_nvnMultisampleStateSetCoverageToColorEnable + = (PFNNVNMULTISAMPLESTATESETCOVERAGETOCOLORENABLEPROC)getProcAddress( + device, "nvnMultisampleStateSetCoverageToColorEnable"); + pfnc_nvnMultisampleStateGetCoverageToColorEnable + = (PFNNVNMULTISAMPLESTATEGETCOVERAGETOCOLORENABLEPROC)getProcAddress( + device, "nvnMultisampleStateGetCoverageToColorEnable"); + pfnc_nvnMultisampleStateSetCoverageToColorOutput + = (PFNNVNMULTISAMPLESTATESETCOVERAGETOCOLOROUTPUTPROC)getProcAddress( + device, "nvnMultisampleStateSetCoverageToColorOutput"); + pfnc_nvnMultisampleStateGetCoverageToColorOutput + = (PFNNVNMULTISAMPLESTATEGETCOVERAGETOCOLOROUTPUTPROC)getProcAddress( + device, "nvnMultisampleStateGetCoverageToColorOutput"); + pfnc_nvnMultisampleStateSetSampleLocationsEnable + = (PFNNVNMULTISAMPLESTATESETSAMPLELOCATIONSENABLEPROC)getProcAddress( + device, "nvnMultisampleStateSetSampleLocationsEnable"); + pfnc_nvnMultisampleStateGetSampleLocationsEnable + = (PFNNVNMULTISAMPLESTATEGETSAMPLELOCATIONSENABLEPROC)getProcAddress( + device, "nvnMultisampleStateGetSampleLocationsEnable"); + pfnc_nvnMultisampleStateGetSampleLocationsGrid + = (PFNNVNMULTISAMPLESTATEGETSAMPLELOCATIONSGRIDPROC)getProcAddress( + device, "nvnMultisampleStateGetSampleLocationsGrid"); + pfnc_nvnMultisampleStateSetSampleLocationsGridEnable + = (PFNNVNMULTISAMPLESTATESETSAMPLELOCATIONSGRIDENABLEPROC)getProcAddress( + device, "nvnMultisampleStateSetSampleLocationsGridEnable"); + pfnc_nvnMultisampleStateGetSampleLocationsGridEnable + = (PFNNVNMULTISAMPLESTATEGETSAMPLELOCATIONSGRIDENABLEPROC)getProcAddress( + device, "nvnMultisampleStateGetSampleLocationsGridEnable"); + pfnc_nvnMultisampleStateSetSampleLocations = (PFNNVNMULTISAMPLESTATESETSAMPLELOCATIONSPROC)getProcAddress( + device, "nvnMultisampleStateSetSampleLocations"); + pfnc_nvnPolygonStateSetDefaults + = (PFNNVNPOLYGONSTATESETDEFAULTSPROC)getProcAddress(device, "nvnPolygonStateSetDefaults"); + pfnc_nvnPolygonStateSetCullFace + = (PFNNVNPOLYGONSTATESETCULLFACEPROC)getProcAddress(device, "nvnPolygonStateSetCullFace"); + pfnc_nvnPolygonStateSetFrontFace + = (PFNNVNPOLYGONSTATESETFRONTFACEPROC)getProcAddress(device, "nvnPolygonStateSetFrontFace"); + pfnc_nvnPolygonStateSetPolygonMode + = (PFNNVNPOLYGONSTATESETPOLYGONMODEPROC)getProcAddress(device, "nvnPolygonStateSetPolygonMode"); + pfnc_nvnPolygonStateSetPolygonOffsetEnables + = (PFNNVNPOLYGONSTATESETPOLYGONOFFSETENABLESPROC)getProcAddress( + device, "nvnPolygonStateSetPolygonOffsetEnables"); + pfnc_nvnPolygonStateGetCullFace + = (PFNNVNPOLYGONSTATEGETCULLFACEPROC)getProcAddress(device, "nvnPolygonStateGetCullFace"); + pfnc_nvnPolygonStateGetFrontFace + = (PFNNVNPOLYGONSTATEGETFRONTFACEPROC)getProcAddress(device, "nvnPolygonStateGetFrontFace"); + pfnc_nvnPolygonStateGetPolygonMode + = (PFNNVNPOLYGONSTATEGETPOLYGONMODEPROC)getProcAddress(device, "nvnPolygonStateGetPolygonMode"); + pfnc_nvnPolygonStateGetPolygonOffsetEnables + = (PFNNVNPOLYGONSTATEGETPOLYGONOFFSETENABLESPROC)getProcAddress( + device, "nvnPolygonStateGetPolygonOffsetEnables"); + pfnc_nvnDepthStencilStateSetDefaults + = (PFNNVNDEPTHSTENCILSTATESETDEFAULTSPROC)getProcAddress(device, "nvnDepthStencilStateSetDefaults"); + pfnc_nvnDepthStencilStateSetDepthTestEnable + = (PFNNVNDEPTHSTENCILSTATESETDEPTHTESTENABLEPROC)getProcAddress( + device, "nvnDepthStencilStateSetDepthTestEnable"); + pfnc_nvnDepthStencilStateSetDepthWriteEnable + = (PFNNVNDEPTHSTENCILSTATESETDEPTHWRITEENABLEPROC)getProcAddress( + device, "nvnDepthStencilStateSetDepthWriteEnable"); + pfnc_nvnDepthStencilStateSetDepthFunc + = (PFNNVNDEPTHSTENCILSTATESETDEPTHFUNCPROC)getProcAddress(device, "nvnDepthStencilStateSetDepthFunc"); + pfnc_nvnDepthStencilStateSetStencilTestEnable + = (PFNNVNDEPTHSTENCILSTATESETSTENCILTESTENABLEPROC)getProcAddress( + device, "nvnDepthStencilStateSetStencilTestEnable"); + pfnc_nvnDepthStencilStateSetStencilFunc = (PFNNVNDEPTHSTENCILSTATESETSTENCILFUNCPROC)getProcAddress( + device, "nvnDepthStencilStateSetStencilFunc"); + pfnc_nvnDepthStencilStateSetStencilOp + = (PFNNVNDEPTHSTENCILSTATESETSTENCILOPPROC)getProcAddress(device, "nvnDepthStencilStateSetStencilOp"); + pfnc_nvnDepthStencilStateGetDepthTestEnable + = (PFNNVNDEPTHSTENCILSTATEGETDEPTHTESTENABLEPROC)getProcAddress( + device, "nvnDepthStencilStateGetDepthTestEnable"); + pfnc_nvnDepthStencilStateGetDepthWriteEnable + = (PFNNVNDEPTHSTENCILSTATEGETDEPTHWRITEENABLEPROC)getProcAddress( + device, "nvnDepthStencilStateGetDepthWriteEnable"); + pfnc_nvnDepthStencilStateGetDepthFunc + = (PFNNVNDEPTHSTENCILSTATEGETDEPTHFUNCPROC)getProcAddress(device, "nvnDepthStencilStateGetDepthFunc"); + pfnc_nvnDepthStencilStateGetStencilTestEnable + = (PFNNVNDEPTHSTENCILSTATEGETSTENCILTESTENABLEPROC)getProcAddress( + device, "nvnDepthStencilStateGetStencilTestEnable"); + pfnc_nvnDepthStencilStateGetStencilFunc = (PFNNVNDEPTHSTENCILSTATEGETSTENCILFUNCPROC)getProcAddress( + device, "nvnDepthStencilStateGetStencilFunc"); + pfnc_nvnDepthStencilStateGetStencilOp + = (PFNNVNDEPTHSTENCILSTATEGETSTENCILOPPROC)getProcAddress(device, "nvnDepthStencilStateGetStencilOp"); + pfnc_nvnVertexAttribStateSetDefaults + = (PFNNVNVERTEXATTRIBSTATESETDEFAULTSPROC)getProcAddress(device, "nvnVertexAttribStateSetDefaults"); + pfnc_nvnVertexAttribStateSetFormat + = (PFNNVNVERTEXATTRIBSTATESETFORMATPROC)getProcAddress(device, "nvnVertexAttribStateSetFormat"); + pfnc_nvnVertexAttribStateSetStreamIndex = (PFNNVNVERTEXATTRIBSTATESETSTREAMINDEXPROC)getProcAddress( + device, "nvnVertexAttribStateSetStreamIndex"); + pfnc_nvnVertexAttribStateGetFormat + = (PFNNVNVERTEXATTRIBSTATEGETFORMATPROC)getProcAddress(device, "nvnVertexAttribStateGetFormat"); + pfnc_nvnVertexAttribStateGetStreamIndex = (PFNNVNVERTEXATTRIBSTATEGETSTREAMINDEXPROC)getProcAddress( + device, "nvnVertexAttribStateGetStreamIndex"); + pfnc_nvnVertexStreamStateSetDefaults + = (PFNNVNVERTEXSTREAMSTATESETDEFAULTSPROC)getProcAddress(device, "nvnVertexStreamStateSetDefaults"); + pfnc_nvnVertexStreamStateSetStride + = (PFNNVNVERTEXSTREAMSTATESETSTRIDEPROC)getProcAddress(device, "nvnVertexStreamStateSetStride"); + pfnc_nvnVertexStreamStateSetDivisor + = (PFNNVNVERTEXSTREAMSTATESETDIVISORPROC)getProcAddress(device, "nvnVertexStreamStateSetDivisor"); + pfnc_nvnVertexStreamStateGetStride + = (PFNNVNVERTEXSTREAMSTATEGETSTRIDEPROC)getProcAddress(device, "nvnVertexStreamStateGetStride"); + pfnc_nvnVertexStreamStateGetDivisor + = (PFNNVNVERTEXSTREAMSTATEGETDIVISORPROC)getProcAddress(device, "nvnVertexStreamStateGetDivisor"); + pfnc_nvnCommandBufferInitialize + = (PFNNVNCOMMANDBUFFERINITIALIZEPROC)getProcAddress(device, "nvnCommandBufferInitialize"); + pfnc_nvnCommandBufferFinalize + = (PFNNVNCOMMANDBUFFERFINALIZEPROC)getProcAddress(device, "nvnCommandBufferFinalize"); + pfnc_nvnCommandBufferSetDebugLabel + = (PFNNVNCOMMANDBUFFERSETDEBUGLABELPROC)getProcAddress(device, "nvnCommandBufferSetDebugLabel"); + pfnc_nvnCommandBufferSetMemoryCallback = (PFNNVNCOMMANDBUFFERSETMEMORYCALLBACKPROC)getProcAddress( + device, "nvnCommandBufferSetMemoryCallback"); + pfnc_nvnCommandBufferSetMemoryCallbackData = (PFNNVNCOMMANDBUFFERSETMEMORYCALLBACKDATAPROC)getProcAddress( + device, "nvnCommandBufferSetMemoryCallbackData"); + pfnc_nvnCommandBufferAddCommandMemory + = (PFNNVNCOMMANDBUFFERADDCOMMANDMEMORYPROC)getProcAddress(device, "nvnCommandBufferAddCommandMemory"); + pfnc_nvnCommandBufferAddControlMemory + = (PFNNVNCOMMANDBUFFERADDCONTROLMEMORYPROC)getProcAddress(device, "nvnCommandBufferAddControlMemory"); + pfnc_nvnCommandBufferGetCommandMemorySize = (PFNNVNCOMMANDBUFFERGETCOMMANDMEMORYSIZEPROC)getProcAddress( + device, "nvnCommandBufferGetCommandMemorySize"); + pfnc_nvnCommandBufferGetCommandMemoryUsed = (PFNNVNCOMMANDBUFFERGETCOMMANDMEMORYUSEDPROC)getProcAddress( + device, "nvnCommandBufferGetCommandMemoryUsed"); + pfnc_nvnCommandBufferGetCommandMemoryFree = (PFNNVNCOMMANDBUFFERGETCOMMANDMEMORYFREEPROC)getProcAddress( + device, "nvnCommandBufferGetCommandMemoryFree"); + pfnc_nvnCommandBufferGetControlMemorySize = (PFNNVNCOMMANDBUFFERGETCONTROLMEMORYSIZEPROC)getProcAddress( + device, "nvnCommandBufferGetControlMemorySize"); + pfnc_nvnCommandBufferGetControlMemoryUsed = (PFNNVNCOMMANDBUFFERGETCONTROLMEMORYUSEDPROC)getProcAddress( + device, "nvnCommandBufferGetControlMemoryUsed"); + pfnc_nvnCommandBufferGetControlMemoryFree = (PFNNVNCOMMANDBUFFERGETCONTROLMEMORYFREEPROC)getProcAddress( + device, "nvnCommandBufferGetControlMemoryFree"); + pfnc_nvnCommandBufferBeginRecording + = (PFNNVNCOMMANDBUFFERBEGINRECORDINGPROC)getProcAddress(device, "nvnCommandBufferBeginRecording"); + pfnc_nvnCommandBufferEndRecording + = (PFNNVNCOMMANDBUFFERENDRECORDINGPROC)getProcAddress(device, "nvnCommandBufferEndRecording"); + pfnc_nvnCommandBufferCallCommands + = (PFNNVNCOMMANDBUFFERCALLCOMMANDSPROC)getProcAddress(device, "nvnCommandBufferCallCommands"); + pfnc_nvnCommandBufferCopyCommands + = (PFNNVNCOMMANDBUFFERCOPYCOMMANDSPROC)getProcAddress(device, "nvnCommandBufferCopyCommands"); + pfnc_nvnCommandBufferBindBlendState + = (PFNNVNCOMMANDBUFFERBINDBLENDSTATEPROC)getProcAddress(device, "nvnCommandBufferBindBlendState"); + pfnc_nvnCommandBufferBindChannelMaskState = (PFNNVNCOMMANDBUFFERBINDCHANNELMASKSTATEPROC)getProcAddress( + device, "nvnCommandBufferBindChannelMaskState"); + pfnc_nvnCommandBufferBindColorState + = (PFNNVNCOMMANDBUFFERBINDCOLORSTATEPROC)getProcAddress(device, "nvnCommandBufferBindColorState"); + pfnc_nvnCommandBufferBindMultisampleState = (PFNNVNCOMMANDBUFFERBINDMULTISAMPLESTATEPROC)getProcAddress( + device, "nvnCommandBufferBindMultisampleState"); + pfnc_nvnCommandBufferBindPolygonState + = (PFNNVNCOMMANDBUFFERBINDPOLYGONSTATEPROC)getProcAddress(device, "nvnCommandBufferBindPolygonState"); + pfnc_nvnCommandBufferBindDepthStencilState = (PFNNVNCOMMANDBUFFERBINDDEPTHSTENCILSTATEPROC)getProcAddress( + device, "nvnCommandBufferBindDepthStencilState"); + pfnc_nvnCommandBufferBindVertexAttribState = (PFNNVNCOMMANDBUFFERBINDVERTEXATTRIBSTATEPROC)getProcAddress( + device, "nvnCommandBufferBindVertexAttribState"); + pfnc_nvnCommandBufferBindVertexStreamState = (PFNNVNCOMMANDBUFFERBINDVERTEXSTREAMSTATEPROC)getProcAddress( + device, "nvnCommandBufferBindVertexStreamState"); + pfnc_nvnCommandBufferBindProgram + = (PFNNVNCOMMANDBUFFERBINDPROGRAMPROC)getProcAddress(device, "nvnCommandBufferBindProgram"); + pfnc_nvnCommandBufferBindVertexBuffer + = (PFNNVNCOMMANDBUFFERBINDVERTEXBUFFERPROC)getProcAddress(device, "nvnCommandBufferBindVertexBuffer"); + pfnc_nvnCommandBufferBindVertexBuffers = (PFNNVNCOMMANDBUFFERBINDVERTEXBUFFERSPROC)getProcAddress( + device, "nvnCommandBufferBindVertexBuffers"); + pfnc_nvnCommandBufferBindUniformBuffer = (PFNNVNCOMMANDBUFFERBINDUNIFORMBUFFERPROC)getProcAddress( + device, "nvnCommandBufferBindUniformBuffer"); + pfnc_nvnCommandBufferBindUniformBuffers = (PFNNVNCOMMANDBUFFERBINDUNIFORMBUFFERSPROC)getProcAddress( + device, "nvnCommandBufferBindUniformBuffers"); + pfnc_nvnCommandBufferBindTransformFeedbackBuffer + = (PFNNVNCOMMANDBUFFERBINDTRANSFORMFEEDBACKBUFFERPROC)getProcAddress( + device, "nvnCommandBufferBindTransformFeedbackBuffer"); + pfnc_nvnCommandBufferBindTransformFeedbackBuffers + = (PFNNVNCOMMANDBUFFERBINDTRANSFORMFEEDBACKBUFFERSPROC)getProcAddress( + device, "nvnCommandBufferBindTransformFeedbackBuffers"); + pfnc_nvnCommandBufferBindStorageBuffer = (PFNNVNCOMMANDBUFFERBINDSTORAGEBUFFERPROC)getProcAddress( + device, "nvnCommandBufferBindStorageBuffer"); + pfnc_nvnCommandBufferBindStorageBuffers = (PFNNVNCOMMANDBUFFERBINDSTORAGEBUFFERSPROC)getProcAddress( + device, "nvnCommandBufferBindStorageBuffers"); + pfnc_nvnCommandBufferBindTexture + = (PFNNVNCOMMANDBUFFERBINDTEXTUREPROC)getProcAddress(device, "nvnCommandBufferBindTexture"); + pfnc_nvnCommandBufferBindTextures + = (PFNNVNCOMMANDBUFFERBINDTEXTURESPROC)getProcAddress(device, "nvnCommandBufferBindTextures"); + pfnc_nvnCommandBufferBindImage + = (PFNNVNCOMMANDBUFFERBINDIMAGEPROC)getProcAddress(device, "nvnCommandBufferBindImage"); + pfnc_nvnCommandBufferBindImages + = (PFNNVNCOMMANDBUFFERBINDIMAGESPROC)getProcAddress(device, "nvnCommandBufferBindImages"); + pfnc_nvnCommandBufferSetPatchSize + = (PFNNVNCOMMANDBUFFERSETPATCHSIZEPROC)getProcAddress(device, "nvnCommandBufferSetPatchSize"); + pfnc_nvnCommandBufferSetInnerTessellationLevels + = (PFNNVNCOMMANDBUFFERSETINNERTESSELLATIONLEVELSPROC)getProcAddress( + device, "nvnCommandBufferSetInnerTessellationLevels"); + pfnc_nvnCommandBufferSetOuterTessellationLevels + = (PFNNVNCOMMANDBUFFERSETOUTERTESSELLATIONLEVELSPROC)getProcAddress( + device, "nvnCommandBufferSetOuterTessellationLevels"); + pfnc_nvnCommandBufferSetPrimitiveRestart = (PFNNVNCOMMANDBUFFERSETPRIMITIVERESTARTPROC)getProcAddress( + device, "nvnCommandBufferSetPrimitiveRestart"); + pfnc_nvnCommandBufferBeginTransformFeedback + = (PFNNVNCOMMANDBUFFERBEGINTRANSFORMFEEDBACKPROC)getProcAddress( + device, "nvnCommandBufferBeginTransformFeedback"); + pfnc_nvnCommandBufferEndTransformFeedback = (PFNNVNCOMMANDBUFFERENDTRANSFORMFEEDBACKPROC)getProcAddress( + device, "nvnCommandBufferEndTransformFeedback"); + pfnc_nvnCommandBufferPauseTransformFeedback + = (PFNNVNCOMMANDBUFFERPAUSETRANSFORMFEEDBACKPROC)getProcAddress( + device, "nvnCommandBufferPauseTransformFeedback"); + pfnc_nvnCommandBufferResumeTransformFeedback + = (PFNNVNCOMMANDBUFFERRESUMETRANSFORMFEEDBACKPROC)getProcAddress( + device, "nvnCommandBufferResumeTransformFeedback"); + pfnc_nvnCommandBufferDrawTransformFeedback = (PFNNVNCOMMANDBUFFERDRAWTRANSFORMFEEDBACKPROC)getProcAddress( + device, "nvnCommandBufferDrawTransformFeedback"); + pfnc_nvnCommandBufferDrawArrays + = (PFNNVNCOMMANDBUFFERDRAWARRAYSPROC)getProcAddress(device, "nvnCommandBufferDrawArrays"); + pfnc_nvnCommandBufferDrawElements + = (PFNNVNCOMMANDBUFFERDRAWELEMENTSPROC)getProcAddress(device, "nvnCommandBufferDrawElements"); + pfnc_nvnCommandBufferDrawElementsBaseVertex + = (PFNNVNCOMMANDBUFFERDRAWELEMENTSBASEVERTEXPROC)getProcAddress( + device, "nvnCommandBufferDrawElementsBaseVertex"); + pfnc_nvnCommandBufferDrawArraysInstanced = (PFNNVNCOMMANDBUFFERDRAWARRAYSINSTANCEDPROC)getProcAddress( + device, "nvnCommandBufferDrawArraysInstanced"); + pfnc_nvnCommandBufferDrawElementsInstanced = (PFNNVNCOMMANDBUFFERDRAWELEMENTSINSTANCEDPROC)getProcAddress( + device, "nvnCommandBufferDrawElementsInstanced"); + pfnc_nvnCommandBufferDrawArraysIndirect = (PFNNVNCOMMANDBUFFERDRAWARRAYSINDIRECTPROC)getProcAddress( + device, "nvnCommandBufferDrawArraysIndirect"); + pfnc_nvnCommandBufferDrawElementsIndirect = (PFNNVNCOMMANDBUFFERDRAWELEMENTSINDIRECTPROC)getProcAddress( + device, "nvnCommandBufferDrawElementsIndirect"); + pfnc_nvnCommandBufferMultiDrawArraysIndirectCount + = (PFNNVNCOMMANDBUFFERMULTIDRAWARRAYSINDIRECTCOUNTPROC)getProcAddress( + device, "nvnCommandBufferMultiDrawArraysIndirectCount"); + pfnc_nvnCommandBufferMultiDrawElementsIndirectCount + = (PFNNVNCOMMANDBUFFERMULTIDRAWELEMENTSINDIRECTCOUNTPROC)getProcAddress( + device, "nvnCommandBufferMultiDrawElementsIndirectCount"); + pfnc_nvnCommandBufferClearColor + = (PFNNVNCOMMANDBUFFERCLEARCOLORPROC)getProcAddress(device, "nvnCommandBufferClearColor"); + pfnc_nvnCommandBufferClearColori + = (PFNNVNCOMMANDBUFFERCLEARCOLORIPROC)getProcAddress(device, "nvnCommandBufferClearColori"); + pfnc_nvnCommandBufferClearColorui + = (PFNNVNCOMMANDBUFFERCLEARCOLORUIPROC)getProcAddress(device, "nvnCommandBufferClearColorui"); + pfnc_nvnCommandBufferClearDepthStencil = (PFNNVNCOMMANDBUFFERCLEARDEPTHSTENCILPROC)getProcAddress( + device, "nvnCommandBufferClearDepthStencil"); + pfnc_nvnCommandBufferDispatchCompute + = (PFNNVNCOMMANDBUFFERDISPATCHCOMPUTEPROC)getProcAddress(device, "nvnCommandBufferDispatchCompute"); + pfnc_nvnCommandBufferDispatchComputeIndirect + = (PFNNVNCOMMANDBUFFERDISPATCHCOMPUTEINDIRECTPROC)getProcAddress( + device, "nvnCommandBufferDispatchComputeIndirect"); + pfnc_nvnCommandBufferSetViewport + = (PFNNVNCOMMANDBUFFERSETVIEWPORTPROC)getProcAddress(device, "nvnCommandBufferSetViewport"); + pfnc_nvnCommandBufferSetViewports + = (PFNNVNCOMMANDBUFFERSETVIEWPORTSPROC)getProcAddress(device, "nvnCommandBufferSetViewports"); + pfnc_nvnCommandBufferSetViewportSwizzles = (PFNNVNCOMMANDBUFFERSETVIEWPORTSWIZZLESPROC)getProcAddress( + device, "nvnCommandBufferSetViewportSwizzles"); + pfnc_nvnCommandBufferSetScissor + = (PFNNVNCOMMANDBUFFERSETSCISSORPROC)getProcAddress(device, "nvnCommandBufferSetScissor"); + pfnc_nvnCommandBufferSetScissors + = (PFNNVNCOMMANDBUFFERSETSCISSORSPROC)getProcAddress(device, "nvnCommandBufferSetScissors"); + pfnc_nvnCommandBufferSetDepthRange + = (PFNNVNCOMMANDBUFFERSETDEPTHRANGEPROC)getProcAddress(device, "nvnCommandBufferSetDepthRange"); + pfnc_nvnCommandBufferSetDepthBounds + = (PFNNVNCOMMANDBUFFERSETDEPTHBOUNDSPROC)getProcAddress(device, "nvnCommandBufferSetDepthBounds"); + pfnc_nvnCommandBufferSetDepthRanges + = (PFNNVNCOMMANDBUFFERSETDEPTHRANGESPROC)getProcAddress(device, "nvnCommandBufferSetDepthRanges"); + pfnc_nvnCommandBufferSetTiledCacheAction = (PFNNVNCOMMANDBUFFERSETTILEDCACHEACTIONPROC)getProcAddress( + device, "nvnCommandBufferSetTiledCacheAction"); + pfnc_nvnCommandBufferSetTiledCacheTileSize = (PFNNVNCOMMANDBUFFERSETTILEDCACHETILESIZEPROC)getProcAddress( + device, "nvnCommandBufferSetTiledCacheTileSize"); + pfnc_nvnCommandBufferBindSeparateTexture = (PFNNVNCOMMANDBUFFERBINDSEPARATETEXTUREPROC)getProcAddress( + device, "nvnCommandBufferBindSeparateTexture"); + pfnc_nvnCommandBufferBindSeparateSampler = (PFNNVNCOMMANDBUFFERBINDSEPARATESAMPLERPROC)getProcAddress( + device, "nvnCommandBufferBindSeparateSampler"); + pfnc_nvnCommandBufferBindSeparateTextures = (PFNNVNCOMMANDBUFFERBINDSEPARATETEXTURESPROC)getProcAddress( + device, "nvnCommandBufferBindSeparateTextures"); + pfnc_nvnCommandBufferBindSeparateSamplers = (PFNNVNCOMMANDBUFFERBINDSEPARATESAMPLERSPROC)getProcAddress( + device, "nvnCommandBufferBindSeparateSamplers"); + pfnc_nvnCommandBufferSetStencilValueMask = (PFNNVNCOMMANDBUFFERSETSTENCILVALUEMASKPROC)getProcAddress( + device, "nvnCommandBufferSetStencilValueMask"); + pfnc_nvnCommandBufferSetStencilMask + = (PFNNVNCOMMANDBUFFERSETSTENCILMASKPROC)getProcAddress(device, "nvnCommandBufferSetStencilMask"); + pfnc_nvnCommandBufferSetStencilRef + = (PFNNVNCOMMANDBUFFERSETSTENCILREFPROC)getProcAddress(device, "nvnCommandBufferSetStencilRef"); + pfnc_nvnCommandBufferSetBlendColor + = (PFNNVNCOMMANDBUFFERSETBLENDCOLORPROC)getProcAddress(device, "nvnCommandBufferSetBlendColor"); + pfnc_nvnCommandBufferSetPointSize + = (PFNNVNCOMMANDBUFFERSETPOINTSIZEPROC)getProcAddress(device, "nvnCommandBufferSetPointSize"); + pfnc_nvnCommandBufferSetLineWidth + = (PFNNVNCOMMANDBUFFERSETLINEWIDTHPROC)getProcAddress(device, "nvnCommandBufferSetLineWidth"); + pfnc_nvnCommandBufferSetPolygonOffsetClamp = (PFNNVNCOMMANDBUFFERSETPOLYGONOFFSETCLAMPPROC)getProcAddress( + device, "nvnCommandBufferSetPolygonOffsetClamp"); + pfnc_nvnCommandBufferSetAlphaRef + = (PFNNVNCOMMANDBUFFERSETALPHAREFPROC)getProcAddress(device, "nvnCommandBufferSetAlphaRef"); + pfnc_nvnCommandBufferSetSampleMask + = (PFNNVNCOMMANDBUFFERSETSAMPLEMASKPROC)getProcAddress(device, "nvnCommandBufferSetSampleMask"); + pfnc_nvnCommandBufferSetRasterizerDiscard = (PFNNVNCOMMANDBUFFERSETRASTERIZERDISCARDPROC)getProcAddress( + device, "nvnCommandBufferSetRasterizerDiscard"); + pfnc_nvnCommandBufferSetDepthClamp + = (PFNNVNCOMMANDBUFFERSETDEPTHCLAMPPROC)getProcAddress(device, "nvnCommandBufferSetDepthClamp"); + pfnc_nvnCommandBufferSetConservativeRasterEnable + = (PFNNVNCOMMANDBUFFERSETCONSERVATIVERASTERENABLEPROC)getProcAddress( + device, "nvnCommandBufferSetConservativeRasterEnable"); + pfnc_nvnCommandBufferSetConservativeRasterDilate + = (PFNNVNCOMMANDBUFFERSETCONSERVATIVERASTERDILATEPROC)getProcAddress( + device, "nvnCommandBufferSetConservativeRasterDilate"); + pfnc_nvnCommandBufferSetSubpixelPrecisionBias + = (PFNNVNCOMMANDBUFFERSETSUBPIXELPRECISIONBIASPROC)getProcAddress( + device, "nvnCommandBufferSetSubpixelPrecisionBias"); + pfnc_nvnCommandBufferCopyBufferToTexture = (PFNNVNCOMMANDBUFFERCOPYBUFFERTOTEXTUREPROC)getProcAddress( + device, "nvnCommandBufferCopyBufferToTexture"); + pfnc_nvnCommandBufferCopyTextureToBuffer = (PFNNVNCOMMANDBUFFERCOPYTEXTURETOBUFFERPROC)getProcAddress( + device, "nvnCommandBufferCopyTextureToBuffer"); + pfnc_nvnCommandBufferCopyTextureToTexture = (PFNNVNCOMMANDBUFFERCOPYTEXTURETOTEXTUREPROC)getProcAddress( + device, "nvnCommandBufferCopyTextureToTexture"); + pfnc_nvnCommandBufferCopyBufferToBuffer = (PFNNVNCOMMANDBUFFERCOPYBUFFERTOBUFFERPROC)getProcAddress( + device, "nvnCommandBufferCopyBufferToBuffer"); + pfnc_nvnCommandBufferClearBuffer + = (PFNNVNCOMMANDBUFFERCLEARBUFFERPROC)getProcAddress(device, "nvnCommandBufferClearBuffer"); + pfnc_nvnCommandBufferClearTexture + = (PFNNVNCOMMANDBUFFERCLEARTEXTUREPROC)getProcAddress(device, "nvnCommandBufferClearTexture"); + pfnc_nvnCommandBufferClearTexturei + = (PFNNVNCOMMANDBUFFERCLEARTEXTUREIPROC)getProcAddress(device, "nvnCommandBufferClearTexturei"); + pfnc_nvnCommandBufferClearTextureui + = (PFNNVNCOMMANDBUFFERCLEARTEXTUREUIPROC)getProcAddress(device, "nvnCommandBufferClearTextureui"); + pfnc_nvnCommandBufferUpdateUniformBuffer = (PFNNVNCOMMANDBUFFERUPDATEUNIFORMBUFFERPROC)getProcAddress( + device, "nvnCommandBufferUpdateUniformBuffer"); + pfnc_nvnCommandBufferReportCounter + = (PFNNVNCOMMANDBUFFERREPORTCOUNTERPROC)getProcAddress(device, "nvnCommandBufferReportCounter"); + pfnc_nvnCommandBufferResetCounter + = (PFNNVNCOMMANDBUFFERRESETCOUNTERPROC)getProcAddress(device, "nvnCommandBufferResetCounter"); + pfnc_nvnCommandBufferReportValue + = (PFNNVNCOMMANDBUFFERREPORTVALUEPROC)getProcAddress(device, "nvnCommandBufferReportValue"); + pfnc_nvnCommandBufferSetRenderEnable + = (PFNNVNCOMMANDBUFFERSETRENDERENABLEPROC)getProcAddress(device, "nvnCommandBufferSetRenderEnable"); + pfnc_nvnCommandBufferSetRenderEnableConditional + = (PFNNVNCOMMANDBUFFERSETRENDERENABLECONDITIONALPROC)getProcAddress( + device, "nvnCommandBufferSetRenderEnableConditional"); + pfnc_nvnCommandBufferSetRenderTargets + = (PFNNVNCOMMANDBUFFERSETRENDERTARGETSPROC)getProcAddress(device, "nvnCommandBufferSetRenderTargets"); + pfnc_nvnCommandBufferDiscardColor + = (PFNNVNCOMMANDBUFFERDISCARDCOLORPROC)getProcAddress(device, "nvnCommandBufferDiscardColor"); + pfnc_nvnCommandBufferDiscardDepthStencil = (PFNNVNCOMMANDBUFFERDISCARDDEPTHSTENCILPROC)getProcAddress( + device, "nvnCommandBufferDiscardDepthStencil"); + pfnc_nvnCommandBufferDownsample + = (PFNNVNCOMMANDBUFFERDOWNSAMPLEPROC)getProcAddress(device, "nvnCommandBufferDownsample"); + pfnc_nvnCommandBufferTiledDownsample + = (PFNNVNCOMMANDBUFFERTILEDDOWNSAMPLEPROC)getProcAddress(device, "nvnCommandBufferTiledDownsample"); + pfnc_nvnCommandBufferDownsampleTextureView = (PFNNVNCOMMANDBUFFERDOWNSAMPLETEXTUREVIEWPROC)getProcAddress( + device, "nvnCommandBufferDownsampleTextureView"); + pfnc_nvnCommandBufferTiledDownsampleTextureView + = (PFNNVNCOMMANDBUFFERTILEDDOWNSAMPLETEXTUREVIEWPROC)getProcAddress( + device, "nvnCommandBufferTiledDownsampleTextureView"); + pfnc_nvnCommandBufferBarrier + = (PFNNVNCOMMANDBUFFERBARRIERPROC)getProcAddress(device, "nvnCommandBufferBarrier"); + pfnc_nvnCommandBufferWaitSync + = (PFNNVNCOMMANDBUFFERWAITSYNCPROC)getProcAddress(device, "nvnCommandBufferWaitSync"); + pfnc_nvnCommandBufferFenceSync + = (PFNNVNCOMMANDBUFFERFENCESYNCPROC)getProcAddress(device, "nvnCommandBufferFenceSync"); + pfnc_nvnCommandBufferSetTexturePool + = (PFNNVNCOMMANDBUFFERSETTEXTUREPOOLPROC)getProcAddress(device, "nvnCommandBufferSetTexturePool"); + pfnc_nvnCommandBufferSetSamplerPool + = (PFNNVNCOMMANDBUFFERSETSAMPLERPOOLPROC)getProcAddress(device, "nvnCommandBufferSetSamplerPool"); + pfnc_nvnCommandBufferSetShaderScratchMemory + = (PFNNVNCOMMANDBUFFERSETSHADERSCRATCHMEMORYPROC)getProcAddress( + device, "nvnCommandBufferSetShaderScratchMemory"); + pfnc_nvnCommandBufferSaveZCullData + = (PFNNVNCOMMANDBUFFERSAVEZCULLDATAPROC)getProcAddress(device, "nvnCommandBufferSaveZCullData"); + pfnc_nvnCommandBufferRestoreZCullData + = (PFNNVNCOMMANDBUFFERRESTOREZCULLDATAPROC)getProcAddress(device, "nvnCommandBufferRestoreZCullData"); + pfnc_nvnCommandBufferSetCopyRowStride + = (PFNNVNCOMMANDBUFFERSETCOPYROWSTRIDEPROC)getProcAddress(device, "nvnCommandBufferSetCopyRowStride"); + pfnc_nvnCommandBufferSetCopyImageStride = (PFNNVNCOMMANDBUFFERSETCOPYIMAGESTRIDEPROC)getProcAddress( + device, "nvnCommandBufferSetCopyImageStride"); + pfnc_nvnCommandBufferGetCopyRowStride + = (PFNNVNCOMMANDBUFFERGETCOPYROWSTRIDEPROC)getProcAddress(device, "nvnCommandBufferGetCopyRowStride"); + pfnc_nvnCommandBufferGetCopyImageStride = (PFNNVNCOMMANDBUFFERGETCOPYIMAGESTRIDEPROC)getProcAddress( + device, "nvnCommandBufferGetCopyImageStride"); + pfnc_nvnCommandBufferDrawTexture + = (PFNNVNCOMMANDBUFFERDRAWTEXTUREPROC)getProcAddress(device, "nvnCommandBufferDrawTexture"); + pfnc_nvnProgramSetSubroutineLinkage + = (PFNNVNPROGRAMSETSUBROUTINELINKAGEPROC)getProcAddress(device, "nvnProgramSetSubroutineLinkage"); + pfnc_nvnCommandBufferSetProgramSubroutines = (PFNNVNCOMMANDBUFFERSETPROGRAMSUBROUTINESPROC)getProcAddress( + device, "nvnCommandBufferSetProgramSubroutines"); + pfnc_nvnCommandBufferBindCoverageModulationTable + = (PFNNVNCOMMANDBUFFERBINDCOVERAGEMODULATIONTABLEPROC)getProcAddress( + device, "nvnCommandBufferBindCoverageModulationTable"); + pfnc_nvnCommandBufferResolveDepthBuffer = (PFNNVNCOMMANDBUFFERRESOLVEDEPTHBUFFERPROC)getProcAddress( + device, "nvnCommandBufferResolveDepthBuffer"); + pfnc_nvnCommandBufferPushDebugGroupStatic = (PFNNVNCOMMANDBUFFERPUSHDEBUGGROUPSTATICPROC)getProcAddress( + device, "nvnCommandBufferPushDebugGroupStatic"); + pfnc_nvnCommandBufferPushDebugGroupDynamic = (PFNNVNCOMMANDBUFFERPUSHDEBUGGROUPDYNAMICPROC)getProcAddress( + device, "nvnCommandBufferPushDebugGroupDynamic"); + pfnc_nvnCommandBufferPushDebugGroup + = (PFNNVNCOMMANDBUFFERPUSHDEBUGGROUPPROC)getProcAddress(device, "nvnCommandBufferPushDebugGroup"); + pfnc_nvnCommandBufferPopDebugGroup + = (PFNNVNCOMMANDBUFFERPOPDEBUGGROUPPROC)getProcAddress(device, "nvnCommandBufferPopDebugGroup"); + pfnc_nvnCommandBufferPopDebugGroupId + = (PFNNVNCOMMANDBUFFERPOPDEBUGGROUPIDPROC)getProcAddress(device, "nvnCommandBufferPopDebugGroupId"); + pfnc_nvnCommandBufferInsertDebugMarkerStatic + = (PFNNVNCOMMANDBUFFERINSERTDEBUGMARKERSTATICPROC)getProcAddress( + device, "nvnCommandBufferInsertDebugMarkerStatic"); + pfnc_nvnCommandBufferInsertDebugMarkerDynamic + = (PFNNVNCOMMANDBUFFERINSERTDEBUGMARKERDYNAMICPROC)getProcAddress( + device, "nvnCommandBufferInsertDebugMarkerDynamic"); + pfnc_nvnCommandBufferInsertDebugMarker = (PFNNVNCOMMANDBUFFERINSERTDEBUGMARKERPROC)getProcAddress( + device, "nvnCommandBufferInsertDebugMarker"); + pfnc_nvnCommandBufferGetMemoryCallback = (PFNNVNCOMMANDBUFFERGETMEMORYCALLBACKPROC)getProcAddress( + device, "nvnCommandBufferGetMemoryCallback"); + pfnc_nvnCommandBufferGetMemoryCallbackData = (PFNNVNCOMMANDBUFFERGETMEMORYCALLBACKDATAPROC)getProcAddress( + device, "nvnCommandBufferGetMemoryCallbackData"); + pfnc_nvnCommandBufferIsRecording + = (PFNNVNCOMMANDBUFFERISRECORDINGPROC)getProcAddress(device, "nvnCommandBufferIsRecording"); + pfnc_nvnSyncInitialize = (PFNNVNSYNCINITIALIZEPROC)getProcAddress(device, "nvnSyncInitialize"); + pfnc_nvnSyncFinalize = (PFNNVNSYNCFINALIZEPROC)getProcAddress(device, "nvnSyncFinalize"); + pfnc_nvnSyncSetDebugLabel = (PFNNVNSYNCSETDEBUGLABELPROC)getProcAddress(device, "nvnSyncSetDebugLabel"); + pfnc_nvnQueueFenceSync = (PFNNVNQUEUEFENCESYNCPROC)getProcAddress(device, "nvnQueueFenceSync"); + pfnc_nvnSyncWait = (PFNNVNSYNCWAITPROC)getProcAddress(device, "nvnSyncWait"); + pfnc_nvnQueueWaitSync = (PFNNVNQUEUEWAITSYNCPROC)getProcAddress(device, "nvnQueueWaitSync"); + pfnc_nvnEventBuilderSetDefaults + = (PFNNVNEVENTBUILDERSETDEFAULTSPROC)getProcAddress(device, "nvnEventBuilderSetDefaults"); + pfnc_nvnEventBuilderSetStorage + = (PFNNVNEVENTBUILDERSETSTORAGEPROC)getProcAddress(device, "nvnEventBuilderSetStorage"); + pfnc_nvnEventInitialize = (PFNNVNEVENTINITIALIZEPROC)getProcAddress(device, "nvnEventInitialize"); + pfnc_nvnEventFinalize = (PFNNVNEVENTFINALIZEPROC)getProcAddress(device, "nvnEventFinalize"); + pfnc_nvnEventGetValue = (PFNNVNEVENTGETVALUEPROC)getProcAddress(device, "nvnEventGetValue"); + pfnc_nvnEventSignal = (PFNNVNEVENTSIGNALPROC)getProcAddress(device, "nvnEventSignal"); + pfnc_nvnCommandBufferWaitEvent + = (PFNNVNCOMMANDBUFFERWAITEVENTPROC)getProcAddress(device, "nvnCommandBufferWaitEvent"); + pfnc_nvnCommandBufferSignalEvent + = (PFNNVNCOMMANDBUFFERSIGNALEVENTPROC)getProcAddress(device, "nvnCommandBufferSignalEvent"); +} +} diff --git a/src/4JLibraries_Source/NX/Render/RendererCore.cpp b/src/4JLibraries_Source/NX/Render/RendererCore.cpp index 44bcdeea..2c83468d 100644 --- a/src/4JLibraries_Source/NX/Render/RendererCore.cpp +++ b/src/4JLibraries_Source/NX/Render/RendererCore.cpp @@ -15,12 +15,67 @@ #include __thread Renderer::Context* sContext; +static __thread MatrixStruct sMatrixResult; + +// NON_MATCHING | score: 800 (lower is better) +extern "C" Renderer::Context* Renderer__getContext() { + return sContext; +} + +static const MatrixStruct identityMatrix = { + {{1.0f, 0.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 1.0f, 0.0f}, {0.0f, 0.0f, 0.0f, 1.0f}}}; unsigned int textureWidths[6] = {1920, 1280, 512, 256, 128, 64}; unsigned int textureHeights[6] = {1080, 720, 512, 256, 128, 64}; nn::os::MutexType someRendererMutex; -Renderer::Context::Context(Renderer*, bool a2) { - this->m_filler[0] = a2; +// NON_MATCHING | score: 5575 (lower is better) +Renderer::Context::Context(Renderer*, bool creationFlag) { + m_ptr1DE0 = nullptr; + m_ptr1DE8 = nullptr; + m_ptr1DF0 = nullptr; + m_creationFlag = creationFlag; + // Only the base entries are initialized; stack storage and matrix-dirty flags are preserved. + m_matrixDepth[0] = 0; + m_matrixStacks[0][0] = identityMatrix; + m_matrixDepth[1] = 0; + m_matrixDepth[2] = 0; + m_matrixDepth[3] = 0; + m_matrixMode = 0; + m_matrixStacks[1][0] = identityMatrix; + m_matrixStacks[2][0] = identityMatrix; + m_matrixStacks[3][0] = identityMatrix; + m_byte1040 = false; + m_float1044 = 1.0f; + m_lightingEnabled = false; + for (int i = 0; i < 4; i++) { + m_textureBindings[i] = 0; + m_textureBindingDirty[i] = false; + m_textureFlags[i] = false; + } + m_fogEnabled = false; + m_byte1DD8 = false; + m_commandBuffer = nullptr; + m_dword1CE0 = -1; + memset(m_data1CE8, 0, sizeof(m_data1CE8)); + m_byte1CDC = false; + m_byte1D38 = false; + m_fogDirty = false; + m_byte1CE4 = false; + m_textureScaleUI[0] = 1.0f; + m_textureScaleUI[1] = 1.0f; + m_textureScaleUI[2] = 0.0f; + m_textureScaleUI[3] = 0.0f; + nvnBlendStateSetDefaults(&m_blendState); + nvnDepthStencilStateSetDefaults(&m_depthStencilState); + nvnDepthStencilStateSetDepthTestEnable(&m_depthStencilState, true); + nvnDepthStencilStateSetDepthFunc(&m_depthStencilState, NVN_DEPTH_FUNC_LEQUAL); + nvnColorStateSetDefaults(&m_colorState); + nvnPolygonStateSetDefaults(&m_polygonState); + nvnChannelMaskStateSetDefaults(&m_channelMaskState); + m_depthFunc = NVN_DEPTH_FUNC_LEQUAL; + for (int i = 0; i < 6; i++) + m_stateDirty[i] = true; + m_dword1CC0 = 0; } Renderer::Renderer() : C4JRender() { @@ -31,7 +86,7 @@ Renderer::Renderer() : C4JRender() { Renderer::sInstance = this; } -// NON_MATCHING: inline the tls offset getter, could be some compiler flag +// NON_MATCHING | score: 800 (lower is better) void Renderer::InitialiseContext(bool idk) { sContext = new Renderer::Context(this, idk); } @@ -429,3 +484,120 @@ float32x4_t Renderer::MatrixMult(float* matrix) { void Renderer::UpdateGamma(unsigned short gamma) { this->m_gammaIntensity = gamma; } + +void Renderer::MatrixMode(int mode) { + Renderer__getContext()->m_matrixMode = mode; +} + +void Renderer::MatrixSetIdentity() { + Context* context = Renderer__getContext(); + int mode = context->m_matrixMode; + MatrixStruct& top = context->m_matrixStacks[mode][context->m_matrixDepth[mode]]; + top.m__[0] = identityMatrix.m__[0]; + top.m__[1] = identityMatrix.m__[1]; + top.m__[2] = identityMatrix.m__[2]; + top.m__[3] = identityMatrix.m__[3]; + context->m_matrixDirty[context->m_matrixMode] = true; +} + +// name guessed +// NON_MATCHING | score: 1940 (lower is better) +float32x4_t Renderer::MultWithStack(MatrixStruct input) { + Context* context = Renderer__getContext(); + int mode = context->m_matrixMode; + MatrixStruct& top = context->m_matrixStacks[mode][context->m_matrixDepth[mode]]; + float32x4_t a = top.m__[0]; + float32x4_t b = top.m__[1]; + float32x4_t c = top.m__[2]; + float32x4_t d = top.m__[3]; + float32x4_t result; + for (int i = 0; i < 4; i++) { + float32x4_t column = vmulq_laneq_f32(a, input.m__[i], 0); + column = vfmaq_laneq_f32(column, b, input.m__[i], 1); + column = vfmaq_laneq_f32(column, c, input.m__[i], 2); + result = vfmaq_laneq_f32(column, d, input.m__[i], 3); + top.m__[i] = result; + } + context->m_matrixDirty[context->m_matrixMode] = true; + return result; +} + +void Renderer::MatrixTranslate(float x, float y, float z) { + MatrixStruct matrix = identityMatrix; + matrix.m__[3] = (float32x4_t){x, y, z, 1.0f}; + MultWithStack(matrix); +} + +// NON_MATCHING | score: 1445 (lower is better) +void Renderer::MatrixScale(float x, float y, float z) { + MatrixStruct matrix + = {{{x, 0.0f, 0.0f, 0.0f}, {0.0f, y, 0.0f, 0.0f}, {0.0f, 0.0f, z, 0.0f}, {0.0f, 0.0f, 0.0f, 1.0f}}}; + MultWithStack(matrix); +} + +// NON_MATCHING | score: 700 (lower is better) +void Renderer::MatrixOrthogonal(float left, float right, float bottom, float top, float near, float far) { + float x = 1.0f / (right - left); + float y = 1.0f / (top - bottom); + float z = -1.0f / (far - near); + MatrixStruct matrix = {{{x + x, 0.0f, 0.0f, 0.0f}, + {0.0f, y + y, 0.0f, 0.0f}, + {0.0f, 0.0f, z, 0.0f}, + {-(left + right) * x, -(bottom + top) * y, z * near, 1.0f}}}; + MultWithStack(matrix); +} + +void Renderer::MatrixPush() { + Context* context = Renderer__getContext(); + int mode = context->m_matrixMode; + MatrixStruct* top = &context->m_matrixStacks[mode][context->m_matrixDepth[mode]]; + memcpy(top + 1, top, sizeof(MatrixStruct)); + context->m_matrixDepth[context->m_matrixMode]++; +} + +void Renderer::MatrixPop() { + Context* context = Renderer__getContext(); + context->m_matrixDepth[context->m_matrixMode]--; + context->m_matrixDirty[context->m_matrixMode] = true; +} + +// NON_MATCHING | score: 800 (lower is better) +float* Renderer::MatrixGet(int mode) { + Context* context = Renderer__getContext(); + MatrixStruct& top = context->m_matrixStacks[mode][context->m_matrixDepth[mode]]; + float32x4_t a = top.m__[0]; + float32x4_t b = top.m__[1]; + float32x4_t c = top.m__[2]; + float32x4_t d = top.m__[3]; + sMatrixResult.m__[0] = a; + sMatrixResult.m__[1] = b; + sMatrixResult.m__[2] = c; + sMatrixResult.m__[3] = d; + return reinterpret_cast(&sMatrixResult); +} + +void Renderer::Set_matrixDirty() { + Context* context = Renderer__getContext(); + context->m_matrixStacks[0][0].m__[0] = identityMatrix.m__[0]; + context->m_matrixStacks[0][0].m__[1] = identityMatrix.m__[1]; + context->m_matrixStacks[0][0].m__[2] = identityMatrix.m__[2]; + context->m_matrixStacks[0][0].m__[3] = identityMatrix.m__[3]; + context->m_matrixStacks[1][0].m__[0] = identityMatrix.m__[0]; + context->m_matrixStacks[1][0].m__[1] = identityMatrix.m__[1]; + context->m_matrixStacks[1][0].m__[2] = identityMatrix.m__[2]; + context->m_matrixStacks[1][0].m__[3] = identityMatrix.m__[3]; + context->m_matrixStacks[3][0].m__[0] = identityMatrix.m__[0]; + context->m_matrixStacks[3][0].m__[1] = identityMatrix.m__[1]; + context->m_matrixStacks[3][0].m__[2] = identityMatrix.m__[2]; + context->m_matrixStacks[3][0].m__[3] = identityMatrix.m__[3]; + context->m_matrixStacks[2][0].m__[0] = identityMatrix.m__[0]; + context->m_matrixStacks[2][0].m__[1] = identityMatrix.m__[1]; + context->m_matrixStacks[2][0].m__[2] = identityMatrix.m__[2]; + context->m_matrixStacks[2][0].m__[3] = identityMatrix.m__[3]; + context->m_matrixDirty[0] = true; + context->m_matrixDirty[1] = true; + context->m_matrixDirty[3] = true; + context->m_matrixDirty[2] = true; + m_dword29C0 = -1; + m_dword29C4 = -1; +} diff --git a/src/4JLibraries_Source/NX/Render/RendererCore.h b/src/4JLibraries_Source/NX/Render/RendererCore.h index c69dea81..c90bbf18 100644 --- a/src/4JLibraries_Source/NX/Render/RendererCore.h +++ b/src/4JLibraries_Source/NX/Render/RendererCore.h @@ -34,7 +34,49 @@ class Renderer : public C4JRender { public: Context(Renderer*, bool); - char m_filler[0x1F30]; + char m_gap0[0x10]; + MatrixStruct m_matrixStacks[4][16]; + bool m_matrixDirty[4]; + int m_matrixDepth[4]; + int m_matrixMode; + int m_textureBindings[4]; + bool m_textureBindingDirty[4]; + bool m_textureFlags[4]; + bool m_byte1040; + float m_float1044; + NVNblendState m_blendState; + NVNdepthStencilState m_depthStencilState; + NVNcolorState m_colorState; + NVNpolygonState m_polygonState; + NVNchannelMaskState m_channelMaskState; + int m_depthFunc; + bool m_stateDirty[6]; + char m_gap106E[0xC52]; + int m_dword1CC0; + bool m_fogEnabled; + char m_gap1CC5[0x13]; + bool m_fogDirty; + bool m_lightingEnabled; + char m_gap1CDA[2]; + bool m_byte1CDC; + char m_gap1CDD[3]; + int m_dword1CE0; + bool m_byte1CE4; + bool m_creationFlag; + char m_gap1CE6[2]; + char m_data1CE8[0x50]; + bool m_byte1D38; + char m_gap1D39[0x87]; + void* m_commandBuffer; + char m_gap1DC8[0x10]; + bool m_byte1DD8; + char m_gap1DD9[7]; + void* m_ptr1DE0; + void* m_ptr1DE8; + void* m_ptr1DF0; + char m_gap1DF8[0x28]; + float m_textureScaleUI[4]; + char m_gap1E30[0x100]; }; Renderer(); @@ -58,8 +100,8 @@ class Renderer : public C4JRender { virtual void Tick(); virtual void UpdateGamma(unsigned short gamma); - // see OpenGL for more info (modes starts from 0 and ends in 2, they are in the same order as they are in - // OpenGL) + /** NX maintains four independently selected matrix stacks, each with sixteen entries. + */ virtual void MatrixMode(int); virtual void MatrixSetIdentity(); virtual void MatrixTranslate(float, float, float); @@ -70,7 +112,7 @@ class Renderer : public C4JRender { virtual void MatrixPop(); virtual void MatrixPush(); virtual float32x4_t MatrixMult(float* matrix); - virtual void MatrixGet(int); + virtual float* MatrixGet(int); virtual void Set_matrixDirty(); // unused params were probably used in Xbox One virtual void Initialise(); @@ -343,3 +385,13 @@ class Renderer : public C4JRender { int m_elo; int m_elo22; }; + +static_assert(sizeof(MatrixStruct) == 0x40, "Matrix size"); +static_assert(alignof(MatrixStruct) == 0x10, "Matrix alignment"); +static_assert(sizeof(Renderer::Context) == 0x1F30, "Renderer context size"); +static_assert(offsetof(Renderer::Context, m_matrixStacks) == 0x10, "Matrix stack offset"); +static_assert(offsetof(Renderer::Context, m_matrixDirty) == 0x1010, "Matrix dirty offset"); +static_assert(offsetof(Renderer::Context, m_matrixMode) == 0x1024, "Matrix mode offset"); +static_assert(offsetof(Renderer::Context, m_blendState) == 0x1048, "Blend state offset"); +static_assert(offsetof(Renderer::Context, m_creationFlag) == 0x1CE5, "Context flag offset"); +static_assert(offsetof(Renderer::Context, m_textureScaleUI) == 0x1E20, "UI texture scale offset"); diff --git a/src/4JLibraries_Source/NX/Render/StbiFile.cpp b/src/4JLibraries_Source/NX/Render/StbiFile.cpp new file mode 100644 index 00000000..10c4e93e --- /dev/null +++ b/src/4JLibraries_Source/NX/Render/StbiFile.cpp @@ -0,0 +1,6 @@ +#include "NX/Render/TextureUtil.h" + +// name guessed +StbiFile* StbiFile::fromUser(void* user) { + return static_cast(user); +} diff --git a/src/4JLibraries_Source/NX/Render/TextureUtil.cpp b/src/4JLibraries_Source/NX/Render/TextureUtil.cpp index 02336a33..fe52e35d 100644 --- a/src/4JLibraries_Source/NX/Render/TextureUtil.cpp +++ b/src/4JLibraries_Source/NX/Render/TextureUtil.cpp @@ -21,7 +21,7 @@ void TextureUtil::decodeJpeg(void* buffer, int len, int* x, int* y) { } } -// NON_MATCHING: I don't understand the graphic shit too much so this is shitty impl +// NON_MATCHING | score: 3930 (lower is better) void TextureUtil::insertZlibAlphaChannelData(void* data, int width, int height, void* sourceData, int sourceLen) { unsigned long decompressedSize = width * height; @@ -124,10 +124,13 @@ int StbiFile::read(void* user, char* data, int size) { return dataRead; } -// this one requires nn sdk symbol which I wont't bother to get -// void StbiFile::skip(void* user, int n) {} +void StbiFile::skip(void* user, int n) { + StbiFile* file = StbiFile::fromUser(user); + SetFilePointer(file->m_fileHandle, n, nullptr, 1); + StbiFile::fromUser(user)->m_dataRead += n; +} -// NON_MATCHING: some weird stuff is going on here, but logic should be the same though +// NON_MATCHING | score: 115 (lower is better) int StbiFile::eof(void* user) { return StbiFile::fromUser(user)->m_fileSize <= StbiFile::fromUser(user)->m_dataRead; } diff --git a/src/4JLibraries_Source/XLockFreeStack.cpp b/src/4JLibraries_Source/XLockFreeStack.cpp index 4a41c654..591bc88a 100644 --- a/src/4JLibraries_Source/XLockFreeStack.cpp +++ b/src/4JLibraries_Source/XLockFreeStack.cpp @@ -1,24 +1,44 @@ -#include "XLockFreeStack.h" -#include "net/minecraft/core/System.h" - -template -XLockFreeStack::XLockFreeStack() { - this->m_vector = new std::vector(); - InitializeCriticalSectionAndSpinCount(&m_mutex, 0x1400); -} - -template -T* XLockFreeStack::Pop() { - EnterCriticalSection(&this->m_mutex); - if (m_vector.empty()) { - LeaveCriticalSection(&this->m_mutex); - return nullptr; - } - - T* a = m_vector.back(); - m_vector.pop_back(); - - LeaveCriticalSection(&this->m_mutex); - - return a; -} +#include "XLockFreeStack.h" + +#include "net/minecraft/core/System.h" +#include "nn/os/os_Mutex.h" + +// name guessed: the original mutex-finalization wrapper at 0x710060855c. +void DeleteCriticalSection(nn::os::MutexType* mutex) { + nn::os::FinalizeMutex(mutex); +} + +template +// name guessed +XLockFreeStack::XLockFreeStack() { + InitializeCriticalSectionAndSpinCount(&m_mutex, 0x1400); +} + +template +// name guessed +XLockFreeStack::~XLockFreeStack() { + DeleteCriticalSection(&m_mutex); +} + +template +// name guessed +void XLockFreeStack::Push(T* value) { + EnterCriticalSection(&m_mutex); + m_vector.push_back(value); + LeaveCriticalSection(&m_mutex); +} + +template +T* XLockFreeStack::Pop() { + EnterCriticalSection(&m_mutex); + if (m_vector.size() != 0) { + T* value = m_vector.back(); + m_vector.pop_back(); + LeaveCriticalSection(&m_mutex); + return value; + } + LeaveCriticalSection(&m_mutex); + return nullptr; +} + +template class XLockFreeStack; diff --git a/src/4JLibraries_Source/XLockFreeStack.h b/src/4JLibraries_Source/XLockFreeStack.h index 303fb5c0..9e2a1ac5 100644 --- a/src/4JLibraries_Source/XLockFreeStack.h +++ b/src/4JLibraries_Source/XLockFreeStack.h @@ -6,16 +6,20 @@ #include -// wtf is this +/** The original implementation serializes a pointer vector with a mutex. + */ template class XLockFreeStack { public: XLockFreeStack(); + ~XLockFreeStack(); + // name guessed void doSomething() {} + void Push(T*); T* Pop(); - std::vector m_vector; + std::vector m_vector; nn::os::MutexType m_mutex; }; diff --git a/src/4JLibraries_Source/fui/fui.cpp b/src/4JLibraries_Source/fui/fui.cpp index 703cd822..48860125 100644 --- a/src/4JLibraries_Source/fui/fui.cpp +++ b/src/4JLibraries_Source/fui/fui.cpp @@ -24,6 +24,7 @@ void fui::setScreenSize(float width, float height) { this->m_screenHeight = height; } +// NON_MATCHING | score: 3004 (lower is better) void fui::unloadScene(fuiFile* file) { if (!file) return; @@ -96,7 +97,7 @@ void fui::render(fuiFile* file, float a1, float a2, float a3, float a4, float a5 } void fui::dispatchKeyboardEvent(fuiFile* file, bool state, int c) { - FJ_FuiNode* node = file->m_data.m_fuiSymbol->m_stage; // ??? + FJ_FuiNode* node = file->m_renderNodeStage->m_fuiNodeStage; if (FJ_FuiNode* focus = static_cast(node)->getFocus()) node = focus; @@ -106,7 +107,7 @@ void fui::dispatchKeyboardEvent(fuiFile* file, bool state, int c) { // param names guessed void fui::dispatchMouseMoveEvent(fuiFile* file, float x, float y) { - FJ_FuiNode* node = file->m_data.m_fuiSymbol->m_stage; + FJ_FuiNode* node = file->m_renderNodeStage->m_fuiNodeStage; if (FJ_FuiNode* focus = static_cast(node)->getFocus()) node = focus; diff --git a/src/4JLibraries_Source/fui/fuiFile.cpp b/src/4JLibraries_Source/fui/fuiFile.cpp index 53a3bcc3..1130d2ca 100644 --- a/src/4JLibraries_Source/fui/fuiFile.cpp +++ b/src/4JLibraries_Source/fui/fuiFile.cpp @@ -1,4 +1,11 @@ #include "fui/fuiFile.h" + +#include "NX/Render/RendererCore.h" +#include "fui/fui.h" +#include "fui/fuiRenderNodeStage.h" + +#include + #include "fui/node/FJ_FuiNode.h" void fuiMatrix::mul(const fuiMatrix& lhs, const fuiMatrix& rhs, fuiMatrix& out) { @@ -22,8 +29,7 @@ fuiFile::fuiFile() { this->m_field138 = nullptr; } -// NON_MATCHING | Score: 10 (lower is better) -// 2 registers were swapped... +// NON_MATCHING | score: 10 (lower is better) uint64_t fuiFile::addDataRegion(uint a1, unsigned int size, unsigned char** data, uint64_t* callbackData) { if (!size) return 0; @@ -53,3 +59,87 @@ float fuiFile::getStageHeight() { void fuiFile::setIndex(int index) { this->m_header.m_index = index; } + +/** Reads fourteen serialized tables followed by encoded images; excludes runtime pointers. */ +// NON_MATCHING | score: 8880 (lower is better) +bool fuiFile::load(arrayWithLength bytes, int resolution) { + std::memcpy(&m_header, bytes.m_data, 0x98); + m_field138 = nullptr; + const fuiHeader& header = m_header; + if (static_cast(bytes.m_length) + != static_cast(static_cast(header.m_contentSize)) + 0x98u) + return false; + + m_field138 = new unsigned char[m_header.m_contentSize]; + std::memcpy(m_field138, bytes.m_data + 0x98, m_header.m_contentSize); + m_field9C = resolution; + uint64_t cursor = reinterpret_cast(m_field138); + auto take = [&cursor](int count, size_t stride) -> void* { + // The original helper treats its third argument as an integer stride. + return reinterpret_cast( + fuiFile::addDataRegion(0, count, reinterpret_cast(stride), &cursor)); + }; + m_data.m_timeline = static_cast(take(m_header.m_timelineCount, 0x1c)); + m_data.m_timelineAction = static_cast(take(m_header.m_timelineActionCount, 0x84)); + m_data.m_shape = static_cast(take(m_header.m_shapeCount, 0x1c)); + m_data.m_shapeComponent = static_cast(take(m_header.m_shapeComponentCount, 0x2c)); + m_data.m_vert = static_cast(take(m_header.m_vertCount, 8)); + m_data.m_timelineFrame = static_cast(take(m_header.m_timelineFrameCount, 0x48)); + m_data.m_timelineEvent = static_cast(take(m_header.m_timelineEventCount, 0x48)); + if (!m_header.m_signature[0]) { + // 0x7100489ff8: v0 -> v1 only changes the fourth event byte to one. + for (int i = 0; i < m_header.m_timelineEventCount; ++i) + m_data.m_timelineEvent[i].m_flags = 1; + } + m_data.m_timelineEventName + = static_cast(take(m_header.m_timelineEventNameCount, 0x40)); + m_data.m_fuiReference = static_cast(take(m_header.m_referenceCount, 0x48)); + m_data.m_fuiEdittext = static_cast(take(m_header.m_editTextCount, 0x138)); + m_data.m_fuiFontName = static_cast(take(m_header.m_fontNameCount, 0x104)); + m_data.m_fuiSymbol = static_cast(take(m_header.m_symbolCount, 0x48)); + m_data.m_fuiImportAsset = static_cast(take(m_header.m_importAssetCount, 0x40)); + m_data.m_fuiBitmap = static_cast(take(m_header.m_bitmapCount, 0x20)); + m_data.m_imageMaybe = reinterpret_cast(cursor); + m_renderNodeTimeline = nullptr; + return true; +} + +/** Returns true while serialized references remain unresolved. */ +// NON_MATCHING | score: 5485 (lower is better) +bool fuiFile::resolveReferences(fuiFile* imported) { + if (!m_data.m_fuiReference) + return false; + if (imported->m_field9C != m_field9C || imported->m_renderNodeStage) + return true; + bool unresolved = false; + for (int i = 0; i < m_header.m_referenceCount; ++i) { + fuiReference& reference = m_data.m_fuiReference[i]; + if (reference.m_symbolIndex != -1) + continue; + for (int j = 0; j < imported->m_header.m_symbolCount; ++j) { + const bool equal = std::strcmp(imported->m_data.m_fuiSymbol[j].m_name, reference.m_name) == 0; + if (equal) { + reference.m_index = imported->m_header.m_index; + reference.m_symbolIndex = j; + break; + } + } + unresolved |= reference.m_symbolIndex == -1; + } + return unresolved; +} + +/** Releases the render tree, managed textures and serialized tables, in that order. */ +// NON_MATCHING | score: 2405 (lower is better) +fuiFile::~fuiFile() { + delete m_renderNodeStage; + for (int i = 0; i < m_header.m_bitmapCount; ++i) { + fuiBitmap* bitmap = m_data.m_fuiBitmap + i; + if (bitmap->m_texture) { + if (bitmap->m_texture > 0) + Renderer::sInstance->TextureFree(bitmap->m_texture); + fui::sInstance->removeManagedTexture(this, bitmap); + } + } + delete[] static_cast(m_field138); +} diff --git a/src/4JLibraries_Source/fui/fuiFile.h b/src/4JLibraries_Source/fui/fuiFile.h index e234f508..cb8dbbcb 100644 --- a/src/4JLibraries_Source/fui/fuiFile.h +++ b/src/4JLibraries_Source/fui/fuiFile.h @@ -3,6 +3,7 @@ #include "fui/fuiSymbol.h" #include "net/minecraft/world/ArrayWithLength.h" #include "types.h" +#include // Most structs derived from // https://github.com/NessieHax/fui-research-repo/blob/main/DOCUMENTATION.md @@ -36,6 +37,7 @@ struct fuiMatrix { // spent an hour trying to figure out what this was // finally thought of it being a built in C++ operator... which looks good to me. + // NON_MATCHING | score: 205 (lower is better) fuiMatrix operator*(const fuiMatrix& rhs) const { fuiMatrix out = {}; mul(*this, rhs, out); @@ -46,47 +48,107 @@ struct fuiMatrix { static void mul(const fuiMatrix& lhs, const fuiMatrix& rhs, fuiMatrix& out); }; struct fuiColorTransform { - float m_redMultTerm; - float m_greenMultTerm; - float m_blueMultTerm; - float m_alphaMultTerm; float m_redAddTerm; float m_greenAddTerm; float m_blueAddTerm; float m_alphaAddTerm; + float m_redMultTerm; + float m_greenMultTerm; + float m_blueMultTerm; + float m_alphaMultTerm; }; struct fuiTimeline { int m_symbolIndex; - short m_frameIndex; - short m_frameCount; - short m_actionIndex; - short m_actionCount; + uint16_t m_frameIndex; + uint16_t m_frameCount; + uint16_t m_actionIndex; + uint16_t m_actionCount; fuiRect m_rect; }; -struct fuiTimelineAction; -struct fuiShape; -struct fuiShapeComponent; -struct fuiVert; -struct fuiTimelineFrame; -struct fuiTimelineEvent; -struct timelineEventName; +struct fuiTimelineAction { + uint16_t m_type; + int16_t m_frame; + char m_argument0[64]; + char m_argument1[64]; +}; +struct fuiShape { + int m_symbolIndex; + int m_componentIndex; + int m_componentCount; + fuiRect m_rect; +}; +struct fuiFillStyle { + int m_type; + fuiRGBA m_colour; + int m_bitmapIndex; + fuiMatrix m_matrix; +}; +struct fuiShapeComponent { + fuiFillStyle m_fill; + int m_vertexIndex; + int m_vertexCount; +}; +struct fuiVert { + float m_x, m_y; +}; +struct fuiTimelineFrame { + char m_name[64]; + int m_eventIndex; + int m_eventCount; +}; +struct fuiTimelineEvent { + uint16_t m_type; + uint8_t m_objectType; + uint8_t m_flags; + int16_t m_depth; + int16_t m_objectIndex; + int16_t m_unknown; + int16_t m_nameIndex; + fuiMatrix m_matrix; + fuiColorTransform m_colourTransform; + fuiRGBA m_colour; +}; +struct timelineEventName { + char m_name[64]; +}; struct fuiReference { int m_symbolIndex; char m_name[64]; int m_index; }; -struct fuiEdittext; -struct fuiBitmap; -struct fuiFontName; -struct fuiImportAsset; +struct fuiEdittext { + int m_symbolIndex; + fuiRect m_rect; + int m_fontId; + float m_fontSize; + fuiRGBA m_colour; + int m_flags[6]; + char m_text[256]; +}; +struct fuiBitmap { + int m_symbolIndex; + int m_format; + int m_width; + int m_height; + int m_offset; + int m_size; + int m_alphaOffset; + int m_texture; +}; +struct fuiFontName { + int m_id; + char m_name[256]; +}; +struct fuiImportAsset { + char m_name[64]; +}; class FJ_FuiNode; struct fuiHeader { - bool m_field0; + unsigned char m_signature[8]; int m_contentSize; - int m_field8; - char m_fileName[60]; + char m_fileName[64]; int m_timelineCount; int m_timelineEventNameCount; int m_timelineActionCount; @@ -97,12 +159,11 @@ struct fuiHeader { int m_timelineEventCount; int m_referenceCount; int m_editTextCount; + int m_symbolCount; int m_bitmapCount; int m_imagesSize; - int m_field7C; int m_fontNameCount; int m_importAssetCount; - int m_unk; fuiRect m_stageSize; int m_index; }; @@ -123,7 +184,7 @@ struct fuiData { fuiReference* m_fuiReference; fuiEdittext* m_fuiEdittext; fuiSymbol* m_fuiSymbol; - fuiBitmapFont* m_fuiBitmap; + fuiBitmap* m_fuiBitmap; void* m_imageMaybe; fuiFontName* m_fuiFontName; fuiImportAsset* m_fuiImportAsset; @@ -132,10 +193,11 @@ struct fuiData { struct fuiFile { fuiFile(); ~fuiFile(); - // NOTE: HAD TO CHANGE THE SIGNATURE BECAUSE OF THE METHOD BEING DIFFERENT - // ORIG HAD A CALLBACK METHOD INSTEAD OF DATA + /** Retain the recovered symbol's ABI; its third argument is a byte stride, + * despite the old unsigned-char** declaration in the symbol map. + */ static uint64_t addDataRegion(uint a1, uint a2, uchar** ptr, uint64_t* callbackData); - void load(arrayWithLength, int); + bool load(arrayWithLength, int); bool resolveReferences(fuiFile*); void dumpUnresolvedReferences(); void initialiseRenderTexture(fuiBitmap*, bool); @@ -159,3 +221,15 @@ struct fuiFile { void* m_callbackData; void* m_field138; }; + +static_assert(sizeof(fuiHeader) == 0x9c, "FUI header including runtime file index"); +static_assert(offsetof(fuiHeader, m_contentSize) == 8, "FUI content size"); +static_assert(offsetof(fuiHeader, m_stageSize) == 0x88, "FUI stage rectangle"); +static_assert(sizeof(fuiTimeline) == 0x1c && sizeof(fuiTimelineAction) == 0x84); +static_assert(sizeof(fuiShape) == 0x1c && sizeof(fuiShapeComponent) == 0x2c); +static_assert(sizeof(fuiTimelineFrame) == 0x48 && sizeof(fuiTimelineEvent) == 0x48); +static_assert(sizeof(fuiReference) == 0x48 && sizeof(fuiEdittext) == 0x138); +static_assert(sizeof(fuiBitmap) == 0x20 && sizeof(fuiFontName) == 0x104); +static_assert(offsetof(fuiFile, m_data) == 0xa0); +static_assert(offsetof(fuiFile, m_renderNodeStage) == 0x118); +static_assert(offsetof(fuiFile, m_field138) == 0x138); diff --git a/src/4JLibraries_Source/fui/fuiRenderNode.cpp b/src/4JLibraries_Source/fui/fuiRenderNode.cpp index 773845cc..e6a04e50 100644 --- a/src/4JLibraries_Source/fui/fuiRenderNode.cpp +++ b/src/4JLibraries_Source/fui/fuiRenderNode.cpp @@ -1,11 +1,14 @@ #include "fui/fuiRenderNode.h" +#include + #include "fui/fuiRenderNodeTimeline.h" #include "fui/node/FJ_FuiNodeStage.h" #include fuiMatrix fuiRenderNode::GLOBAL_MATRIX = {1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f}; -fuiRenderNodeColor fuiRenderNode::DEFAULT_COLORS[2] = {{1.0f, 1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f, 0.0f}}; +// Original 0x71010ed6a8: additive zero followed by multiplicative identity. +fuiRenderNodeColor fuiRenderNode::DEFAULT_COLORS[2] = {{0.0f, 0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f, 1.0f}}; fuiRenderNode::fuiRenderNode(fuiRenderNode* stage, fuiRenderNode* timeline, fuiObject* fuiObject, unsigned int a5, eFuiObjectType fuiObjectType, unsigned char a7, fuiRGBA* color, @@ -201,3 +204,9 @@ void fuiRenderNode::generateGlobalMatrix() { FJ_FuiNode* fuiRenderNode::Create(fuiRenderNode* node) { return new FJ_FuiNode(node); } + +// 0x710048a3dc: the wrapper belongs to the render node. +fuiRenderNode::~fuiRenderNode() { + delete m_fuiNodeStage; + m_fuiNodeStage = nullptr; +} diff --git a/src/4JLibraries_Source/fui/fuiRenderNodeStage.cpp b/src/4JLibraries_Source/fui/fuiRenderNodeStage.cpp index 193e05ee..12556b6c 100644 --- a/src/4JLibraries_Source/fui/fuiRenderNodeStage.cpp +++ b/src/4JLibraries_Source/fui/fuiRenderNodeStage.cpp @@ -1,9 +1,12 @@ #include "fui/fuiRenderNodeStage.h" +#include + float fuiRenderNodeStage::getStageHeight() { return this->m_fuiFile->getStageHeight(); } +// name guessed float fuiRenderNodeStage::getStageWidth() { return this->m_fuiFile->getStageWidth(); } @@ -16,3 +19,33 @@ fuiRenderNodeStage::fuiRenderNodeStage(fuiFile* file) : fuiRenderNode(nullptr, nullptr, nullptr, 0, eFuiObjectType_Stage, 0, nullptr, 0, false, file) { this->m_child = nullptr; } + +// 0x710048ef74. The matching runtime requires an attached child before teardown. +fuiRenderNodeStage::~fuiRenderNodeStage() { + m_child->shutdown(); + delete m_child; +} + +/** Virtual slots 3, 4, 5 and 7 of the original stage vtable. + */ +// name guessed +void fuiRenderNodeStage::gather(bool advance) { + m_child->gather(advance); +} + +// name guessed +void fuiRenderNodeStage::preRender() { + m_child->preRender(); +} + +// name guessed +void fuiRenderNodeStage::render(fuiRect* clip, fuiMatrix* matrix) { + m_child->render(clip, matrix); +} + +// name guessed +fuiRenderNode* fuiRenderNodeStage::findNode(const char* name) { + return m_child->findNode(name); +} + +static_assert(!std::is_abstract::value, "The original FUI stage must be instantiable"); diff --git a/src/4JLibraries_Source/fui/fuiRenderNodeStage.h b/src/4JLibraries_Source/fui/fuiRenderNodeStage.h index 9e71892a..b6645505 100644 --- a/src/4JLibraries_Source/fui/fuiRenderNodeStage.h +++ b/src/4JLibraries_Source/fui/fuiRenderNodeStage.h @@ -4,9 +4,16 @@ struct fuiRenderNodeStage : public fuiRenderNode { explicit fuiRenderNodeStage(fuiFile* file); + ~fuiRenderNodeStage() override; + void gather(bool) override; + void preRender() override; + void render(fuiRect*, fuiMatrix*) override; + fuiRenderNode* findNode(const char*) override; float getStageHeight(); float getStageWidth(); void addChild(fuiRenderNode* node); fuiRenderNode* m_child; }; + +static_assert(sizeof(fuiRenderNodeStage) == 0x108, "Original FUI stage layout"); diff --git a/src/4JLibraries_Source/fui/fuiRenderNodeTimeline.cpp b/src/4JLibraries_Source/fui/fuiRenderNodeTimeline.cpp index 853eb836..2f96d7e0 100644 --- a/src/4JLibraries_Source/fui/fuiRenderNodeTimeline.cpp +++ b/src/4JLibraries_Source/fui/fuiRenderNodeTimeline.cpp @@ -1,5 +1,7 @@ #include "fui/fuiRenderNodeTimeline.h" +#include + void fuiRenderNodeTimeline::progogateBoundsFromChild() { fuiRenderNodeTimeline* cur = this; @@ -14,3 +16,112 @@ void fuiRenderNodeTimeline::progogateBoundsFromChild() { cur = tl->asTimeline(); } while (cur); } + +// 0x710048f040. A timeline object is a serialized fuiTimeline record. +// NON_MATCHING | score: 620 (lower is better) +fuiRenderNodeTimeline::fuiRenderNodeTimeline(fuiRenderNode* stage, fuiRenderNode* parent, fuiObject* object, + unsigned int depth, unsigned char flags, fuiRGBA* colour, + unsigned char alpha, bool blend, fuiFile* file) + : fuiRenderNode(stage, parent, object, depth, eFuiObjectType_Timeline, flags, colour, alpha, blend, file), + m_mask(nullptr), m_frame(-1), m_nextFrame(0) { + const int initialFlags = m_flags; + m_flags = initialFlags | 4; + if (object) { + const fuiRect& rect = reinterpret_cast(object)->m_rect; + if (rect.m_inX != 0 || rect.m_axX != 0 || rect.m_inY != 0 || rect.m_axY != 0) + m_flags = initialFlags | 0x24; + } +} + +fuiRenderNodeTimeline::~fuiRenderNodeTimeline() { + for (unsigned int i = 0; i < m_children.size(); ++i) + delete m_children[i]; + delete m_mask; +} + +void fuiRenderNodeTimeline::shutdown() { + for (unsigned int i = 0; i < m_children.size(); ++i) + m_children[i]->shutdown(); +} + +// name guessed +void fuiRenderNodeTimeline::preRender() { + if (isVisible()) { + for (unsigned int i = 0; i < m_children.size(); ++i) + m_children[i]->preRender(); + } +} + +void fuiRenderNodeTimeline::handleAddedToStage() { + fuiRenderNode::handleAddedToStage(); + for (unsigned int i = 0; i < m_children.size(); ++i) + m_children[i]->handleAddedToStage(); +} + +fuiRenderNode* fuiRenderNodeTimeline::findNode(const char* name) { + for (unsigned int i = 0; i < m_children.size(); ++i) { + if (fuiRenderNode* node = m_children[i]->getNodeFromPath(name)) + return node; + } + return nullptr; +} + +fuiRenderNode* fuiRenderNodeTimeline::getNodeFromPath(const char* path) { + const char* end = path; + while (*end && *end != '.') + ++end; + if (!*end) + return fuiRenderNode::getNodeFromPath(path); + if (std::strncmp(m_path, path, end - path) == 0) { + for (unsigned int i = 0; i < m_children.size(); ++i) { + if (fuiRenderNode* node = m_children[i]->getNodeFromPath(end + 1)) + return node; + } + } + return nullptr; +} + +void fuiRenderNodeTimeline::generateGlobalMatrix() { + fuiRenderNode::generateGlobalMatrix(); + for (size_t i = 0; i < m_children.size(); ++i) + m_children[i]->generateGlobalMatrix(); +} + +// name guessed +void fuiRenderNodeTimeline::setPlaying(bool playing) { + if (playing) { + m_flags |= 6; + } else { + m_flags &= ~4; + if (!(m_flags & 0x10)) + m_nextFrame = m_frame; + } +} + +// name guessed +// NON_MATCHING | score: 25 (lower is better) +void fuiRenderNodeTimeline::setFrame(unsigned int frame) { + m_flags |= 0x12; + unsigned int last = reinterpret_cast(m_fuiObject)->m_frameCount - 1u; + m_nextFrame = frame - 1u <= last ? frame - 1u : last; +} + +// NON_MATCHING | score: 1365 (lower is better) +void fuiRenderNodeTimeline::expandBoundsFromChild(fuiRect& rect) { + // Original MI selects retain the current bits for equal or unordered bounds. + m_rect.m_inX = *(rect.m_inX < m_rect.m_inX ? &rect.m_inX : &m_rect.m_inX); + m_rect.m_axX = *(m_rect.m_axX < rect.m_axX ? &rect.m_axX : &m_rect.m_axX); + m_rect.m_inY = *(rect.m_inY < m_rect.m_inY ? &rect.m_inY : &m_rect.m_inY); + m_rect.m_axY = *(m_rect.m_axY < rect.m_axY ? &rect.m_axY : &m_rect.m_axY); +} + +void fuiRenderNodeTimeline::updateBoundsLocal() { + for (unsigned int i = 0; i < m_children.size(); ++i) { + fuiRect rect; + m_children[i]->getParentSpaceBounds(&rect); + if (i == 0) + m_rect = rect; + else + expandBoundsFromChild(rect); + } +} diff --git a/src/4JLibraries_Source/fui/fuiRenderNodeTimeline.h b/src/4JLibraries_Source/fui/fuiRenderNodeTimeline.h index 04e1207e..2c35b21c 100644 --- a/src/4JLibraries_Source/fui/fuiRenderNodeTimeline.h +++ b/src/4JLibraries_Source/fui/fuiRenderNodeTimeline.h @@ -1,8 +1,47 @@ #pragma once #include "fui/fuiRenderNode.h" +#include +#include + +struct fuiTimelineObject { + unsigned int m_depth; + fuiObject* m_object; +}; + +struct fuiFrameAction { + int m_frame; + int m_action; + std::string m_argument; +}; struct fuiRenderNodeTimeline : public fuiRenderNode { + fuiRenderNodeTimeline(fuiRenderNode*, fuiRenderNode*, fuiObject*, unsigned int, unsigned char, fuiRGBA*, + unsigned char, bool, fuiFile*); + ~fuiRenderNodeTimeline() override; + void shutdown() override; + void gather(bool) override; + void preRender() override; + void render(fuiRect*, fuiMatrix*) override; + void handleAddedToStage() override; + fuiRenderNode* findNode(const char*) override; + fuiRenderNode* getNodeFromPath(const char*) override; + void generateGlobalMatrix() override; void progogateBoundsFromChild(); void updateBoundsLocal(); + void expandBoundsFromChild(fuiRect&); + void setPlaying(bool); + void setFrame(unsigned int); + + std::vector m_children; + std::vector m_objects; + fuiRenderNode* m_mask; + int m_frame; + int m_nextFrame; + std::vector m_frameActions; }; + +static_assert(sizeof(fuiFrameAction) == 0x20, "Original FUI frame action layout"); +static_assert(sizeof(fuiRenderNodeTimeline) == 0x158, "Original FUI timeline layout"); +static_assert(offsetof(fuiRenderNodeTimeline, m_children) == 0x100, "Original FUI child list"); +static_assert(offsetof(fuiRenderNodeTimeline, m_frame) == 0x138, "Original FUI frame state"); diff --git a/src/4JLibraries_Source/fui/fuiSymbol.h b/src/4JLibraries_Source/fui/fuiSymbol.h index a880d1e0..33e1c08d 100644 --- a/src/4JLibraries_Source/fui/fuiSymbol.h +++ b/src/4JLibraries_Source/fui/fuiSymbol.h @@ -1,9 +1,9 @@ #pragma once -class FJ_FuiNodeStage; - struct fuiSymbol { - char m_padding[0xf8]; - FJ_FuiNodeStage* - m_stage; // not sure if this is meant to be stage but fui::dispatchKeyboardEvent likes it sooo + char m_name[64]; + int m_objectType; + int m_objectIndex; }; + +static_assert(sizeof(fuiSymbol) == 0x48, "FUI on-disk symbol layout"); diff --git a/src/DecompUtils.h b/src/DecompUtils.h index ae1e85b9..1027d6f8 100644 --- a/src/DecompUtils.h +++ b/src/DecompUtils.h @@ -1,5 +1,8 @@ #pragma once +#include +#include + // this can be depracated if musl is fixed inline __attribute__((__always_inline__)) float decomp_fmax1(float x, float y) { @@ -16,3 +19,14 @@ inline __attribute__((__always_inline__)) float decomp_fminf(float x, float y) { __asm__("fminnm %s0, %s1, %s2" : "=w"(x) : "w"(x), "w"(y)); return x; } + +/** Custom instruction helpers: AArch64 fmax/fmin propagate NaNs, unlike the C math functions. */ +inline __attribute__((__always_inline__)) double decomp_fmax64(double x, double y) { + __asm__("fmax %d0, %d1, %d2" : "=w"(x) : "w"(x), "w"(y)); + return x; +} + +inline __attribute__((__always_inline__)) double decomp_fmin64(double x, double y) { + __asm__("fmin %d0, %d1, %d2" : "=w"(x) : "w"(x), "w"(y)); + return x; +} diff --git a/src/Minecraft.Client/UnityClientSounds.cpp b/src/Minecraft.Client/UnityClientSounds.cpp new file mode 100644 index 00000000..a0e3fe28 --- /dev/null +++ b/src/Minecraft.Client/UnityClientSounds.cpp @@ -0,0 +1,6 @@ +/** Keep these routines together as in the original sound translation unit. + * Clang 4's interprocedural return analysis affects temporary destruction order. + */ +#include "net/minecraft/sounds/SoundEvent.cpp" +#include "net/minecraft/sounds/SoundEvents.cpp" +#include "net/minecraft/world/level/block/SoundType.cpp" diff --git a/src/Minecraft.Client/com/mojang/nbt/CompoundTag.h b/src/Minecraft.Client/com/mojang/nbt/CompoundTag.h index 096796a5..68dcebc8 100644 --- a/src/Minecraft.Client/com/mojang/nbt/CompoundTag.h +++ b/src/Minecraft.Client/com/mojang/nbt/CompoundTag.h @@ -5,6 +5,9 @@ #include "nn/types.h" #include "types.h" #include +#include + +class ListTag; class CompoundTag : public Tag { public: @@ -21,6 +24,10 @@ class CompoundTag : public Tag { void stripEmptyChildren() override; bool isEmpty() const override; void remove(const std::wstring&); + /** Caller owns the returned vector; entries are copies of child names. + */ + std::vector* getAllKeys(); + std::unordered_map* getAllTags(); /** Gets a child `Compound Tag` * @@ -64,27 +71,25 @@ class CompoundTag : public Tag { */ float getFloat(const std::wstring& name); - /** Gets a child `List Tag` (but returns void???) + /** Gets a child `List Tag` * * @param name The name of the child tag - * @param length The length of the list (unconfirmed) + * @param length The element tag type */ - void getList(const std::wstring& name, int length); + ListTag* getList(const std::wstring& name, int length); /** Gets a child `Tag` with the provided name * * @param name The name of the tag that you want to get. */ - CompoundTag* get(const std::wstring& name); + Tag* get(const std::wstring& name); - /** Gets a child `List Tag` (Safe) - * - * Why does this return void + /** Gets a child `List Tag` without allocating * * @param name The name of the child tag - * @param length The length of the list (unconfirmed) + * @param length The element tag type */ - void fjSafeGetListTag(const std::wstring& name, int length); + const ListTag* fjSafeGetListTag(const std::wstring& name, int type) const; /** Checks if a child with the provided name exists * @@ -98,6 +103,7 @@ class CompoundTag : public Tag { * @param type Type of the child tag */ bool contains(const std::wstring& name, int type); + u8 getTagType(const std::wstring& name) const; /** Adds a `Tag` * diff --git a/src/Minecraft.Client/com/mojang/nbt/Tag.h b/src/Minecraft.Client/com/mojang/nbt/Tag.h index 0abd8c0f..be5c7732 100644 --- a/src/Minecraft.Client/com/mojang/nbt/Tag.h +++ b/src/Minecraft.Client/com/mojang/nbt/Tag.h @@ -1,5 +1,6 @@ #pragma once +#include "java/io/DataInput.h" #include "nn/types.h" #include #include @@ -23,11 +24,18 @@ class Tag { virtual bool isEmpty() const; virtual std::wstring getAsString(); + /** The exported DataInput vtable is still incomplete on Switch. Host NBT uses + * the one-byte reader explicitly; readChar reads two bytes in Java streams. + */ + static u8 readType(DataInput* input) { return input->readChar(); } static Tag* newTag(u8 id); static const wchar_t* getTagTypeName(u8 id); template - static void deleteElements(const std::vector&); + static void deleteElements(const std::vector& data) { + for (T tag : data) + delete tag; + } static const u8 TAG_End = 0; static const u8 TAG_Byte = 1; diff --git a/src/Minecraft.Client/net/minecraft/client/ArchiveFile.cpp b/src/Minecraft.Client/net/minecraft/client/ArchiveFile.cpp new file mode 100644 index 00000000..72ef82ca --- /dev/null +++ b/src/Minecraft.Client/net/minecraft/client/ArchiveFile.cpp @@ -0,0 +1,92 @@ +#include "net/minecraft/client/ArchiveFile.h" + +#include "java/io/ByteArrayInputStream.h" +#include "java/io/DataInputStream.h" +#include "java/io/FileInputStream.h" +#include "net/minecraft/client/Compression.h" +#include + +[[noreturn]] void archiveLoadError(void*, const wchar_t*, + ...) asm("_ZN20CConsoleMinecraftApp14FatalLoadErrorEPKwz"); + +// NON_MATCHING | score: 1440 (lower is better) +ArchiveFile::ArchiveFile(File file) : File(), m_data(nullptr), m_inMemory(false) { + File::operator=(file); + if (!file.exists()) + archiveLoadError(nullptr, L"Unable to open archive %ls", file.getPath().c_str()); + FileInputStream fileInput(file); + arrayWithLength bytes(static_cast(file.length()), true); + fileInput.read(bytes, 0, static_cast(file.length())); + ByteArrayInputStream buffer(bytes); + DataInputStream input(&buffer); + m_data = bytes.m_data; + m_inMemory = true; + readHeader(&input); + input.close(); + fileInput.close(); + buffer.reset(); +} + +ArchiveFile::~ArchiveFile() { + delete[] m_data; + for (auto& item : m_entries) + delete item.second; +} + +// NON_MATCHING | score: 565 (lower is better) +void ArchiveFile::readHeader(DataInputStream* input) { + const int count = input->readInt(); + for (int i = 0; i < count; ++i) { + ArchiveEntry* entry = new ArchiveEntry; + entry->name = input->readUTF(); + entry->offset = input->readInt(); + entry->length = input->readInt(); + if (entry->name[0] == L'*') { + entry->name = entry->name.substr(1); + entry->compressed = true; + } + m_entries.insert(std::make_pair(entry->name, entry)); + } +} + +bool ArchiveFile::hasFile(const std::wstring& name) { + return m_entries.find(name) != m_entries.end(); +} + +// NON_MATCHING | score: 9920 (lower is better) +arrayWithLength ArchiveFile::getFile(const std::wstring& name) { + const auto found = m_entries.find(name); + if (found == m_entries.end()) { + archiveLoadError(nullptr, L"Missing %ls in archive %ls", name.c_str(), getPath().c_str()); + } + const ArchiveEntry* entry = found->second; + arrayWithLength bytes; + if (m_inMemory) { + bytes = arrayWithLength(entry->length, true); + std::memcpy(bytes.m_data, m_data + entry->offset, entry->length); + } else { + char filename[256]; + auto* file + = CreateFileA(wstringtofilename(getPath(), filename), 0x80000000, 0, nullptr, 3, 0x80, nullptr); + if (file == reinterpret_cast(-1)) + archiveLoadError(file, L"Unable to reopen archive %ls", getPath().c_str()); + SetFilePointer(file, entry->offset, nullptr, 0); + bytes = arrayWithLength(new unsigned char[entry->length], entry->length); + unsigned int count = 0; + if (!ReadFile(file, bytes.m_data, bytes.m_length, &count, nullptr)) + archiveLoadError(nullptr, L"Unable to read %ls from archive", name.c_str()); + CloseHandle(file); + } + if (entry->compressed && bytes.m_data) { + ByteArrayInputStream buffer(bytes); + DataInputStream input(&buffer); + unsigned int size = input.readInt(); + input.close(); + buffer.reset(); + unsigned char* decoded = new unsigned char[size]; + Compression::getCompression()->Decompress(decoded, &size, bytes.m_data + 4, bytes.m_length - 4); + delete[] bytes.m_data; + bytes = arrayWithLength(decoded, size); + } + return bytes; +} diff --git a/src/Minecraft.Client/net/minecraft/client/ArchiveFile.h b/src/Minecraft.Client/net/minecraft/client/ArchiveFile.h new file mode 100644 index 00000000..bcb0940f --- /dev/null +++ b/src/Minecraft.Client/net/minecraft/client/ArchiveFile.h @@ -0,0 +1,37 @@ +#pragma once + +#include "java/io/File.h" +#include "net/minecraft/world/ArrayWithLength.h" +#include +#include + +class DataInputStream; + +struct ArchiveEntry { + std::wstring name; + int offset = 0; + int length = 0; + bool compressed = false; +}; + +class ArchiveFile : public File { +public: + explicit ArchiveFile(File file); + ~ArchiveFile(); + ArchiveFile(const ArchiveFile&) = delete; + ArchiveFile& operator=(const ArchiveFile&) = delete; + + bool hasFile(const std::wstring& name); + arrayWithLength getFile(const std::wstring& name); + void readHeader(DataInputStream* input); + + unsigned char* m_data; + bool m_inMemory; + std::unordered_map m_entries; +}; + +static_assert(sizeof(ArchiveEntry) == 0x28, "Original archive entry layout"); +static_assert(sizeof(ArchiveFile) == 0x50, "Original archive layout"); +static_assert(offsetof(ArchiveFile, m_data) == 0x18, "Original archive buffer offset"); +static_assert(offsetof(ArchiveFile, m_inMemory) == 0x20, "Original archive mode offset"); +static_assert(offsetof(ArchiveFile, m_entries) == 0x28, "Original archive index offset"); diff --git a/src/Minecraft.Client/net/minecraft/client/CMinecraftApp.cpp b/src/Minecraft.Client/net/minecraft/client/CMinecraftApp.cpp index 3f18e5bc..0ad8b833 100644 --- a/src/Minecraft.Client/net/minecraft/client/CMinecraftApp.cpp +++ b/src/Minecraft.Client/net/minecraft/client/CMinecraftApp.cpp @@ -1,5 +1,9 @@ #include "net/minecraft/client/CMinecraftApp.h" +#include "net/minecraft/client/ArchiveFile.h" +#include "net/minecraft/client/Minecraft.h" +#include "net/minecraft/client/resources/TexturePackRepository.h" + #include "net/minecraft/world/level/gamemode/GameType.h" bool CMinecraftApp::isXuidNotch(PlayerUID* id) { @@ -113,3 +117,41 @@ bool CMinecraftApp::GetChangingSessionType() { bool CMinecraftApp::GetGameStarted() { return this->m_gameStarted; } + +/** Custom access to the archive field beyond the partial CMinecraftApp layout. */ +#define MEDIA_ARCHIVE(app) (*reinterpret_cast(reinterpret_cast(app) + 0x210)) + +void CMinecraftApp::loadMediaArchive() { + std::wstring path(L""); + path.assign(L"Common\\Media\\MediaNX.arc"); + if (!path.empty()) + MEDIA_ARCHIVE(this) = new ArchiveFile(File(path)); +} + +// NON_MATCHING | score: 305 (lower is better) +bool CMinecraftApp::hasArchiveFile(const std::wstring& name, bool baseOnly) { + Minecraft* minecraft = Minecraft::GetInstance(); + if (minecraft && minecraft->m_texturePackRepository) { + TexturePack* pack = minecraft->m_texturePackRepository->getSelected(); + if (pack && (baseOnly ^ true) && pack->unk1() && pack->getArchive()) { + if (pack->getArchive()->hasFile(name)) + return true; + } + } + return MEDIA_ARCHIVE(this)->hasFile(name); +} + +// NON_MATCHING | score: 305 (lower is better) +arrayWithLength CMinecraftApp::getArchiveFile(const std::wstring& name, bool baseOnly) { + Minecraft* minecraft = Minecraft::GetInstance(); + if (minecraft && minecraft->m_texturePackRepository) { + TexturePack* pack = minecraft->m_texturePackRepository->getSelected(); + if (pack && (baseOnly ^ true) && pack->unk1() && pack->getArchive()) { + if (pack->getArchive()->hasFile(name)) + return pack->getArchive()->getFile(name); + } + } + return MEDIA_ARCHIVE(this)->getFile(name); +} + +#undef MEDIA_ARCHIVE diff --git a/src/Minecraft.Client/net/minecraft/client/CMinecraftApp.h b/src/Minecraft.Client/net/minecraft/client/CMinecraftApp.h index ab70ffe7..d9653c43 100644 --- a/src/Minecraft.Client/net/minecraft/client/CMinecraftApp.h +++ b/src/Minecraft.Client/net/minecraft/client/CMinecraftApp.h @@ -71,6 +71,8 @@ class CMinecraftApp { bool IsAppPaused(); void SetAction(int, eXuiAction, void*); void setLevelGenerationOptions(LevelGenerationOptions* options); + // name guessed: records a unique (type, x, z) generation marker. + void addGeneratedFeature(int type, int x, int z); void SetGameHostOption(eGameHostOption option, unsigned int value); void UpdateTrialPausedTimer(); diff --git a/src/Minecraft.Client/net/minecraft/client/Compression.cpp b/src/Minecraft.Client/net/minecraft/client/Compression.cpp index 83e6e383..eb0d9f2f 100644 --- a/src/Minecraft.Client/net/minecraft/client/Compression.cpp +++ b/src/Minecraft.Client/net/minecraft/client/Compression.cpp @@ -35,8 +35,8 @@ Compression::~Compression() { XMemDestroyCompressionContext(this->m_xMemCompressionContext); XMemDestroyDecompressionContext(this->m_xMemDecompressionContext); - nn::os::FinalizeMutex(&this->m_cMutex); - nn::os::FinalizeMutex(&this->m_dcMutex); + DeleteCriticalSection(&this->m_cMutex); + DeleteCriticalSection(&this->m_dcMutex); if (this->m_dcData) { delete this->m_dcData; @@ -282,3 +282,39 @@ bool Compression::internalDecompressRle(void* dst, unsigned int* dstSize, void* // why? return false; } + +// NON_MATCHING | score: 5762 (lower is better) +int Compression::internalCompressRle(void* dst, uint* dstSize, void* src, uint srcSize) { + unsigned char* output = static_cast(dst); + unsigned char* const begin = output; + unsigned char* input = static_cast(src); + const uint capacity = *dstSize; + PIXBeginNamedEvent(0.0f, "RLE compression"); + unsigned char* const end = input + srcSize; + for (;;) { + const unsigned char value = *input; + uint count = 1; + while (input + count != end && count < 256 && input[count] == value) + ++count; + input += count; + if (count >= 4) { + *output++ = 0xff; + *output++ = static_cast(count - 1); + *output++ = value; + } else if (value == 0xff) { + *output++ = 0xff; + *output++ = static_cast(count - 1); + } else { + for (uint i = 0; i < count; ++i) + *output++ = value; + } + const bool more = input != end; + const uint written = static_cast(output - begin); + const bool full = output >= begin + capacity - 3; + if (!more || full) { + PIXEndNamedEvent(); + *dstSize = written; + return more ? static_cast(0x80cc0001u) : 0; + } + } +} diff --git a/src/Minecraft.Client/net/minecraft/client/Minecraft.cpp b/src/Minecraft.Client/net/minecraft/client/Minecraft.cpp index b63ca498..70739344 100644 --- a/src/Minecraft.Client/net/minecraft/client/Minecraft.cpp +++ b/src/Minecraft.Client/net/minecraft/client/Minecraft.cpp @@ -160,6 +160,7 @@ void Minecraft::init() { Renderer::sInstance->CBuffLockStaticCreations(); } +// NON_MATCHING | score: 2160 (lower is better) void Minecraft::main() { std::wstring playerName; std::wstring session; @@ -199,6 +200,7 @@ void Minecraft::start(const std::wstring& str1, const std::wstring& str2) { startAndConnectTo(str1, str2, L""); } +// NON_MATCHING | score: 5 (lower is better) Minecraft::Minecraft(Component* component, Canvas* canvas, MinecraftApplet* minecraftApplet, int width, int height, bool fullscreen) { m_fixerUpper = DataFixers::createFixerUpper(); @@ -325,7 +327,7 @@ int Minecraft::getAverageFps() { } bool Minecraft::isUsingDefaultSkin() { - return GetInstance()->m_texturePackRepository->getSelected(); + return GetInstance()->m_texturePackRepository->isUsingDefault(); } bool Minecraft::isTutorial() { diff --git a/src/Minecraft.Client/net/minecraft/client/Timer.cpp b/src/Minecraft.Client/net/minecraft/client/Timer.cpp new file mode 100644 index 00000000..1c7d5aa1 --- /dev/null +++ b/src/Minecraft.Client/net/minecraft/client/Timer.cpp @@ -0,0 +1,59 @@ +#include "net/minecraft/client/Timer.h" + +#include "DecompUtils.h" +#include "net/minecraft/core/System.h" + +Timer::Timer(float tps) { + m_timeScale = 1.0f; + m_tickRemainder = 0.0f; + m_lastTime = 0.0; + m_ticks = 0; + m_partialTick = 0.0f; + m_syncAccumulator = 0; + m_clockAdjustment = 1.0; + m_ticksPerSecond = tps; + m_lastClockMillis = System::processTimeInMilliSecs(); + m_lastSyncMillis = System::processTimeInMilliSecs(); +} + +// NON_MATCHING | score: 150 (lower is better) +void Timer::advanceTime() { + long long clockMillis = System::processTimeInMilliSecs(); + long long clockDelta = clockMillis - m_lastClockMillis; + long long syncMillis = System::processTimeInMilliSecs(); + double time = static_cast(syncMillis) / 1000.0; + + if (clockDelta > 1000) { + m_lastTime = time - 1000.0; + } else if (clockDelta < 0) { + m_lastTime = time; + } else { + m_syncAccumulator += clockDelta; + if (m_syncAccumulator > 1000) { + long long syncDelta = syncMillis - m_lastSyncMillis; + m_lastSyncMillis = syncMillis; + long long accumulatedMillis = m_syncAccumulator; + m_syncAccumulator = 0; + m_clockAdjustment += (static_cast(accumulatedMillis) / static_cast(syncDelta) + - m_clockAdjustment) + * static_cast(0.2f); + } else if (m_syncAccumulator < 0) { + m_lastSyncMillis = syncMillis; + } + } + + double elapsed = (time - m_lastTime) * m_clockAdjustment; + m_lastTime = time; + elapsed = decomp_fmin64(decomp_fmax64(elapsed, 0.0), 1.0); + float accumulated = static_cast(static_cast(m_tickRemainder) + + static_cast(m_ticksPerSecond) + * (static_cast(m_timeScale) * elapsed)); + int ticks = static_cast(accumulated); + float remainder = accumulated - static_cast(ticks); + m_lastClockMillis = clockMillis; + m_ticks = ticks; + m_tickRemainder = remainder; + if (m_ticks > 10) + m_ticks = 10; + m_partialTick = remainder; +} diff --git a/src/Minecraft.Client/net/minecraft/client/Timer.h b/src/Minecraft.Client/net/minecraft/client/Timer.h index 5f29391a..e20d4898 100644 --- a/src/Minecraft.Client/net/minecraft/client/Timer.h +++ b/src/Minecraft.Client/net/minecraft/client/Timer.h @@ -1,8 +1,25 @@ #pragma once +#include + class Timer { public: Timer(float tps); + void advanceTime(); - unsigned char m_padding[0x40]; + float m_ticksPerSecond; + double m_lastTime; + int m_ticks; + float m_partialTick; + float m_timeScale; + float m_tickRemainder; + long long m_lastClockMillis; + long long m_lastSyncMillis; + long long m_syncAccumulator; + double m_clockAdjustment; }; + +static_assert(sizeof(Timer) == 0x40, "Timer size"); +static_assert(offsetof(Timer, m_lastTime) == 0x08, "Timer clock layout"); +static_assert(offsetof(Timer, m_ticks) == 0x10, "Timer tick layout"); +static_assert(offsetof(Timer, m_clockAdjustment) == 0x38, "Timer adjustment layout"); diff --git a/src/Minecraft.Client/net/minecraft/client/color/ColourNames.inc b/src/Minecraft.Client/net/minecraft/client/color/ColourNames.inc new file mode 100644 index 00000000..df85f097 --- /dev/null +++ b/src/Minecraft.Client/net/minecraft/client/color/ColourNames.inc @@ -0,0 +1,488 @@ +/** Indexed names agree with the original colour-name table. + */ +L"NOTSET", +L"Foliage_Evergreen", +L"Foliage_Birch", +L"Foliage_Default", +L"Foliage_Mesa", +L"Foliage_Swampland", +L"Grass_Common", +L"Grass_Swamp1", +L"Grass_Swamp2", +L"Grass_Mesa", +L"Grass_Roofed_Forest_Modifier", +L"Water_Ocean", +L"Water_Plains", +L"Water_Desert", +L"Water_ExtremeHills", +L"Water_Forest", +L"Water_Taiga", +L"Water_Swampland", +L"Water_River", +L"Water_Hell", +L"Water_Sky", +L"Water_FrozenOcean", +L"Water_FrozenRiver", +L"Water_IcePlains", +L"Water_IceMountains", +L"Water_MushroomIsland", +L"Water_MushroomIslandShore", +L"Water_Beach", +L"Water_DesertHills", +L"Water_ForestHills", +L"Water_TaigaHills", +L"Water_ExtremeHillsEdge", +L"Water_Jungle", +L"Water_JungleHills", +L"Water_JungleEdge", +L"Water_DeepOcean", +L"Water_StoneBeach", +L"Water_ColdBeach", +L"Water_BirchForest", +L"Water_BirchForestHills", +L"Water_RoofedForest", +L"Water_ColdTaiga", +L"Water_ColdTaigaHills", +L"Water_MegaTaiga", +L"Water_MegaTaigaHills", +L"Water_ExtremeHillsPlus", +L"Water_Savanna", +L"Water_SavannaPlateau", +L"Water_Mesa", +L"Water_MesaPlateauF", +L"Water_MesaPlateau", +L"Sky_Ocean", +L"Sky_Plains", +L"Sky_Desert", +L"Sky_ExtremeHills", +L"Sky_Forest", +L"Sky_Taiga", +L"Sky_Swampland", +L"Sky_River", +L"Sky_Hell", +L"Sky_Sky", +L"Sky_FrozenOcean", +L"Sky_FrozenRiver", +L"Sky_IcePlains", +L"Sky_IceMountains", +L"Sky_MushroomIsland", +L"Sky_MushroomIslandShore", +L"Sky_Beach", +L"Sky_DesertHills", +L"Sky_ForestHills", +L"Sky_TaigaHills", +L"Sky_ExtremeHillsEdge", +L"Sky_Jungle", +L"Sky_JungleHills", +L"Sky_JungleEdge", +L"Sky_DeepOcean", +L"Sky_StoneBeach", +L"Sky_ColdBeach", +L"Sky_BirchForest", +L"Sky_BirchForestHills", +L"Sky_RoofedForest", +L"Sky_ColdTaiga", +L"Sky_ColdTaigaHills", +L"Sky_MegaTaiga", +L"Sky_MegaTaigaHills", +L"Sky_ExtremeHillsPlus", +L"Sky_Savanna", +L"Sky_SavannaPlateau", +L"Sky_Mesa", +L"Sky_MesaPlateauF", +L"Sky_MesaPlateau", +L"Preview_Ocean", +L"Preview_Plains", +L"Preview_Desert", +L"Preview_ExtremeHills", +L"Preview_Forest", +L"Preview_Taiga", +L"Preview_Swampland", +L"Preview_River", +L"Preview_Hell", +L"Preview_Sky", +L"Preview_FrozenOcean", +L"Preview_FrozenRiver", +L"Preview_IcePlains", +L"Preview_IceMountains", +L"Preview_MushroomIsland", +L"Preview_MushroomIslandShore", +L"Preview_Beach", +L"Preview_DesertHills", +L"Preview_ForestHills", +L"Preview_TaigaHills", +L"Preview_ExtremeHillsEdge", +L"Preview_Jungle", +L"Preview_JungleHills", +L"Preview_JungleEdge", +L"Preview_DeepOcean", +L"Preview_StoneBeach", +L"Preview_ColdBeach", +L"Preview_BirchForest", +L"Preview_BirchForestHills", +L"Preview_RoofedForest", +L"Preview_ColdTaiga", +L"Preview_ColdTaigaHills", +L"Preview_MegaTaiga", +L"Preview_MegaTaigaHills", +L"Preview_ExtremeHillsPlus", +L"Preview_Savanna", +L"Preview_SavannaPlateau", +L"Preview_Mesa", +L"Preview_MesaPlateauF", +L"Preview_MesaPlateau", +L"Preview_Plains_Mutated", +L"Preview_Desert_Mutated", +L"Preview_ExtremeHills_Mutated", +L"Preview_Forest_Mutated", +L"Preview_Taiga_Mutated", +L"Preview_Swampland_Mutated", +L"Preview_IcePlains_Mutated", +L"Preview_Jungle_Mutated", +L"Preview_JungleEdge_Mutated", +L"Preview_BirchForest_Mutated", +L"Preview_BirchForestHills_Mutated", +L"Preview_RoofedForest_Mutated", +L"Preview_ColdTaiga_Mutated", +L"Preview_MegaTaiga_Mutated", +L"Preview_MegaTaigaHills_Mutated", +L"Preview_ExtremeHillsPlus_Mutated", +L"Preview_Savanna_Mutated", +L"Preview_SavannaPlateau_Mutated", +L"Preview_Mesa_Mutated", +L"Preview_MesaPlateauF_Mutated", +L"Preview_MesaPlateau_Mutated", +L"Tile_RedstoneDust", +L"Tile_RedstoneDustUnlit", +L"Tile_RedstoneDustLitMin", +L"Tile_RedstoneDustLitMax", +L"Tile_StemMin", +L"Tile_StemMax", +L"Tile_WaterLily", +L"Sky_Dawn_Dark", +L"Sky_Dawn_Bright", +L"Material_None", +L"Material_Grass", +L"Material_Sand", +L"Material_Cloth", +L"Material_Fire", +L"Material_Ice", +L"Material_Metal", +L"Material_Plant", +L"Material_Snow", +L"Material_Clay", +L"Material_Dirt", +L"Material_Stone", +L"Material_Water", +L"Material_Wood", +L"Material_Emerald", +L"Material_Quartz", +L"Material_Gold", +L"Material_Diamond", +L"Material_Lapis", +L"Material_Podzol", +L"Material_Nether", +L"Material_Color_Orange", +L"Material_Color_Magenta", +L"Material_Color_Light_Blue", +L"Material_Color_Yellow", +L"Material_Color_Light_Green", +L"Material_Color_Pink", +L"Material_Color_Grey", +L"Material_Color_Silver", +L"Material_Color_Cyan", +L"Material_Color_Purple", +L"Material_Color_Blue", +L"Material_Color_Brown", +L"Material_Color_Green", +L"Material_Color_Red", +L"Material_Color_Black", +L"Material_Terracotta_White", +L"Material_Terracotta_Orange", +L"Material_Terracotta_Magenta", +L"Material_Terracotta_Light_Blue", +L"Material_Terracotta_Yellow", +L"Material_Terracotta_Light_Green", +L"Material_Terracotta_Pink", +L"Material_Terracotta_Grey", +L"Material_Terracotta_Silver", +L"Material_Terracotta_Cyan", +L"Material_Terracotta_Purple", +L"Material_Terracotta_Blue", +L"Material_Terracotta_Brown", +L"Material_Terracotta_Green", +L"Material_Terracotta_Red", +L"Material_Terracotta_Black", +L"Particle_Note_00", +L"Particle_Note_01", +L"Particle_Note_02", +L"Particle_Note_03", +L"Particle_Note_04", +L"Particle_Note_05", +L"Particle_Note_06", +L"Particle_Note_07", +L"Particle_Note_08", +L"Particle_Note_09", +L"Particle_Note_10", +L"Particle_Note_11", +L"Particle_Note_12", +L"Particle_Note_13", +L"Particle_Note_14", +L"Particle_Note_15", +L"Particle_Note_16", +L"Particle_Note_17", +L"Particle_Note_18", +L"Particle_Note_19", +L"Particle_Note_20", +L"Particle_Note_21", +L"Particle_Note_22", +L"Particle_Note_23", +L"Particle_Note_24", +L"Particle_NetherPortal", +L"Particle_EnderPortal", +L"Particle_Smoke", +L"Particle_Ender", +L"Particle_Explode", +L"Particle_HugeExplosion", +L"Particle_DripWater", +L"Particle_DripLavaStart", +L"Particle_DripLavaEnd", +L"Particle_EnchantmentTable", +L"Particle_DragonBreathMin", +L"Particle_DragonBreathMax", +L"Particle_Suspend", +L"Particle_CritStart", +L"Particle_CritEnd", +L"Effect_MovementSpeed", +L"Effect_MovementSlowDown", +L"Effect_DigSpeed", +L"Effect_DigSlowdown", +L"Effect_DamageBoost", +L"Effect_Heal", +L"Effect_Harm", +L"Effect_Jump", +L"Effect_Confusion", +L"Effect_Regeneration", +L"Effect_DamageResistance", +L"Effect_FireResistance", +L"Effect_WaterBreathing", +L"Effect_Invisiblity", +L"Effect_Blindness", +L"Effect_NightVision", +L"Effect_Hunger", +L"Effect_Weakness", +L"Effect_Poison", +L"Effect_Wither", +L"Effect_HealthBoost", +L"Effect_Absorption", +L"Effect_Saturation", +L"Effect_Glowing", +L"Effect_Levitation", +L"Effect_Luck", +L"Effect_BadLuck", +L"Potion_BaseColour", +L"Mob_Creeper_Colour1", +L"Mob_Creeper_Colour2", +L"Mob_Skeleton_Colour1", +L"Mob_Skeleton_Colour2", +L"Mob_Spider_Colour1", +L"Mob_Spider_Colour2", +L"Mob_Zombie_Colour1", +L"Mob_Zombie_Colour2", +L"Mob_Slime_Colour1", +L"Mob_Slime_Colour2", +L"Mob_Ghast_Colour1", +L"Mob_Ghast_Colour2", +L"Mob_PigZombie_Colour1", +L"Mob_PigZombie_Colour2", +L"Mob_Enderman_Colour1", +L"Mob_Enderman_Colour2", +L"Mob_CaveSpider_Colour1", +L"Mob_CaveSpider_Colour2", +L"Mob_Silverfish_Colour1", +L"Mob_Silverfish_Colour2", +L"Mob_Blaze_Colour1", +L"Mob_Blaze_Colour2", +L"Mob_LavaSlime_Colour1", +L"Mob_LavaSlime_Colour2", +L"Mob_Pig_Colour1", +L"Mob_Pig_Colour2", +L"Mob_Sheep_Colour1", +L"Mob_Sheep_Colour2", +L"Mob_Cow_Colour1", +L"Mob_Cow_Colour2", +L"Mob_Chicken_Colour1", +L"Mob_Chicken_Colour2", +L"Mob_Squid_Colour1", +L"Mob_Squid_Colour2", +L"Mob_Wolf_Colour1", +L"Mob_Wolf_Colour2", +L"Mob_MushroomCow_Colour1", +L"Mob_MushroomCow_Colour2", +L"Mob_Ocelot_Colour1", +L"Mob_Ocelot_Colour2", +L"Mob_Villager_Colour1", +L"Mob_Villager_Colour2", +L"Mob_Bat_Colour1", +L"Mob_Bat_Colour2", +L"Mob_Witch_Colour1", +L"Mob_Witch_Colour2", +L"Mob_Horse_Colour1", +L"Mob_Horse_Colour2", +L"Mob_Endermite_Color1", +L"Mob_Endermite_Color2", +L"Mob_Guardian_Color1", +L"Mob_Guardian_Color2", +L"Mob_Rabbit_Colour1", +L"Mob_Rabbit_Colour2", +L"Mob_PolarBear_Colour1", +L"Mob_PolarBear_Colour2", +L"Mob_Shulker_Colour1", +L"Mob_Shulker_Colour2", +L"Mob_Elder_Guardian_Colour1", +L"Mob_Elder_Guardian_Colour2", +L"Mob_Evocation_Illager_Colour1", +L"Mob_Evocation_Illager_Colour2", +L"Mob_Llama_Colour1", +L"Mob_Llama_Colour2", +L"Mob_Donkey_Colour1", +L"Mob_Donkey_Colour2", +L"Mob_Skeleton_Horse_Colour1", +L"Mob_Skeleton_Horse_Colour2", +L"Mob_Zombie_Horse_Colour1", +L"Mob_Zombie_Horse_Colour2", +L"Mob_Mule_Colour1", +L"Mob_Mule_Colour2", +L"Mob_Stray_Colour1", +L"Mob_Stray_Colour2", +L"Mob_Husk_Colour1", +L"Mob_Husk_Colour2", +L"Mob_Vex_Colour1", +L"Mob_Vex_Colour2", +L"Mob_Vindication_Illager_Colour1", +L"Mob_Vindication_Illager_Colour2", +L"Mob_Zombie_Villager_Colour1", +L"Mob_Zombie_Villager_Colour2", +L"Mob_Parrot_Colour1", +L"Mob_Parrot_Colour2", +L"Mob_Wither_Skeleton_Colour1", +L"Mob_Wither_Skeleton_Colour2", +L"Armour_Default_Leather_Colour", +L"Under_Water_Clear_Colour", +L"Under_Lava_Clear_Colour", +L"In_Cloud_Base_Colour", +L"Under_Water_Fog_Colour", +L"Under_Lava_Fog_Colour", +L"In_Cloud_Fog_Colour", +L"Default_Fog_Colour", +L"Nether_Fog_Colour", +L"End_Fog_Colour", +L"Sign_Text", +L"Map_Text", +L"Leash_Light_Colour", +L"Leash_Dark_Colour", +L"Fire_Overlay", +L"HTMLColor_0", +L"HTMLColor_1", +L"HTMLColor_2", +L"HTMLColor_3", +L"HTMLColor_4", +L"HTMLColor_5", +L"HTMLColor_6", +L"HTMLColor_7", +L"HTMLColor_8", +L"HTMLColor_9", +L"HTMLColor_a", +L"HTMLColor_b", +L"HTMLColor_c", +L"HTMLColor_d", +L"HTMLColor_e", +L"HTMLColor_f", +L"HTMLColor_dark_0", +L"HTMLColor_dark_1", +L"HTMLColor_dark_2", +L"HTMLColor_dark_3", +L"HTMLColor_dark_4", +L"HTMLColor_dark_5", +L"HTMLColor_dark_6", +L"HTMLColor_dark_7", +L"HTMLColor_dark_8", +L"HTMLColor_dark_9", +L"HTMLColor_dark_a", +L"HTMLColor_dark_b", +L"HTMLColor_dark_c", +L"HTMLColor_dark_d", +L"HTMLColor_dark_e", +L"HTMLColor_dark_f", +L"HTMLColor_T1", +L"HTMLColor_T2", +L"HTMLColor_T3", +L"HTMLColor_Black", +L"HTMLColor_White", +L"Color_EnchantText", +L"Color_EnchantTextFocus", +L"Color_EnchantTextDisabled", +L"Color_RenamedItemTitle", +L"BlockLight_OverworldDimension", +L"BlockLight_HellDimension", +L"BlockLight_EndDimension", +L"Banner_White", +L"Banner_Orange", +L"Banner_Magenta", +L"Banner_Light_Blue", +L"Banner_Yellow", +L"Banner_Lime", +L"Banner_Pink", +L"Banner_Gray", +L"Banner_Silver", +L"Banner_Cyan", +L"Banner_Purple", +L"Banner_Blue", +L"Banner_Brown", +L"Banner_Green", +L"Banner_Red", +L"Banner_Black", +L"Thermal_Lift", +L"Thermal_Constant", +L"Thermal_ConstantToHeight", +L"Thermal_Speedboost", +L"Thermal_Speedboost2", +L"Particle_ScoreRing_Large", +L"Particle_ScoreRing_Medium", +L"Particle_ScoreRing_Small", +L"Shulker_Box_White", +L"Shulker_Box_Orange", +L"Shulker_Box_Magenta", +L"Shulker_Box_Light_Blue", +L"Shulker_Box_Yellow", +L"Shulker_Box_Light_Green", +L"Shulker_Box_Pink", +L"Shulker_Box_Grey", +L"Shulker_Box_Silver", +L"Shulker_Box_Cyan", +L"Shulker_Box_Purple", +L"Shulker_Box_Blue", +L"Shulker_Box_Brown", +L"Shulker_Box_Green", +L"Shulker_Box_Red", +L"Shulker_Box_Black", +L"Bed_White", +L"Bed_Orange", +L"Bed_Magenta", +L"Bed_Light_Blue", +L"Bed_Yellow", +L"Bed_Lime", +L"Bed_Pink", +L"Bed_Grey", +L"Bed_Silver", +L"Bed_Cyan", +L"Bed_Purple", +L"Bed_Blue", +L"Bed_Brown", +L"Bed_Green", +L"Bed_Red", +L"Bed_Black", +L"Glide_Ghost_Slow", +L"Glide_Ghost_Medium", +L"Glide_Ghost_Fast", +L"Cauldron_Water", diff --git a/src/Minecraft.Client/net/minecraft/client/color/ColourTable.cpp b/src/Minecraft.Client/net/minecraft/client/color/ColourTable.cpp new file mode 100644 index 00000000..44f262e8 --- /dev/null +++ b/src/Minecraft.Client/net/minecraft/client/color/ColourTable.cpp @@ -0,0 +1,55 @@ +#include "net/minecraft/client/color/ColourTable.h" + +#include "NX/Platform.h" +#include "java/io/ByteArrayInputStream.h" +#include "java/io/DataInputStream.h" + +const wchar_t* const ColourTable::s_colourNames[ColourTable::COLOUR_COUNT] = { + // name guessed +#include "ColourNames.inc" + +}; +std::unordered_map ColourTable::s_nameToColour; // name guessed + +void ColourTable::staticCtor() { + for (int i = 0; i < COLOUR_COUNT; ++i) + s_nameToColour.insert(std::make_pair(s_colourNames[i], i)); +} + +// name guessed +ColourTable::ColourTable(unsigned char* data, unsigned int size) { + read(data, size); +} + +// name guessed +ColourTable::ColourTable(const ColourTable& original, unsigned char* data, unsigned int size) { + XMemCpy(this, &original, sizeof(ColourTable)); + read(data, size); +} + +// name guessed +// NON_MATCHING | score: 1419 (lower is better) +void ColourTable::read(unsigned char* data, unsigned int size) { + ByteArrayInputStream bytes(arrayWithLength(data, size)); + DataInputStream input(&bytes); + input.readInt(); // The original format header is read but not validated. + int count = input.readInt(); + while (count > 0) { + const auto name = input.readUTF(); + const auto value = static_cast(input.readInt()); + setColour(name, value); + --count; + } + bytes.reset(); +} + +// name guessed +void ColourTable::setColour(const std::wstring& name, unsigned int value) { + const auto found = s_nameToColour.find(name); + if (found != s_nameToColour.end()) + m_colours[found->second] = value; +} + +unsigned int ColourTable::getColour(eMinecraftColour colour) { + return m_colours[static_cast(colour)]; +} diff --git a/src/Minecraft.Client/net/minecraft/client/color/ColourTable.h b/src/Minecraft.Client/net/minecraft/client/color/ColourTable.h index f1bfa74b..6dacdef0 100644 --- a/src/Minecraft.Client/net/minecraft/client/color/ColourTable.h +++ b/src/Minecraft.Client/net/minecraft/client/color/ColourTable.h @@ -1,9 +1,24 @@ #pragma once #include "net/minecraft/world/level/material/MaterialColor.h" +#include +#include class ColourTable { public: + ColourTable(unsigned char*, unsigned int); + ColourTable(const ColourTable&, unsigned char*, unsigned int); static void staticCtor(); unsigned int getColour(eMinecraftColour); + void read(unsigned char*, unsigned int); + void setColour(const std::wstring&, unsigned int); + + static constexpr unsigned int COLOUR_COUNT = 486; + unsigned int m_colours[COLOUR_COUNT]; + +private: + static const wchar_t* const s_colourNames[COLOUR_COUNT]; + static std::unordered_map s_nameToColour; }; + +static_assert(sizeof(ColourTable) == 0x798, "Original colour table contains 486 words"); diff --git a/src/Minecraft.Client/net/minecraft/client/gui/Font.h b/src/Minecraft.Client/net/minecraft/client/gui/Font.h index 888c85fd..ad243590 100644 --- a/src/Minecraft.Client/net/minecraft/client/gui/Font.h +++ b/src/Minecraft.Client/net/minecraft/client/gui/Font.h @@ -1,5 +1,7 @@ #pragma once +#include + #include class Options; diff --git a/src/Minecraft.Client/net/minecraft/client/gui/MapRenderer.h b/src/Minecraft.Client/net/minecraft/client/gui/MapRenderer.h index 1f136def..8eccf41c 100644 --- a/src/Minecraft.Client/net/minecraft/client/gui/MapRenderer.h +++ b/src/Minecraft.Client/net/minecraft/client/gui/MapRenderer.h @@ -1,5 +1,7 @@ #pragma once +#include + #include "net/minecraft/world/ArrayWithLength.h" #include #include diff --git a/src/Minecraft.Client/net/minecraft/client/model/Model.h b/src/Minecraft.Client/net/minecraft/client/model/Model.h index b7d2d172..e04eba3c 100644 --- a/src/Minecraft.Client/net/minecraft/client/model/Model.h +++ b/src/Minecraft.Client/net/minecraft/client/model/Model.h @@ -1,5 +1,7 @@ #pragma once +#include + #include #include #include diff --git a/src/Minecraft.Client/net/minecraft/client/multiplayer/ClientChunkCache.h b/src/Minecraft.Client/net/minecraft/client/multiplayer/ClientChunkCache.h index 6ed5841d..afc6c1f0 100644 --- a/src/Minecraft.Client/net/minecraft/client/multiplayer/ClientChunkCache.h +++ b/src/Minecraft.Client/net/minecraft/client/multiplayer/ClientChunkCache.h @@ -23,7 +23,7 @@ class ClientChunkCache : public ChunkSource { void save(bool, ProgressListener*) override; bool shouldSave() override; ChunkSource* getCache() override; - std::vector* getMobsAt(MobCategory*, const BlockPos&) override; + std::vector* getMobsAt(MobCategory*, const BlockPos&) override; void findNearestMapFeature(Level*, const std::wstring&, const BlockPos&, bool) override; int getLoadedChunks() override; void recreateLogicStructuresForChunk(LevelChunk*, int, int) override; diff --git a/src/Minecraft.Client/net/minecraft/client/particle/Particle.h b/src/Minecraft.Client/net/minecraft/client/particle/Particle.h index f73ab805..2d7d52d5 100644 --- a/src/Minecraft.Client/net/minecraft/client/particle/Particle.h +++ b/src/Minecraft.Client/net/minecraft/client/particle/Particle.h @@ -91,8 +91,10 @@ class Particle { // ASSERT_SIZEOF(Particle, 0x98) +#ifdef SAFETY_CHECKS static_assert(offsetof(Particle, m_random) == 0x78); static_assert(offsetof(Particle, m_uvSet) == 0x98); static_assert(offsetof(Particle, m_boundingBox) == 0x138); static_assert(offsetof(Particle, m_canCollide) == 0x69); static_assert(offsetof(Particle, m_width) == 0x6c); +#endif diff --git a/src/Minecraft.Client/net/minecraft/client/particle/ParticleEngine.h b/src/Minecraft.Client/net/minecraft/client/particle/ParticleEngine.h index b76fe43d..85de76e4 100644 --- a/src/Minecraft.Client/net/minecraft/client/particle/ParticleEngine.h +++ b/src/Minecraft.Client/net/minecraft/client/particle/ParticleEngine.h @@ -61,7 +61,9 @@ class ParticleEngine { int m_field0x24c; }; +#ifdef SAFETY_CHECKS static_assert(offsetof(ParticleEngine, m_tickingList) == 0x248); +#endif ASSERT_SIZEOF(ParticleEngine, 0x250) ASSERT_SIZEOF(ParticleEngine::ParticleList, 0x10) diff --git a/src/Minecraft.Client/net/minecraft/client/renderer/BlockRenderer.cpp b/src/Minecraft.Client/net/minecraft/client/renderer/BlockRenderer.cpp index 4986bbc8..8972be93 100644 --- a/src/Minecraft.Client/net/minecraft/client/renderer/BlockRenderer.cpp +++ b/src/Minecraft.Client/net/minecraft/client/renderer/BlockRenderer.cpp @@ -7,39 +7,769 @@ #include "net/minecraft/core/Direction.h" #include "net/minecraft/world/level/block/Blocks.h" #include "net/minecraft/world/level/block/state/properties/AbstractProperty.h" -#include +#include "net/minecraft/world/phys/AABB.h" +#include Property* FACING; -// later fill with something actuall but without this it doesn't match as in original it doesn't use state arg -// and then it removes the state arg from being passed in final binary, -// so it shouldn't be marked as MATCHING_HACK +bool BlockRenderer::hasFixedTexture() { + return m_fixedTexture != nullptr; +} + +void BlockRenderer::setLightOverride(int light) { + m_lightOverride = light; +} + +void BlockRenderer::clearLightOverride() { + m_lightOverride = -1; +} + +// name guessed +bool BlockRenderer::hasLightOverride() { + return m_lightOverride != -1; +} + +void BlockRenderer::setShape(const AABB* shape) { + if (!m_shapeLocked) { + m_x0 = shape->m_inX; + m_x1 = shape->m_axX; + m_y0 = shape->m_inY; + m_y1 = shape->m_axY; + m_z0 = shape->m_inZ; + m_z1 = shape->m_axZ; + m_partialShape + = m_x0 > 0.0f || m_x1 < 1.0f || m_y0 > 0.0f || m_y1 < 1.0f || m_z0 > 0.0f || m_z1 < 1.0f; + } +} + +// name guessed +void BlockRenderer::renderNorth(const BlockState* blockState, double x, double y, double z, + TextureAtlasSprite* sprite) { + if (hasFixedTexture()) + sprite = m_fixedTexture; + + float u0 = sprite->getU(m_x0 * 16.0f); + float u1 = sprite->getU(m_x1 * 16.0f); + float v0 = sprite->getV(16.0f - m_y1 * 16.0f); + float v1 = sprite->getV(16.0f - m_y0 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + renderNorth(blockState, x, y, z, sprite, u0, v0, u1, v1); +} + +// name guessed +void BlockRenderer::renderSouth(const BlockState* blockState, double x, double y, double z, + TextureAtlasSprite* sprite) { + if (hasFixedTexture()) + sprite = m_fixedTexture; + + float u0 = sprite->getU(m_x0 * 16.0f); + float u1 = sprite->getU(m_x1 * 16.0f); + float v0 = sprite->getV(16.0f - m_y1 * 16.0f); + float v1 = sprite->getV(16.0f - m_y0 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + renderSouth(blockState, x, y, z, sprite, u0, v0, u1, v1); +} + +// name guessed +void BlockRenderer::renderWest(const BlockState* blockState, double x, double y, double z, + TextureAtlasSprite* sprite) { + if (hasFixedTexture()) + sprite = m_fixedTexture; + + float u0 = sprite->getU(m_z0 * 16.0f); + float u1 = sprite->getU(m_z1 * 16.0f); + float v0 = sprite->getV(16.0f - m_y1 * 16.0f); + float v1 = sprite->getV(16.0f - m_y0 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + renderWest(blockState, x, y, z, sprite, u0, v0, u1, v1); +} + +// name guessed +void BlockRenderer::renderEast(const BlockState* blockState, double x, double y, double z, + TextureAtlasSprite* sprite) { + if (hasFixedTexture()) + sprite = m_fixedTexture; + + float u0 = sprite->getU(m_z0 * 16.0f); + float u1 = sprite->getU(m_z1 * 16.0f); + float v0 = sprite->getV(16.0f - m_y1 * 16.0f); + float v1 = sprite->getV(16.0f - m_y0 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + renderEast(blockState, x, y, z, sprite, u0, v0, u1, v1); +} + +// name guessed +void BlockRenderer::renderFaceUp(const BlockState* blockState, double x, double y, double z, + TextureAtlasSprite* sprite) { + if (hasFixedTexture()) + sprite = m_fixedTexture; + + float u0 = sprite->getU(m_x0 * 16.0f); + float u1 = sprite->getU(m_x1 * 16.0f); + float v0 = sprite->getV(m_z0 * 16.0f); + float v1 = sprite->getV(m_z1 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + renderFaceUp(blockState, x, y, z, sprite, u0, v0, u1, v1); +} + +// name guessed +void BlockRenderer::renderFaceDown(const BlockState* blockState, double x, double y, double z, + TextureAtlasSprite* sprite) { + if (hasFixedTexture()) + sprite = m_fixedTexture; + + float u0 = sprite->getU(m_x0 * 16.0f); + float u1 = sprite->getU(m_x1 * 16.0f); + float v0 = sprite->getV(m_z0 * 16.0f); + float v1 = sprite->getV(m_z1 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + renderFaceDown(blockState, x, y, z, sprite, u0, v0, u1, v1); +} + +// NON_MATCHING | score: 7588 (lower is better) void BlockRenderer::renderFaceUp(const BlockState* blockState, double x, double y, double z, TextureAtlasSprite* sprite, float u, float v, float u2, float v2) { - printf("", this, x, y, z, sprite, u, v, u2, v2); + float u0 = u; + float v0 = v; + float u1 = u2; + float v1 = v2; + + BufferBuilder* builder = Tesselator::getInstance()->getBuilder(); + + if (m_x0 < 0.0f || m_x1 > 1.0f) { + u0 = sprite->getU0(true); + u1 = sprite->getU1(true); + } + + if (m_z0 < 0.0f || m_z1 > 1.0f) { + v0 = sprite->getV0(true); + v1 = sprite->getV1(true); + } + + if (m_dwordA8 == 1) { + u0 = sprite->getU(m_z0 * 16.0f); + v0 = sprite->getV(16.0f - m_x1 * 16.0f); + u1 = sprite->getU(m_z1 * 16.0f); + v1 = sprite->getV(16.0f - m_x0 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } else if (m_dwordA8 == 2) { + u0 = sprite->getU(16.0f - m_z1 * 16.0f); + v0 = sprite->getV(m_x0 * 16.0f); + u1 = sprite->getU(16.0f - m_z0 * 16.0f); + v1 = sprite->getV(m_x1 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } else if (m_dwordA8 == 3) { + u0 = sprite->getU(16.0f - m_x0 * 16.0f); + u1 = sprite->getU(16.0f - m_x1 * 16.0f); + v0 = sprite->getV(16.0f - m_z0 * 16.0f); + v1 = sprite->getV(16.0f - m_z1 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } + + int uvLockMode = m_dwordC4; + if (uvLockMode == 3) { + std::swap(u0, u1); + std::swap(v0, v1); + } else if (uvLockMode == 2) { + std::swap(u0, u1); + } else if (uvLockMode == 1) { + std::swap(v0, v1); + } + + float uv1_u, uv1_v; + float uv2_u, uv2_v; + float uv3_u, uv3_v; + float uv4_u, uv4_v; + + switch (m_dwordA8) { + case 1: + case 4: + uv1_u = u1; + uv1_v = v0; + uv2_u = u0; + uv2_v = v0; + uv3_u = u0; + uv3_v = v1; + uv4_u = u1; + uv4_v = v1; + break; + case 2: + case 5: + uv1_u = u0; + uv1_v = v1; + uv2_u = u1; + uv2_v = v1; + uv3_u = u1; + uv3_v = v0; + uv4_u = u0; + uv4_v = v0; + break; + default: + uv1_u = u1; + uv1_v = v1; + uv2_u = u1; + uv2_v = v0; + uv3_u = u0; + uv3_v = v0; + uv4_u = u0; + uv4_v = v1; + break; + } + + double x0 = m_x0 + x; + double x1 = m_x1 + x; + double y1 = m_y1 + y; + double z0 = m_z0 + z; + double z1 = m_z1 + z; + + builder->bucket(1); + + if (m_isEnableAo) { + builder->color(m_colorRTl, m_colorGTl, m_colorBTl); + builder->tex2(m_brightnessTl); + builder->vertexUV(x1, y1, z1, uv1_u, uv1_v); + + builder->color(m_colorRBl, m_colorGBl, m_colorBBl); + builder->tex2(m_brightnessBl); + builder->vertexUV(x1, y1, z0, uv2_u, uv2_v); + + builder->color(m_colorRBr, m_colorGBr, m_colorBBr); + builder->tex2(m_brightnessBr); + builder->vertexUV(x0, y1, z0, uv3_u, uv3_v); + + builder->color(m_colorRTr, m_colorGTr, m_colorBTr); + builder->tex2(m_brightnessTr); + builder->vertexUV(x0, y1, z1, uv4_u, uv4_v); + } else { + builder->vertexUV(x1, y1, z1, uv1_u, uv1_v); + builder->vertexUV(x1, y1, z0, uv2_u, uv2_v); + builder->vertexUV(x0, y1, z0, uv3_u, uv3_v); + builder->vertexUV(x0, y1, z1, uv4_u, uv4_v); + } } +// NON_MATCHING | score: 7193 (lower is better) void BlockRenderer::renderFaceDown(const BlockState* blockState, double x, double y, double z, TextureAtlasSprite* sprite, float u, float v, float u2, float v2) { - printf("", this, x, y, z, sprite, u, v, u2, v2); + float u0 = u; + float v0 = v; + float u1 = u2; + float v1 = v2; + + BufferBuilder* builder = Tesselator::getInstance()->getBuilder(); + + if (m_x0 < 0.0f || m_x1 > 1.0f) { + u0 = sprite->getU0(true); + u1 = sprite->getU1(true); + } + + if (m_z0 < 0.0f || m_z1 > 1.0f) { + v0 = sprite->getV0(true); + v1 = sprite->getV1(true); + } + + if (m_dwordAc == 1) { + u0 = sprite->getU(16.0f - m_z1 * 16.0f); + v0 = sprite->getV(m_x0 * 16.0f); + u1 = sprite->getU(16.0f - m_z0 * 16.0f); + v1 = sprite->getV(m_x1 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } else if (m_dwordAc == 2) { + u0 = sprite->getU(m_z0 * 16.0f); + v0 = sprite->getV(16.0f - m_x1 * 16.0f); + u1 = sprite->getU(m_z1 * 16.0f); + v1 = sprite->getV(16.0f - m_x0 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } else if (m_dwordAc == 3) { + u0 = sprite->getU(16.0f - m_x0 * 16.0f); + u1 = sprite->getU(16.0f - m_x1 * 16.0f); + v0 = sprite->getV(16.0f - m_z0 * 16.0f); + v1 = sprite->getV(16.0f - m_z1 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } + + int uvLockMode = m_dwordC8; + if (uvLockMode == 3) { + std::swap(u0, u1); + std::swap(v0, v1); + } else if (uvLockMode == 2) { + std::swap(u0, u1); + } else if (uvLockMode == 1) { + std::swap(v0, v1); + } + + float uv1_u, uv1_v; + float uv2_u, uv2_v; + float uv3_u, uv3_v; + float uv4_u, uv4_v; + + switch (m_dwordAc) { + case 1: + case 4: + uv1_u = u0; + uv1_v = v0; + uv2_u = u1; + uv2_v = v0; + uv3_u = u1; + uv3_v = v1; + uv4_u = u0; + uv4_v = v1; + break; + case 2: + case 5: + uv1_u = u1; + uv1_v = v1; + uv2_u = u0; + uv2_v = v1; + uv3_u = u0; + uv3_v = v0; + uv4_u = u1; + uv4_v = v0; + break; + default: + uv1_u = u0; + uv1_v = v1; + uv2_u = u0; + uv2_v = v0; + uv3_u = u1; + uv3_v = v0; + uv4_u = u1; + uv4_v = v1; + break; + } + + double x0 = m_x0 + x; + double x1 = m_x1 + x; + double y0 = m_y0 + y; + double z0 = m_z0 + z; + double z1 = m_z1 + z; + + builder->bucket(6); + + if (m_isEnableAo) { + builder->color(m_colorRTl, m_colorGTl, m_colorBTl); + builder->tex2(m_brightnessTl); + builder->vertexUV(x0, y0, z1, uv1_u, uv1_v); + + builder->color(m_colorRBl, m_colorGBl, m_colorBBl); + builder->tex2(m_brightnessBl); + builder->vertexUV(x0, y0, z0, uv2_u, uv2_v); + + builder->color(m_colorRBr, m_colorGBr, m_colorBBr); + builder->tex2(m_brightnessBr); + builder->vertexUV(x1, y0, z0, uv3_u, uv3_v); + + builder->color(m_colorRTr, m_colorGTr, m_colorBTr); + builder->tex2(m_brightnessTr); + builder->vertexUV(x1, y0, z1, uv4_u, uv4_v); + } else { + builder->vertexUV(x0, y0, z1, uv1_u, uv1_v); + builder->vertexUV(x0, y0, z0, uv2_u, uv2_v); + builder->vertexUV(x1, y0, z0, uv3_u, uv3_v); + builder->vertexUV(x1, y0, z1, uv4_u, uv4_v); + } } +// NON_MATCHING | score: 9521 (lower is better) void BlockRenderer::renderNorth(const BlockState* blockState, double x, double y, double z, TextureAtlasSprite* sprite, float u, float v, float u2, float v2) { - printf("", this, x, y, z, sprite, u, v, u2, v2); + float u0 = u; + float v0 = v; + float u1 = u2; + float v1 = v2; + + BufferBuilder* builder = Tesselator::getInstance()->getBuilder(); + + if (m_isFlippedTexture) { + std::swap(u0, u1); + } + + if (m_x0 < 0.0f || m_x1 > 1.0f) { + u0 = sprite->getU0(true); + u1 = sprite->getU1(true); + } + + if (m_y0 < 0.0f || m_y1 > 1.0f) { + v0 = sprite->getV0(true); + v1 = sprite->getV1(true); + } + + if (m_dword98 == 1) { + u0 = sprite->getU(16.0f - m_y1 * 16.0f); + v0 = sprite->getV(m_x0 * 16.0f); + u1 = sprite->getU(16.0f - m_y0 * 16.0f); + v1 = sprite->getV(m_x1 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } else if (m_dword98 == 2) { + u0 = sprite->getU(m_y0 * 16.0f); + v0 = sprite->getV(16.0f - m_x0 * 16.0f); + u1 = sprite->getU(m_y1 * 16.0f); + v1 = sprite->getV(16.0f - m_x1 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } else if (m_dword98 == 3) { + u0 = sprite->getU(16.0f - m_x0 * 16.0f); + u1 = sprite->getU(16.0f - m_x1 * 16.0f); + v0 = sprite->getV(m_y1 * 16.0f); + v1 = sprite->getV(m_y0 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } + + int uvLockMode = m_dwordB4; + if (uvLockMode == 3) { + std::swap(u0, u1); + std::swap(v0, v1); + } else if (uvLockMode == 2) { + std::swap(u0, u1); + } else if (uvLockMode == 1) { + std::swap(v0, v1); + } + + float uv1_u, uv1_v; + float uv2_u, uv2_v; + float uv3_u, uv3_v; + float uv4_u, uv4_v; + + switch (m_dword98) { + case 1: + case 4: + uv1_u = u1; + uv1_v = v1; + uv2_u = u1; + uv2_v = v0; + uv3_u = u0; + uv3_v = v0; + uv4_u = u0; + uv4_v = v1; + break; + case 2: + case 5: + uv1_u = u0; + uv1_v = v0; + uv2_u = u0; + uv2_v = v1; + uv3_u = u1; + uv3_v = v1; + uv4_u = u1; + uv4_v = v0; + break; + default: + uv1_u = u1; + uv1_v = v0; + uv2_u = u0; + uv2_v = v0; + uv3_u = u0; + uv3_v = v1; + uv4_u = u1; + uv4_v = v1; + break; + } + + double x0 = m_x0 + x; + double x1 = m_x1 + x; + double y0 = m_y0 + y; + double y1 = m_y1 + y; + double z0 = m_z0 + z; + + builder->bucket(2); + + if (m_isEnableAo) { + builder->color(m_colorRTl, m_colorGTl, m_colorBTl); + builder->tex2(m_brightnessTl); + builder->vertexUV(x0, y1, z0, uv1_u, uv1_v); + + builder->color(m_colorRBl, m_colorGBl, m_colorBBl); + builder->tex2(m_brightnessBl); + builder->vertexUV(x1, y1, z0, uv2_u, uv2_v); + + builder->color(m_colorRBr, m_colorGBr, m_colorBBr); + builder->tex2(m_brightnessBr); + builder->vertexUV(x1, y0, z0, uv3_u, uv3_v); + + builder->color(m_colorRTr, m_colorGTr, m_colorBTr); + builder->tex2(m_brightnessTr); + builder->vertexUV(x0, y0, z0, uv4_u, uv4_v); + } else { + builder->vertexUV(x0, y1, z0, uv1_u, uv1_v); + builder->vertexUV(x1, y1, z0, uv2_u, uv2_v); + builder->vertexUV(x1, y0, z0, uv3_u, uv3_v); + builder->vertexUV(x0, y0, z0, uv4_u, uv4_v); + } } +// NON_MATCHING | score: 7162 (lower is better) void BlockRenderer::renderSouth(const BlockState* blockState, double x, double y, double z, TextureAtlasSprite* sprite, float u, float v, float u2, float v2) { - printf("", this, x, y, z, sprite, u, v, u2, v2); + float u0 = u; + float v0 = v; + float u1 = u2; + float v1 = v2; + + BufferBuilder* builder = Tesselator::getInstance()->getBuilder(); + + if (m_isFlippedTexture) { + std::swap(u0, u1); + } + + if (m_x0 < 0.0f || m_x1 > 1.0f) { + u0 = sprite->getU0(true); + u1 = sprite->getU1(true); + } + + if (m_y0 < 0.0f || m_y1 > 1.0f) { + v0 = sprite->getV0(true); + v1 = sprite->getV1(true); + } + + if (m_dword9C == 1) { + u0 = sprite->getU(m_y0 * 16.0f); + v1 = sprite->getV(16.0f - m_x0 * 16.0f); + u1 = sprite->getU(m_y1 * 16.0f); + v0 = sprite->getV(16.0f - m_x1 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } else if (m_dword9C == 2) { + u0 = sprite->getU(16.0f - m_y1 * 16.0f); + v0 = sprite->getV(m_x0 * 16.0f); + u1 = sprite->getU(16.0f - m_y0 * 16.0f); + v1 = sprite->getV(m_x1 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } else if (m_dword9C == 3) { + u0 = sprite->getU(16.0f - m_x0 * 16.0f); + u1 = sprite->getU(16.0f - m_x1 * 16.0f); + v0 = sprite->getV(m_y1 * 16.0f); + v1 = sprite->getV(m_y0 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } + + int uvLockMode = m_dwordB8; + if (uvLockMode == 3) { + std::swap(u0, u1); + std::swap(v0, v1); + } else if (uvLockMode == 2) { + std::swap(u0, u1); + } else if (uvLockMode == 1) { + std::swap(v0, v1); + } + + float uv1_u, uv1_v; + float uv2_u, uv2_v; + float uv3_u, uv3_v; + float uv4_u, uv4_v; + + switch (m_dword9C) { + case 1: + case 4: + uv1_u = u0; + uv1_v = v1; + uv2_u = u1; + uv2_v = v1; + uv3_u = u1; + uv3_v = v0; + uv4_u = u0; + uv4_v = v0; + break; + case 2: + case 5: + uv1_u = u1; + uv1_v = v0; + uv2_u = u0; + uv2_v = v0; + uv3_u = u0; + uv3_v = v1; + uv4_u = u1; + uv4_v = v1; + break; + default: + uv1_u = u0; + uv1_v = v0; + uv2_u = u0; + uv2_v = v1; + uv3_u = u1; + uv3_v = v1; + uv4_u = u1; + uv4_v = v0; + break; + } + + double x0 = m_x0 + x; + double x1 = m_x1 + x; + double y0 = m_y0 + y; + double y1 = m_y1 + y; + double z1 = m_z1 + z; + + builder->bucket(4); + + if (m_isEnableAo) { + builder->color(m_colorRTl, m_colorGTl, m_colorBTl); + builder->tex2(m_brightnessTl); + builder->vertexUV(x0, y1, z1, uv1_u, uv1_v); + + builder->color(m_colorRBl, m_colorGBl, m_colorBBl); + builder->tex2(m_brightnessBl); + builder->vertexUV(x0, y0, z1, uv2_u, uv2_v); + + builder->color(m_colorRBr, m_colorGBr, m_colorBBr); + builder->tex2(m_brightnessBr); + builder->vertexUV(x1, y0, z1, uv3_u, uv3_v); + + builder->color(m_colorRTr, m_colorGTr, m_colorBTr); + builder->tex2(m_brightnessTr); + builder->vertexUV(x1, y1, z1, uv4_u, uv4_v); + } else { + builder->vertexUV(x0, y1, z1, uv1_u, uv1_v); + builder->vertexUV(x0, y0, z1, uv2_u, uv2_v); + builder->vertexUV(x1, y0, z1, uv3_u, uv3_v); + builder->vertexUV(x1, y1, z1, uv4_u, uv4_v); + } } +// NON_MATCHING | score: 9151 (lower is better) void BlockRenderer::renderEast(const BlockState* blockState, double x, double y, double z, TextureAtlasSprite* sprite, float u, float v, float u2, float v2) { - printf("", this, x, y, z, sprite, u, v, u2, v2); + float u0 = u; + float v0 = v; + float u1 = u2; + float v1 = v2; + + BufferBuilder* builder = Tesselator::getInstance()->getBuilder(); + + if (m_isFlippedTexture) { + std::swap(u0, u1); + } + + if (m_z0 < 0.0f || m_z1 > 1.0f) { + u0 = sprite->getU0(true); + u1 = sprite->getU1(true); + } + + if (m_y0 < 0.0f || m_y1 > 1.0f) { + v0 = sprite->getV0(true); + v1 = sprite->getV1(true); + } + + if (m_dwordA0 == 1) { + u0 = sprite->getU(16.0f - m_y1 * 16.0f); + v0 = sprite->getV(m_z1 * 16.0f); + u1 = sprite->getU(16.0f - m_y0 * 16.0f); + v1 = sprite->getV(m_z0 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } else if (m_dwordA0 == 2) { + u0 = sprite->getU(m_y0 * 16.0f); + v0 = sprite->getV(16.0f - m_z0 * 16.0f); + u1 = sprite->getU(m_y1 * 16.0f); + v1 = sprite->getV(16.0f - m_z1 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } else if (m_dwordA0 == 3) { + u0 = sprite->getU(16.0f - m_z0 * 16.0f); + u1 = sprite->getU(16.0f - m_z1 * 16.0f); + v0 = sprite->getV(m_y1 * 16.0f); + v1 = sprite->getV(m_y0 * 16.0f); + sprite->adjustUV(u0, u1); + sprite->adjustUV(v0, v1); + } + + int uvLockMode = m_dwordBc; + if (uvLockMode == 3) { + std::swap(u0, u1); + std::swap(v0, v1); + } else if (uvLockMode == 2) { + std::swap(u0, u1); + } else if (uvLockMode == 1) { + std::swap(v0, v1); + } + + float uv1_u, uv1_v; + float uv2_u, uv2_v; + float uv3_u, uv3_v; + float uv4_u, uv4_v; + + switch (m_dwordA0) { + case 1: + case 4: + uv1_u = u0; + uv1_v = v0; + uv2_u = u0; + uv2_v = v1; + uv3_u = u1; + uv3_v = v1; + uv4_u = u1; + uv4_v = v0; + break; + case 2: + case 5: + uv1_u = u1; + uv1_v = v1; + uv2_u = u1; + uv2_v = v0; + uv3_u = u0; + uv3_v = v0; + uv4_u = u0; + uv4_v = v1; + break; + default: + uv1_u = u0; + uv1_v = v1; + uv2_u = u1; + uv2_v = v1; + uv3_u = u1; + uv3_v = v0; + uv4_u = u0; + uv4_v = v0; + break; + } + + double x1 = m_x1 + x; + double y0 = m_y0 + y; + double y1 = m_y1 + y; + double z0 = m_z0 + z; + double z1 = m_z1 + z; + + builder->bucket(3); + + if (m_isEnableAo) { + builder->color(m_colorRTl, m_colorGTl, m_colorBTl); + builder->tex2(m_brightnessTl); + builder->vertexUV(x1, y0, z1, uv1_u, uv1_v); + + builder->color(m_colorRBl, m_colorGBl, m_colorBBl); + builder->tex2(m_brightnessBl); + builder->vertexUV(x1, y0, z0, uv2_u, uv2_v); + + builder->color(m_colorRBr, m_colorGBr, m_colorBBr); + builder->tex2(m_brightnessBr); + builder->vertexUV(x1, y1, z0, uv3_u, uv3_v); + + builder->color(m_colorRTr, m_colorGTr, m_colorBTr); + builder->tex2(m_brightnessTr); + builder->vertexUV(x1, y1, z1, uv4_u, uv4_v); + } else { + builder->vertexUV(x1, y0, z1, uv1_u, uv1_v); + builder->vertexUV(x1, y0, z0, uv2_u, uv2_v); + builder->vertexUV(x1, y1, z0, uv3_u, uv3_v); + builder->vertexUV(x1, y1, z1, uv4_u, uv4_v); + } } -// NON_MATCHING +// NON_MATCHING | score: 8182 (lower is better) void BlockRenderer::renderWest(const BlockState* blockState, double x, double y, double z, TextureAtlasSprite* sprite, float u, float v, float u2, float v2) { float u0 = u; @@ -53,42 +783,43 @@ void BlockRenderer::renderWest(const BlockState* blockState, double x, double y, std::swap(u0, u1); } - if (this->m_30 < 0.0f || this->m_34 > 1.0f) { + if (m_z0 < 0.0f || m_z1 > 1.0f) { u0 = sprite->getU0(true); u1 = sprite->getU1(true); } - if (this->m_28 < 0.0f || this->m_2C > 1.0f) { + if (m_y0 < 0.0f || m_y1 > 1.0f) { v0 = sprite->getV0(true); v1 = sprite->getV1(true); } - if (this->m_dwordA4 == 1) { - u0 = sprite->getU(this->m_28 * 16.0f); - v0 = sprite->getV(16.0f - (this->m_34 * 16.0f)); - u1 = sprite->getU(this->m_2C * 16.0f); - v1 = sprite->getV(16.0f - (this->m_30 * 16.0f)); + if (m_dwordA4 == 1) { + u0 = sprite->getU(m_y0 * 16.0f); + v0 = sprite->getV(16.0f - m_z1 * 16.0f); + u1 = sprite->getU(m_y1 * 16.0f); + v1 = sprite->getV(16.0f - m_z0 * 16.0f); sprite->adjustUV(u0, u1); sprite->adjustUV(v0, v1); - } else if (this->m_dwordA4 == 2) { - u0 = sprite->getU(16.0f - (this->m_2C * 16.0f)); - v0 = sprite->getV(this->m_30 * 16.0f); - u1 = sprite->getU(16.0f - (this->m_28 * 16.0f)); - v1 = sprite->getV(this->m_34 * 16.0f); + } else if (m_dwordA4 == 2) { + u0 = sprite->getU(16.0f - m_y1 * 16.0f); + v0 = sprite->getV(m_z0 * 16.0f); + u1 = sprite->getU(16.0f - m_y0 * 16.0f); + v1 = sprite->getV(m_z1 * 16.0f); sprite->adjustUV(u0, u1); sprite->adjustUV(v0, v1); - } else if (this->m_dwordA4 == 3) { - u0 = sprite->getU(16.0f - (this->m_30 * 16.0f)); - u1 = sprite->getU(16.0f - (this->m_34 * 16.0f)); - v0 = sprite->getV(this->m_2C * 16.0f); - v1 = sprite->getV(this->m_28 * 16.0f); + } else if (m_dwordA4 == 3) { + u0 = sprite->getU(16.0f - m_z0 * 16.0f); + u1 = sprite->getU(16.0f - m_z1 * 16.0f); + v0 = sprite->getV(m_y1 * 16.0f); + v1 = sprite->getV(m_y0 * 16.0f); sprite->adjustUV(u0, u1); sprite->adjustUV(v0, v1); } - int uvLockMode = this->m_dwordC0; + int uvLockMode = m_dwordC0; if (uvLockMode == 3) { std::swap(u0, u1); + std::swap(v0, v1); } else if (uvLockMode == 2) { std::swap(u0, u1); } else if (uvLockMode == 1) { @@ -100,7 +831,7 @@ void BlockRenderer::renderWest(const BlockState* blockState, double x, double y, float uv3_u, uv3_v; float uv4_u, uv4_v; - switch (this->m_dwordA4) { + switch (m_dwordA4) { case 1: case 4: uv1_u = u0; @@ -135,15 +866,15 @@ void BlockRenderer::renderWest(const BlockState* blockState, double x, double y, break; } - double x0 = this->m_20 + x; - double y0 = this->m_28 + y; - double y1 = this->m_2C + y; - double z0 = this->m_30 + z; - double z1 = this->m_34 + z; + double x0 = m_x0 + x; + double y0 = m_y0 + y; + double y1 = m_y1 + y; + double z0 = m_z0 + z; + double z1 = m_z1 + z; builder->bucket(5); - if (this->m_isEnableAo) { + if (m_isEnableAo) { builder->color(m_colorRTl, m_colorGTl, m_colorBTl); builder->tex2(m_brightnessTl); builder->vertexUV(x0, y1, z1, uv1_u, uv1_v); diff --git a/src/Minecraft.Client/net/minecraft/client/renderer/BlockRenderer.h b/src/Minecraft.Client/net/minecraft/client/renderer/BlockRenderer.h index 0648c56b..1ba1033c 100644 --- a/src/Minecraft.Client/net/minecraft/client/renderer/BlockRenderer.h +++ b/src/Minecraft.Client/net/minecraft/client/renderer/BlockRenderer.h @@ -15,7 +15,14 @@ class BlockRenderer { std::shared_ptr); void tesselateInWorldFixedTexture(const BlockState*, const BlockPos&, TextureAtlasSprite*); void clearLightOverride(); + bool hasLightOverride(); void setShape(const AABB*); + void renderFaceUp(const BlockState*, double, double, double, TextureAtlasSprite*); + void renderFaceDown(const BlockState*, double, double, double, TextureAtlasSprite*); + void renderNorth(const BlockState*, double, double, double, TextureAtlasSprite*); + void renderSouth(const BlockState*, double, double, double, TextureAtlasSprite*); + void renderEast(const BlockState*, double, double, double, TextureAtlasSprite*); + void renderWest(const BlockState*, double, double, double, TextureAtlasSprite*); void renderFaceUp(const BlockState*, double, double, double, TextureAtlasSprite*, float, float, float, float); void renderFaceDown(const BlockState*, double, double, double, TextureAtlasSprite*, float, float, float, @@ -38,18 +45,20 @@ class BlockRenderer { char m_gap0[8]; LevelSource* m_source; TextureAtlasSprite* m_fixedTexture; - char m_gap18[4]; + int m_lightOverride; bool m_isFlippedTexture; bool m_isCullFaceDown; bool m_isFancyLighting; bool m_1f; - float m_20; - float m_24; - float m_28; - float m_2C; - float m_30; - float m_34; - char m_gap38[94]; + float m_x0; + float m_x1; + float m_y0; + float m_y1; + float m_z0; + float m_z1; + bool m_shapeLocked; + bool m_partialShape; + char m_gap3A[92]; int m_dword98; int m_dword9C; int m_dwordA0; @@ -71,3 +80,5 @@ class BlockRenderer { float m_colorGTl, m_colorGBl, m_colorGBr, m_colorGTr; float m_colorBTl, m_colorBBl, m_colorBBr, m_colorBTr; }; + +static_assert(sizeof(BlockRenderer) == 0x1B0, "BlockRenderer size"); diff --git a/src/Minecraft.Client/net/minecraft/client/renderer/texture/TextureAtlasSprite.cpp b/src/Minecraft.Client/net/minecraft/client/renderer/texture/TextureAtlasSprite.cpp index 809d604a..c4178974 100644 --- a/src/Minecraft.Client/net/minecraft/client/renderer/texture/TextureAtlasSprite.cpp +++ b/src/Minecraft.Client/net/minecraft/client/renderer/texture/TextureAtlasSprite.cpp @@ -1 +1,69 @@ #include "net/minecraft/client/renderer/texture/TextureAtlasSprite.h" + +void TextureAtlasSprite::initUVs(float u0, float v0, float u1, float v1) { + m_u0 = u0; + m_u1 = u1; + m_v0 = v0; + m_v1 = v1; +} + +int TextureAtlasSprite::getX() const { + return m_x; +} + +int TextureAtlasSprite::getY() const { + return m_y; +} + +int TextureAtlasSprite::getWidth() const { + return m_width; +} + +int TextureAtlasSprite::getHeight() const { + return m_height; +} + +float TextureAtlasSprite::getU0(bool inset) const { + return inset ? m_u0 + 1.0f / 4096.0f : m_u0; +} + +float TextureAtlasSprite::getU1(bool inset) const { + return inset ? m_u1 - 1.0f / 4096.0f : m_u1; +} + +float TextureAtlasSprite::getU(double pixel) const { + float end = getU1(false); + float span = end - getU0(false); + float base = getU0(false); + return (float)pixel * 0.0625f * span + base; +} + +float TextureAtlasSprite::getV0(bool inset) const { + return inset ? m_v0 + 1.0f / 4096.0f : m_v0; +} + +float TextureAtlasSprite::getV1(bool inset) const { + return inset ? m_v1 - 1.0f / 4096.0f : m_v1; +} + +float TextureAtlasSprite::getV(double pixel) const { + float end = getV1(false); + float span = end - getV0(false); + float base = getV0(false); + return (float)pixel * 0.0625f * span + base; +} + +// name guessed +void TextureAtlasSprite::adjustUV(float& start, float& end) { + float* lower = &start; + float* upper = &end; + if (start < end) { + } else if (start > end) { + lower = &end; + upper = &start; + } else { + return; + } + *lower += 1.0f / 4096.0f; + *upper -= 1.0f / 4096.0f; +} diff --git a/src/Minecraft.Client/net/minecraft/client/renderer/texture/TextureAtlasSprite.h b/src/Minecraft.Client/net/minecraft/client/renderer/texture/TextureAtlasSprite.h index 35ca2881..0a26f298 100644 --- a/src/Minecraft.Client/net/minecraft/client/renderer/texture/TextureAtlasSprite.h +++ b/src/Minecraft.Client/net/minecraft/client/renderer/texture/TextureAtlasSprite.h @@ -33,5 +33,16 @@ class TextureAtlasSprite { void adjustUV(float&, float&); void initUVs(float u0, float v0, float u1, float v1); - char m_filler[0x90 - 8]; + char m_filler[0x60 - 8]; + int m_x; + int m_y; + int m_width; + int m_height; + float m_u0; + float m_u1; + float m_v0; + float m_v1; + char m_gap80[0x10]; }; + +static_assert(sizeof(TextureAtlasSprite) == 0x90, "TextureAtlasSprite size"); diff --git a/src/Minecraft.Client/net/minecraft/client/resources/TexturePackRepository.cpp b/src/Minecraft.Client/net/minecraft/client/resources/TexturePackRepository.cpp index 92c07c7d..5bca9d3e 100644 --- a/src/Minecraft.Client/net/minecraft/client/resources/TexturePackRepository.cpp +++ b/src/Minecraft.Client/net/minecraft/client/resources/TexturePackRepository.cpp @@ -1,33 +1,23 @@ #include "net/minecraft/client/resources/TexturePackRepository.h" + #include -// NON_MATCHING | Score: 3105 (lower is better) -// confusion -TexturePackRepository::TexturePackRepository(File file, Minecraft* mc) { - this->m_file = File(); - this->m_file2 = File(); - this->m_unk80d = nullptr; - this->m_unk88d = nullptr; - this->m_unk96d = nullptr; - this->m_texturePackMap = nullptr; - this->m_unk8 = nullptr; - this->m_unk9 = nullptr; - this->m_unk10 = nullptr; - this->m_unk11 = 1.0; +TexturePack* TexturePackRepository::sDefaultTexturePack; // name guessed +TexturePackRepository::TexturePackRepository(File file, Minecraft* mc) { if (!sDefaultTexturePack) { sDefaultTexturePack = new DefaultTexturePack(); } this->m_unk13 = false; - this->m_defaultTexturePack = nullptr; - this->m_texturePacks = new std::vector(); + this->m_selectedTexturePack = nullptr; + this->m_texturePacks = new std::vector(); this->m_minecraft = mc; - this->m_texturePacks->push_back(*sDefaultTexturePack); - (*this->m_texturePackMap)[sDefaultTexturePack->getId()] = *sDefaultTexturePack; + this->m_texturePacks->push_back(sDefaultTexturePack); + this->m_texturePackMap[sDefaultTexturePack->getId()] = sDefaultTexturePack; - this->m_defaultTexturePack = sDefaultTexturePack; + this->m_selectedTexturePack = sDefaultTexturePack; sDefaultTexturePack->loadColourTable(); sDefaultTexturePack->loadStructureManager(); @@ -35,3 +25,14 @@ TexturePackRepository::TexturePackRepository(File file, Minecraft* mc) { this->m_unk2 = nullptr; this->m_unk12 = nullptr; } + +TexturePack* TexturePackRepository::getSelected() { + if (m_selectedTexturePack && m_selectedTexturePack->unk1() && m_selectedTexturePack->unk2()) + return m_selectedTexturePack; + return sDefaultTexturePack; +} + +// name guessed +bool TexturePackRepository::isUsingDefault() { + return getSelected() == sDefaultTexturePack; +} diff --git a/src/Minecraft.Client/net/minecraft/client/resources/TexturePackRepository.h b/src/Minecraft.Client/net/minecraft/client/resources/TexturePackRepository.h index d5ddce38..717a33e6 100644 --- a/src/Minecraft.Client/net/minecraft/client/resources/TexturePackRepository.h +++ b/src/Minecraft.Client/net/minecraft/client/resources/TexturePackRepository.h @@ -3,7 +3,9 @@ #include "cstdint" #include "java/io/File.h" #include "texturepack/DefaultTexturePack.h" +#include #include +#include class Minecraft; @@ -12,27 +14,27 @@ class TexturePackRepository { TexturePackRepository(File, Minecraft*); void addDebugPacks(); - bool getSelected(); + TexturePack* getSelected(); + bool isUsingDefault(); - static DefaultTexturePack* sDefaultTexturePack; + static TexturePack* sDefaultTexturePack; void* m_unk1; void* m_unk2; Minecraft* m_minecraft; File m_file; File m_file2; - std::vector* m_texturePacks; - void* m_unk80d; - void* m_unk88d; - void* m_unk96d; - std::unordered_map* m_texturePackMap; - void* m_unk8; - void* m_unk9; - void* m_unk10; - float m_unk11; - DefaultTexturePack* m_defaultTexturePack; + std::vector* m_texturePacks; + std::vector m_packs; + std::unordered_map m_texturePackMap; + TexturePack* m_selectedTexturePack; void* m_unk12; // unknown if this is meant to be here bool m_unk13; // unsigned char padding[0xA8]; }; + +static_assert(offsetof(TexturePackRepository, m_texturePacks) == 0x48, "Original pack list offset"); +static_assert(offsetof(TexturePackRepository, m_texturePackMap) == 0x68, "Original pack index offset"); +static_assert(offsetof(TexturePackRepository, m_selectedTexturePack) == 0x90, "Original selection offset"); +static_assert(sizeof(TexturePackRepository) == 0xa8, "Original repository layout"); diff --git a/src/Minecraft.Client/net/minecraft/client/resources/texturepack/AbstractTexturePack.cpp b/src/Minecraft.Client/net/minecraft/client/resources/texturepack/AbstractTexturePack.cpp index 4d22f785..9e5f4429 100644 --- a/src/Minecraft.Client/net/minecraft/client/resources/texturepack/AbstractTexturePack.cpp +++ b/src/Minecraft.Client/net/minecraft/client/resources/texturepack/AbstractTexturePack.cpp @@ -1,3 +1,118 @@ +#include "java/io/FileInputStream.h" +#include "net/minecraft/client/CMinecraftApp.h" +#include "net/minecraft/client/Minecraft.h" +#include "net/minecraft/client/color/ColourTable.h" +#include "net/minecraft/world/level/levelgen/structure/templatesystem/StructureManager.h" + #include "AbstractTexturePack.h" -void AbstractTexturePack::loadDefaultColourTable() {} +// name guessed +// NON_MATCHING | score: 55 (lower is better) +AbstractTexturePack::AbstractTexturePack(unsigned int id, File* file, const std::wstring& name, + TexturePack* pack) + : m_id(id), m_name(name), m_file(file), m_unk90(nullptr), m_unk98(0), m_unka0(nullptr), m_unka8(0), + m_parent(pack), m_colourTable(nullptr), m_structureManager(nullptr), m_unkd0(-1) { + // The original constructor leaves the field at 0xc8 untouched. +} +// name guessed +AbstractTexturePack::~AbstractTexturePack() = default; + +// name guessed +unsigned int AbstractTexturePack::getId() { + return m_id; +} +// name guessed +std::wstring AbstractTexturePack::unk8() { + return m_metadata1; +} +// name guessed +std::wstring AbstractTexturePack::unk9() { + return m_metadata3; +} +// name guessed +std::wstring AbstractTexturePack::unk10() { + return m_metadata4; +} +// name guessed +void AbstractTexturePack::loadIcon() {} +// name guessed +void AbstractTexturePack::unk28() {} +// name guessed +void AbstractTexturePack::unk29() {} +// name guessed +void AbstractTexturePack::unk30() {} + +// name guessed +void AbstractTexturePack::unk19() {} +// name guessed +void AbstractTexturePack::unk20() {} + +// name guessed +unsigned char* AbstractTexturePack::getIcon(int* size) { + if (!m_unk98 || !m_unk90) + loadIcon(); + *size = m_unk98; + return static_cast(m_unk90); +} + +// name guessed +unsigned char* AbstractTexturePack::getSecondaryIcon(int* size) { + if (!m_unka8 || !m_unka0) + unk28(); + *size = m_unka8; + return static_cast(m_unka0); +} + +// name guessed +ColourTable* AbstractTexturePack::getColourTable() { + return m_colourTable; +} +// name guessed +StructureManager* AbstractTexturePack::getStructureManager() { + return m_structureManager; +} +// name guessed +ArchiveFile* AbstractTexturePack::getArchive() { + return nullptr; +} + +[[noreturn]] void packLoadError(void*, const wchar_t*, + ...) asm("_ZN20CConsoleMinecraftApp14FatalLoadErrorEPKwz"); + +// name guessed +void AbstractTexturePack::loadColourTable() { + loadDefaultColourTable(); + loadHTMLColourTable(); +} + +// name guessed +// NON_MATCHING | score: 847 (lower is better) +void AbstractTexturePack::loadDefaultColourTable() { + File file(TexturePack::unk15(true).append(L"res/colours.col")); + if (!file.exists()) + packLoadError(nullptr, nullptr, 251); + const auto length = file.length(); + arrayWithLength buffer(static_cast(length), true); + FileInputStream input(file); + input.read(buffer, 0, static_cast(length)); + input.close(); + delete m_colourTable; + m_colourTable = new ColourTable(buffer.m_data, buffer.m_length); + delete[] buffer.m_data; +} + +// name guessed +void AbstractTexturePack::loadHTMLColourTable() { + if (CConsoleMinecraftApp::sInstance.hasArchiveFile(L"HTMLColours.col", false)) { + auto data = CConsoleMinecraftApp::sInstance.getArchiveFile(L"HTMLColours.col", false); + m_colourTable->read(data.m_data, data.m_length); + delete[] data.m_data; + } +} + +// name guessed +// NON_MATCHING | score: 100 (lower is better) +void AbstractTexturePack::loadStructureManager() { + delete m_structureManager; + m_structureManager = new StructureManager(Minecraft::GetInstance()->getFixerUpper()); +} diff --git a/src/Minecraft.Client/net/minecraft/client/resources/texturepack/AbstractTexturePack.h b/src/Minecraft.Client/net/minecraft/client/resources/texturepack/AbstractTexturePack.h index 436c3eed..66dca6ed 100644 --- a/src/Minecraft.Client/net/minecraft/client/resources/texturepack/AbstractTexturePack.h +++ b/src/Minecraft.Client/net/minecraft/client/resources/texturepack/AbstractTexturePack.h @@ -2,13 +2,67 @@ #include "java/io/File.h" #include "net/minecraft/client/resources/texturepack/TexturePack.h" +#include #include class AbstractTexturePack : public TexturePack { public: AbstractTexturePack(unsigned int, File* file, const std::wstring& name, TexturePack* pack); + ~AbstractTexturePack() override; void loadDefaultColourTable(); + void loadHTMLColourTable(); - char m_padding[0xC8]; + void unk4() override; + void unk5() override; + void unk6() override; + unsigned int getId() override; + std::wstring unk8() override; + std::wstring unk9() override; + std::wstring unk10() override; + void unk11() override; + void* unk14() override = 0; + void unk16() override; + void unk17() override; + void loadColourTable() override; + void loadStructureManager() override; + void unk18() override; + void unk19() override; + void unk20() override; + unsigned char* getIcon(int* size) override; + unsigned char* getSecondaryIcon(int* size) override; + void unk23() override; + void unk24() override; + ColourTable* getColourTable() override; + StructureManager* getStructureManager() override; + ArchiveFile* getArchive() override; + void unk26() override; + void unk27() override; + virtual void loadIcon(); + virtual void unk28(); + virtual void unk29(); + virtual void unk30(); + + unsigned int m_id; + std::wstring m_name; + File* m_file; + std::wstring m_metadata1; + std::wstring m_metadata2; + std::wstring m_metadata3; + std::wstring m_metadata4; + void* m_unk90; + int m_unk98; + void* m_unka0; + int m_unka8; + TexturePack* m_parent; + ColourTable* m_colourTable; + StructureManager* m_structureManager; + void* m_unkc8; + int m_unkd0; }; + +static_assert(offsetof(AbstractTexturePack, m_id) == 0xc, "Original base tail-padding reuse"); +static_assert(offsetof(AbstractTexturePack, m_file) == 0x28, "Original pack file offset"); +static_assert(offsetof(AbstractTexturePack, m_colourTable) == 0xb8, "Original colour table offset"); +static_assert(offsetof(AbstractTexturePack, m_structureManager) == 0xc0, "Original structure manager offset"); +static_assert(sizeof(AbstractTexturePack) == 0xd8, "Original abstract pack layout"); diff --git a/src/Minecraft.Client/net/minecraft/client/resources/texturepack/DefaultTexturePack.cpp b/src/Minecraft.Client/net/minecraft/client/resources/texturepack/DefaultTexturePack.cpp index a68c4b41..d5b2461f 100644 --- a/src/Minecraft.Client/net/minecraft/client/resources/texturepack/DefaultTexturePack.cpp +++ b/src/Minecraft.Client/net/minecraft/client/resources/texturepack/DefaultTexturePack.cpp @@ -1 +1,71 @@ +#include "net/minecraft/client/CMinecraftApp.h" +#include "net/minecraft/client/resources/L10N.h" +#include "net/minecraft/client/ui/StringIDs.h" + #include "DefaultTexturePack.h" + +// name guessed +bool DefaultTexturePack::unk1() { + return true; +} +// name guessed +bool DefaultTexturePack::unk2() { + return true; +} +// name guessed +bool DefaultTexturePack::hasAudio() { + return false; +} +// name guessed +bool DefaultTexturePack::unk3() { + return false; +} +// name guessed +bool DefaultTexturePack::unk12() { + return true; +} +// name guessed +void* DefaultTexturePack::unk14() { + return nullptr; +} + +// name guessed +// NON_MATCHING | score: 0 (lower is better) +DefaultTexturePack::DefaultTexturePack() + : AbstractTexturePack(0, nullptr, std::wstring(L10N::GetString(StringIDs::Minecraft)), nullptr) { + loadIcon(); + unk30(); + unk29(); + loadColourTable(); +} + +// name guessed +void DefaultTexturePack::loadIcon() { + if (CConsoleMinecraftApp::sInstance.hasArchiveFile(L"Graphics\\TexturePackIcon.png", false)) { + auto data = CConsoleMinecraftApp::sInstance.getArchiveFile(L"Graphics\\TexturePackIcon.png", false); + m_unk90 = data.m_data; + m_unk98 = data.m_length; + } +} + +// name guessed +void DefaultTexturePack::unk29() { + m_metadata3.assign(L"LOCALISE ME: The default look of Minecraft"); +} + +// name guessed +// NON_MATCHING | score: 405 (lower is better) +void DefaultTexturePack::unk30() { + m_metadata1.assign(L10N::GetString(StringIDs::Minecraft)); +} +// name guessed +std::wstring DefaultTexturePack::unk8() { + return std::wstring(L10N::GetString(StringIDs::Minecraft)); +} +// name guessed +std::wstring DefaultTexturePack::unk9() { + return std::wstring( + L10N::GetString(static_cast(StringIDs::TheClassicMinecraftTexturesIconsAndUserInterface))); +} +// name guessed +void DefaultTexturePack::unk19() {} diff --git a/src/Minecraft.Client/net/minecraft/client/resources/texturepack/DefaultTexturePack.h b/src/Minecraft.Client/net/minecraft/client/resources/texturepack/DefaultTexturePack.h index ada33989..2a417182 100644 --- a/src/Minecraft.Client/net/minecraft/client/resources/texturepack/DefaultTexturePack.h +++ b/src/Minecraft.Client/net/minecraft/client/resources/texturepack/DefaultTexturePack.h @@ -5,4 +5,17 @@ class DefaultTexturePack : public AbstractTexturePack { public: DefaultTexturePack(); + bool unk1() override; + bool unk2() override; + bool hasAudio() override; + bool unk3() override; + bool unk12() override; + void* unk14() override; + std::wstring unk8() override; + std::wstring unk9() override; + void loadIcon() override; + void unk29() override; + void unk30() override; + void unk18() override; + void unk19() override; }; diff --git a/src/Minecraft.Client/net/minecraft/client/resources/texturepack/TexturePack.cpp b/src/Minecraft.Client/net/minecraft/client/resources/texturepack/TexturePack.cpp index 4102a471..0efefb39 100644 --- a/src/Minecraft.Client/net/minecraft/client/resources/texturepack/TexturePack.cpp +++ b/src/Minecraft.Client/net/minecraft/client/resources/texturepack/TexturePack.cpp @@ -1,5 +1,29 @@ #include "net/minecraft/client/resources/texturepack/TexturePack.h" +// name guessed +TexturePack::TexturePack() : m_hasAudio(false) {} +// name guessed +// NON_MATCHING | score: 805 (lower is better) +TexturePack::~TexturePack() {} + +// name guessed +std::wstring TexturePack::unk13(const std::wstring& value) { + return value; +} +// name guessed +void* TexturePack::unk14() { + return nullptr; +} +// name guessed +std::wstring TexturePack::unk15(bool titleUpdate) { + std::wstring value; + if (titleUpdate) + value.assign(L"Common\\res\\TitleUpdate\\"); + else + value.assign(L"Common/"); + return value; +} + bool TexturePack::hasAudio() { return this->m_hasAudio; } diff --git a/src/Minecraft.Client/net/minecraft/client/resources/texturepack/TexturePack.h b/src/Minecraft.Client/net/minecraft/client/resources/texturepack/TexturePack.h index 206aaacd..57a6f5cf 100644 --- a/src/Minecraft.Client/net/minecraft/client/resources/texturepack/TexturePack.h +++ b/src/Minecraft.Client/net/minecraft/client/resources/texturepack/TexturePack.h @@ -1,30 +1,51 @@ #pragma once +#include + +class ArchiveFile; +class ColourTable; +class StructureManager; + class TexturePack { public: - virtual ~TexturePack() = default; - virtual void unk1(); - virtual void unk2(); + TexturePack(); + virtual ~TexturePack(); + virtual bool unk1() = 0; + virtual bool unk2() = 0; virtual bool hasAudio(); virtual void setHasAudio(bool hasAudio); - virtual void unk3(); + virtual bool unk3() = 0; virtual void loadData(); - virtual void unk4(); - virtual void unk5(); - virtual void unk6(); - virtual unsigned int getId(); - virtual void unk8(); - virtual void unk9(); - virtual void unk10(); - virtual void unk11(); - virtual void unk12(); - virtual void unk13(); - virtual void unk14(); - virtual void unk15(); - virtual void unk16(); - virtual void unk17(); - virtual void loadColourTable(); - virtual void loadStructureManager(); + virtual void unk4() = 0; + virtual void unk5() = 0; + virtual void unk6() = 0; + virtual unsigned int getId() = 0; + virtual std::wstring unk8() = 0; + virtual std::wstring unk9() = 0; + virtual std::wstring unk10() = 0; + virtual void unk11() = 0; + virtual bool unk12() = 0; + virtual std::wstring unk13(const std::wstring&); + virtual void* unk14(); + virtual std::wstring unk15(bool titleUpdate); + virtual void unk16() = 0; + virtual void unk17() = 0; + virtual void loadColourTable() = 0; + virtual void loadStructureManager() = 0; + /** Retain recovered slots while their full signatures remain unresolved. + */ + virtual void unk18() = 0; + virtual void unk19() = 0; + virtual void unk20() = 0; + virtual unsigned char* getIcon(int* size) = 0; + virtual unsigned char* getSecondaryIcon(int* size) = 0; + virtual void unk23() = 0; + virtual void unk24() = 0; + virtual ColourTable* getColourTable() = 0; + virtual StructureManager* getStructureManager() = 0; + virtual ArchiveFile* getArchive() = 0; // Original vtable offset 0x108. + virtual void unk26() = 0; + virtual void unk27() = 0; bool m_hasAudio; }; diff --git a/src/Minecraft.Client/net/minecraft/client/tutorial/Tutorial.cpp b/src/Minecraft.Client/net/minecraft/client/tutorial/Tutorial.cpp new file mode 100644 index 00000000..243c69c2 --- /dev/null +++ b/src/Minecraft.Client/net/minecraft/client/tutorial/Tutorial.cpp @@ -0,0 +1,368 @@ +#include "net/minecraft/client/tutorial/Tutorial.h" + +std::vector Tutorial::STATE_ORDER; // name guessed + +/** Appends the tutorial items in the order stored in the Switch executable. */ +void Tutorial::staticCtor() { + STATE_ORDER.push_back(1); + STATE_ORDER.push_back(2); + STATE_ORDER.push_back(3); + STATE_ORDER.push_back(4); + STATE_ORDER.push_back(5); + STATE_ORDER.push_back(6); + STATE_ORDER.push_back(7); + STATE_ORDER.push_back(9); + STATE_ORDER.push_back(10); + STATE_ORDER.push_back(11); + STATE_ORDER.push_back(12); + STATE_ORDER.push_back(13); + STATE_ORDER.push_back(14); + STATE_ORDER.push_back(15); + STATE_ORDER.push_back(16); + STATE_ORDER.push_back(17); + STATE_ORDER.push_back(18); + STATE_ORDER.push_back(19); + STATE_ORDER.push_back(43); + STATE_ORDER.push_back(44); + STATE_ORDER.push_back(45); + STATE_ORDER.push_back(46); + STATE_ORDER.push_back(47); + STATE_ORDER.push_back(48); + STATE_ORDER.push_back(49); + STATE_ORDER.push_back(50); + STATE_ORDER.push_back(51); + STATE_ORDER.push_back(52); + STATE_ORDER.push_back(53); + STATE_ORDER.push_back(54); + STATE_ORDER.push_back(55); + STATE_ORDER.push_back(56); + STATE_ORDER.push_back(57); + STATE_ORDER.push_back(58); + STATE_ORDER.push_back(59); + STATE_ORDER.push_back(60); + STATE_ORDER.push_back(61); + STATE_ORDER.push_back(63); + STATE_ORDER.push_back(64); + STATE_ORDER.push_back(65); + STATE_ORDER.push_back(66); + STATE_ORDER.push_back(67); + STATE_ORDER.push_back(68); + STATE_ORDER.push_back(70); + STATE_ORDER.push_back(69); + STATE_ORDER.push_back(71); + STATE_ORDER.push_back(72); + STATE_ORDER.push_back(73); + STATE_ORDER.push_back(74); + STATE_ORDER.push_back(75); + STATE_ORDER.push_back(76); + STATE_ORDER.push_back(77); + STATE_ORDER.push_back(78); + STATE_ORDER.push_back(79); + STATE_ORDER.push_back(80); + STATE_ORDER.push_back(81); + STATE_ORDER.push_back(82); + STATE_ORDER.push_back(83); + STATE_ORDER.push_back(84); + STATE_ORDER.push_back(85); + STATE_ORDER.push_back(86); + STATE_ORDER.push_back(87); + STATE_ORDER.push_back(88); + STATE_ORDER.push_back(89); + STATE_ORDER.push_back(90); + STATE_ORDER.push_back(91); + STATE_ORDER.push_back(92); + STATE_ORDER.push_back(93); + STATE_ORDER.push_back(94); + STATE_ORDER.push_back(95); + STATE_ORDER.push_back(96); + STATE_ORDER.push_back(97); + STATE_ORDER.push_back(99); + STATE_ORDER.push_back(100); + STATE_ORDER.push_back(101); + STATE_ORDER.push_back(102); + STATE_ORDER.push_back(103); + STATE_ORDER.push_back(105); + STATE_ORDER.push_back(104); + STATE_ORDER.push_back(106); + STATE_ORDER.push_back(107); + STATE_ORDER.push_back(108); + STATE_ORDER.push_back(109); + STATE_ORDER.push_back(110); + STATE_ORDER.push_back(111); + STATE_ORDER.push_back(112); + STATE_ORDER.push_back(113); + STATE_ORDER.push_back(114); + STATE_ORDER.push_back(115); + STATE_ORDER.push_back(116); + STATE_ORDER.push_back(117); + STATE_ORDER.push_back(118); + STATE_ORDER.push_back(119); + STATE_ORDER.push_back(120); + STATE_ORDER.push_back(121); + STATE_ORDER.push_back(122); + STATE_ORDER.push_back(123); + STATE_ORDER.push_back(124); + STATE_ORDER.push_back(125); + STATE_ORDER.push_back(126); + STATE_ORDER.push_back(127); + STATE_ORDER.push_back(128); + STATE_ORDER.push_back(129); + STATE_ORDER.push_back(130); + STATE_ORDER.push_back(131); + STATE_ORDER.push_back(132); + STATE_ORDER.push_back(133); + STATE_ORDER.push_back(134); + STATE_ORDER.push_back(135); + STATE_ORDER.push_back(136); + STATE_ORDER.push_back(137); + STATE_ORDER.push_back(138); + STATE_ORDER.push_back(139); + STATE_ORDER.push_back(140); + STATE_ORDER.push_back(141); + STATE_ORDER.push_back(142); + STATE_ORDER.push_back(143); + STATE_ORDER.push_back(144); + STATE_ORDER.push_back(145); + STATE_ORDER.push_back(146); + STATE_ORDER.push_back(162); + STATE_ORDER.push_back(163); + STATE_ORDER.push_back(164); + STATE_ORDER.push_back(165); + STATE_ORDER.push_back(166); + STATE_ORDER.push_back(167); + STATE_ORDER.push_back(168); + STATE_ORDER.push_back(169); + STATE_ORDER.push_back(170); + STATE_ORDER.push_back(171); + STATE_ORDER.push_back(172); + STATE_ORDER.push_back(173); + STATE_ORDER.push_back(174); + STATE_ORDER.push_back(175); + STATE_ORDER.push_back(176); + STATE_ORDER.push_back(177); + STATE_ORDER.push_back(178); + STATE_ORDER.push_back(179); + STATE_ORDER.push_back(180); + STATE_ORDER.push_back(181); + STATE_ORDER.push_back(182); + STATE_ORDER.push_back(183); + STATE_ORDER.push_back(184); + STATE_ORDER.push_back(185); + STATE_ORDER.push_back(210); + STATE_ORDER.push_back(211); + STATE_ORDER.push_back(212); + STATE_ORDER.push_back(213); + STATE_ORDER.push_back(214); + STATE_ORDER.push_back(215); + STATE_ORDER.push_back(216); + STATE_ORDER.push_back(217); + STATE_ORDER.push_back(218); + STATE_ORDER.push_back(219); + STATE_ORDER.push_back(220); + STATE_ORDER.push_back(221); + STATE_ORDER.push_back(222); + STATE_ORDER.push_back(223); + STATE_ORDER.push_back(224); + STATE_ORDER.push_back(225); + STATE_ORDER.push_back(226); + STATE_ORDER.push_back(227); + STATE_ORDER.push_back(228); + STATE_ORDER.push_back(229); + STATE_ORDER.push_back(230); + STATE_ORDER.push_back(231); + STATE_ORDER.push_back(232); + STATE_ORDER.push_back(233); + STATE_ORDER.push_back(234); + STATE_ORDER.push_back(235); + STATE_ORDER.push_back(236); + STATE_ORDER.push_back(237); + STATE_ORDER.push_back(238); + STATE_ORDER.push_back(239); + STATE_ORDER.push_back(240); + STATE_ORDER.push_back(241); + STATE_ORDER.push_back(242); + STATE_ORDER.push_back(243); + STATE_ORDER.push_back(244); + STATE_ORDER.push_back(245); + STATE_ORDER.push_back(246); + STATE_ORDER.push_back(247); + STATE_ORDER.push_back(248); + STATE_ORDER.push_back(249); + STATE_ORDER.push_back(250); + STATE_ORDER.push_back(251); + STATE_ORDER.push_back(252); + STATE_ORDER.push_back(253); + STATE_ORDER.push_back(254); + STATE_ORDER.push_back(255); + STATE_ORDER.push_back(256); + STATE_ORDER.push_back(257); + STATE_ORDER.push_back(258); + STATE_ORDER.push_back(259); + STATE_ORDER.push_back(260); + STATE_ORDER.push_back(261); + STATE_ORDER.push_back(262); + STATE_ORDER.push_back(263); + STATE_ORDER.push_back(264); + STATE_ORDER.push_back(265); + STATE_ORDER.push_back(266); + STATE_ORDER.push_back(267); + STATE_ORDER.push_back(268); + STATE_ORDER.push_back(269); + STATE_ORDER.push_back(270); + STATE_ORDER.push_back(271); + STATE_ORDER.push_back(272); + STATE_ORDER.push_back(273); + STATE_ORDER.push_back(274); + STATE_ORDER.push_back(275); + STATE_ORDER.push_back(276); + STATE_ORDER.push_back(277); + STATE_ORDER.push_back(278); + STATE_ORDER.push_back(279); + STATE_ORDER.push_back(280); + STATE_ORDER.push_back(281); + STATE_ORDER.push_back(282); + STATE_ORDER.push_back(283); + STATE_ORDER.push_back(284); + STATE_ORDER.push_back(285); + STATE_ORDER.push_back(286); + STATE_ORDER.push_back(287); + STATE_ORDER.push_back(288); + STATE_ORDER.push_back(289); + STATE_ORDER.push_back(290); + STATE_ORDER.push_back(291); + STATE_ORDER.push_back(292); + STATE_ORDER.push_back(293); + STATE_ORDER.push_back(294); + STATE_ORDER.push_back(295); + STATE_ORDER.push_back(365); + STATE_ORDER.push_back(366); + STATE_ORDER.push_back(367); + STATE_ORDER.push_back(368); + STATE_ORDER.push_back(369); + STATE_ORDER.push_back(370); + STATE_ORDER.push_back(371); + STATE_ORDER.push_back(372); + STATE_ORDER.push_back(373); + STATE_ORDER.push_back(374); + STATE_ORDER.push_back(375); + STATE_ORDER.push_back(376); + STATE_ORDER.push_back(377); + STATE_ORDER.push_back(20); + STATE_ORDER.push_back(21); + STATE_ORDER.push_back(22); + STATE_ORDER.push_back(23); + STATE_ORDER.push_back(24); + STATE_ORDER.push_back(25); + STATE_ORDER.push_back(26); + STATE_ORDER.push_back(27); + STATE_ORDER.push_back(28); + STATE_ORDER.push_back(30); + STATE_ORDER.push_back(32); + STATE_ORDER.push_back(186); + STATE_ORDER.push_back(188); + STATE_ORDER.push_back(189); + STATE_ORDER.push_back(190); + STATE_ORDER.push_back(296); + STATE_ORDER.push_back(297); + STATE_ORDER.push_back(298); + STATE_ORDER.push_back(299); + STATE_ORDER.push_back(300); + STATE_ORDER.push_back(301); + STATE_ORDER.push_back(302); + STATE_ORDER.push_back(303); + STATE_ORDER.push_back(304); + STATE_ORDER.push_back(305); + STATE_ORDER.push_back(34); + STATE_ORDER.push_back(36); + STATE_ORDER.push_back(29); + STATE_ORDER.push_back(31); + STATE_ORDER.push_back(33); + STATE_ORDER.push_back(35); + STATE_ORDER.push_back(187); + STATE_ORDER.push_back(8); + STATE_ORDER.push_back(191); + STATE_ORDER.push_back(192); + STATE_ORDER.push_back(193); + STATE_ORDER.push_back(307); + STATE_ORDER.push_back(308); + STATE_ORDER.push_back(309); + STATE_ORDER.push_back(310); + STATE_ORDER.push_back(311); + STATE_ORDER.push_back(306); + STATE_ORDER.push_back(318); + STATE_ORDER.push_back(319); + STATE_ORDER.push_back(320); + STATE_ORDER.push_back(321); + STATE_ORDER.push_back(322); + STATE_ORDER.push_back(323); + STATE_ORDER.push_back(324); + STATE_ORDER.push_back(325); + STATE_ORDER.push_back(328); + STATE_ORDER.push_back(331); + STATE_ORDER.push_back(332); + STATE_ORDER.push_back(333); + STATE_ORDER.push_back(334); + STATE_ORDER.push_back(335); + STATE_ORDER.push_back(336); + STATE_ORDER.push_back(337); + STATE_ORDER.push_back(338); + STATE_ORDER.push_back(339); + STATE_ORDER.push_back(340); + STATE_ORDER.push_back(194); + STATE_ORDER.push_back(98); + STATE_ORDER.push_back(62); + STATE_ORDER.push_back(312); + STATE_ORDER.push_back(313); + STATE_ORDER.push_back(314); + STATE_ORDER.push_back(315); + STATE_ORDER.push_back(316); + STATE_ORDER.push_back(317); + STATE_ORDER.push_back(147); + STATE_ORDER.push_back(148); + STATE_ORDER.push_back(149); + STATE_ORDER.push_back(150); + STATE_ORDER.push_back(151); + STATE_ORDER.push_back(195); + STATE_ORDER.push_back(196); + STATE_ORDER.push_back(197); + STATE_ORDER.push_back(198); + STATE_ORDER.push_back(38); + STATE_ORDER.push_back(39); + STATE_ORDER.push_back(152); + STATE_ORDER.push_back(153); + STATE_ORDER.push_back(154); + STATE_ORDER.push_back(155); + STATE_ORDER.push_back(156); + STATE_ORDER.push_back(157); + STATE_ORDER.push_back(158); + STATE_ORDER.push_back(159); + STATE_ORDER.push_back(160); + STATE_ORDER.push_back(161); + STATE_ORDER.push_back(199); + STATE_ORDER.push_back(200); + STATE_ORDER.push_back(201); + STATE_ORDER.push_back(202); + STATE_ORDER.push_back(203); + STATE_ORDER.push_back(204); + STATE_ORDER.push_back(205); + STATE_ORDER.push_back(206); + STATE_ORDER.push_back(207); + STATE_ORDER.push_back(208); + STATE_ORDER.push_back(209); + STATE_ORDER.push_back(348); + STATE_ORDER.push_back(349); + STATE_ORDER.push_back(350); + STATE_ORDER.push_back(351); + STATE_ORDER.push_back(352); + STATE_ORDER.push_back(353); + STATE_ORDER.push_back(354); + STATE_ORDER.push_back(355); + STATE_ORDER.push_back(356); + STATE_ORDER.push_back(357); + STATE_ORDER.push_back(358); + STATE_ORDER.push_back(359); + STATE_ORDER.push_back(360); + STATE_ORDER.push_back(361); + STATE_ORDER.push_back(362); + STATE_ORDER.push_back(363); +} diff --git a/src/Minecraft.Client/net/minecraft/client/tutorial/Tutorial.h b/src/Minecraft.Client/net/minecraft/client/tutorial/Tutorial.h index f87bda78..3c2c6233 100644 --- a/src/Minecraft.Client/net/minecraft/client/tutorial/Tutorial.h +++ b/src/Minecraft.Client/net/minecraft/client/tutorial/Tutorial.h @@ -1,5 +1,7 @@ #pragma once +#include + enum eTutorial_GameMode {}; enum eTutorial_State {}; @@ -8,6 +10,7 @@ class UIScene; class Tutorial { public: static void staticCtor(); + static std::vector STATE_ORDER; void showTutorialPopup(bool); diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/UILayer.h b/src/Minecraft.Client/net/minecraft/client/ui/scene/UILayer.h index b55035b6..68331f7a 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/UILayer.h +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/UILayer.h @@ -9,4 +9,5 @@ class UILayer { void getRenderDimension(int& width, int& height); void showComponent(int, EUIScene, bool); void addComponent(int, EUIScene, void*); + void removeComponent(EUIScene); }; diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl.cpp b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl.cpp index d33ac975..ba18d06a 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl.cpp +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl.cpp @@ -1,6 +1,7 @@ #include "net/minecraft/client/ui/scene/control/UIControl.h" #include "fui/fuiRenderNode.h" +#include "fui/node/FJ_FuiNodeStage.h" UIControl::UIControl() { this->m_parentUiScene = nullptr; @@ -12,6 +13,8 @@ UIControl::UIControl() { this->m_fuiRenderNode = nullptr; } +UIControl::~UIControl() {} + bool UIControl::setupControl(UIScene* parentUIScene, fuiRenderNode* renderNode, const std::string& name) { this->m_parentUiScene = parentUIScene; this->m_name = name; @@ -50,3 +53,58 @@ void UIControl::setFocus(bool) {} bool UIControl::hasFocus() { return false; } + +// name guessed +fuiRenderNode* UIControl::getFuiRenderNode() { + return m_fuiRenderNode; +} + +float UIControl::getXPos() { + return m_posX; +} + +float UIControl::getYPos() { + return m_posY; +} + +// name guessed +float UIControl::getWidth() { + return m_width; +} + +// name guessed +float UIControl::getHeight() { + return m_height; +} + +// name guessed +void UIControl::setWidth(float width) { + if (m_fuiRenderNode) { + m_fuiRenderNode->setWidth(width); + m_width = width; + } +} + +void UIControl::setVisible(bool visible) { + if (m_fuiRenderNode) { + if (m_fuiRenderNode->m_fuiNodeStage) + m_fuiRenderNode->m_fuiNodeStage->setVisible(visible); + else + m_fuiRenderNode->setVisibility(visible); + m_visible = visible; + } +} + +// name guessed +// NON_MATCHING | score: 5 (lower is better) +bool UIControl::getVisible() { + bool visible = false; + if (m_fuiRenderNode) + visible = m_fuiRenderNode->isVisible(); + m_visible = visible; + return visible; +} + +void UIControl::removeUINodeRef() { + m_fuiRenderNode = nullptr; +} diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl.h b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl.h index 1696831c..39d051fc 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl.h +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl.h @@ -27,8 +27,11 @@ class UIControl { fuiRenderNode* getFuiRenderNode(); void setSettedUp(int val) { this->m_settedUp = val; } void setVisible(bool); + bool getVisible(); + void removeUINodeRef(); float getWidth(); float getHeight(); + void setWidth(float); float getXPos(); float getYPos(); @@ -47,3 +50,5 @@ class UIControl { bool m_visible; bool m_boolIdk2; }; + +static_assert(sizeof(UIControl) == 0x58, "UIControl Switch layout"); diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Button.cpp b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Button.cpp index 9bc45345..5082f202 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Button.cpp +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Button.cpp @@ -33,3 +33,13 @@ void UIControl_Button::setFocus(bool focus) { this->m_fuiRenderNode->m_fuiNodeStage->asFJ_Button()->ChangeState(focus ? 1 : 2); } } + +void UIControl_Button::setEnable(bool enabled, bool updateNow) { + if (enabled != m_enabled) { + m_enabled = enabled; + if (updateNow) + m_fuiRenderNode->m_fuiNodeStage->asFJ_Button()->EnableButton(enabled); + else + m_couldBeEnabled = true; + } +} diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Button.h b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Button.h index 42c4d415..539bbfc7 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Button.h +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Button.h @@ -20,3 +20,5 @@ class UIControl_Button : public UIControl_Base { bool m_couldBeEnabled = 0; bool m_enabled; }; + +static_assert(sizeof(UIControl_Button) == 0x70, "UIControl_Button Switch layout"); diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_ButtonList.cpp b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_ButtonList.cpp index e7b48a0e..30e4b953 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_ButtonList.cpp +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_ButtonList.cpp @@ -1,3 +1,9 @@ #include "net/minecraft/client/ui/scene/control/UIControl_ButtonList.h" UIControl_ButtonList::UIControl_ButtonList() : UIControl_List() {} + +// name guessed +bool UIControl_ButtonList::setupControl(UIScene* scene, fuiRenderNode* node, const std::string& name) { + setSettedUp(22); + return UIControl_List::setupControl(scene, node, name); +} diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_ButtonList.h b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_ButtonList.h index 1262f1a5..d07a01b1 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_ButtonList.h +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_ButtonList.h @@ -8,5 +8,5 @@ class UIControl_ButtonList : public UIControl_List { UIControl_ButtonList(); void addItem(const std::wstring&, int); - bool setupControl(UIScene*, fuiRenderNode*, const std::string&); + bool setupControl(UIScene*, fuiRenderNode*, const std::string&) override; }; diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Cursor.cpp b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Cursor.cpp new file mode 100644 index 00000000..214db41a --- /dev/null +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Cursor.cpp @@ -0,0 +1,9 @@ +#include "net/minecraft/client/ui/scene/control/UIControl_Cursor.h" + +UIControl_Cursor::UIControl_Cursor() {} + +// name guessed +bool UIControl_Cursor::setupControl(UIScene* scene, fuiRenderNode* node, const std::string& name) { + setSettedUp(3); + return UIControl_Base::setupControl(scene, node, name); +} diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Cursor.h b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Cursor.h index 3b831790..8e6f5b5a 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Cursor.h +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Cursor.h @@ -4,5 +4,9 @@ class UIControl_Cursor : public UIControl_Base { public: - bool setupControl(UIScene*, fuiRenderNode*, const std::string&); + UIControl_Cursor(); + + bool setupControl(UIScene*, fuiRenderNode*, const std::string&) override; }; + +static_assert(sizeof(UIControl_Cursor) == 0x68, "UIControl_Cursor Switch layout"); diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Label.cpp b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Label.cpp new file mode 100644 index 00000000..196b58ef --- /dev/null +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Label.cpp @@ -0,0 +1,16 @@ +#include "net/minecraft/client/ui/scene/control/UIControl_Label.h" + +UIControl_Label::UIControl_Label() { + m_byte68 = true; +} + +bool UIControl_Label::setupControl(UIScene* scene, fuiRenderNode* node, const std::string& name) { + setSettedUp(8); + return UIControl_Base::setupControl(scene, node, name); +} + +void UIControl_Label::ReInit() { + UIControl::ReInit(); + if (m_byte68) + init(m_uiString); +} diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Label.h b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Label.h index a138a0d3..51842b7a 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Label.h +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Label.h @@ -10,6 +10,9 @@ class UIControl_Label : public UIControl_Base { void init(UIString); bool setupControl(UIScene*, fuiRenderNode*, const std::string&) override; + void ReInit() override; bool m_byte68; }; + +static_assert(sizeof(UIControl_Label) == 0x70, "UIControl_Label Switch layout"); diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_List.cpp b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_List.cpp index 0bad6ae8..7ed27b69 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_List.cpp +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_List.cpp @@ -2,7 +2,12 @@ UIControl_List::UIControl_List() : UIControl_Base() {} -// NON_MATCHING: idk, the for loop is constructed weirdly +// name guessed +bool UIControl_List::setupControl(UIScene* scene, fuiRenderNode* node, const std::string& name) { + return UIControl_Base::setupControl(scene, node, name); +} + +// NON_MATCHING | score: 1185 (lower is better) UIControl_List::~UIControl_List() { for (GenericPendingUpdate* update : m_genericPendingUpdates) { delete update; diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_List.h b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_List.h index b4b3f3a2..1ffa30ed 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_List.h +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_List.h @@ -16,6 +16,11 @@ class UIControl_List : public UIControl_Base { UIControl_List(); ~UIControl_List(); + bool setupControl(UIScene*, fuiRenderNode*, const std::string&) override; + void UpdateControl() override; + void tick() override; + void ReInit() override; + void addElement(eUIControlType, int); void init(int); void setCurrentSelection(int, bool, bool); diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_MultiList.cpp b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_MultiList.cpp new file mode 100644 index 00000000..5f43b959 --- /dev/null +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_MultiList.cpp @@ -0,0 +1,9 @@ +#include "net/minecraft/client/ui/scene/control/UIControl_MultiList.h" + +UIControl_MultiList::UIControl_MultiList() {} + +// name guessed +bool UIControl_MultiList::setupControl(UIScene* scene, fuiRenderNode* node, const std::string& name) { + setSettedUp(28); + return UIControl_List::setupControl(scene, node, name); +} diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_MultiList.h b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_MultiList.h index 53f75595..dfc3deda 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_MultiList.h +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_MultiList.h @@ -4,6 +4,13 @@ class UIControl_MultiList : public UIControl_List { public: + UIControl_MultiList(); + + bool setupControl(UIScene*, fuiRenderNode*, const std::string&) override; + void setAllPossibleLabels(int, uint, wchar_t* [256]) override; + void AddNewSlider(const std::wstring& text, int id, int minValue, int maxValue, int defaultVal, bool unk, int incr, int incr2); }; + +static_assert(sizeof(UIControl_MultiList) == 0xf0, "UIControl_MultiList Switch layout"); diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_SlotList.cpp b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_SlotList.cpp new file mode 100644 index 00000000..b9dbb0be --- /dev/null +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_SlotList.cpp @@ -0,0 +1,19 @@ +#include "net/minecraft/client/ui/scene/control/UIControl_SlotList.h" + +UIControl_SlotList::UIControl_SlotList() { + m_dword68 = -1; +} + +// name guessed +bool UIControl_SlotList::setupControl(UIScene* scene, fuiRenderNode* node, const std::string& name) { + setSettedUp(16); + bool found = UIControl_Base::setupControl(scene, node, name); + m_dword68 = 0; + return found; +} + +// name guessed +void UIControl_SlotList::ReInit() { + UIControl::ReInit(); + m_dword68 = -1; +} diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_SlotList.h b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_SlotList.h index 01e7a2fb..69754e2c 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_SlotList.h +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_SlotList.h @@ -4,8 +4,14 @@ class UIControl_SlotList : public UIControl_Base { public: + UIControl_SlotList(); + bool setupControl(UIScene*, fuiRenderNode*, const std::string&) override; + void ReInit() override; + void setFocus(bool) override; void addSlots(uint id, int count); int m_dword68; }; + +static_assert(sizeof(UIControl_SlotList) == 0x70, "UIControl_SlotList Switch layout"); diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Touch.cpp b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Touch.cpp index d72ebfbc..d7bfac49 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Touch.cpp +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Touch.cpp @@ -1,5 +1,8 @@ #include "net/minecraft/client/ui/scene/control/UIControl_Touch.h" +UIControl_Touch::UIControl_Touch() {} + +// name guessed bool UIControl_Touch::setupControl(UIScene* scene, fuiRenderNode* node, const std::string& name) { this->setSettedUp(20); return UIControl_Base::setupControl(scene, node, name); diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Touch.h b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Touch.h index f5894243..adcecd2c 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Touch.h +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/control/UIControl_Touch.h @@ -4,6 +4,7 @@ class UIControl_Touch : public UIControl_Base { public: + UIControl_Touch(); void init(int); bool setupControl(UIScene* scene, fuiRenderNode* node, const std::string& name) override; diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/scenes/UIScene_MainMenu.cpp b/src/Minecraft.Client/net/minecraft/client/ui/scene/scenes/UIScene_MainMenu.cpp index d5b1b0da..ae45a1f6 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/scenes/UIScene_MainMenu.cpp +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/scenes/UIScene_MainMenu.cpp @@ -1,3 +1,5 @@ +#include + #include "NX/Render/RendererCore.h" #include "UIScene_MainMenu.h" #include "fui/fuiFile.h" @@ -140,9 +142,7 @@ void UIScene_MainMenu::updateComponents() { this->m_uiLayer->showComponent(this->m_padId, EUIComponent_Logo, true); } -// NON_MATCHING | Score: 4720 (lower is better) -// Dunno what inWorldMenu is, and it's missing the atomic bullshit that comes at the bottom which isn't even -// present on Wii U +// NON_MATCHING | score: 4720 (lower is better) void UIScene_MainMenu::tick() { UIScene::tick(); if (ConsoleUIController::sCurrentScene != EUIScene_HowToPlay @@ -212,3 +212,24 @@ void UIScene_MainMenu::customDrawSplash(fuiRect* rect) { bool UIScene_MainMenu::hasFocus(int i) { return this->m_focusRelated; } + +// 0x71005d9034: remove both components before destroying controls and UIScene. +UIScene_MainMenu::~UIScene_MainMenu() { + m_uiLayer->removeComponent(EUIComponent_Panorama); + m_uiLayer->removeComponent(EUIComponent_Logo); +} + +// 0x71005d9574, virtual slot 7 of the original main-menu vtable. +// name guessed +std::wstring UIScene_MainMenu::getMoviePath() { + return L"MainMenu"; +} + +// 0x71006655e8, virtual slot 11 of the original main-menu vtable. +// name guessed +EUIScene UIScene_MainMenu::getSceneType() { + return EUIScene_MainMenu; +} + +static_assert(!std::is_abstract::value, + "The original main-menu scene must be instantiable"); diff --git a/src/Minecraft.Client/net/minecraft/client/ui/scene/scenes/UIScene_MainMenu.h b/src/Minecraft.Client/net/minecraft/client/ui/scene/scenes/UIScene_MainMenu.h index 7c1bf2be..7401866f 100644 --- a/src/Minecraft.Client/net/minecraft/client/ui/scene/scenes/UIScene_MainMenu.h +++ b/src/Minecraft.Client/net/minecraft/client/ui/scene/scenes/UIScene_MainMenu.h @@ -8,10 +8,17 @@ class UIScene_MainMenu : public UIScene { public: UIScene_MainMenu(int a1, void* a2, UILayer* layer); + ~UIScene_MainMenu() override; + std::wstring getMoviePath() override; + EUIScene getSceneType() override; + bool mapElementsAndNames() override; void handleUnlockFullVersion() override; void customDraw(const char*, fuiRect*) override; void handleInput(int, int, bool, bool, bool, bool&) override; + void handlePress(int, int) override; + void handleGainFocus(bool) override; + void updateTooltips() override; bool hasFocus(int) override; void handleReload() override; void updateComponents() override; diff --git a/src/Minecraft.Client/net/minecraft/core/BlockPos.h b/src/Minecraft.Client/net/minecraft/core/BlockPos.h index 7a3aacad..dcbca8ba 100644 --- a/src/Minecraft.Client/net/minecraft/core/BlockPos.h +++ b/src/Minecraft.Client/net/minecraft/core/BlockPos.h @@ -23,9 +23,12 @@ class BlockPos : public Vec3i { static BlockPosIterator* between(const BlockPos&, const BlockPos&); bool equals(const BlockPos& pos) const; + bool operator!=(const BlockPos& pos) const; bool equals(const BlockPos* pos) const; BlockPos offset(int x, int y, int z) const; + BlockPos offset(double x, double y, double z) const; + BlockPos offset(const Vec3i&) const; BlockPos relative(const Direction*) const; BlockPos relative(const Direction*, int) const; @@ -44,7 +47,7 @@ class BlockPos : public Vec3i { BlockPos east(int) const; long long compressBlockPos() const; - void decompressBlockPos(long long); + static BlockPos decompressBlockPos(long long); }; ASSERT_SIZEOF(BlockPos, 0xC) diff --git a/src/Minecraft.Client/net/minecraft/core/Direction.h b/src/Minecraft.Client/net/minecraft/core/Direction.h index 7f2dc9de..cc7a77e7 100644 --- a/src/Minecraft.Client/net/minecraft/core/Direction.h +++ b/src/Minecraft.Client/net/minecraft/core/Direction.h @@ -1,6 +1,7 @@ #pragma once #include "net/minecraft/core/StringRepresentable.h" +#include "net/minecraft/world/ArrayWithLength.h" #include "net/minecraft/world/level/block/state/properties/AbstractProperty.h" #include #include @@ -20,6 +21,7 @@ class Direction : public StringRepresentable { bool apply(const Direction*) const override; const Direction* getRandomDirection(Random&); + arrayWithLength iterator(); }; class AxisDirection { public: @@ -44,6 +46,11 @@ class Direction : public StringRepresentable { std::wstring toString() const override; std::wstring getSerializedName() const override; + + private: + std::wstring m_name; + Plane* m_plane; + int m_id; }; static const Direction* DOWN; @@ -62,6 +69,7 @@ class Direction : public StringRepresentable { static void staticCtor(); static const Direction* from3DDataValue(int value); + static const Direction* from2DDataValue(int value); Direction(int, int, int, const std::wstring&, Direction::AxisDirection*, Direction::Axis*, Vec3i*, unsigned char); @@ -75,6 +83,8 @@ class Direction : public StringRepresentable { int get2DDataValue() const; Axis* getAxis() const; + Vec3i getNormal() const; + AxisDirection* getAxisDirection() const; std::wstring getName() const; @@ -93,3 +103,6 @@ class Direction : public StringRepresentable { int m_y; int m_z; }; + +static_assert(sizeof(Direction::Axis) == 0x38, "Direction::Axis Switch layout"); +static_assert(sizeof(Direction) == 0x58, "Direction Switch layout"); diff --git a/src/Minecraft.Client/net/minecraft/core/NonNullList.h b/src/Minecraft.Client/net/minecraft/core/NonNullList.h index 06262f7e..13bca0bd 100644 --- a/src/Minecraft.Client/net/minecraft/core/NonNullList.h +++ b/src/Minecraft.Client/net/minecraft/core/NonNullList.h @@ -5,7 +5,38 @@ template class NonNullList : arrayWithLength { public: - static NonNullList withSize(int, const T&); + NonNullList() = default; + + /** Copies are views of the same array. The owner must delete the backing data; + * destroying a view only releases its default value, as in the executable. + */ + static NonNullList withSize(int size, const T& defaultValue) { + NonNullList list; + if (size > 0) { + list.m_data = new T[size]; + list.m_length = size; + for (unsigned int i = 0; i < list.m_length; ++i) + list.m_data[i] = defaultValue; + } + list.m_baseNotNull = defaultValue; + return list; + } + + unsigned int size() const { return this->m_length; } + T& operator[](unsigned int index) { return this->m_data[index]; } + const T& operator[](unsigned int index) const { return this->m_data[index]; } + void set(unsigned int index, const T& value) { this->m_data[index] = value; } + + void clear() { + for (unsigned int i = 0; i < size(); ++i) + set(i, m_baseNotNull); + } + + void deleteData() { + delete[] this->m_data; + this->m_data = nullptr; + this->m_length = 0; + } T m_baseNotNull; // idk if this should be not_null_ptr by default or specified in template, so decided it // not to be for a while diff --git a/src/Minecraft.Client/net/minecraft/core/System.h b/src/Minecraft.Client/net/minecraft/core/System.h index fca8e4c7..295829af 100644 --- a/src/Minecraft.Client/net/minecraft/core/System.h +++ b/src/Minecraft.Client/net/minecraft/core/System.h @@ -1,5 +1,8 @@ #pragma once +#include +#include + #include "net/minecraft/world/ArrayWithLength.h" #include "net/minecraft/world/level/biome/Biome.h" #include "nn/os/os_MutexTypes.h" @@ -12,7 +15,8 @@ class Node; // TODO: Find locations void InitializeCriticalSection(nn::os::MutexType* mutexType); void InitializeCriticalSectionAndSpinCount(nn::os::MutexType* mutexType, unsigned long spinCount); -long InterlockedCompareExchangeRelease(volatile long*, long, long); +void DeleteCriticalSection(nn::os::MutexType* mutexType); +std::intptr_t InterlockedCompareExchangeRelease(volatile std::intptr_t*, std::intptr_t, std::intptr_t); template const std::wstring _toString(T type) { std::wstringstream ss; diff --git a/src/Minecraft.Client/net/minecraft/core/Vec3i.h b/src/Minecraft.Client/net/minecraft/core/Vec3i.h index 5b383dd9..ca111e86 100644 --- a/src/Minecraft.Client/net/minecraft/core/Vec3i.h +++ b/src/Minecraft.Client/net/minecraft/core/Vec3i.h @@ -9,7 +9,9 @@ class Vec3i { int getX() const; int getY() const; int getZ() const; + Vec3i multiply(int) const; double distSqr(const Vec3i&) const; + double distSqr(double x, double y, double z) const; int m_x; int m_y; diff --git a/src/Minecraft.Client/net/minecraft/network/Connection.cpp b/src/Minecraft.Client/net/minecraft/network/Connection.cpp index 44da9ef9..1cda4cd7 100644 --- a/src/Minecraft.Client/net/minecraft/network/Connection.cpp +++ b/src/Minecraft.Client/net/minecraft/network/Connection.cpp @@ -52,16 +52,16 @@ void Connection::_init() { Connection::~Connection() { m_isRunning = false; - nn::os::FinalizeMutex(&m_isRunningMutex); + DeleteCriticalSection(&m_isRunningMutex); if (m_dataInputStream) m_dataInputStream->close(); m_runReadThread->WaitForCompletion(0xFFFFFFFF); m_runWriteThread->WaitForCompletion(0xFFFFFFFF); - nn::os::FinalizeMutex(&m_outgoingMutex); - nn::os::FinalizeMutex(&m_countMutex); - nn::os::FinalizeMutex(&m_incomingMutex); + DeleteCriticalSection(&m_outgoingMutex); + DeleteCriticalSection(&m_countMutex); + DeleteCriticalSection(&m_incomingMutex); delete m_c4JEventImpl1; delete m_c4JEventImpl2; @@ -155,8 +155,7 @@ int Connection::runRead(void* conn) { return 0; } -// NON_MATCHING: i've improved match within PULL_URL, it could be that it's just illusional improvement (as -// those are if and while hell) +// NON_MATCHING | score: 570 (lower is better) int Connection::runWrite(void* conn) { Connection* connection = (Connection*)conn; ShutdownManager::HasStarted(ShutdownManager::EThreadId::_9); diff --git a/src/Minecraft.Client/net/minecraft/network/Connection.h b/src/Minecraft.Client/net/minecraft/network/Connection.h index fb47fcb1..4cdd82ce 100644 --- a/src/Minecraft.Client/net/minecraft/network/Connection.h +++ b/src/Minecraft.Client/net/minecraft/network/Connection.h @@ -32,7 +32,7 @@ class Connection { static int runWrite(void*); void setListener(PacketListener*); void send(std::shared_ptr); - void queueSend(std::__1::shared_ptr); + void queueSend(std::shared_ptr); bool writeTick(); void flush(); bool readTick(); diff --git a/src/Minecraft.Client/net/minecraft/network/protocol/Packet.cpp b/src/Minecraft.Client/net/minecraft/network/protocol/Packet.cpp index c79e2aa2..3e67c81f 100644 --- a/src/Minecraft.Client/net/minecraft/network/protocol/Packet.cpp +++ b/src/Minecraft.Client/net/minecraft/network/protocol/Packet.cpp @@ -1,5 +1,7 @@ #include "net/minecraft/network/protocol/Packet.h" +#include "net/minecraft/core/System.h" + #import "game/BlockRegionUpdatePacket.h" #import "game/ChunkVisibilityAreaPacket.h" #import "game/ChunkVisibilityPacket.h" @@ -122,38 +124,9 @@ #import "game/VotePacket.h" #import "game/XZPacket.h" -#include "net/minecraft/core/System.h" - #include -Packet::Packet() { - m_createdTime = System::processTimeInMilliSecs(); - m_shouldDelay = false; -} - -void Packet::handle(PacketListener* listener) {} - -int Packet::getEstimatedSize() { - return 8; -} - -bool Packet::canBeInvalidated() { - return false; -} - -bool Packet::isInvalidatedBy(std::shared_ptr packet) { - return false; -} - -// amazing -bool Packet::isAync() { - return false; -} - -bool Packet::tryReplaceDuplicatePacket(std::deque>* duplicatePacket) { - return false; -} - +// NON_MATCHING | score: 1070 (lower is better) std::wstring Packet::readUtf(DataInputStream* in, int maxLength) { short length = in->readShort(); @@ -429,3 +402,33 @@ void Packet::staticCtor() { map(254, false, true, false, false, typeid(GetInfoPacket), GetInfoPacket::create, L"GetInfo"); map(255, true, true, true, false, typeid(DisconnectPacket), DisconnectPacket::create, L"Disconnect"); } + +Packet::Packet() { + m_createdTime = System::processTimeInMilliSecs(); + m_shouldDelay = false; +} + +// NON_MATCHING | score: 805 (lower is better) +Packet::~Packet() = default; + +void Packet::handle(PacketListener* listener) {} + +int Packet::getEstimatedSize() { + return 8; +} + +bool Packet::canBeInvalidated() { + return false; +} + +bool Packet::isInvalidatedBy(std::shared_ptr packet) { + return false; +} + +bool Packet::isAync() { + return false; +} + +bool Packet::tryReplaceDuplicatePacket(std::deque>* duplicatePacket) { + return false; +} diff --git a/src/Minecraft.Client/net/minecraft/network/protocol/game/ClientboundLevelEventPacket.cpp b/src/Minecraft.Client/net/minecraft/network/protocol/game/ClientboundLevelEventPacket.cpp index 241ee9bf..9d345ff5 100644 --- a/src/Minecraft.Client/net/minecraft/network/protocol/game/ClientboundLevelEventPacket.cpp +++ b/src/Minecraft.Client/net/minecraft/network/protocol/game/ClientboundLevelEventPacket.cpp @@ -11,7 +11,7 @@ std::shared_ptr ClientboundLevelEventPacket::create() { ClientboundLevelEventPacket::ClientboundLevelEventPacket() { m_type = 0; m_data = 0; - m_pos = BlockPos::BlockPos(); + m_pos = BlockPos(); } int ClientboundLevelEventPacket::getEstimatedSize() { diff --git a/src/Minecraft.Client/net/minecraft/network/protocol/game/ServerboundPlayerAbilitiesPacket.cpp b/src/Minecraft.Client/net/minecraft/network/protocol/game/ServerboundPlayerAbilitiesPacket.cpp new file mode 100644 index 00000000..6fb02732 --- /dev/null +++ b/src/Minecraft.Client/net/minecraft/network/protocol/game/ServerboundPlayerAbilitiesPacket.cpp @@ -0,0 +1,112 @@ +#include "ServerboundPlayerAbilitiesPacket.h" + +#include "java/io/DataInputStream.h" +#include "java/io/DataOutputStream.h" +#include "net/minecraft/network/PacketListener.h" +#include "net/minecraft/world/entity/player/Abilities.h" + +std::shared_ptr ServerboundPlayerAbilitiesPacket::create() { + return std::shared_ptr(new ServerboundPlayerAbilitiesPacket()); +} + +ServerboundPlayerAbilitiesPacket::ServerboundPlayerAbilitiesPacket() : Packet() { + m_isInvulnerable = false; + m_isFlying = false; + m_isEnableFly = false; + m_isInstabuild = false; + m_flyingSpeed = 0.0f; + m_walkingSpeed = 0.0f; +} + +// name guessed +ServerboundPlayerAbilitiesPacket::ServerboundPlayerAbilitiesPacket(Abilities* abilities) : Packet() { + setInvulnerable(abilities->m_isInvulnerable); + setFlying(abilities->m_isFlying); + setCanFly(abilities->m_isEnableFly); + setInstabuild(abilities->m_isInstabuild); + setFlyingSpeed(abilities->getFlyingSpeed()); + setWalkingSpeed(abilities->getWalkingSpeed()); +} + +EPacketType ServerboundPlayerAbilitiesPacket::getPacketId() { + return EPacketType::_ServerboundPlayerAbilitiesPacket; +} + +void ServerboundPlayerAbilitiesPacket::read(DataInputStream* input) { + u8 flags = input->readByte(); + setInvulnerable(flags & 0x01); + setFlying(flags & 0x02); + setCanFly(flags & 0x04); + setInstabuild(flags & 0x08); + setFlyingSpeed(input->readFloat()); + setWalkingSpeed(input->readFloat()); +} + +void ServerboundPlayerAbilitiesPacket::write(DataOutputStream* output) { + u8 flags = 0; + if (isInvulnerable()) + flags |= 0x01; + if (isFlying()) + flags |= 0x02; + if (canFly()) + flags |= 0x04; + if (canInstabuild()) + flags |= 0x08; + output->writeByte(flags); + output->writeFloat(m_flyingSpeed); + output->writeFloat(m_walkingSpeed); +} + +void ServerboundPlayerAbilitiesPacket::handle(PacketListener* listener) { + listener->handlePlayerAbilities(shared_from_this()); +} + +// name guessed +void ServerboundPlayerAbilitiesPacket::setInvulnerable(bool value) { + m_isInvulnerable = value; +} + +// name guessed +void ServerboundPlayerAbilitiesPacket::setFlying(bool value) { + m_isFlying = value; +} + +// name guessed +void ServerboundPlayerAbilitiesPacket::setCanFly(bool value) { + m_isEnableFly = value; +} + +// name guessed +void ServerboundPlayerAbilitiesPacket::setInstabuild(bool value) { + m_isInstabuild = value; +} + +// name guessed +void ServerboundPlayerAbilitiesPacket::setFlyingSpeed(float value) { + m_flyingSpeed = value; +} + +// name guessed +void ServerboundPlayerAbilitiesPacket::setWalkingSpeed(float value) { + m_walkingSpeed = value; +} + +// name guessed +bool ServerboundPlayerAbilitiesPacket::isInvulnerable() { + return m_isInvulnerable; +} + +// name guessed +bool ServerboundPlayerAbilitiesPacket::isFlying() { + return m_isFlying; +} + +// name guessed +bool ServerboundPlayerAbilitiesPacket::canFly() { + return m_isEnableFly; +} + +// name guessed +bool ServerboundPlayerAbilitiesPacket::canInstabuild() { + return m_isInstabuild; +} diff --git a/src/Minecraft.Client/net/minecraft/network/protocol/game/ServerboundPlayerAbilitiesPacket.h b/src/Minecraft.Client/net/minecraft/network/protocol/game/ServerboundPlayerAbilitiesPacket.h index b127378a..86cd7cfd 100644 --- a/src/Minecraft.Client/net/minecraft/network/protocol/game/ServerboundPlayerAbilitiesPacket.h +++ b/src/Minecraft.Client/net/minecraft/network/protocol/game/ServerboundPlayerAbilitiesPacket.h @@ -2,17 +2,39 @@ #include "net/minecraft/network/protocol/Packet.h" -// PACKET STUB +class Abilities; + class ServerboundPlayerAbilitiesPacket : public Packet, public std::enable_shared_from_this { public: static std::shared_ptr create(); - // TODO: constructor(s) + ServerboundPlayerAbilitiesPacket(); + explicit ServerboundPlayerAbilitiesPacket(Abilities*); EPacketType getPacketId() override; void read(DataInputStream* input) override; void write(DataOutputStream* output) override; void handle(PacketListener* listener) override; + + void setInvulnerable(bool); + void setFlying(bool); + void setCanFly(bool); + void setInstabuild(bool); + void setFlyingSpeed(float); + void setWalkingSpeed(float); + bool isInvulnerable(); + bool isFlying(); + bool canFly(); + bool canInstabuild(); + + bool m_isInvulnerable; + bool m_isFlying; + bool m_isEnableFly; + bool m_isInstabuild; + float m_flyingSpeed; + float m_walkingSpeed; }; + +static_assert(sizeof(ServerboundPlayerAbilitiesPacket) == 0x38, "Serverbound abilities Switch layout"); diff --git a/src/Minecraft.Client/net/minecraft/resources/ResourceLocation.cpp b/src/Minecraft.Client/net/minecraft/resources/ResourceLocation.cpp index 29418677..9ffc1931 100644 --- a/src/Minecraft.Client/net/minecraft/resources/ResourceLocation.cpp +++ b/src/Minecraft.Client/net/minecraft/resources/ResourceLocation.cpp @@ -1,4 +1,8 @@ #include "net/minecraft/resources/ResourceLocation.h" + +#include "net/minecraft/core/System.h" +#include + #include bool ResourceLocation::operator==(const ResourceLocation* other) const { @@ -23,3 +27,10 @@ const std::wstring& ResourceLocation::getNamespace() const { const std::wstring& ResourceLocation::getPath() const { return this->m_path; } + +// name guessed +std::int64_t ResourceLocation::hashCode() const { + std::uint32_t namespaceHash = static_cast(javaStringHashCode(getNamespace())) * 31u; + int pathHash = static_cast(javaStringHashCode(getPath())); + return static_cast(namespaceHash + static_cast(pathHash)); +} diff --git a/src/Minecraft.Client/net/minecraft/resources/ResourceLocation.h b/src/Minecraft.Client/net/minecraft/resources/ResourceLocation.h index 30b79d90..b4f88f1a 100644 --- a/src/Minecraft.Client/net/minecraft/resources/ResourceLocation.h +++ b/src/Minecraft.Client/net/minecraft/resources/ResourceLocation.h @@ -13,6 +13,7 @@ class ResourceLocation { ResourceLocation(); ResourceLocation(const std::wstring&); ResourceLocation(const ResourceLocation&); + ResourceLocation& operator=(const ResourceLocation&); ~ResourceLocation(); bool operator==(const ResourceLocation* other) const; @@ -22,6 +23,7 @@ class ResourceLocation { const std::wstring& getNamespace() const; const std::wstring& getPath() const; + std::int64_t hashCode() const; virtual std::wstring toString() const; @@ -31,10 +33,19 @@ class ResourceLocation { char m_byte48; }; -// this is actually ResourceLocation::hashCode template <> -struct std::hash { - std::size_t operator()(const ResourceLocation& rl) const { - return std::hash()(rl.getPath()) ^ (std::hash()(rl.getNamespace()) << 1); +struct std::equal_to { + // name guessed + // NON_MATCHING | score: 5 (lower is better) + bool operator()(const ResourceLocation& lhs, const ResourceLocation& rhs) const { + return lhs.operator==(&rhs); } }; + +/** Uses the original LCE resource-key hash. + */ +template <> +struct std::hash { + // NON_MATCHING | score: 5 (lower is better) + std::size_t operator()(const ResourceLocation& rl) const { return rl.hashCode(); } +}; diff --git a/src/Minecraft.Client/net/minecraft/server/level/ServerChunkCache.cpp b/src/Minecraft.Client/net/minecraft/server/level/ServerChunkCache.cpp index 8e44a8e8..4e81237e 100644 --- a/src/Minecraft.Client/net/minecraft/server/level/ServerChunkCache.cpp +++ b/src/Minecraft.Client/net/minecraft/server/level/ServerChunkCache.cpp @@ -1,5 +1,7 @@ #include "net/minecraft/server/level/ServerChunkCache.h" +#include + #include "NX/Platform.h" #include "net/minecraft/core/BlockPos.h" @@ -58,7 +60,7 @@ ServerChunkCache::~ServerChunkCache() { delete *it; } - nn::os::FinalizeMutex(&m_mutex); + DeleteCriticalSection(&m_mutex); } LevelChunk* ServerChunkCache::getChunkIfLoaded(int chunkX, int chunkZ) { @@ -116,7 +118,7 @@ LevelChunk* ServerChunkCache::getChunkIfGenerated(int chunkX, int chunkZ, bool u return loadedChunk; } -// NON_MATCHING: Regswap +// NON_MATCHING | score: 290 (lower is better) LevelChunk* ServerChunkCache::load(int chunkX, int chunkZ, LevelChunk* chunk) { LevelChunk* active = chunk; if (!m_chunkStorage) @@ -145,7 +147,7 @@ LevelChunk* ServerChunkCache::load(int chunkX, int chunkZ, LevelChunk* chunk) { return active; } -// NON_MATCHING: A couple instructions placed in the wrong positions +// NON_MATCHING | score: 860 (lower is better) LevelChunk* ServerChunkCache::updateCacheAndPostProcess(int chunkX, int chunkZ, LevelChunk* newChunk, LevelChunk* oldChunk, bool unk) { if (!inBounds(chunkX, chunkZ)) { @@ -154,8 +156,9 @@ LevelChunk* ServerChunkCache::updateCacheAndPostProcess(int chunkX, int chunkZ, int idx = computeIdx(chunkX, chunkZ); - if (InterlockedCompareExchangeRelease((volatile long*)&m_chunks[idx], (long)newChunk, (long)oldChunk) - == (long)oldChunk) { + if (InterlockedCompareExchangeRelease((volatile intptr_t*)&m_chunks[idx], (intptr_t)newChunk, + (intptr_t)oldChunk) + == (intptr_t)oldChunk) { EnterCriticalSection(&m_mutex); PIXBeginNamedEvent(0.0, "Lighting chunk"); @@ -440,7 +443,7 @@ std::wstring ServerChunkCache::gatherStats() { return L"ServerChunkCache: "; } -std::vector* ServerChunkCache::getMobsAt(MobCategory* category, const BlockPos& pos) { +std::vector* ServerChunkCache::getMobsAt(MobCategory* category, const BlockPos& pos) { return m_chunkGenerator->getMobsAt(category, pos); } diff --git a/src/Minecraft.Client/net/minecraft/server/level/ServerChunkCache.h b/src/Minecraft.Client/net/minecraft/server/level/ServerChunkCache.h index ffad2af7..f1dfa15c 100644 --- a/src/Minecraft.Client/net/minecraft/server/level/ServerChunkCache.h +++ b/src/Minecraft.Client/net/minecraft/server/level/ServerChunkCache.h @@ -37,7 +37,7 @@ class ServerChunkCache : public ChunkSource { void save(bool, ProgressListener*) override; bool shouldSave() override; ChunkSource* getCache() override; - std::vector* getMobsAt(MobCategory* category, const BlockPos& pos) override; + std::vector* getMobsAt(MobCategory* category, const BlockPos& pos) override; void findNearestMapFeature(Level* level, const std::wstring& name, const BlockPos& pos, bool unk) override; int getLoadedChunks() override; diff --git a/src/Minecraft.Client/net/minecraft/sounds/SoundEvent.cpp b/src/Minecraft.Client/net/minecraft/sounds/SoundEvent.cpp new file mode 100644 index 00000000..0943504d --- /dev/null +++ b/src/Minecraft.Client/net/minecraft/sounds/SoundEvent.cpp @@ -0,0 +1,56 @@ +#include "net/minecraft/sounds/SoundEvent.h" + +const SoundEvent* SoundEvent::UI_PRESS; +const SoundEvent* SoundEvent::ITEM_PICKUP; // name guessed +const SoundEvent* SoundEvent::ENTER_THERMAL; +const SoundEvent* SoundEvent::ENTER_BOOST; +MappedRegistry SoundEvent::Registry; // name guessed +int SoundEvent::NEXT_ID; + +// name guessed +SoundEvent::SoundEvent(std::wstring name, float range) { + m_id = -1; + m_flags = 0; + m_name = name; + m_range = range; +} + +// name guessed +// NON_MATCHING | score: 20 (lower is better) +SoundEvent::SoundEvent(std::wstring name, float range, int flags) { + m_id = -1; + m_name = name; + m_flags = flags; + m_range = range; +} + +// name guessed +std::wstring SoundEvent::getName() { + return m_name; +} +// name guessed +float SoundEvent::getRange() { + return m_range; +} +// name guessed +bool SoundEvent::isUISound() { + return m_flags == 1; +} +// name guessed +void SoundEvent::setId(int id) { + m_id = id; +} + +// name guessed +SoundEvent* SoundEvent::registerEvent(SoundEvent* event) { + event->setId(NEXT_ID); + ResourceLocation location(event->getName()); + Registry.registerMapping(NEXT_ID, location, event); + ++NEXT_ID; + return event; +} + +static_assert(sizeof(SoundEvent) == 0x28, "Switch sound event ABI"); +static_assert(offsetof(SoundEvent, m_id) == 0x18, "Switch sound ID offset"); +static_assert(offsetof(SoundEvent, m_range) == 0x1c, "Switch sound range offset"); +static_assert(offsetof(SoundEvent, m_flags) == 0x20, "Switch sound flags offset"); diff --git a/src/Minecraft.Client/net/minecraft/sounds/SoundEvent.h b/src/Minecraft.Client/net/minecraft/sounds/SoundEvent.h index ae63bc86..93afa4b2 100644 --- a/src/Minecraft.Client/net/minecraft/sounds/SoundEvent.h +++ b/src/Minecraft.Client/net/minecraft/sounds/SoundEvent.h @@ -1,9 +1,31 @@ #pragma once +#include "net/minecraft/resources/ResourceLocation.h" +#include + class SoundEvent { public: static const SoundEvent* UI_PRESS; static const SoundEvent* ITEM_PICKUP; static const SoundEvent* ENTER_THERMAL; static const SoundEvent* ENTER_BOOST; + + static MappedRegistry Registry; + static int NEXT_ID; + static SoundEvent* registerEvent(SoundEvent*); + + /** The default overload takes its string by value: registerSound copies the + * caller's string before entering the original constructor. + */ + SoundEvent(std::wstring name, float range); + SoundEvent(std::wstring name, float range, int flags); + std::wstring getName(); + float getRange(); + bool isUISound(); + void setId(int id); + + std::wstring m_name; + int m_id; + float m_range; + int m_flags; }; diff --git a/src/Minecraft.Client/net/minecraft/sounds/SoundEvents.cpp b/src/Minecraft.Client/net/minecraft/sounds/SoundEvents.cpp new file mode 100644 index 00000000..ced7bdde --- /dev/null +++ b/src/Minecraft.Client/net/minecraft/sounds/SoundEvents.cpp @@ -0,0 +1,1258 @@ +#include "net/minecraft/sounds/SoundEvents.h" + +#include "net/minecraft/sounds/SoundEvent.h" + +/** Order, duplicate keys, range overrides and aliases recovered from v1.0.17 ARM64. + */ +// name guessed: new sound fields are named from their resource keys. + +SoundEvent* SoundEvents::BACK; +SoundEvent* SoundEvents::CRAFT; // name guessed +SoundEvent* SoundEvents::CRAFTFAIL; +SoundEvent* SoundEvents::FOCUS; +SoundEvent* SoundEvents::SCROLL; // name guessed +SoundEvent* SoundEvents::AMBIENT_CAVE_CAVE; +SoundEvent* SoundEvents::DIG_STONE; +SoundEvent* SoundEvents::RANDOM_ANVIL_BREAK; // name guessed +SoundEvent* SoundEvents::RANDOM_ANVIL_LAND; +SoundEvent* SoundEvents::STEP_STONE; +SoundEvent* SoundEvents::RANDOM_ANVIL_LAND_2; // name guessed +SoundEvent* SoundEvents::RANDOM_ANVIL_LAND_3; +SoundEvent* SoundEvents::STEP_STONE_2; +SoundEvent* SoundEvents::RANDOM_ANVIL_USE; // name guessed +SoundEvent* SoundEvents::ENTITY_ARMORSTAND_BREAK; +SoundEvent* SoundEvents::DIG_WOOD; +SoundEvent* SoundEvents::ENTITY_ARMORSTAND_HIT; // name guessed +SoundEvent* SoundEvents::DIG_STONE_2; +SoundEvent* SoundEvents::ITEM_ARMOR_EQUIP_CHAIN; +SoundEvent* SoundEvents::ITEM_ARMOR_EQUIP_DIAMOND; // name guessed +SoundEvent* SoundEvents::ITEM_ARMOR_EQUIP_GENERIC; +SoundEvent* SoundEvents::ITEM_ARMOR_EQUIP_GOLD; +SoundEvent* SoundEvents::ITEM_ARMOR_EQUIP_IRON; // name guessed +SoundEvent* SoundEvents::ITEM_ARMOR_EQUIP_LEATHER; +SoundEvent* SoundEvents::ITEM_ARMOR_EQUIP_LEATHER_2; +SoundEvent* SoundEvents::RANDOM_BOWHIT; // name guessed +SoundEvent* SoundEvents::RANDOM_SUCCESSFUL_HIT; +SoundEvent* SoundEvents::RANDOM_BOW; +SoundEvent* SoundEvents::MOB_BAT_IDLE; // name guessed +SoundEvent* SoundEvents::MOB_BAT_DEATH; +SoundEvent* SoundEvents::MOB_BAT_HURT; +SoundEvent* SoundEvents::MOB_BAT_TAKEOFF; // name guessed +SoundEvent* SoundEvents::MOB_BLAZE_BREATHE; +SoundEvent* SoundEvents::FIRE_FIRE; +SoundEvent* SoundEvents::MOB_BLAZE_DEATH; // name guessed +SoundEvent* SoundEvents::MOB_BLAZE_HIT; +SoundEvent* SoundEvents::MOB_GHAST_FIREBALL; +SoundEvent* SoundEvents::ENTITY_BOAT_PADDLE_LAND; // name guessed +SoundEvent* SoundEvents::ENTITY_BOAT_PADDLE_WATER; +SoundEvent* SoundEvents::ENTITY_BOBBER_RETRIEVE; +SoundEvent* SoundEvents::ENTITY_BOBBER_THROW; // name guessed +SoundEvent* SoundEvents::ENTITY_BOBBER_RETRIEVE_2; +SoundEvent* SoundEvents::ITEM_BOTTLE_EMPTY; +SoundEvent* SoundEvents::ITEM_BOTTLE_FILL; // name guessed +SoundEvent* SoundEvents::ITEM_BOTTLE_FILL_DRAGONBREATH; +SoundEvent* SoundEvents::BLOCK_BREWING_STAND_BREW; +SoundEvent* SoundEvents::ITEM_BUCKET_EMPTY; // name guessed +SoundEvent* SoundEvents::ITEM_BUCKET_EMPTY_LAVA; +SoundEvent* SoundEvents::ITEM_BUCKET_FILL; +SoundEvent* SoundEvents::ITEM_BUCKET_FILL_LAVA; // name guessed +SoundEvent* SoundEvents::MOB_CAT_MEOW; +SoundEvent* SoundEvents::MOB_CAT_HIT; +SoundEvent* SoundEvents::MOB_CAT_HISS; // name guessed +SoundEvent* SoundEvents::MOB_CAT_HIT_2; +SoundEvent* SoundEvents::MOB_CAT_PURR; +SoundEvent* SoundEvents::MOB_CAT_PURREOW; // name guessed +SoundEvent* SoundEvents::RANDOM_CHESTCLOSED; +SoundEvent* SoundEvents::RANDOM_DOOR_CLOSE; +SoundEvent* SoundEvents::RANDOM_CHESTOPEN; // name guessed +SoundEvent* SoundEvents::MOB_CHICKEN_IDLE; +SoundEvent* SoundEvents::MOB_CHICKEN_HURT; +SoundEvent* SoundEvents::MOB_CHICKEN_PLOP; // name guessed +SoundEvent* SoundEvents::MOB_CHICKEN_HURT_2; +SoundEvent* SoundEvents::MOB_CHICKEN_STEP; +SoundEvent* SoundEvents::BLOCK_CHORUS_FLOWER_DEATH; // name guessed +SoundEvent* SoundEvents::BLOCK_CHORUS_FLOWER_GROW; +SoundEvent* SoundEvents::MOB_ENDERMEN_PORTAL; +SoundEvent* SoundEvents::DIG_CLOTH; // name guessed +SoundEvent* SoundEvents::STEP_CLOTH; +SoundEvent* SoundEvents::STEP_CLOTH_2; +SoundEvent* SoundEvents::DIG_CLOTH_2; // name guessed +SoundEvent* SoundEvents::STEP_CLOTH_3; +SoundEvent* SoundEvents::RANDOM_CLICK_73; +SoundEvent* SoundEvents::MOB_COW_IDLE; // name guessed +SoundEvent* SoundEvents::MOB_COW_HURT; +SoundEvent* SoundEvents::MOB_COW_HURT_2; +SoundEvent* SoundEvents::ENTITY_COW_MILK; // name guessed +SoundEvent* SoundEvents::MOB_COW_STEP; +SoundEvent* SoundEvents::MOB_CREEPER_DEATH; +SoundEvent* SoundEvents::MOB_CREEPER_HURT; // name guessed +SoundEvent* SoundEvents::RANDOM_FUSE; +SoundEvent* SoundEvents::RANDOM_CLICK_2; +SoundEvent* SoundEvents::RANDOM_CLICK_3; // name guessed +SoundEvent* SoundEvents::RANDOM_BOW_2; +SoundEvent* SoundEvents::MOB_HORSE_DONKEY_IDLE; +SoundEvent* SoundEvents::MOB_HORSE_DONKEY_ANGRY; // name guessed +SoundEvent* SoundEvents::MOB_CHICKEN_PLOP_2; +SoundEvent* SoundEvents::MOB_HORSE_DONKEY_DEATH; +SoundEvent* SoundEvents::MOB_HORSE_DONKEY_HIT; // name guessed +SoundEvent* SoundEvents::RANDOM_BOW_3; +SoundEvent* SoundEvents::MOB_GUARDIAN_ELDER_IDLE; +SoundEvent* SoundEvents::MOB_GUARDIAN_LAND_IDLE; // name guessed +SoundEvent* SoundEvents::MOB_GUARDIAN_CURSE; +SoundEvent* SoundEvents::MOB_GUARDIAN_ELDER_DEATH; +SoundEvent* SoundEvents::MOB_GUARDIAN_LAND_DEATH; // name guessed +SoundEvent* SoundEvents::MOB_GUARDIAN_FLOP; +SoundEvent* SoundEvents::MOB_GUARDIAN_ELDER_HIT; +SoundEvent* SoundEvents::MOB_GUARDIAN_LAND_HIT; // name guessed +SoundEvent* SoundEvents::ITEM_ELYTRA_FLYING; +SoundEvent* SoundEvents::BLOCK_ENCHANTMENT_TABLE_ENCHANT; +SoundEvent* SoundEvents::BLOCK_ENDERCHEST_CLOSE; // name guessed +SoundEvent* SoundEvents::BLOCK_ENDERCHEST_OPEN; +SoundEvent* SoundEvents::MOB_ENDERDRAGON_GROWL; +SoundEvent* SoundEvents::MOB_ENDERDRAGON_END; // name guessed +SoundEvent* SoundEvents::RANDOM_EXPLODE; +SoundEvent* SoundEvents::MOB_ENDERDRAGON_WINGS; +SoundEvent* SoundEvents::MOB_ENDERDRAGON_GROWL_2; // name guessed +SoundEvent* SoundEvents::MOB_ENDERDRAGON_HIT; +SoundEvent* SoundEvents::MOB_GHAST_FIREBALL_2; +SoundEvent* SoundEvents::ENTITY_ENDEREYE_LAUNCH; // name guessed +SoundEvent* SoundEvents::ENTITY_ENDEREYE_DEATH; +SoundEvent* SoundEvents::MOB_ENDERMEN_IDLE; +SoundEvent* SoundEvents::MOB_ENDERMEN_DEATH; // name guessed +SoundEvent* SoundEvents::MOB_ENDERMEN_HIT; +SoundEvent* SoundEvents::MOB_ENDERMAN_SCREAM; +SoundEvent* SoundEvents::MOB_ENDERMAN_STARE; // name guessed +SoundEvent* SoundEvents::MOB_ENDERMEN_PORTAL_2; +SoundEvent* SoundEvents::MOB_SILVERFISH_IDLE; +SoundEvent* SoundEvents::MOB_SILVERFISH_KILL; // name guessed +SoundEvent* SoundEvents::MOB_SILVERFISH_HIT; +SoundEvent* SoundEvents::MOB_SILVERFISH_STEP; +SoundEvent* SoundEvents::RANDOM_BOW_4; // name guessed +SoundEvent* SoundEvents::RANDOM_EXPLODE_2; +SoundEvent* SoundEvents::BLOCK_END_PORTAL_FRAME_FILL; +SoundEvent* SoundEvents::BLOCK_END_PORTAL_SPAWN; // name guessed +SoundEvent* SoundEvents::ENTITY_EVOCATION_FANGS_ATTACK; +SoundEvent* SoundEvents::ENTITY_EVOCATION_ILLAGER_AMBIENT; +SoundEvent* SoundEvents::ENTITY_EVOCATION_ILLAGER_CAST_SPELL; // name guessed +SoundEvent* SoundEvents::ENTITY_EVOCATION_ILLAGER_DEATH; +SoundEvent* SoundEvents::ENTITY_EVOCATION_ILLAGER_HURT; +SoundEvent* SoundEvents::ENTITY_EVOCATION_ILLAGER_PREPARE_ATTACK; // name guessed +SoundEvent* SoundEvents::ENTITY_EVOCATION_ILLAGER_PREPARE_SUMMON; +SoundEvent* SoundEvents::ENTITY_EVOCATION_ILLAGER_PREPARE_WOLOLO; +SoundEvent* SoundEvents::RANDOM_BOW_5; // name guessed +SoundEvent* SoundEvents::RANDOM_ORB; +SoundEvent* SoundEvents::RANDOM_ORB_2; +SoundEvent* SoundEvents::BLOCK_FENCE_GATE_CLOSE; // name guessed +SoundEvent* SoundEvents::BLOCK_FENCE_GATE_OPEN; +SoundEvent* SoundEvents::MOB_GHAST_FIREBALL_3; +SoundEvent* SoundEvents::FIREWORKS_BLAST; // name guessed +SoundEvent* SoundEvents::FIREWORKS_BLAST_FAR; +SoundEvent* SoundEvents::FIREWORKS_LARGE_BLAST; +SoundEvent* SoundEvents::FIREWORKS_LARGE_BLAST_FAR; // name guessed +SoundEvent* SoundEvents::FIREWORKS_LAUNCH; +SoundEvent* SoundEvents::RANDOM_BOW_6; +SoundEvent* SoundEvents::FIREWORKS_TWINKLE; // name guessed +SoundEvent* SoundEvents::FIREWORKS_TWINKLE_FAR; +SoundEvent* SoundEvents::FIRE_AMBIENT; +SoundEvent* SoundEvents::RANDOM_FIZZ; // name guessed +SoundEvent* SoundEvents::FIRE_IGNITE; +SoundEvent* SoundEvents::BLOCK_FURNACE_FIRE_CRACKLE; +SoundEvent* SoundEvents::DAMAGE_FALLBIG; // name guessed +SoundEvent* SoundEvents::RANDOM_FIZZ_2; +SoundEvent* SoundEvents::DAMAGE_HURTFLESH; +SoundEvent* SoundEvents::RANDOM_DRINK; // name guessed +SoundEvent* SoundEvents::RANDOM_EAT; +SoundEvent* SoundEvents::RANDOM_EXPLODE_3; +SoundEvent* SoundEvents::RANDOM_FIZZ_3; // name guessed +SoundEvent* SoundEvents::DAMAGE_HURTFLESH_2; +SoundEvent* SoundEvents::DAMAGE_FALLSMALL; +SoundEvent* SoundEvents::RANDOM_SPLASH; // name guessed +SoundEvent* SoundEvents::LIQUID_SWIM; +SoundEvent* SoundEvents::MOB_GHAST_MOAN; +SoundEvent* SoundEvents::MOB_GHAST_DEATH; // name guessed +SoundEvent* SoundEvents::MOB_GHAST_SCREAM; +SoundEvent* SoundEvents::MOB_GHAST_SCREAM_2; +SoundEvent* SoundEvents::MOB_GHAST_FIREBALL_4; // name guessed +SoundEvent* SoundEvents::MOB_GHAST_CHARGE; +SoundEvent* SoundEvents::RANDOM_GLASS; +SoundEvent* SoundEvents::STEP_STONE_3; // name guessed +SoundEvent* SoundEvents::STEP_STONE_4; +SoundEvent* SoundEvents::DIG_STONE_3; +SoundEvent* SoundEvents::STEP_STONE_5; // name guessed +SoundEvent* SoundEvents::DIG_GRASS; +SoundEvent* SoundEvents::STEP_GRASS; +SoundEvent* SoundEvents::STEP_GRASS_2; // name guessed +SoundEvent* SoundEvents::DIG_GRASS_2; +SoundEvent* SoundEvents::STEP_GRASS_3; +SoundEvent* SoundEvents::DIG_GRAVEL; // name guessed +SoundEvent* SoundEvents::STEP_GRAVEL; +SoundEvent* SoundEvents::STEP_GRAVEL_2; +SoundEvent* SoundEvents::DIG_GRAVEL_2; // name guessed +SoundEvent* SoundEvents::STEP_GRAVEL_3; +SoundEvent* SoundEvents::ENTITY_GUARDIAN_IDLE; +SoundEvent* SoundEvents::MOB_GUARDIAN_LAND_IDLE_2; // name guessed +SoundEvent* SoundEvents::MOB_GUARDIAN_ATTACK; +SoundEvent* SoundEvents::MOB_GUARDIAN_DEATH; +SoundEvent* SoundEvents::MOB_GUARDIAN_LAND_DEATH_2; // name guessed +SoundEvent* SoundEvents::MOB_GUARDIAN_FLOP_2; +SoundEvent* SoundEvents::MOB_GUARDIAN_HIT; +SoundEvent* SoundEvents::MOB_GUARDIAN_LAND_HIT_2; // name guessed +SoundEvent* SoundEvents::ITEM_HOE_TILL; +SoundEvent* SoundEvents::MOB_HORSE_IDLE; +SoundEvent* SoundEvents::MOB_HORSE_ANGRY; // name guessed +SoundEvent* SoundEvents::MOB_HORSE_ARMOR; +SoundEvent* SoundEvents::MOB_HORSE_BREATHE; +SoundEvent* SoundEvents::MOB_HORSE_DEATH; // name guessed +SoundEvent* SoundEvents::ENTITY_HORSE_EAT; +SoundEvent* SoundEvents::MOB_HORSE_GALLOP; +SoundEvent* SoundEvents::MOB_HORSE_HIT; // name guessed +SoundEvent* SoundEvents::MOB_HORSE_JUMP; +SoundEvent* SoundEvents::MOB_HORSE_LAND; +SoundEvent* SoundEvents::MOB_HORSE_LEATHER; // name guessed +SoundEvent* SoundEvents::MOB_HORSE_SOFT; +SoundEvent* SoundEvents::MOB_HORSE_WOOD; +SoundEvent* SoundEvents::GAME_HOSTILE_HURT_FALL_BIG; // name guessed +SoundEvent* SoundEvents::GAME_HOSTILE_DIE; +SoundEvent* SoundEvents::DAMAGE_HURTFLESH_3; +SoundEvent* SoundEvents::GAME_HOSTILE_HURT_FALL_SMALL; // name guessed +SoundEvent* SoundEvents::GAME_HOSTILE_SWIM_SPLASH; +SoundEvent* SoundEvents::GAME_HOSTILE_SWIM; +SoundEvent* SoundEvents::ENTITY_HUSK_IDLE; // name guessed +SoundEvent* SoundEvents::ENTITY_HUSK_DEATH; +SoundEvent* SoundEvents::ENTITY_HUSK_HURT; +SoundEvent* SoundEvents::ENTITY_HUSK_STEP; // name guessed +SoundEvent* SoundEvents::ENTITY_ILLUSION_ILLAGER_AMBIENT; +SoundEvent* SoundEvents::ENTITY_ILLUSION_ILLAGER_CAST_SPELL; +SoundEvent* SoundEvents::ENTITY_ILLUSION_ILLAGER_DEATH; // name guessed +SoundEvent* SoundEvents::ENTITY_ILLUSION_ILLAGER_HURT; +SoundEvent* SoundEvents::ENTITY_ILLUSION_ILLAGER_MIRROR_MOVE; +SoundEvent* SoundEvents::ENTITY_ILLUSION_ILLAGER_PREPARE_BLINDNESS; // name guessed +SoundEvent* SoundEvents::ENTITY_ILLUSION_ILLAGER_PREPARE_MIRROR; +SoundEvent* SoundEvents::MOB_IRONGOLEM_THROW; +SoundEvent* SoundEvents::MOB_IRONGOLEM_DEATH; // name guessed +SoundEvent* SoundEvents::MOB_IRONGOLEM_HIT; +SoundEvent* SoundEvents::MOB_IRONGOLEM_WALK; +SoundEvent* SoundEvents::BLOCK_IRON_DOOR_CLOSE; // name guessed +SoundEvent* SoundEvents::BLOCK_IRON_DOOR_OPEN; +SoundEvent* SoundEvents::BLOCK_IRON_TRAPDOOR_CLOSE; +SoundEvent* SoundEvents::BLOCK_IRON_TRAPDOOR_OPEN; // name guessed +SoundEvent* SoundEvents::ENTITY_ITEMFRAME_ADDITEM; +SoundEvent* SoundEvents::ENTITY_ITEMFRAME_BREAK; +SoundEvent* SoundEvents::ENTITY_ITEMFRAME_PLACE; // name guessed +SoundEvent* SoundEvents::ENTITY_ITEMFRAME_REMOVEITEM; +SoundEvent* SoundEvents::ENTITY_ITEMFRAME_ROTATEITEM; +SoundEvent* SoundEvents::RANDOM_BREAK; // name guessed +SoundEvent* SoundEvents::DIG_WOOD_2; +SoundEvent* SoundEvents::STEP_LADDER; +SoundEvent* SoundEvents::STEP_LADDER_2; // name guessed +SoundEvent* SoundEvents::DIG_WOOD_3; +SoundEvent* SoundEvents::STEP_LADDER_3; +SoundEvent* SoundEvents::RANDOM_FIZZ_4; // name guessed +SoundEvent* SoundEvents::LIQUID_LAVA; +SoundEvent* SoundEvents::LIQUID_LAVAPOP; +SoundEvent* SoundEvents::ENTITY_LEASHKNOT_BREAK; // name guessed +SoundEvent* SoundEvents::ENTITY_LEASHKNOT_PLACE; +SoundEvent* SoundEvents::RANDOM_CLICK_4; +SoundEvent* SoundEvents::RANDOM_EXPLODE_4; // name guessed +SoundEvent* SoundEvents::AMBIENT_WEATHER_THUNDER; +SoundEvent* SoundEvents::RANDOM_BOW_7; +SoundEvent* SoundEvents::ENTITY_LLAMA_AMBIENT; // name guessed +SoundEvent* SoundEvents::ENTITY_LLAMA_ANGRY; +SoundEvent* SoundEvents::MOB_CHICKEN_PLOP_3; +SoundEvent* SoundEvents::ENTITY_LLAMA_DEATH; // name guessed +SoundEvent* SoundEvents::ENTITY_LLAMA_EAT; +SoundEvent* SoundEvents::ENTITY_LLAMA_HURT; +SoundEvent* SoundEvents::ENTITY_LLAMA_SPIT; // name guessed +SoundEvent* SoundEvents::ENTITY_LLAMA_STEP; +SoundEvent* SoundEvents::ENTITY_LLAMA_SWAG; +SoundEvent* SoundEvents::MOB_SLIME_BIG; // name guessed +SoundEvent* SoundEvents::MOB_SLIME_BIG_2; +SoundEvent* SoundEvents::MOB_MAGMACUBE_JUMP; +SoundEvent* SoundEvents::MOB_MAGMACUBE_BIG; // name guessed +SoundEvent* SoundEvents::DIG_STONE_4; +SoundEvent* SoundEvents::STEP_STONE_6; +SoundEvent* SoundEvents::STEP_STONE_7; // name guessed +SoundEvent* SoundEvents::DIG_STONE_5; +SoundEvent* SoundEvents::STEP_STONE_8; +SoundEvent* SoundEvents::RANDOM_CLICK_5; // name guessed +SoundEvent* SoundEvents::RANDOM_CLICK_6; +SoundEvent* SoundEvents::MINECART_INSIDE; +SoundEvent* SoundEvents::MINECART_BASE; // name guessed +SoundEvent* SoundEvents::MOB_SHEEP_SHEAR; +SoundEvent* SoundEvents::MOB_HORSE_DONKEY_IDLE_2; +SoundEvent* SoundEvents::MOB_HORSE_DONKEY_DEATH_2; // name guessed +SoundEvent* SoundEvents::MOB_HORSE_DONKEY_HIT_2; +SoundEvent* SoundEvents::MOB_CHICKEN_PLOP_4; +SoundEvent* SoundEvents::NOTE_BD; // name guessed +SoundEvent* SoundEvents::NOTE_BASSATTACK; +SoundEvent* SoundEvents::NOTE_HARP; +SoundEvent* SoundEvents::NOTE_HAT; // name guessed +SoundEvent* SoundEvents::NOTE_PLING; +SoundEvent* SoundEvents::NOTE_SNARE; +SoundEvent* SoundEvents::BLOCK_NOTE_BELL; // name guessed +SoundEvent* SoundEvents::BLOCK_NOTE_CHIME; +SoundEvent* SoundEvents::BLOCK_NOTE_FLUTE; +SoundEvent* SoundEvents::BLOCK_NOTE_GUITAR; // name guessed +SoundEvent* SoundEvents::BLOCK_NOTE_XYLOPHONE; +SoundEvent* SoundEvents::ENTITY_PAINTING_BREAK; +SoundEvent* SoundEvents::ENTITY_PAINTING_PLACE; // name guessed +SoundEvent* SoundEvents::ENTITY_PARROT_AMBIENT; +SoundEvent* SoundEvents::ENTITY_PARROT_DEATH; +SoundEvent* SoundEvents::ENTITY_PARROT_EAT; // name guessed +SoundEvent* SoundEvents::ENTITY_PARROT_FLY; +SoundEvent* SoundEvents::ENTITY_PARROT_HURT; +SoundEvent* SoundEvents::ENTITY_PARROT_STEP; // name guessed +SoundEvent* SoundEvents::MOB_PIG_IDLE; +SoundEvent* SoundEvents::MOB_PIG_DEATH; +SoundEvent* SoundEvents::MOB_PIG_IDLE_2; // name guessed +SoundEvent* SoundEvents::MOB_HORSE_LEATHER_2; +SoundEvent* SoundEvents::MOB_PIG_STEP; +SoundEvent* SoundEvents::TILE_PISTON_IN; // name guessed +SoundEvent* SoundEvents::TILE_PISTON_OUT; +SoundEvent* SoundEvents::ENTITY_PLAYER_ATTACK_CRIT; +SoundEvent* SoundEvents::ENTITY_PLAYER_ATTACK_KNOCKBACK; // name guessed +SoundEvent* SoundEvents::ENTITY_PLAYER_ATTACK_WEAK; +SoundEvent* SoundEvents::ENTITY_PLAYER_ATTACK_STRONG; +SoundEvent* SoundEvents::ENTITY_PLAYER_ATTACK_SWEEP; // name guessed +SoundEvent* SoundEvents::ENTITY_PLAYER_ATTACK_WEAK_2; +SoundEvent* SoundEvents::GAME_PLAYER_HURT_FALL_BIG; +SoundEvent* SoundEvents::RANDOM_BREATH; // name guessed +SoundEvent* SoundEvents::RANDOM_BURP; +SoundEvent* SoundEvents::DAMAGE_HURTFLESH_4; +SoundEvent* SoundEvents::DAMAGE_HURTFLESH_5; // name guessed +SoundEvent* SoundEvents::RANDOM_LEVELUP; +SoundEvent* SoundEvents::DAMAGE_FALLSMALL_2; +SoundEvent* SoundEvents::GAME_PLAYER_SWIM_SPLASH; // name guessed +SoundEvent* SoundEvents::GAME_PLAYER_SWIM; +SoundEvent* SoundEvents::ENTITY_PLAYER_HURT_DROWN; +SoundEvent* SoundEvents::ENTITY_PLAYER_HURT_ON_FIRE; // name guessed +SoundEvent* SoundEvents::ENTITY_POLARBEAR_IDLE; +SoundEvent* SoundEvents::ENTITY_POLARBEAR_BABYIDLE; +SoundEvent* SoundEvents::ENTITY_POLARBEAR_DEATH; // name guessed +SoundEvent* SoundEvents::ENTITY_POLARBEAR_HURT; +SoundEvent* SoundEvents::ENTITY_POLARBEAR_STEP; +SoundEvent* SoundEvents::ENTITY_POLARBEAR_WARNING; // name guessed +SoundEvent* SoundEvents::PORTAL_PORTAL; +SoundEvent* SoundEvents::PORTAL_TRAVEL; +SoundEvent* SoundEvents::PORTAL_TRIGGER; // name guessed +SoundEvent* SoundEvents::ENTITY_RABBIT_IDLE; +SoundEvent* SoundEvents::ENTITY_RABBIT_ATTACK; +SoundEvent* SoundEvents::MOB_RABBIT_DEATH; // name guessed +SoundEvent* SoundEvents::ENTITY_RABBIT_HURT; +SoundEvent* SoundEvents::ENTITY_RABBIT_HOP; +SoundEvent* SoundEvents::RECORD_11; // name guessed +SoundEvent* SoundEvents::RECORD_13; +SoundEvent* SoundEvents::BLOCKS; +SoundEvent* SoundEvents::CAT; // name guessed +SoundEvent* SoundEvents::CHIRP; +SoundEvent* SoundEvents::FAR; +SoundEvent* SoundEvents::MALL; // name guessed +SoundEvent* SoundEvents::MELLOHI; +SoundEvent* SoundEvents::STAL; +SoundEvent* SoundEvents::STRAD; // name guessed +SoundEvent* SoundEvents::WHERE_ARE_WE_NOW; +SoundEvent* SoundEvents::WARD; +SoundEvent* SoundEvents::RANDOM_FIZZ_5; // name guessed +SoundEvent* SoundEvents::DIG_SAND; +SoundEvent* SoundEvents::STEP_SAND; +SoundEvent* SoundEvents::STEP_SAND_2; // name guessed +SoundEvent* SoundEvents::DIG_SAND_2; +SoundEvent* SoundEvents::STEP_SAND_3; +SoundEvent* SoundEvents::MOB_SHEEP_IDLE; // name guessed +SoundEvent* SoundEvents::MOB_SHEEP_IDLE_2; +SoundEvent* SoundEvents::MOB_SHEEP_IDLE_3; +SoundEvent* SoundEvents::MOB_SHEEP_SHEAR_2; // name guessed +SoundEvent* SoundEvents::MOB_SHEEP_STEP; +SoundEvent* SoundEvents::ITEM_SHIELD_BLOCK; +SoundEvent* SoundEvents::RANDOM_BREAK_2; // name guessed +SoundEvent* SoundEvents::SHOVEL_FLATTEN; +SoundEvent* SoundEvents::ITEM_TOTEM_USE; +SoundEvent* SoundEvents::BLOCK_SHULKER_BOX_CLOSE; // name guessed +SoundEvent* SoundEvents::BLOCK_SHULKER_BOX_OPEN; +SoundEvent* SoundEvents::ENTITY_SHULKER_AMBIENT; +SoundEvent* SoundEvents::ENTITY_SHULKER_CLOSE; // name guessed +SoundEvent* SoundEvents::ENTITY_SHULKER_DEATH; +SoundEvent* SoundEvents::ENTITY_SHULKER_HURT; +SoundEvent* SoundEvents::ENTITY_SHULKER_HURT_CLOSED; // name guessed +SoundEvent* SoundEvents::ENTITY_SHULKER_OPEN; +SoundEvent* SoundEvents::ENTITY_SHULKER_SHOOT; +SoundEvent* SoundEvents::MOB_ENDERMEN_PORTAL_3; // name guessed +SoundEvent* SoundEvents::ENTITY_SHULKER_BULLET_HIT; +SoundEvent* SoundEvents::ENTITY_SHULKER_BULLET_HIT_2; +SoundEvent* SoundEvents::MOB_SILVERFISH_IDLE_2; // name guessed +SoundEvent* SoundEvents::MOB_SILVERFISH_KILL_2; +SoundEvent* SoundEvents::MOB_SILVERFISH_HIT_2; +SoundEvent* SoundEvents::MOB_SILVERFISH_STEP_2; // name guessed +SoundEvent* SoundEvents::MOB_SKELETON_IDLE; +SoundEvent* SoundEvents::MOB_SKELETON_DEATH; +SoundEvent* SoundEvents::MOB_SKELETON_HURT; // name guessed +SoundEvent* SoundEvents::RANDOM_BOW_8; +SoundEvent* SoundEvents::MOB_SKELETON_STEP; +SoundEvent* SoundEvents::MOB_HORSE_SKELETON_IDLE; // name guessed +SoundEvent* SoundEvents::MOB_HORSE_SKELETON_DEATH; +SoundEvent* SoundEvents::MOB_HORSE_SKELETON_HIT; +SoundEvent* SoundEvents::MOB_SLIME_BIG_3; // name guessed +SoundEvent* SoundEvents::MOB_SLIME_SMALL; +SoundEvent* SoundEvents::MOB_SLIME_SMALL_2; +SoundEvent* SoundEvents::MOB_SLIME_BIG_4; // name guessed +SoundEvent* SoundEvents::MOB_SLIME_SMALL_3; +SoundEvent* SoundEvents::MOB_SLIME_ATTACK; +SoundEvent* SoundEvents::MOB_SLIME_BIG_5; // name guessed +SoundEvent* SoundEvents::MOB_SLIME_BIG_6; +SoundEvent* SoundEvents::MOB_SLIME_BIG_7; +SoundEvent* SoundEvents::MOB_SLIME_BIG_8; // name guessed +SoundEvent* SoundEvents::MOB_SLIME_SMALL_4; +SoundEvent* SoundEvents::MOB_SLIME_SMALL_5; +SoundEvent* SoundEvents::MOB_MAGMACUBE_SMALL; // name guessed +SoundEvent* SoundEvents::MOB_SLIME_SMALL_6; +SoundEvent* SoundEvents::MOB_SLIME_SMALL_7; +SoundEvent* SoundEvents::MOB_SLIME_SMALL_8; // name guessed +SoundEvent* SoundEvents::MOB_SLIME_SMALL_9; +SoundEvent* SoundEvents::RANDOM_BOW_9; +SoundEvent* SoundEvents::ENTITY_SNOWMAN_AMBIENT; // name guessed +SoundEvent* SoundEvents::ENTITY_SNOWMAN_DEATH; +SoundEvent* SoundEvents::ENTITY_SNOWMAN_HURT; +SoundEvent* SoundEvents::RANDOM_BOW_10; // name guessed +SoundEvent* SoundEvents::DIG_SNOW; +SoundEvent* SoundEvents::STEP_SNOW; +SoundEvent* SoundEvents::STEP_SNOW_2; // name guessed +SoundEvent* SoundEvents::DIG_SNOW_2; +SoundEvent* SoundEvents::STEP_SNOW_3; +SoundEvent* SoundEvents::MOB_SPIDER_IDLE; // name guessed +SoundEvent* SoundEvents::MOB_SPIDER_DEATH; +SoundEvent* SoundEvents::MOB_SPIDER_IDLE_2; +SoundEvent* SoundEvents::MOB_SPIDER_STEP; // name guessed +SoundEvent* SoundEvents::RANDOM_GLASS_2; +SoundEvent* SoundEvents::RANDOM_BOW_11; +SoundEvent* SoundEvents::ENTITY_SQUID_IDLE; // name guessed +SoundEvent* SoundEvents::ENTITY_SQUID_DEATH; +SoundEvent* SoundEvents::ENTITY_SQUID_HURT; +SoundEvent* SoundEvents::DIG_STONE_6; // name guessed +SoundEvent* SoundEvents::STEP_STONE_9; +SoundEvent* SoundEvents::STEP_STONE_10; +SoundEvent* SoundEvents::DIG_STONE_7; // name guessed +SoundEvent* SoundEvents::STEP_STONE_11; +SoundEvent* SoundEvents::RANDOM_CLICK_7; +SoundEvent* SoundEvents::RANDOM_CLICK_8; // name guessed +SoundEvent* SoundEvents::RANDOM_CLICK_9; +SoundEvent* SoundEvents::RANDOM_CLICK_10; +SoundEvent* SoundEvents::ENTITY_STRAY_IDLE; // name guessed +SoundEvent* SoundEvents::ENTITY_STRAY_DEATH; +SoundEvent* SoundEvents::ENTITY_STRAY_HURT; +SoundEvent* SoundEvents::ENTITY_STRAY_STEP; // name guessed +SoundEvent* SoundEvents::ENCHANT_THORNS_HIT; +SoundEvent* SoundEvents::RANDOM_FUSE_2; +SoundEvent* SoundEvents::RANDOM_CLICK_11; // name guessed +SoundEvent* SoundEvents::RANDOM_CLICK_12; +SoundEvent* SoundEvents::RANDOM_CLICK_13; +SoundEvent* SoundEvents::RANDOM_BOWHIT_2; // name guessed +SoundEvent* SoundEvents::RANDOM_CLICK; +SoundEvent* SoundEvents::ENTITY_VEX_IDLE; +SoundEvent* SoundEvents::ENTITY_VEX_CHARGE; // name guessed +SoundEvent* SoundEvents::ENTITY_VEX_DEATH; +SoundEvent* SoundEvents::ENTITY_VEX_HURT; +SoundEvent* SoundEvents::MOB_VILLAGER_IDLE; // name guessed +SoundEvent* SoundEvents::MOB_VILLAGER_DEATH; +SoundEvent* SoundEvents::MOB_VILLAGER_HIT; +SoundEvent* SoundEvents::MOB_VILLAGER_NO; // name guessed +SoundEvent* SoundEvents::MOB_VILLAGER_HAGGLE; +SoundEvent* SoundEvents::MOB_VILLAGER_YES; +SoundEvent* SoundEvents::ENTITY_VINDICATION_ILLAGER_AMBIENT; // name guessed +SoundEvent* SoundEvents::ENTITY_VINDICATION_ILLAGER_DEATH; +SoundEvent* SoundEvents::ENTITY_VINDICATION_ILLAGER_HURT; +SoundEvent* SoundEvents::BLOCK_WATERLILY_PLACE; // name guessed +SoundEvent* SoundEvents::LIQUID_WATER; +SoundEvent* SoundEvents::AMBIENT_WEATHER_RAIN; +SoundEvent* SoundEvents::AMBIENT_WEATHER_RAIN_2; // name guessed +SoundEvent* SoundEvents::ENTITY_WITCH_IDLE; +SoundEvent* SoundEvents::ENTITY_WITCH_DEATH; +SoundEvent* SoundEvents::ENTITY_WITCH_DRINK; // name guessed +SoundEvent* SoundEvents::ENTITY_WITCH_HURT; +SoundEvent* SoundEvents::ENTITY_WITCH_THROW; +SoundEvent* SoundEvents::MOB_WITHER_IDLE; // name guessed +SoundEvent* SoundEvents::MOB_ZOMBIE_WOODBREAK; +SoundEvent* SoundEvents::MOB_WITHER_DEATH; +SoundEvent* SoundEvents::MOB_WITHER_HURT; // name guessed +SoundEvent* SoundEvents::MOB_WITHER_SHOOT; +SoundEvent* SoundEvents::MOB_WITHER_SPAWN; +SoundEvent* SoundEvents::MOB_SKELETON_IDLE_2; // name guessed +SoundEvent* SoundEvents::MOB_SKELETON_DEATH_2; +SoundEvent* SoundEvents::MOB_SKELETON_HURT_2; +SoundEvent* SoundEvents::MOB_SKELETON_STEP_2; // name guessed +SoundEvent* SoundEvents::MOB_WOLF_BARK; +SoundEvent* SoundEvents::MOB_WOLF_DEATH; +SoundEvent* SoundEvents::MOB_WOLF_GROWL; // name guessed +SoundEvent* SoundEvents::MOB_WOLF_HOWL; +SoundEvent* SoundEvents::MOB_WOLF_HURT; +SoundEvent* SoundEvents::MOB_WOLF_PANTING; // name guessed +SoundEvent* SoundEvents::MOB_WOLF_SHAKE; +SoundEvent* SoundEvents::MOB_WOLF_STEP; +SoundEvent* SoundEvents::MOB_WOLF_WHINE; // name guessed +SoundEvent* SoundEvents::BLOCK_WOODEN_DOOR_CLOSE; +SoundEvent* SoundEvents::BLOCK_WOODEN_DOOR_OPEN; +SoundEvent* SoundEvents::BLOCK_WOODEN_TRAPDOOR_CLOSE; // name guessed +SoundEvent* SoundEvents::BLOCK_WOODEN_TRAPDOOR_OPEN; +SoundEvent* SoundEvents::DIG_WOOD_4; +SoundEvent* SoundEvents::STEP_WOOD; // name guessed +SoundEvent* SoundEvents::STEP_WOOD_2; +SoundEvent* SoundEvents::DIG_WOOD_5; +SoundEvent* SoundEvents::STEP_WOOD_3; // name guessed +SoundEvent* SoundEvents::RANDOM_CLICK_14; +SoundEvent* SoundEvents::RANDOM_CLICK_15; +SoundEvent* SoundEvents::RANDOM_CLICK_16; // name guessed +SoundEvent* SoundEvents::RANDOM_CLICK_17; +SoundEvent* SoundEvents::MOB_ZOMBIE_IDLE; +SoundEvent* SoundEvents::MOB_ZOMBIE_WOOD; // name guessed +SoundEvent* SoundEvents::MOB_ZOMBIE_METAL; +SoundEvent* SoundEvents::MOB_ZOMBIE_WOODBREAK_2; +SoundEvent* SoundEvents::MOB_ZOMBIE_DEATH; // name guessed +SoundEvent* SoundEvents::MOB_ZOMBIE_HURT; +SoundEvent* SoundEvents::MOB_ZOMBIE_INFECT; +SoundEvent* SoundEvents::MOB_ZOMBIE_STEP; // name guessed +SoundEvent* SoundEvents::MOB_HORSE_ZOMBIE_IDLE; +SoundEvent* SoundEvents::MOB_HORSE_ZOMBIE_DEATH; +SoundEvent* SoundEvents::MOB_HORSE_ZOMBIE_HIT; // name guessed +SoundEvent* SoundEvents::MOB_ZOMBIEPIG_IDLE; +SoundEvent* SoundEvents::MOB_ZOMBIEPIG_ANGRY; +SoundEvent* SoundEvents::MOB_ZOMBIEPIG_DEATH; // name guessed +SoundEvent* SoundEvents::MOB_ZOMBIEPIG_HURT; +SoundEvent* SoundEvents::MOB_ZOMBIE_IDLE_2; +SoundEvent* SoundEvents::MOB_ZOMBIE_UNFECT; // name guessed +SoundEvent* SoundEvents::MOB_ZOMBIE_REMEDY; +SoundEvent* SoundEvents::MOB_ZOMBIE_DEATH_2; +SoundEvent* SoundEvents::MOB_ZOMBIE_HURT_2; // name guessed +SoundEvent* SoundEvents::MOB_ZOMBIE_STEP_2; +SoundEvent* SoundEvents::MG01_SHOWDOWN; +SoundEvent* SoundEvents::MG01_CELEBRATION; // name guessed +SoundEvent* SoundEvents::MG01_CHEST; +SoundEvent* SoundEvents::MG01_DEATH; +SoundEvent* SoundEvents::MG01_GRACE; // name guessed +SoundEvent* SoundEvents::MG01_GRACEZERO; +SoundEvent* SoundEvents::MG01_LOBBY; +SoundEvent* SoundEvents::MG01_LOBBYACCENT; // name guessed +SoundEvent* SoundEvents::MG01_LOBBYZERO; +SoundEvent* SoundEvents::MG01_GAMESTART; +SoundEvent* SoundEvents::MG01_STARTCOUNTDOWN; // name guessed +SoundEvent* SoundEvents::MG02_SHOWDOWN; +SoundEvent* SoundEvents::MG02_GAMESTART; +SoundEvent* SoundEvents::MG02_GAMEEND; // name guessed +SoundEvent* SoundEvents::MG02_DEATH; +SoundEvent* SoundEvents::MG02_STARTCOUNTDOWN; +SoundEvent* SoundEvents::MG02_FALLING; // name guessed +SoundEvent* SoundEvents::MG03_DEATH; +SoundEvent* SoundEvents::MG03_CHECKPOINT; +SoundEvent* SoundEvents::MG03_BESTTIME; // name guessed +SoundEvent* SoundEvents::MG03_FINISHLINE; +SoundEvent* SoundEvents::MG03_FINISHLINEBESTSCORE; +SoundEvent* SoundEvents::MG03_FINISHLINEBESTTIME; // name guessed +SoundEvent* SoundEvents::MG03_FINISHLINE1ST; +SoundEvent* SoundEvents::MG03_FINISHLINE1STBESTSCORE; +SoundEvent* SoundEvents::MG03_FINISHLINE1STBESTTIME; // name guessed +SoundEvent* SoundEvents::MG03_FINISHLINE2ND; +SoundEvent* SoundEvents::MG03_FINISHLINE2NDBESTSCORE; +SoundEvent* SoundEvents::MG03_FINISHLINE2NDBESTTIME; // name guessed +SoundEvent* SoundEvents::MG03_FINISHLINE3RD; +SoundEvent* SoundEvents::MG03_FINISHLINE3RDBESTSCORE; +SoundEvent* SoundEvents::MG03_FINISHLINE3RDBESTTIME; // name guessed +SoundEvent* SoundEvents::MG03_WINNER; +SoundEvent* SoundEvents::MG03_WINNERANNOUNCE; +SoundEvent* SoundEvents::MG03_BESTSCORE; // name guessed +SoundEvent* SoundEvents::MG03_REDALERTLOOP; +SoundEvent* SoundEvents::MG03_FARALERTSOLO; +SoundEvent* SoundEvents::MG03_EMERALDPOINTTICK; // name guessed +SoundEvent* SoundEvents::MG03_EMERALDPOINTTOK; +SoundEvent* SoundEvents::MG03_GOLDPOINTTICK; +SoundEvent* SoundEvents::MG03_GOLDPOINTTOK; // name guessed +SoundEvent* SoundEvents::MG03_DIAMONDPOINT; +SoundEvent* SoundEvents::MG03_RESPAWN; +SoundEvent* SoundEvents::MG03_COUNTDOWNZERO; // name guessed +SoundEvent* SoundEvents::MG03_FALLBIG_ALIAS; +SoundEvent* SoundEvents::MG03_FALLSMALL_ALIAS; +SoundEvent* SoundEvents::MG03_HIT_ALIAS; // name guessed +SoundEvent* SoundEvents::MOB_BLAZE_BREATHE_ALIAS; +SoundEvent* SoundEvents::RANDOM_FUSE_ALIAS; +SoundEvent* SoundEvents::MOB_GUARDIAN_LAND_IDLE_ALIAS; // name guessed +SoundEvent* SoundEvents::MOB_ENDERDRAGON_GROWL_ALIAS; +SoundEvent* SoundEvents::MOB_ENDERMEN_IDLE_ALIAS; +SoundEvent* SoundEvents::MOB_SILVERFISH_IDLE_ALIAS; // name guessed +SoundEvent* SoundEvents::ENTITY_EVOCATION_ILLAGER_AMBIENT_ALIAS; +SoundEvent* SoundEvents::MOB_GHAST_MOAN_ALIAS; +SoundEvent* SoundEvents::ENTITY_HUSK_IDLE_ALIAS; // name guessed +SoundEvent* SoundEvents::ENTITY_ILLUSION_ILLAGER_AMBIENT_ALIAS; +SoundEvent* SoundEvents::MOB_MAGMACUBE_BIG_ALIAS; +SoundEvent* SoundEvents::ENTITY_POLARBEAR_IDLE_ALIAS; // name guessed +SoundEvent* SoundEvents::ENTITY_SHULKER_AMBIENT_ALIAS; +SoundEvent* SoundEvents::MOB_SILVERFISH_IDLE_ALIAS_2; +SoundEvent* SoundEvents::MOB_SKELETON_IDLE_ALIAS; // name guessed +SoundEvent* SoundEvents::MOB_SLIME_BIG_ALIAS; +SoundEvent* SoundEvents::MOB_SPIDER_IDLE_ALIAS; +SoundEvent* SoundEvents::ENTITY_STRAY_IDLE_ALIAS; // name guessed +SoundEvent* SoundEvents::ENTITY_VEX_IDLE_ALIAS; +SoundEvent* SoundEvents::ENTITY_VINDICATION_ILLAGER_AMBIENT_ALIAS; +SoundEvent* SoundEvents::ENTITY_WITCH_IDLE_ALIAS; // name guessed +SoundEvent* SoundEvents::MOB_WITHER_IDLE_ALIAS; +SoundEvent* SoundEvents::MOB_SKELETON_IDLE_ALIAS_2; +SoundEvent* SoundEvents::MOB_WOLF_BARK_ALIAS; // name guessed +SoundEvent* SoundEvents::MOB_ZOMBIE_IDLE_ALIAS; +SoundEvent* SoundEvents::MOB_ZOMBIEPIG_IDLE_ALIAS; +SoundEvent* SoundEvents::MOB_ZOMBIE_IDLE_ALIAS_2; // name guessed +SoundEvent* SoundEvents::RANDOM_EXPLODE_ALIAS; +SoundEvent* SoundEvents::RANDOM_SPLASH_ALIAS; +SoundEvent* SoundEvents::RANDOM_SPLASH_ALIAS_2; // name guessed +SoundEvent* SoundEvents::RANDOM_SPLASH_ALIAS_3; +SoundEvent* SoundEvents::RANDOM_SPLASH_ALIAS_4; +SoundEvent* SoundEvents::RANDOM_SPLASH_ALIAS_5; // name guessed +SoundEvent* SoundEvents::RANDOM_SPLASH_ALIAS_6; +SoundEvent* SoundEvents::RANDOM_SPLASH_ALIAS_7; +SoundEvent* SoundEvents::RANDOM_SPLASH_ALIAS_8; // name guessed + +SoundEvent* SoundEvents::registerSound(const std::wstring& name) { + SoundEvent* event = SoundEvent::registerEvent(new SoundEvent(name, 16.0f)); + return event; +} + +void SoundEvents::staticCtor() { + SoundEvents::BACK = SoundEvent::registerEvent(new SoundEvent(L"back", 16.0f, 1)); // name guessed + SoundEvents::CRAFT = SoundEvent::registerEvent(new SoundEvent(L"craft", 16.0f, 1)); + SoundEvents::CRAFTFAIL = SoundEvent::registerEvent(new SoundEvent(L"craftfail", 16.0f, 1)); + SoundEvents::FOCUS = SoundEvent::registerEvent(new SoundEvent(L"focus", 16.0f, 1)); // name guessed + SoundEvent::UI_PRESS = SoundEvent::registerEvent(new SoundEvent(L"press", 16.0f, 1)); + SoundEvents::SCROLL = SoundEvent::registerEvent(new SoundEvent(L"scroll", 16.0f, 1)); + SoundEvents::AMBIENT_CAVE_CAVE = registerSound(L"ambient.cave.cave"); // name guessed + SoundEvents::DIG_STONE = registerSound(L"dig.stone"); + SoundEvents::RANDOM_ANVIL_BREAK = registerSound(L"random.anvil_break"); + SoundEvents::RANDOM_ANVIL_LAND = registerSound(L"random.anvil_land"); // name guessed + SoundEvents::STEP_STONE = registerSound(L"step.stone"); + SoundEvents::RANDOM_ANVIL_LAND_2 = registerSound(L"random.anvil_land"); + SoundEvents::RANDOM_ANVIL_LAND_3 = registerSound(L"random.anvil_land"); // name guessed + SoundEvents::STEP_STONE_2 = registerSound(L"step.stone"); + SoundEvents::RANDOM_ANVIL_USE = registerSound(L"random.anvil_use"); + SoundEvents::ENTITY_ARMORSTAND_BREAK = registerSound(L"entity.armorstand.break"); // name guessed + SoundEvents::DIG_WOOD = registerSound(L"dig.wood"); + SoundEvents::ENTITY_ARMORSTAND_HIT = registerSound(L"entity.armorstand.hit"); + SoundEvents::DIG_STONE_2 = registerSound(L"dig.stone"); // name guessed + SoundEvents::ITEM_ARMOR_EQUIP_CHAIN = registerSound(L"item.armor.equip_chain"); + SoundEvents::ITEM_ARMOR_EQUIP_DIAMOND = registerSound(L"item.armor.equip_diamond"); + SoundEvents::ITEM_ARMOR_EQUIP_GENERIC = registerSound(L"item.armor.equip_generic"); // name guessed + SoundEvents::ITEM_ARMOR_EQUIP_GOLD = registerSound(L"item.armor.equip_gold"); + SoundEvents::ITEM_ARMOR_EQUIP_IRON = registerSound(L"item.armor.equip_iron"); + SoundEvents::ITEM_ARMOR_EQUIP_LEATHER = registerSound(L"item.armor.equip_leather"); // name guessed + SoundEvents::ITEM_ARMOR_EQUIP_LEATHER_2 = SoundEvents::ITEM_ARMOR_EQUIP_LEATHER; + SoundEvents::RANDOM_BOWHIT = registerSound(L"random.bowhit"); + SoundEvents::RANDOM_SUCCESSFUL_HIT = registerSound(L"random.successful_hit"); // name guessed + SoundEvents::RANDOM_BOW = registerSound(L"random.bow"); + SoundEvents::MOB_BAT_IDLE = registerSound(L"mob.bat.idle"); + SoundEvents::MOB_BAT_DEATH = registerSound(L"mob.bat.death"); // name guessed + SoundEvents::MOB_BAT_HURT = registerSound(L"mob.bat.hurt"); + SoundEvents::MOB_BAT_TAKEOFF = registerSound(L"mob.bat.takeoff"); + SoundEvents::MOB_BLAZE_BREATHE = registerSound(L"mob.blaze.breathe"); // name guessed + SoundEvents::FIRE_FIRE = registerSound(L"fire.fire"); + SoundEvents::MOB_BLAZE_DEATH = registerSound(L"mob.blaze.death"); + SoundEvents::MOB_BLAZE_HIT = registerSound(L"mob.blaze.hit"); // name guessed + SoundEvents::MOB_GHAST_FIREBALL = registerSound(L"mob.ghast.fireball"); + SoundEvents::ENTITY_BOAT_PADDLE_LAND = registerSound(L"entity.boat.paddle_land"); + SoundEvents::ENTITY_BOAT_PADDLE_WATER = registerSound(L"entity.boat.paddle_water"); // name guessed + SoundEvents::ENTITY_BOBBER_RETRIEVE = registerSound(L"entity.bobber.retrieve"); + SoundEvents::ENTITY_BOBBER_THROW = registerSound(L"entity.bobber.throw"); + SoundEvents::ENTITY_BOBBER_RETRIEVE_2 = registerSound(L"entity.bobber.retrieve"); // name guessed + SoundEvents::ITEM_BOTTLE_EMPTY = registerSound(L"item.bottle.empty"); + SoundEvents::ITEM_BOTTLE_FILL = registerSound(L"item.bottle.fill"); + SoundEvents::ITEM_BOTTLE_FILL_DRAGONBREATH + = registerSound(L"item.bottle.fill_dragonbreath"); // name guessed + SoundEvents::BLOCK_BREWING_STAND_BREW = registerSound(L"block.brewing_stand.brew"); + SoundEvents::ITEM_BUCKET_EMPTY = registerSound(L"item.bucket.empty"); + SoundEvents::ITEM_BUCKET_EMPTY_LAVA = registerSound(L"item.bucket.empty_lava"); // name guessed + SoundEvents::ITEM_BUCKET_FILL = registerSound(L"item.bucket.fill"); + SoundEvents::ITEM_BUCKET_FILL_LAVA = registerSound(L"item.bucket.fill_lava"); + SoundEvents::MOB_CAT_MEOW = registerSound(L"mob.cat.meow"); // name guessed + SoundEvents::MOB_CAT_HIT = registerSound(L"mob.cat.hit"); + SoundEvents::MOB_CAT_HISS = registerSound(L"mob.cat.hiss"); + SoundEvents::MOB_CAT_HIT_2 = registerSound(L"mob.cat.hit"); // name guessed + SoundEvents::MOB_CAT_PURR = registerSound(L"mob.cat.purr"); + SoundEvents::MOB_CAT_PURREOW = registerSound(L"mob.cat.purreow"); + SoundEvents::RANDOM_CHESTCLOSED = registerSound(L"random.chestclosed"); // name guessed + SoundEvents::RANDOM_DOOR_CLOSE = registerSound(L"random.door_close"); + SoundEvents::RANDOM_CHESTOPEN = registerSound(L"random.chestopen"); + SoundEvents::MOB_CHICKEN_IDLE = registerSound(L"mob.chicken.idle"); // name guessed + SoundEvents::MOB_CHICKEN_HURT = registerSound(L"mob.chicken.hurt"); + SoundEvents::MOB_CHICKEN_PLOP = registerSound(L"mob.chicken.plop"); + SoundEvents::MOB_CHICKEN_HURT_2 = registerSound(L"mob.chicken.hurt"); // name guessed + SoundEvents::MOB_CHICKEN_STEP = registerSound(L"mob.chicken.step"); + SoundEvents::BLOCK_CHORUS_FLOWER_DEATH = registerSound(L"block.chorus_flower.death"); + SoundEvents::BLOCK_CHORUS_FLOWER_GROW = registerSound(L"block.chorus_flower.grow"); // name guessed + SoundEvents::MOB_ENDERMEN_PORTAL = registerSound(L"mob.endermen.portal"); + SoundEvents::DIG_CLOTH = registerSound(L"dig.cloth"); + SoundEvents::STEP_CLOTH = registerSound(L"step.cloth"); // name guessed + SoundEvents::STEP_CLOTH_2 = registerSound(L"step.cloth"); + SoundEvents::DIG_CLOTH_2 = registerSound(L"dig.cloth"); + SoundEvents::STEP_CLOTH_3 = registerSound(L"step.cloth"); // name guessed + SoundEvents::RANDOM_CLICK_73 = registerSound(L"random.click"); + SoundEvents::MOB_COW_IDLE = registerSound(L"mob.cow.idle"); + SoundEvents::MOB_COW_HURT = registerSound(L"mob.cow.hurt"); // name guessed + SoundEvents::MOB_COW_HURT_2 = registerSound(L"mob.cow.hurt"); + SoundEvents::ENTITY_COW_MILK = registerSound(L"entity.cow.milk"); + SoundEvents::MOB_COW_STEP = registerSound(L"mob.cow.step"); // name guessed + SoundEvents::MOB_CREEPER_DEATH = registerSound(L"mob.creeper.death"); + SoundEvents::MOB_CREEPER_HURT = registerSound(L"mob.creeper.hurt"); + SoundEvents::RANDOM_FUSE = registerSound(L"random.fuse"); // name guessed + SoundEvents::RANDOM_CLICK_2 = registerSound(L"random.click"); + SoundEvents::RANDOM_CLICK_3 = registerSound(L"random.click"); + SoundEvents::RANDOM_BOW_2 = registerSound(L"random.bow"); // name guessed + SoundEvents::MOB_HORSE_DONKEY_IDLE = registerSound(L"mob.horse.donkey.idle"); + SoundEvents::MOB_HORSE_DONKEY_ANGRY = registerSound(L"mob.horse.donkey.angry"); + SoundEvents::MOB_CHICKEN_PLOP_2 = registerSound(L"mob.chicken.plop"); // name guessed + SoundEvents::MOB_HORSE_DONKEY_DEATH = registerSound(L"mob.horse.donkey.death"); + SoundEvents::MOB_HORSE_DONKEY_HIT = registerSound(L"mob.horse.donkey.hit"); + SoundEvents::RANDOM_BOW_3 = registerSound(L"random.bow"); // name guessed + SoundEvents::MOB_GUARDIAN_ELDER_IDLE = registerSound(L"mob.guardian.elder_idle"); + SoundEvents::MOB_GUARDIAN_LAND_IDLE = registerSound(L"mob.guardian.land_idle"); + SoundEvents::MOB_GUARDIAN_CURSE = registerSound(L"mob.guardian.curse"); // name guessed + SoundEvents::MOB_GUARDIAN_ELDER_DEATH = registerSound(L"mob.guardian.elder_death"); + SoundEvents::MOB_GUARDIAN_LAND_DEATH = registerSound(L"mob.guardian.land_death"); + SoundEvents::MOB_GUARDIAN_FLOP = registerSound(L"mob.guardian.flop"); // name guessed + SoundEvents::MOB_GUARDIAN_ELDER_HIT = registerSound(L"mob.guardian.elder_hit"); + SoundEvents::MOB_GUARDIAN_LAND_HIT = registerSound(L"mob.guardian.land_hit"); + SoundEvents::ITEM_ELYTRA_FLYING = registerSound(L"item.elytra.flying"); // name guessed + SoundEvents::BLOCK_ENCHANTMENT_TABLE_ENCHANT = registerSound(L"block.enchantment_table.enchant"); + SoundEvents::BLOCK_ENDERCHEST_CLOSE = registerSound(L"block.enderchest.close"); + SoundEvents::BLOCK_ENDERCHEST_OPEN = registerSound(L"block.enderchest.open"); // name guessed + SoundEvents::MOB_ENDERDRAGON_GROWL + = SoundEvent::registerEvent(new SoundEvent(L"mob.enderdragon.growl", 100.0f)); + SoundEvents::MOB_ENDERDRAGON_END + = SoundEvent::registerEvent(new SoundEvent(L"mob.enderdragon.end", 100.0f)); + SoundEvents::RANDOM_EXPLODE + = SoundEvent::registerEvent(new SoundEvent(L"random.explode", 100.0f)); // name guessed + SoundEvents::MOB_ENDERDRAGON_WINGS + = SoundEvent::registerEvent(new SoundEvent(L"mob.enderdragon.wings", 100.0f)); + SoundEvents::MOB_ENDERDRAGON_GROWL_2 + = SoundEvent::registerEvent(new SoundEvent(L"mob.enderdragon.growl", 100.0f)); + SoundEvents::MOB_ENDERDRAGON_HIT + = SoundEvent::registerEvent(new SoundEvent(L"mob.enderdragon.hit", 100.0f)); + SoundEvents::MOB_GHAST_FIREBALL_2 + = SoundEvent::registerEvent(new SoundEvent(L"mob.ghast.fireball", 100.0f)); + SoundEvents::ENTITY_ENDEREYE_LAUNCH = registerSound(L"entity.endereye.launch"); // name guessed + SoundEvents::ENTITY_ENDEREYE_DEATH = registerSound(L"entity.endereye.death"); + SoundEvents::MOB_ENDERMEN_IDLE = registerSound(L"mob.endermen.idle"); + SoundEvents::MOB_ENDERMEN_DEATH = registerSound(L"mob.endermen.death"); // name guessed + SoundEvents::MOB_ENDERMEN_HIT = registerSound(L"mob.endermen.hit"); + SoundEvents::MOB_ENDERMAN_SCREAM = registerSound(L"mob.enderman.scream"); + SoundEvents::MOB_ENDERMAN_STARE = registerSound(L"mob.enderman.stare"); // name guessed + SoundEvents::MOB_ENDERMEN_PORTAL_2 = registerSound(L"mob.endermen.portal"); + SoundEvents::MOB_SILVERFISH_IDLE = registerSound(L"mob.silverfish.idle"); + SoundEvents::MOB_SILVERFISH_KILL = registerSound(L"mob.silverfish.kill"); // name guessed + SoundEvents::MOB_SILVERFISH_HIT = registerSound(L"mob.silverfish.hit"); + SoundEvents::MOB_SILVERFISH_STEP = registerSound(L"mob.silverfish.step"); + SoundEvents::RANDOM_BOW_4 = registerSound(L"random.bow"); // name guessed + SoundEvents::RANDOM_EXPLODE_2 = registerSound(L"random.explode"); + SoundEvents::BLOCK_END_PORTAL_FRAME_FILL = registerSound(L"block.end_portal_frame.fill"); + SoundEvents::BLOCK_END_PORTAL_SPAWN = registerSound(L"block.end_portal.spawn"); // name guessed + SoundEvents::ENTITY_EVOCATION_FANGS_ATTACK = registerSound(L"entity.evocation_fangs.attack"); + SoundEvents::ENTITY_EVOCATION_ILLAGER_AMBIENT = registerSound(L"entity.evocation_illager.ambient"); + SoundEvents::ENTITY_EVOCATION_ILLAGER_CAST_SPELL + = registerSound(L"entity.evocation_illager.cast_spell"); // name guessed + SoundEvents::ENTITY_EVOCATION_ILLAGER_DEATH = registerSound(L"entity.evocation_illager.death"); + SoundEvents::ENTITY_EVOCATION_ILLAGER_HURT = registerSound(L"entity.evocation_illager.hurt"); + SoundEvents::ENTITY_EVOCATION_ILLAGER_PREPARE_ATTACK + = registerSound(L"entity.evocation_illager.prepare_attack"); + SoundEvents::ENTITY_EVOCATION_ILLAGER_PREPARE_SUMMON + = registerSound(L"entity.evocation_illager.prepare_summon"); + SoundEvents::ENTITY_EVOCATION_ILLAGER_PREPARE_WOLOLO + = registerSound(L"entity.evocation_illager.prepare_wololo"); + SoundEvents::RANDOM_BOW_5 = registerSound(L"random.bow"); // name guessed + SoundEvents::RANDOM_ORB = registerSound(L"random.orb"); + SoundEvents::RANDOM_ORB_2 = registerSound(L"random.orb"); + SoundEvents::BLOCK_FENCE_GATE_CLOSE = registerSound(L"block.fence_gate.close"); // name guessed + SoundEvents::BLOCK_FENCE_GATE_OPEN = registerSound(L"block.fence_gate.open"); + SoundEvents::MOB_GHAST_FIREBALL_3 = registerSound(L"mob.ghast.fireball"); + SoundEvents::FIREWORKS_BLAST + = SoundEvent::registerEvent(new SoundEvent(L"fireworks.blast", 100.0f)); // name guessed + SoundEvents::FIREWORKS_BLAST_FAR + = SoundEvent::registerEvent(new SoundEvent(L"fireworks.blast_far", 100.0f)); + SoundEvents::FIREWORKS_LARGE_BLAST + = SoundEvent::registerEvent(new SoundEvent(L"fireworks.large_blast", 100.0f)); + SoundEvents::FIREWORKS_LARGE_BLAST_FAR + = SoundEvent::registerEvent(new SoundEvent(L"fireworks.large_blast_far", 100.0f)); + SoundEvents::FIREWORKS_LAUNCH + = SoundEvent::registerEvent(new SoundEvent(L"fireworks.launch", 100.0f)); // name guessed + SoundEvents::RANDOM_BOW_6 = SoundEvent::registerEvent(new SoundEvent(L"random.bow", 100.0f)); + SoundEvents::FIREWORKS_TWINKLE = SoundEvent::registerEvent(new SoundEvent(L"fireworks.twinkle", 100.0f)); + SoundEvents::FIREWORKS_TWINKLE_FAR + = SoundEvent::registerEvent(new SoundEvent(L"fireworks.twinkle_far", 100.0f)); + SoundEvents::FIRE_AMBIENT = registerSound(L"fire.fire"); + SoundEvents::RANDOM_FIZZ = registerSound(L"random.fizz"); // name guessed + SoundEvents::FIRE_IGNITE = registerSound(L"fire.ignite"); + SoundEvents::BLOCK_FURNACE_FIRE_CRACKLE = registerSound(L"block.furnace.fire_crackle"); + SoundEvents::DAMAGE_FALLBIG = registerSound(L"damage.fallbig"); // name guessed + SoundEvents::RANDOM_FIZZ_2 = registerSound(L"random.fizz"); + SoundEvents::DAMAGE_HURTFLESH = registerSound(L"damage.hurtflesh"); + SoundEvents::RANDOM_DRINK = registerSound(L"random.drink"); // name guessed + SoundEvents::RANDOM_EAT = registerSound(L"random.eat"); + SoundEvents::RANDOM_EXPLODE_3 = registerSound(L"random.explode"); + SoundEvents::RANDOM_FIZZ_3 = registerSound(L"random.fizz"); // name guessed + SoundEvents::DAMAGE_HURTFLESH_2 = registerSound(L"damage.hurtflesh"); + SoundEvents::DAMAGE_FALLSMALL = registerSound(L"damage.fallsmall"); + SoundEvents::RANDOM_SPLASH = registerSound(L"random.splash"); // name guessed + SoundEvents::LIQUID_SWIM = registerSound(L"liquid.swim"); + SoundEvents::MOB_GHAST_MOAN = SoundEvent::registerEvent(new SoundEvent(L"mob.ghast.moan", 64.0f)); + SoundEvents::MOB_GHAST_DEATH + = SoundEvent::registerEvent(new SoundEvent(L"mob.ghast.death", 64.0f)); // name guessed + SoundEvents::MOB_GHAST_SCREAM = SoundEvent::registerEvent(new SoundEvent(L"mob.ghast.scream", 64.0f)); + SoundEvents::MOB_GHAST_SCREAM_2 = SoundEvent::registerEvent(new SoundEvent(L"mob.ghast.scream", 64.0f)); + SoundEvents::MOB_GHAST_FIREBALL_4 + = SoundEvent::registerEvent(new SoundEvent(L"mob.ghast.fireball", 64.0f)); + SoundEvents::MOB_GHAST_CHARGE + = SoundEvent::registerEvent(new SoundEvent(L"mob.ghast.charge", 64.0f)); // name guessed + SoundEvents::RANDOM_GLASS = registerSound(L"random.glass"); + SoundEvents::STEP_STONE_3 = registerSound(L"step.stone"); + SoundEvents::STEP_STONE_4 = registerSound(L"step.stone"); // name guessed + SoundEvents::DIG_STONE_3 = registerSound(L"dig.stone"); + SoundEvents::STEP_STONE_5 = registerSound(L"step.stone"); + SoundEvents::DIG_GRASS = registerSound(L"dig.grass"); // name guessed + SoundEvents::STEP_GRASS = registerSound(L"step.grass"); + SoundEvents::STEP_GRASS_2 = registerSound(L"step.grass"); + SoundEvents::DIG_GRASS_2 = registerSound(L"dig.grass"); // name guessed + SoundEvents::STEP_GRASS_3 = registerSound(L"step.grass"); + SoundEvents::DIG_GRAVEL = registerSound(L"dig.gravel"); + SoundEvents::STEP_GRAVEL = registerSound(L"step.gravel"); // name guessed + SoundEvents::STEP_GRAVEL_2 = registerSound(L"step.gravel"); + SoundEvents::DIG_GRAVEL_2 = registerSound(L"dig.gravel"); + SoundEvents::STEP_GRAVEL_3 = registerSound(L"step.gravel"); // name guessed + SoundEvents::ENTITY_GUARDIAN_IDLE = registerSound(L"entity.guardian.idle"); + SoundEvents::MOB_GUARDIAN_LAND_IDLE_2 = registerSound(L"mob.guardian.land_idle"); + SoundEvents::MOB_GUARDIAN_ATTACK = registerSound(L"mob.guardian.attack"); // name guessed + SoundEvents::MOB_GUARDIAN_DEATH = registerSound(L"mob.guardian.death"); + SoundEvents::MOB_GUARDIAN_LAND_DEATH_2 = registerSound(L"mob.guardian.land_death"); + SoundEvents::MOB_GUARDIAN_FLOP_2 = registerSound(L"mob.guardian.flop"); // name guessed + SoundEvents::MOB_GUARDIAN_HIT = registerSound(L"mob.guardian.hit"); + SoundEvents::MOB_GUARDIAN_LAND_HIT_2 = registerSound(L"mob.guardian.land_hit"); + SoundEvents::ITEM_HOE_TILL = registerSound(L"item.hoe.till"); // name guessed + SoundEvents::MOB_HORSE_IDLE = registerSound(L"mob.horse.idle"); + SoundEvents::MOB_HORSE_ANGRY = registerSound(L"mob.horse.angry"); + SoundEvents::MOB_HORSE_ARMOR = registerSound(L"mob.horse.armor"); // name guessed + SoundEvents::MOB_HORSE_BREATHE = registerSound(L"mob.horse.breathe"); + SoundEvents::MOB_HORSE_DEATH = registerSound(L"mob.horse.death"); + SoundEvents::ENTITY_HORSE_EAT = registerSound(L"entity.horse.eat"); // name guessed + SoundEvents::MOB_HORSE_GALLOP = registerSound(L"mob.horse.gallop"); + SoundEvents::MOB_HORSE_HIT = registerSound(L"mob.horse.hit"); + SoundEvents::MOB_HORSE_JUMP = registerSound(L"mob.horse.jump"); // name guessed + SoundEvents::MOB_HORSE_LAND = registerSound(L"mob.horse.land"); + SoundEvents::MOB_HORSE_LEATHER = registerSound(L"mob.horse.leather"); + SoundEvents::MOB_HORSE_SOFT = registerSound(L"mob.horse.soft"); // name guessed + SoundEvents::MOB_HORSE_WOOD = registerSound(L"mob.horse.wood"); + SoundEvents::GAME_HOSTILE_HURT_FALL_BIG = registerSound(L"game.hostile.hurt_fall_big"); + SoundEvents::GAME_HOSTILE_DIE = registerSound(L"game.hostile.die"); // name guessed + SoundEvents::DAMAGE_HURTFLESH_3 = registerSound(L"damage.hurtflesh"); + SoundEvents::GAME_HOSTILE_HURT_FALL_SMALL = registerSound(L"game.hostile.hurt_fall_small"); + SoundEvents::GAME_HOSTILE_SWIM_SPLASH = registerSound(L"game.hostile.swim_splash"); // name guessed + SoundEvents::GAME_HOSTILE_SWIM = registerSound(L"game.hostile.swim"); + SoundEvents::ENTITY_HUSK_IDLE = registerSound(L"entity.husk.idle"); + SoundEvents::ENTITY_HUSK_DEATH = registerSound(L"entity.husk.death"); // name guessed + SoundEvents::ENTITY_HUSK_HURT = registerSound(L"entity.husk.hurt"); + SoundEvents::ENTITY_HUSK_STEP = registerSound(L"entity.husk.step"); + SoundEvents::ENTITY_ILLUSION_ILLAGER_AMBIENT + = registerSound(L"entity.illusion_illager.ambient"); // name guessed + SoundEvents::ENTITY_ILLUSION_ILLAGER_CAST_SPELL = registerSound(L"entity.illusion_illager.cast_spell"); + SoundEvents::ENTITY_ILLUSION_ILLAGER_DEATH = registerSound(L"entity.illusion_illager.death"); + SoundEvents::ENTITY_ILLUSION_ILLAGER_HURT + = registerSound(L"entity.illusion_illager.hurt"); // name guessed + SoundEvents::ENTITY_ILLUSION_ILLAGER_MIRROR_MOVE = registerSound(L"entity.illusion_illager.mirror_move"); + SoundEvents::ENTITY_ILLUSION_ILLAGER_PREPARE_BLINDNESS + = registerSound(L"entity.illusion_illager.prepare_blindness"); + SoundEvents::ENTITY_ILLUSION_ILLAGER_PREPARE_MIRROR + = registerSound(L"entity.illusion_illager.prepare_mirror"); + SoundEvents::MOB_IRONGOLEM_THROW = registerSound(L"mob.irongolem.throw"); // name guessed + SoundEvents::MOB_IRONGOLEM_DEATH = registerSound(L"mob.irongolem.death"); + SoundEvents::MOB_IRONGOLEM_HIT = registerSound(L"mob.irongolem.hit"); + SoundEvents::MOB_IRONGOLEM_WALK = registerSound(L"mob.irongolem.walk"); // name guessed + SoundEvents::BLOCK_IRON_DOOR_CLOSE = registerSound(L"block.iron_door.close"); + SoundEvents::BLOCK_IRON_DOOR_OPEN = registerSound(L"block.iron_door.open"); + SoundEvents::BLOCK_IRON_TRAPDOOR_CLOSE = registerSound(L"block.iron_trapdoor.close"); // name guessed + SoundEvents::BLOCK_IRON_TRAPDOOR_OPEN = registerSound(L"block.iron_trapdoor.open"); + SoundEvents::ENTITY_ITEMFRAME_ADDITEM = registerSound(L"entity.itemframe.additem"); + SoundEvents::ENTITY_ITEMFRAME_BREAK = registerSound(L"entity.itemframe.break"); // name guessed + SoundEvents::ENTITY_ITEMFRAME_PLACE = registerSound(L"entity.itemframe.place"); + SoundEvents::ENTITY_ITEMFRAME_REMOVEITEM = registerSound(L"entity.itemframe.removeitem"); + SoundEvents::ENTITY_ITEMFRAME_ROTATEITEM = registerSound(L"entity.itemframe.rotateitem"); // name guessed + SoundEvents::RANDOM_BREAK = registerSound(L"random.break"); + SoundEvent::ITEM_PICKUP = registerSound(L"random.pop"); + SoundEvents::DIG_WOOD_2 = registerSound(L"dig.wood"); // name guessed + SoundEvents::STEP_LADDER = registerSound(L"step.ladder"); + SoundEvents::STEP_LADDER_2 = registerSound(L"step.ladder"); + SoundEvents::DIG_WOOD_3 = registerSound(L"dig.wood"); // name guessed + SoundEvents::STEP_LADDER_3 = registerSound(L"step.ladder"); + SoundEvents::RANDOM_FIZZ_4 = registerSound(L"random.fizz"); + SoundEvents::LIQUID_LAVA = registerSound(L"liquid.lava"); // name guessed + SoundEvents::LIQUID_LAVAPOP = registerSound(L"liquid.lavapop"); + SoundEvents::ENTITY_LEASHKNOT_BREAK = registerSound(L"entity.leashknot.break"); + SoundEvents::ENTITY_LEASHKNOT_PLACE = registerSound(L"entity.leashknot.place"); // name guessed + SoundEvents::RANDOM_CLICK_4 = registerSound(L"random.click"); + SoundEvents::RANDOM_EXPLODE_4 = registerSound(L"random.explode"); + SoundEvents::AMBIENT_WEATHER_THUNDER = registerSound(L"ambient.weather.thunder"); // name guessed + SoundEvents::RANDOM_BOW_7 = registerSound(L"random.bow"); + SoundEvents::ENTITY_LLAMA_AMBIENT = registerSound(L"entity.llama.ambient"); + SoundEvents::ENTITY_LLAMA_ANGRY = registerSound(L"entity.llama.angry"); // name guessed + SoundEvents::MOB_CHICKEN_PLOP_3 = SoundEvents::MOB_CHICKEN_PLOP; + SoundEvents::ENTITY_LLAMA_DEATH = registerSound(L"entity.llama.death"); + SoundEvents::ENTITY_LLAMA_EAT = registerSound(L"entity.llama.eat"); // name guessed + SoundEvents::ENTITY_LLAMA_HURT = registerSound(L"entity.llama.hurt"); + SoundEvents::ENTITY_LLAMA_SPIT = registerSound(L"entity.llama.spit"); + SoundEvents::ENTITY_LLAMA_STEP = registerSound(L"entity.llama.step"); // name guessed + SoundEvents::ENTITY_LLAMA_SWAG = registerSound(L"entity.llama.swag"); + SoundEvents::MOB_SLIME_BIG = registerSound(L"mob.slime.big"); + SoundEvents::MOB_SLIME_BIG_2 = registerSound(L"mob.slime.big"); // name guessed + SoundEvents::MOB_MAGMACUBE_JUMP = registerSound(L"mob.magmacube.jump"); + SoundEvents::MOB_MAGMACUBE_BIG = registerSound(L"mob.magmacube.big"); + SoundEvents::DIG_STONE_4 = registerSound(L"dig.stone"); // name guessed + SoundEvents::STEP_STONE_6 = registerSound(L"step.stone"); + SoundEvents::STEP_STONE_7 = registerSound(L"step.stone"); + SoundEvents::DIG_STONE_5 = registerSound(L"dig.stone"); // name guessed + SoundEvents::STEP_STONE_8 = registerSound(L"step.stone"); + SoundEvents::RANDOM_CLICK_5 = registerSound(L"random.click"); + SoundEvents::RANDOM_CLICK_6 = registerSound(L"random.click"); // name guessed + SoundEvents::MINECART_INSIDE = registerSound(L"minecart.inside"); + SoundEvents::MINECART_BASE = registerSound(L"minecart.base"); + SoundEvents::MOB_SHEEP_SHEAR = registerSound(L"mob.sheep.shear"); // name guessed + SoundEvents::MOB_HORSE_DONKEY_IDLE_2 = registerSound(L"mob.horse.donkey.idle"); + SoundEvents::MOB_HORSE_DONKEY_DEATH_2 = registerSound(L"mob.horse.donkey.death"); + SoundEvents::MOB_HORSE_DONKEY_HIT_2 = registerSound(L"mob.horse.donkey.hit"); // name guessed + SoundEvents::MOB_CHICKEN_PLOP_4 = SoundEvents::MOB_CHICKEN_PLOP; + SoundEvents::NOTE_BD = SoundEvent::registerEvent(new SoundEvent(L"note.bd", 48.0f)); + SoundEvents::NOTE_BASSATTACK + = SoundEvent::registerEvent(new SoundEvent(L"note.bassattack", 48.0f)); // name guessed + SoundEvents::NOTE_HARP = SoundEvent::registerEvent(new SoundEvent(L"note.harp", 48.0f)); + SoundEvents::NOTE_HAT = SoundEvent::registerEvent(new SoundEvent(L"note.hat", 48.0f)); + SoundEvents::NOTE_PLING + = SoundEvent::registerEvent(new SoundEvent(L"note.pling", 48.0f)); // name guessed + SoundEvents::NOTE_SNARE = SoundEvent::registerEvent(new SoundEvent(L"note.snare", 48.0f)); + SoundEvents::BLOCK_NOTE_BELL = SoundEvent::registerEvent(new SoundEvent(L"block.note.bell", 48.0f)); + SoundEvents::BLOCK_NOTE_CHIME + = SoundEvent::registerEvent(new SoundEvent(L"block.note.chime", 48.0f)); // name guessed + SoundEvents::BLOCK_NOTE_FLUTE = SoundEvent::registerEvent(new SoundEvent(L"block.note.flute", 48.0f)); + SoundEvents::BLOCK_NOTE_GUITAR = SoundEvent::registerEvent(new SoundEvent(L"block.note.guitar", 48.0f)); + SoundEvents::BLOCK_NOTE_XYLOPHONE + = SoundEvent::registerEvent(new SoundEvent(L"block.note.xylophone", 48.0f)); + SoundEvents::ENTITY_PAINTING_BREAK = registerSound(L"entity.painting.break"); // name guessed + SoundEvents::ENTITY_PAINTING_PLACE = registerSound(L"entity.painting.place"); + SoundEvents::ENTITY_PARROT_AMBIENT = registerSound(L"entity.parrot.ambient"); + SoundEvents::ENTITY_PARROT_DEATH = registerSound(L"entity.parrot.death"); // name guessed + SoundEvents::ENTITY_PARROT_EAT = registerSound(L"entity.parrot.eat"); + SoundEvents::ENTITY_PARROT_FLY = registerSound(L"entity.parrot.fly"); + SoundEvents::ENTITY_PARROT_HURT = registerSound(L"entity.parrot.hurt"); // name guessed + SoundEvents::ENTITY_PARROT_STEP = registerSound(L"entity.parrot.step"); + SoundEvents::MOB_PIG_IDLE = registerSound(L"mob.pig.idle"); + SoundEvents::MOB_PIG_DEATH = registerSound(L"mob.pig.death"); // name guessed + SoundEvents::MOB_PIG_IDLE_2 = registerSound(L"mob.pig.idle"); + SoundEvents::MOB_HORSE_LEATHER_2 = registerSound(L"mob.horse.leather"); + SoundEvents::MOB_PIG_STEP = registerSound(L"mob.pig.step"); // name guessed + SoundEvents::TILE_PISTON_IN = registerSound(L"tile.piston.in"); + SoundEvents::TILE_PISTON_OUT = registerSound(L"tile.piston.out"); + SoundEvents::ENTITY_PLAYER_ATTACK_CRIT = registerSound(L"entity.player.attack.crit"); // name guessed + SoundEvents::ENTITY_PLAYER_ATTACK_KNOCKBACK = registerSound(L"entity.player.attack.knockback"); + SoundEvents::ENTITY_PLAYER_ATTACK_WEAK = registerSound(L"entity.player.attack.weak"); + SoundEvents::ENTITY_PLAYER_ATTACK_STRONG = registerSound(L"entity.player.attack.strong"); // name guessed + SoundEvents::ENTITY_PLAYER_ATTACK_SWEEP = registerSound(L"entity.player.attack.sweep"); + SoundEvents::ENTITY_PLAYER_ATTACK_WEAK_2 = registerSound(L"entity.player.attack.weak"); + SoundEvents::GAME_PLAYER_HURT_FALL_BIG = registerSound(L"game.player.hurt_fall_big"); // name guessed + SoundEvents::RANDOM_BREATH = registerSound(L"random.breath"); + SoundEvents::RANDOM_BURP = registerSound(L"random.burp"); + SoundEvents::DAMAGE_HURTFLESH_4 = registerSound(L"damage.hurtflesh"); // name guessed + SoundEvents::DAMAGE_HURTFLESH_5 = registerSound(L"damage.hurtflesh"); + SoundEvents::RANDOM_LEVELUP = registerSound(L"random.levelup"); + SoundEvents::DAMAGE_FALLSMALL_2 = registerSound(L"damage.fallsmall"); // name guessed + SoundEvents::GAME_PLAYER_SWIM_SPLASH = registerSound(L"game.player.swim_splash"); + SoundEvents::GAME_PLAYER_SWIM = registerSound(L"game.player.swim"); + SoundEvents::ENTITY_PLAYER_HURT_DROWN = registerSound(L"entity.player.hurt_drown"); // name guessed + SoundEvents::ENTITY_PLAYER_HURT_ON_FIRE = registerSound(L"entity.player.hurt_on_fire"); + SoundEvents::ENTITY_POLARBEAR_IDLE = registerSound(L"entity.polarbear.idle"); + SoundEvents::ENTITY_POLARBEAR_BABYIDLE = registerSound(L"entity.polarbear.babyidle"); // name guessed + SoundEvents::ENTITY_POLARBEAR_DEATH = registerSound(L"entity.polarbear.death"); + SoundEvents::ENTITY_POLARBEAR_HURT = registerSound(L"entity.polarbear.hurt"); + SoundEvents::ENTITY_POLARBEAR_STEP = registerSound(L"entity.polarbear.step"); // name guessed + SoundEvents::ENTITY_POLARBEAR_WARNING = registerSound(L"entity.polarbear.warning"); + SoundEvents::PORTAL_PORTAL = registerSound(L"portal.portal"); + SoundEvents::PORTAL_TRAVEL = registerSound(L"portal.travel"); // name guessed + SoundEvents::PORTAL_TRIGGER = registerSound(L"portal.trigger"); + SoundEvents::ENTITY_RABBIT_IDLE = registerSound(L"entity.rabbit.idle"); + SoundEvents::ENTITY_RABBIT_ATTACK = registerSound(L"entity.rabbit.attack"); // name guessed + SoundEvents::MOB_RABBIT_DEATH = registerSound(L"mob.rabbit.death"); + SoundEvents::ENTITY_RABBIT_HURT = registerSound(L"entity.rabbit.hurt"); + SoundEvents::ENTITY_RABBIT_HOP = registerSound(L"entity.rabbit.hop"); // name guessed + SoundEvents::RECORD_11 = SoundEvent::registerEvent(new SoundEvent(L"11", 16.0f, 2)); + SoundEvents::RECORD_13 = SoundEvent::registerEvent(new SoundEvent(L"13", 16.0f, 2)); + SoundEvents::BLOCKS = SoundEvent::registerEvent(new SoundEvent(L"blocks", 16.0f, 2)); // name guessed + SoundEvents::CAT = SoundEvent::registerEvent(new SoundEvent(L"cat", 16.0f, 2)); + SoundEvents::CHIRP = SoundEvent::registerEvent(new SoundEvent(L"chirp", 16.0f, 2)); + SoundEvents::FAR = SoundEvent::registerEvent(new SoundEvent(L"far", 16.0f, 2)); // name guessed + SoundEvents::MALL = SoundEvent::registerEvent(new SoundEvent(L"mall", 16.0f, 2)); + SoundEvents::MELLOHI = SoundEvent::registerEvent(new SoundEvent(L"mellohi", 16.0f, 2)); + SoundEvents::STAL = SoundEvent::registerEvent(new SoundEvent(L"stal", 16.0f, 2)); // name guessed + SoundEvents::STRAD = SoundEvent::registerEvent(new SoundEvent(L"strad", 16.0f, 2)); + SoundEvents::WHERE_ARE_WE_NOW = SoundEvent::registerEvent(new SoundEvent(L"where_are_we_now", 16.0f, 2)); + SoundEvents::WARD = SoundEvent::registerEvent(new SoundEvent(L"ward", 16.0f, 2)); // name guessed + SoundEvents::RANDOM_FIZZ_5 = registerSound(L"random.fizz"); + SoundEvents::DIG_SAND = registerSound(L"dig.sand"); + SoundEvents::STEP_SAND = registerSound(L"step.sand"); // name guessed + SoundEvents::STEP_SAND_2 = registerSound(L"step.sand"); + SoundEvents::DIG_SAND_2 = registerSound(L"dig.sand"); + SoundEvents::STEP_SAND_3 = registerSound(L"step.sand"); // name guessed + SoundEvents::MOB_SHEEP_IDLE = registerSound(L"mob.sheep.idle"); + SoundEvents::MOB_SHEEP_IDLE_2 = registerSound(L"mob.sheep.idle"); + SoundEvents::MOB_SHEEP_IDLE_3 = registerSound(L"mob.sheep.idle"); // name guessed + SoundEvents::MOB_SHEEP_SHEAR_2 = registerSound(L"mob.sheep.shear"); + SoundEvents::MOB_SHEEP_STEP = registerSound(L"mob.sheep.step"); + SoundEvents::ITEM_SHIELD_BLOCK = registerSound(L"item.shield.block"); // name guessed + SoundEvents::RANDOM_BREAK_2 = registerSound(L"random.break"); + SoundEvents::SHOVEL_FLATTEN = registerSound(L"item.shovel.flatten"); + SoundEvents::ITEM_TOTEM_USE = registerSound(L"item.totem.use"); // name guessed + SoundEvents::BLOCK_SHULKER_BOX_CLOSE = registerSound(L"block.shulker_box.close"); + SoundEvents::BLOCK_SHULKER_BOX_OPEN = registerSound(L"block.shulker_box.open"); + SoundEvents::ENTITY_SHULKER_AMBIENT = registerSound(L"entity.shulker.ambient"); // name guessed + SoundEvents::ENTITY_SHULKER_CLOSE = registerSound(L"entity.shulker.close"); + SoundEvents::ENTITY_SHULKER_DEATH = registerSound(L"entity.shulker.death"); + SoundEvents::ENTITY_SHULKER_HURT = registerSound(L"entity.shulker.hurt"); // name guessed + SoundEvents::ENTITY_SHULKER_HURT_CLOSED = registerSound(L"entity.shulker.hurt_closed"); + SoundEvents::ENTITY_SHULKER_OPEN = registerSound(L"entity.shulker.open"); + SoundEvents::ENTITY_SHULKER_SHOOT = registerSound(L"entity.shulker.shoot"); // name guessed + SoundEvents::MOB_ENDERMEN_PORTAL_3 = registerSound(L"mob.endermen.portal"); + SoundEvents::ENTITY_SHULKER_BULLET_HIT = registerSound(L"entity.shulker_bullet.hit"); + SoundEvents::ENTITY_SHULKER_BULLET_HIT_2 = registerSound(L"entity.shulker_bullet.hit"); // name guessed + SoundEvents::MOB_SILVERFISH_IDLE_2 = registerSound(L"mob.silverfish.idle"); + SoundEvents::MOB_SILVERFISH_KILL_2 = registerSound(L"mob.silverfish.kill"); + SoundEvents::MOB_SILVERFISH_HIT_2 = registerSound(L"mob.silverfish.hit"); // name guessed + SoundEvents::MOB_SILVERFISH_STEP_2 = registerSound(L"mob.silverfish.step"); + SoundEvents::MOB_SKELETON_IDLE = registerSound(L"mob.skeleton.idle"); + SoundEvents::MOB_SKELETON_DEATH = registerSound(L"mob.skeleton.death"); // name guessed + SoundEvents::MOB_SKELETON_HURT = registerSound(L"mob.skeleton.hurt"); + SoundEvents::RANDOM_BOW_8 = registerSound(L"random.bow"); + SoundEvents::MOB_SKELETON_STEP = registerSound(L"mob.skeleton.step"); // name guessed + SoundEvents::MOB_HORSE_SKELETON_IDLE = registerSound(L"mob.horse.skeleton.idle"); + SoundEvents::MOB_HORSE_SKELETON_DEATH = registerSound(L"mob.horse.skeleton.death"); + SoundEvents::MOB_HORSE_SKELETON_HIT = registerSound(L"mob.horse.skeleton.hit"); // name guessed + SoundEvents::MOB_SLIME_BIG_3 = registerSound(L"mob.slime.big"); + SoundEvents::MOB_SLIME_SMALL = registerSound(L"mob.slime.small"); + SoundEvents::MOB_SLIME_SMALL_2 = registerSound(L"mob.slime.small"); // name guessed + SoundEvents::MOB_SLIME_BIG_4 = registerSound(L"mob.slime.big"); + SoundEvents::MOB_SLIME_SMALL_3 = registerSound(L"mob.slime.small"); + SoundEvents::MOB_SLIME_ATTACK = registerSound(L"mob.slime.attack"); // name guessed + SoundEvents::MOB_SLIME_BIG_5 = registerSound(L"mob.slime.big"); + SoundEvents::MOB_SLIME_BIG_6 = registerSound(L"mob.slime.big"); + SoundEvents::MOB_SLIME_BIG_7 = registerSound(L"mob.slime.big"); // name guessed + SoundEvents::MOB_SLIME_BIG_8 = registerSound(L"mob.slime.big"); + SoundEvents::MOB_SLIME_SMALL_4 = registerSound(L"mob.slime.small"); + SoundEvents::MOB_SLIME_SMALL_5 = registerSound(L"mob.slime.small"); // name guessed + SoundEvents::MOB_MAGMACUBE_SMALL = registerSound(L"mob.magmacube.small"); + SoundEvents::MOB_SLIME_SMALL_6 = registerSound(L"mob.slime.small"); + SoundEvents::MOB_SLIME_SMALL_7 = registerSound(L"mob.slime.small"); // name guessed + SoundEvents::MOB_SLIME_SMALL_8 = registerSound(L"mob.slime.small"); + SoundEvents::MOB_SLIME_SMALL_9 = registerSound(L"mob.slime.small"); + SoundEvents::RANDOM_BOW_9 = registerSound(L"random.bow"); // name guessed + SoundEvents::ENTITY_SNOWMAN_AMBIENT = registerSound(L"entity.snowman.ambient"); + SoundEvents::ENTITY_SNOWMAN_DEATH = registerSound(L"entity.snowman.death"); + SoundEvents::ENTITY_SNOWMAN_HURT = registerSound(L"entity.snowman.hurt"); // name guessed + SoundEvents::RANDOM_BOW_10 = registerSound(L"random.bow"); + SoundEvents::DIG_SNOW = registerSound(L"dig.snow"); + SoundEvents::STEP_SNOW = registerSound(L"step.snow"); // name guessed + SoundEvents::STEP_SNOW_2 = registerSound(L"step.snow"); + SoundEvents::DIG_SNOW_2 = registerSound(L"dig.snow"); + SoundEvents::STEP_SNOW_3 = registerSound(L"step.snow"); // name guessed + SoundEvents::MOB_SPIDER_IDLE = registerSound(L"mob.spider.idle"); + SoundEvents::MOB_SPIDER_DEATH = registerSound(L"mob.spider.death"); + SoundEvents::MOB_SPIDER_IDLE_2 = registerSound(L"mob.spider.idle"); // name guessed + SoundEvents::MOB_SPIDER_STEP = registerSound(L"mob.spider.step"); + SoundEvents::RANDOM_GLASS_2 = registerSound(L"random.glass"); + SoundEvents::RANDOM_BOW_11 = registerSound(L"random.bow"); // name guessed + SoundEvents::ENTITY_SQUID_IDLE = registerSound(L"entity.squid.idle"); + SoundEvents::ENTITY_SQUID_DEATH = registerSound(L"entity.squid.death"); + SoundEvents::ENTITY_SQUID_HURT = registerSound(L"entity.squid.hurt"); // name guessed + SoundEvents::DIG_STONE_6 = registerSound(L"dig.stone"); + SoundEvents::STEP_STONE_9 = registerSound(L"step.stone"); + SoundEvents::STEP_STONE_10 = registerSound(L"step.stone"); // name guessed + SoundEvents::DIG_STONE_7 = registerSound(L"dig.stone"); + SoundEvents::STEP_STONE_11 = registerSound(L"step.stone"); + SoundEvents::RANDOM_CLICK_7 = registerSound(L"random.click"); // name guessed + SoundEvents::RANDOM_CLICK_8 = registerSound(L"random.click"); + SoundEvents::RANDOM_CLICK_9 = registerSound(L"random.click"); + SoundEvents::RANDOM_CLICK_10 = registerSound(L"random.click"); // name guessed + SoundEvents::ENTITY_STRAY_IDLE = registerSound(L"entity.stray.idle"); + SoundEvents::ENTITY_STRAY_DEATH = registerSound(L"entity.stray.death"); + SoundEvents::ENTITY_STRAY_HURT = registerSound(L"entity.stray.hurt"); // name guessed + SoundEvents::ENTITY_STRAY_STEP = registerSound(L"entity.stray.step"); + SoundEvents::ENCHANT_THORNS_HIT = registerSound(L"enchant.thorns.hit"); + SoundEvents::RANDOM_FUSE_2 = registerSound(L"random.fuse"); // name guessed + SoundEvents::RANDOM_CLICK_11 = registerSound(L"random.click"); + SoundEvents::RANDOM_CLICK_12 = registerSound(L"random.click"); + SoundEvents::RANDOM_CLICK_13 = registerSound(L"random.click"); // name guessed + SoundEvents::RANDOM_BOWHIT_2 = registerSound(L"random.bowhit"); + SoundEvents::RANDOM_CLICK = registerSound(L"random.click"); + SoundEvents::ENTITY_VEX_IDLE = registerSound(L"entity.vex.idle"); // name guessed + SoundEvents::ENTITY_VEX_CHARGE = registerSound(L"entity.vex.charge"); + SoundEvents::ENTITY_VEX_DEATH = registerSound(L"entity.vex.death"); + SoundEvents::ENTITY_VEX_HURT = registerSound(L"entity.vex.hurt"); // name guessed + SoundEvents::MOB_VILLAGER_IDLE = registerSound(L"mob.villager.idle"); + SoundEvents::MOB_VILLAGER_DEATH = registerSound(L"mob.villager.death"); + SoundEvents::MOB_VILLAGER_HIT = registerSound(L"mob.villager.hit"); // name guessed + SoundEvents::MOB_VILLAGER_NO = registerSound(L"mob.villager.no"); + SoundEvents::MOB_VILLAGER_HAGGLE = registerSound(L"mob.villager.haggle"); + SoundEvents::MOB_VILLAGER_YES = registerSound(L"mob.villager.yes"); // name guessed + SoundEvents::ENTITY_VINDICATION_ILLAGER_AMBIENT = registerSound(L"entity.vindication_illager.ambient"); + SoundEvents::ENTITY_VINDICATION_ILLAGER_DEATH = registerSound(L"entity.vindication_illager.death"); + SoundEvents::ENTITY_VINDICATION_ILLAGER_HURT + = registerSound(L"entity.vindication_illager.hurt"); // name guessed + SoundEvents::BLOCK_WATERLILY_PLACE = registerSound(L"block.waterlily.place"); + SoundEvents::LIQUID_WATER = registerSound(L"liquid.water"); + SoundEvents::AMBIENT_WEATHER_RAIN = registerSound(L"ambient.weather.rain"); // name guessed + SoundEvents::AMBIENT_WEATHER_RAIN_2 = registerSound(L"ambient.weather.rain"); + SoundEvents::ENTITY_WITCH_IDLE = registerSound(L"entity.witch.idle"); + SoundEvents::ENTITY_WITCH_DEATH = registerSound(L"entity.witch.death"); // name guessed + SoundEvents::ENTITY_WITCH_DRINK = registerSound(L"entity.witch.drink"); + SoundEvents::ENTITY_WITCH_HURT = registerSound(L"entity.witch.hurt"); + SoundEvents::ENTITY_WITCH_THROW = registerSound(L"entity.witch.throw"); // name guessed + SoundEvents::MOB_WITHER_IDLE = registerSound(L"mob.wither.idle"); + SoundEvents::MOB_ZOMBIE_WOODBREAK = registerSound(L"mob.zombie.woodbreak"); + SoundEvents::MOB_WITHER_DEATH = registerSound(L"mob.wither.death"); // name guessed + SoundEvents::MOB_WITHER_HURT = registerSound(L"mob.wither.hurt"); + SoundEvents::MOB_WITHER_SHOOT = registerSound(L"mob.wither.shoot"); + SoundEvents::MOB_WITHER_SPAWN = registerSound(L"mob.wither.spawn"); // name guessed + SoundEvents::MOB_SKELETON_IDLE_2 = registerSound(L"mob.skeleton.idle"); + SoundEvents::MOB_SKELETON_DEATH_2 = registerSound(L"mob.skeleton.death"); + SoundEvents::MOB_SKELETON_HURT_2 = registerSound(L"mob.skeleton.hurt"); // name guessed + SoundEvents::MOB_SKELETON_STEP_2 = registerSound(L"mob.skeleton.step"); + SoundEvents::MOB_WOLF_BARK = registerSound(L"mob.wolf.bark"); + SoundEvents::MOB_WOLF_DEATH = registerSound(L"mob.wolf.death"); // name guessed + SoundEvents::MOB_WOLF_GROWL = registerSound(L"mob.wolf.growl"); + SoundEvents::MOB_WOLF_HOWL = registerSound(L"mob.wolf.howl"); + SoundEvents::MOB_WOLF_HURT = registerSound(L"mob.wolf.hurt"); // name guessed + SoundEvents::MOB_WOLF_PANTING = registerSound(L"mob.wolf.panting"); + SoundEvents::MOB_WOLF_SHAKE = registerSound(L"mob.wolf.shake"); + SoundEvents::MOB_WOLF_STEP = registerSound(L"mob.wolf.step"); // name guessed + SoundEvents::MOB_WOLF_WHINE = registerSound(L"mob.wolf.whine"); + SoundEvents::BLOCK_WOODEN_DOOR_CLOSE = registerSound(L"block.wooden_door.close"); + SoundEvents::BLOCK_WOODEN_DOOR_OPEN = registerSound(L"block.wooden_door.open"); // name guessed + SoundEvents::BLOCK_WOODEN_TRAPDOOR_CLOSE = registerSound(L"block.wooden_trapdoor.close"); + SoundEvents::BLOCK_WOODEN_TRAPDOOR_OPEN = registerSound(L"block.wooden_trapdoor.open"); + SoundEvents::DIG_WOOD_4 = registerSound(L"dig.wood"); // name guessed + SoundEvents::STEP_WOOD = registerSound(L"step.wood"); + SoundEvents::STEP_WOOD_2 = registerSound(L"step.wood"); + SoundEvents::DIG_WOOD_5 = registerSound(L"dig.wood"); // name guessed + SoundEvents::STEP_WOOD_3 = registerSound(L"step.wood"); + SoundEvents::RANDOM_CLICK_14 = registerSound(L"random.click"); + SoundEvents::RANDOM_CLICK_15 = registerSound(L"random.click"); // name guessed + SoundEvents::RANDOM_CLICK_16 = registerSound(L"random.click"); + SoundEvents::RANDOM_CLICK_17 = registerSound(L"random.click"); + SoundEvents::MOB_ZOMBIE_IDLE = registerSound(L"mob.zombie.idle"); // name guessed + SoundEvents::MOB_ZOMBIE_WOOD = registerSound(L"mob.zombie.wood"); + SoundEvents::MOB_ZOMBIE_METAL = registerSound(L"mob.zombie.metal"); + SoundEvents::MOB_ZOMBIE_WOODBREAK_2 = registerSound(L"mob.zombie.woodbreak"); // name guessed + SoundEvents::MOB_ZOMBIE_DEATH = registerSound(L"mob.zombie.death"); + SoundEvents::MOB_ZOMBIE_HURT = registerSound(L"mob.zombie.hurt"); + SoundEvents::MOB_ZOMBIE_INFECT = registerSound(L"mob.zombie.infect"); // name guessed + SoundEvents::MOB_ZOMBIE_STEP = registerSound(L"mob.zombie.step"); + SoundEvents::MOB_HORSE_ZOMBIE_IDLE = registerSound(L"mob.horse.zombie.idle"); + SoundEvents::MOB_HORSE_ZOMBIE_DEATH = registerSound(L"mob.horse.zombie.death"); // name guessed + SoundEvents::MOB_HORSE_ZOMBIE_HIT = registerSound(L"mob.horse.zombie.hit"); + SoundEvents::MOB_ZOMBIEPIG_IDLE = registerSound(L"mob.zombiepig.idle"); + SoundEvents::MOB_ZOMBIEPIG_ANGRY = registerSound(L"mob.zombiepig.angry"); // name guessed + SoundEvents::MOB_ZOMBIEPIG_DEATH = registerSound(L"mob.zombiepig.death"); + SoundEvents::MOB_ZOMBIEPIG_HURT = registerSound(L"mob.zombiepig.hurt"); + SoundEvents::MOB_ZOMBIE_IDLE_2 = registerSound(L"mob.zombie.idle"); // name guessed + SoundEvents::MOB_ZOMBIE_UNFECT = registerSound(L"mob.zombie.unfect"); + SoundEvents::MOB_ZOMBIE_REMEDY = registerSound(L"mob.zombie.remedy"); + SoundEvents::MOB_ZOMBIE_DEATH_2 = registerSound(L"mob.zombie.death"); // name guessed + SoundEvents::MOB_ZOMBIE_HURT_2 = registerSound(L"mob.zombie.hurt"); + SoundEvents::MOB_ZOMBIE_STEP_2 = registerSound(L"mob.zombie.step"); + SoundEvents::MG01_SHOWDOWN = registerSound(L"MG01.showdown"); // name guessed + SoundEvents::MG01_CELEBRATION = registerSound(L"MG01.celebration"); + SoundEvents::MG01_CHEST = registerSound(L"MG01.chest"); + SoundEvents::MG01_DEATH = registerSound(L"MG01.death"); // name guessed + SoundEvents::MG01_GRACE = registerSound(L"MG01.grace"); + SoundEvents::MG01_GRACEZERO = registerSound(L"MG01.gracezero"); + SoundEvents::MG01_LOBBY = registerSound(L"MG01.lobby"); // name guessed + SoundEvents::MG01_LOBBYACCENT = registerSound(L"MG01.lobbyaccent"); + SoundEvents::MG01_LOBBYZERO = registerSound(L"MG01.lobbyzero"); + SoundEvents::MG01_GAMESTART = registerSound(L"MG01.gamestart"); // name guessed + SoundEvents::MG01_STARTCOUNTDOWN = registerSound(L"MG01.startcountdown"); + SoundEvents::MG02_SHOWDOWN = registerSound(L"MG02.showdown"); + SoundEvents::MG02_GAMESTART = registerSound(L"MG02.gamestart"); // name guessed + SoundEvents::MG02_GAMEEND = registerSound(L"MG02.gameend"); + SoundEvents::MG02_DEATH = registerSound(L"MG02.death"); + SoundEvents::MG02_STARTCOUNTDOWN = registerSound(L"MG02.startcountdown"); // name guessed + SoundEvents::MG02_FALLING = registerSound(L"MG02.falling"); + SoundEvents::MG03_DEATH = registerSound(L"MG03.death"); + SoundEvents::MG03_CHECKPOINT = registerSound(L"MG03.checkpoint"); // name guessed + SoundEvent::ENTER_BOOST = registerSound(L"MG03.boost"); + SoundEvents::MG03_BESTTIME = registerSound(L"MG03.bestTime"); + SoundEvents::MG03_FINISHLINE = registerSound(L"MG03.finishLine"); // name guessed + SoundEvents::MG03_FINISHLINEBESTSCORE + = SoundEvent::registerEvent(new SoundEvent(L"MG03.finishLineBestScore", 16.0f)); + SoundEvents::MG03_FINISHLINEBESTTIME + = SoundEvent::registerEvent(new SoundEvent(L"MG03.finishLineBestTime", 16.0f)); + SoundEvents::MG03_FINISHLINE1ST = registerSound(L"MG03.finishLine1st"); // name guessed + SoundEvents::MG03_FINISHLINE1STBESTSCORE + = SoundEvent::registerEvent(new SoundEvent(L"MG03.finishLine1stBestScore", 16.0f)); + SoundEvents::MG03_FINISHLINE1STBESTTIME + = SoundEvent::registerEvent(new SoundEvent(L"MG03.finishLine1stBestTime", 16.0f)); + SoundEvents::MG03_FINISHLINE2ND = registerSound(L"MG03.finishLine2nd"); // name guessed + SoundEvents::MG03_FINISHLINE2NDBESTSCORE + = SoundEvent::registerEvent(new SoundEvent(L"MG03.finishLine2ndBestScore", 16.0f)); + SoundEvents::MG03_FINISHLINE2NDBESTTIME + = SoundEvent::registerEvent(new SoundEvent(L"MG03.finishLine2ndBestTime", 16.0f)); + SoundEvents::MG03_FINISHLINE3RD = registerSound(L"MG03.finishLine3rd"); // name guessed + SoundEvents::MG03_FINISHLINE3RDBESTSCORE + = SoundEvent::registerEvent(new SoundEvent(L"MG03.finishLine3rdBestScore", 16.0f)); + SoundEvents::MG03_FINISHLINE3RDBESTTIME + = SoundEvent::registerEvent(new SoundEvent(L"MG03.finishLine3rdBestTime", 16.0f)); + SoundEvent::ENTER_THERMAL = registerSound(L"MG03.thermalBoost"); + SoundEvents::MG03_WINNER = registerSound(L"MG03.winner"); // name guessed + SoundEvents::MG03_WINNERANNOUNCE = registerSound(L"MG03.winnerAnnounce"); + SoundEvents::MG03_BESTSCORE = registerSound(L"MG03.bestScore"); + SoundEvents::MG03_REDALERTLOOP = registerSound(L"MG03.redAlertLoop"); // name guessed + SoundEvents::MG03_FARALERTSOLO = registerSound(L"MG03.farAlertSolo"); + SoundEvents::MG03_EMERALDPOINTTICK = registerSound(L"MG03.emeraldPointTick"); + SoundEvents::MG03_EMERALDPOINTTOK = registerSound(L"MG03.emeraldPointTok"); // name guessed + SoundEvents::MG03_GOLDPOINTTICK = registerSound(L"MG03.goldPointTick"); + SoundEvents::MG03_GOLDPOINTTOK = registerSound(L"MG03.goldPointTok"); + SoundEvents::MG03_DIAMONDPOINT = registerSound(L"MG03.diamondPoint"); // name guessed + SoundEvents::MG03_RESPAWN = registerSound(L"MG03.respawn"); + SoundEvents::MG03_COUNTDOWNZERO = registerSound(L"MG03.countdownZero"); + SoundEvents::MG03_FALLBIG_ALIAS = registerSound(L"MG03.fallBig"); // name guessed + SoundEvents::MG03_FALLSMALL_ALIAS = registerSound(L"MG03.fallSmall"); + SoundEvents::MG03_HIT_ALIAS = registerSound(L"MG03.hit"); + SoundEvents::MOB_BLAZE_BREATHE_ALIAS = SoundEvents::MOB_BLAZE_BREATHE; // name guessed + SoundEvents::RANDOM_FUSE_ALIAS = SoundEvents::RANDOM_FUSE; + SoundEvents::MOB_GUARDIAN_LAND_IDLE_ALIAS = SoundEvents::MOB_GUARDIAN_LAND_IDLE; + SoundEvents::MOB_ENDERDRAGON_GROWL_ALIAS = SoundEvents::MOB_ENDERDRAGON_GROWL; // name guessed + SoundEvents::MOB_ENDERMEN_IDLE_ALIAS = SoundEvents::MOB_ENDERMEN_IDLE; + SoundEvents::MOB_SILVERFISH_IDLE_ALIAS = SoundEvents::MOB_SILVERFISH_IDLE; + SoundEvents::ENTITY_EVOCATION_ILLAGER_AMBIENT_ALIAS + = SoundEvents::ENTITY_EVOCATION_ILLAGER_AMBIENT; // name guessed + SoundEvents::MOB_GHAST_MOAN_ALIAS = SoundEvents::MOB_GHAST_MOAN; + SoundEvents::ENTITY_HUSK_IDLE_ALIAS = SoundEvents::ENTITY_HUSK_IDLE; + SoundEvents::ENTITY_ILLUSION_ILLAGER_AMBIENT_ALIAS + = SoundEvents::ENTITY_ILLUSION_ILLAGER_AMBIENT; // name guessed + SoundEvents::MOB_MAGMACUBE_BIG_ALIAS = SoundEvents::MOB_MAGMACUBE_BIG; + SoundEvents::ENTITY_POLARBEAR_IDLE_ALIAS = SoundEvents::ENTITY_POLARBEAR_IDLE; + SoundEvents::ENTITY_SHULKER_AMBIENT_ALIAS = SoundEvents::ENTITY_SHULKER_AMBIENT; // name guessed + SoundEvents::MOB_SILVERFISH_IDLE_ALIAS_2 = SoundEvents::MOB_SILVERFISH_IDLE_2; + SoundEvents::MOB_SKELETON_IDLE_ALIAS = SoundEvents::MOB_SKELETON_IDLE; + SoundEvents::MOB_SLIME_BIG_ALIAS = SoundEvents::MOB_SLIME_BIG_8; // name guessed + SoundEvents::MOB_SPIDER_IDLE_ALIAS = SoundEvents::MOB_SPIDER_IDLE; + SoundEvents::ENTITY_STRAY_IDLE_ALIAS = SoundEvents::ENTITY_STRAY_IDLE; + SoundEvents::ENTITY_VEX_IDLE_ALIAS = SoundEvents::ENTITY_VEX_IDLE; // name guessed + SoundEvents::ENTITY_VINDICATION_ILLAGER_AMBIENT_ALIAS = SoundEvents::ENTITY_VINDICATION_ILLAGER_AMBIENT; + SoundEvents::ENTITY_WITCH_IDLE_ALIAS = SoundEvents::ENTITY_WITCH_IDLE; + SoundEvents::MOB_WITHER_IDLE_ALIAS = SoundEvents::MOB_WITHER_IDLE; // name guessed + SoundEvents::MOB_SKELETON_IDLE_ALIAS_2 = SoundEvents::MOB_SKELETON_IDLE_2; + SoundEvents::MOB_WOLF_BARK_ALIAS = SoundEvents::MOB_WOLF_BARK; + SoundEvents::MOB_ZOMBIE_IDLE_ALIAS = SoundEvents::MOB_ZOMBIE_IDLE; // name guessed + SoundEvents::MOB_ZOMBIEPIG_IDLE_ALIAS = SoundEvents::MOB_ZOMBIEPIG_IDLE; + SoundEvents::MOB_ZOMBIE_IDLE_ALIAS_2 = SoundEvents::MOB_ZOMBIE_IDLE_2; + SoundEvents::RANDOM_EXPLODE_ALIAS = SoundEvents::RANDOM_EXPLODE_3; // name guessed + SoundEvents::RANDOM_SPLASH_ALIAS = SoundEvents::RANDOM_SPLASH; + SoundEvents::RANDOM_SPLASH_ALIAS_2 = SoundEvents::RANDOM_SPLASH; + SoundEvents::RANDOM_SPLASH_ALIAS_3 = SoundEvents::RANDOM_SPLASH; // name guessed + SoundEvents::RANDOM_SPLASH_ALIAS_4 = SoundEvents::RANDOM_SPLASH; + SoundEvents::RANDOM_SPLASH_ALIAS_5 = SoundEvents::RANDOM_SPLASH; + SoundEvents::RANDOM_SPLASH_ALIAS_6 = SoundEvents::RANDOM_SPLASH; // name guessed + SoundEvents::RANDOM_SPLASH_ALIAS_7 = SoundEvents::RANDOM_SPLASH; + SoundEvents::RANDOM_SPLASH_ALIAS_8 = SoundEvents::RANDOM_SPLASH; +} diff --git a/src/Minecraft.Client/net/minecraft/sounds/SoundEvents.h b/src/Minecraft.Client/net/minecraft/sounds/SoundEvents.h index ac18abe9..940fdbf9 100644 --- a/src/Minecraft.Client/net/minecraft/sounds/SoundEvents.h +++ b/src/Minecraft.Client/net/minecraft/sounds/SoundEvents.h @@ -6,13 +6,606 @@ class SoundEvent; class SoundEvents { public: - static SoundEvent* BACK; - static SoundEvent* FIRE_AMBIENT; - static SoundEvent* ENCHANT_THORNS_HIT; - static SoundEvent* RANDOM_CLICK; - static SoundEvent* SHOVEL_FLATTEN; - static SoundEvent* registerSound(const std::wstring&); - static void staticCtor(); + + static SoundEvent* BACK; // name guessed: 0x71017a4210 + static SoundEvent* CRAFT; // name guessed: 0x71017a4218 + static SoundEvent* CRAFTFAIL; // name guessed: 0x71017a4220 + static SoundEvent* FOCUS; // name guessed: 0x71017a4228 + static SoundEvent* SCROLL; // name guessed: 0x71017a4238 + static SoundEvent* AMBIENT_CAVE_CAVE; // name guessed: 0x71017a3070 + static SoundEvent* DIG_STONE; // name guessed: 0x71017a3078 + static SoundEvent* RANDOM_ANVIL_BREAK; // name guessed: 0x71017a3080 + static SoundEvent* RANDOM_ANVIL_LAND; // name guessed: 0x71017a3088 + static SoundEvent* STEP_STONE; // name guessed: 0x71017a3090 + static SoundEvent* RANDOM_ANVIL_LAND_2; // name guessed: 0x71017a3098 + static SoundEvent* RANDOM_ANVIL_LAND_3; // name guessed: 0x71017a30a0 + static SoundEvent* STEP_STONE_2; // name guessed: 0x71017a30a8 + static SoundEvent* RANDOM_ANVIL_USE; // name guessed: 0x71017a30b0 + static SoundEvent* ENTITY_ARMORSTAND_BREAK; // name guessed: 0x71017a30b8 + static SoundEvent* DIG_WOOD; // name guessed: 0x71017a30c0 + static SoundEvent* ENTITY_ARMORSTAND_HIT; // name guessed: 0x71017a30c8 + static SoundEvent* DIG_STONE_2; // name guessed: 0x71017a30d0 + static SoundEvent* ITEM_ARMOR_EQUIP_CHAIN; // name guessed: 0x71017a30d8 + static SoundEvent* ITEM_ARMOR_EQUIP_DIAMOND; // name guessed: 0x71017a30e0 + static SoundEvent* ITEM_ARMOR_EQUIP_GENERIC; // name guessed: 0x71017a30f0 + static SoundEvent* ITEM_ARMOR_EQUIP_GOLD; // name guessed: 0x71017a30f8 + static SoundEvent* ITEM_ARMOR_EQUIP_IRON; // name guessed: 0x71017a3100 + static SoundEvent* ITEM_ARMOR_EQUIP_LEATHER; // name guessed: 0x71017a3108 + static SoundEvent* ITEM_ARMOR_EQUIP_LEATHER_2; // name guessed: 0x71017a30e8 + static SoundEvent* RANDOM_BOWHIT; // name guessed: 0x71017a3110 + static SoundEvent* RANDOM_SUCCESSFUL_HIT; // name guessed: 0x71017a3118 + static SoundEvent* RANDOM_BOW; // name guessed: 0x71017a3120 + static SoundEvent* MOB_BAT_IDLE; // name guessed: 0x71017a3128 + static SoundEvent* MOB_BAT_DEATH; // name guessed: 0x71017a3130 + static SoundEvent* MOB_BAT_HURT; // name guessed: 0x71017a3138 + static SoundEvent* MOB_BAT_TAKEOFF; // name guessed: 0x71017a3140 + static SoundEvent* MOB_BLAZE_BREATHE; // name guessed: 0x71017a3148 + static SoundEvent* FIRE_FIRE; // name guessed: 0x71017a3150 + static SoundEvent* MOB_BLAZE_DEATH; // name guessed: 0x71017a3158 + static SoundEvent* MOB_BLAZE_HIT; // name guessed: 0x71017a3160 + static SoundEvent* MOB_GHAST_FIREBALL; // name guessed: 0x71017a3168 + static SoundEvent* ENTITY_BOAT_PADDLE_LAND; // name guessed: 0x71017a4268 + static SoundEvent* ENTITY_BOAT_PADDLE_WATER; // name guessed: 0x71017a4270 + static SoundEvent* ENTITY_BOBBER_RETRIEVE; // name guessed: 0x71017a4278 + static SoundEvent* ENTITY_BOBBER_THROW; // name guessed: 0x71017a3170 + static SoundEvent* ENTITY_BOBBER_RETRIEVE_2; // name guessed: 0x71017a3178 + static SoundEvent* ITEM_BOTTLE_EMPTY; // name guessed: 0x71017a3180 + static SoundEvent* ITEM_BOTTLE_FILL; // name guessed: 0x71017a3188 + static SoundEvent* ITEM_BOTTLE_FILL_DRAGONBREATH; // name guessed: 0x71017a3190 + static SoundEvent* BLOCK_BREWING_STAND_BREW; // name guessed: 0x71017a3198 + static SoundEvent* ITEM_BUCKET_EMPTY; // name guessed: 0x71017a31a0 + static SoundEvent* ITEM_BUCKET_EMPTY_LAVA; // name guessed: 0x71017a31a8 + static SoundEvent* ITEM_BUCKET_FILL; // name guessed: 0x71017a31b0 + static SoundEvent* ITEM_BUCKET_FILL_LAVA; // name guessed: 0x71017a31b8 + static SoundEvent* MOB_CAT_MEOW; // name guessed: 0x71017a31c0 + static SoundEvent* MOB_CAT_HIT; // name guessed: 0x71017a31c8 + static SoundEvent* MOB_CAT_HISS; // name guessed: 0x71017a31d0 + static SoundEvent* MOB_CAT_HIT_2; // name guessed: 0x71017a31d8 + static SoundEvent* MOB_CAT_PURR; // name guessed: 0x71017a31e0 + static SoundEvent* MOB_CAT_PURREOW; // name guessed: 0x71017a31e8 + static SoundEvent* RANDOM_CHESTCLOSED; // name guessed: 0x71017a31f0 + static SoundEvent* RANDOM_DOOR_CLOSE; // name guessed: 0x71017a31f8 + static SoundEvent* RANDOM_CHESTOPEN; // name guessed: 0x71017a3200 + static SoundEvent* MOB_CHICKEN_IDLE; // name guessed: 0x71017a3208 + static SoundEvent* MOB_CHICKEN_HURT; // name guessed: 0x71017a3210 + static SoundEvent* MOB_CHICKEN_PLOP; // name guessed: 0x71017a3218 + static SoundEvent* MOB_CHICKEN_HURT_2; // name guessed: 0x71017a3220 + static SoundEvent* MOB_CHICKEN_STEP; // name guessed: 0x71017a3228 + static SoundEvent* BLOCK_CHORUS_FLOWER_DEATH; // name guessed: 0x71017a3230 + static SoundEvent* BLOCK_CHORUS_FLOWER_GROW; // name guessed: 0x71017a3238 + static SoundEvent* MOB_ENDERMEN_PORTAL; // name guessed: 0x71017a3240 + static SoundEvent* DIG_CLOTH; // name guessed: 0x71017a3248 + static SoundEvent* STEP_CLOTH; // name guessed: 0x71017a3250 + static SoundEvent* STEP_CLOTH_2; // name guessed: 0x71017a3258 + static SoundEvent* DIG_CLOTH_2; // name guessed: 0x71017a3260 + static SoundEvent* STEP_CLOTH_3; // name guessed: 0x71017a3268 + static SoundEvent* RANDOM_CLICK_73; // name guessed: 0x71017a3270 + static SoundEvent* MOB_COW_IDLE; // name guessed: 0x71017a3278 + static SoundEvent* MOB_COW_HURT; // name guessed: 0x71017a3280 + static SoundEvent* MOB_COW_HURT_2; // name guessed: 0x71017a3288 + static SoundEvent* ENTITY_COW_MILK; // name guessed: 0x71017a3290 + static SoundEvent* MOB_COW_STEP; // name guessed: 0x71017a3298 + static SoundEvent* MOB_CREEPER_DEATH; // name guessed: 0x71017a32a0 + static SoundEvent* MOB_CREEPER_HURT; // name guessed: 0x71017a32a8 + static SoundEvent* RANDOM_FUSE; // name guessed: 0x71017a32b0 + static SoundEvent* RANDOM_CLICK_2; // name guessed: 0x71017a32b8 + static SoundEvent* RANDOM_CLICK_3; // name guessed: 0x71017a32c0 + static SoundEvent* RANDOM_BOW_2; // name guessed: 0x71017a32c8 + static SoundEvent* MOB_HORSE_DONKEY_IDLE; // name guessed: 0x71017a32d0 + static SoundEvent* MOB_HORSE_DONKEY_ANGRY; // name guessed: 0x71017a32d8 + static SoundEvent* MOB_CHICKEN_PLOP_2; // name guessed: 0x71017a32e0 + static SoundEvent* MOB_HORSE_DONKEY_DEATH; // name guessed: 0x71017a32e8 + static SoundEvent* MOB_HORSE_DONKEY_HIT; // name guessed: 0x71017a32f0 + static SoundEvent* RANDOM_BOW_3; // name guessed: 0x71017a32f8 + static SoundEvent* MOB_GUARDIAN_ELDER_IDLE; // name guessed: 0x71017a3300 + static SoundEvent* MOB_GUARDIAN_LAND_IDLE; // name guessed: 0x71017a3308 + static SoundEvent* MOB_GUARDIAN_CURSE; // name guessed: 0x71017a3310 + static SoundEvent* MOB_GUARDIAN_ELDER_DEATH; // name guessed: 0x71017a3318 + static SoundEvent* MOB_GUARDIAN_LAND_DEATH; // name guessed: 0x71017a3320 + static SoundEvent* MOB_GUARDIAN_FLOP; // name guessed: 0x71017a3328 + static SoundEvent* MOB_GUARDIAN_ELDER_HIT; // name guessed: 0x71017a3330 + static SoundEvent* MOB_GUARDIAN_LAND_HIT; // name guessed: 0x71017a3338 + static SoundEvent* ITEM_ELYTRA_FLYING; // name guessed: 0x71017a3340 + static SoundEvent* BLOCK_ENCHANTMENT_TABLE_ENCHANT; // name guessed: 0x71017a3348 + static SoundEvent* BLOCK_ENDERCHEST_CLOSE; // name guessed: 0x71017a3350 + static SoundEvent* BLOCK_ENDERCHEST_OPEN; // name guessed: 0x71017a3358 + static SoundEvent* MOB_ENDERDRAGON_GROWL; // name guessed: 0x71017a3360 + static SoundEvent* MOB_ENDERDRAGON_END; // name guessed: 0x71017a3368 + static SoundEvent* RANDOM_EXPLODE; // name guessed: 0x71017a3370 + static SoundEvent* MOB_ENDERDRAGON_WINGS; // name guessed: 0x71017a3378 + static SoundEvent* MOB_ENDERDRAGON_GROWL_2; // name guessed: 0x71017a3380 + static SoundEvent* MOB_ENDERDRAGON_HIT; // name guessed: 0x71017a3388 + static SoundEvent* MOB_GHAST_FIREBALL_2; // name guessed: 0x71017a3390 + static SoundEvent* ENTITY_ENDEREYE_LAUNCH; // name guessed: 0x71017a3398 + static SoundEvent* ENTITY_ENDEREYE_DEATH; // name guessed: 0x71017a33a0 + static SoundEvent* MOB_ENDERMEN_IDLE; // name guessed: 0x71017a33a8 + static SoundEvent* MOB_ENDERMEN_DEATH; // name guessed: 0x71017a33b0 + static SoundEvent* MOB_ENDERMEN_HIT; // name guessed: 0x71017a33b8 + static SoundEvent* MOB_ENDERMAN_SCREAM; // name guessed: 0x71017a33c0 + static SoundEvent* MOB_ENDERMAN_STARE; // name guessed: 0x71017a33c8 + static SoundEvent* MOB_ENDERMEN_PORTAL_2; // name guessed: 0x71017a33d0 + static SoundEvent* MOB_SILVERFISH_IDLE; // name guessed: 0x71017a33d8 + static SoundEvent* MOB_SILVERFISH_KILL; // name guessed: 0x71017a33e0 + static SoundEvent* MOB_SILVERFISH_HIT; // name guessed: 0x71017a33e8 + static SoundEvent* MOB_SILVERFISH_STEP; // name guessed: 0x71017a33f0 + static SoundEvent* RANDOM_BOW_4; // name guessed: 0x71017a33f8 + static SoundEvent* RANDOM_EXPLODE_2; // name guessed: 0x71017a3400 + static SoundEvent* BLOCK_END_PORTAL_FRAME_FILL; // name guessed: 0x71017a3408 + static SoundEvent* BLOCK_END_PORTAL_SPAWN; // name guessed: 0x71017a3410 + static SoundEvent* ENTITY_EVOCATION_FANGS_ATTACK; // name guessed: 0x71017a3418 + static SoundEvent* ENTITY_EVOCATION_ILLAGER_AMBIENT; // name guessed: 0x71017a3420 + static SoundEvent* ENTITY_EVOCATION_ILLAGER_CAST_SPELL; // name guessed: 0x71017a3428 + static SoundEvent* ENTITY_EVOCATION_ILLAGER_DEATH; // name guessed: 0x71017a3430 + static SoundEvent* ENTITY_EVOCATION_ILLAGER_HURT; // name guessed: 0x71017a3438 + static SoundEvent* ENTITY_EVOCATION_ILLAGER_PREPARE_ATTACK; // name guessed: 0x71017a3440 + static SoundEvent* ENTITY_EVOCATION_ILLAGER_PREPARE_SUMMON; // name guessed: 0x71017a3448 + static SoundEvent* ENTITY_EVOCATION_ILLAGER_PREPARE_WOLOLO; // name guessed: 0x71017a3450 + static SoundEvent* RANDOM_BOW_5; // name guessed: 0x71017a3458 + static SoundEvent* RANDOM_ORB; // name guessed: 0x71017a3460 + static SoundEvent* RANDOM_ORB_2; // name guessed: 0x71017a3468 + static SoundEvent* BLOCK_FENCE_GATE_CLOSE; // name guessed: 0x71017a3470 + static SoundEvent* BLOCK_FENCE_GATE_OPEN; // name guessed: 0x71017a3478 + static SoundEvent* MOB_GHAST_FIREBALL_3; // name guessed: 0x71017a3480 + static SoundEvent* FIREWORKS_BLAST; // name guessed: 0x71017a3488 + static SoundEvent* FIREWORKS_BLAST_FAR; // name guessed: 0x71017a3490 + static SoundEvent* FIREWORKS_LARGE_BLAST; // name guessed: 0x71017a3498 + static SoundEvent* FIREWORKS_LARGE_BLAST_FAR; // name guessed: 0x71017a34a0 + static SoundEvent* FIREWORKS_LAUNCH; // name guessed: 0x71017a34a8 + static SoundEvent* RANDOM_BOW_6; // name guessed: 0x71017a34b0 + static SoundEvent* FIREWORKS_TWINKLE; // name guessed: 0x71017a34b8 + static SoundEvent* FIREWORKS_TWINKLE_FAR; // name guessed: 0x71017a34c0 + static SoundEvent* FIRE_AMBIENT; // name guessed: 0x71017a34c8 + static SoundEvent* RANDOM_FIZZ; // name guessed: 0x71017a34d0 + static SoundEvent* FIRE_IGNITE; // name guessed: 0x71017a34d8 + static SoundEvent* BLOCK_FURNACE_FIRE_CRACKLE; // name guessed: 0x71017a34e0 + static SoundEvent* DAMAGE_FALLBIG; // name guessed: 0x71017a34e8 + static SoundEvent* RANDOM_FIZZ_2; // name guessed: 0x71017a34f0 + static SoundEvent* DAMAGE_HURTFLESH; // name guessed: 0x71017a34f8 + static SoundEvent* RANDOM_DRINK; // name guessed: 0x71017a3500 + static SoundEvent* RANDOM_EAT; // name guessed: 0x71017a3508 + static SoundEvent* RANDOM_EXPLODE_3; // name guessed: 0x71017a3510 + static SoundEvent* RANDOM_FIZZ_3; // name guessed: 0x71017a3518 + static SoundEvent* DAMAGE_HURTFLESH_2; // name guessed: 0x71017a3520 + static SoundEvent* DAMAGE_FALLSMALL; // name guessed: 0x71017a3528 + static SoundEvent* RANDOM_SPLASH; // name guessed: 0x71017a3530 + static SoundEvent* LIQUID_SWIM; // name guessed: 0x71017a3538 + static SoundEvent* MOB_GHAST_MOAN; // name guessed: 0x71017a3540 + static SoundEvent* MOB_GHAST_DEATH; // name guessed: 0x71017a3548 + static SoundEvent* MOB_GHAST_SCREAM; // name guessed: 0x71017a3550 + static SoundEvent* MOB_GHAST_SCREAM_2; // name guessed: 0x71017a3558 + static SoundEvent* MOB_GHAST_FIREBALL_4; // name guessed: 0x71017a3560 + static SoundEvent* MOB_GHAST_CHARGE; // name guessed: 0x71017a3568 + static SoundEvent* RANDOM_GLASS; // name guessed: 0x71017a3570 + static SoundEvent* STEP_STONE_3; // name guessed: 0x71017a3578 + static SoundEvent* STEP_STONE_4; // name guessed: 0x71017a3580 + static SoundEvent* DIG_STONE_3; // name guessed: 0x71017a3588 + static SoundEvent* STEP_STONE_5; // name guessed: 0x71017a3590 + static SoundEvent* DIG_GRASS; // name guessed: 0x71017a3598 + static SoundEvent* STEP_GRASS; // name guessed: 0x71017a35a0 + static SoundEvent* STEP_GRASS_2; // name guessed: 0x71017a35a8 + static SoundEvent* DIG_GRASS_2; // name guessed: 0x71017a35b0 + static SoundEvent* STEP_GRASS_3; // name guessed: 0x71017a35b8 + static SoundEvent* DIG_GRAVEL; // name guessed: 0x71017a35c0 + static SoundEvent* STEP_GRAVEL; // name guessed: 0x71017a35c8 + static SoundEvent* STEP_GRAVEL_2; // name guessed: 0x71017a35d0 + static SoundEvent* DIG_GRAVEL_2; // name guessed: 0x71017a35d8 + static SoundEvent* STEP_GRAVEL_3; // name guessed: 0x71017a35e0 + static SoundEvent* ENTITY_GUARDIAN_IDLE; // name guessed: 0x71017a35e8 + static SoundEvent* MOB_GUARDIAN_LAND_IDLE_2; // name guessed: 0x71017a35f0 + static SoundEvent* MOB_GUARDIAN_ATTACK; // name guessed: 0x71017a35f8 + static SoundEvent* MOB_GUARDIAN_DEATH; // name guessed: 0x71017a3600 + static SoundEvent* MOB_GUARDIAN_LAND_DEATH_2; // name guessed: 0x71017a3608 + static SoundEvent* MOB_GUARDIAN_FLOP_2; // name guessed: 0x71017a3610 + static SoundEvent* MOB_GUARDIAN_HIT; // name guessed: 0x71017a3618 + static SoundEvent* MOB_GUARDIAN_LAND_HIT_2; // name guessed: 0x71017a3620 + static SoundEvent* ITEM_HOE_TILL; // name guessed: 0x71017a3628 + static SoundEvent* MOB_HORSE_IDLE; // name guessed: 0x71017a3630 + static SoundEvent* MOB_HORSE_ANGRY; // name guessed: 0x71017a3638 + static SoundEvent* MOB_HORSE_ARMOR; // name guessed: 0x71017a3640 + static SoundEvent* MOB_HORSE_BREATHE; // name guessed: 0x71017a3648 + static SoundEvent* MOB_HORSE_DEATH; // name guessed: 0x71017a3650 + static SoundEvent* ENTITY_HORSE_EAT; // name guessed: 0x71017a3658 + static SoundEvent* MOB_HORSE_GALLOP; // name guessed: 0x71017a3660 + static SoundEvent* MOB_HORSE_HIT; // name guessed: 0x71017a3668 + static SoundEvent* MOB_HORSE_JUMP; // name guessed: 0x71017a3670 + static SoundEvent* MOB_HORSE_LAND; // name guessed: 0x71017a3678 + static SoundEvent* MOB_HORSE_LEATHER; // name guessed: 0x71017a3680 + static SoundEvent* MOB_HORSE_SOFT; // name guessed: 0x71017a3688 + static SoundEvent* MOB_HORSE_WOOD; // name guessed: 0x71017a3690 + static SoundEvent* GAME_HOSTILE_HURT_FALL_BIG; // name guessed: 0x71017a3698 + static SoundEvent* GAME_HOSTILE_DIE; // name guessed: 0x71017a36a0 + static SoundEvent* DAMAGE_HURTFLESH_3; // name guessed: 0x71017a36a8 + static SoundEvent* GAME_HOSTILE_HURT_FALL_SMALL; // name guessed: 0x71017a36b0 + static SoundEvent* GAME_HOSTILE_SWIM_SPLASH; // name guessed: 0x71017a36b8 + static SoundEvent* GAME_HOSTILE_SWIM; // name guessed: 0x71017a36c0 + static SoundEvent* ENTITY_HUSK_IDLE; // name guessed: 0x71017a36c8 + static SoundEvent* ENTITY_HUSK_DEATH; // name guessed: 0x71017a36d0 + static SoundEvent* ENTITY_HUSK_HURT; // name guessed: 0x71017a36d8 + static SoundEvent* ENTITY_HUSK_STEP; // name guessed: 0x71017a36e0 + static SoundEvent* ENTITY_ILLUSION_ILLAGER_AMBIENT; // name guessed: 0x71017a36e8 + static SoundEvent* ENTITY_ILLUSION_ILLAGER_CAST_SPELL; // name guessed: 0x71017a36f0 + static SoundEvent* ENTITY_ILLUSION_ILLAGER_DEATH; // name guessed: 0x71017a36f8 + static SoundEvent* ENTITY_ILLUSION_ILLAGER_HURT; // name guessed: 0x71017a3700 + static SoundEvent* ENTITY_ILLUSION_ILLAGER_MIRROR_MOVE; // name guessed: 0x71017a3708 + static SoundEvent* ENTITY_ILLUSION_ILLAGER_PREPARE_BLINDNESS; // name guessed: 0x71017a3710 + static SoundEvent* ENTITY_ILLUSION_ILLAGER_PREPARE_MIRROR; // name guessed: 0x71017a3718 + static SoundEvent* MOB_IRONGOLEM_THROW; // name guessed: 0x71017a3720 + static SoundEvent* MOB_IRONGOLEM_DEATH; // name guessed: 0x71017a3728 + static SoundEvent* MOB_IRONGOLEM_HIT; // name guessed: 0x71017a3730 + static SoundEvent* MOB_IRONGOLEM_WALK; // name guessed: 0x71017a3738 + static SoundEvent* BLOCK_IRON_DOOR_CLOSE; // name guessed: 0x71017a3740 + static SoundEvent* BLOCK_IRON_DOOR_OPEN; // name guessed: 0x71017a3748 + static SoundEvent* BLOCK_IRON_TRAPDOOR_CLOSE; // name guessed: 0x71017a3750 + static SoundEvent* BLOCK_IRON_TRAPDOOR_OPEN; // name guessed: 0x71017a3758 + static SoundEvent* ENTITY_ITEMFRAME_ADDITEM; // name guessed: 0x71017a3760 + static SoundEvent* ENTITY_ITEMFRAME_BREAK; // name guessed: 0x71017a3768 + static SoundEvent* ENTITY_ITEMFRAME_PLACE; // name guessed: 0x71017a3770 + static SoundEvent* ENTITY_ITEMFRAME_REMOVEITEM; // name guessed: 0x71017a3778 + static SoundEvent* ENTITY_ITEMFRAME_ROTATEITEM; // name guessed: 0x71017a3780 + static SoundEvent* RANDOM_BREAK; // name guessed: 0x71017a3788 + static SoundEvent* DIG_WOOD_2; // name guessed: 0x71017a3798 + static SoundEvent* STEP_LADDER; // name guessed: 0x71017a37a0 + static SoundEvent* STEP_LADDER_2; // name guessed: 0x71017a37a8 + static SoundEvent* DIG_WOOD_3; // name guessed: 0x71017a37b0 + static SoundEvent* STEP_LADDER_3; // name guessed: 0x71017a37b8 + static SoundEvent* RANDOM_FIZZ_4; // name guessed: 0x71017a37c8 + static SoundEvent* LIQUID_LAVA; // name guessed: 0x71017a37c0 + static SoundEvent* LIQUID_LAVAPOP; // name guessed: 0x71017a37d0 + static SoundEvent* ENTITY_LEASHKNOT_BREAK; // name guessed: 0x71017a37d8 + static SoundEvent* ENTITY_LEASHKNOT_PLACE; // name guessed: 0x71017a37e0 + static SoundEvent* RANDOM_CLICK_4; // name guessed: 0x71017a37e8 + static SoundEvent* RANDOM_EXPLODE_4; // name guessed: 0x71017a37f0 + static SoundEvent* AMBIENT_WEATHER_THUNDER; // name guessed: 0x71017a37f8 + static SoundEvent* RANDOM_BOW_7; // name guessed: 0x71017a3800 + static SoundEvent* ENTITY_LLAMA_AMBIENT; // name guessed: 0x71017a3808 + static SoundEvent* ENTITY_LLAMA_ANGRY; // name guessed: 0x71017a3810 + static SoundEvent* MOB_CHICKEN_PLOP_3; // name guessed: 0x71017a3818 + static SoundEvent* ENTITY_LLAMA_DEATH; // name guessed: 0x71017a3820 + static SoundEvent* ENTITY_LLAMA_EAT; // name guessed: 0x71017a3828 + static SoundEvent* ENTITY_LLAMA_HURT; // name guessed: 0x71017a3830 + static SoundEvent* ENTITY_LLAMA_SPIT; // name guessed: 0x71017a3838 + static SoundEvent* ENTITY_LLAMA_STEP; // name guessed: 0x71017a3840 + static SoundEvent* ENTITY_LLAMA_SWAG; // name guessed: 0x71017a3848 + static SoundEvent* MOB_SLIME_BIG; // name guessed: 0x71017a3850 + static SoundEvent* MOB_SLIME_BIG_2; // name guessed: 0x71017a3858 + static SoundEvent* MOB_MAGMACUBE_JUMP; // name guessed: 0x71017a3860 + static SoundEvent* MOB_MAGMACUBE_BIG; // name guessed: 0x71017a3868 + static SoundEvent* DIG_STONE_4; // name guessed: 0x71017a3870 + static SoundEvent* STEP_STONE_6; // name guessed: 0x71017a3878 + static SoundEvent* STEP_STONE_7; // name guessed: 0x71017a3880 + static SoundEvent* DIG_STONE_5; // name guessed: 0x71017a3888 + static SoundEvent* STEP_STONE_8; // name guessed: 0x71017a38a0 + static SoundEvent* RANDOM_CLICK_5; // name guessed: 0x71017a3890 + static SoundEvent* RANDOM_CLICK_6; // name guessed: 0x71017a3898 + static SoundEvent* MINECART_INSIDE; // name guessed: 0x71017a38a8 + static SoundEvent* MINECART_BASE; // name guessed: 0x71017a38b0 + static SoundEvent* MOB_SHEEP_SHEAR; // name guessed: 0x71017a38b8 + static SoundEvent* MOB_HORSE_DONKEY_IDLE_2; // name guessed: 0x71017a38c0 + static SoundEvent* MOB_HORSE_DONKEY_DEATH_2; // name guessed: 0x71017a38c8 + static SoundEvent* MOB_HORSE_DONKEY_HIT_2; // name guessed: 0x71017a38d0 + static SoundEvent* MOB_CHICKEN_PLOP_4; // name guessed: 0x71017a38d8 + static SoundEvent* NOTE_BD; // name guessed: 0x71017a38e0 + static SoundEvent* NOTE_BASSATTACK; // name guessed: 0x71017a38e8 + static SoundEvent* NOTE_HARP; // name guessed: 0x71017a38f0 + static SoundEvent* NOTE_HAT; // name guessed: 0x71017a38f8 + static SoundEvent* NOTE_PLING; // name guessed: 0x71017a3900 + static SoundEvent* NOTE_SNARE; // name guessed: 0x71017a3908 + static SoundEvent* BLOCK_NOTE_BELL; // name guessed: 0x71017a4248 + static SoundEvent* BLOCK_NOTE_CHIME; // name guessed: 0x71017a4250 + static SoundEvent* BLOCK_NOTE_FLUTE; // name guessed: 0x71017a4258 + static SoundEvent* BLOCK_NOTE_GUITAR; // name guessed: 0x71017a4260 + static SoundEvent* BLOCK_NOTE_XYLOPHONE; // name guessed: 0x71017a4240 + static SoundEvent* ENTITY_PAINTING_BREAK; // name guessed: 0x71017a3910 + static SoundEvent* ENTITY_PAINTING_PLACE; // name guessed: 0x71017a3918 + static SoundEvent* ENTITY_PARROT_AMBIENT; // name guessed: 0x71017a3920 + static SoundEvent* ENTITY_PARROT_DEATH; // name guessed: 0x71017a3928 + static SoundEvent* ENTITY_PARROT_EAT; // name guessed: 0x71017a3930 + static SoundEvent* ENTITY_PARROT_FLY; // name guessed: 0x71017a3938 + static SoundEvent* ENTITY_PARROT_HURT; // name guessed: 0x71017a3940 + static SoundEvent* ENTITY_PARROT_STEP; // name guessed: 0x71017a3a20 + static SoundEvent* MOB_PIG_IDLE; // name guessed: 0x71017a3a28 + static SoundEvent* MOB_PIG_DEATH; // name guessed: 0x71017a3a30 + static SoundEvent* MOB_PIG_IDLE_2; // name guessed: 0x71017a3a38 + static SoundEvent* MOB_HORSE_LEATHER_2; // name guessed: 0x71017a3a40 + static SoundEvent* MOB_PIG_STEP; // name guessed: 0x71017a3a48 + static SoundEvent* TILE_PISTON_IN; // name guessed: 0x71017a3a50 + static SoundEvent* TILE_PISTON_OUT; // name guessed: 0x71017a3a58 + static SoundEvent* ENTITY_PLAYER_ATTACK_CRIT; // name guessed: 0x71017a3a60 + static SoundEvent* ENTITY_PLAYER_ATTACK_KNOCKBACK; // name guessed: 0x71017a3a68 + static SoundEvent* ENTITY_PLAYER_ATTACK_WEAK; // name guessed: 0x71017a3a70 + static SoundEvent* ENTITY_PLAYER_ATTACK_STRONG; // name guessed: 0x71017a3a78 + static SoundEvent* ENTITY_PLAYER_ATTACK_SWEEP; // name guessed: 0x71017a3a80 + static SoundEvent* ENTITY_PLAYER_ATTACK_WEAK_2; // name guessed: 0x71017a3a88 + static SoundEvent* GAME_PLAYER_HURT_FALL_BIG; // name guessed: 0x71017a3a90 + static SoundEvent* RANDOM_BREATH; // name guessed: 0x71017a3a98 + static SoundEvent* RANDOM_BURP; // name guessed: 0x71017a3aa0 + static SoundEvent* DAMAGE_HURTFLESH_4; // name guessed: 0x71017a3aa8 + static SoundEvent* DAMAGE_HURTFLESH_5; // name guessed: 0x71017a3ab0 + static SoundEvent* RANDOM_LEVELUP; // name guessed: 0x71017a3ab8 + static SoundEvent* DAMAGE_FALLSMALL_2; // name guessed: 0x71017a3ac0 + static SoundEvent* GAME_PLAYER_SWIM_SPLASH; // name guessed: 0x71017a3ac8 + static SoundEvent* GAME_PLAYER_SWIM; // name guessed: 0x71017a3ad0 + static SoundEvent* ENTITY_PLAYER_HURT_DROWN; // name guessed: 0x71017a4280 + static SoundEvent* ENTITY_PLAYER_HURT_ON_FIRE; // name guessed: 0x71017a4288 + static SoundEvent* ENTITY_POLARBEAR_IDLE; // name guessed: 0x71017a3ad8 + static SoundEvent* ENTITY_POLARBEAR_BABYIDLE; // name guessed: 0x71017a3ae0 + static SoundEvent* ENTITY_POLARBEAR_DEATH; // name guessed: 0x71017a3ae8 + static SoundEvent* ENTITY_POLARBEAR_HURT; // name guessed: 0x71017a3af0 + static SoundEvent* ENTITY_POLARBEAR_STEP; // name guessed: 0x71017a3af8 + static SoundEvent* ENTITY_POLARBEAR_WARNING; // name guessed: 0x71017a3b00 + static SoundEvent* PORTAL_PORTAL; // name guessed: 0x71017a3b08 + static SoundEvent* PORTAL_TRAVEL; // name guessed: 0x71017a3b10 + static SoundEvent* PORTAL_TRIGGER; // name guessed: 0x71017a3b18 + static SoundEvent* ENTITY_RABBIT_IDLE; // name guessed: 0x71017a3b20 + static SoundEvent* ENTITY_RABBIT_ATTACK; // name guessed: 0x71017a3b28 + static SoundEvent* MOB_RABBIT_DEATH; // name guessed: 0x71017a3b30 + static SoundEvent* ENTITY_RABBIT_HURT; // name guessed: 0x71017a3b38 + static SoundEvent* ENTITY_RABBIT_HOP; // name guessed: 0x71017a3b40 + static SoundEvent* RECORD_11; // name guessed: 0x71017a3b48 + static SoundEvent* RECORD_13; // name guessed: 0x71017a3b50 + static SoundEvent* BLOCKS; // name guessed: 0x71017a3b58 + static SoundEvent* CAT; // name guessed: 0x71017a3b60 + static SoundEvent* CHIRP; // name guessed: 0x71017a3b68 + static SoundEvent* FAR; // name guessed: 0x71017a3b70 + static SoundEvent* MALL; // name guessed: 0x71017a3b78 + static SoundEvent* MELLOHI; // name guessed: 0x71017a3b80 + static SoundEvent* STAL; // name guessed: 0x71017a3b88 + static SoundEvent* STRAD; // name guessed: 0x71017a3b90 + static SoundEvent* WHERE_ARE_WE_NOW; // name guessed: 0x71017a3b98 + static SoundEvent* WARD; // name guessed: 0x71017a3ba0 + static SoundEvent* RANDOM_FIZZ_5; // name guessed: 0x71017a3ba8 + static SoundEvent* DIG_SAND; // name guessed: 0x71017a3bb0 + static SoundEvent* STEP_SAND; // name guessed: 0x71017a3bb8 + static SoundEvent* STEP_SAND_2; // name guessed: 0x71017a3bc0 + static SoundEvent* DIG_SAND_2; // name guessed: 0x71017a3bc8 + static SoundEvent* STEP_SAND_3; // name guessed: 0x71017a3bd0 + static SoundEvent* MOB_SHEEP_IDLE; // name guessed: 0x71017a3bd8 + static SoundEvent* MOB_SHEEP_IDLE_2; // name guessed: 0x71017a3be0 + static SoundEvent* MOB_SHEEP_IDLE_3; // name guessed: 0x71017a3be8 + static SoundEvent* MOB_SHEEP_SHEAR_2; // name guessed: 0x71017a3bf0 + static SoundEvent* MOB_SHEEP_STEP; // name guessed: 0x71017a3bf8 + static SoundEvent* ITEM_SHIELD_BLOCK; // name guessed: 0x71017a3c00 + static SoundEvent* RANDOM_BREAK_2; // name guessed: 0x71017a3c08 + static SoundEvent* SHOVEL_FLATTEN; // name guessed: 0x71017a3c10 + static SoundEvent* ITEM_TOTEM_USE; // name guessed: 0x71017a3e00 + static SoundEvent* BLOCK_SHULKER_BOX_CLOSE; // name guessed: 0x71017a3c28 + static SoundEvent* BLOCK_SHULKER_BOX_OPEN; // name guessed: 0x71017a3c20 + static SoundEvent* ENTITY_SHULKER_AMBIENT; // name guessed: 0x71017a3c18 + static SoundEvent* ENTITY_SHULKER_CLOSE; // name guessed: 0x71017a3c40 + static SoundEvent* ENTITY_SHULKER_DEATH; // name guessed: 0x71017a3c48 + static SoundEvent* ENTITY_SHULKER_HURT; // name guessed: 0x71017a3c50 + static SoundEvent* ENTITY_SHULKER_HURT_CLOSED; // name guessed: 0x71017a3c58 + static SoundEvent* ENTITY_SHULKER_OPEN; // name guessed: 0x71017a3c60 + static SoundEvent* ENTITY_SHULKER_SHOOT; // name guessed: 0x71017a3c68 + static SoundEvent* MOB_ENDERMEN_PORTAL_3; // name guessed: 0x71017a3c70 + static SoundEvent* ENTITY_SHULKER_BULLET_HIT; // name guessed: 0x71017a3c30 + static SoundEvent* ENTITY_SHULKER_BULLET_HIT_2; // name guessed: 0x71017a3c38 + static SoundEvent* MOB_SILVERFISH_IDLE_2; // name guessed: 0x71017a3c78 + static SoundEvent* MOB_SILVERFISH_KILL_2; // name guessed: 0x71017a3c80 + static SoundEvent* MOB_SILVERFISH_HIT_2; // name guessed: 0x71017a3c88 + static SoundEvent* MOB_SILVERFISH_STEP_2; // name guessed: 0x71017a3c90 + static SoundEvent* MOB_SKELETON_IDLE; // name guessed: 0x71017a3c98 + static SoundEvent* MOB_SKELETON_DEATH; // name guessed: 0x71017a3ca0 + static SoundEvent* MOB_SKELETON_HURT; // name guessed: 0x71017a3cc0 + static SoundEvent* RANDOM_BOW_8; // name guessed: 0x71017a3cc8 + static SoundEvent* MOB_SKELETON_STEP; // name guessed: 0x71017a3cd0 + static SoundEvent* MOB_HORSE_SKELETON_IDLE; // name guessed: 0x71017a3ca8 + static SoundEvent* MOB_HORSE_SKELETON_DEATH; // name guessed: 0x71017a3cb0 + static SoundEvent* MOB_HORSE_SKELETON_HIT; // name guessed: 0x71017a3cb8 + static SoundEvent* MOB_SLIME_BIG_3; // name guessed: 0x71017a3cd8 + static SoundEvent* MOB_SLIME_SMALL; // name guessed: 0x71017a3ce0 + static SoundEvent* MOB_SLIME_SMALL_2; // name guessed: 0x71017a3ce8 + static SoundEvent* MOB_SLIME_BIG_4; // name guessed: 0x71017a3cf0 + static SoundEvent* MOB_SLIME_SMALL_3; // name guessed: 0x71017a3cf8 + static SoundEvent* MOB_SLIME_ATTACK; // name guessed: 0x71017a2df8 + static SoundEvent* MOB_SLIME_BIG_5; // name guessed: 0x71017a2e18 + static SoundEvent* MOB_SLIME_BIG_6; // name guessed: 0x71017a2e08 + static SoundEvent* MOB_SLIME_BIG_7; // name guessed: 0x71017a2e38 + static SoundEvent* MOB_SLIME_BIG_8; // name guessed: 0x71017a2e28 + static SoundEvent* MOB_SLIME_SMALL_4; // name guessed: 0x71017a3d00 + static SoundEvent* MOB_SLIME_SMALL_5; // name guessed: 0x71017a3d08 + static SoundEvent* MOB_MAGMACUBE_SMALL; // name guessed: 0x71017a3d10 + static SoundEvent* MOB_SLIME_SMALL_6; // name guessed: 0x71017a2e10 + static SoundEvent* MOB_SLIME_SMALL_7; // name guessed: 0x71017a2e00 + static SoundEvent* MOB_SLIME_SMALL_8; // name guessed: 0x71017a2e30 + static SoundEvent* MOB_SLIME_SMALL_9; // name guessed: 0x71017a2e20 + static SoundEvent* RANDOM_BOW_9; // name guessed: 0x71017a2e40 + static SoundEvent* ENTITY_SNOWMAN_AMBIENT; // name guessed: 0x71017a2ea8 + static SoundEvent* ENTITY_SNOWMAN_DEATH; // name guessed: 0x71017a2eb8 + static SoundEvent* ENTITY_SNOWMAN_HURT; // name guessed: 0x71017a2eb0 + static SoundEvent* RANDOM_BOW_10; // name guessed: 0x71017a2ea0 + static SoundEvent* DIG_SNOW; // name guessed: 0x71017a3d18 + static SoundEvent* STEP_SNOW; // name guessed: 0x71017a3d20 + static SoundEvent* STEP_SNOW_2; // name guessed: 0x71017a3d28 + static SoundEvent* DIG_SNOW_2; // name guessed: 0x71017a3d30 + static SoundEvent* STEP_SNOW_3; // name guessed: 0x71017a3d38 + static SoundEvent* MOB_SPIDER_IDLE; // name guessed: 0x71017a3d40 + static SoundEvent* MOB_SPIDER_DEATH; // name guessed: 0x71017a3d48 + static SoundEvent* MOB_SPIDER_IDLE_2; // name guessed: 0x71017a3d50 + static SoundEvent* MOB_SPIDER_STEP; // name guessed: 0x71017a3d58 + static SoundEvent* RANDOM_GLASS_2; // name guessed: 0x71017a3d60 + static SoundEvent* RANDOM_BOW_11; // name guessed: 0x71017a3d68 + static SoundEvent* ENTITY_SQUID_IDLE; // name guessed: 0x71017a3d70 + static SoundEvent* ENTITY_SQUID_DEATH; // name guessed: 0x71017a3d78 + static SoundEvent* ENTITY_SQUID_HURT; // name guessed: 0x71017a3d80 + static SoundEvent* DIG_STONE_6; // name guessed: 0x71017a3d88 + static SoundEvent* STEP_STONE_9; // name guessed: 0x71017a3da0 + static SoundEvent* STEP_STONE_10; // name guessed: 0x71017a3da8 + static SoundEvent* DIG_STONE_7; // name guessed: 0x71017a3db0 + static SoundEvent* STEP_STONE_11; // name guessed: 0x71017a3dc8 + static SoundEvent* RANDOM_CLICK_7; // name guessed: 0x71017a3d90 + static SoundEvent* RANDOM_CLICK_8; // name guessed: 0x71017a3d98 + static SoundEvent* RANDOM_CLICK_9; // name guessed: 0x71017a3db8 + static SoundEvent* RANDOM_CLICK_10; // name guessed: 0x71017a3dc0 + static SoundEvent* ENTITY_STRAY_IDLE; // name guessed: 0x71017a3dd0 + static SoundEvent* ENTITY_STRAY_DEATH; // name guessed: 0x71017a3dd8 + static SoundEvent* ENTITY_STRAY_HURT; // name guessed: 0x71017a3de0 + static SoundEvent* ENTITY_STRAY_STEP; // name guessed: 0x71017a3de8 + static SoundEvent* ENCHANT_THORNS_HIT; // name guessed: 0x71017a3df0 + static SoundEvent* RANDOM_FUSE_2; // name guessed: 0x71017a3df8 + static SoundEvent* RANDOM_CLICK_11; // name guessed: 0x71017a3e08 + static SoundEvent* RANDOM_CLICK_12; // name guessed: 0x71017a3e10 + static SoundEvent* RANDOM_CLICK_13; // name guessed: 0x71017a3e18 + static SoundEvent* RANDOM_BOWHIT_2; // name guessed: 0x71017a3e20 + static SoundEvent* RANDOM_CLICK; // name guessed: 0x71017a3e28 + static SoundEvent* ENTITY_VEX_IDLE; // name guessed: 0x71017a3e30 + static SoundEvent* ENTITY_VEX_CHARGE; // name guessed: 0x71017a3e38 + static SoundEvent* ENTITY_VEX_DEATH; // name guessed: 0x71017a3e40 + static SoundEvent* ENTITY_VEX_HURT; // name guessed: 0x71017a3e48 + static SoundEvent* MOB_VILLAGER_IDLE; // name guessed: 0x71017a3e50 + static SoundEvent* MOB_VILLAGER_DEATH; // name guessed: 0x71017a3e58 + static SoundEvent* MOB_VILLAGER_HIT; // name guessed: 0x71017a3e60 + static SoundEvent* MOB_VILLAGER_NO; // name guessed: 0x71017a3e68 + static SoundEvent* MOB_VILLAGER_HAGGLE; // name guessed: 0x71017a3e70 + static SoundEvent* MOB_VILLAGER_YES; // name guessed: 0x71017a3e78 + static SoundEvent* ENTITY_VINDICATION_ILLAGER_AMBIENT; // name guessed: 0x71017a3e80 + static SoundEvent* ENTITY_VINDICATION_ILLAGER_DEATH; // name guessed: 0x71017a3e88 + static SoundEvent* ENTITY_VINDICATION_ILLAGER_HURT; // name guessed: 0x71017a3e90 + static SoundEvent* BLOCK_WATERLILY_PLACE; // name guessed: 0x71017a3e98 + static SoundEvent* LIQUID_WATER; // name guessed: 0x71017a3ea0 + static SoundEvent* AMBIENT_WEATHER_RAIN; // name guessed: 0x71017a3ea8 + static SoundEvent* AMBIENT_WEATHER_RAIN_2; // name guessed: 0x71017a3eb0 + static SoundEvent* ENTITY_WITCH_IDLE; // name guessed: 0x71017a3eb8 + static SoundEvent* ENTITY_WITCH_DEATH; // name guessed: 0x71017a3ec0 + static SoundEvent* ENTITY_WITCH_DRINK; // name guessed: 0x71017a3ec8 + static SoundEvent* ENTITY_WITCH_HURT; // name guessed: 0x71017a3ed0 + static SoundEvent* ENTITY_WITCH_THROW; // name guessed: 0x71017a3ed8 + static SoundEvent* MOB_WITHER_IDLE; // name guessed: 0x71017a3ee0 + static SoundEvent* MOB_ZOMBIE_WOODBREAK; // name guessed: 0x71017a3ee8 + static SoundEvent* MOB_WITHER_DEATH; // name guessed: 0x71017a3ef0 + static SoundEvent* MOB_WITHER_HURT; // name guessed: 0x71017a3ef8 + static SoundEvent* MOB_WITHER_SHOOT; // name guessed: 0x71017a3f00 + static SoundEvent* MOB_WITHER_SPAWN; // name guessed: 0x71017a3f28 + static SoundEvent* MOB_SKELETON_IDLE_2; // name guessed: 0x71017a3f08 + static SoundEvent* MOB_SKELETON_DEATH_2; // name guessed: 0x71017a3f10 + static SoundEvent* MOB_SKELETON_HURT_2; // name guessed: 0x71017a3f18 + static SoundEvent* MOB_SKELETON_STEP_2; // name guessed: 0x71017a3f20 + static SoundEvent* MOB_WOLF_BARK; // name guessed: 0x71017a3f30 + static SoundEvent* MOB_WOLF_DEATH; // name guessed: 0x71017a3f38 + static SoundEvent* MOB_WOLF_GROWL; // name guessed: 0x71017a3f40 + static SoundEvent* MOB_WOLF_HOWL; // name guessed: 0x71017a3f48 + static SoundEvent* MOB_WOLF_HURT; // name guessed: 0x71017a3f50 + static SoundEvent* MOB_WOLF_PANTING; // name guessed: 0x71017a3f58 + static SoundEvent* MOB_WOLF_SHAKE; // name guessed: 0x71017a3f60 + static SoundEvent* MOB_WOLF_STEP; // name guessed: 0x71017a3f68 + static SoundEvent* MOB_WOLF_WHINE; // name guessed: 0x71017a3f70 + static SoundEvent* BLOCK_WOODEN_DOOR_CLOSE; // name guessed: 0x71017a3f78 + static SoundEvent* BLOCK_WOODEN_DOOR_OPEN; // name guessed: 0x71017a3f80 + static SoundEvent* BLOCK_WOODEN_TRAPDOOR_CLOSE; // name guessed: 0x71017a3f88 + static SoundEvent* BLOCK_WOODEN_TRAPDOOR_OPEN; // name guessed: 0x71017a3f90 + static SoundEvent* DIG_WOOD_4; // name guessed: 0x71017a3f98 + static SoundEvent* STEP_WOOD; // name guessed: 0x71017a3fb0 + static SoundEvent* STEP_WOOD_2; // name guessed: 0x71017a3fb8 + static SoundEvent* DIG_WOOD_5; // name guessed: 0x71017a3fc0 + static SoundEvent* STEP_WOOD_3; // name guessed: 0x71017a3fd8 + static SoundEvent* RANDOM_CLICK_14; // name guessed: 0x71017a3fa0 + static SoundEvent* RANDOM_CLICK_15; // name guessed: 0x71017a3fa8 + static SoundEvent* RANDOM_CLICK_16; // name guessed: 0x71017a3fc8 + static SoundEvent* RANDOM_CLICK_17; // name guessed: 0x71017a3fd0 + static SoundEvent* MOB_ZOMBIE_IDLE; // name guessed: 0x71017a3fe0 + static SoundEvent* MOB_ZOMBIE_WOOD; // name guessed: 0x71017a3fe8 + static SoundEvent* MOB_ZOMBIE_METAL; // name guessed: 0x71017a3ff0 + static SoundEvent* MOB_ZOMBIE_WOODBREAK_2; // name guessed: 0x71017a3ff8 + static SoundEvent* MOB_ZOMBIE_DEATH; // name guessed: 0x71017a4000 + static SoundEvent* MOB_ZOMBIE_HURT; // name guessed: 0x71017a4020 + static SoundEvent* MOB_ZOMBIE_INFECT; // name guessed: 0x71017a4028 + static SoundEvent* MOB_ZOMBIE_STEP; // name guessed: 0x71017a4050 + static SoundEvent* MOB_HORSE_ZOMBIE_IDLE; // name guessed: 0x71017a4008 + static SoundEvent* MOB_HORSE_ZOMBIE_DEATH; // name guessed: 0x71017a4010 + static SoundEvent* MOB_HORSE_ZOMBIE_HIT; // name guessed: 0x71017a4018 + static SoundEvent* MOB_ZOMBIEPIG_IDLE; // name guessed: 0x71017a4030 + static SoundEvent* MOB_ZOMBIEPIG_ANGRY; // name guessed: 0x71017a4038 + static SoundEvent* MOB_ZOMBIEPIG_DEATH; // name guessed: 0x71017a4040 + static SoundEvent* MOB_ZOMBIEPIG_HURT; // name guessed: 0x71017a4048 + static SoundEvent* MOB_ZOMBIE_IDLE_2; // name guessed: 0x71017a4058 + static SoundEvent* MOB_ZOMBIE_UNFECT; // name guessed: 0x71017a4060 + static SoundEvent* MOB_ZOMBIE_REMEDY; // name guessed: 0x71017a4068 + static SoundEvent* MOB_ZOMBIE_DEATH_2; // name guessed: 0x71017a4070 + static SoundEvent* MOB_ZOMBIE_HURT_2; // name guessed: 0x71017a4078 + static SoundEvent* MOB_ZOMBIE_STEP_2; // name guessed: 0x71017a4080 + static SoundEvent* MG01_SHOWDOWN; // name guessed: 0x71017a4088 + static SoundEvent* MG01_CELEBRATION; // name guessed: 0x71017a4090 + static SoundEvent* MG01_CHEST; // name guessed: 0x71017a4098 + static SoundEvent* MG01_DEATH; // name guessed: 0x71017a40a0 + static SoundEvent* MG01_GRACE; // name guessed: 0x71017a40a8 + static SoundEvent* MG01_GRACEZERO; // name guessed: 0x71017a40b0 + static SoundEvent* MG01_LOBBY; // name guessed: 0x71017a40b8 + static SoundEvent* MG01_LOBBYACCENT; // name guessed: 0x71017a40c0 + static SoundEvent* MG01_LOBBYZERO; // name guessed: 0x71017a40c8 + static SoundEvent* MG01_GAMESTART; // name guessed: 0x71017a40d0 + static SoundEvent* MG01_STARTCOUNTDOWN; // name guessed: 0x71017a40d8 + static SoundEvent* MG02_SHOWDOWN; // name guessed: 0x71017a40e0 + static SoundEvent* MG02_GAMESTART; // name guessed: 0x71017a40e8 + static SoundEvent* MG02_GAMEEND; // name guessed: 0x71017a40f0 + static SoundEvent* MG02_DEATH; // name guessed: 0x71017a40f8 + static SoundEvent* MG02_STARTCOUNTDOWN; // name guessed: 0x71017a4100 + static SoundEvent* MG02_FALLING; // name guessed: 0x71017a4108 + static SoundEvent* MG03_DEATH; // name guessed: 0x71017a4110 + static SoundEvent* MG03_CHECKPOINT; // name guessed: 0x71017a4118 + static SoundEvent* MG03_BESTTIME; // name guessed: 0x71017a4128 + static SoundEvent* MG03_FINISHLINE; // name guessed: 0x71017a4130 + static SoundEvent* MG03_FINISHLINEBESTSCORE; // name guessed: 0x71017a4138 + static SoundEvent* MG03_FINISHLINEBESTTIME; // name guessed: 0x71017a4140 + static SoundEvent* MG03_FINISHLINE1ST; // name guessed: 0x71017a4148 + static SoundEvent* MG03_FINISHLINE1STBESTSCORE; // name guessed: 0x71017a4150 + static SoundEvent* MG03_FINISHLINE1STBESTTIME; // name guessed: 0x71017a4158 + static SoundEvent* MG03_FINISHLINE2ND; // name guessed: 0x71017a4160 + static SoundEvent* MG03_FINISHLINE2NDBESTSCORE; // name guessed: 0x71017a4168 + static SoundEvent* MG03_FINISHLINE2NDBESTTIME; // name guessed: 0x71017a4170 + static SoundEvent* MG03_FINISHLINE3RD; // name guessed: 0x71017a4178 + static SoundEvent* MG03_FINISHLINE3RDBESTSCORE; // name guessed: 0x71017a4180 + static SoundEvent* MG03_FINISHLINE3RDBESTTIME; // name guessed: 0x71017a4188 + static SoundEvent* MG03_WINNER; // name guessed: 0x71017a4198 + static SoundEvent* MG03_WINNERANNOUNCE; // name guessed: 0x71017a41a0 + static SoundEvent* MG03_BESTSCORE; // name guessed: 0x71017a41a8 + static SoundEvent* MG03_REDALERTLOOP; // name guessed: 0x71017a41b0 + static SoundEvent* MG03_FARALERTSOLO; // name guessed: 0x71017a41b8 + static SoundEvent* MG03_EMERALDPOINTTICK; // name guessed: 0x71017a41c0 + static SoundEvent* MG03_EMERALDPOINTTOK; // name guessed: 0x71017a41c8 + static SoundEvent* MG03_GOLDPOINTTICK; // name guessed: 0x71017a41d0 + static SoundEvent* MG03_GOLDPOINTTOK; // name guessed: 0x71017a41d8 + static SoundEvent* MG03_DIAMONDPOINT; // name guessed: 0x71017a41e0 + static SoundEvent* MG03_RESPAWN; // name guessed: 0x71017a41e8 + static SoundEvent* MG03_COUNTDOWNZERO; // name guessed: 0x71017a41f0 + static SoundEvent* MG03_FALLBIG_ALIAS; // name guessed: 0x71017a41f8 + static SoundEvent* MG03_FALLSMALL_ALIAS; // name guessed: 0x71017a4200 + static SoundEvent* MG03_HIT_ALIAS; // name guessed: 0x71017a4208 + static SoundEvent* MOB_BLAZE_BREATHE_ALIAS; // name guessed: 0x71017a3948 + static SoundEvent* RANDOM_FUSE_ALIAS; // name guessed: 0x71017a3950 + static SoundEvent* MOB_GUARDIAN_LAND_IDLE_ALIAS; // name guessed: 0x71017a3958 + static SoundEvent* MOB_ENDERDRAGON_GROWL_ALIAS; // name guessed: 0x71017a3960 + static SoundEvent* MOB_ENDERMEN_IDLE_ALIAS; // name guessed: 0x71017a3968 + static SoundEvent* MOB_SILVERFISH_IDLE_ALIAS; // name guessed: 0x71017a3970 + static SoundEvent* ENTITY_EVOCATION_ILLAGER_AMBIENT_ALIAS; // name guessed: 0x71017a3978 + static SoundEvent* MOB_GHAST_MOAN_ALIAS; // name guessed: 0x71017a3980 + static SoundEvent* ENTITY_HUSK_IDLE_ALIAS; // name guessed: 0x71017a3988 + static SoundEvent* ENTITY_ILLUSION_ILLAGER_AMBIENT_ALIAS; // name guessed: 0x71017a3990 + static SoundEvent* MOB_MAGMACUBE_BIG_ALIAS; // name guessed: 0x71017a3998 + static SoundEvent* ENTITY_POLARBEAR_IDLE_ALIAS; // name guessed: 0x71017a39a0 + static SoundEvent* ENTITY_SHULKER_AMBIENT_ALIAS; // name guessed: 0x71017a39a8 + static SoundEvent* MOB_SILVERFISH_IDLE_ALIAS_2; // name guessed: 0x71017a39b0 + static SoundEvent* MOB_SKELETON_IDLE_ALIAS; // name guessed: 0x71017a39b8 + static SoundEvent* MOB_SLIME_BIG_ALIAS; // name guessed: 0x71017a39c0 + static SoundEvent* MOB_SPIDER_IDLE_ALIAS; // name guessed: 0x71017a39c8 + static SoundEvent* ENTITY_STRAY_IDLE_ALIAS; // name guessed: 0x71017a39d0 + static SoundEvent* ENTITY_VEX_IDLE_ALIAS; // name guessed: 0x71017a39d8 + static SoundEvent* ENTITY_VINDICATION_ILLAGER_AMBIENT_ALIAS; // name guessed: 0x71017a39e0 + static SoundEvent* ENTITY_WITCH_IDLE_ALIAS; // name guessed: 0x71017a39e8 + static SoundEvent* MOB_WITHER_IDLE_ALIAS; // name guessed: 0x71017a39f0 + static SoundEvent* MOB_SKELETON_IDLE_ALIAS_2; // name guessed: 0x71017a39f8 + static SoundEvent* MOB_WOLF_BARK_ALIAS; // name guessed: 0x71017a3a00 + static SoundEvent* MOB_ZOMBIE_IDLE_ALIAS; // name guessed: 0x71017a3a08 + static SoundEvent* MOB_ZOMBIEPIG_IDLE_ALIAS; // name guessed: 0x71017a3a10 + static SoundEvent* MOB_ZOMBIE_IDLE_ALIAS_2; // name guessed: 0x71017a3a18 + static SoundEvent* RANDOM_EXPLODE_ALIAS; // name guessed: 0x71017a4290 + static SoundEvent* RANDOM_SPLASH_ALIAS; // name guessed: 0x71017a4298 + static SoundEvent* RANDOM_SPLASH_ALIAS_2; // name guessed: 0x71017a42a0 + static SoundEvent* RANDOM_SPLASH_ALIAS_3; // name guessed: 0x71017a42b0 + static SoundEvent* RANDOM_SPLASH_ALIAS_4; // name guessed: 0x71017a42b8 + static SoundEvent* RANDOM_SPLASH_ALIAS_5; // name guessed: 0x71017a42c0 + static SoundEvent* RANDOM_SPLASH_ALIAS_6; // name guessed: 0x71017a42c8 + static SoundEvent* RANDOM_SPLASH_ALIAS_7; // name guessed: 0x71017a42d0 + static SoundEvent* RANDOM_SPLASH_ALIAS_8; // name guessed: 0x71017a42a8 }; diff --git a/src/Minecraft.World/java/io/ByteArrayInputStream.h b/src/Minecraft.World/java/io/ByteArrayInputStream.h index 49bfdb02..8b3c0f7e 100644 --- a/src/Minecraft.World/java/io/ByteArrayInputStream.h +++ b/src/Minecraft.World/java/io/ByteArrayInputStream.h @@ -13,6 +13,7 @@ class ByteArrayInputStream : public InputStream { int read(arrayWithLength) override; int read(arrayWithLength, unsigned int, unsigned int) override; void close() override; + void reset(); long long skip(long long) override; arrayWithLength m_buffer; diff --git a/src/Minecraft.World/java/io/DataInput.h b/src/Minecraft.World/java/io/DataInput.h index eb87b6a9..0b50a95d 100644 --- a/src/Minecraft.World/java/io/DataInput.h +++ b/src/Minecraft.World/java/io/DataInput.h @@ -12,9 +12,9 @@ class DataInput { virtual int readUnsignedShort() = 0; virtual wchar_t readChar() = 0; // is this correct? i swapped the two readFully methods for a match in ByteArrayTag::load - virtual void readFully(arrayWithLength) = 0; - virtual void readFully(arrayWithLength) = 0; - virtual void readBytes(arrayWithLength) = 0; + virtual bool readFully(arrayWithLength) = 0; + virtual bool readFully(arrayWithLength) = 0; + virtual bool readBytes(arrayWithLength) = 0; virtual double readDouble() = 0; virtual float readFloat() = 0; virtual int readInt() = 0; diff --git a/src/Minecraft.World/java/io/DataInputStream.h b/src/Minecraft.World/java/io/DataInputStream.h index c4dcf4e5..e0eccab2 100644 --- a/src/Minecraft.World/java/io/DataInputStream.h +++ b/src/Minecraft.World/java/io/DataInputStream.h @@ -25,9 +25,9 @@ class DataInputStream : public InputStream, public DataInput { int readUnsignedShort() override; wchar_t readChar() override; // todo: wrong order likely, need to maintain matching tho - void readBytes(arrayWithLength) override; - void readFully(arrayWithLength) override; - void readFully(arrayWithLength) override; + bool readBytes(arrayWithLength) override; + bool readFully(arrayWithLength) override; + bool readFully(arrayWithLength) override; double readDouble() override; float readFloat() override; int readInt() override; @@ -44,6 +44,8 @@ class DataInputStream : public InputStream, public DataInput { BlockPos* readBlockPosPointer(); not_null_ptr readItem(); CompoundTag* readNbt(); + CompoundTag* readCompressedNbt(); + void deleteChildStream(); InputStream* m_inputStream; }; diff --git a/src/Minecraft.World/java/io/DataOutputStream.h b/src/Minecraft.World/java/io/DataOutputStream.h index 9ca985d5..859ad7b8 100644 --- a/src/Minecraft.World/java/io/DataOutputStream.h +++ b/src/Minecraft.World/java/io/DataOutputStream.h @@ -39,7 +39,7 @@ class DataOutputStream : public OutputStream, public DataOutput { void writeVarInt(int); void writeVarLong(long); - void writeBlockPos(const BlockPos&) const; + void writeBlockPos(const BlockPos&); void writeItem(not_null_ptr); void writeNbt(CompoundTag*); diff --git a/src/Minecraft.World/java/io/File.h b/src/Minecraft.World/java/io/File.h index e74a5ab7..a5c634d6 100644 --- a/src/Minecraft.World/java/io/File.h +++ b/src/Minecraft.World/java/io/File.h @@ -20,15 +20,15 @@ class File { File& operator=(const File& rhs); std::wstring getPath() const; - void _delete(); + bool _delete(); bool mkdir() const; bool exists() const; bool isDirectory() const; bool isFile() const; - bool renameTo(const File& dest); - std::vector listFiles() const; + bool renameTo(File dest); + std::vector* listFiles() const; std::vector listFiles(FileFilter* filter) const; // unused in switch edition - long length() const; + long length(); std::wstring getName() const; std::wstring ext() const; @@ -42,18 +42,20 @@ std::wstring char16towstring(wchar_t*); const char* wstringtofilename(const std::wstring&, char (&)[256]); std::string formatstr(const char* format, ...); std::wstring formatwstr(const wchar_t* format, ...); -bool CreateDirectoryA(const char*, void*); -bool GetFileAttributesA(const char*); -bool MoveFileA(const char*, const char*); +int CreateDirectoryA(const char*, void*); +int GetFileAttributesA(const char*); +int MoveFileA(const char*, const char*); int GetLastError(); bool isDirectory(const std::wstring&); bool FindFirstFileA(const char*, _WIN32_FIND_DATAA*); std::wstring filenametowstring(const char*); bool FindNextFileA(int, _WIN32_FIND_DATAA*); -bool CloseHandle(nn::fs::FileHandle*); +bool CloseHandle(nn::fs::FileHandle*) asm("_Z11CloseHandlei"); // NOTE: this function declaration may be wrong as it seems that last argument differs with WiiU declaration nn::fs::FileHandle* CreateFileA(const char*, unsigned int, unsigned int, void*, unsigned int, unsigned int, void*); int GetFileSize(nn::fs::FileHandle*, unsigned int*); -int ReadFile(nn::fs::FileHandle*, void*, unsigned int, unsigned int*, _OVERLAPPED*); +int ReadFile(nn::fs::FileHandle*, void*, unsigned int, unsigned int*, + _OVERLAPPED*) asm("_Z8ReadFileiPvjPjP11_OVERLAPPED"); +unsigned int SetFilePointer(nn::fs::FileHandle*, int, int*, unsigned int); diff --git a/src/Minecraft.World/java/io/FileInputStream.h b/src/Minecraft.World/java/io/FileInputStream.h index 8483743c..15ff93fe 100644 --- a/src/Minecraft.World/java/io/FileInputStream.h +++ b/src/Minecraft.World/java/io/FileInputStream.h @@ -1,20 +1,26 @@ #pragma once #include "java/io/InputStream.h" +#include "nn/fs/fs_types.h" class File; class FileInputStream : public InputStream { public: FileInputStream(const File& file); + ~FileInputStream() override; - unsigned int read() override; - void read(arrayWithLength) override; - void read(arrayWithLength, unsigned int, unsigned int) override; + int read() override; + int read(arrayWithLength) override; + int read(arrayWithLength, unsigned int, unsigned int) override; void close() override; - void skip(long long) override; + long long skip(long long) override; + unsigned int filesize(); + + FileInputStream(const FileInputStream&) = delete; + FileInputStream& operator=(const FileInputStream&) = delete; private: - File* file; - bool _10; + nn::fs::FileHandle* m_file; + bool m_eof; }; diff --git a/src/Minecraft.World/net/minecraft/util/Mth.h b/src/Minecraft.World/net/minecraft/util/Mth.h index 97227879..2d8c8959 100644 --- a/src/Minecraft.World/net/minecraft/util/Mth.h +++ b/src/Minecraft.World/net/minecraft/util/Mth.h @@ -1,5 +1,6 @@ #pragma once +#include #include class Random; @@ -10,11 +11,13 @@ class Mth { static constexpr float PI = 3.1415927; static float* SIN; + static float* ATAN; static float sin(float); static float cos(float); static int floor(double); static int floor(float); + static int ceil(float); static float sqrt(float v); static float sqrt(double v); static double clamp(double, double, double); @@ -26,15 +29,17 @@ class Mth { static float abs(float i); static double abs(double i); static float wrapDegrees(float); - static void cached_atan_index(int, int); + static double wrapDegrees(double); + static int cached_atan_index(int, int); static void init(); static long lfloor(double); + static long round(double); static double clampedLerp(double, double, double); static double frac(double); static int hsvToRgb(float, float, float); static int nextInt(Random* random, int i, int j); static float nextFloat(Random* random, float i, float j); static double nextDouble(Random* random, double i, double j); - static std::wstring createInsecureUUID(Random* random); + static std::wstring createInsecureUUID(Random* random) asm("createInsecureUUID__3MthSFP6Random"); static int64_t getSeed(int, int, int); }; diff --git a/src/Minecraft.World/net/minecraft/util/datafix/DataFixTypes.h b/src/Minecraft.World/net/minecraft/util/datafix/DataFixTypes.h new file mode 100644 index 00000000..ed344804 --- /dev/null +++ b/src/Minecraft.World/net/minecraft/util/datafix/DataFixTypes.h @@ -0,0 +1,6 @@ +#pragma once + +class DataFixTypes { +public: + enum EDataFixTypes { ITEM = 5, STRUCTURE = 7 }; +}; diff --git a/src/Minecraft.World/net/minecraft/util/datafix/DataFixer.h b/src/Minecraft.World/net/minecraft/util/datafix/DataFixer.h new file mode 100644 index 00000000..4210b16f --- /dev/null +++ b/src/Minecraft.World/net/minecraft/util/datafix/DataFixer.h @@ -0,0 +1,11 @@ +#pragma once + +#include "net/minecraft/util/datafix/DataFixTypes.h" + +class CompoundTag; + +class DataFixer { +public: + DataFixer(); + virtual CompoundTag* update(DataFixTypes::EDataFixTypes, CompoundTag*, int version) = 0; +}; diff --git a/src/Minecraft.World/net/minecraft/util/datafix/DataFixerUpper.h b/src/Minecraft.World/net/minecraft/util/datafix/DataFixerUpper.h new file mode 100644 index 00000000..00e312ea --- /dev/null +++ b/src/Minecraft.World/net/minecraft/util/datafix/DataFixerUpper.h @@ -0,0 +1,33 @@ +#pragma once + +#include "net/minecraft/util/datafix/DataFixer.h" +#include +#include +#include + +class CompoundTag; +class DataFix; +class DataWalker; + +class DataFixerUpper : public DataFixer { +public: + explicit DataFixerUpper(int version); + CompoundTag* updateData(DataFixTypes::EDataFixTypes, CompoundTag*); + CompoundTag* update(DataFixTypes::EDataFixTypes, CompoundTag*, int version) override; + CompoundTag* applyFixes(DataFixTypes::EDataFixTypes, CompoundTag*, int version); + CompoundTag* applyWalkers(DataFixTypes::EDataFixTypes, CompoundTag*, int version); + std::vector* getOrCreateWalker(DataFixTypes::EDataFixTypes); + std::vector* getOrCreateFix(DataFixTypes::EDataFixTypes); + void addWalker(DataFixTypes::EDataFixTypes, DataWalker*); + void addFixer(DataFixTypes::EDataFixTypes, DataFix*); + + int m_version; + std::unordered_map*> m_walkers; + std::unordered_map*> m_fixes; + static const std::wstring DATA_VERSION_KEY; +}; + +static_assert(sizeof(DataFixerUpper) == 0x60, "Original fixer-upper allocation"); +static_assert(__builtin_offsetof(DataFixerUpper, m_version) == 8, "Original target-version offset"); +static_assert(__builtin_offsetof(DataFixerUpper, m_walkers) == 0x10, "Original walker registry offset"); +static_assert(__builtin_offsetof(DataFixerUpper, m_fixes) == 0x38, "Original fix registry offset"); diff --git a/src/Minecraft.World/net/minecraft/util/datafix/DataFixers.h b/src/Minecraft.World/net/minecraft/util/datafix/DataFixers.h index 6ec63a49..b2d5c073 100644 --- a/src/Minecraft.World/net/minecraft/util/datafix/DataFixers.h +++ b/src/Minecraft.World/net/minecraft/util/datafix/DataFixers.h @@ -1,8 +1,14 @@ #pragma once +#include + +class CompoundTag; +class DataFixer; class DataFixerUpper; class DataFixers { public: static DataFixerUpper* createFixerUpper(); + static CompoundTag* updateItem(DataFixer*, CompoundTag*, int version, const std::wstring& key); + static CompoundTag* updateItems(DataFixer*, CompoundTag*, int version, const std::wstring& key); }; diff --git a/src/Minecraft.World/net/minecraft/world/ArrayWithLength.h b/src/Minecraft.World/net/minecraft/world/ArrayWithLength.h index 7bb6b677..30d1c350 100644 --- a/src/Minecraft.World/net/minecraft/world/ArrayWithLength.h +++ b/src/Minecraft.World/net/minecraft/world/ArrayWithLength.h @@ -18,6 +18,12 @@ class arrayWithLength { this->m_data = initialData; this->m_length = length; } + template + arrayWithLength(T (&initialData)[N]) { + this->m_data = initialData; + this->m_length = N; + } + // NON_MATCHING | score: 3114 (lower is better) arrayWithLength(unsigned int size, bool a3) { T* temp; if (a3) @@ -29,6 +35,7 @@ class arrayWithLength { } T& operator[](unsigned int i) { return m_data[i]; } + const T& operator[](unsigned int i) const { return m_data[i]; } T& get(unsigned int i) { return m_data[i]; } void resize(unsigned int newSize) { @@ -51,7 +58,7 @@ class arrayWithLength { m_length = newSize; } - // NON_MATCHING + // NON_MATCHING | score: 3195 (lower is better) static void copy(T* dest, T* src, unsigned int size) { if (size) { unsigned int i = 0; diff --git a/src/Minecraft.World/net/minecraft/world/Difficulty.h b/src/Minecraft.World/net/minecraft/world/Difficulty.h index 8d04280e..54cd9bd0 100644 --- a/src/Minecraft.World/net/minecraft/world/Difficulty.h +++ b/src/Minecraft.World/net/minecraft/world/Difficulty.h @@ -6,7 +6,13 @@ class Difficulty { static const Difficulty* EASY; static const Difficulty* NORMAL; static const Difficulty* HARD; + static Difficulty* DIFFICULTIES[4]; static Difficulty* byId(int id); int getId() const; + +private: + int m_id; }; + +static_assert(sizeof(Difficulty) == 4, "Difficulty ID layout"); diff --git a/src/Minecraft.World/net/minecraft/world/PlayerUID.h b/src/Minecraft.World/net/minecraft/world/PlayerUID.h index ed3d46dd..171b92e2 100644 --- a/src/Minecraft.World/net/minecraft/world/PlayerUID.h +++ b/src/Minecraft.World/net/minecraft/world/PlayerUID.h @@ -2,6 +2,7 @@ #include "types.h" #include +#include class PlayerUID { public: @@ -17,7 +18,7 @@ class PlayerUID { const std::wstring toString() const; long m_gap0; - long m_mostSigBits; // grabbed from JDK, doubt those are correct but yeah, pure guess - long m_leastSigBits; + long m_mostSigBits; // name guessed: UUID high bits + long m_leastSigBits; // name guessed: UUID low bits char m_byte18; }; diff --git a/src/Minecraft.World/net/minecraft/world/entity/Entity.h b/src/Minecraft.World/net/minecraft/world/entity/Entity.h index ea148673..ca4b710f 100644 --- a/src/Minecraft.World/net/minecraft/world/entity/Entity.h +++ b/src/Minecraft.World/net/minecraft/world/entity/Entity.h @@ -59,6 +59,7 @@ class Entity : public std::enable_shared_from_this, public CommandSender static int sEntityAmount; static int sTlsIndex; static double sViewScale; + static const float sDegreesToRadians; static void staticCtor(); static int getSmallId(); @@ -294,6 +295,9 @@ class Entity : public std::enable_shared_from_this, public CommandSender Vec3* getPos(float); bool isType(eINSTANCEOF); + void setRot(float, float); + void interpolateTurn(float, float); + bool getSharedFlag(int); void setSharedFlag(int, bool); Vec3* calculateViewVector(float, float); int getId(); diff --git a/src/Minecraft.World/net/minecraft/world/entity/LivingEntity.h b/src/Minecraft.World/net/minecraft/world/entity/LivingEntity.h index 8d0cc489..40919228 100644 --- a/src/Minecraft.World/net/minecraft/world/entity/LivingEntity.h +++ b/src/Minecraft.World/net/minecraft/world/entity/LivingEntity.h @@ -18,6 +18,7 @@ class CombatTracker; class ThermalAreaRuleDefinition; class HumanoidArm; +// NON_MATCHING | score: 4326 (lower is better) class LivingEntity : public Entity { public: LivingEntity(Level* level); @@ -93,7 +94,7 @@ class LivingEntity : public Entity { virtual void onEffectUpdated(MobEffectInstance*, bool); virtual void onEffectRemoved(MobEffectInstance*); virtual void heal(float); - virtual void getHealth(); + virtual float getHealth(); virtual void setHealth(float); virtual void getLastDamageSource(); virtual void blockUsingShield(const std::shared_ptr&); @@ -119,7 +120,7 @@ class LivingEntity : public Entity { virtual void actuallyHurt(DamageSource, float); virtual void getCombatTracker(); virtual void getKillCredit(); - virtual void getMaxHealth(); + virtual float getMaxHealth(); virtual void getArrowCount(); virtual void setArrowCount(int); virtual void swing(InteractionHand::EInteractionHand); diff --git a/src/Minecraft.World/net/minecraft/world/entity/ai/attributes/AttributeModifier.h b/src/Minecraft.World/net/minecraft/world/entity/ai/attributes/AttributeModifier.h index ce282531..d89dcb53 100644 --- a/src/Minecraft.World/net/minecraft/world/entity/ai/attributes/AttributeModifier.h +++ b/src/Minecraft.World/net/minecraft/world/entity/ai/attributes/AttributeModifier.h @@ -7,6 +7,15 @@ enum eATTRIBUTE_ID { BASE_ATTACK_DAMAGE = 1, BASE_ATTACK_SPEED = 16 }; class AttributeModifier { public: AttributeModifier(eATTRIBUTE_ID, double, int); + AttributeModifier(double, int); + AttributeModifier(eATTRIBUTE_ID, double, int, bool); + void _init(int, std::wstring, double, int); + eATTRIBUTE_ID getId(); + double getAmount(); + int getOperation(); + bool isSerializable(); + void setSerialize(bool); + bool equals(AttributeModifier*); double m_amount; int m_operation; diff --git a/src/Minecraft.World/net/minecraft/world/entity/player/Player.h b/src/Minecraft.World/net/minecraft/world/entity/player/Player.h index 658b7322..de34e457 100644 --- a/src/Minecraft.World/net/minecraft/world/entity/player/Player.h +++ b/src/Minecraft.World/net/minecraft/world/entity/player/Player.h @@ -193,6 +193,13 @@ class Player : public LivingEntity { void setBool7FC(bool); bool isAllowedToAttackPlayers(); bool hasInvisiblePrivilege(); + bool isAllowedToFly(); + bool hasInvulnerablePrivilege(); + // name guessed: the unnamed entries at 0x71002d0d68 and 0x71002d0e10. + bool usesLegacyFoodHealing(); + bool isHurt(); + void causeFoodExhaustion(float); + FoodData* getFoodData(); int getPlayerGamePrivilege(EPlayerGamePrivileges); bool CheckPowerup(PowerupItems::eGlide_Timed_Powerup_ID); std::shared_ptr drop(not_null_ptr, bool); diff --git a/src/Minecraft.World/net/minecraft/world/item/BlockItem.h b/src/Minecraft.World/net/minecraft/world/item/BlockItem.h index 4421e48b..71339cfa 100644 --- a/src/Minecraft.World/net/minecraft/world/item/BlockItem.h +++ b/src/Minecraft.World/net/minecraft/world/item/BlockItem.h @@ -5,8 +5,15 @@ class BlockItem : public Item { public: BlockItem(Block* block); + ~BlockItem() override; Block* getBlock(); + BlockItem* setDescriptionId(unsigned int); + unsigned int getDescriptionId(int) override; + unsigned int getDescriptionId(not_null_ptr) override; + unsigned int getUseDescriptionId() override; + unsigned int getUseDescriptionId(not_null_ptr) override; - void* m_filler[2]; + Block* m_block; + void* m_unknown88; }; diff --git a/src/Minecraft.World/net/minecraft/world/item/Item.cpp b/src/Minecraft.World/net/minecraft/world/item/Item.cpp index a95d6aa6..4e7e075c 100644 --- a/src/Minecraft.World/net/minecraft/world/item/Item.cpp +++ b/src/Minecraft.World/net/minecraft/world/item/Item.cpp @@ -59,8 +59,10 @@ bool Item::canBeDepleted() { return this->m_maxDamage > 0 && (!this->m_stackedByData || this->m_maxStackSize == 1); } -void Item::setIconName(const std::wstring& iconName) { +// NON_MATCHING | score: 0 (lower is better) +Item* Item::setIconName(const std::wstring& iconName) { this->m_iconName = iconName; + return this; } not_null_ptr Item::getDefaultInstance() { @@ -102,6 +104,14 @@ int Item::getMaxStackSize() { return this->m_maxStackSize; } +int Item::getMaxDamage() { + return m_maxDamage; +} + +bool Item::isStackedByData() { + return m_stackedByData; +} + int Item::getLevelDataForAuxValue(int) { return 0; } diff --git a/src/Minecraft.World/net/minecraft/world/item/Item.h b/src/Minecraft.World/net/minecraft/world/item/Item.h index 99756a27..9282a70b 100644 --- a/src/Minecraft.World/net/minecraft/world/item/Item.h +++ b/src/Minecraft.World/net/minecraft/world/item/Item.h @@ -73,7 +73,7 @@ class Item { unsigned int getId(); bool canBeDepleted(); std::wstring getIconName(); - void setIconName(const std::wstring&); + Item* setIconName(const std::wstring&); void setMaxDamage(int); int getMaxDamage(); void setStackedByData(bool); @@ -152,6 +152,17 @@ class Item { virtual int GetOverrideCountColour(); virtual TextureAtlasSprite* GetOverrideCountIcon(not_null_ptr itemInstance); + static unsigned int StoneBlockNameResolver(not_null_ptr); + static unsigned int StoneBlockDescResolver(not_null_ptr); + Item* setBaseItemTypeAndMaterial(int, int); + Item* setDescriptionId(int); + Item* setDescriptionId(int, int); + Item* setUseDescriptionId(int); + Item* setCraftingRemainingItem(Item*); + Item* setMaxStackSize(int); + Item* setHandEquipped(); + Item* setFlag78(bool); + static void staticCtor(); static void staticInit(); diff --git a/src/Minecraft.World/net/minecraft/world/item/ItemInstance.h b/src/Minecraft.World/net/minecraft/world/item/ItemInstance.h index 8cfecdab..51bd6942 100644 --- a/src/Minecraft.World/net/minecraft/world/item/ItemInstance.h +++ b/src/Minecraft.World/net/minecraft/world/item/ItemInstance.h @@ -5,6 +5,7 @@ #include #include +#include class Block; class BlockState; @@ -23,7 +24,7 @@ class Random; class Tag; class CensoredString; -class ItemInstance { +class ItemInstance : public std::enable_shared_from_this { public: static not_null_ptr EMPTY; @@ -53,7 +54,7 @@ class ItemInstance { void use(Level*, std::shared_ptr, InteractionHand::EInteractionHand); void finishUsingItem(Level*, std::shared_ptr); CompoundTag* save(CompoundTag*); - void getMaxStackSize(); + int getMaxStackSize(); bool hasTag(); CompoundTag* getTag(); bool isDamageableItem(); @@ -130,8 +131,6 @@ class ItemInstance { bool operator=(const ItemInstance&); private: - void* m_qword0 = nullptr; - void* m_qword8 = nullptr; int m_count; int m_dword14; Item* m_item; @@ -139,11 +138,12 @@ class ItemInstance { bool m_isEmpty; int m_damage; bool m_byte30; - void* m_qword38 = nullptr; - void* m_qword40 = nullptr; - std::shared_ptr m_censoredString; + std::weak_ptr m_frame; + std::shared_ptr m_censoredString; void* m_qword58; bool m_byte60; void* m_qword68; void* m_qword70; }; + +ASSERT_SIZEOF(ItemInstance, 0x78) diff --git a/src/Minecraft.World/net/minecraft/world/item/Items.h b/src/Minecraft.World/net/minecraft/world/item/Items.h index c41514d8..a799a198 100644 --- a/src/Minecraft.World/net/minecraft/world/item/Items.h +++ b/src/Minecraft.World/net/minecraft/world/item/Items.h @@ -1,5 +1,7 @@ #pragma once +#include + #include "net/minecraft/client/resources/MappedRegistry.h" #include diff --git a/src/Minecraft.World/net/minecraft/world/item/LeadItem.h b/src/Minecraft.World/net/minecraft/world/item/LeadItem.h index e29b734f..c670b19d 100644 --- a/src/Minecraft.World/net/minecraft/world/item/LeadItem.h +++ b/src/Minecraft.World/net/minecraft/world/item/LeadItem.h @@ -4,5 +4,7 @@ class LeadItem : public Item { public: + LeadItem(); + ~LeadItem() override; static bool bindPlayerMobsTest(std::shared_ptr player, Level* level, const BlockPos& pos); }; diff --git a/src/Minecraft.World/net/minecraft/world/level/Level.h b/src/Minecraft.World/net/minecraft/world/level/Level.h index 05a2cd92..0f7240e2 100644 --- a/src/Minecraft.World/net/minecraft/world/level/Level.h +++ b/src/Minecraft.World/net/minecraft/world/level/Level.h @@ -149,6 +149,7 @@ class Level : public LevelSource { ChunkSource* getChunkSource(); long long getSeed(); int getSeaLevel(); + bool setBlockAndData(int x, int y, int z, int id, int data, int flags); void setSeaLevel(int); static void enableLightingCache(); void setSpawnPos(const BlockPos&); @@ -173,6 +174,7 @@ class Level : public LevelSource { int getRawBrightness(const BlockPos&, bool); int getHeightmapHeight(int, int); int getHeightmap(int, int); + bool isSolidBlockingBlockInLoadedChunk(const BlockPos&, bool defaultValue); bool isWithinLevelBounds(int, int); int getBrightnessPropagate(LightLayer::variety, const BlockPos&); long getGameTime(); @@ -200,9 +202,13 @@ class Level : public LevelSource { bool hasChunksAt(const BlockPos&, const BlockPos&); int getAuxValueForMap(PlayerUID, int, int, int, int); std::shared_ptr getSavedData(const std::type_info&, const std::wstring&); + LevelStorage* getLevelStorage(); void setSavedData(const std::wstring&, std::shared_ptr); std::vector>* getEntitiesOfClass(const std::type_info&, AABB const*); bool shouldFreezeIgnoreNeighbors(const BlockPos&); + bool shouldFreeze(const BlockPos&, bool checkNeighbors); + bool shouldFreezeWithNeighbors(const BlockPos&); + bool isWaterAt(const BlockPos&); bool shouldSnow(const BlockPos&, bool); bool isFindingSpawn(); unsigned int countInstanceOf(eINSTANCEOF, bool, unsigned int*, unsigned int*); diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/BeachBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/BeachBiome.h index 55836188..f0cba0b0 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/BeachBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/BeachBiome.h @@ -5,6 +5,7 @@ class BeachBiome : public Biome { public: BeachBiome(EBiomeIDs id, BiomeProperties* properties); + ~BeachBiome() override = default; int getBaseClass() override; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/Biome.cpp b/src/Minecraft.World/net/minecraft/world/level/biome/Biome.cpp index aa2e74fc..fb9a3221 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/Biome.cpp +++ b/src/Minecraft.World/net/minecraft/world/level/biome/Biome.cpp @@ -145,10 +145,10 @@ Biome* Biome::getBiome(int id, Biome* biome) { return biome; } -Block* Biome::getRandomFlower(Random& random, const BlockPos* pos) { +FlowerBlock::Flower* Biome::getRandomFlower(Random& random, const BlockPos* pos) { if (random.nextInt(3) > 0) - return (Block*)FlowerBlock::Flower::YELLOW_FLOWER; - return (Block*)FlowerBlock::Flower::RED_FLOWER; + return FlowerBlock::Flower::YELLOW_FLOWER; + return FlowerBlock::Flower::RED_FLOWER; } unsigned int Biome::getSkyColor(float timeOfDay) { @@ -269,16 +269,7 @@ void Biome::generateColoursDebugOutput() { return; } -// NON_MATCHING | Score: 5785 (lower is better) -// literally took me so many hours to get it finally partially completed (all registered, down to 99k score) -// but then I realized I had to make the last property of the BiomeProperties be set separately instead of -// chained -// ...or did I? Nope, just a waste of time... -// so then I figured out that I had to merge the BiomeProperties constructors directly into the Biome -// constructors... This got me down to like 70k iirc, which was closer but not close enough. then I saw that -// the wstring that gets assigned to the BiomeProperties constructor gets deleted after the var has been -// created but before the static Biome* has been set so that means I had to separate out the Biome's setters -// from the constructor init... and here I am, at 5785 score. -Dexrn +// NON_MATCHING | score: 5785 (lower is better) void Biome::staticCtor() { Biome::OCEAN = new OceanBiome(BiomeID_OCEAN, (new BiomeProperties(L"Ocean"))->depth(-1.0)->scale(0.1)); diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/Biome.h b/src/Minecraft.World/net/minecraft/world/level/biome/Biome.h index c6bafb07..8ae6617b 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/Biome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/Biome.h @@ -4,6 +4,7 @@ #include #include "net/minecraft/world/WeighedRandomItem.h" +#include "net/minecraft/world/level/block/FlowerBlock.h" #include "net/minecraft/world/level/material/MaterialColor.h" #include "net/minecraft/world/phys/Vec3.h" @@ -16,9 +17,11 @@ class MobCategory; class BiomeDecorator; class Feature; class PerlinSimplexNoise; +class DoublePlantFeature; class Biome { public: + static int getId(Biome*); static Biome* BIOMES[256]; static Biome* OCEAN; @@ -86,6 +89,8 @@ class Biome { static Biome* DEFAULT; // anything that gets a biome will fall back to this once nullptr is hit static PerlinSimplexNoise* TEMPERATURE_NOISE; + static PerlinSimplexNoise* BIOME_INFO_NOISE; + static DoublePlantFeature* DOUBLE_PLANT_FEATURE; enum EBiomeIDs : int { BiomeID_OCEAN = 0, @@ -198,6 +203,9 @@ class Biome { }; class MobSpawnerData : public WeighedRandomItem { + friend class DesertBiome; + friend class IceBiome; + public: MobSpawnerData(int instanceType, int weight, int unk, int unk2) : WeighedRandomItem(weight) { m_instanceType = instanceType; @@ -217,6 +225,15 @@ class Biome { int m_data = 0; }; + static LegacyBlockData STONE; + static LegacyBlockData AIR; + static LegacyBlockData BEDROCK; + static LegacyBlockData GRAVEL; + static LegacyBlockData RED_SANDSTONE; + static LegacyBlockData SANDSTONE; + static LegacyBlockData ICE; + static LegacyBlockData WATER; + Biome(Biome::EBiomeIDs, Biome::BiomeProperties*); static Biome** getBiomes(); static Biome* getBiome(int); @@ -227,8 +244,8 @@ class Biome { virtual ~Biome(); virtual Feature* getTreeFeature(Random&); - virtual void getGrassFeature(Random&); - virtual Block* getRandomFlower(Random&, const BlockPos*); + virtual Feature* getGrassFeature(Random&); + virtual FlowerBlock::Flower* getRandomFlower(Random&, const BlockPos*); virtual unsigned int getSkyColor(float); virtual bool hasSnow(); virtual bool hasRain(); @@ -254,9 +271,10 @@ class Biome { Biome* setNameAndDescription(int name, int desc); Biome* setPreviewColor(eMinecraftColour color); + eMinecraftColour getPreviewColor(); Biome* setWaterSkyColor(eMinecraftColour water, eMinecraftColour sky); - std::vector* getMobs(MobCategory*); + std::vector* getMobs(MobCategory*); std::wstring getName(bool); std::wstring getDescription(); diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/BiomeDecorator.h b/src/Minecraft.World/net/minecraft/world/level/biome/BiomeDecorator.h index 07e18dbf..e49289bd 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/BiomeDecorator.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/BiomeDecorator.h @@ -1,11 +1,13 @@ #pragma once +#include "net/minecraft/core/BlockPos.h" + class Level; class Random; class Biome; -class BlockPos; class Feature; -class ClayFeature; +class FlowerFeature; +class CustomizableSourceSettings; class BiomeDecorator { public: @@ -15,40 +17,47 @@ class BiomeDecorator { virtual void decorate(Biome*, Level*, Random&); virtual void decorateOres(Level*, Random&); -private: - char byte_8; - void* qword_c; - void* qword_18; - ClayFeature* field_20; - void* qword_28; - void* qword_30; - void* qword_38; - void* qword_40; - void* qword_48; - void* qword_50; - void* qword_58; - void* qword_60; - void* qword_68; - void* qword_70; - void* qword_78; - void* qword_80; - void* qword_88; - Feature* field_90; - void* field_98; - void* field_a0; - void* field_a8; - void* field_b0; - void* field_b8; - void* qword_c0; - void* qword_c8; - int dword_d0; - int dword_d4; - void* qword_d8; - void* qword_e0; - int dword_e8; - int dword_ec; - int dword_f0; - int dword_f4; - int dword_f8; - char byte_fc; + void decorateDepthSpan(Level*, Random&, int count, Feature*, int minHeight, int maxHeight); + void decorateDepthAverage(Level*, Random&, int count, Feature*, int centerHeight, int spread); + + bool m_decorating; + BlockPos m_origin; + CustomizableSourceSettings* m_settings; + Feature* m_clay; + Feature* m_sand; + Feature* m_gravelPatch; + Feature* m_dirt; + Feature* m_gravel; + Feature* m_granite; + Feature* m_diorite; + Feature* m_andesite; + Feature* m_coal; + Feature* m_iron; + Feature* m_gold; + Feature* m_redstone; + Feature* m_diamond; + Feature* m_lapis; + FlowerFeature* m_flowers; + Feature* m_brownMushrooms; + Feature* m_redMushrooms; + Feature* m_hugeMushrooms; + Feature* m_reeds; + Feature* m_cactus; + Feature* m_waterlilies; + int m_waterlilyCount; + int m_treeCount; + float m_extraTreeChance; + int m_flowerCount; + int m_grassCount; + int m_deadBushCount; + int m_mushroomCount; + int m_reedCount; + int m_cactusCount; + int m_gravelPatchCount; + int m_sandCount; + int m_clayCount; + int m_hugeMushroomCount; + bool m_generateLiquids; }; + +static_assert(sizeof(BiomeDecorator) == 0x100, "Switch biome decorator layout"); diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/BiomeSource.cpp b/src/Minecraft.World/net/minecraft/world/level/biome/BiomeSource.cpp index e12833b2..684cc31a 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/BiomeSource.cpp +++ b/src/Minecraft.World/net/minecraft/world/level/biome/BiomeSource.cpp @@ -1,5 +1,7 @@ #include "net/minecraft/world/level/biome/BiomeSource.h" + #include +#include #include "NX/Platform.h" #include "net/minecraft/client/Minecraft.h" @@ -16,8 +18,7 @@ #include "net/minecraft/world/level/newbiome/layer/Layer.h" #include "net/minecraft/world/level/storage/LevelData.h" -// NON_MATCHING | Score: 535 (lower is better) -// Idk wtf is going on with this one - Azalea +// NON_MATCHING | score: 535 (lower is better) BiomeSource::LayerOverrideSettings::LayerOverrideSettings() { m_field38 = 0; m_genScale = static_cast(-1); @@ -113,7 +114,7 @@ void BiomeSource::LayerOverrideSettings::NullBiomeSection(int x, int z, int widt int end = depth + width; unsigned long len = z * sizeof(Biome*); for (int i = width; i < end; i++) { - memset((void*)&m_biomes[x + m_imageWidth * i], 0, len); + memset((void*)&m_biomes.get(x + m_imageWidth * i), 0, len); } } @@ -198,7 +199,7 @@ Biome* BiomeSource::LayerOverrideSettings::GetBiomeAt(float x, float z) { zPos = zThreshold; unsigned int index = getBiomeIndex(xPos, zPos); - return m_biomes[index]; + return m_biomes.get(index); } BiomeSource::CouldSpawnCache::CouldSpawnCache(BiomeSource* biomeSource, @@ -294,7 +295,7 @@ bool BiomeSource::fjCouldSpawn(const FjFeatureBiomeRequirements* biomeRequiremen } BiomeSource::~BiomeSource() { - nn::os::FinalizeMutex(&m_mutexType); + DeleteCriticalSection(&m_mutexType); delete m_biomeCache; } @@ -322,7 +323,7 @@ void BiomeSource::getRawBiomeBlock(arrayWithLength& biomes, int x, int z PIXBeginNamedEvent(0.0, "Copying values"); for (int i = 0; i < width * depth; i++) { - biomes[i] = Biome::getBiome(area[i], Biome::DEFAULT); + biomes.get(i) = Biome::getBiome(area[i], Biome::DEFAULT); } PIXEndNamedEvent(); } @@ -362,7 +363,7 @@ void BiomeSource::getBiomeBlock(arrayWithLength& biomes, int x, int z, i PIXBeginNamedEvent(0.0, "Copying values"); for (int i = 0; i < width * depth; i++) { - biomes[i] = Biome::getBiome(area[i], Biome::DEFAULT); + biomes.get(i) = Biome::getBiome(area[i], Biome::DEFAULT); } PIXEndNamedEvent(); } diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/DesertBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/DesertBiome.h index 218bf613..a98cf144 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/DesertBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/DesertBiome.h @@ -7,4 +7,5 @@ class DesertBiome : public Biome { DesertBiome(EBiomeIDs id, BiomeProperties* properties); int getBaseClass() override; + void decorate(Level*, Random&, const BlockPos&) override; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/ExtremeHillsBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/ExtremeHillsBiome.h index 274f28fe..3d99c95b 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/ExtremeHillsBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/ExtremeHillsBiome.h @@ -2,15 +2,23 @@ #include "net/minecraft/world/level/biome/Biome.h" +class OreFeature; + class ExtremeHillsBiome : public Biome { public: enum EType { DEFAULT = 0, EDGE = 1, M = 2 }; ExtremeHillsBiome(EBiomeIDs id, EType type, BiomeProperties* properties); + ~ExtremeHillsBiome() override; int getBaseClass() override; + Feature* getTreeFeature(Random&) override; + void decorate(Level*, Random&, const BlockPos&) override; + void buildSurfaceAt(Level*, Random&, ChunkPrimer*, int, int, double) override; - char m_padding[0x10]; +private: + OreFeature* m_oreFeature; + EType m_type; }; ASSERT_SIZEOF(ExtremeHillsBiome, 0x158) diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/ForestBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/ForestBiome.h index d4c0d3b0..0803b9de 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/ForestBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/ForestBiome.h @@ -7,6 +7,18 @@ class ForestBiome : public Biome { enum EType { DEFAULT = 0, FLOWER = 1, BIRCH = 2, ROOFED = 3 }; ForestBiome(EBiomeIDs id, EType type, BiomeProperties* properties); + ~ForestBiome() override = default; int getBaseClass() override; + Feature* getTreeFeature(Random&) override; + FlowerBlock::Flower* getRandomFlower(Random&, const BlockPos*) override; + unsigned int getGrassColor(const BlockPos*) override; + void decorate(Level*, Random&, const BlockPos&) override; + void addMushrooms(Level*, Random&, const BlockPos&); + void addDoublePlants(Level*, Random&, const BlockPos&, int); + +private: + EType m_type; }; + +ASSERT_SIZEOF(ForestBiome, 0x148) diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/HellBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/HellBiome.h index 09420259..e6c746e9 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/HellBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/HellBiome.h @@ -5,6 +5,11 @@ class HellBiome : public Biome { public: HellBiome(EBiomeIDs id, BiomeProperties* properties); + ~HellBiome() override = default; int getBaseClass() override; + unsigned int getSkyColor(float) override; + Vec3* getFogColor(float, float) const override; + bool isFoggy() override; + bool isNatural() override; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/IceBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/IceBiome.h index 5256b041..a482a5d5 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/IceBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/IceBiome.h @@ -6,11 +6,17 @@ class IceBiome : public Biome { public: enum EType { DEFAULT = 0, SPIKES = 1 }; - IceBiome(EBiomeIDs id, EType type, BiomeProperties* properties); + IceBiome(EBiomeIDs id, bool spikes, BiomeProperties* properties); int getBaseClass() override; + float getCreatureProbability() override; + Feature* getTreeFeature(Random&) override; + void decorate(Level*, Random&, const BlockPos&) override; - char m_padding[0x10]; +private: + bool m_spikes; + Feature* m_spikeFeature; + Feature* m_patchFeature; }; ASSERT_SIZEOF(IceBiome, 0x158) diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/JungleBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/JungleBiome.h index 1d503b0b..97f19c49 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/JungleBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/JungleBiome.h @@ -6,7 +6,19 @@ class JungleBiome : public Biome { public: enum EType { DEFAULT = 0, EDGE = 1 }; - JungleBiome(EBiomeIDs id, EType type, BiomeProperties* properties); + JungleBiome(EBiomeIDs id, bool edge, BiomeProperties* properties); + static void staticCtor(); int getBaseClass() override; + Feature* getTreeFeature(Random&) override; + Feature* getGrassFeature(Random&) override; + void decorate(Level*, Random&, const BlockPos&) override; + +private: + static const BlockState* TRUNK; + static const BlockState* LEAVES; + static const BlockState* BUSH_LEAVES; + bool m_edge; }; + +ASSERT_SIZEOF(JungleBiome, 0x148) diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/MesaBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/MesaBiome.h index 1675830c..4b6c5a92 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/MesaBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/MesaBiome.h @@ -1,15 +1,43 @@ #pragma once #include "net/minecraft/world/level/biome/Biome.h" +#include "net/minecraft/world/level/biome/BiomeDecorator.h" #include "types.h" class MesaBiome : public Biome { public: - MesaBiome(EBiomeIDs id, bool, bool, BiomeProperties* properties); + class MesaDecorator : public BiomeDecorator { + public: + MesaDecorator() = default; + void decorateOres(Level*, Random&) override; + }; + static LegacyBlockData COARSE_DIRT; + static LegacyBlockData GRASS; + static LegacyBlockData HARDENED_CLAY; + static LegacyBlockData STAINED_HARDENED_CLAY; + static LegacyBlockData ORANGE_CLAY; + static LegacyBlockData RED_SAND; + static void staticCtor(); + + MesaBiome(EBiomeIDs id, bool bryce, bool forest, BiomeProperties* properties); + ~MesaBiome() override; int getBaseClass() override; + Feature* getTreeFeature(Random&) override; + unsigned int getGrassColor(const BlockPos*) override; + unsigned int getFoliageColor(const BlockPos*) override; + void buildSurfaceAt(Level*, Random&, ChunkPrimer*, int, int, double) override; + + void generateBands(long long seed); + LegacyBlockData getBand(int x, int y, int z); - char m_padding[0x30]; + LegacyBlockData* m_clayBands; + long long m_seed; + PerlinSimplexNoise* m_pillarNoise; + PerlinSimplexNoise* m_pillarRoofNoise; + PerlinSimplexNoise* m_clayBandsOffsetNoise; + bool m_bryce; + bool m_forest; }; ASSERT_SIZEOF(MesaBiome, 0x178) diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/MushroomIslandBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/MushroomIslandBiome.h index d3f665aa..4ffa6c07 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/MushroomIslandBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/MushroomIslandBiome.h @@ -5,6 +5,7 @@ class MushroomIslandBiome : public Biome { public: MushroomIslandBiome(EBiomeIDs id, BiomeProperties* properties); + ~MushroomIslandBiome() override = default; int getBaseClass() override; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/MutatedForestBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/MutatedForestBiome.h index 03f9c5c5..179221bd 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/MutatedForestBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/MutatedForestBiome.h @@ -1,10 +1,10 @@ #pragma once -#include "net/minecraft/world/level/biome/Biome.h" +#include "net/minecraft/world/level/biome/ForestBiome.h" -class MutatedForestBiome : public Biome { +class MutatedForestBiome : public ForestBiome { public: MutatedForestBiome(EBiomeIDs id, BiomeProperties* properties); - int getBaseClass() override; + Feature* getTreeFeature(Random&) override; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/MutatedSavannaBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/MutatedSavannaBiome.h index 2683132f..aef574e4 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/MutatedSavannaBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/MutatedSavannaBiome.h @@ -1,10 +1,11 @@ #pragma once -#include "net/minecraft/world/level/biome/Biome.h" +#include "net/minecraft/world/level/biome/SavannaBiome.h" -class MutatedSavannaBiome : public Biome { +class MutatedSavannaBiome : public SavannaBiome { public: MutatedSavannaBiome(EBiomeIDs id, BiomeProperties* properties); - int getBaseClass() override; + void buildSurfaceAt(Level*, Random&, ChunkPrimer*, int, int, double) override; + void decorate(Level*, Random&, const BlockPos&) override; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/OceanBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/OceanBiome.h index 63c22a85..932ec5f7 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/OceanBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/OceanBiome.h @@ -5,6 +5,8 @@ class OceanBiome : public Biome { public: OceanBiome(EBiomeIDs id, BiomeProperties* properties); + ~OceanBiome() override = default; int getBaseClass() override; + int getTemperatureCategory() override; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/PlainsBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/PlainsBiome.h index 582a3980..ed887a32 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/PlainsBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/PlainsBiome.h @@ -5,6 +5,15 @@ class PlainsBiome : public Biome { public: PlainsBiome(EBiomeIDs id, bool, BiomeProperties* properties); + ~PlainsBiome() override = default; int getBaseClass() override; + Feature* getTreeFeature(Random&) override; + FlowerBlock::Flower* getRandomFlower(Random&, const BlockPos*) override; + void decorate(Level*, Random&, const BlockPos&) override; + +private: + bool m_sunflowers; }; + +ASSERT_SIZEOF(PlainsBiome, 0x148) diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/RiverBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/RiverBiome.h index 716c777f..ef12394b 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/RiverBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/RiverBiome.h @@ -5,6 +5,7 @@ class RiverBiome : public Biome { public: RiverBiome(EBiomeIDs id, BiomeProperties* properties); + ~RiverBiome() override = default; int getBaseClass() override; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/SavannaBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/SavannaBiome.h index 0736cc5f..c88c4173 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/SavannaBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/SavannaBiome.h @@ -7,4 +7,6 @@ class SavannaBiome : public Biome { SavannaBiome(EBiomeIDs id, BiomeProperties* properties); int getBaseClass() override; + Feature* getTreeFeature(Random&) override; + void decorate(Level*, Random&, const BlockPos&) override; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/StoneBeachBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/StoneBeachBiome.h index b8ac5286..49db2bb8 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/StoneBeachBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/StoneBeachBiome.h @@ -5,6 +5,7 @@ class StoneBeachBiome : public Biome { public: StoneBeachBiome(EBiomeIDs id, BiomeProperties* properties); + ~StoneBeachBiome() override = default; int getBaseClass() override; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/SwampBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/SwampBiome.h index 9e7a3c7d..dda65f28 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/SwampBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/SwampBiome.h @@ -5,8 +5,17 @@ class SwampBiome : public Biome { public: SwampBiome(EBiomeIDs id, BiomeProperties* properties); + ~SwampBiome() override = default; int getBaseClass() override; + Feature* getTreeFeature(Random&) override; + FlowerBlock::Flower* getRandomFlower(Random&, const BlockPos*) override; + unsigned int getGrassColor(const BlockPos*) override; + unsigned int getFoliageColor(const BlockPos*) override; + void decorate(Level*, Random&, const BlockPos&) override; + void buildSurfaceAt(Level*, Random&, ChunkPrimer*, int, int, double) override; + + static LegacyBlockData WATERLILY; void* m_padding; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/TaigaBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/TaigaBiome.h index 3e5a8ed8..bfe6f492 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/TaigaBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/TaigaBiome.h @@ -7,6 +7,16 @@ class TaigaBiome : public Biome { enum EType { DEFAULT = 0, MEGA = 1, MEGA_SPRUCE = 2 }; TaigaBiome(EBiomeIDs id, EType type, BiomeProperties* properties); + ~TaigaBiome() override = default; int getBaseClass() override; + Feature* getTreeFeature(Random&) override; + Feature* getGrassFeature(Random&) override; + void decorate(Level*, Random&, const BlockPos&) override; + void buildSurfaceAt(Level*, Random&, ChunkPrimer*, int, int, double) override; + +private: + EType m_type; }; + +ASSERT_SIZEOF(TaigaBiome, 0x148) diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/TheEndBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/TheEndBiome.h index 1e1876ec..a0df69e3 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/TheEndBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/TheEndBiome.h @@ -5,6 +5,10 @@ class TheEndBiome : public Biome { public: TheEndBiome(EBiomeIDs id, BiomeProperties* properties); + ~TheEndBiome() override = default; int getBaseClass() override; + unsigned int getSkyColor(float) override; + Vec3* getFogColor(float, float) const override; + bool isNatural() override; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/biome/VoidBiome.h b/src/Minecraft.World/net/minecraft/world/level/biome/VoidBiome.h index 7bac67ec..de318de8 100644 --- a/src/Minecraft.World/net/minecraft/world/level/biome/VoidBiome.h +++ b/src/Minecraft.World/net/minecraft/world/level/biome/VoidBiome.h @@ -7,4 +7,5 @@ class VoidBiome : public Biome { VoidBiome(EBiomeIDs id, BiomeProperties* properties); int getBaseClass() override; + bool isAlwaysValidSpawn() override; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/Block.cpp b/src/Minecraft.World/net/minecraft/world/level/block/Block.cpp index 0ce58cab..c10bb55d 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/Block.cpp +++ b/src/Minecraft.World/net/minecraft/world/level/block/Block.cpp @@ -1,5 +1,7 @@ #include "net/minecraft/world/level/block/Block.h" +#include "net/minecraft/world/level/block/BlockBootstrapAllocation.h" + #include "net/minecraft/client/resources/IdMapper.h" #include "net/minecraft/core/Direction.h" #include "net/minecraft/stats/Stats.h" @@ -269,8 +271,7 @@ bool Block::ParticlesSurviveWithin() { return false; } -// NON_MATCHING: play with ifs in cases (so they are not optimised, the ifs) logic should be the same (unless -// I broke something while trying to match) +// NON_MATCHING | score: 3870 (lower is better) int Block::GetInteractTooltip(const BlockTooltipDataHolder& data) { int blockId = data.m_itemInstance->getItem()->getId(); // int returnValue = 0xFFFFFFFF; @@ -483,7 +484,6 @@ const AABB* Block::getShape(const BlockState* state, LevelSource* levelSource, c return Block::defaultBlockShape; } -// NON_MATCHING: i don't have a clue int Block::getLightColor(const BlockState* state, LevelSource* levelSource, const BlockPos& pos, int) { Block* blockFromLevel = levelSource->getBlockState(pos)->getBlock(); int color = levelSource->getLightColor(pos, blockFromLevel->getLightEmission(state), 0xFFFFFFFF); @@ -590,7 +590,7 @@ Item* Block::getResource(const BlockState* state, Random*, int) { return Item::byBlock(this); } -// NON_MATCHING: I don't have a clue +// NON_MATCHING | score: 650 (lower is better) float Block::getDestroyProgress(const BlockState* state, std::shared_ptr player, Level* level, const BlockPos& pos) { float destSpeed = state->getDestroySpeed(level, pos); @@ -735,6 +735,7 @@ int Block::getColor(LevelSource* levelSource, const BlockPos& pos, const BlockSt return 0xFFFFFF; } +// NON_MATCHING | score: 400 (lower is better) int Block::getSignal(const BlockState* state, LevelSource* levelSource, const BlockPos& pos, const Direction* direction) { return 0; @@ -886,8 +887,7 @@ int xOffsets[6] = {1, -1, 0, 0, 0, 0}; int yOffsets[6] = {0, 0, 1, -1, 0, 0}; int zOffsets[6] = {0, 0, 0, 0, 1, -1}; -// NON_MATCHING: too lazy to figure out this, wasLeaves is probably someshit generated by compiler and that's -// prob why it's not matching +// NON_MATCHING | score: 3310 (lower is better) TextureAtlasSprite* Block::getTexture(LevelSource* levelSource, const BlockPos& pos, const Direction* direction, const BlockState* state) { if (LeafBlock::isLeaves(state->getBlock())) @@ -944,7 +944,7 @@ const Vec3* ZERO = new Vec3(0, 0, 0); Vec3* Block::getOffset(const BlockState* state, LevelSource* levelSource, const BlockPos& pos) { int offsetType = this->getOffsetType(); if (!offsetType) - return Vec3::newTemp(ZERO); + return Vec3::newTemp(Vec3::ZERO); int64_t seed = Mth::getSeed(pos.getX(), 0, pos.getZ()); return Vec3::newTemp((((seed >> 16 & 0xF) / 15.0f) - 0.5) * 0.5, @@ -979,20 +979,8 @@ bool Block::isExceptionBlockForAttachingPlusPiston(Block* block) { return Block::isExceptionBlockForAttaching(block); } -// NON_MATCHING | Score: 333111 (lower is better) -// This is the second-largest method in the entire executable -// I (Dexrn) automated the block registry code, but I'm not sure how well it worked -// Also, there's stuff missing at both the header and the footer... so it won't match until that's done. -// Additionally, it seems that setBaseItemTypeAndMaterial is sometimes called outside of the chain... -// e.g: -// Block *someBlock = new SomeBlock() -// ->setDestroyTime(0) -// ->setExplodeable(10.0); -// someBlock->setBaseItemTypeAndMaterial(14, 2); -// Block::registerBlock(1, L"some_block", someBlock); -// -// The size given in the comments above every block was from the `operator new` call to allocate space for the -// block This gives us the class size of every block that is registered. +/** Allocates the full object sizes, including fields absent from partial class declarations. */ +// NON_MATCHING | score: 60165 (lower is better) void Block::staticCtor() { DEFAULT_FACING = DirectionProperty::create(L"facing"); HORIZONTAL_FACING = DirectionProperty::create(L"facing", Direction::Plane::HORIZONTAL); @@ -1080,7 +1068,7 @@ void Block::staticCtor() { // Size: 0xC8u Block::registerBlock( 2, L"grass", - (new GrassBlock()) + (new (BlockBootstrapAllocation<0xc8>{}) GrassBlock()) ->setDestroyTime(0.6) ->setSoundType(SoundType::GRASS) ->setIconName(L"grass") @@ -1119,15 +1107,15 @@ void Block::staticCtor() { Block::registerBlock(5, L"planks", planksBlock); - Block* saplingBlock - = (new SaplingBlock()) - ->setDestroyTime(0.0) - ->setSoundType(SoundType::GRASS) - ->setIconName(L"sapling") - ->sendBlockData(15) - ->setNameAndDescriptionId(StringIDs::Sapling, StringIDs::CanBePlantedAndWillEventuallyGrowInto) - ->disableMipmap(); - Block::registerBlock(6, L"sapling", saplingBlock); + Block::registerBlock( + 6, L"sapling", + (new (BlockBootstrapAllocation<0xe0>{}) SaplingBlock()) + ->setDestroyTime(0.0) + ->setSoundType(SoundType::GRASS) + ->setIconName(L"sapling") + ->sendBlockData(15) + ->setNameAndDescriptionId(StringIDs::Sapling, StringIDs::CanBePlantedAndWillEventuallyGrowInto) + ->disableMipmap()); Block::registerBlock(7, L"bedrock", (new BlockImpl(Material::STONE)) @@ -1141,7 +1129,7 @@ void Block::staticCtor() { // Size: 0xF0u Block::registerBlock( 8, L"flowing_water", - (new DynamicLiquidBlock(Material::WATER)) + (new (BlockBootstrapAllocation<0xf0>{}) DynamicLiquidBlock(Material::WATER)) ->setDestroyTime(100.0) ->setLightBlock(3) ->setIconName(L"water_flow") @@ -1152,7 +1140,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock( 9, L"water", - (new StaticLiquidBlock(Material::WATER)) + (new (BlockBootstrapAllocation<0xb8>{}) StaticLiquidBlock(Material::WATER)) ->setDestroyTime(100.0) ->setLightBlock(3) ->setIconName(L"water_still") @@ -1163,7 +1151,7 @@ void Block::staticCtor() { // Size: 0xF0u Block::registerBlock( 10, L"flowing_lava", - (new DynamicLiquidBlock(Material::LAVA)) + (new (BlockBootstrapAllocation<0xf0>{}) DynamicLiquidBlock(Material::LAVA)) ->setDestroyTime(100.0) ->setLightEmission(1.0) ->setIconName(L"lava_flow") @@ -1175,7 +1163,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock( 11, L"lava", - (new StaticLiquidBlock(Material::LAVA)) + (new (BlockBootstrapAllocation<0xb8>{}) StaticLiquidBlock(Material::LAVA)) ->setDestroyTime(100.0) ->setLightEmission(1.0) ->setIconName(L"lava_still") @@ -1244,7 +1232,7 @@ void Block::staticCtor() { // Size: 0x110u Block::registerBlock(18, L"leaves", - (new OldLeafBlock()) + (new (BlockBootstrapAllocation<0x110>{}) OldLeafBlock()) ->setIconName(L"leaves") ->sendBlockData(3) ->setNameAndDescriptionId(StringIDs::Leaves, @@ -1253,7 +1241,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock( 19, L"sponge", - (new SpongeBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) SpongeBlock()) ->setDestroyTime(0.6) ->setSoundType(SoundType::GRASS) ->setIconName(L"sponge") @@ -1294,7 +1282,7 @@ void Block::staticCtor() { // Size: 0xE0u Block::registerBlock( 23, L"dispenser", - (new DispenserBlock()) + (new (BlockBootstrapAllocation<0xe0>{}) DispenserBlock()) ->setDestroyTime(3.5) ->setSoundType(SoundType::STONE) ->setIconName(L"dispenser") @@ -1316,7 +1304,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock(25, L"noteblock", - (new NoteBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) NoteBlock()) ->setSoundType(SoundType::WOOD) ->setDestroyTime(0.8) ->setIconName(L"noteblock") @@ -1327,7 +1315,7 @@ void Block::staticCtor() { // Size: 0xE0u Block::registerBlock( 26, L"bed", - (new BedBlock()) + (new (BlockBootstrapAllocation<0xe0>{}) BedBlock()) ->setSoundType(SoundType::WOOD) ->setDestroyTime(0.2) ->setIconName(L"bed") @@ -1338,7 +1326,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock( 27, L"golden_rail", - (new PoweredRailBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) PoweredRailBlock()) ->setDestroyTime(0.7) ->setSoundType(SoundType::METAL) ->setIconName(L"rail_golden") @@ -1350,7 +1338,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock(28, L"detector_rail", - (new DetectorRailBlock()) + (new (BlockBootstrapAllocation<0xb8>{}) DetectorRailBlock()) ->setDestroyTime(0.7) ->setSoundType(SoundType::METAL) ->setIconName(L"rail_detector") @@ -1363,7 +1351,7 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 29, L"sticky_piston", - (new PistonBaseBlock(true)) + (new (BlockBootstrapAllocation<0xc0>{}) PistonBaseBlock(true)) ->sendBlockData(15) ->setNameAndDescriptionId(StringIDs::StickyPiston, StringIDs::WhenPoweredUsingAButtonALeverARetractsPullsBackBlockTouching) @@ -1383,7 +1371,7 @@ void Block::staticCtor() { // Size: 0xC8u Block::registerBlock( 31, L"tallgrass", - (new TallGrassBlock()) + (new (BlockBootstrapAllocation<0xc8>{}) TallGrassBlock()) ->setDestroyTime(0.0) ->setSoundType(SoundType::GRASS) ->setIconName(L"tallgrass") @@ -1402,7 +1390,7 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 33, L"piston", - (new PistonBaseBlock(false)) + (new (BlockBootstrapAllocation<0xc0>{}) PistonBaseBlock(false)) ->sendBlockData(15) ->setNameAndDescriptionId(StringIDs::Piston, StringIDs::WhenPoweredUsingAButtonALeverA) ->setBaseItemTypeAndMaterial(27, 28) @@ -1411,13 +1399,13 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock( 34, L"piston_head", - (new PistonHeadBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) PistonHeadBlock()) ->setNameAndDescriptionId(StringIDs::Piston, StringIDs::WhenPoweredUsingAButtonALeverA) ->sendBlockData(15)); // Size: 0x128u Block::registerBlock(35, L"wool", - (new ColoredBlock(Material::WOOL)) + (new (BlockBootstrapAllocation<0x128>{}) ColoredBlock(Material::WOOL)) ->setDestroyTime(0.8) ->setSoundType(SoundType::WOOL) ->setIconName(L"wool_colored") @@ -1427,7 +1415,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock(36, L"piston_extension", - (new PistonMagicBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) PistonMagicBlock()) ->setIconName(L"pistonBase") ->setNameAndDescriptionId(StringIDs::Piston, 0xFFFFFFFF)); @@ -1494,7 +1482,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock(43, L"double_stone_slab", - (new FullStoneSlabBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) FullStoneSlabBlock()) ->setDestroyTime(2.0) ->setExplodeable(10.0) ->setSoundType(SoundType::STONE) @@ -1505,7 +1493,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock(44, L"stone_slab", - (new HalfStoneSlabBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) HalfStoneSlabBlock()) ->setDestroyTime(2.0) ->setExplodeable(10.0) ->setSoundType(SoundType::STONE) @@ -1526,7 +1514,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock(46, L"tnt", - (new TntBlock()) + (new (BlockBootstrapAllocation<0xb8>{}) TntBlock()) ->setDestroyTime(0.0) ->setSoundType(SoundType::GRASS) ->setIconName(L"tnt") @@ -1593,7 +1581,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock(52, L"mob_spawner", - (new MobSpawnerBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) MobSpawnerBlock()) ->setDestroyTime(5.0) ->setSoundType(SoundType::METAL) ->setIconName(L"mob_spawner") @@ -1601,20 +1589,20 @@ void Block::staticCtor() { ->setNameAndDescriptionId(StringIDs::MonsterSpawner, 0x4330c9)); // Size: 0xC0u - const BlockState* stairBlockVariant = planksBlock->defaultBlockState()->setValue( - PlanksBlock::VARIANT, PlanksBlock::Variant::OAK); - Block* stairBlock - = (new StairBlock(stairBlockVariant)) - ->setIconName(L"stairsWood") - ->sendBlockData(15) - ->setNameAndDescriptionId(StringIDs::OakWoodStairs, StringIDs::UsedForCompactStaircases_1) - ->setBaseItemTypeAndMaterial(16, 1); - Block::registerBlock(53, L"oak_stairs", stairBlock); + Block::registerBlock( + 53, L"oak_stairs", + (new (BlockBootstrapAllocation<0xc0>{}) + StairBlock(planksBlock->defaultBlockState()->setValue( + PlanksBlock::VARIANT, PlanksBlock::Variant::OAK))) + ->setIconName(L"stairsWood") + ->sendBlockData(15) + ->setNameAndDescriptionId(StringIDs::OakWoodStairs, StringIDs::UsedForCompactStaircases_1) + ->setBaseItemTypeAndMaterial(16, 1)); // Size: 0xB8u Block::registerBlock( 54, L"chest", - (new ChestBlock(0)) + (new (BlockBootstrapAllocation<0xb8>{}) ChestBlock(0)) ->setDestroyTime(2.5) ->setSoundType(SoundType::WOOD) ->setIconName(L"chest") @@ -1625,7 +1613,7 @@ void Block::staticCtor() { // Size: 0xF8u Block::registerBlock( 55, L"redstone_wire", - (new RedStoneWireBlock()) + (new (BlockBootstrapAllocation<0xf8>{}) RedStoneWireBlock()) ->setDestroyTime(0.0) ->setSoundType(SoundType::STONE) ->setIconName(L"redstone_dust") @@ -1657,7 +1645,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock(58, L"crafting_table", - (new CraftingTableBlock()) + (new (BlockBootstrapAllocation<0xb8>{}) CraftingTableBlock()) ->setDestroyTime(2.5) ->setSoundType(SoundType::WOOD) ->setIconName(L"crafting_table") @@ -1668,7 +1656,7 @@ void Block::staticCtor() { // Size: 0xF0u Block::registerBlock( 59, L"wheat", - (new CropBlock(false)) + (new (BlockBootstrapAllocation<0xf0>{}) CropBlock(false)) ->setIconName(L"wheat") ->setNotCollectStatistics() ->sendBlockData(15) @@ -1676,7 +1664,7 @@ void Block::staticCtor() { ->disableMipmap()); // Size: 0xB8u - Block* farmBlock = (new FarmBlock()) + Block* farmBlock = (new (BlockBootstrapAllocation<0xb8>{}) FarmBlock()) ->setDestroyTime(0.6) ->setSoundType(SoundType::DIRT) ->setIconName(L"farmland") @@ -1688,7 +1676,7 @@ void Block::staticCtor() { // Size: 0xC8u Block::registerBlock( 61, L"furnace", - (new FurnaceBlock(false)) + (new (BlockBootstrapAllocation<0xc8>{}) FurnaceBlock(false)) ->setDestroyTime(3.5) ->setSoundType(SoundType::STONE) ->setIconName(L"furnace") @@ -1699,7 +1687,7 @@ void Block::staticCtor() { // Size: 0xC8u Block::registerBlock( 62, L"lit_furnace", - (new FurnaceBlock(true)) + (new (BlockBootstrapAllocation<0xc8>{}) FurnaceBlock(true)) ->setDestroyTime(3.5) ->setSoundType(SoundType::STONE) ->setIconName(L"furnace") @@ -1710,7 +1698,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock( 63, L"standing_sign", - (new StandingSignBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) StandingSignBlock()) ->setDestroyTime(1.0) ->setSoundType(SoundType::WOOD) ->setIconName(L"sign") @@ -1720,7 +1708,7 @@ void Block::staticCtor() { // Size: 0xC8u Block::registerBlock(64, L"wooden_door", - (new DoorBlock(Material::WOOD)) + (new (BlockBootstrapAllocation<0xc8>{}) DoorBlock(Material::WOOD)) ->setDestroyTime(3.0) ->setSoundType(SoundType::WOOD) ->setIconName(L"door_wood") @@ -1742,7 +1730,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock(66, L"rail", - (new RailBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) RailBlock()) ->setDestroyTime(0.7) ->setSoundType(SoundType::METAL) ->setIconName(L"rail_normal") @@ -1754,7 +1742,7 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 67, L"stone_stairs", - (new StairBlock(cobblestoneBlock->defaultBlockState())) + (new (BlockBootstrapAllocation<0xc0>{}) StairBlock(cobblestoneBlock->defaultBlockState())) ->setIconName(L"stairsStone") ->sendBlockData(15) ->setNameAndDescriptionId(StringIDs::CobblestoneStairs, StringIDs::UsedForCompactStaircases_1) @@ -1763,7 +1751,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock( 68, L"wall_sign", - (new WallSignBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) WallSignBlock()) ->setDestroyTime(1.0) ->setSoundType(SoundType::WOOD) ->setIconName(L"sign") @@ -1784,20 +1772,20 @@ void Block::staticCtor() { ->setBaseItemTypeAndMaterial(45, 1)); // Size: 0xC8u - Block::registerBlock( - 70, L"stone_pressure_plate", - (new PressurePlateBlock(L"stone", Material::STONE, PressurePlateBlock::Sensitivity::STONE)) - ->setDestroyTime(0.5) - ->setSoundType(SoundType::STONE) - ->sendBlockData(15) - ->setNameAndDescriptionId(StringIDs::StonePressurePlate, - StringIDs::APressureSensitivePadThatWillActivateWhen) - ->setBaseItemTypeAndMaterial(15, 2)); + Block::registerBlock(70, L"stone_pressure_plate", + (new (BlockBootstrapAllocation<0xc8>{}) PressurePlateBlock( + L"stone", Material::STONE, PressurePlateBlock::Sensitivity::STONE)) + ->setDestroyTime(0.5) + ->setSoundType(SoundType::STONE) + ->sendBlockData(15) + ->setNameAndDescriptionId(StringIDs::StonePressurePlate, + StringIDs::APressureSensitivePadThatWillActivateWhen) + ->setBaseItemTypeAndMaterial(15, 2)); // Size: 0xC8u Block::registerBlock( 71, L"iron_door", - (new DoorBlock(Material::METAL)) + (new (BlockBootstrapAllocation<0xc8>{}) DoorBlock(Material::METAL)) ->setIconName(L"door_iron") ->setDestroyTime(5.0) ->setSoundType(SoundType::METAL) @@ -1808,7 +1796,8 @@ void Block::staticCtor() { // Size: 0xC8u Block::registerBlock( 72, L"wooden_pressure_plate", - (new PressurePlateBlock(L"planks_oak", Material::WOOD, PressurePlateBlock::Sensitivity::WOOD)) + (new (BlockBootstrapAllocation<0xc8>{}) + PressurePlateBlock(L"planks_oak", Material::WOOD, PressurePlateBlock::Sensitivity::WOOD)) ->setDestroyTime(0.5) ->setSoundType(SoundType::WOOD) ->sendBlockData(15) @@ -1910,7 +1899,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock( 81, L"cactus", - (new CactusBlock()) + (new (BlockBootstrapAllocation<0xb8>{}) CactusBlock()) ->setIconName(L"cactus") ->setDestroyTime(0.4) ->setSoundType(SoundType::WOOL) @@ -1940,7 +1929,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock(84, L"jukebox", - (new JukeboxBlock()) + (new (BlockBootstrapAllocation<0xb8>{}) JukeboxBlock()) ->setIconName(L"jukebox") ->setDestroyTime(2.0) ->setExplodeable(10.0) @@ -1952,7 +1941,8 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 85, L"fence", - (new FenceBlock(L"planks_oak", Material::WOOD, PlanksBlock::Variant::OAK->getMaterialColor())) + (new (BlockBootstrapAllocation<0xc0>{}) + FenceBlock(L"planks_oak", Material::WOOD, PlanksBlock::Variant::OAK->getMaterialColor())) ->setDestroyTime(2.0) ->setExplodeable(5.0) ->setSoundType(SoundType::WOOD) @@ -1961,7 +1951,7 @@ void Block::staticCtor() { // Size: 0xD8u Block* pumpkinBlock - = (new PumpkinBlock()) + = (new (BlockBootstrapAllocation<0xd8>{}) PumpkinBlock()) ->setIconName(L"pumpkin") ->setDestroyTime(1.0) ->setSoundType(SoundType::WOOD) @@ -2010,7 +2000,7 @@ void Block::staticCtor() { // Size: 0xD8u Block::registerBlock(91, L"lit_pumpkin", - (new PumpkinBlock()) + (new (BlockBootstrapAllocation<0xd8>{}) PumpkinBlock()) ->setIconName(L"pumpkin") ->setDestroyTime(1.0) ->setSoundType(SoundType::WOOD) @@ -2022,7 +2012,7 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 92, L"cake", - (new CakeBlock()) + (new (BlockBootstrapAllocation<0xc0>{}) CakeBlock()) ->setIconName(L"cake") ->setDestroyTime(0.5) ->setSoundType(SoundType::WOOL) @@ -2059,7 +2049,7 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 95, L"stained_glass", - (new StainedGlassBlock(Material::GLASS)) + (new (BlockBootstrapAllocation<0xc0>{}) StainedGlassBlock(Material::GLASS)) ->setIconName(L"glass") ->setDestroyTime(0.3) ->setSoundType(SoundType::GLASS) @@ -2103,7 +2093,8 @@ void Block::staticCtor() { // Size: 0xD8u Block::registerBlock( 99, L"brown_mushroom_block", - (new HugeMushroomBlock(Material::WOOD, MaterialColor::DIRT, brownMushroomBlock)) + (new (BlockBootstrapAllocation<0xd8>{}) + HugeMushroomBlock(Material::WOOD, MaterialColor::DIRT, brownMushroomBlock)) ->setIconName(L"mushroom_block") ->setDestroyTime(0.2) ->setSoundType(SoundType::WOOD) @@ -2113,7 +2104,8 @@ void Block::staticCtor() { // Size: 0xD8u Block::registerBlock( 100, L"red_mushroom_block", - (new HugeMushroomBlock(Material::WOOD, MaterialColor::COLOR_RED, redMushroomBlock)) + (new (BlockBootstrapAllocation<0xd8>{}) + HugeMushroomBlock(Material::WOOD, MaterialColor::COLOR_RED, redMushroomBlock)) ->setIconName(L"mushroom_block") ->setDestroyTime(0.2) ->setSoundType(SoundType::WOOD) @@ -2123,7 +2115,8 @@ void Block::staticCtor() { // Size: 0xE0u Block::registerBlock( 101, L"iron_bars", - (new ThinFenceBlock(L"iron_bars", L"iron_bars", Material::METAL, true)) + (new (BlockBootstrapAllocation<0xe0>{}) + ThinFenceBlock(L"iron_bars", L"iron_bars", Material::METAL, true)) ->setDestroyTime(5.0) ->setExplodeable(10.0) ->setSoundType(SoundType::METAL) @@ -2133,7 +2126,8 @@ void Block::staticCtor() { // Size: 0xE0u Block::registerBlock( 102, L"glass_pane", - (new ThinFenceBlock(L"glass", L"glass_pane_top", Material::GLASS, false)) + (new (BlockBootstrapAllocation<0xe0>{}) + ThinFenceBlock(L"glass", L"glass_pane_top", Material::GLASS, false)) ->setDestroyTime(0.3) ->setSoundType(SoundType::GLASS) ->setNameAndDescriptionId(StringIDs::GlassPane, StringIDs::TransparentBlocksThatCanBeUsedAsAn) @@ -2141,7 +2135,7 @@ void Block::staticCtor() { // Size: 0xB0u Block* melonBlock - = (new MelonBlock()) + = (new (BlockBootstrapAllocation<0xb0>{}) MelonBlock()) ->setIconName(L"melon") ->setDestroyTime(1.0) ->setSoundType(SoundType::WOOD) @@ -2150,7 +2144,7 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock(104, L"pumpkin_stem", - (new StemBlock(pumpkinBlock)) + (new (BlockBootstrapAllocation<0xc0>{}) StemBlock(pumpkinBlock)) ->setIconName(L"pumpkin_stem") ->setDestroyTime(0.0) ->setSoundType(SoundType::WOOD) @@ -2160,7 +2154,7 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock(105, L"melon_stem", - (new StemBlock(melonBlock)) + (new (BlockBootstrapAllocation<0xc0>{}) StemBlock(melonBlock)) ->setIconName(L"melon_stem") ->setDestroyTime(0.0) ->setSoundType(SoundType::WOOD) @@ -2180,33 +2174,33 @@ void Block::staticCtor() { ->disableMipmap()); // Size: 0xC0u - Block::registerBlock(107, L"fence_gate", - (new FenceGateBlock(L"planks_oak", PlanksBlock::Variant::OAK)) - ->setIconName(L"fenceGate") - ->setDestroyTime(2.0) - ->setExplodeable(5.0) - ->setSoundType(SoundType::WOOD) - ->sendBlockData(15) - ->setNameAndDescriptionId(StringIDs::OakFenceGate, - StringIDs::SimilarToADoorButUsedPrimarilyWithFences) - ->setBaseItemTypeAndMaterial(47, 1)); + Block::registerBlock( + 107, L"fence_gate", + (new (BlockBootstrapAllocation<0xc0>{}) FenceGateBlock(L"planks_oak", PlanksBlock::Variant::OAK)) + ->setIconName(L"fenceGate") + ->setDestroyTime(2.0) + ->setExplodeable(5.0) + ->setSoundType(SoundType::WOOD) + ->sendBlockData(15) + ->setNameAndDescriptionId(StringIDs::OakFenceGate, + StringIDs::SimilarToADoorButUsedPrimarilyWithFences) + ->setBaseItemTypeAndMaterial(47, 1)); // Size: 0xC0u Block::registerBlock( 108, L"brick_stairs", - (new StairBlock(brickBlock->defaultBlockState())) + (new (BlockBootstrapAllocation<0xc0>{}) StairBlock(brickBlock->defaultBlockState())) ->setIconName(L"stairsBrick") ->sendBlockData(15) ->setNameAndDescriptionId(StringIDs::BrickStairs, StringIDs::UsedForCompactStaircases_1) ->setBaseItemTypeAndMaterial(16, 14)); // Size: 0xC0u - const BlockState* stoneBrickStairBlockVariant - = stoneBrickBlock->defaultBlockState()->setValue( - StoneBrickBlock::VARIANT, StoneBrickBlock::Variant::DEFAULT); Block::registerBlock( 109, L"stone_brick_stairs", - (new StairBlock(stoneBrickStairBlockVariant)) + (new (BlockBootstrapAllocation<0xc0>{}) + StairBlock(stoneBrickBlock->defaultBlockState()->setValue( + StoneBrickBlock::VARIANT, StoneBrickBlock::Variant::DEFAULT))) ->setIconName(L"stairsStoneBrickSmooth") ->sendBlockData(15) ->setNameAndDescriptionId(StringIDs::StoneBrickStairs, StringIDs::UsedForCompactStaircases_1) @@ -2215,7 +2209,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock( 110, L"mycelium", - (new MyceliumBlock()) + (new (BlockBootstrapAllocation<0xb8>{}) MyceliumBlock()) ->setIconName(L"mycelium") ->setDestroyTime(0.6) ->setSoundType(SoundType::GRASS) @@ -2246,7 +2240,8 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 113, L"nether_brick_fence", - (new FenceBlock(L"nether_brick", Material::STONE, MaterialColor::NETHER)) + (new (BlockBootstrapAllocation<0xc0>{}) + FenceBlock(L"nether_brick", Material::STONE, MaterialColor::NETHER)) ->setDestroyTime(2.0) ->setExplodeable(10.0) ->setSoundType(SoundType::STONE) @@ -2256,7 +2251,7 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 114, L"nether_brick_stairs", - (new StairBlock(netherBrickBlock->defaultBlockState())) + (new (BlockBootstrapAllocation<0xc0>{}) StairBlock(netherBrickBlock->defaultBlockState())) ->setIconName(L"stairsNetherBrick") ->sendBlockData(15) ->setNameAndDescriptionId(StringIDs::NetherBrickStairs, StringIDs::UsedForCompactStaircases_1) @@ -2264,7 +2259,7 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock(115, L"nether_wart", - (new NetherWartBlock()) + (new (BlockBootstrapAllocation<0xc0>{}) NetherWartBlock()) ->setIconName(L"nether_wart") ->sendBlockData(15) ->setNameAndDescriptionId(StringIDs::NetherWart_1, @@ -2274,7 +2269,7 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 116, L"enchanting_table", - (new EnchantmentTableBlock()) + (new (BlockBootstrapAllocation<0xc0>{}) EnchantmentTableBlock()) ->setIconName(L"enchanting_table") ->setDestroyTime(5.0) ->setExplodeable(2000.0) @@ -2284,7 +2279,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock(117, L"brewing_stand", - (new BrewingStandBlock()) + (new (BlockBootstrapAllocation<0xb8>{}) BrewingStandBlock()) ->setIconName(L"brewing_stand") ->setDestroyTime(0.5) ->setLightEmission(0.125) @@ -2296,7 +2291,7 @@ void Block::staticCtor() { // Size: 0xD0u Block::registerBlock( 118, L"cauldron", - (new CauldronBlock()) + (new (BlockBootstrapAllocation<0xd0>{}) CauldronBlock()) ->setIconName(L"cauldron") ->setDestroyTime(2.0) ->sendBlockData(15) @@ -2305,19 +2300,19 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock( 119, L"end_portal", - (new EndPortalBlock(Material::PORTAL)) - ->setDestroyTime(3.4028e38) + (new (BlockBootstrapAllocation<0xb0>{}) EndPortalBlock(Material::PORTAL)) + ->setDestroyTime(3.4028234663852886e38f) ->setExplodeable(6000000.0) ->setNameAndDescriptionId(StringIDs::EndPortal, StringIDs::ThisCanBeActivatedUsingTwelveEyeOf)); // Size: 0xB8u Block::registerBlock( 120, L"end_portal_frame", - (new EndPortalFrameBlock()) + (new (BlockBootstrapAllocation<0xb8>{}) EndPortalFrameBlock()) ->setIconName(L"endframe") ->setSoundType(SoundType::GLASS) ->setLightEmission(0.125) - ->setDestroyTime(3.4028e38) + ->setDestroyTime(3.4028234663852886e38f) ->sendBlockData(15) ->setExplodeable(6000000.0) ->setNameAndDescriptionId(StringIDs::EndPortalFrame, StringIDs::UsedToFormAnEndPortal)); @@ -2388,7 +2383,7 @@ void Block::staticCtor() { // Size: 0xC8u Block::registerBlock( 127, L"cocoa", - (new CocoaBlock()) + (new (BlockBootstrapAllocation<0xc8>{}) CocoaBlock()) ->setIconName(L"cocoa") ->setDestroyTime(0.2) ->setExplodeable(5.0) @@ -2397,16 +2392,15 @@ void Block::staticCtor() { ->setNameAndDescriptionId(StringIDs::Cocoa, StringIDs::CanBeFarmedToCollectCocoaBeans)); // Size: 0xC0u - const BlockState* sandStoneStairBlockVariant - = sandStoneBlock->defaultBlockState()->setValue( - SandStoneBlock::TYPE, SandStoneBlock::Variant::DEFAULT); - Block* sandStoneStairBlock - = (new StairBlock(sandStoneStairBlockVariant)) - ->setIconName(L"stairsSandstone") - ->sendBlockData(15) - ->setNameAndDescriptionId(StringIDs::SandstoneStairs, StringIDs::UsedForCompactStaircases_1) - ->setBaseItemTypeAndMaterial(16, 13); - Block::registerBlock(128, L"sandstone_stairs", sandStoneStairBlock); + Block::registerBlock( + 128, L"sandstone_stairs", + (new (BlockBootstrapAllocation<0xc0>{}) + StairBlock(sandStoneBlock->defaultBlockState()->setValue( + SandStoneBlock::TYPE, SandStoneBlock::Variant::DEFAULT))) + ->setIconName(L"stairsSandstone") + ->sendBlockData(15) + ->setNameAndDescriptionId(StringIDs::SandstoneStairs, StringIDs::UsedForCompactStaircases_1) + ->setBaseItemTypeAndMaterial(16, 13)); // Size: 0xA8u Block::registerBlock( @@ -2421,7 +2415,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock( 130, L"ender_chest", - (new EnderChestBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) EnderChestBlock()) ->setDestroyTime(22.5) ->setIconName(L"enderChest") ->setExplodeable(1000.0) @@ -2461,45 +2455,42 @@ void Block::staticCtor() { ->setBaseItemTypeAndMaterial(32, 44)); // Size: 0xC0u - const BlockState* spruceStairBlockVariant - = planksBlock->defaultBlockState()->setValue(PlanksBlock::VARIANT, - PlanksBlock::Variant::SPRUCE); - Block* spruceStairBlock - = (new StairBlock(spruceStairBlockVariant)) - ->setIconName(L"stairsWoodSpruce") - ->sendBlockData(15) - ->setNameAndDescriptionId(StringIDs::SpruceWoodStairs, StringIDs::UsedForCompactStaircases_1) - ->setBaseItemTypeAndMaterial(16, 39); - Block::registerBlock(134, L"spruce_stairs", stairBlock); + Block::registerBlock( + 134, L"spruce_stairs", + (new (BlockBootstrapAllocation<0xc0>{}) + StairBlock(planksBlock->defaultBlockState()->setValue( + PlanksBlock::VARIANT, PlanksBlock::Variant::SPRUCE))) + ->setIconName(L"stairsWoodSpruce") + ->sendBlockData(15) + ->setNameAndDescriptionId(StringIDs::SpruceWoodStairs, StringIDs::UsedForCompactStaircases_1) + ->setBaseItemTypeAndMaterial(16, 39)); // Size: 0xC0u - const BlockState* birchStairBlockVariant - = planksBlock->defaultBlockState()->setValue(PlanksBlock::VARIANT, - PlanksBlock::Variant::BIRCH); - Block* birchStairBlock - = (new StairBlock(birchStairBlockVariant)) - ->setIconName(L"stairsWoodBirch") - ->sendBlockData(15) - ->setNameAndDescriptionId(StringIDs::BirchWoodStairs, StringIDs::UsedForCompactStaircases_1) - ->setBaseItemTypeAndMaterial(16, 40); - Block::registerBlock(135, L"birch_stairs", birchStairBlock); + Block::registerBlock( + 135, L"birch_stairs", + (new (BlockBootstrapAllocation<0xc0>{}) + StairBlock(planksBlock->defaultBlockState()->setValue( + PlanksBlock::VARIANT, PlanksBlock::Variant::BIRCH))) + ->setIconName(L"stairsWoodBirch") + ->sendBlockData(15) + ->setNameAndDescriptionId(StringIDs::BirchWoodStairs, StringIDs::UsedForCompactStaircases_1) + ->setBaseItemTypeAndMaterial(16, 40)); // Size: 0xC0u - const BlockState* jungleStairBlockVariant - = planksBlock->defaultBlockState()->setValue(PlanksBlock::VARIANT, - PlanksBlock::Variant::JUNGLE); - Block* jungleStairBlock - = (new StairBlock(jungleStairBlockVariant)) - ->setIconName(L"stairsWoodJungle") - ->sendBlockData(15) - ->setNameAndDescriptionId(StringIDs::JungleWoodStairs, StringIDs::UsedForCompactStaircases_1) - ->setBaseItemTypeAndMaterial(16, 41); - Block::registerBlock(136, L"jungle_stairs", jungleStairBlock); + Block::registerBlock( + 136, L"jungle_stairs", + (new (BlockBootstrapAllocation<0xc0>{}) + StairBlock(planksBlock->defaultBlockState()->setValue( + PlanksBlock::VARIANT, PlanksBlock::Variant::JUNGLE))) + ->setIconName(L"stairsWoodJungle") + ->sendBlockData(15) + ->setNameAndDescriptionId(StringIDs::JungleWoodStairs, StringIDs::UsedForCompactStaircases_1) + ->setBaseItemTypeAndMaterial(16, 41)); // Size: 0xB0u Block::registerBlock( 138, L"beacon", - (new BeaconBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) BeaconBlock()) ->setIconName(L"beacon") ->setLightEmission(1.0) ->setSoundType(SoundType::GLASS) @@ -2515,7 +2506,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock(140, L"flower_pot", - (new FlowerPotBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) FlowerPotBlock()) ->setDestroyTime(0.0) ->setIconName(L"flower_pot") ->setSoundType(SoundType::STONE) @@ -2525,7 +2516,7 @@ void Block::staticCtor() { // Size: 0x110u Block::registerBlock( 141, L"carrots", - (new CarrotBlock()) + (new (BlockBootstrapAllocation<0x110>{}) CarrotBlock()) ->setIconName(L"carrots") ->setNameAndDescriptionId(StringIDs::Carrots, StringIDs::Restores15IconShank01AndCan) ->disableMipmap()); @@ -2533,7 +2524,7 @@ void Block::staticCtor() { // Size: 0x110u Block::registerBlock( 142, L"potatoes", - (new PotatoBlock()) + (new (BlockBootstrapAllocation<0x110>{}) PotatoBlock()) ->setIconName(L"potatoes") ->setNameAndDescriptionId(StringIDs::Potatoes, StringIDs::Restores05IconShank01OrCan) ->disableMipmap()); @@ -2552,7 +2543,7 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 144, L"skull", - (new SkullBlock()) + (new (BlockBootstrapAllocation<0xc0>{}) SkullBlock()) ->setIconName(L"") ->setDestroyTime(1.0) ->setSoundType(SoundType::STONE) @@ -2561,7 +2552,7 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 145, L"anvil", - (new AnvilBlock()) + (new (BlockBootstrapAllocation<0xc0>{}) AnvilBlock()) ->setIconName(L"anvil") ->setBaseItemTypeAndMaterial(30, 3) ->setDestroyTime(5.0) @@ -2573,7 +2564,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock( 146, L"trapped_chest", - (new ChestBlock(true)) + (new (BlockBootstrapAllocation<0xb8>{}) ChestBlock(true)) ->setBaseItemTypeAndMaterial(36, 25) ->setDestroyTime(2.5) ->setSoundType(SoundType::WOOD) @@ -2582,18 +2573,19 @@ void Block::staticCtor() { StringIDs::StoresBlocksAndItemsInsidePlaceTwoChestsATrappedAlsoCreatesRedstone)); // Size: 0xC8u - Block::registerBlock( - 147, L"light_weighted_pressure_plate", - (new WeightedPressurePlateBlock(L"gold_block", Material::METAL, 15, MaterialColor::GOLD)) - ->setBaseItemTypeAndMaterial(15, 4) - ->setDestroyTime(0.5) - ->setSoundType(SoundType::WOOD) - ->setNameAndDescriptionId(StringIDs::WeightedPressurePlateLight, - StringIDs::ProvidesARedstoneChargeTheChargeWillBe_1)); + Block::registerBlock(147, L"light_weighted_pressure_plate", + (new (BlockBootstrapAllocation<0xc8>{}) WeightedPressurePlateBlock( + L"gold_block", Material::METAL, 15, MaterialColor::GOLD)) + ->setBaseItemTypeAndMaterial(15, 4) + ->setDestroyTime(0.5) + ->setSoundType(SoundType::WOOD) + ->setNameAndDescriptionId(StringIDs::WeightedPressurePlateLight, + StringIDs::ProvidesARedstoneChargeTheChargeWillBe_1)); // Size: 0xC8u Block::registerBlock(148, L"heavy_weighted_pressure_plate", - (new WeightedPressurePlateBlock(L"iron_block", Material::METAL, 150, 0)) + (new (BlockBootstrapAllocation<0xc8>{}) + WeightedPressurePlateBlock(L"iron_block", Material::METAL, 150, 0)) ->setBaseItemTypeAndMaterial(15, 3) ->setDestroyTime(0.5) ->setSoundType(SoundType::WOOD) @@ -2602,7 +2594,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock(149, L"unpowered_comparator", - (new ComparatorBlock(false)) + (new (BlockBootstrapAllocation<0xb0>{}) ComparatorBlock(false)) ->setIconName(L"comparator_off") ->setDestroyTime(0.0) ->setSoundType(SoundType::WOOD) @@ -2613,7 +2605,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock(150, L"powered_comparator", - (new ComparatorBlock(true)) + (new (BlockBootstrapAllocation<0xb0>{}) ComparatorBlock(true)) ->setIconName(L"comparator_on") ->setDestroyTime(0.0) ->setLightEmission(0.625) @@ -2625,7 +2617,7 @@ void Block::staticCtor() { // Size: 0xD0u Block::registerBlock(151, L"daylight_detector", - (new DaylightDetectorBlock(false)) + (new (BlockBootstrapAllocation<0xd0>{}) DaylightDetectorBlock(false)) ->setIconName(L"daylight_detector") ->setNameAndDescriptionId(StringIDs::DaylightSensor, StringIDs::ABlockThatOutputsARedstoneSignalBased)); @@ -2654,7 +2646,7 @@ void Block::staticCtor() { // Size: 0xC8u Block::registerBlock( 154, L"hopper", - (new HopperBlock()) + (new (BlockBootstrapAllocation<0xc8>{}) HopperBlock()) ->setIconName(L"hopper") ->setDestroyTime(3.0) ->setExplodeable(8.0) @@ -2672,18 +2664,18 @@ void Block::staticCtor() { Block::registerBlock(155, L"quartz_block", quartzBlock); // Size: 0xC0u - const BlockState* variant = quartzBlock->defaultBlockState()->setValue( - QuartzBlock::VARIANT, QuartzBlock::Variant::DEFAULT); - Block* quartzStairsBlock - = (new StairBlock(variant)) - ->setIconName(L"stairsQuartz") - ->setNameAndDescriptionId(StringIDs::QuartzStairs, StringIDs::UsedForCompactStaircases_1) - ->setBaseItemTypeAndMaterial(16, 45); - Block::registerBlock(156, L"quartz_stairs", quartzStairsBlock); + Block::registerBlock( + 156, L"quartz_stairs", + (new (BlockBootstrapAllocation<0xc0>{}) + StairBlock(quartzBlock->defaultBlockState()->setValue( + QuartzBlock::VARIANT, QuartzBlock::Variant::DEFAULT))) + ->setIconName(L"stairsQuartz") + ->setNameAndDescriptionId(StringIDs::QuartzStairs, StringIDs::UsedForCompactStaircases_1) + ->setBaseItemTypeAndMaterial(16, 45)); // Size: 0xB0u Block::registerBlock(157, L"activator_rail", - (new PoweredRailBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) PoweredRailBlock()) ->setIconName(L"rail_activator") ->setDestroyTime(0.7) ->setSoundType(SoundType::METAL) @@ -2693,7 +2685,7 @@ void Block::staticCtor() { // Size: 0xE8u Block::registerBlock( 158, L"dropper", - (new DropperBlock()) + (new (BlockBootstrapAllocation<0xe8>{}) DropperBlock()) ->setIconName(L"dropper") ->setDestroyTime(3.5) ->setSoundType(SoundType::STONE) @@ -2702,7 +2694,7 @@ void Block::staticCtor() { // Size: 0x128u Block::registerBlock(159, L"stained_hardened_clay", - (new StainedHardenedClayBlock()) + (new (BlockBootstrapAllocation<0x128>{}) StainedHardenedClayBlock()) ->setIconName(L"hardened_clay_stained") ->setDestroyTime(1.25) ->setExplodeable(7.0) @@ -2714,7 +2706,7 @@ void Block::staticCtor() { // Size: 0xE0u Block::registerBlock( 160, L"stained_glass_pane", - (new StainedGlassPaneBlock()) + (new (BlockBootstrapAllocation<0xe0>{}) StainedGlassPaneBlock()) ->setIconName(L"glass") ->setDestroyTime(0.3) ->setSoundType(SoundType::GLASS) @@ -2724,7 +2716,7 @@ void Block::staticCtor() { // Size: 0x110u Block::registerBlock(161, L"leaves2", - (new NewLeafBlock()) + (new (BlockBootstrapAllocation<0x110>{}) NewLeafBlock()) ->setIconName(L"leaves") ->sendBlockData(3) ->setNameAndDescriptionId(StringIDs::Leaves, @@ -2739,28 +2731,26 @@ void Block::staticCtor() { ->setNameAndDescriptionId(StringIDs::Wood, StringIDs::ChoppedUsingAnAxeAndCanBeCrafted)); // Size: 0xC0u - const BlockState* acaciaStairsBlockVariant - = planksBlock->defaultBlockState()->setValue(PlanksBlock::VARIANT, - PlanksBlock::Variant::ACACIA); - Block* acaciaStairsBlock - = (new StairBlock(acaciaStairsBlockVariant)) - ->setIconName(L"stairsWoodAcacia") - ->sendBlockData(15) - ->setNameAndDescriptionId(StringIDs::AcaciaWoodStairs, StringIDs::UsedForCompactStaircases_1) - ->setBaseItemTypeAndMaterial(16, 42); - Block::registerBlock(163, L"acacia_stairs", acaciaStairsBlock); + Block::registerBlock( + 163, L"acacia_stairs", + (new (BlockBootstrapAllocation<0xc0>{}) + StairBlock(planksBlock->defaultBlockState()->setValue( + PlanksBlock::VARIANT, PlanksBlock::Variant::ACACIA))) + ->setIconName(L"stairsWoodAcacia") + ->sendBlockData(15) + ->setNameAndDescriptionId(StringIDs::AcaciaWoodStairs, StringIDs::UsedForCompactStaircases_1) + ->setBaseItemTypeAndMaterial(16, 42)); // Size: 0xC0u - const BlockState* darkOakStairsBlockVariant - = planksBlock->defaultBlockState()->setValue(PlanksBlock::VARIANT, - PlanksBlock::Variant::DARK_OAK); - Block* darkOakStairsBlock - = (new StairBlock(darkOakStairsBlockVariant)) - ->setIconName(L"stairsWoodDarkOak") - ->sendBlockData(15) - ->setNameAndDescriptionId(StringIDs::DarkOakWoodStairs, StringIDs::UsedForCompactStaircases_1) - ->setBaseItemTypeAndMaterial(16, 43); - Block::registerBlock(164, L"dark_oak_stairs", darkOakStairsBlock); + Block::registerBlock( + 164, L"dark_oak_stairs", + (new (BlockBootstrapAllocation<0xc0>{}) + StairBlock(planksBlock->defaultBlockState()->setValue( + PlanksBlock::VARIANT, PlanksBlock::Variant::DARK_OAK))) + ->setIconName(L"stairsWoodDarkOak") + ->sendBlockData(15) + ->setNameAndDescriptionId(StringIDs::DarkOakWoodStairs, StringIDs::UsedForCompactStaircases_1) + ->setBaseItemTypeAndMaterial(16, 43)); // Size: 0xC0u Block::registerBlock(165, L"slime", @@ -2863,14 +2853,14 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock(175, L"double_plant", - (new DoublePlantBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) DoublePlantBlock()) ->setNameAndDescriptionId(StringIDs::DoublePlantBlock, StringIDs::ALargePlant) ->disableMipmap()); // Size: 0xB0u Block::registerBlock( 176, L"standing_banner", - (new StandingBannerBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) StandingBannerBlock()) ->setIconName(L"planks_oak") ->setDestroyTime(1.0) ->setSoundType(SoundType::WOOD) @@ -2881,7 +2871,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock( 177, L"wall_banner", - (new WallBannerBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) WallBannerBlock()) ->setIconName(L"planks_oak") ->setDestroyTime(1.0) ->setSoundType(SoundType::WOOD) @@ -2891,7 +2881,7 @@ void Block::staticCtor() { // Size: 0xD0u Block::registerBlock(178, L"daylight_detector_inverted", - (new DaylightDetectorBlock(true)) + (new (BlockBootstrapAllocation<0xd0>{}) DaylightDetectorBlock(true)) ->setIconName(L"daylight_detector") ->setNameAndDescriptionId(StringIDs::DaylightSensor, StringIDs::ABlockThatOutputsARedstoneSignalBased)); @@ -2908,19 +2898,18 @@ void Block::staticCtor() { Block::registerBlock(179, L"red_sandstone", redSandStoneBlock); // Size: 0xC0u - const BlockState* redSandstoneStairsBlockVariant - = redSandStoneBlock->defaultBlockState()->setValue( - RedSandStoneBlock::TYPE, RedSandStoneBlock::Variant::DEFAULT); - Block* redSandstoneStairsBlock - = (new StairBlock(redSandstoneStairsBlockVariant)) - ->setIconName(L"red_sandstone") - ->setNameAndDescriptionId(StringIDs::RedSandstoneStairs, StringIDs::UsedForCompactStaircases_2) - ->setBaseItemTypeAndMaterial(16, 48); - Block::registerBlock(180, L"red_sandstone_stairs", redSandstoneStairsBlock); + Block::registerBlock( + 180, L"red_sandstone_stairs", + (new (BlockBootstrapAllocation<0xc0>{}) + StairBlock(redSandStoneBlock->defaultBlockState()->setValue( + RedSandStoneBlock::TYPE, RedSandStoneBlock::Variant::DEFAULT))) + ->setIconName(L"red_sandstone") + ->setNameAndDescriptionId(StringIDs::RedSandstoneStairs, StringIDs::UsedForCompactStaircases_2) + ->setBaseItemTypeAndMaterial(16, 48)); // Size: 0xB0u Block::registerBlock(181, L"double_stone_slab2", - (new FullNewStoneSlabBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) FullNewStoneSlabBlock()) ->setIconName(L"double_stone_slab2") ->setDestroyTime(2.0) ->setExplodeable(10.0) @@ -2931,7 +2920,7 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock(182, L"stone_slab2", - (new HalfNewStoneSlabBlock()) + (new (BlockBootstrapAllocation<0xb0>{}) HalfNewStoneSlabBlock()) ->setIconName(L"stone_slab2") ->setDestroyTime(2.0) ->setExplodeable(10.0) @@ -2942,7 +2931,8 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock(183, L"spruce_fence_gate", - (new FenceGateBlock(L"planks_spruce", PlanksBlock::Variant::SPRUCE)) + (new (BlockBootstrapAllocation<0xc0>{}) + FenceGateBlock(L"planks_spruce", PlanksBlock::Variant::SPRUCE)) ->setIconName(L"fenceGate") ->setDestroyTime(2.0) ->setExplodeable(5.0) @@ -2953,20 +2943,22 @@ void Block::staticCtor() { ->setBaseItemTypeAndMaterial(47, 39)); // Size: 0xC0u - Block::registerBlock(184, L"birch_fence_gate", - (new FenceGateBlock(L"planks_birch", PlanksBlock::Variant::BIRCH)) - ->setIconName(L"fenceGate") - ->setDestroyTime(2.0) - ->setExplodeable(5.0) - ->setSoundType(SoundType::WOOD) - ->sendBlockData(15) - ->setNameAndDescriptionId(StringIDs::BirchFenceGate, - StringIDs::SimilarToADoorButUsedPrimarilyWithFences) - ->setBaseItemTypeAndMaterial(47, 40)); + Block::registerBlock( + 184, L"birch_fence_gate", + (new (BlockBootstrapAllocation<0xc0>{}) FenceGateBlock(L"planks_birch", PlanksBlock::Variant::BIRCH)) + ->setIconName(L"fenceGate") + ->setDestroyTime(2.0) + ->setExplodeable(5.0) + ->setSoundType(SoundType::WOOD) + ->sendBlockData(15) + ->setNameAndDescriptionId(StringIDs::BirchFenceGate, + StringIDs::SimilarToADoorButUsedPrimarilyWithFences) + ->setBaseItemTypeAndMaterial(47, 40)); // Size: 0xC0u Block::registerBlock(185, L"jungle_fence_gate", - (new FenceGateBlock(L"planks_jungle", PlanksBlock::Variant::JUNGLE)) + (new (BlockBootstrapAllocation<0xc0>{}) + FenceGateBlock(L"planks_jungle", PlanksBlock::Variant::JUNGLE)) ->setIconName(L"fenceGate") ->setDestroyTime(2.0) ->setExplodeable(5.0) @@ -2978,7 +2970,8 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock(186, L"dark_oak_fence_gate", - (new FenceGateBlock(L"planks_big_oak", PlanksBlock::Variant::DARK_OAK)) + (new (BlockBootstrapAllocation<0xc0>{}) + FenceGateBlock(L"planks_big_oak", PlanksBlock::Variant::DARK_OAK)) ->setIconName(L"fenceGate") ->setDestroyTime(2.0) ->setExplodeable(5.0) @@ -2990,7 +2983,8 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock(187, L"acacia_fence_gate", - (new FenceGateBlock(L"planks_acacia", PlanksBlock::Variant::ACACIA)) + (new (BlockBootstrapAllocation<0xc0>{}) + FenceGateBlock(L"planks_acacia", PlanksBlock::Variant::ACACIA)) ->setIconName(L"fenceGate") ->setDestroyTime(2.0) ->setExplodeable(5.0) @@ -3003,7 +2997,8 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 188, L"spruce_fence", - (new FenceBlock(L"planks_spruce", Material::WOOD, PlanksBlock::Variant::SPRUCE->getMaterialColor())) + (new (BlockBootstrapAllocation<0xc0>{}) + FenceBlock(L"planks_spruce", Material::WOOD, PlanksBlock::Variant::SPRUCE->getMaterialColor())) ->setDestroyTime(2.0) ->setExplodeable(5.0) ->setSoundType(SoundType::WOOD) @@ -3013,7 +3008,8 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 189, L"birch_fence", - (new FenceBlock(L"planks_birch", Material::WOOD, PlanksBlock::Variant::BIRCH->getMaterialColor())) + (new (BlockBootstrapAllocation<0xc0>{}) + FenceBlock(L"planks_birch", Material::WOOD, PlanksBlock::Variant::BIRCH->getMaterialColor())) ->setDestroyTime(2.0) ->setExplodeable(5.0) ->setSoundType(SoundType::WOOD) @@ -3023,7 +3019,8 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 190, L"jungle_fence", - (new FenceBlock(L"planks_jungle", Material::WOOD, PlanksBlock::Variant::JUNGLE->getMaterialColor())) + (new (BlockBootstrapAllocation<0xc0>{}) + FenceBlock(L"planks_jungle", Material::WOOD, PlanksBlock::Variant::JUNGLE->getMaterialColor())) ->setDestroyTime(2.0) ->setExplodeable(5.0) ->setSoundType(SoundType::WOOD) @@ -3033,8 +3030,8 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 191, L"dark_oak_fence", - (new FenceBlock(L"planks_big_oak", Material::WOOD, - PlanksBlock::Variant::DARK_OAK->getMaterialColor())) + (new (BlockBootstrapAllocation<0xc0>{}) FenceBlock( + L"planks_big_oak", Material::WOOD, PlanksBlock::Variant::DARK_OAK->getMaterialColor())) ->setDestroyTime(2.0) ->setExplodeable(5.0) ->setSoundType(SoundType::WOOD) @@ -3044,7 +3041,8 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 192, L"acacia_fence", - (new FenceBlock(L"planks_acacia", Material::WOOD, PlanksBlock::Variant::ACACIA->getMaterialColor())) + (new (BlockBootstrapAllocation<0xc0>{}) + FenceBlock(L"planks_acacia", Material::WOOD, PlanksBlock::Variant::ACACIA->getMaterialColor())) ->setDestroyTime(2.0) ->setExplodeable(5.0) ->setSoundType(SoundType::WOOD) @@ -3053,7 +3051,7 @@ void Block::staticCtor() { // Size: 0xC8u Block::registerBlock(193, L"spruce_door", - (new DoorBlock(Material::WOOD)) + (new (BlockBootstrapAllocation<0xc8>{}) DoorBlock(Material::WOOD)) ->setIconName(L"door_spruce") ->setDestroyTime(3.0) ->setSoundType(SoundType::WOOD) @@ -3064,7 +3062,7 @@ void Block::staticCtor() { // Size: 0xC8u Block::registerBlock(194, L"birch_door", - (new DoorBlock(Material::WOOD)) + (new (BlockBootstrapAllocation<0xc8>{}) DoorBlock(Material::WOOD)) ->setIconName(L"door_birch") ->setDestroyTime(3.0) ->setSoundType(SoundType::WOOD) @@ -3075,7 +3073,7 @@ void Block::staticCtor() { // Size: 0xC8u Block::registerBlock(195, L"jungle_door", - (new DoorBlock(Material::WOOD)) + (new (BlockBootstrapAllocation<0xc8>{}) DoorBlock(Material::WOOD)) ->setIconName(L"door_jungle") ->setDestroyTime(3.0) ->setSoundType(SoundType::WOOD) @@ -3086,7 +3084,7 @@ void Block::staticCtor() { // Size: 0xC8u Block::registerBlock(196, L"acacia_door", - (new DoorBlock(Material::WOOD)) + (new (BlockBootstrapAllocation<0xc8>{}) DoorBlock(Material::WOOD)) ->setIconName(L"door_acacia") ->setDestroyTime(3.0) ->setSoundType(SoundType::WOOD) @@ -3097,7 +3095,7 @@ void Block::staticCtor() { // Size: 0xC8u Block::registerBlock(197, L"dark_oak_door", - (new DoorBlock(Material::WOOD)) + (new (BlockBootstrapAllocation<0xc8>{}) DoorBlock(Material::WOOD)) ->setIconName(L"door_dark_oak") ->setDestroyTime(3.0) ->setSoundType(SoundType::WOOD) @@ -3129,7 +3127,7 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock( 200, L"chorus_flower", - (new ChorusFlowerBlock()) + (new (BlockBootstrapAllocation<0xc0>{}) ChorusFlowerBlock()) ->setIconName(L"chorus_flower") ->setDestroyTime(0.4) ->setSoundType(SoundType::WOOD) @@ -3149,7 +3147,8 @@ void Block::staticCtor() { // Size: 0xC8u Block::registerBlock( 202, L"purpur_pillar", - (new RotatedPillarBlockImpl(Material::STONE, MaterialColor::COLOR_MAGENTA)) + (new (BlockBootstrapAllocation<0xc8>{}) + RotatedPillarBlockImpl(Material::STONE, MaterialColor::COLOR_MAGENTA)) ->setIconTopName(L"purpur_pillar_top") // TODO ->setIconName(L"purpur_pillar") ->setDestroyTime(1.5) @@ -3160,7 +3159,7 @@ void Block::staticCtor() { // Size: 0xC0u Block::registerBlock(203, L"purpur_stairs", - (new StairBlock(purpurBlock->defaultBlockState())) + (new (BlockBootstrapAllocation<0xc0>{}) StairBlock(purpurBlock->defaultBlockState())) ->setNameAndDescriptionId(StringIDs::PurpurStairs, 0xdda0c93) ->setBaseItemTypeAndMaterial(16, 62)); @@ -3199,7 +3198,7 @@ void Block::staticCtor() { // Size: 0x110u Block::registerBlock( 207, L"beetroots", - (new BeetrootBlock()) + (new (BlockBootstrapAllocation<0x110>{}) BeetrootBlock()) ->setIconName(L"beetroots") ->disableMipmap() ->setNameAndDescriptionId(StringIDs::Beetroots, @@ -3207,7 +3206,7 @@ void Block::staticCtor() { // Size: 0xB0u Block* grassPathBlock - = (new GrassPathBlock()) + = (new (BlockBootstrapAllocation<0xb0>{}) GrassPathBlock()) ->setDestroyTime(0.65) ->setSoundType(SoundType::GRASS) ->setIconName(L"grass_path") @@ -3218,9 +3217,9 @@ void Block::staticCtor() { // Size: 0xB0u Block::registerBlock( 209, L"end_gateway", - (new EndGatewayBlock(Material::PORTAL)) + (new (BlockBootstrapAllocation<0xb0>{}) EndGatewayBlock(Material::PORTAL)) ->setIconName(L"stone") - ->setDestroyTime(3.4028e38) + ->setDestroyTime(3.4028234663852886e38f) ->setExplodeable(6000000.0) ->setNameAndDescriptionId(StringIDs::EndGateway, StringIDs::GeneratedWhenEnderDragonIsKilledThrowingAn)); @@ -3228,7 +3227,7 @@ void Block::staticCtor() { // Size: 0xD8u Block::registerBlock( 212, L"frosted_ice", - (new FrostedIceBlock()) + (new (BlockBootstrapAllocation<0xd8>{}) FrostedIceBlock()) ->setDestroyTime(0.5) ->setLightBlock(3) ->setSoundType(SoundType::GLASS) @@ -3281,14 +3280,14 @@ void Block::staticCtor() { // Size: 0xD0u Block::registerBlock(218, L"observer", - (new ObserverBlock()) + (new (BlockBootstrapAllocation<0xd0>{}) ObserverBlock()) ->setDestroyTime(3.0) ->setNameAndDescriptionId(StringIDs::Observer, StringIDs::EmitsARedstoneSignalWhenAdjacentBlocksAre)); // Size: 0xB8u Block::registerBlock(219, L"white_shulker_box", - (new ShulkerBoxBlock(DyeColor::WHITE)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::WHITE)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3298,7 +3297,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock(220, L"orange_shulker_box", - (new ShulkerBoxBlock(DyeColor::ORANGE)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::ORANGE)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3308,7 +3307,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock(221, L"magenta_shulker_box", - (new ShulkerBoxBlock(DyeColor::MAGENTA)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::MAGENTA)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3318,7 +3317,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock(222, L"light_blue_shulker_box", - (new ShulkerBoxBlock(DyeColor::LIGHT_BLUE)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::LIGHT_BLUE)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3328,7 +3327,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock(223, L"yellow_shulker_box", - (new ShulkerBoxBlock(DyeColor::YELLOW)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::YELLOW)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3339,7 +3338,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock( 224, L"lime_shulker_box", - (new ShulkerBoxBlock(DyeColor::LIME)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::LIME)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3349,7 +3348,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock( 225, L"pink_shulker_box", - (new ShulkerBoxBlock(DyeColor::PINK)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::PINK)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3359,7 +3358,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock( 226, L"gray_shulker_box", - (new ShulkerBoxBlock(DyeColor::GRAY)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::GRAY)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3368,7 +3367,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock(227, L"silver_shulker_box", - (new ShulkerBoxBlock(DyeColor::SILVER)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::SILVER)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3379,7 +3378,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock( 228, L"cyan_shulker_box", - (new ShulkerBoxBlock(DyeColor::CYAN)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::CYAN)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3388,7 +3387,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock(229, L"purple_shulker_box", - (new ShulkerBoxBlock(DyeColor::PURPLE)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::PURPLE)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3399,7 +3398,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock( 230, L"blue_shulker_box", - (new ShulkerBoxBlock(DyeColor::BLUE)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::BLUE)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3408,7 +3407,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock(231, L"brown_shulker_box", - (new ShulkerBoxBlock(DyeColor::BROWN)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::BROWN)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3418,7 +3417,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock(232, L"green_shulker_box", - (new ShulkerBoxBlock(DyeColor::GREEN)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::GREEN)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3429,7 +3428,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock( 233, L"red_shulker_box", - (new ShulkerBoxBlock(DyeColor::RED)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::RED)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3439,7 +3438,7 @@ void Block::staticCtor() { // Size: 0xB8u Block::registerBlock( 234, L"black_shulker_box", - (new ShulkerBoxBlock(DyeColor::BLACK)) + (new (BlockBootstrapAllocation<0xb8>{}) ShulkerBoxBlock(DyeColor::BLACK)) ->setIconName(L"shulker_top") ->setDestroyTime(2.0) ->setSoundType(SoundType::STONE) @@ -3570,7 +3569,7 @@ void Block::staticCtor() { // Size: 0x128u Block::registerBlock( 251, L"concrete", - (new ColoredBlock(Material::STONE)) + (new (BlockBootstrapAllocation<0x128>{}) ColoredBlock(Material::STONE)) ->setDestroyTime(1.8) ->setSoundType(SoundType::STONE) ->setIconName(L"concrete") @@ -3578,7 +3577,7 @@ void Block::staticCtor() { // Size: 0x128u Block::registerBlock(252, L"concrete_powder", - (new ConcretePowderBlock()) + (new (BlockBootstrapAllocation<0x128>{}) ConcretePowderBlock()) ->setDestroyTime(0.5) ->setSoundType(SoundType::SAND) ->setIconName(L"concrete_powder") @@ -3602,8 +3601,9 @@ void Block::staticCtor() { } else { StairBlock* s = dynamic_cast(block); HalfSlabBlock* b = dynamic_cast(block); - if (block == farmBlock || block == grassPathBlock || !s || b) - block->m_field3C = block->m_lightEmission == 0 || block->m_isBlocksLight; + // The original uses opacity here; emission is a separate field. + if (block != farmBlock && block != grassPathBlock && !s && !b) + block->m_field3C = block->m_lightBlock == 0 || block->m_isBlocksLight; else block->m_field3C = 1; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/Block.h b/src/Minecraft.World/net/minecraft/world/level/block/Block.h index a023fa19..f87d0eb1 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/Block.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/Block.h @@ -217,6 +217,7 @@ class Block { Material* getMaterial(); int getId(); + static int getId(Block*); bool neighbourVisibleThroughShapes(const arrayWithLength*, LevelSource*, const BlockPos&, const Direction*); diff --git a/src/Minecraft.World/net/minecraft/world/level/block/BlockBootstrapAllocation.h b/src/Minecraft.World/net/minecraft/world/level/block/BlockBootstrapAllocation.h new file mode 100644 index 00000000..13fbd582 --- /dev/null +++ b/src/Minecraft.World/net/minecraft/world/level/block/BlockBootstrapAllocation.h @@ -0,0 +1,19 @@ +#pragma once + +#include +#include + +/** Custom allocation tag for partial block layouts; preserves allocation before argument evaluation. */ +template +struct BlockBootstrapAllocation {}; + +template +inline __attribute__((always_inline)) void* operator new(std::size_t declaredSize, + BlockBootstrapAllocation) { + return ::operator new(OriginalSize); +} + +template +inline void operator delete(void* pointer, BlockBootstrapAllocation) noexcept { + ::operator delete(pointer); +} diff --git a/src/Minecraft.World/net/minecraft/world/level/block/Blocks.h b/src/Minecraft.World/net/minecraft/world/level/block/Blocks.h index b48fce2e..f8a415ed 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/Blocks.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/Blocks.h @@ -20,6 +20,7 @@ class Blocks { static void staticInit(); static Block* get(const std::wstring&); + static Block* byString(const std::wstring&); static inline Block* AIR; static inline Block* STONE; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/CactusBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/CactusBlock.h index 8b28cf17..b3a21a1c 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/CactusBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/CactusBlock.h @@ -1,8 +1,9 @@ -#pragma once - -#include "net/minecraft/world/level/block/Block.h" - -class CactusBlock : public Block { -public: - CactusBlock(); -}; +#pragma once + +#include "net/minecraft/world/level/block/Block.h" + +class CactusBlock : public Block { +public: + CactusBlock(); + virtual bool canSurvive(Level*, const BlockPos&); +}; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/ChestBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/ChestBlock.h index 550daf3b..1903c70f 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/ChestBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/ChestBlock.h @@ -5,6 +5,7 @@ class ChestBlock : public Block { public: ChestBlock(bool trapped); + const BlockState* reorient(Level*, const BlockPos&, const BlockState*); static void blockStaticCtor(); }; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/ChorusFlowerBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/ChorusFlowerBlock.h index 26e258ac..ed7b58fd 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/ChorusFlowerBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/ChorusFlowerBlock.h @@ -1,8 +1,9 @@ -#pragma once - -#include "net/minecraft/world/level/block/Block.h" - -class ChorusFlowerBlock : public Block { -public: - ChorusFlowerBlock(); -}; +#pragma once + +#include "net/minecraft/world/level/block/Block.h" + +class ChorusFlowerBlock : public Block { +public: + static void generatePlant(Level*, BlockPos, Random*, int); + ChorusFlowerBlock(); +}; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/CocoaBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/CocoaBlock.h index a432208c..12e5472e 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/CocoaBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/CocoaBlock.h @@ -1,13 +1,14 @@ -#pragma once - -#include "net/minecraft/world/level/block/BonemealableBlock.h" -#include "net/minecraft/world/level/block/HorizontalDirectionalBlock.h" - -class CocoaBlock : public HorizontalDirectionalBlock, public BonemealableBlock { -public: - CocoaBlock(); - - bool isValidBonemealTarget(Level*, const BlockPos&, const BlockState*, bool) override; - bool isBonemealSuccess(Level*, Random*, const BlockPos&, const BlockState*) override; - void performBonemeal(Level*, Random*, const BlockPos&, const BlockState*) override; -}; +#pragma once + +#include "net/minecraft/world/level/block/BonemealableBlock.h" +#include "net/minecraft/world/level/block/HorizontalDirectionalBlock.h" + +class CocoaBlock : public HorizontalDirectionalBlock, public BonemealableBlock { +public: + static Property* AGE; + CocoaBlock(); + + bool isValidBonemealTarget(Level*, const BlockPos&, const BlockState*, bool) override; + bool isBonemealSuccess(Level*, Random*, const BlockPos&, const BlockState*) override; + void performBonemeal(Level*, Random*, const BlockPos&, const BlockState*) override; +}; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/ColoredBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/ColoredBlock.h index 50e5b4a1..6850ba05 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/ColoredBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/ColoredBlock.h @@ -4,6 +4,7 @@ class ColoredBlock : public Block { public: + static Property* COLOR; ColoredBlock(Material*); static void blockStaticCtor(); diff --git a/src/Minecraft.World/net/minecraft/world/level/block/DoublePlantBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/DoublePlantBlock.h index e1632fc5..64c89707 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/DoublePlantBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/DoublePlantBlock.h @@ -1,10 +1,31 @@ #pragma once +#include "net/minecraft/core/StringRepresentable.h" #include "net/minecraft/world/level/block/Block.h" class DoublePlantBlock : public Block { public: + class Variant : public StringRepresentable { + public: + static Variant* FERN; + static Variant* GRASS; + static Variant* SUNFLOWER; + static Variant* SYRINGA; + static Variant* ROSE; + static Variant* PAEONIA; + static inline Variant* VARIANTS[6]; + static Variant* byData(int data) { return VARIANTS[static_cast(data) > 5 ? 0 : data]; } + int getNameId() { return m_nameId; } + int getDescriptionId() { return m_descriptionId; } + + int m_data; + std::wstring m_name; + int m_nameId; + int m_descriptionId; + }; + DoublePlantBlock(); + void placeAt(Level*, const BlockPos&, Variant*, int); static void blockStaticCtor(); }; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/EndGatewayBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/EndGatewayBlock.h index 975f10f5..6017af17 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/EndGatewayBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/EndGatewayBlock.h @@ -1,8 +1,10 @@ -#pragma once - -#include "net/minecraft/world/level/block/Block.h" - -class EndGatewayBlock : public BaseEntityBlock { -public: - EndGatewayBlock(Material*); -}; +#pragma once + +#include "net/minecraft/world/level/block/BaseEntityBlock.h" +#include "net/minecraft/world/level/block/state/IntegerProperty.h" + +class EndGatewayBlock : public BaseEntityBlock { +public: + static IntegerProperty* FJ_PORTAL_NUMBER; + EndGatewayBlock(Material*); +}; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/FlowerBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/FlowerBlock.h index 429402f1..81ce2f48 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/FlowerBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/FlowerBlock.h @@ -6,7 +6,10 @@ class FlowerBlock : public Bush, public BonemealableBlock { public: - class FlowerCategory; + class FlowerCategory { + public: + FlowerBlock* getBlock(); + }; class FlowerCategoryPredicate; class Flower { public: @@ -14,6 +17,14 @@ class FlowerBlock : public Bush, public BonemealableBlock { static Flower* RED_FLOWER; static Flower* RED_MUSHROOM; static Flower* BROWN_MUSHROOM; + static Flower* OXEYE_DAISY; + static Flower* BLUE_ORCHID; + static Flower* HOUSTONIA; + static Flower* RED_TULIP; + static Flower* ORANGE_TULIP; + static Flower* WHITE_TULIP; + static Flower* PINK_TULIP; + static Flower* FLOWERS[10]; enum EFlower {}; @@ -21,9 +32,18 @@ class FlowerBlock : public Bush, public BonemealableBlock { FlowerBlock::Flower::EFlower); void* m_field0; + FlowerCategory* getCategory() const; + int getData(); + int getNameId(); + int getDescriptionId(); + int m_field8; + int m_field12; + int m_data; }; virtual FlowerBlock::FlowerCategory* getFlowerCategory() = 0; - virtual void getFlowerProperty(); + virtual Property* getFlowerProperty(); + + Property* m_flowerProperty; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/HalfSlabBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/HalfSlabBlock.h index 413356f6..94666f1f 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/HalfSlabBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/HalfSlabBlock.h @@ -53,7 +53,7 @@ class HalfSlabBlock : public Block { bool isSolidRender(const BlockState*) const override; int getResourceCount(Random*) override; const BlockState* getStateForPlacement(Level*, const BlockPos&, const Direction*, float, float, float, - int, std::__1::shared_ptr) override; + int, std::shared_ptr) override; bool isSilkTouchable() override; virtual std::wstring getAuxName(int aux) = 0; virtual bool isFullSize() const = 0; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/HorizontalDirectionalBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/HorizontalDirectionalBlock.h index 77a4a29e..843c570c 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/HorizontalDirectionalBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/HorizontalDirectionalBlock.h @@ -9,4 +9,5 @@ class HorizontalDirectionalBlock : public Block { static void blockStaticCtor(); static EnumProperty* AXIS; + static Property* FACING; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/HugeMushroomBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/HugeMushroomBlock.h index 220150ff..bf3abb94 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/HugeMushroomBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/HugeMushroomBlock.h @@ -4,6 +4,20 @@ class HugeMushroomBlock : public Block { public: + class Variant { + public: + static Variant* byData(int); + static Variant* NORTH_WEST; + static Variant* NORTH_EAST; + static Variant* SOUTH_WEST; + static Variant* SOUTH_EAST; + static Variant* CENTER; + static Variant* ALL_INSIDE; + static Variant* STEM; + }; + + static Property* VARIANT; + HugeMushroomBlock(Material*, const MaterialColor*, Block*); static void blockStaticCtor(); diff --git a/src/Minecraft.World/net/minecraft/world/level/block/NewLeafBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/NewLeafBlock.h index 9eacf59c..da97518e 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/NewLeafBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/NewLeafBlock.h @@ -1,9 +1,12 @@ #pragma once #include "net/minecraft/world/level/block/LeafBlock.h" +#include "net/minecraft/world/level/block/PlanksBlock.h" +#include "net/minecraft/world/level/block/state/EnumProperty.h" class NewLeafBlock : public LeafBlock { public: + static EnumProperty* VARIANT; NewLeafBlock(); static void blockStaticCtor(); diff --git a/src/Minecraft.World/net/minecraft/world/level/block/OldLeafBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/OldLeafBlock.h index aabba62d..ccbbcbbd 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/OldLeafBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/OldLeafBlock.h @@ -1,9 +1,11 @@ #pragma once #include "net/minecraft/world/level/block/LeafBlock.h" +#include "net/minecraft/world/level/block/PlanksBlock.h" class OldLeafBlock : public LeafBlock { public: + static EnumProperty* VARIANT; OldLeafBlock(); static void blockStaticCtor(); diff --git a/src/Minecraft.World/net/minecraft/world/level/block/OreBlock.cpp b/src/Minecraft.World/net/minecraft/world/level/block/OreBlock.cpp index ded354b1..92a3c2b6 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/OreBlock.cpp +++ b/src/Minecraft.World/net/minecraft/world/level/block/OreBlock.cpp @@ -59,7 +59,7 @@ void OreBlock::spawnResources(Level* level, const BlockPos& pos, const BlockStat int OreBlock::getResourceCountForLootBonus(int fortuneLevel, Random* random) { if (fortuneLevel > 0 && Item::byBlock(this) - != this->getResource(this->getBlockStateDefinition()->getPossibleBlockStates()->get(0), random, + != this->getResource((*this->getBlockStateDefinition()->getPossibleBlockStates())[0], random, fortuneLevel)) { int i = random->nextInt(fortuneLevel + 2) - 1; if (i < 0) { diff --git a/src/Minecraft.World/net/minecraft/world/level/block/PlanksBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/PlanksBlock.h index 987fa049..9df23468 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/PlanksBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/PlanksBlock.h @@ -33,6 +33,7 @@ class PlanksBlock : public Block { } int getData() { return this->m_data; } + int getNameId() { return this->m_nameId; } const MaterialColor* getMaterialColor() { return this->m_materialColor; } std::wstring toString() const override { return this->m_name; } diff --git a/src/Minecraft.World/net/minecraft/world/level/block/RedSandStoneBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/RedSandStoneBlock.h index f663f30a..83472045 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/RedSandStoneBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/RedSandStoneBlock.h @@ -28,6 +28,7 @@ class RedSandStoneBlock : public Block { } int getData() { return this->m_data; } + int getNameId() { return this->m_nameId; } std::wstring toString() const override { return this->m_name; } std::wstring getSerializedName() const override { return this->m_name; } diff --git a/src/Minecraft.World/net/minecraft/world/level/block/SandBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/SandBlock.h index 0ff2ded5..11f8194d 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/SandBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/SandBlock.h @@ -32,6 +32,8 @@ class SandBlock : public FallingBlock { } int getData() { return this->m_data; } + int getNameId() { return this->m_nameId; } + int getDescriptionId() { return this->m_descId; } std::wstring getName() { return this->m_name; } const MaterialColor* getMaterialColor() { return this->m_materialColor; } int getDustColor() { return this->m_dustColor; } diff --git a/src/Minecraft.World/net/minecraft/world/level/block/SandStoneBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/SandStoneBlock.h index 1152ab95..bab82443 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/SandStoneBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/SandStoneBlock.h @@ -27,6 +27,7 @@ class SandStoneBlock : public Block { } int getData() { return this->m_data; } + int getNameId() { return this->m_nameId; } std::wstring toString() const override { return this->m_name; } std::wstring getSerializedName() const override { return this->m_name; } diff --git a/src/Minecraft.World/net/minecraft/world/level/block/SoundType.cpp b/src/Minecraft.World/net/minecraft/world/level/block/SoundType.cpp new file mode 100644 index 00000000..6ad38d98 --- /dev/null +++ b/src/Minecraft.World/net/minecraft/world/level/block/SoundType.cpp @@ -0,0 +1,69 @@ +#include "net/minecraft/world/level/block/SoundType.h" + +#include "net/minecraft/sounds/SoundEvent.h" +#include "net/minecraft/sounds/SoundEvents.h" + +const SoundType* SoundType::WOOD; +const SoundType* SoundType::DIRT; // name guessed +const SoundType* SoundType::GRASS; +const SoundType* SoundType::STONE; +const SoundType* SoundType::METAL; // name guessed +const SoundType* SoundType::GLASS; +const SoundType* SoundType::WOOL; +const SoundType* SoundType::SAND; // name guessed +const SoundType* SoundType::SNOW; +const SoundType* SoundType::LADDER; +const SoundType* SoundType::ANVIL; // name guessed +const SoundType* SoundType::SLIME_BLOCK; + +SoundType::SoundType(float volume, float pitch, const SoundEvent* dig, const SoundEvent* step, + const SoundEvent* place, const SoundEvent* hit, const SoundEvent* fall) + : m_volume(volume), m_pitch(pitch), m_digSound(dig), m_stepSound(step), m_placeSound(place), + m_hitSound(hit), m_fallSound(fall) {} + +// name guessed +const SoundEvent* SoundType::getBreakSound() { + return m_digSound; +} +// name guessed +const SoundEvent* SoundType::getStepSound() { + return m_stepSound; +} +// name guessed +const SoundEvent* SoundType::getHitSound() { + return m_hitSound; +} +// name guessed +const SoundEvent* SoundType::getFallSound() { + return m_fallSound; +} + +// name guessed +void SoundType::staticCtor() { + WOOD = new SoundType(1.0f, 1.0f, SoundEvents::DIG_WOOD_4, SoundEvents::STEP_WOOD_3, + SoundEvents::DIG_WOOD_5, SoundEvents::STEP_WOOD_2, SoundEvents::STEP_WOOD); + DIRT = new SoundType(1.0f, 1.0f, SoundEvents::DIG_GRAVEL, SoundEvents::STEP_GRAVEL_3, + SoundEvents::DIG_GRAVEL_2, SoundEvents::STEP_GRAVEL_2, SoundEvents::STEP_GRAVEL); + GRASS = new SoundType(1.0f, 1.0f, SoundEvents::DIG_GRASS, SoundEvents::STEP_GRASS_3, + SoundEvents::DIG_GRASS_2, SoundEvents::STEP_GRASS_2, SoundEvents::STEP_GRASS); + STONE = new SoundType(1.0f, 1.0f, SoundEvents::DIG_STONE_6, SoundEvents::STEP_STONE_11, + SoundEvents::DIG_STONE_7, SoundEvents::STEP_STONE_10, SoundEvents::STEP_STONE_9); + METAL = new SoundType(1.0f, 1.5f, SoundEvents::DIG_STONE_4, SoundEvents::STEP_STONE_8, + SoundEvents::DIG_STONE_5, SoundEvents::STEP_STONE_7, SoundEvents::STEP_STONE_6); + GLASS = new SoundType(1.0f, 1.0f, SoundEvents::RANDOM_GLASS, SoundEvents::STEP_STONE_5, + SoundEvents::DIG_STONE_3, SoundEvents::STEP_STONE_4, SoundEvents::STEP_STONE_3); + WOOL = new SoundType(1.0f, 1.0f, SoundEvents::DIG_CLOTH, SoundEvents::STEP_CLOTH_3, + SoundEvents::DIG_CLOTH_2, SoundEvents::STEP_CLOTH_2, SoundEvents::STEP_CLOTH); + SAND = new SoundType(1.0f, 1.0f, SoundEvents::DIG_SAND, SoundEvents::STEP_SAND_3, SoundEvents::DIG_SAND_2, + SoundEvents::STEP_SAND_2, SoundEvents::STEP_SAND); + SNOW = new SoundType(1.0f, 1.0f, SoundEvents::DIG_SNOW, SoundEvents::STEP_SNOW_3, SoundEvents::DIG_SNOW_2, + SoundEvents::STEP_SNOW_2, SoundEvents::STEP_SNOW); + LADDER = new SoundType(1.0f, 1.0f, SoundEvents::DIG_WOOD_2, SoundEvents::STEP_LADDER_3, + SoundEvents::DIG_WOOD_3, SoundEvents::STEP_LADDER_2, SoundEvents::STEP_LADDER); + ANVIL = new SoundType(0.30000001f, 1.0f, SoundEvents::DIG_STONE, SoundEvents::STEP_STONE_2, + SoundEvents::RANDOM_ANVIL_LAND_3, SoundEvents::STEP_STONE, + SoundEvents::RANDOM_ANVIL_LAND); + SLIME_BLOCK = new SoundType(1.0f, 1.0f, SoundEvents::MOB_SLIME_BIG_3, SoundEvents::MOB_SLIME_SMALL_3, + SoundEvents::MOB_SLIME_BIG_4, SoundEvents::MOB_SLIME_SMALL_2, + SoundEvents::MOB_SLIME_SMALL); +} diff --git a/src/Minecraft.World/net/minecraft/world/level/block/SoundType.h b/src/Minecraft.World/net/minecraft/world/level/block/SoundType.h index 65ce03c0..cb41a51d 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/SoundType.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/SoundType.h @@ -22,11 +22,16 @@ class SoundType { SoundType(float volume, float pitch, const SoundEvent* dig, const SoundEvent* step, const SoundEvent* place, const SoundEvent* hit, const SoundEvent* fall); + const SoundEvent* getBreakSound(); + const SoundEvent* getStepSound(); + const SoundEvent* getHitSound(); + const SoundEvent* getFallSound(); + float m_volume; float m_pitch; - SoundEvent* m_digSound; - SoundEvent* m_stepSound; - SoundEvent* m_placeSound; - SoundEvent* m_hitSound; - SoundEvent* m_fallSound; + const SoundEvent* m_digSound; + const SoundEvent* m_stepSound; + const SoundEvent* m_placeSound; + const SoundEvent* m_hitSound; + const SoundEvent* m_fallSound; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/SpongeBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/SpongeBlock.h index 3b8e272a..4330169f 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/SpongeBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/SpongeBlock.h @@ -1,8 +1,11 @@ -#pragma once - -#include "net/minecraft/world/level/block/Block.h" - -class SpongeBlock : public Block { -public: - SpongeBlock(); -}; +#pragma once + +#include "net/minecraft/world/level/block/Block.h" + +class BooleanProperty; + +class SpongeBlock : public Block { +public: + SpongeBlock(); + static BooleanProperty* WET; +}; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/StoneSlabBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/StoneSlabBlock.h index 079b9960..f9950ed8 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/StoneSlabBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/StoneSlabBlock.h @@ -1,8 +1,18 @@ #pragma once +#include "net/minecraft/core/StringRepresentable.h" #include "net/minecraft/world/level/block/Block.h" +#include "net/minecraft/world/level/block/state/EnumProperty.h" class StoneSlabBlock : public Block { public: + /** Variant interface only; catalogue layout and construction remain unreconstructed. + */ + class Variant : public StringRepresentable { + public: + static Variant* SANDSTONE; + }; + + static EnumProperty* VARIANT; static void blockStaticCtor(); }; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/TallGrassBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/TallGrassBlock.h index 207120ed..f627212d 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/TallGrassBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/TallGrassBlock.h @@ -1,10 +1,18 @@ #pragma once -#include "net/minecraft/world/level/block/Block.h" +#include "net/minecraft/world/level/block/Bush.h" -class TallGrassBlock : public Block { +class TallGrassBlock : public Bush { public: + class Variant { + public: + static Variant* GRASS; + static Variant* FERN; + }; + TallGrassBlock(); static void blockStaticCtor(); + + static Property* TYPE; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/TorchBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/TorchBlock.h index e69cbbcf..1c99fc7f 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/TorchBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/TorchBlock.h @@ -4,6 +4,7 @@ class TorchBlock : public Block { public: + static Property* FACING; TorchBlock(); static void blockStaticCtor(); diff --git a/src/Minecraft.World/net/minecraft/world/level/block/VineBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/VineBlock.h index 4274adad..18681488 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/VineBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/VineBlock.h @@ -1,8 +1,14 @@ -#pragma once - -#include "net/minecraft/world/level/block/Block.h" - -class VineBlock : public Block { -public: - VineBlock(); -}; +#pragma once + +#include "net/minecraft/world/level/block/Block.h" + +class BooleanProperty; + +class VineBlock : public Block { +public: + static BooleanProperty* EAST; + static BooleanProperty* WEST; + static BooleanProperty* SOUTH; + static BooleanProperty* NORTH; + VineBlock(); +}; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/WallBlock.h b/src/Minecraft.World/net/minecraft/world/level/block/WallBlock.h index bcf900df..93706caa 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/WallBlock.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/WallBlock.h @@ -1,9 +1,21 @@ #pragma once +#include "net/minecraft/core/StringRepresentable.h" #include "net/minecraft/world/level/block/Block.h" class WallBlock : public Block { public: + class Variant : public StringRepresentable { + public: + static inline Variant* VARIANTS[2]; + static Variant* byData(int data) { return VARIANTS[static_cast(data) > 1 ? 0 : data]; } + int getNameId() { return m_nameId; } + + int m_data; + std::wstring m_name; + int m_nameId; + }; + WallBlock(Block*); static void blockStaticCtor(); diff --git a/src/Minecraft.World/net/minecraft/world/level/block/state/BlockStateDefinition.h b/src/Minecraft.World/net/minecraft/world/level/block/state/BlockStateDefinition.h index 7faacad3..cdbde1ca 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/state/BlockStateDefinition.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/state/BlockStateDefinition.h @@ -3,6 +3,7 @@ #include "net/minecraft/world/ArrayWithLength.h" #include "net/minecraft/world/level/block/state/BlockState.h" #include "net/minecraft/world/level/block/state/properties/AbstractProperty.h" +#include #include class Block; @@ -72,14 +73,20 @@ class BlockStateDefinition { void _init(Block* block, const Property** properties, unsigned int propertiesCount); - Block* getBlock(); + Block* getBlock() const; + const std::vector& getProperties() const; + bool hasProperty(const Property*) const; + Boxed* getPropertyValue(const Property*, unsigned short state) const; + /** Property must belong to this definition's encoded state table. + */ + const BlockState* getNeighbour(const Property*, Boxed*, unsigned short state) const; const BlockState* any(); - arrayWithLength* getPossibleBlockStates() { return &this->m_states; } + const arrayWithLength* getPossibleBlockStates() const; private: Block* m_block; std::vector m_properties; arrayWithLength m_states; - void** m_propertiesArr; // this is array - void** m_anotherProperties; // this is also array + std::uint8_t* m_propertyBitOffsets; + std::uint16_t* m_propertyBitMasks; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/block/state/properties/AbstractProperty.h b/src/Minecraft.World/net/minecraft/world/level/block/state/properties/AbstractProperty.h index 29adffb1..2eef33a3 100644 --- a/src/Minecraft.World/net/minecraft/world/level/block/state/properties/AbstractProperty.h +++ b/src/Minecraft.World/net/minecraft/world/level/block/state/properties/AbstractProperty.h @@ -20,6 +20,7 @@ class Predicate { template class Predicates { public: + static Predicate* equalTo(T value) { return new EqualToValuePredicate(value); } // TODO: impl those, and check if those below are correctly declared class ConnectivePredicate : public Predicate { bool apply(T) const override; @@ -46,7 +47,13 @@ class Predicates { bool m_constValue; // I guess it's bool, could be union; if you find possiblity of it, do it }; class EqualToValuePredicate : public Predicate { - bool apply(T) const override; + public: + EqualToValuePredicate(T value) : m_value(value) {} + + bool apply(T value) const override { return m_value == value; } + + private: + T m_value; }; }; @@ -110,7 +117,10 @@ class AbstractProperty : public Property { return this->m_name == otherCasted->m_name; } // TODO: this is wrong as hell btw !!!!! - int hashCode() const override { return 31 * (size_t)this->m_typeInfo + javaStringHashCode(this->m_name); } + int hashCode() const override { + return 31 * static_cast(reinterpret_cast(this->m_typeInfo)) + + static_cast(javaStringHashCode(this->m_name)); + } virtual T getUnboxedValue(const std::wstring&) const = 0; virtual std::wstring getName(const T&) const = 0; diff --git a/src/Minecraft.World/net/minecraft/world/level/chunk/ChunkGenerator.h b/src/Minecraft.World/net/minecraft/world/level/chunk/ChunkGenerator.h index f259aed9..3d27b537 100644 --- a/src/Minecraft.World/net/minecraft/world/level/chunk/ChunkGenerator.h +++ b/src/Minecraft.World/net/minecraft/world/level/chunk/ChunkGenerator.h @@ -17,13 +17,14 @@ class ChunkGenerator { static const std::wstring VILLAGE_NAME; static const std::wstring MINESHAFT_NAME; static const std::wstring TEMPLE_NAME; + static const std::wstring END_CITY_NAME; ChunkGenerator() {} virtual ~ChunkGenerator(); virtual LevelChunk* createChunk(int, int) = 0; virtual void postProcess(int, int) = 0; virtual bool postProcessLoadedChunk(LevelChunk*, int, int) = 0; - virtual std::vector* getMobsAt(MobCategory*, const BlockPos&) = 0; + virtual std::vector* getMobsAt(MobCategory*, const BlockPos&) = 0; virtual BlockPos* findNearestMapFeature(Level*, const std::wstring&, const BlockPos&, bool) = 0; virtual void recreateLogicStructuresForChunk(LevelChunk*, int, int) = 0; virtual bool isPosInFeature(Level*, const std::wstring&, const BlockPos&) = 0; diff --git a/src/Minecraft.World/net/minecraft/world/level/chunk/ChunkSource.h b/src/Minecraft.World/net/minecraft/world/level/chunk/ChunkSource.h index f6f520af..9c71b77a 100644 --- a/src/Minecraft.World/net/minecraft/world/level/chunk/ChunkSource.h +++ b/src/Minecraft.World/net/minecraft/world/level/chunk/ChunkSource.h @@ -32,7 +32,7 @@ class ChunkSource { virtual bool shouldSave() = 0; virtual ChunkSource* getCache(); virtual void dataReceived(int, int); - virtual std::vector* getMobsAt(MobCategory*, const BlockPos&) = 0; + virtual std::vector* getMobsAt(MobCategory*, const BlockPos&) = 0; virtual void findNearestMapFeature(Level*, const std::wstring&, const BlockPos&, bool) = 0; virtual int getLoadedChunks() = 0; virtual void recreateLogicStructuresForChunk(LevelChunk*, int, int) = 0; diff --git a/src/Minecraft.World/net/minecraft/world/level/chunk/LevelChunk.h b/src/Minecraft.World/net/minecraft/world/level/chunk/LevelChunk.h index af6b2f10..cfcdab2b 100644 --- a/src/Minecraft.World/net/minecraft/world/level/chunk/LevelChunk.h +++ b/src/Minecraft.World/net/minecraft/world/level/chunk/LevelChunk.h @@ -33,6 +33,7 @@ class LevelChunk { static bool touchedSky; // Name from b1.2_02 LevelChunk(Level*, ChunkPrimer*, int, int); + void setCheckAllLight(); enum EntityCreationType {}; diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/GenericOverworldLevelSource.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/GenericOverworldLevelSource.h index a6380507..dc371f2f 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/GenericOverworldLevelSource.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/GenericOverworldLevelSource.h @@ -7,5 +7,5 @@ class GenericOverworldLevelSource { GenericOverworldLevelSource() {} virtual void prepareHeights(int, int, ChunkPrimer*); - // missing a second unknown virtual function + virtual bool isFlat(); }; diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/LevelGenerationOptions.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/LevelGenerationOptions.h index da54064e..850011b3 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/LevelGenerationOptions.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/LevelGenerationOptions.h @@ -1,9 +1,16 @@ #pragma once #include "net/minecraft/world/level/LevelRuleset.h" +#include "net/minecraft/world/level/biome/Biome.h" + +class BlockPos; class LevelGenerationOptions { public: LevelRuleset* getRequiredGameRules(); void loadBaseSaveData(); + bool intersects(const BlockPos& lower, const BlockPos& upper); + /** LegacyBlockData is the reconstruction's existing name for original BlockPair. + */ + void getBiomeOverride(int biomeId, Biome::LegacyBlockData* filler, Biome::LegacyBlockData* surface); }; diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/NetherFlatLevelSource.cpp b/src/Minecraft.World/net/minecraft/world/level/levelgen/NetherFlatLevelSource.cpp index a9162366..184297bd 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/NetherFlatLevelSource.cpp +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/NetherFlatLevelSource.cpp @@ -41,7 +41,7 @@ void NetherFlatLevelSource::prepareHeights(int x, int z, ChunkPrimer* primer) { } } -// NON_MATCHING +// NON_MATCHING | score: 8474 (lower is better) void NetherFlatLevelSource::buildSurfaces(int x, int z, ChunkPrimer* primer) { const BlockState* bedrock = Blocks::BEDROCK->defaultBlockState(); @@ -115,7 +115,7 @@ LevelChunk* NetherFlatLevelSource::createChunk(int x, int z) { return chunk; } -// NON_MATCHING +// NON_MATCHING | score: 3523 (lower is better) void NetherFlatLevelSource::postProcess(int x, int z) { inPostProcessStep = true; @@ -172,8 +172,8 @@ bool NetherFlatLevelSource::postProcessLoadedChunk(LevelChunk* chunk, int x, int return false; } -std::vector* NetherFlatLevelSource::getMobsAt(MobCategory* category, - const BlockPos& pos) { +std::vector* NetherFlatLevelSource::getMobsAt(MobCategory* category, + const BlockPos& pos) { Biome* biome = m_level->getBiome(pos); if (biome) return biome->getMobs(category); diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/NetherFlatLevelSource.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/NetherFlatLevelSource.h index a3ee492a..4d89392b 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/NetherFlatLevelSource.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/NetherFlatLevelSource.h @@ -12,7 +12,7 @@ class NetherFlatLevelSource : public ChunkGenerator { LevelChunk* createChunk(int, int) override; void postProcess(int, int) override; bool postProcessLoadedChunk(LevelChunk*, int, int) override; - std::vector* getMobsAt(MobCategory*, const BlockPos&) override; + std::vector* getMobsAt(MobCategory*, const BlockPos&) override; BlockPos* findNearestMapFeature(Level*, const std::wstring&, const BlockPos&, bool) override; void recreateLogicStructuresForChunk(LevelChunk*, int, int) override; bool isPosInFeature(Level*, const std::wstring&, const BlockPos&) override; diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/OverworldLevelSource.cpp b/src/Minecraft.World/net/minecraft/world/level/levelgen/OverworldLevelSource.cpp index f2e63c38..fa86292c 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/OverworldLevelSource.cpp +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/OverworldLevelSource.cpp @@ -1,5 +1,7 @@ #include "net/minecraft/world/level/levelgen/OverworldLevelSource.h" +#include + #include "NX/Platform.h" #include "net/minecraft/util/Mth.h" #include "net/minecraft/world/entity/MobCategory.h" @@ -128,7 +130,7 @@ float OverworldLevelSource::getHeightFalloff(int chunkX, int chunkZ, int* distan return result; } -// NON_MATCHING | Score: 1630 (lower is better) +// NON_MATCHING | score: 0 (lower is better) int OverworldLevelSource::distanceToEdge(float a, int, int x, int z, int size) { int halfSize = size / 2; @@ -150,18 +152,19 @@ int OverworldLevelSource::distanceToEdge(float a, int, int x, int z, int size) { if (inLeftBand || inRightBand) { Vec3* p = Vec3::newTemp(x, 0.0f, z); - Vec3* edgeStart = (x < 1) ? topLeft : topRight; - Vec3* edgeEnd = (x < 1) ? bottomLeft : bottomRight; - - distance = p->distanceToSegment(edgeStart, edgeEnd); + if (x >= 1) + distance = p->distanceToSegment(topRight, bottomRight); + else + distance = p->distanceToSegment(topLeft, bottomLeft); } if (((z > leftBound) && (z < rightBound)) || ((z > (maxCoord - a)) && (z < (maxCoord + a)))) { Vec3* p = Vec3::newTemp(x, 0.0f, z); - Vec3* edgeStart = (z < 1) ? topLeft : topRight; - Vec3* edgeEnd = (z < 1) ? bottomLeft : bottomRight; - - float verticalDistance = p->distanceToSegment(edgeStart, edgeEnd); + float verticalDistance; + if (z >= 1) + verticalDistance = p->distanceToSegment(bottomLeft, bottomRight); + else + verticalDistance = p->distanceToSegment(topLeft, topRight); if (verticalDistance < distance) { distance = verticalDistance; @@ -184,7 +187,7 @@ void OverworldLevelSource::buildSurfaces(int chunkX, int chunkZ, ChunkPrimer* pr for (int x = 0; x < 16; x++) { for (int z = 0; z < 16; z++) { - Biome* biome = biomes[z + x * 16]; + Biome* biome = biomes.get(z + x * 16); { std::wstring biomeName = biome->getName(false); PIXBeginNamedEvent(0.0, "Building surface for biome %ls", biomeName.c_str()); @@ -322,11 +325,11 @@ void OverworldLevelSource::getHeights(int posX, int posY, int posZ, arrayWithLen float weightedScale = 0.0f; float weightedDepth = 0.0f; float totalWeight = 0.0f; - Biome* b = biomes[x + 2 + (z + 2) * 10]; + Biome* b = biomes.get(x + 2 + (z + 2) * 10); for (int xo = -2; xo <= 2; ++xo) { for (int zo = -2; zo <= 2; ++zo) { - Biome* b2 = biomes[x + xo + 2 + (z + zo + 2) * 10]; + Biome* b2 = biomes.get(x + xo + 2 + (z + zo + 2) * 10); float depth = m_sourceSettings->m_biomeDepthOffset + (b2->getDepth() * m_sourceSettings->m_biomeDepthWeight); @@ -540,7 +543,7 @@ bool OverworldLevelSource::postProcessLoadedChunk(LevelChunk*, int, int) { return false; } -// NON_MATCHING | Score: 5336 (lower is better) +// NON_MATCHING | score: 346 (lower is better) void OverworldLevelSource::prepareHeights(int chunkX, int chunkZ, ChunkPrimer* primer) { // These variables are made into constants by the compiler int width = 4; // every 4th block is sampled in the chunk @@ -563,19 +566,25 @@ void OverworldLevelSource::prepareHeights(int chunkX, int chunkZ, ChunkPrimer* p PIXBeginNamedEvent(0.0, "Generating"); for (int subX = 0; subX < width; subX++) { + int leftColumn = subX * xSize; + int rightColumn = (subX + 1) * xSize; for (int subZ = 0; subZ < width; subZ++) { + int n00 = (subZ + leftColumn) * ySize; + int n10 = n00 + ySize; + int n01 = (subZ + rightColumn) * ySize; + int n11 = n01 + ySize; for (int subY = 0; subY < 16; subY++) { // + 0 is for padding so these look nicer - double h00 = heights[((subX + 0) * xSize + (subZ + 0)) * ySize + subY]; - double h10 = heights[((subX + 0) * xSize + (subZ + 1)) * ySize + subY]; - double h01 = heights[((subX + 1) * xSize + (subZ + 0)) * ySize + subY]; - double h11 = heights[((subX + 1) * xSize + (subZ + 1)) * ySize + subY]; + double h00 = heights[n00 + subY]; + double h10 = heights[n10 + subY]; + double h01 = heights[n01 + subY]; + double h11 = heights[n11 + subY]; // interpolation steps - double iy00 = (heights[((subX + 0) * xSize + (subZ + 0)) * ySize + subY + 1] - h00) * 0.125; - double iy10 = (heights[((subX + 0) * xSize + (subZ + 1)) * ySize + subY + 1] - h10) * 0.125; - double iy01 = (heights[((subX + 1) * xSize + (subZ + 0)) * ySize + subY + 1] - h01) * 0.125; - double iy11 = (heights[((subX + 1) * xSize + (subZ + 1)) * ySize + subY + 1] - h11) * 0.125; + double iy00 = (heights[n00 + subY + 1] - h00) * 0.125; + double iy10 = (heights[n10 + subY + 1] - h10) * 0.125; + double iy01 = (heights[n01 + subY + 1] - h01) * 0.125; + double iy11 = (heights[n11 + subY + 1] - h11) * 0.125; for (int ym = 0; ym < 8; ym++) { double heightAtXZ0 = h00; @@ -591,19 +600,20 @@ void OverworldLevelSource::prepareHeights(int chunkX, int chunkZ, ChunkPrimer* p int defaultId = (subY * height + ym < seaLevel) ? 9 : 0; - double _h = h00; + double _h = heightAtXZ0; double _hStep = (heightAtXZ1 - heightAtXZ0) * 0.25; _h -= _hStep; for (int zm = 0; zm < 4; zm++) { - int x = subX * width + xm; + int x = chunkX * 16 + subX * width + xm; int y = subY * height + ym; - int z = subZ * width + zm; + int z = chunkZ * 16 + subZ * width + zm; int blockId; int distance; // Falloff at the edge of the world, does not exist in Java Edition - if (getHeightFalloff(x, z, &distance) > (_h += _hStep)) { + float falloff = getHeightFalloff(x, z, &distance); + if ((_h += _hStep) > falloff) { blockId = 1; } else { blockId = defaultId; @@ -642,8 +652,8 @@ void OverworldLevelSource::prepareHeights(int chunkX, int chunkZ, ChunkPrimer* p delete[] biomes.m_data; } -std::vector* OverworldLevelSource::getMobsAt(MobCategory* category, - const BlockPos& pos) { +std::vector* OverworldLevelSource::getMobsAt(MobCategory* category, + const BlockPos& pos) { Biome* biome = m_level->getBiome(pos); if (m_shouldGenerateStructures) { @@ -687,30 +697,30 @@ void OverworldLevelSource::recreateLogicStructuresForChunk(LevelChunk* chunk, in } } -// NON_MATCHING | Score: 860- (lower is better) +// NON_MATCHING | score: 0 (lower is better) bool OverworldLevelSource::isPosInFeature(Level* level, const std::wstring& featureName, const BlockPos& pos) { if (!m_shouldGenerateStructures) { return false; } - if (ChunkGenerator::STRONGHOLD_NAME.compare(featureName) == 0) { - return m_strongholdFeature && m_strongholdFeature->isInsideFeature(pos); + if (ChunkGenerator::STRONGHOLD_NAME.compare(featureName) == 0 && m_strongholdFeature) { + return m_strongholdFeature->isInsideFeature(pos); } - if (ChunkGenerator::MANSION_NAME.compare(featureName) == 0) { - return m_woodlandMansionFeature && m_woodlandMansionFeature->isInsideFeature(pos); + if (ChunkGenerator::MANSION_NAME.compare(featureName) == 0 && m_woodlandMansionFeature) { + return m_woodlandMansionFeature->isInsideFeature(pos); } - if (ChunkGenerator::MONUMENT_NAME.compare(featureName) == 0) { - return m_oceanMonumentFeature && m_oceanMonumentFeature->isInsideFeature(pos); + if (ChunkGenerator::MONUMENT_NAME.compare(featureName) == 0 && m_oceanMonumentFeature) { + return m_oceanMonumentFeature->isInsideFeature(pos); } - if (ChunkGenerator::VILLAGE_NAME.compare(featureName) == 0) { - return m_villageFeature && m_villageFeature->isInsideFeature(pos); + if (ChunkGenerator::VILLAGE_NAME.compare(featureName) == 0 && m_villageFeature) { + return m_villageFeature->isInsideFeature(pos); } - if (ChunkGenerator::MINESHAFT_NAME.compare(featureName) == 0) { - return m_mineshaftFeature && m_mineshaftFeature->isInsideFeature(pos); + if (ChunkGenerator::MINESHAFT_NAME.compare(featureName) == 0 && m_mineshaftFeature) { + return m_mineshaftFeature->isInsideFeature(pos); } - if (ChunkGenerator::TEMPLE_NAME.compare(featureName) == 0) { - return m_randomScatteredLargeFeature && m_randomScatteredLargeFeature->isInsideFeature(pos); + if (ChunkGenerator::TEMPLE_NAME.compare(featureName) == 0 && m_randomScatteredLargeFeature) { + return m_randomScatteredLargeFeature->isInsideFeature(pos); } return false; diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/OverworldLevelSource.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/OverworldLevelSource.h index 200aa253..0f46b7f5 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/OverworldLevelSource.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/OverworldLevelSource.h @@ -38,7 +38,7 @@ class OverworldLevelSource : public ChunkGenerator, public GenericOverworldLevel LevelChunk* createChunk(int, int) override; void postProcess(int, int) override; bool postProcessLoadedChunk(LevelChunk*, int, int) override; - std::vector* getMobsAt(MobCategory*, const BlockPos&) override; + std::vector* getMobsAt(MobCategory*, const BlockPos&) override; BlockPos* findNearestMapFeature(Level*, const std::wstring&, const BlockPos&, bool) override; void recreateLogicStructuresForChunk(LevelChunk*, int, int) override; bool isPosInFeature(Level*, const std::wstring&, const BlockPos&) override; diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/Feature.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/Feature.h index 8cdbf359..832283bb 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/Feature.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/Feature.h @@ -7,7 +7,7 @@ class BlockState; class Feature { public: - Feature(bool isUpdate); + Feature(bool isUpdate = false); virtual ~Feature(); virtual bool place(Level* level, Random& random, const BlockPos& pos) = 0; virtual void init(); diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/FlowerFeature.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/FlowerFeature.h index dc75dada..13a8daa3 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/FlowerFeature.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/FlowerFeature.h @@ -7,9 +7,9 @@ class FlowerFeature : public Feature { public: FlowerFeature(FlowerBlock*, FlowerBlock::Flower*); - ~FlowerFeature() override; bool place(Level* level, Random& random, const BlockPos& pos) override; + void setFlower(FlowerBlock*, FlowerBlock::Flower*); - void* m_field10; - void* m_field18; + FlowerBlock* m_flower; + const BlockState* m_state; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/LargeFeature.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/LargeFeature.h index 1cef066b..2c0c185b 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/LargeFeature.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/LargeFeature.h @@ -7,11 +7,12 @@ class Level; class LargeFeature { public: + LargeFeature(); virtual ~LargeFeature(); virtual void apply(Level*, int, int, ChunkPrimer*); virtual void addFeature(Level*, int, int, int, int, ChunkPrimer*); int m_radius; Random m_random; - void* m_unused; + Level* m_level; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/MineShaftFeature.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/MineShaftFeature.h index 9bffdc34..b02cd3c0 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/MineShaftFeature.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/MineShaftFeature.h @@ -4,6 +4,11 @@ class MineShaftFeature : public StructureFeature { public: + std::wstring getFeatureName() override; + BlockPos* getNearestGeneratedFeature(Level*, const BlockPos&, bool) override; + bool isFeatureChunk(int, int, bool) override; + StructureStart* createStructureStart(int, int) override; + MineShaftFeature(); char m_filler[0x8]; diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/MonsterRoomFeature.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/MonsterRoomFeature.h index 371cd466..0b8e69e3 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/MonsterRoomFeature.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/MonsterRoomFeature.h @@ -1,10 +1,14 @@ #pragma once #include "net/minecraft/world/level/levelgen/feature/Feature.h" +#include class MonsterRoomFeature : public Feature { public: MonsterRoomFeature(); bool place(Level* level, Random& random, const BlockPos& pos) override; + +private: + std::wstring randomEntityId(Random&); }; diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/OceanMonumentFeature.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/OceanMonumentFeature.h index bfa3f3f9..f7161500 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/OceanMonumentFeature.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/OceanMonumentFeature.h @@ -7,11 +7,16 @@ class OceanMonumentFeature : public StructureFeature { public: - static std::vector MOB_SPAWNERS; + std::wstring getFeatureName() override; + BlockPos* getNearestGeneratedFeature(Level*, const BlockPos&, bool) override; + bool isFeatureChunk(int, int, bool) override; + StructureStart* createStructureStart(int, int) override; + + static std::vector MOB_SPAWNERS; OceanMonumentFeature(); - std::vector* getEnemies(); + std::vector* getEnemies(); static void staticCtor(); diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/RandomScatteredLargeFeature.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/RandomScatteredLargeFeature.h index 72851eb6..12eb4dcb 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/RandomScatteredLargeFeature.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/RandomScatteredLargeFeature.h @@ -7,10 +7,15 @@ class BlockPos; class RandomScatteredLargeFeature : public StructureFeature { public: + std::wstring getFeatureName() override; + BlockPos* getNearestGeneratedFeature(Level*, const BlockPos&, bool) override; + bool isFeatureChunk(int, int, bool) override; + StructureStart* createStructureStart(int, int) override; + RandomScatteredLargeFeature(); bool isSwamphut(const BlockPos&); - std::vector* getSwamphutEnemies(); + std::vector* getSwamphutEnemies(); static void staticCtor(); diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/StrongholdFeature.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/StrongholdFeature.h index ac3cb0ea..c3dd9b6f 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/StrongholdFeature.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/StrongholdFeature.h @@ -4,6 +4,12 @@ class StrongholdFeature : public StructureFeature { public: + std::wstring getFeatureName() override; + BlockPos* getNearestGeneratedFeature(Level*, const BlockPos&, bool) override; + bool isFeatureChunk(int, int, bool) override; + StructureStart* createStructureStart(int, int) override; + std::vector* getGuesstimatedFeaturePositions() override; + StrongholdFeature(); char m_filler[0x48]; diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/StructureFeature.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/StructureFeature.h index 9ae37554..d2edc95d 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/StructureFeature.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/StructureFeature.h @@ -2,27 +2,40 @@ #include "net/minecraft/world/level/levelgen/feature/LargeFeature.h" #include "types.h" +#include +#include +#include +#include class BlockPos; class ChunkPos; +class StructureFeatureSavedData; class StructureStart; class StructureFeature : public LargeFeature { public: - virtual std::wstring getFeatureName(); + StructureFeature(); + ~StructureFeature() override; + void addFeature(Level*, int, int, int, int, ChunkPrimer*) override; + virtual std::wstring getFeatureName() = 0; virtual bool postProcess(Level*, Random&, ChunkPos*); virtual bool isIntersection(int, int); virtual bool isInsideFeature(const BlockPos&); - virtual BlockPos* getNearestGeneratedFeature(Level*, const BlockPos&, bool); - virtual void getGuesstimatedFeaturePositions(); + virtual BlockPos* getNearestGeneratedFeature(Level*, const BlockPos&, bool) = 0; + virtual std::vector* getGuesstimatedFeaturePositions(); virtual void restoreSavedData(Level*); virtual void saveFeature(int, int, StructureStart*); - virtual bool isFeatureChunk(int, int, bool); - virtual void createStructureStart(int, int); - - char m_filler[0x38]; + virtual bool isFeatureChunk(int, int, bool) = 0; + virtual StructureStart* createStructureStart(int, int) = 0; + StructureStart* getStructureAt(const BlockPos&); bool isInsideBoundingFeature(Level*, const BlockPos&); + static BlockPos* findNearestFeaturePositionBySpacing(Level*, StructureFeature*, const BlockPos&, + int spacing, int separation, int salt, bool linear, + int maxRadius, bool skipKnown); + + std::shared_ptr m_savedData; + std::unordered_map m_starts; }; ASSERT_SIZEOF(StructureFeature, 0x68) diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/VillageFeature.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/VillageFeature.h index df581bf5..569e8fa6 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/VillageFeature.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/VillageFeature.h @@ -1,12 +1,21 @@ #pragma once #include "net/minecraft/world/level/levelgen/feature/StructureFeature.h" +#include + +class Biome; class VillageFeature : public StructureFeature { public: + std::wstring getFeatureName() override; + BlockPos* getNearestGeneratedFeature(Level*, const BlockPos&, bool) override; + bool isFeatureChunk(int, int, bool) override; + StructureStart* createStructureStart(int, int) override; + VillageFeature(int); static void staticCtor(); + static std::vector ALLOWED_BIOMES; char m_filler[0x10]; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/WoodlandMansionFeature.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/WoodlandMansionFeature.h index fb911195..0c2d3c7a 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/WoodlandMansionFeature.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/feature/WoodlandMansionFeature.h @@ -3,10 +3,17 @@ #include "net/minecraft/world/level/levelgen/feature/StructureFeature.h" class GenericOverworldLevelSource; +class SuperflatConfig; class WoodlandMansionFeature : public StructureFeature { public: + std::wstring getFeatureName() override; + BlockPos* getNearestGeneratedFeature(Level*, const BlockPos&, bool) override; + bool isFeatureChunk(int, int, bool) override; + StructureStart* createStructureStart(int, int) override; + WoodlandMansionFeature(GenericOverworldLevelSource*); + WoodlandMansionFeature(GenericOverworldLevelSource*, SuperflatConfig*); static void staticCtor(); diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/structure/templatesystem/StructureManager.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/structure/templatesystem/StructureManager.h index 9b091180..d6362d70 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/structure/templatesystem/StructureManager.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/structure/templatesystem/StructureManager.h @@ -1,6 +1,28 @@ #pragma once +#include +#include + +class DataFixerUpper; +class InputStream; +class StructureTemplate; + class StructureManager { public: + StructureManager(DataFixerUpper*); + virtual ~StructureManager(); static void staticCtor(); + StructureTemplate* getOrCreate(int); + StructureTemplate* get(int); + bool loadArchive(int); + std::wstring getArchivePath(int); + void loadFromStream(int, InputStream*); + + std::unordered_map m_templates; + DataFixerUpper* m_fixerUpper; + static constexpr int RESOURCE_COUNT = 114; + +private: + static const wchar_t* const s_resourceNames[RESOURCE_COUNT]; }; +static_assert(sizeof(StructureManager) == 0x38, "Original structure manager allocation"); diff --git a/src/Minecraft.World/net/minecraft/world/level/levelgen/synth/PerlinSimplexNoise.h b/src/Minecraft.World/net/minecraft/world/level/levelgen/synth/PerlinSimplexNoise.h index 4813debe..62d04637 100644 --- a/src/Minecraft.World/net/minecraft/world/level/levelgen/synth/PerlinSimplexNoise.h +++ b/src/Minecraft.World/net/minecraft/world/level/levelgen/synth/PerlinSimplexNoise.h @@ -3,7 +3,7 @@ #include "net/minecraft/world/ArrayWithLength.h" #include "net/minecraft/world/level/levelgen/synth/Synth.h" -class ImprovedNoise; +class SimplexNoise; class Random; class PerlinSimplexNoise : public Synth { @@ -14,7 +14,9 @@ class PerlinSimplexNoise : public Synth { void init(Random*, int); arrayWithLength getRegion(arrayWithLength, double, double, int, int, double, double, double); + arrayWithLength getRegion(arrayWithLength, double, double, int, int, double, double, + double, double); - ImprovedNoise** m_noiseLevels; + SimplexNoise** m_noiseLevels; int m_maxOctaves; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/newbiome/layer/BiomeInitLayer.cpp b/src/Minecraft.World/net/minecraft/world/level/newbiome/layer/BiomeInitLayer.cpp index 6ac19ccd..415211b1 100644 --- a/src/Minecraft.World/net/minecraft/world/level/newbiome/layer/BiomeInitLayer.cpp +++ b/src/Minecraft.World/net/minecraft/world/level/newbiome/layer/BiomeInitLayer.cpp @@ -12,41 +12,41 @@ BiomeInitLayer::BiomeInitLayer(long long seed, std::shared_ptr parent, Le m_parent = parent; if (levelType == LevelType::NORMAL_1_1) { m_warmBiomes = {6, true}; - m_warmBiomes[0] = Biome::DESERT; - m_warmBiomes[1] = Biome::FOREST; - m_warmBiomes[2] = Biome::EXTREME_HILLS; - m_warmBiomes[3] = Biome::SWAMP; - m_warmBiomes[4] = Biome::PLAINS; - m_warmBiomes[5] = Biome::TAIGA; + m_warmBiomes.get(0) = Biome::DESERT; + m_warmBiomes.get(1) = Biome::FOREST; + m_warmBiomes.get(2) = Biome::EXTREME_HILLS; + m_warmBiomes.get(3) = Biome::SWAMP; + m_warmBiomes.get(4) = Biome::PLAINS; + m_warmBiomes.get(5) = Biome::TAIGA; } else { m_warmBiomes = {6, true}; - m_warmBiomes[0] = Biome::DESERT; - m_warmBiomes[1] = Biome::DESERT; - m_warmBiomes[2] = Biome::DESERT; - m_warmBiomes[3] = Biome::SAVANNA; - m_warmBiomes[4] = Biome::SAVANNA; - m_warmBiomes[5] = Biome::PLAINS; + m_warmBiomes.get(0) = Biome::DESERT; + m_warmBiomes.get(1) = Biome::DESERT; + m_warmBiomes.get(2) = Biome::DESERT; + m_warmBiomes.get(3) = Biome::SAVANNA; + m_warmBiomes.get(4) = Biome::SAVANNA; + m_warmBiomes.get(5) = Biome::PLAINS; } m_mediumBiomes = {6, true}; - m_mediumBiomes[0] = Biome::FOREST; - m_mediumBiomes[1] = Biome::ROOFED_FOREST; - m_mediumBiomes[2] = Biome::EXTREME_HILLS; - m_mediumBiomes[3] = Biome::PLAINS; - m_mediumBiomes[4] = Biome::BIRCH_FOREST; - m_mediumBiomes[5] = Biome::SWAMP; + m_mediumBiomes.get(0) = Biome::FOREST; + m_mediumBiomes.get(1) = Biome::ROOFED_FOREST; + m_mediumBiomes.get(2) = Biome::EXTREME_HILLS; + m_mediumBiomes.get(3) = Biome::PLAINS; + m_mediumBiomes.get(4) = Biome::BIRCH_FOREST; + m_mediumBiomes.get(5) = Biome::SWAMP; m_coldBiomes = {4, true}; - m_coldBiomes[0] = Biome::FOREST; - m_coldBiomes[1] = Biome::EXTREME_HILLS; - m_coldBiomes[2] = Biome::TAIGA; - m_coldBiomes[3] = Biome::PLAINS; + m_coldBiomes.get(0) = Biome::FOREST; + m_coldBiomes.get(1) = Biome::EXTREME_HILLS; + m_coldBiomes.get(2) = Biome::TAIGA; + m_coldBiomes.get(3) = Biome::PLAINS; m_iceBiomes = {4, true}; - m_iceBiomes[0] = Biome::ICE_PLAINS; - m_iceBiomes[1] = Biome::ICE_PLAINS; - m_iceBiomes[2] = Biome::ICE_PLAINS; - m_iceBiomes[3] = Biome::COLD_TAIGA; + m_iceBiomes.get(0) = Biome::ICE_PLAINS; + m_iceBiomes.get(1) = Biome::ICE_PLAINS; + m_iceBiomes.get(2) = Biome::ICE_PLAINS; + m_iceBiomes.get(3) = Biome::COLD_TAIGA; CustomizableSourceSettings* settings = nullptr; if (levelType != LevelType::NORMAL_1_1 && levelType == LevelType::CUSTOMIZED) { @@ -83,22 +83,22 @@ arrayWithLength BiomeInitLayer::getArea(int x, int y, int width, int height area[n + m * width] = Biome::MESA_PLATEAU->m_biomeId; } } else { - area[n + m * width] = m_warmBiomes[nextRandom(m_warmBiomes.m_length)]->m_biomeId; + area[n + m * width] = m_warmBiomes.get(nextRandom(m_warmBiomes.m_length))->m_biomeId; } } else if (o == 2) { if (p > 0) { area[n + m * width] = Biome::JUNGLE->m_biomeId; } else { - area[n + m * width] = m_mediumBiomes[nextRandom(m_mediumBiomes.m_length)]->m_biomeId; + area[n + m * width] = m_mediumBiomes.get(nextRandom(m_mediumBiomes.m_length))->m_biomeId; } } else if (o == 3) { if (p > 0) { area[n + m * width] = Biome::MEGA_TAIGA->m_biomeId; } else { - area[n + m * width] = m_coldBiomes[nextRandom(m_coldBiomes.m_length)]->m_biomeId; + area[n + m * width] = m_coldBiomes.get(nextRandom(m_coldBiomes.m_length))->m_biomeId; } } else if (o == 4) { - area[n + m * width] = m_iceBiomes[nextRandom(m_iceBiomes.m_length)]->m_biomeId; + area[n + m * width] = m_iceBiomes.get(nextRandom(m_iceBiomes.m_length))->m_biomeId; } else { area[n + m * width] = Biome::MUSHROOM_ISLAND->m_biomeId; } diff --git a/src/Minecraft.World/net/minecraft/world/level/newbiome/layer/IntCache.h b/src/Minecraft.World/net/minecraft/world/level/newbiome/layer/IntCache.h index deee731a..48c15e78 100644 --- a/src/Minecraft.World/net/minecraft/world/level/newbiome/layer/IntCache.h +++ b/src/Minecraft.World/net/minecraft/world/level/newbiome/layer/IntCache.h @@ -1,6 +1,7 @@ #pragma once #include "net/minecraft/world/ArrayWithLength.h" +#include class IntCache { public: @@ -14,5 +15,20 @@ class IntCache { static void Reset(); - class ThreadStorage {}; + class ThreadStorage { + public: + ThreadStorage(); + ~ThreadStorage(); + + /** Arrays remain owned here; returned arrayWithLength values are views. + */ + int m_maxSize; + std::vector> m_freeSmall; + std::vector> m_activeSmall; + std::vector> m_freeLarge; + std::vector> m_activeLarge; + std::vector> m_retiredLarge; + }; + + static unsigned int sThreadStorageIndex; }; diff --git a/src/Minecraft.World/net/minecraft/world/level/saveddata/MapItemSavedData.h b/src/Minecraft.World/net/minecraft/world/level/saveddata/MapItemSavedData.h index ef5deedf..3d19ae92 100644 --- a/src/Minecraft.World/net/minecraft/world/level/saveddata/MapItemSavedData.h +++ b/src/Minecraft.World/net/minecraft/world/level/saveddata/MapItemSavedData.h @@ -37,7 +37,7 @@ class MapItemSavedData : public SavedData { ~MapItemSavedData() override; void load(CompoundTag*) override; - void save(CompoundTag*) override; + CompoundTag* save(CompoundTag*) override; void tickCarriedBy(std::shared_ptr player, not_null_ptr item); void mergeInMapData(std::shared_ptr mapData); diff --git a/src/Minecraft.World/net/minecraft/world/level/saveddata/SavedData.h b/src/Minecraft.World/net/minecraft/world/level/saveddata/SavedData.h index 9315bdc7..981316a2 100644 --- a/src/Minecraft.World/net/minecraft/world/level/saveddata/SavedData.h +++ b/src/Minecraft.World/net/minecraft/world/level/saveddata/SavedData.h @@ -10,7 +10,7 @@ class SavedData : public std::enable_shared_from_this { SavedData(const std::wstring&); virtual ~SavedData(); virtual void load(CompoundTag*) = 0; - virtual void save(CompoundTag*) = 0; + virtual CompoundTag* save(CompoundTag*) = 0; void setDirty(bool); void setDirty(); diff --git a/src/Minecraft.World/net/minecraft/world/level/storage/LevelData.cpp b/src/Minecraft.World/net/minecraft/world/level/storage/LevelData.cpp index 4ce690d3..a919fd94 100644 --- a/src/Minecraft.World/net/minecraft/world/level/storage/LevelData.cpp +++ b/src/Minecraft.World/net/minecraft/world/level/storage/LevelData.cpp @@ -4,6 +4,7 @@ #include "net/minecraft/core/BlockPos.h" #include "net/minecraft/core/System.h" +#include "net/minecraft/util/datafix/DataFixerUpper.h" #include "net/minecraft/world/Difficulty.h" #include "net/minecraft/world/level/LevelType.h" @@ -68,7 +69,7 @@ CompoundTag* LevelData::createTag(std::vector>*) { } void LevelData::setTagData(CompoundTag* out) { - out->putInt(sLevelDataVersionString, 922); // why is DataVersion it's own static shit wtf + out->putInt(DataFixerUpper::DATA_VERSION_KEY, 922); out->putLong(L"RandomSeed", this->m_seed); out->putString(L"generatorName", this->m_levelType->getGeneratorName()); out->putInt(L"generatorVersion", this->m_levelType->getVersion()); diff --git a/src/Minecraft.World/net/minecraft/world/level/storage/light/SparseLightStorage.h b/src/Minecraft.World/net/minecraft/world/level/storage/light/SparseLightStorage.h index 19c5b031..d3c9a890 100644 --- a/src/Minecraft.World/net/minecraft/world/level/storage/light/SparseLightStorage.h +++ b/src/Minecraft.World/net/minecraft/world/level/storage/light/SparseLightStorage.h @@ -1,10 +1,50 @@ #pragma once #include "java/io/DataOutputStream.h" +#include + +class DataInputStream; +template +class XLockFreeStack; class SparseLightStorage { public: + SparseLightStorage(bool bright); + SparseLightStorage(bool bright, bool compact); + SparseLightStorage(const SparseLightStorage&); + ~SparseLightStorage(); + + void fromNibbles(arrayWithLength, int offset); + void toNibbles(arrayWithLength, unsigned int offset); + unsigned char getLight(int x, int y, int z); + void setLight(int x, int y, int z, int value); + void setFullBright(); + int setDataRegion(arrayWithLength, int x0, int y0, int z0, int x1, int y1, int z1, + int offset); + int getDataRegion(arrayWithLength, int x0, int y0, int z0, int x1, int y1, int z1, + int offset); + unsigned int compress(); + bool isCompressed(); void write(DataOutputStream* out); + void read(DataInputStream* in); static void staticCtor(); + static void tick(); + +private: + static unsigned char* allocate(unsigned int); + static void freeBuffer(unsigned char*, int); + int bufferSize(unsigned long long); + void getBuffers(unsigned char** indices, unsigned char** data); + void replace(unsigned long long); + void expandLayers(std::vector&); + void retire(unsigned char*); + static int sRetirementSlot; + static XLockFreeStack sRetired[3]; + + /** Low 48 bits: buffer pointer; high 16 bits: number of explicit 128-byte slabs. + */ + unsigned long long m_packed; }; + +static_assert(sizeof(SparseLightStorage) == 8, "SparseLightStorage Switch layout"); diff --git a/src/Minecraft.World/net/minecraft/world/phys/AABB.h b/src/Minecraft.World/net/minecraft/world/phys/AABB.h index 8f6d8460..1351b2ac 100644 --- a/src/Minecraft.World/net/minecraft/world/phys/AABB.h +++ b/src/Minecraft.World/net/minecraft/world/phys/AABB.h @@ -32,8 +32,13 @@ class AABB { AABB(double, double, double, double, double, double); static AABB* newPermanent(double, double, double, double, double, double); + static AABB* newPermanent(const BlockPos&); + static AABB* newPermanent(const BlockPos&, const BlockPos&); static AABB* newPermanent(const AABB*); static AABB* newTemp(double, double, double, double, double, double); + static AABB* newTemp(const BlockPos&); + static AABB* newTemp(const BlockPos&, const BlockPos&); + static AABB* newTemp(const AABB*); bool containsIncludingLowerBound(Vec3*) const; AABB* set(const AABB*); @@ -43,14 +48,26 @@ class AABB { double getSize() const; AABB* grow(double multiplier) const; AABB* grow(double x, double y, double z) const; + AABB* shrink(double multiplier) const; + AABB* shrink(double x, double y, double z) const; AABB* expand(double x, double y, double z) const; + AABB* contract(double x, double y, double z); + bool equals(const AABB* other) const; bool contains(Vec3* vec); + bool contains(const BlockPos& pos) const; bool intersects(const AABB* rhs) const; bool intersects(double, double, double, double, double, double) const; void resetPool(); AABB* move(const BlockPos&) const; AABB* move(double, double, double) const; HitResult* clip(Vec3*, Vec3*) const; + Vec3* collideWithXPlane(double, Vec3*, Vec3*) const; + Vec3* collideWithYPlane(double, Vec3*, Vec3*) const; + Vec3* collideWithZPlane(double, Vec3*, Vec3*) const; + bool isClosest(Vec3* start, Vec3* closest, Vec3* candidate) const; + bool containsYZ(Vec3*) const; + bool containsXZ(Vec3*) const; + bool containsXY(Vec3*) const; void correctMinMax(); double clipXCollide(const AABB*, double); double clipYCollide(const AABB*, double); diff --git a/src/Minecraft.World/net/minecraft/world/phys/HitResult.h b/src/Minecraft.World/net/minecraft/world/phys/HitResult.h index 92504665..73d8e1cb 100644 --- a/src/Minecraft.World/net/minecraft/world/phys/HitResult.h +++ b/src/Minecraft.World/net/minecraft/world/phys/HitResult.h @@ -10,12 +10,17 @@ class Entity; class HitResult { public: ~HitResult(); + HitResult(Vec3*, const Direction*); HitResult(Vec3*, const Direction*, const BlockPos&); + HitResult(std::shared_ptr entity); const BlockPos& getBlockPos() const; BlockPos m_blockPos; + int m_type; const Direction* m_direction; Vec3* m_hitVector; std::shared_ptr m_entity; }; + +ASSERT_SIZEOF(HitResult, 0x30) diff --git a/src/Minecraft.World/net/minecraft/world/phys/Vec3.cpp b/src/Minecraft.World/net/minecraft/world/phys/Vec3.cpp index dbf75105..f2ca8aab 100644 --- a/src/Minecraft.World/net/minecraft/world/phys/Vec3.cpp +++ b/src/Minecraft.World/net/minecraft/world/phys/Vec3.cpp @@ -1,10 +1,163 @@ #include "net/minecraft/world/phys/Vec3.h" #include "cmath" +#include "net/minecraft/core/Vec3i.h" #include "net/minecraft/world/phys/AABB.h" DEFINE_THREAD_STORAGE(Vec3, 1024) +Vec3* Vec3::ZERO; // name guessed + +void Vec3::staticCtor() { + ZERO = new Vec3(0.0, 0.0, 0.0); +} + +Vec3* Vec3::newPermanent(double x, double y, double z) { + return new Vec3(x, y, z); +} + +Vec3* Vec3::newPermanent(const Vec3* other) { + return new Vec3(other->m_x, other->m_y, other->m_z); +} + +Vec3* Vec3::newTemp(double x, double y, double z) { + ThreadStorage* ts = static_cast(TlsGetValue(sThreadStorageIndex)); + Vec3* temp = ts->m_storage[ts->m_unk].set(x, y, z); + ts->m_unk++; + ts->m_unk &= 0x3ff; + return temp; +} + +Vec3* Vec3::newTemp(const Vec3* other) { + return newTemp(other->m_x, other->m_y, other->m_z); +} + +Vec3* Vec3::newTemp(const Vec3i& other) { + return newTemp(other.getX(), other.getY(), other.getZ()); +} + +Vec3* Vec3::normalize() { + double magnitude = sqrt(m_x * m_x + m_y * m_y + m_z * m_z); + if (magnitude < 0.0001) + return newTemp(ZERO); + return newTemp(m_x / magnitude, m_y / magnitude, m_z / magnitude); +} + +Vec3* Vec3::lerp(Vec3* other, double weight) { + return newTemp(m_x + (other->m_x - m_x) * weight, m_y + (other->m_y - m_y) * weight, + m_z + (other->m_z - m_z) * weight); +} + +Vec3* Vec3::vectorTo(Vec3* other) { + return newTemp(other->m_x - m_x, other->m_y - m_y, other->m_z - m_z); +} + +Vec3* Vec3::cross(Vec3* other) { + return newTemp(m_y * other->m_z - m_z * other->m_y, m_z * other->m_x - other->m_z * m_x, + other->m_y * m_x - m_y * other->m_x); +} + +Vec3* Vec3::add(Vec3* other) { + return add(other->m_x, other->m_y, other->m_z); +} + +double Vec3::distanceTo(Vec3* other) { + double dx = other->m_x - m_x; + double dy = other->m_y - m_y; + double dz = other->m_z - m_z; + return sqrt(dx * dx + dy * dy + dz * dz); +} + +Vec3* Vec3::scale(double multiplier) { + return newTemp(m_x * multiplier, m_y * multiplier, m_z * multiplier); +} + +double Vec3::lengthSqr() { + return m_x * m_x + m_y * m_y + m_z * m_z; +} + +Vec3* Vec3::getIntermediateWithXValue(Vec3* other, double x) { + double dx = other->m_x - m_x; + double dy = other->m_y - m_y; + double dz = other->m_z - m_z; + if (dx * dx < double(1.0e-7f)) + return nullptr; + double weight = (x - m_x) / dx; + // Reject out-of-range weights; unordered comparisons fall through in the binary. + if (weight < 0.0 || weight > 1.0) + return nullptr; + return newTemp(m_x + dx * weight, m_y + weight * dy, m_z + weight * dz); +} + +Vec3* Vec3::getIntermediateWithYValue(Vec3* other, double y) { + double dx = other->m_x - m_x; + double dy = other->m_y - m_y; + double dz = other->m_z - m_z; + if (dy * dy < double(1.0e-7f)) + return nullptr; + double weight = (y - m_y) / dy; + if (weight < 0.0 || weight > 1.0) + return nullptr; + return newTemp(m_x + dx * weight, m_y + dy * weight, m_z + weight * dz); +} + +Vec3* Vec3::getIntermediateWithZValue(Vec3* other, double z) { + double dx = other->m_x - m_x; + double dy = other->m_y - m_y; + double dz = other->m_z - m_z; + if (dz * dz < double(1.0e-7f)) + return nullptr; + double weight = (z - m_z) / dz; + if (weight < 0.0 || weight > 1.0) + return nullptr; + return newTemp(m_x + dx * weight, m_y + dy * weight, m_z + dz * weight); +} + +bool Vec3::equals(Vec3* other) { + if (other->m_x != m_x) + return false; + if (other->m_y != m_y) + return false; + return other->m_z == m_z; +} + +Vec3* Vec3::xRot(float angle) { + double cosine = cosf(angle); + double sine = sinf(angle); + return newTemp(m_x, cosine * m_y + sine * m_z, cosine * m_z - sine * m_y); +} + +Vec3* Vec3::yRot(float angle) { + double cosine = cosf(angle); + double sine = sinf(angle); + return newTemp(cosine * m_x + sine * m_z, m_y, cosine * m_z - m_x * sine); +} + +Vec3* Vec3::zRot(float angle) { + double cosine = cosf(angle); + double sine = sinf(angle); + return newTemp(cosine * m_x + sine * m_y, cosine * m_y - m_x * sine, m_z); +} + +Vec3* Vec3::add(double x, double y, double z) { + return newTemp(this->m_x + x, this->m_y + y, this->m_z + z); +} + +Vec3* Vec3::subtract(double x, double y, double z) { + return add(-x, -y, -z); +} + +Vec3* Vec3::subtract(Vec3* other) { + return subtract(other->m_x, other->m_y, other->m_z); +} + +double Vec3::distanceToSqr(Vec3* other) { + double dx = other->m_x - this->m_x; + double dy = other->m_y - this->m_y; + double dz = other->m_z - this->m_z; + return dx * dx + dy * dy + dz * dz; +} + double Vec3::dot(Vec3* rhs) { return this->m_x * rhs->m_x + this->m_y * rhs->m_y + this->m_z * rhs->m_z; } @@ -13,10 +166,11 @@ double Vec3::length() { return sqrt(this->m_x * this->m_x + this->m_y * this->m_y + this->m_z * this->m_z); } -void Vec3::set(double x, double y, double z) { +Vec3* Vec3::set(double x, double y, double z) { this->m_x = x; this->m_y = y; this->m_z = z; + return this; } void Vec3::resetPool() {} diff --git a/src/Minecraft.World/net/minecraft/world/phys/Vec3.h b/src/Minecraft.World/net/minecraft/world/phys/Vec3.h index 6a37420c..6962bf60 100644 --- a/src/Minecraft.World/net/minecraft/world/phys/Vec3.h +++ b/src/Minecraft.World/net/minecraft/world/phys/Vec3.h @@ -3,12 +3,19 @@ #include "net/minecraft/util/ThreadStorage.h" class AABB; +class Vec3i; class Vec3 { public: DECLARE_THREAD_STORAGE(Vec3) Vec3(double x, double y, double z) { + if (x == -0.0) + x = 0.0; + if (y == -0.0) + y = 0.0; + if (z == -0.0) + z = 0.0; this->m_x = x; this->m_y = y; this->m_z = z; @@ -17,6 +24,9 @@ class Vec3 { static Vec3* newTemp(double x, double y, double z); static Vec3* newTemp(const Vec3* other); + static Vec3* newTemp(const Vec3i& other); + static void staticCtor(); + static Vec3* ZERO; Vec3 operator=(Vec3 o); @@ -29,15 +39,30 @@ class Vec3 { Vec3 operator/(Vec3 o) { return Vec3(m_x / o.m_x, m_y / o.m_y, m_z / o.m_z); } static Vec3* newPermanent(double, double, double); + static Vec3* newPermanent(const Vec3* other); - Vec3 yRot(float); + Vec3* xRot(float); + Vec3* yRot(float); + Vec3* zRot(float); double dot(Vec3* rhs); double length(); - void set(double x, double y, double z); + double lengthSqr(); + Vec3* set(double x, double y, double z); static void resetPool(); double distanceTo(AABB* aabb); + double distanceTo(Vec3* other); + double distanceToSqr(Vec3* other); + Vec3* subtract(Vec3* other); Vec3* subtract(double, double, double); Vec3* add(double, double, double); + Vec3* add(Vec3* other); + Vec3* vectorTo(Vec3* other); + Vec3* cross(Vec3* other); + Vec3* lerp(Vec3* other, double weight); + bool equals(Vec3* other); + Vec3* getIntermediateWithXValue(Vec3* other, double x); + Vec3* getIntermediateWithYValue(Vec3* other, double y); + Vec3* getIntermediateWithZValue(Vec3* other, double z); Vec3* normalize(); Vec3* scale(double); diff --git a/src/Minecraft.World/net/minecraft/world/stats/GenericStats.cpp b/src/Minecraft.World/net/minecraft/world/stats/GenericStats.cpp index a572e8f3..186caadb 100644 --- a/src/Minecraft.World/net/minecraft/world/stats/GenericStats.cpp +++ b/src/Minecraft.World/net/minecraft/world/stats/GenericStats.cpp @@ -1,5 +1,14 @@ #include "net/minecraft/world/stats/GenericStats.h" +#include "net/minecraft/world/item/ItemInstance.h" + +arrayWithLength GenericStats::param_itemsUsed(std::shared_ptr player, + not_null_ptr item) { + if (!player || item->isEmpty()) + return sInstance->getParam_noArgs(); + return sInstance->getParam_itemsUsed(player, item); +} + Stat* GenericStats::get_achievement(eAward) { return nullptr; } @@ -192,7 +201,7 @@ arrayWithLength GenericStats::getParam_climbOneM(int) { return getParam_noArgs(); } -arrayWithLength GenericStats::getParam_inecartOneM(int) { +arrayWithLength GenericStats::getParam_minecartOneM(int) { return getParam_noArgs(); } @@ -237,8 +246,8 @@ arrayWithLength GenericStats::getParam_itemsBought(int, int, int) return getParam_noArgs(); } -arrayWithLength GenericStats::getParam_obKill(std::shared_ptr, std::shared_ptr, - DamageSource*) { +arrayWithLength GenericStats::getParam_mobKill(std::shared_ptr, std::shared_ptr, + DamageSource*) { return getParam_noArgs(); } @@ -294,7 +303,7 @@ arrayWithLength GenericStats::getParam_chestfulOfCobblestone(int) return getParam_achievement(eAward_CHESTFUL_OF_COBBLESTONE); } -arrayWithLength GenericStats::getParam_usicToMyEars(int) { +arrayWithLength GenericStats::getParam_musicToMyEars(int) { return getParam_achievement(eAward_MUSIC_TO_MY_EARS); } @@ -366,7 +375,7 @@ arrayWithLength GenericStats::getParam_youWontLikeMeWhenImHungry( return getParam_achievement(eAward_YOU_WONT_LIKE_ME_WHEN_IM_HUNGRY); } -arrayWithLength GenericStats::getParam_ine() { +arrayWithLength GenericStats::getParam_mine() { return getParam_achievement(eAward_MINE); } @@ -382,7 +391,7 @@ arrayWithLength GenericStats::getParam_beamMeUp(int) { return getParam_achievement(eAward_BEAM_ME_UP); } -arrayWithLength GenericStats::getParam_apRoom(int) { +arrayWithLength GenericStats::getParam_mapRoom(int) { return getParam_achievement(eAward_MAP_ROOM); } @@ -738,7 +747,7 @@ arrayWithLength GenericStats::param_buildHoe() { return sInstance->getParam_achievement(eAward_BUILD_HOE); } -arrayWithLength GenericStats::param_akeBread() { +arrayWithLength GenericStats::param_makeBread() { return sInstance->getParam_achievement(eAward_MAKE_BREAD); } @@ -830,7 +839,7 @@ arrayWithLength GenericStats::param_deadshot() { return sInstance->getParam_achievement(eAward_DEADSHOT); } -arrayWithLength GenericStats::param_ountainTop() { +arrayWithLength GenericStats::param_mountainTop() { return sInstance->getParam_achievement(eAward_MOUNTAIN_TOP); } diff --git a/src/Minecraft.World/net/minecraft/world/stats/GenericStats.h b/src/Minecraft.World/net/minecraft/world/stats/GenericStats.h index 943f40f2..26d8bbb2 100644 --- a/src/Minecraft.World/net/minecraft/world/stats/GenericStats.h +++ b/src/Minecraft.World/net/minecraft/world/stats/GenericStats.h @@ -72,7 +72,7 @@ class GenericStats { virtual arrayWithLength getParam_swimOneM(int); virtual arrayWithLength getParam_fallOneM(int); virtual arrayWithLength getParam_climbOneM(int); - virtual arrayWithLength getParam_inecartOneM(int); + virtual arrayWithLength getParam_minecartOneM(int); virtual arrayWithLength getParam_boatOneM(int); virtual arrayWithLength getParam_pigOneM(int); virtual arrayWithLength getParam_cowsMilked(); @@ -84,8 +84,8 @@ class GenericStats { virtual arrayWithLength getParam_itemsUsed(std::shared_ptr, not_null_ptr); virtual arrayWithLength getParam_itemsBought(int, int, int); - virtual arrayWithLength getParam_obKill(std::shared_ptr, std::shared_ptr, - DamageSource*); + virtual arrayWithLength getParam_mobKill(std::shared_ptr, std::shared_ptr, + DamageSource*); virtual arrayWithLength getParam_breedEntity(eINSTANCEOF); virtual arrayWithLength getParam_tamedEntity(eINSTANCEOF); virtual arrayWithLength getParam_curedEntity(eINSTANCEOF); @@ -99,7 +99,7 @@ class GenericStats { virtual arrayWithLength getParam_overkill(int); virtual arrayWithLength getParam_openInventory(int); virtual arrayWithLength getParam_chestfulOfCobblestone(int); - virtual arrayWithLength getParam_usicToMyEars(int); + virtual arrayWithLength getParam_musicToMyEars(int); virtual arrayWithLength getParam_MG03Score(int); virtual arrayWithLength getParam_MG03RingCount(int); virtual arrayWithLength getParam_MG03BestTime(unsigned int); @@ -117,11 +117,11 @@ class GenericStats { virtual arrayWithLength getParam_tisButAScratch(); virtual arrayWithLength getParam_cupid(); virtual arrayWithLength getParam_youWontLikeMeWhenImHungry(); - virtual arrayWithLength getParam_ine(); + virtual arrayWithLength getParam_mine(); virtual arrayWithLength getParam_superSonic(int); virtual arrayWithLength getParam_freeDiver(int); virtual arrayWithLength getParam_beamMeUp(int); - virtual arrayWithLength getParam_apRoom(int); + virtual arrayWithLength getParam_mapRoom(int); virtual arrayWithLength getParam_tenaciousBall(int); virtual arrayWithLength getParam_suckMySnowballs(int); virtual arrayWithLength getParam_greatViewFromUpHere(int); @@ -217,7 +217,7 @@ class GenericStats { static arrayWithLength param_buildPickaxe(); static arrayWithLength param_buildFurnace(); static arrayWithLength param_buildHoe(); - static arrayWithLength param_akeBread(); + static arrayWithLength param_makeBread(); static arrayWithLength param_bakeCake(); static arrayWithLength param_buildBetterPickaxe(); static arrayWithLength param_onARail(int); @@ -240,7 +240,7 @@ class GenericStats { static arrayWithLength param_backFromTheDead(); static arrayWithLength param_equipYourFists(); static arrayWithLength param_deadshot(); - static arrayWithLength param_ountainTop(); + static arrayWithLength param_mountainTop(); static arrayWithLength param_willLikeNoOther(); static arrayWithLength param_changeOfSheets(); static arrayWithLength param_adventuringTime(); diff --git a/src/types.h b/src/types.h index 8873f9d7..1bcb808b 100644 --- a/src/types.h +++ b/src/types.h @@ -15,7 +15,7 @@ template class not_null_ptr : public std::shared_ptr { public: not_null_ptr() = default; - not_null_ptr(T* ptr); + not_null_ptr(T* ptr) : std::shared_ptr(ptr) {} not_null_ptr(const T& other); };