diff --git a/Minecraft.Client/Common/Media/MediaWindows64.arc b/Minecraft.Client/Common/Media/MediaWindows64.arc index 67f9d188..3213e3a2 100644 Binary files a/Minecraft.Client/Common/Media/MediaWindows64.arc and b/Minecraft.Client/Common/Media/MediaWindows64.arc differ diff --git a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp index cbd89ca5..3a683654 100644 --- a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp +++ b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp @@ -203,6 +203,8 @@ void IUIScene_CreativeMenu::staticCtor() ITEM_AUX(Tile::sapling_Id, Sapling::TYPE_EVERGREEN) ITEM_AUX(Tile::sapling_Id, Sapling::TYPE_BIRCH) ITEM_AUX(Tile::sapling_Id, Sapling::TYPE_JUNGLE) + ITEM_AUX(Tile::sapling2_Id, Sapling2::TYPE_ACACIA) + ITEM_AUX(Tile::sapling2_Id, Sapling2::TYPE_DARK_OAK) ITEM_AUX(Tile::leaves_Id, LeafTile::NORMAL_LEAF) ITEM_AUX(Tile::leaves_Id, LeafTile::EVERGREEN_LEAF) ITEM_AUX(Tile::leaves_Id, LeafTile::BIRCH_LEAF) diff --git a/Minecraft.Client/PreStitchedTextureMap.cpp b/Minecraft.Client/PreStitchedTextureMap.cpp index 5330cf13..657d8436 100644 --- a/Minecraft.Client/PreStitchedTextureMap.cpp +++ b/Minecraft.Client/PreStitchedTextureMap.cpp @@ -1006,6 +1006,7 @@ void PreStitchedTextureMap::loadUVs() ADD_ICON(20, 15, L"red_sandstone_top"); ADD_ICON(21, 5, L"flower_tulip_pink"); + ADD_ICON(21, 8, L"log_dark"); ADD_ICON(21, 9, L"log_dark_top"); @@ -1022,6 +1023,8 @@ void PreStitchedTextureMap::loadUVs() ADD_ICON(22, 3, L"flower_oxeye_daisy"); ADD_ICON(22, 4, L"flower_tulip_red"); ADD_ICON(22, 5, L"flower_tulip_white"); + ADD_ICON(22, 6, L"sapling_acacia"); + ADD_ICON(22, 7, L"sapling_dark_oak"); ADD_ICON(22, 8, L"coarse_dirt"); ADD_ICON(22, 9, L"dirt_podzol_side"); diff --git a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml index 4ee26883..7e27a9f3 100644 --- a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml +++ b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml @@ -8979,5 +8979,29 @@ All Ender Chests in a world are linked. Items placed into an Ender Chest are acc Restores 3{*ICON_SHANK_01*}. Created by cooking raw mutton in a furnace. + + Acacia Sapling + + + Dark Oak Sapling + + + Acacia Leaves + + + Dark Oak Leaves + + + Red Sandstone + + + Red Sandstone Stairs + + + Prismarine Crystal + + + Sea Lantern + \ No newline at end of file diff --git a/Minecraft.Client/Windows64Media/strings.h b/Minecraft.Client/Windows64Media/strings.h index 0b03c0ba..f0c83fab 100644 --- a/Minecraft.Client/Windows64Media/strings.h +++ b/Minecraft.Client/Windows64Media/strings.h @@ -1,7 +1,7 @@ #pragma once // Auto-generated by StringTable builder — do not edit manually. // Source language: en-US -// Total strings: 2331 +// Total strings: 2339 #define IDS_NULL 0 #define IDS_OK 1 @@ -2210,129 +2210,135 @@ #define IDS_DESC_MUTTON_RAW 2204 #define IDS_ITEM_MUTTON_COOKED 2205 #define IDS_DESC_MUTTON_COOKED 2206 -#define IDS_LANG_SYSTEM 2207 -#define IDS_LANG_ENGLISH 2208 -#define IDS_LANG_GERMAN 2209 -#define IDS_LANG_SPANISH 2210 -#define IDS_LANG_SPANISH_SPAIN 2211 -#define IDS_LANG_SPANISH_LATIN_AMERICA 2212 -#define IDS_LANG_FRENCH 2213 -#define IDS_LANG_ITALIAN 2214 -#define IDS_LANG_PORTUGUESE 2215 -#define IDS_LANG_PORTUGUESE_PORTUGAL 2216 -#define IDS_LANG_PORTUGUESE_BRAZIL 2217 -#define IDS_LANG_JAPANESE 2218 -#define IDS_LANG_KOREAN 2219 -#define IDS_LANG_CHINESE_TRADITIONAL 2220 -#define IDS_LANG_CHINESE_SIMPLIFIED 2221 -#define IDS_LANG_DANISH 2222 -#define IDS_LANG_FINISH 2223 -#define IDS_LANG_DUTCH 2224 -#define IDS_LANG_POLISH 2225 -#define IDS_LANG_RUSSIAN 2226 -#define IDS_LANG_SWEDISH 2227 -#define IDS_LANG_NORWEGIAN 2228 -#define IDS_LANG_GREEK 2229 -#define IDS_LANG_TURKISH 2230 -#define IDS_LEADERBOARD_KILLS_EASY 2231 -#define IDS_LEADERBOARD_KILLS_NORMAL 2232 -#define IDS_LEADERBOARD_KILLS_HARD 2233 -#define IDS_LEADERBOARD_MINING_BLOCKS_PEACEFUL 2234 -#define IDS_LEADERBOARD_MINING_BLOCKS_EASY 2235 -#define IDS_LEADERBOARD_MINING_BLOCKS_NORMAL 2236 -#define IDS_LEADERBOARD_MINING_BLOCKS_HARD 2237 -#define IDS_LEADERBOARD_FARMING_PEACEFUL 2238 -#define IDS_LEADERBOARD_FARMING_EASY 2239 -#define IDS_LEADERBOARD_FARMING_NORMAL 2240 -#define IDS_LEADERBOARD_FARMING_HARD 2241 -#define IDS_LEADERBOARD_TRAVELLING_PEACEFUL 2242 -#define IDS_LEADERBOARD_TRAVELLING_EASY 2243 -#define IDS_LEADERBOARD_TRAVELLING_NORMAL 2244 -#define IDS_LEADERBOARD_TRAVELLING_HARD 2245 -#define IDS_TIPS_GAMETIP_0 2246 -#define IDS_TIPS_GAMETIP_1 2247 -#define IDS_TIPS_GAMETIP_48 2248 -#define IDS_TIPS_GAMETIP_44 2249 -#define IDS_TIPS_GAMETIP_45 2250 -#define IDS_TIPS_TRIVIA_4 2251 -#define IDS_TIPS_TRIVIA_17 2252 -#define IDS_HOW_TO_PLAY_MULTIPLAYER 2253 -#define IDS_HOW_TO_PLAY_SOCIALMEDIA 2254 -#define IDS_HOW_TO_PLAY_CREATIVE 2255 -#define IDS_TUTORIAL_TASK_FLY 2256 -#define IDS_TOOLTIPS_SELECTDEVICE 2257 -#define IDS_TOOLTIPS_CHANGEDEVICE 2258 -#define IDS_TOOLTIPS_VIEW_GAMERCARD 2259 -#define IDS_TOOLTIPS_VIEW_GAMERPROFILE 2260 -#define IDS_TOOLTIPS_INVITE_PARTY 2261 -#define IDS_CONFIRM_START_CREATIVE 2262 -#define IDS_CONFIRM_START_SAVEDINCREATIVE 2263 -#define IDS_CONFIRM_START_SAVEDINCREATIVE_CONTINUE 2264 -#define IDS_CONFIRM_START_HOST_PRIVILEGES 2265 -#define IDS_CONNECTION_LOST_LIVE 2266 -#define IDS_CONNECTION_LOST_LIVE_NO_EXIT 2267 -#define IDS_AWARD_AVATAR1 2268 -#define IDS_AWARD_AVATAR2 2269 -#define IDS_AWARD_AVATAR3 2270 -#define IDS_AWARD_THEME 2271 -#define IDS_UNLOCK_ACHIEVEMENT_TEXT 2272 -#define IDS_UNLOCK_AVATAR_TEXT 2273 -#define IDS_UNLOCK_GAMERPIC_TEXT 2274 -#define IDS_UNLOCK_THEME_TEXT 2275 -#define IDS_UNLOCK_ACCEPT_INVITE 2276 -#define IDS_UNLOCK_GUEST_TEXT 2277 -#define IDS_LEADERBOARD_GAMERTAG 2278 -#define IDS_GROUPNAME_POTIONS_480 2279 -#define IDS_RETURNEDTOTITLESCREEN_TEXT 2280 -#define IDS_TRIALOVER_TEXT 2281 -#define IDS_FATAL_ERROR_TEXT 2282 -#define IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT 2283 -#define IDS_NO_MULTIPLAYER_PRIVILEGE_HOST_TEXT 2284 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_SINGLE_LOCAL 2285 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_ALL_LOCAL 2286 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_REMOTE 2287 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE 2288 -#define IDS_SAVE_ICON_MESSAGE 2289 -#define IDS_GAMEOPTION_HOST_PRIVILEGES 2290 -#define IDS_CHECKBOX_DISPLAY_SPLITSCREENGAMERTAGS 2291 -#define IDS_ACHIEVEMENTS 2292 -#define IDS_LABEL_GAMERTAGS 2293 -#define IDS_IN_GAME_GAMERTAGS 2294 -#define IDS_SOCIAL_DEFAULT_DESCRIPTION 2295 -#define IDS_TITLE_UPDATE_NAME 2296 -#define IDS_PLATFORM_NAME 2297 -#define IDS_BACK_BUTTON 2298 -#define IDS_HOST_OPTION_DISABLES_ACHIEVEMENTS 2299 -#define IDS_KICK_PLAYER_DESCRIPTION 2300 -#define IDS_USING_TRIAL_TEXUREPACK_WARNING 2301 -#define IDS_WORLD_SIZE_TITLE_SMALL 2302 -#define IDS_WORLD_SIZE_TITLE_MEDIUM 2303 -#define IDS_WORLD_SIZE_TITLE_LARGE 2304 -#define IDS_WORLD_SIZE_TITLE_CLASSIC 2305 -#define IDS_WORLD_SIZE 2306 -#define IDS_GAMEOPTION_WORLD_SIZE 2307 -#define IDS_DISABLE_SAVING 2308 -#define IDS_GAMEOPTION_DISABLE_SAVING 2309 -#define IDS_RICHPRESENCE_GAMESTATE 2310 -#define IDS_RICHPRESENCE_IDLE 2311 -#define IDS_RICHPRESENCE_MENUS 2312 -#define IDS_RICHPRESENCE_MULTIPLAYER 2313 -#define IDS_RICHPRESENCE_MULTIPLAYEROFFLINE 2314 -#define IDS_RICHPRESENCE_MULTIPLAYER_1P 2315 -#define IDS_RICHPRESENCE_MULTIPLAYER_1POFFLINE 2316 -#define IDS_RICHPRESENCESTATE_BLANK 2317 -#define IDS_RICHPRESENCESTATE_RIDING_PIG 2318 -#define IDS_RICHPRESENCESTATE_RIDING_MINECART 2319 -#define IDS_RICHPRESENCESTATE_BOATING 2320 -#define IDS_RICHPRESENCESTATE_FISHING 2321 -#define IDS_RICHPRESENCESTATE_CRAFTING 2322 -#define IDS_RICHPRESENCESTATE_FORGING 2323 -#define IDS_RICHPRESENCESTATE_NETHER 2324 -#define IDS_RICHPRESENCESTATE_CD 2325 -#define IDS_RICHPRESENCESTATE_MAP 2326 -#define IDS_RICHPRESENCESTATE_ENCHANTING 2327 -#define IDS_RICHPRESENCESTATE_BREWING 2328 -#define IDS_RICHPRESENCESTATE_ANVIL 2329 -#define IDS_RICHPRESENCESTATE_TRADING 2330 -#define IDS_TILE_SEA_LANTERN 2331 -#define IDS_ITEM_PRISMARINE_CRYSTAL 2332 \ No newline at end of file +#define IDS_TILE_SAPLING_ACACIA 2207 +#define IDS_TILE_SAPLING_DARK_OAK 2208 +#define IDS_TILE_LEAVES_ACACIA 2209 +#define IDS_TILE_LEAVES_DARK_OAK 2210 +#define IDS_TILE_RED_SANDSTONE 2211 +#define IDS_TILE_STAIRS_RED_SANDSTONE 2212 +#define IDS_ITEM_PRISMARINE_CRYSTAL 2213 +#define IDS_TILE_SEA_LANTERN 2214 +#define IDS_LANG_SYSTEM 2215 +#define IDS_LANG_ENGLISH 2216 +#define IDS_LANG_GERMAN 2217 +#define IDS_LANG_SPANISH 2218 +#define IDS_LANG_SPANISH_SPAIN 2219 +#define IDS_LANG_SPANISH_LATIN_AMERICA 2220 +#define IDS_LANG_FRENCH 2221 +#define IDS_LANG_ITALIAN 2222 +#define IDS_LANG_PORTUGUESE 2223 +#define IDS_LANG_PORTUGUESE_PORTUGAL 2224 +#define IDS_LANG_PORTUGUESE_BRAZIL 2225 +#define IDS_LANG_JAPANESE 2226 +#define IDS_LANG_KOREAN 2227 +#define IDS_LANG_CHINESE_TRADITIONAL 2228 +#define IDS_LANG_CHINESE_SIMPLIFIED 2229 +#define IDS_LANG_DANISH 2230 +#define IDS_LANG_FINISH 2231 +#define IDS_LANG_DUTCH 2232 +#define IDS_LANG_POLISH 2233 +#define IDS_LANG_RUSSIAN 2234 +#define IDS_LANG_SWEDISH 2235 +#define IDS_LANG_NORWEGIAN 2236 +#define IDS_LANG_GREEK 2237 +#define IDS_LANG_TURKISH 2238 +#define IDS_LEADERBOARD_KILLS_EASY 2239 +#define IDS_LEADERBOARD_KILLS_NORMAL 2240 +#define IDS_LEADERBOARD_KILLS_HARD 2241 +#define IDS_LEADERBOARD_MINING_BLOCKS_PEACEFUL 2242 +#define IDS_LEADERBOARD_MINING_BLOCKS_EASY 2243 +#define IDS_LEADERBOARD_MINING_BLOCKS_NORMAL 2244 +#define IDS_LEADERBOARD_MINING_BLOCKS_HARD 2245 +#define IDS_LEADERBOARD_FARMING_PEACEFUL 2246 +#define IDS_LEADERBOARD_FARMING_EASY 2247 +#define IDS_LEADERBOARD_FARMING_NORMAL 2248 +#define IDS_LEADERBOARD_FARMING_HARD 2249 +#define IDS_LEADERBOARD_TRAVELLING_PEACEFUL 2250 +#define IDS_LEADERBOARD_TRAVELLING_EASY 2251 +#define IDS_LEADERBOARD_TRAVELLING_NORMAL 2252 +#define IDS_LEADERBOARD_TRAVELLING_HARD 2253 +#define IDS_TIPS_GAMETIP_0 2254 +#define IDS_TIPS_GAMETIP_1 2255 +#define IDS_TIPS_GAMETIP_48 2256 +#define IDS_TIPS_GAMETIP_44 2257 +#define IDS_TIPS_GAMETIP_45 2258 +#define IDS_TIPS_TRIVIA_4 2259 +#define IDS_TIPS_TRIVIA_17 2260 +#define IDS_HOW_TO_PLAY_MULTIPLAYER 2261 +#define IDS_HOW_TO_PLAY_SOCIALMEDIA 2262 +#define IDS_HOW_TO_PLAY_CREATIVE 2263 +#define IDS_TUTORIAL_TASK_FLY 2264 +#define IDS_TOOLTIPS_SELECTDEVICE 2265 +#define IDS_TOOLTIPS_CHANGEDEVICE 2266 +#define IDS_TOOLTIPS_VIEW_GAMERCARD 2267 +#define IDS_TOOLTIPS_VIEW_GAMERPROFILE 2268 +#define IDS_TOOLTIPS_INVITE_PARTY 2269 +#define IDS_CONFIRM_START_CREATIVE 2270 +#define IDS_CONFIRM_START_SAVEDINCREATIVE 2271 +#define IDS_CONFIRM_START_SAVEDINCREATIVE_CONTINUE 2272 +#define IDS_CONFIRM_START_HOST_PRIVILEGES 2273 +#define IDS_CONNECTION_LOST_LIVE 2274 +#define IDS_CONNECTION_LOST_LIVE_NO_EXIT 2275 +#define IDS_AWARD_AVATAR1 2276 +#define IDS_AWARD_AVATAR2 2277 +#define IDS_AWARD_AVATAR3 2278 +#define IDS_AWARD_THEME 2279 +#define IDS_UNLOCK_ACHIEVEMENT_TEXT 2280 +#define IDS_UNLOCK_AVATAR_TEXT 2281 +#define IDS_UNLOCK_GAMERPIC_TEXT 2282 +#define IDS_UNLOCK_THEME_TEXT 2283 +#define IDS_UNLOCK_ACCEPT_INVITE 2284 +#define IDS_UNLOCK_GUEST_TEXT 2285 +#define IDS_LEADERBOARD_GAMERTAG 2286 +#define IDS_GROUPNAME_POTIONS_480 2287 +#define IDS_RETURNEDTOTITLESCREEN_TEXT 2288 +#define IDS_TRIALOVER_TEXT 2289 +#define IDS_FATAL_ERROR_TEXT 2290 +#define IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT 2291 +#define IDS_NO_MULTIPLAYER_PRIVILEGE_HOST_TEXT 2292 +#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_SINGLE_LOCAL 2293 +#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_ALL_LOCAL 2294 +#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_REMOTE 2295 +#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE 2296 +#define IDS_SAVE_ICON_MESSAGE 2297 +#define IDS_GAMEOPTION_HOST_PRIVILEGES 2298 +#define IDS_CHECKBOX_DISPLAY_SPLITSCREENGAMERTAGS 2299 +#define IDS_ACHIEVEMENTS 2300 +#define IDS_LABEL_GAMERTAGS 2301 +#define IDS_IN_GAME_GAMERTAGS 2302 +#define IDS_SOCIAL_DEFAULT_DESCRIPTION 2303 +#define IDS_TITLE_UPDATE_NAME 2304 +#define IDS_PLATFORM_NAME 2305 +#define IDS_BACK_BUTTON 2306 +#define IDS_HOST_OPTION_DISABLES_ACHIEVEMENTS 2307 +#define IDS_KICK_PLAYER_DESCRIPTION 2308 +#define IDS_USING_TRIAL_TEXUREPACK_WARNING 2309 +#define IDS_WORLD_SIZE_TITLE_SMALL 2310 +#define IDS_WORLD_SIZE_TITLE_MEDIUM 2311 +#define IDS_WORLD_SIZE_TITLE_LARGE 2312 +#define IDS_WORLD_SIZE_TITLE_CLASSIC 2313 +#define IDS_WORLD_SIZE 2314 +#define IDS_GAMEOPTION_WORLD_SIZE 2315 +#define IDS_DISABLE_SAVING 2316 +#define IDS_GAMEOPTION_DISABLE_SAVING 2317 +#define IDS_RICHPRESENCE_GAMESTATE 2318 +#define IDS_RICHPRESENCE_IDLE 2319 +#define IDS_RICHPRESENCE_MENUS 2320 +#define IDS_RICHPRESENCE_MULTIPLAYER 2321 +#define IDS_RICHPRESENCE_MULTIPLAYEROFFLINE 2322 +#define IDS_RICHPRESENCE_MULTIPLAYER_1P 2323 +#define IDS_RICHPRESENCE_MULTIPLAYER_1POFFLINE 2324 +#define IDS_RICHPRESENCESTATE_BLANK 2325 +#define IDS_RICHPRESENCESTATE_RIDING_PIG 2326 +#define IDS_RICHPRESENCESTATE_RIDING_MINECART 2327 +#define IDS_RICHPRESENCESTATE_BOATING 2328 +#define IDS_RICHPRESENCESTATE_FISHING 2329 +#define IDS_RICHPRESENCESTATE_CRAFTING 2330 +#define IDS_RICHPRESENCESTATE_FORGING 2331 +#define IDS_RICHPRESENCESTATE_NETHER 2332 +#define IDS_RICHPRESENCESTATE_CD 2333 +#define IDS_RICHPRESENCESTATE_MAP 2334 +#define IDS_RICHPRESENCESTATE_ENCHANTING 2335 +#define IDS_RICHPRESENCESTATE_BREWING 2336 +#define IDS_RICHPRESENCESTATE_ANVIL 2337 +#define IDS_RICHPRESENCESTATE_TRADING 2338 diff --git a/Minecraft.World/Biome.cpp b/Minecraft.World/Biome.cpp index f0f440bb..3dba97a0 100644 --- a/Minecraft.World/Biome.cpp +++ b/Minecraft.World/Biome.cpp @@ -42,6 +42,9 @@ Biome *Biome::smallerExtremeHills = nullptr; Biome *Biome::jungle = nullptr; Biome *Biome::jungleHills = nullptr; +Biome *Biome::savanna = nullptr; +Biome *Biome::roofedForest = nullptr; + void Biome::staticCtor() { @@ -78,6 +81,10 @@ void Biome::staticCtor() Biome::jungle = (new JungleBiome(21))->setColor(0x537b09)->setName(L"Jungle")->setLeafColor(0x537b09)->setTemperatureAndDownfall(1.2f, 0.9f)->setDepthAndScale(0.2f, 0.4f)->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_Jungle, eMinecraftColour_Foliage_Jungle, eMinecraftColour_Water_Jungle,eMinecraftColour_Sky_Jungle); Biome::jungleHills = (new JungleBiome(22))->setColor(0x2c4205)->setName(L"JungleHills")->setLeafColor(0x537b09)->setTemperatureAndDownfall(1.2f, 0.9f)->setDepthAndScale(1.8f, 0.5f)->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_JungleHills, eMinecraftColour_Foliage_JungleHills, eMinecraftColour_Water_JungleHills,eMinecraftColour_Sky_JungleHills); + + Biome::savanna = (new Biome(35))->setName(L"Savanna")->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_Savanna, eMinecraftColour_Foliage_Savanna, eMinecraftColour_Sky_Desert, eMinecraftColour_Sky_Desert); + Biome::roofedForest = (new Biome(29))->setName(L"Roofed Forest")->setLeafFoliageWaterSkyColor(eMinecraftColour_Grass_RoofedForest, eMinecraftColour_Foliage_RoofedForest, eMinecraftColour_Water_Forest, eMinecraftColour_Sky_Forest); + } Biome::Biome(int id) : id(id) diff --git a/Minecraft.World/Biome.h b/Minecraft.World/Biome.h index f7de3166..3b681169 100644 --- a/Minecraft.World/Biome.h +++ b/Minecraft.World/Biome.h @@ -46,6 +46,8 @@ public: static Biome *smallerExtremeHills; static Biome *jungle; static Biome *jungleHills; + static Biome *savanna; + static Biome *roofedForest; static const int BIOME_COUNT = 23; // 4J Stu added diff --git a/Minecraft.World/DarkOakFeature.cpp b/Minecraft.World/DarkOakFeature.cpp new file mode 100644 index 00000000..30759bce --- /dev/null +++ b/Minecraft.World/DarkOakFeature.cpp @@ -0,0 +1,102 @@ +#include "stdafx.h" +#include "DarkOakFeature.h" +#include "net.minecraft.world.level.h" +#include "net.minecraft.world.level.tile.h" +#include "TreeTile2.h" +#include "LeafTile2.h" + +DarkOakFeature::DarkOakFeature(bool doUpdate) : Feature(doUpdate) +{ + this->baseHeight = 6; +} + +bool DarkOakFeature::place(Level *level, Random *random, int x, int y, int z) +{ + int treeHeight = random->nextInt(3) + baseHeight; + + + if (y < 1 || y + treeHeight + 1 > Level::maxBuildHeight) return false; + + for (int ix = 0; ix <= 1; ix++) { + for (int iz = 0; iz <= 1; iz++) { + int below = level->getTile(x + ix, y - 1, z + iz); + if (below != Tile::grass_Id && below != Tile::dirt_Id) return false; + } + } + + + int dx = random->nextInt(3) - 1; + int dz = random->nextInt(3) - 1; + int bendStart = treeHeight - random->nextInt(4); + int bendLength = 2 - random->nextInt(3); + + int curX = x; + int curZ = z; + + + for (int h = 0; h < treeHeight; h++) + { + if (h >= bendStart && bendLength > 0) + { + curX += dx; + curZ += dz; + bendLength--; + } + + placeTrunk2x2(level, curX, y + h, curZ); + } + + + int topY = y + treeHeight; + for (int lx = -2; lx <= 3; lx++) + { + for (int lz = -2; lz <= 3; lz++) + { + for (int ly = -1; ly <= 1; ly++) + { + + if ((lx == -2 && lz == -2) || (lx == 3 && lz == -2) || (lx == -2 && lz == 3) || (lx == 3 && lz == 3)) + if (ly != 0) continue; + + placeLeaf(level, curX + lx, topY + ly, curZ + lz); + } + } + } + + + for (int rx = -1; rx <= 2; rx++) + { + for (int rz = -1; rz <= 2; rz++) + { + if ((rx < 0 || rx > 1 || rz < 0 || rz > 1) && random->nextInt(3) == 0) + { + int branchLen = random->nextInt(3) + 2; + for (int bh = 0; bh < branchLen; bh++) + { + placeBlock(level, x + rx, topY - bh - 1, z + rz, Tile::tree2Trunk_Id, TreeTile2::DARK_TRUNK); + } + } + } + } + + return true; +} + +void DarkOakFeature::placeTrunk2x2(Level *level, int x, int y, int z) +{ + + placeBlock(level, x, y, z, Tile::tree2Trunk_Id, TreeTile2::DARK_TRUNK); + placeBlock(level, x + 1, y, z, Tile::tree2Trunk_Id, TreeTile2::DARK_TRUNK); + placeBlock(level, x, y, z + 1, Tile::tree2Trunk_Id, TreeTile2::DARK_TRUNK); + placeBlock(level, x + 1, y, z + 1, Tile::tree2Trunk_Id, TreeTile2::DARK_TRUNK); +} + +void DarkOakFeature::placeLeaf(Level *level, int x, int y, int z) +{ + int tile = level->getTile(x, y, z); + if (tile == 0 || tile == Tile::leaves_Id || tile == Tile::leaves2_Id) + { + + placeBlock(level, x, y, z, Tile::leaves2_Id, 1); + } +} \ No newline at end of file diff --git a/Minecraft.World/DarkOakFeature.h b/Minecraft.World/DarkOakFeature.h new file mode 100644 index 00000000..dfce2405 --- /dev/null +++ b/Minecraft.World/DarkOakFeature.h @@ -0,0 +1,17 @@ +#pragma once +#pragma once +#include "Feature.h" + +class DarkOakFeature : public Feature +{ +public: + DarkOakFeature(bool doUpdate); + virtual bool place(Level *level, Random *random, int x, int y, int z); + +private: + int baseHeight; + + void placeTrunk2x2(Level *level, int x, int y, int z); + + void placeLeaf(Level *level, int x, int y, int z); +}; \ No newline at end of file diff --git a/Minecraft.World/LeafTile2.cpp b/Minecraft.World/LeafTile2.cpp index e9487f53..5a38a6d5 100644 --- a/Minecraft.World/LeafTile2.cpp +++ b/Minecraft.World/LeafTile2.cpp @@ -10,8 +10,8 @@ #include "IconRegister.h" const unsigned int LeafTile2::LEAF2_NAMES[LEAF2_NAMES_SIZE] = { - IDS_TILE_LEAVES_BIRCH, - IDS_TILE_LEAVES_SPRUCE + IDS_TILE_LEAVES_ACACIA, + IDS_TILE_LEAVES_DARK_OAK }; const wstring LeafTile2::TEXTURES[2][2] = { diff --git a/Minecraft.World/LeafTile2.h b/Minecraft.World/LeafTile2.h index 35257203..9f771e7b 100644 --- a/Minecraft.World/LeafTile2.h +++ b/Minecraft.World/LeafTile2.h @@ -24,10 +24,10 @@ public: virtual unsigned int getDescriptionId(int iData = -1); virtual void registerIcons(IconRegister *iconRegister); - // Override per la colorazione del bioma + virtual int getColor(int data); virtual int getColor(LevelSource *level, int x, int y, int z, int data); - // Override per permettere alle cesoie di droppare il blocco giusto (leaves2) + virtual void playerDestroy(Level *level, shared_ptr player, int x, int y, int z, int data); }; \ No newline at end of file diff --git a/Minecraft.World/Minecraft.World.vcxproj b/Minecraft.World/Minecraft.World.vcxproj index 9094877f..5413f130 100644 --- a/Minecraft.World/Minecraft.World.vcxproj +++ b/Minecraft.World/Minecraft.World.vcxproj @@ -2466,6 +2466,7 @@ + @@ -2716,6 +2717,8 @@ + + @@ -3546,6 +3549,7 @@ + @@ -3653,6 +3657,8 @@ + + diff --git a/Minecraft.World/Minecraft.World.vcxproj.filters b/Minecraft.World/Minecraft.World.vcxproj.filters index 7f1f0dc7..5a90c307 100644 --- a/Minecraft.World/Minecraft.World.vcxproj.filters +++ b/Minecraft.World/Minecraft.World.vcxproj.filters @@ -821,6 +821,9 @@ + + + @@ -1811,6 +1814,9 @@ + + + diff --git a/Minecraft.World/Sapling2.cpp b/Minecraft.World/Sapling2.cpp new file mode 100644 index 00000000..36782729 --- /dev/null +++ b/Minecraft.World/Sapling2.cpp @@ -0,0 +1,141 @@ +#include "stdafx.h" +#include "net.minecraft.world.level.h" +#include "net.minecraft.world.level.tile.h" +#include "net.minecraft.world.level.levelgen.feature.h" +#include "net.minecraft.world.h" + +#include "SavannaTreeFeature.h" +#include "DarkOakFeature.h" +#include "Sapling2.h" + + +int Sapling2::SAPLING_NAMES[SAPLING_NAMES_SIZE] = { + IDS_TILE_SAPLING_ACACIA, + IDS_TILE_SAPLING_DARK_OAK +}; + +const wstring Sapling2::TEXTURE_NAMES[] = { L"sapling_acacia", L"sapling_dark_oak" }; + +Sapling2::Sapling2(int id) : Bush(id) +{ + this->updateDefaultShape(); + icons = nullptr; +} + +void Sapling2::updateDefaultShape() +{ + float ss = 0.4f; + this->setShape(0.5f - ss, 0, 0.5f - ss, 0.5f + ss, ss * 2, 0.5f + ss); +} + +bool Sapling2::isSapling(Level *level, int x, int y, int z, int type) +{ + return level->getTile(x, y, z) == this->id && (level->getData(x, y, z) & TYPE_MASK) == type; +} + +void Sapling2::tick(Level *level, int x, int y, int z, Random *random) +{ + if (level->isClientSide) return; + Bush::tick(level, x, y, z, random); + + if (level->getRawBrightness(x, y + 1, z) >= 9 && random->nextInt(7) == 0) + { + this->growTree(level, x, y, z, random); + } +} + +Icon *Sapling2::getTexture(int face, int data) +{ + + if (icons == nullptr) + { + + return nullptr; + } + + int type = data & TYPE_MASK; + if (type < 0 || type >= SAPLING_NAMES_SIZE) type = 0; + return icons[type]; +} + +void Sapling2::registerIcons(IconRegister *iconRegister) +{ + icons = new Icon*[SAPLING_NAMES_SIZE]; + for (int i = 0; i < SAPLING_NAMES_SIZE; ++i) + { + icons[i] = iconRegister->registerIcon(TEXTURE_NAMES[i]); + } +} + +void Sapling2::growTree(Level *level, int x, int y, int z, Random *random) +{ + int data = level->getData(x, y, z) & TYPE_MASK; + Feature *f = nullptr; + int ox = 0, oz = 0; + bool multiblock = false; + + if (data == TYPE_ACACIA) + { + f = new SavannaTreeFeature(true); + } + else if (data == TYPE_DARK_OAK) + { + + for (ox = 0; ox >= -1; ox--) + { + for (oz = 0; oz >= -1; oz--) + { + if (isSapling(level, x + ox, y, z + oz, TYPE_DARK_OAK) && + isSapling(level, x + ox + 1, y, z + oz, TYPE_DARK_OAK) && + isSapling(level, x + ox, y, z + oz + 1, TYPE_DARK_OAK) && + isSapling(level, x + ox + 1, y, z + oz + 1, TYPE_DARK_OAK)) + { + f = new DarkOakFeature(true); + multiblock = true; + break; + } + } + if (f != nullptr) break; + } + if (f == nullptr) return; + } + + // Deletion + if (multiblock) + { + level->setTileAndData(x + ox, y, z + oz, 0, 0, Tile::UPDATE_NONE); + level->setTileAndData(x + ox + 1, y, z + oz, 0, 0, Tile::UPDATE_NONE); + level->setTileAndData(x + ox, y, z + oz + 1, 0, 0, Tile::UPDATE_NONE); + level->setTileAndData(x + ox + 1, y, z + oz + 1, 0, 0, Tile::UPDATE_NONE); + } + else + { + level->setTileAndData(x, y, z, 0, 0, Tile::UPDATE_NONE); + } + + // Generation + if (f != nullptr) + { + if (!f->place(level, random, x + ox, y, z + oz)) + { + if (multiblock) + { + level->setTileAndData(x + ox, y, z + oz, id, data, Tile::UPDATE_NONE); + level->setTileAndData(x + ox + 1, y, z + oz, id, data, Tile::UPDATE_NONE); + level->setTileAndData(x + ox, y, z + oz + 1, id, data, Tile::UPDATE_NONE); + level->setTileAndData(x + ox + 1, y, z + oz + 1, id, data, Tile::UPDATE_NONE); + } + else + { + level->setTileAndData(x, y, z, id, data, Tile::UPDATE_NONE); + } + } + delete f; + } +} + +bool Sapling2::fertilize(Level *level, int x, int y, int z) +{ + this->growTree(level, x, y, z, level->random); + return true; +} \ No newline at end of file diff --git a/Minecraft.World/Sapling2.h b/Minecraft.World/Sapling2.h new file mode 100644 index 00000000..fb988cb4 --- /dev/null +++ b/Minecraft.World/Sapling2.h @@ -0,0 +1,37 @@ +#pragma once + +#include "LeafTile2.h" +#include "Bush.h" +#include "Sapling.h" + +class Sapling2 : public Bush +{ + friend class Tile; +public: + + static const int TYPE_ACACIA = 0; + static const int TYPE_DARK_OAK = 1; + + static const int SAPLING_NAMES_SIZE = 2; + static int SAPLING_NAMES[SAPLING_NAMES_SIZE]; + +private: + static const wstring TEXTURE_NAMES[]; + Icon **icons; + + static const int TYPE_MASK = 7; + static const int AGE_BIT = 8; + +protected: + Sapling2(int id); + + bool isSapling(Level *level, int x, int y, int z, int type); +public: + virtual void updateDefaultShape(); + virtual void tick(Level *level, int x, int y, int z, Random *random); + virtual Icon *getTexture(int face, int data); + void growTree(Level *level, int x, int y, int z, Random *random); + virtual bool fertilize(Level *level, int x, int y, int z); + + virtual void registerIcons(IconRegister *iconRegister); +}; \ No newline at end of file diff --git a/Minecraft.World/SavannaTreeFeature.cpp b/Minecraft.World/SavannaTreeFeature.cpp new file mode 100644 index 00000000..302a788f --- /dev/null +++ b/Minecraft.World/SavannaTreeFeature.cpp @@ -0,0 +1,51 @@ +#include "stdafx.h" +#include "SavannaTreeFeature.h" +#include "net.minecraft.world.level.tile.h" +#include "TreeTile2.h" +#include "LeafTile2.h" + +SavannaTreeFeature::SavannaTreeFeature(bool doUpdate) : Feature(doUpdate) { + + this->baseHeight = 5; +} + +bool SavannaTreeFeature::place(Level* level, Random* random, int x, int y, int z) { + int height = random->nextInt(3) + baseHeight; + int ground = level->getTile(x, y - 1, z); + if (ground != Tile::grass_Id && ground != Tile::dirt_Id) return false; + + int curX = x; + int curZ = z; + int curY = y; + + + int dx = random->nextInt(3) - 1; + int dz = random->nextInt(3) - 1; + + for (int h = 0; h < height; ++h) { + + if (h >= height / 2 && (dx != 0 || dz != 0)) { + curX += dx; + curZ += dz; + } + placeBlock(level, curX, curY + h, curZ, Tile::tree2Trunk_Id, TreeTile2::ACACIA_TRUNK); + + + if (h == height - 1) { + for (int lx = -2; lx <= 2; ++lx) { + for (int lz = -2; lz <= 2; ++lz) { + if (abs(lx) == 2 && abs(lz) == 2) continue; + placeLeaf(level, curX + lx, curY + h, curZ + lz); + } + } + } + } + return true; +} + +void SavannaTreeFeature::placeLeaf(Level* level, int x, int y, int z) { + int t = level->getTile(x, y, z); + if (t == 0 || t == Tile::leaves_Id) { + placeBlock(level, x, y, z, Tile::leaves2_Id, 0); + } +} \ No newline at end of file diff --git a/Minecraft.World/SavannaTreeFeature.h b/Minecraft.World/SavannaTreeFeature.h new file mode 100644 index 00000000..c7b31bfa --- /dev/null +++ b/Minecraft.World/SavannaTreeFeature.h @@ -0,0 +1,12 @@ +#pragma once +#include "Feature.h" +#include "Level.h" + +class SavannaTreeFeature : public Feature { +public: + SavannaTreeFeature(bool doUpdate); + virtual bool place(Level* level, Random* random, int x, int y, int z); +private: + int baseHeight; + void placeLeaf(Level* level, int x, int y, int z); +}; \ No newline at end of file diff --git a/Minecraft.World/Tile.cpp b/Minecraft.World/Tile.cpp index 00d6d783..977ce3d7 100644 --- a/Minecraft.World/Tile.cpp +++ b/Minecraft.World/Tile.cpp @@ -51,6 +51,7 @@ Tile *Tile::dirt = nullptr; Tile *Tile::cobblestone = nullptr; Tile *Tile::wood = nullptr; Tile *Tile::sapling = nullptr; +Tile *Tile::sapling2 = nullptr; Tile *Tile::unbreakable = nullptr; LiquidTile *Tile::water = nullptr; Tile *Tile::calmWater = nullptr; @@ -297,6 +298,7 @@ void Tile::staticCtor() Tile::cobblestone = (new Tile(4, Material::stone)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_structblock, Item::eMaterial_stone)->setDestroyTime(2.0f)->setExplodeable(10)->setSoundType(Tile::SOUND_STONE)->setIconName(L"cobblestone")->setDescriptionId(IDS_TILE_STONE_BRICK)->setUseDescriptionId(IDS_DESC_STONE_BRICK); Tile::wood = (new WoodTile(5)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_structwoodstuff, Item::eMaterial_wood)->setDestroyTime(2.0f)->setExplodeable(5)->setSoundType(Tile::SOUND_WOOD)->setIconName(L"planks")->setDescriptionId(IDS_TILE_OAKWOOD_PLANKS)->sendTileData()->setUseDescriptionId(IDS_DESC_WOODENPLANKS); Tile::sapling = (new Sapling(6)) ->setDestroyTime(0.0f)->setSoundType(Tile::SOUND_GRASS)->setIconName(L"sapling")->setDescriptionId(IDS_TILE_SAPLING)->sendTileData()->setUseDescriptionId(IDS_DESC_SAPLING)->disableMipmap(); + Tile::sapling2 = (new Sapling2(199)) ->setDestroyTime(0.0f)->setSoundType(Tile::SOUND_GRASS)->setIconName(L"sapling2")->setDescriptionId(IDS_TILE_SAPLING)->sendTileData()->setUseDescriptionId(IDS_DESC_SAPLING)->disableMipmap(); Tile::unbreakable = (new Tile(7, Material::stone)) ->setIndestructible()->setExplodeable(6000000)->setSoundType(Tile::SOUND_STONE)->setIconName(L"bedrock")->setDescriptionId(IDS_TILE_BEDROCK)->setNotCollectStatistics()->setUseDescriptionId(IDS_DESC_BEDROCK); Tile::water = static_cast((new LiquidTileDynamic(8, Material::water))->setDestroyTime(100.0f)->setLightBlock(3)->setIconName(L"water_flow")->setDescriptionId(IDS_TILE_WATER)->setNotCollectStatistics()->sendTileData()->setUseDescriptionId(IDS_DESC_WATER)); Tile::calmWater = (new LiquidTileStatic(9, Material::water)) ->setDestroyTime(100.0f)->setLightBlock(3)->setIconName(L"water_still")->setDescriptionId(IDS_TILE_WATER)->setNotCollectStatistics()->sendTileData()->setUseDescriptionId(IDS_DESC_WATER); @@ -483,8 +485,8 @@ void Tile::staticCtor() Tile::packed_ice = (new PackedIceTile(174))->setDestroyTime(0.5f)->setSoundType(SOUND_GLASS)->setIconName(L"packed_ice")->setDescriptionId(IDS_TILE_ICE)->setUseDescriptionId(IDS_DESC_ICE); Tile::invertedDaylightDetector = static_cast((new DaylightDetectorTile(178, true))->setDestroyTime(0.2f)->setSoundType(SOUND_WOOD)->setIconName(L"daylight_detector")->setDescriptionId(IDS_TILE_DAYLIGHT_DETECTOR)->setUseDescriptionId(IDS_DESC_DAYLIGHT_DETECTOR)); - Tile::red_sandstone = (new RedSandStoneTile(179))->setBaseItemTypeAndMaterial(Item::eBaseItemType_structblock, Item::eMaterial_sand)->setSoundType(Tile::SOUND_STONE)->setDestroyTime(0.8f)->sendTileData()->setIconName(L"red_sandstone")->setDescriptionId(IDS_TILE_SANDSTONE)->setUseDescriptionId(IDS_DESC_SANDSTONE)->sendTileData(); - Tile::stairs_red_sandstone = (new StairTile(180, Tile::red_sandstone, 0))->setBaseItemTypeAndMaterial(Item::eBaseItemType_stairs, Item::eMaterial_sand)->setIconName(L"stairsRedSandstone")->setDescriptionId(IDS_TILE_STAIRS_SANDSTONE)->sendTileData()->setUseDescriptionId(IDS_DESC_STAIRS); + Tile::red_sandstone = (new RedSandStoneTile(179))->setBaseItemTypeAndMaterial(Item::eBaseItemType_structblock, Item::eMaterial_sand)->setSoundType(Tile::SOUND_STONE)->setDestroyTime(0.8f)->sendTileData()->setIconName(L"red_sandstone")->setDescriptionId(IDS_TILE_RED_SANDSTONE)->setUseDescriptionId(IDS_DESC_SANDSTONE)->sendTileData(); + Tile::stairs_red_sandstone = (new StairTile(180, Tile::red_sandstone, 0))->setBaseItemTypeAndMaterial(Item::eBaseItemType_stairs, Item::eMaterial_sand)->setIconName(L"stairsRedSandstone")->setDescriptionId(IDS_TILE_STAIRS_RED_SANDSTONE)->sendTileData()->setUseDescriptionId(IDS_DESC_STAIRS); Tile::spruceGate = (new FenceGateTile(183))->setBaseItemTypeAndMaterial(Item::eBaseItemType_fenceGate, Item::eMaterial_sprucewood)->setDestroyTime(2.0f)->setExplodeable(5)->setSoundType(SOUND_WOOD)->setIconName(L"planks_spruce")->setDescriptionId(IDS_TILE_SPRUCE_GATE)->sendTileData()->setUseDescriptionId(IDS_DESC_FENCE_GATE); Tile::birchGate = (new FenceGateTile(184))->setBaseItemTypeAndMaterial(Item::eBaseItemType_fenceGate, Item::eMaterial_birchwood)->setDestroyTime(2.0f)->setExplodeable(5)->setSoundType(SOUND_WOOD)->setIconName(L"planks_birch")->setDescriptionId(IDS_TILE_BIRCH_GATE)->sendTileData()->setUseDescriptionId(IDS_DESC_FENCE_GATE); @@ -524,6 +526,7 @@ void Tile::staticCtor() Item::items[woodSlabHalf_Id] = ( new StoneSlabTileItem(Tile::woodSlabHalf_Id - 256, Tile::woodSlabHalf, Tile::woodSlab, false))->setIconName(L"woodSlab")->setDescriptionId(IDS_DESC_WOODSLAB)->setUseDescriptionId(IDS_DESC_WOODSLAB); Item::items[woodSlab_Id] = ( new StoneSlabTileItem(Tile::woodSlab_Id - 256, Tile::woodSlabHalf, Tile::woodSlab, true))->setIconName(L"woodSlab")->setDescriptionId(IDS_DESC_WOODSLAB)->setUseDescriptionId(IDS_DESC_WOODSLAB); Item::items[sapling_Id] = ( new MultiTextureTileItem(Tile::sapling_Id - 256, Tile::sapling, Sapling::SAPLING_NAMES, 4) )->setIconName(L"sapling")->setDescriptionId(IDS_TILE_SAPLING)->setUseDescriptionId(IDS_DESC_SAPLING); + Item::items[sapling2_Id] = ( new MultiTextureTileItem(Tile::sapling2_Id - 256, Tile::sapling2, Sapling2::SAPLING_NAMES, 2) )->setIconName(L"sapling2")->setDescriptionId(IDS_TILE_SAPLING)->setUseDescriptionId(IDS_DESC_SAPLING); Item::items[leaves_Id] = ( new LeafTileItem(Tile::leaves_Id - 256) )->setIconName(L"leaves")->setDescriptionId(IDS_TILE_LEAVES)->setUseDescriptionId(IDS_DESC_LEAVES); Item::items[leaves2_Id] = ( new LeafTileItem(Tile::leaves2_Id - 256) )->setIconName(L"leaves_acacia")->setDescriptionId(IDS_TILE_LEAVES)->setUseDescriptionId(IDS_DESC_LEAVES); Item::items[vine_Id] = ( new ColoredTileItem(Tile::vine_Id - 256, false))->setDescriptionId(IDS_TILE_VINE)->setUseDescriptionId(IDS_DESC_VINE); @@ -1636,6 +1639,7 @@ const int Tile::dirt_Id; // 4 const int Tile::wood_Id; const int Tile::sapling_Id; +const int Tile::sapling2_Id; const int Tile::unbreakable_Id; const int Tile::water_Id; const int Tile::calmWater_Id; diff --git a/Minecraft.World/Tile.h b/Minecraft.World/Tile.h index d586c079..75857b65 100644 --- a/Minecraft.World/Tile.h +++ b/Minecraft.World/Tile.h @@ -193,6 +193,7 @@ public: static const int cobblestone_Id = 4; static const int wood_Id = 5; static const int sapling_Id = 6; + static const int sapling2_Id = 199; static const int unbreakable_Id = 7; static const int water_Id = 8; static const int calmWater_Id = 9; @@ -402,6 +403,7 @@ public: static Tile *cobblestone; static Tile *wood; static Tile *sapling; + static Tile *sapling2; static Tile *unbreakable; static LiquidTile *water; static Tile *calmWater; diff --git a/Minecraft.World/net.minecraft.world.level.tile.h b/Minecraft.World/net.minecraft.world.level.tile.h index f00cb637..e7c7707b 100644 --- a/Minecraft.World/net.minecraft.world.level.tile.h +++ b/Minecraft.World/net.minecraft.world.level.tile.h @@ -92,6 +92,7 @@ #include "RotatedPillarTile.h" #include "SandStoneTile.h" #include "Sapling.h" +#include "Sapling2.h" #include "SignTile.h" #include "SkullTile.h" #include "SmoothStoneBrickTile.h"