From b3feddfef372618c8a9d7a0abcaf18cfad866c18 Mon Sep 17 00:00:00 2001 From: daoge <3523206925@qq.com> Date: Tue, 3 Mar 2026 03:04:10 +0800 Subject: feat: TU19 (Dec 2014) Features & Content (#155) * try to resolve merge conflict * feat: TU19 (Dec 2014) Features & Content (#32) * December 2014 files * Working release build * Fix compilation issues * Add sound to Windows64Media * Add DLC content and force Tutorial DLC * Revert "Add DLC content and force Tutorial DLC" This reverts commit 97a43994725008e35fceb984d5549df9c8cea470. * Disable broken light packing * Disable breakpoint during DLC texture map load Allows DLC loading but the DLC textures are still broken * Fix post build not working * ... * fix vs2022 build * fix cmake build --------- Co-authored-by: Loki --- Minecraft.Client/Common/App_Defines.h | 28 +- Minecraft.Client/Common/App_enums.h | 69 +- Minecraft.Client/Common/App_structs.h | 4 + .../Common/Audio/Consoles_SoundEngine.cpp | 39 + .../Common/Audio/Consoles_SoundEngine.h | 19 + Minecraft.Client/Common/Audio/SoundEngine.cpp | 16 + Minecraft.Client/Common/Audio/SoundNames.cpp | 72 + Minecraft.Client/Common/BuildVer.h | 8 +- Minecraft.Client/Common/Colours/ColourTable.cpp | 15 + Minecraft.Client/Common/Console_Debug_enum.h | 6 +- Minecraft.Client/Common/Consoles_App.cpp | 1307 ++-- Minecraft.Client/Common/Consoles_App.h | 106 +- Minecraft.Client/Common/DLC/DLCManager.cpp | 26 +- Minecraft.Client/Common/DLC/DLCManager.h | 2 + Minecraft.Client/Common/DLC/DLCPack.cpp | 22 +- Minecraft.Client/Common/DLC/DLCPack.h | 2 + Minecraft.Client/Common/DLC/DLCTextureFile.cpp | 1 + .../Common/GameRules/ConsoleGenerateStructure.h | 4 + .../Common/GameRules/ConsoleSchematicFile.cpp | 16 +- .../Common/GameRules/GameRuleManager.cpp | 50 +- .../Common/GameRules/LevelGenerationOptions.cpp | 241 +- .../Common/GameRules/LevelGenerationOptions.h | 12 +- Minecraft.Client/Common/GameRules/StartFeature.cpp | 14 +- Minecraft.Client/Common/GameRules/StartFeature.h | 4 +- .../XboxStructureActionPlaceContainer.cpp | 6 +- .../GameRules/XboxStructureActionPlaceSpawner.cpp | 4 +- .../Common/Leaderboards/LeaderboardInterface.cpp | 88 + .../Common/Leaderboards/LeaderboardInterface.h | 35 + .../Common/Leaderboards/SonyLeaderboardManager.cpp | 1131 ++++ .../Common/Leaderboards/SonyLeaderboardManager.h | 133 + Minecraft.Client/Common/Leaderboards/base64.cpp | 131 + Minecraft.Client/Common/Leaderboards/base64.h | 7 + Minecraft.Client/Common/Media/BeaconMenu1080.swf | Bin 0 -> 18172 bytes Minecraft.Client/Common/Media/BeaconMenu480.swf | Bin 0 -> 18158 bytes Minecraft.Client/Common/Media/BeaconMenu720.swf | Bin 0 -> 18157 bytes .../Common/Media/BeaconMenuSplit1080.swf | Bin 0 -> 18124 bytes .../Common/Media/BeaconMenuSplit720.swf | Bin 0 -> 18180 bytes Minecraft.Client/Common/Media/BeaconMenuVita.swf | Bin 0 -> 18155 bytes Minecraft.Client/Common/Media/Controls1080.swf | Bin 17511 -> 18094 bytes .../Common/Media/Crafting2x2Menu1080.swf | Bin 18508 -> 19943 bytes .../Common/Media/Crafting2x2MenuVita.swf | Bin 19461 -> 19522 bytes .../Common/Media/Crafting3x3MenuSplit1080.swf | Bin 18310 -> 19326 bytes .../Common/Media/CreateWorldMenu1080.swf | Bin 22989 -> 23717 bytes .../Common/Media/CreateWorldMenu480.swf | Bin 19894 -> 23724 bytes .../Common/Media/CreateWorldMenu720.swf | Bin 20545 -> 23807 bytes .../Common/Media/CreateWorldMenuVita.swf | Bin 22081 -> 23720 bytes Minecraft.Client/Common/Media/CreativeMenuVita.swf | Bin 18748 -> 19302 bytes .../Common/Media/FireworksMenu1080.swf | Bin 0 -> 17487 bytes Minecraft.Client/Common/Media/FireworksMenu480.swf | Bin 0 -> 17483 bytes Minecraft.Client/Common/Media/FireworksMenu720.swf | Bin 0 -> 17482 bytes .../Common/Media/FireworksMenuSplit1080.swf | Bin 0 -> 17500 bytes .../Common/Media/FireworksMenuSplit720.swf | Bin 0 -> 17474 bytes .../Common/Media/FireworksMenuVita.swf | Bin 0 -> 17479 bytes .../Common/Media/Graphics/Beacon_1.png | Bin 0 -> 326 bytes .../Common/Media/Graphics/Beacon_2.png | Bin 0 -> 364 bytes .../Common/Media/Graphics/Beacon_3.png | Bin 0 -> 379 bytes .../Common/Media/Graphics/Beacon_4.png | Bin 0 -> 331 bytes .../Common/Media/Graphics/Beacon_Button_Cross.png | Bin 0 -> 305 bytes .../Media/Graphics/Beacon_Button_Disabled.png | Bin 0 -> 138 bytes .../Common/Media/Graphics/Beacon_Button_Hover.png | Bin 0 -> 142 bytes .../Common/Media/Graphics/Beacon_Button_Normal.png | Bin 0 -> 137 bytes .../Media/Graphics/Beacon_Button_Pressed.png | Bin 0 -> 139 bytes .../Common/Media/Graphics/Beacon_Button_Tick.png | Bin 0 -> 241 bytes .../Media/Graphics/HUD/Health_Full_Absorb.png | Bin 0 -> 193 bytes .../Media/Graphics/HUD/Health_Full_Wither.png | Bin 0 -> 248 bytes .../Graphics/HUD/Health_Full_Wither_Flash.png | Bin 0 -> 197 bytes .../Media/Graphics/HUD/Health_Half_Absorb.png | Bin 0 -> 177 bytes .../Media/Graphics/HUD/Health_Half_Wither.png | Bin 0 -> 216 bytes .../Graphics/HUD/Health_Half_Wither_Flash.png | Bin 0 -> 194 bytes .../Common/Media/Graphics/HUD/HorseHealth_Full.png | Bin 0 -> 224 bytes .../Media/Graphics/HUD/HorseHealth_Full_Flash.png | Bin 0 -> 230 bytes .../Common/Media/Graphics/HUD/HorseHealth_Half.png | Bin 0 -> 204 bytes .../Media/Graphics/HUD/HorseHealth_Half_Flash.png | Bin 0 -> 202 bytes .../Media/Graphics/HUD/HorseJump_bar_empty.png | Bin 0 -> 339 bytes .../Media/Graphics/HUD/HorseJump_bar_full.png | Bin 0 -> 1799 bytes .../Common/Media/Graphics/Horse_Armor_Slot.png | Bin 0 -> 198 bytes .../Common/Media/Graphics/Horse_Saddle_Slot.png | Bin 0 -> 219 bytes .../Media/Graphics/HowToPlay/HowToPlay_Beacon.png | Bin 0 -> 17277 bytes .../Graphics/HowToPlay/HowToPlay_Beacon_Small.png | Bin 0 -> 11848 bytes .../Graphics/HowToPlay/HowToPlay_Fireworks.png | Bin 0 -> 19522 bytes .../HowToPlay/HowToPlay_Fireworks_Small.png | Bin 0 -> 11541 bytes .../Media/Graphics/HowToPlay/HowToPlay_Hopper.png | Bin 0 -> 15145 bytes .../Graphics/HowToPlay/HowToPlay_Hopper_Small.png | Bin 0 -> 9222 bytes .../Media/Graphics/HowToPlay/HowToPlay_Horses.png | Bin 0 -> 138491 bytes .../Graphics/HowToPlay/HowToPlay_Horses_Small.png | Bin 0 -> 54859 bytes .../Graphics/PanelsAndTabs/GameOptionsTabOn.png | Bin 0 -> 678 bytes .../PanelsAndTabs/GameOptionsTabOn_Small.png | Bin 0 -> 367 bytes .../Graphics/PanelsAndTabs/MoreOptionsTabOff.png | Bin 0 -> 678 bytes .../PanelsAndTabs/MoreOptionsTabOff_Small.png | Bin 0 -> 349 bytes .../Graphics/PanelsAndTabs/WorldOptionsTabOn.png | Bin 0 -> 675 bytes .../PanelsAndTabs/WorldOptionsTabOn_Small.png | Bin 0 -> 367 bytes .../Potion_Effect_Icon_HealthBoost.png | Bin 0 -> 418 bytes .../PotionEffect/Potion_Effect_Icon_Wither.png | Bin 0 -> 771 bytes .../Media/Graphics/TutorialExitScreenshot.png | Bin 75532 -> 60176 bytes .../Graphics/X360ControllerIcons/ButtonRS_TT.png | Bin 0 -> 1355 bytes Minecraft.Client/Common/Media/HTMLColours.col | Bin 838 -> 838 bytes Minecraft.Client/Common/Media/HTMLColours.xml | 4 +- Minecraft.Client/Common/Media/HUD1080.swf | Bin 10512 -> 11926 bytes Minecraft.Client/Common/Media/HUD480.swf | Bin 10508 -> 11923 bytes Minecraft.Client/Common/Media/HUD720.swf | Bin 10507 -> 11925 bytes Minecraft.Client/Common/Media/HUDSplit1080.swf | Bin 11055 -> 12006 bytes Minecraft.Client/Common/Media/HUDSplit720.swf | Bin 11018 -> 11976 bytes Minecraft.Client/Common/Media/HUDVita.swf | Bin 10947 -> 11914 bytes Minecraft.Client/Common/Media/HopperMenu1080.swf | Bin 0 -> 25722 bytes Minecraft.Client/Common/Media/HopperMenu480.swf | Bin 0 -> 17211 bytes Minecraft.Client/Common/Media/HopperMenu720.swf | Bin 0 -> 17217 bytes .../Common/Media/HopperMenuSplit1080.swf | Bin 0 -> 17239 bytes .../Common/Media/HopperMenuSplit720.swf | Bin 0 -> 17216 bytes Minecraft.Client/Common/Media/HopperMenuVita.swf | Bin 0 -> 17388 bytes .../Common/Media/HorseInventoryMenu1080.swf | Bin 15454 -> 17745 bytes .../Common/Media/HorseInventoryMenu480.swf | Bin 15456 -> 17750 bytes .../Common/Media/HorseInventoryMenu720.swf | Bin 15427 -> 17711 bytes .../Common/Media/HorseInventoryMenuSplit1080.swf | Bin 15471 -> 17832 bytes .../Common/Media/HorseInventoryMenuSplit720.swf | Bin 15454 -> 17744 bytes .../Common/Media/HorseInventoryMenuVita.swf | Bin 0 -> 17763 bytes Minecraft.Client/Common/Media/HowToPlay1080.swf | Bin 10489 -> 11764 bytes Minecraft.Client/Common/Media/HowToPlay480.swf | Bin 10604 -> 11829 bytes Minecraft.Client/Common/Media/HowToPlay720.swf | Bin 10536 -> 11833 bytes .../Common/Media/HowToPlayMenu1080.swf | Bin 12764 -> 14501 bytes Minecraft.Client/Common/Media/HowToPlayMenu480.swf | Bin 12331 -> 14497 bytes Minecraft.Client/Common/Media/HowToPlayMenu720.swf | Bin 12444 -> 14501 bytes .../Common/Media/HowToPlayMenuSplit1080.swf | Bin 12372 -> 14496 bytes .../Common/Media/HowToPlayMenuSplit720.swf | Bin 12338 -> 14493 bytes .../Common/Media/HowToPlayMenuVita.swf | Bin 13919 -> 14499 bytes .../Common/Media/HowToPlaySplit1080.swf | Bin 10465 -> 11740 bytes .../Common/Media/HowToPlaySplit720.swf | Bin 9931 -> 11801 bytes Minecraft.Client/Common/Media/HowToPlayVita.swf | Bin 10782 -> 11990 bytes .../Common/Media/InGameHostOptions1080.swf | Bin 14384 -> 15836 bytes .../Common/Media/InGameHostOptions480.swf | Bin 14490 -> 16003 bytes .../Common/Media/InGameHostOptions720.swf | Bin 14486 -> 15944 bytes .../Common/Media/InGameHostOptionsSplit1080.swf | Bin 14382 -> 15903 bytes .../Common/Media/InGameHostOptionsSplit720.swf | Bin 14492 -> 16020 bytes .../Common/Media/InGameHostOptionsVita.swf | Bin 14493 -> 16001 bytes .../Common/Media/InGamePlayerOptions1080.swf | Bin 15224 -> 16386 bytes .../Common/Media/InGamePlayerOptions480.swf | Bin 15570 -> 16777 bytes .../Common/Media/InGamePlayerOptions720.swf | Bin 15336 -> 16485 bytes .../Common/Media/InGamePlayerOptionsSplit1080.swf | Bin 15538 -> 16728 bytes .../Common/Media/InGamePlayerOptionsSplit720.swf | Bin 15349 -> 16493 bytes .../Common/Media/InGamePlayerOptionsVita.swf | Bin 15575 -> 16779 bytes Minecraft.Client/Common/Media/Intro1080.swf | Bin 207241 -> 344032 bytes Minecraft.Client/Common/Media/Intro480.swf | Bin 89823 -> 91385 bytes Minecraft.Client/Common/Media/Intro720.swf | Bin 88977 -> 90484 bytes Minecraft.Client/Common/Media/IntroVita.swf | Bin 79876 -> 80539 bytes .../Common/Media/InventoryMenu1080.swf | Bin 18495 -> 18911 bytes Minecraft.Client/Common/Media/InventoryMenu480.swf | Bin 18456 -> 18883 bytes Minecraft.Client/Common/Media/InventoryMenu720.swf | Bin 18452 -> 18890 bytes .../Common/Media/InventoryMenuSplit1080.swf | Bin 18459 -> 18891 bytes .../Common/Media/InventoryMenuSplit720.swf | Bin 18452 -> 18974 bytes .../Common/Media/InventoryMenuVita.swf | Bin 18461 -> 18877 bytes .../Common/Media/LanguagesMenu1080.swf | Bin 0 -> 14423 bytes Minecraft.Client/Common/Media/LanguagesMenu480.swf | Bin 0 -> 14405 bytes Minecraft.Client/Common/Media/LanguagesMenu720.swf | Bin 0 -> 14411 bytes .../Common/Media/LanguagesMenuSplit1080.swf | Bin 0 -> 14403 bytes .../Common/Media/LanguagesMenuSplit720.swf | Bin 0 -> 14414 bytes .../Common/Media/LanguagesMenuVita.swf | Bin 0 -> 14406 bytes .../Common/Media/LaunchMoreOptionsMenu1080.swf | Bin 18592 -> 21323 bytes .../Common/Media/LaunchMoreOptionsMenu480.swf | Bin 16682 -> 20949 bytes .../Common/Media/LaunchMoreOptionsMenu720.swf | Bin 16212 -> 20730 bytes .../Common/Media/LaunchMoreOptionsMenuVita.swf | Bin 16674 -> 20948 bytes Minecraft.Client/Common/Media/LoadMenu1080.swf | Bin 21745 -> 22608 bytes Minecraft.Client/Common/Media/LoadMenu480.swf | Bin 19169 -> 22529 bytes Minecraft.Client/Common/Media/LoadMenu720.swf | Bin 18616 -> 22606 bytes Minecraft.Client/Common/Media/LoadMenuVita.swf | Bin 20837 -> 22549 bytes Minecraft.Client/Common/Media/MediaDurango.arc | Bin 19606036 -> 15586417 bytes Minecraft.Client/Common/Media/MediaOrbis.arc | Bin 14344887 -> 10450632 bytes Minecraft.Client/Common/Media/MediaPS3.arc | Bin 10951528 -> 11855941 bytes Minecraft.Client/Common/Media/MediaPSVita.arc | Bin 8137376 -> 8834315 bytes Minecraft.Client/Common/Media/MediaWindows64.arc | Bin 22628631 -> 21409239 bytes .../Common/Media/PressStartToPlay1080.swf | Bin 14283 -> 15323 bytes .../Common/Media/PressStartToPlay720.swf | Bin 13585 -> 15166 bytes .../Common/Media/QuadrantSignin1080.swf | Bin 18748 -> 19420 bytes .../Common/Media/QuadrantSignin720.swf | Bin 26510 -> 19398 bytes .../Common/Media/SettingsOptionsMenu1080.swf | Bin 15424 -> 16235 bytes .../Common/Media/SettingsOptionsMenu480.swf | Bin 15617 -> 16426 bytes .../Common/Media/SettingsOptionsMenu720.swf | Bin 15614 -> 16427 bytes .../Common/Media/SettingsOptionsMenuSplit1080.swf | Bin 15468 -> 15799 bytes .../Common/Media/SettingsOptionsMenuSplit720.swf | Bin 15616 -> 15938 bytes .../Common/Media/SettingsOptionsMenuVita.swf | Bin 15692 -> 16423 bytes .../Common/Media/SkinSelectMenu1080.swf | Bin 18198 -> 18546 bytes .../Common/Media/SkinSelectMenu720.swf | Bin 18106 -> 18498 bytes .../Common/Media/SkinSelectMenuSplit1080.swf | Bin 17924 -> 18420 bytes .../Common/Media/SkinSelectMenuSplit720.swf | Bin 17560 -> 18049 bytes .../Common/Media/SkinSelectMenuVita.swf | Bin 17806 -> 18296 bytes Minecraft.Client/Common/Media/ToolTips1080.swf | Bin 13932 -> 15824 bytes Minecraft.Client/Common/Media/ToolTips480.swf | Bin 13933 -> 15821 bytes Minecraft.Client/Common/Media/ToolTips720.swf | Bin 13929 -> 15820 bytes .../Common/Media/ToolTipsSplit1080.swf | Bin 13930 -> 15827 bytes Minecraft.Client/Common/Media/ToolTipsSplit720.swf | Bin 13929 -> 15810 bytes Minecraft.Client/Common/Media/ToolTipsVita.swf | Bin 14881 -> 15996 bytes Minecraft.Client/Common/Media/TradingMenu1080.swf | Bin 16835 -> 18200 bytes Minecraft.Client/Common/Media/TradingMenu480.swf | Bin 16821 -> 18209 bytes Minecraft.Client/Common/Media/TradingMenu720.swf | Bin 17622 -> 18210 bytes .../Common/Media/TradingMenuSplit1080.swf | Bin 16840 -> 18232 bytes .../Common/Media/TradingMenuSplit720.swf | Bin 16828 -> 18221 bytes Minecraft.Client/Common/Media/TradingMenuVita.swf | Bin 18165 -> 18226 bytes .../Common/Media/TutorialPopup1080.swf | Bin 14136 -> 15117 bytes Minecraft.Client/Common/Media/TutorialPopup480.swf | Bin 14143 -> 14544 bytes Minecraft.Client/Common/Media/TutorialPopup720.swf | Bin 14131 -> 14534 bytes .../Common/Media/TutorialPopupSplit1080.swf | Bin 14714 -> 15120 bytes .../Common/Media/TutorialPopupSplit720.swf | Bin 14138 -> 14540 bytes .../Common/Media/TutorialPopupVita.swf | Bin 14142 -> 14544 bytes Minecraft.Client/Common/Media/de-DE/strings.resx | 969 ++- .../Common/Media/es-ES/4J_strings.resx | 8 +- Minecraft.Client/Common/Media/es-ES/strings.resx | 1031 +++- Minecraft.Client/Common/Media/font/CHS/MSYH.ttf | Bin 0 -> 21576796 bytes Minecraft.Client/Common/Media/fr-FR/strings.resx | 977 ++- Minecraft.Client/Common/Media/it-IT/strings.resx | 993 ++- .../Common/Media/ja-JP/4J_strings.resx | 6 +- Minecraft.Client/Common/Media/ja-JP/strings.resx | 1003 ++- .../Common/Media/ko-KR/4J_strings.resx | 6 +- Minecraft.Client/Common/Media/ko-KR/strings.resx | 973 ++- Minecraft.Client/Common/Media/movies1080.txt | 10 + Minecraft.Client/Common/Media/movies480.txt | 5 + Minecraft.Client/Common/Media/movies720.txt | 10 + Minecraft.Client/Common/Media/moviesVita.txt | 5 + Minecraft.Client/Common/Media/pt-BR/strings.resx | 1014 ++- .../Common/Media/pt-PT/4J_strings.resx | 8 +- Minecraft.Client/Common/Media/pt-PT/strings.resx | 1013 ++- Minecraft.Client/Common/Media/skin.swf | Bin 145819 -> 146035 bytes Minecraft.Client/Common/Media/skinGraphics.swf | Bin 1828637 -> 2054094 bytes Minecraft.Client/Common/Media/skinGraphicsHud.swf | Bin 11637 -> 14403 bytes .../Common/Media/skinGraphicsInGame.swf | Bin 90765 -> 167207 bytes Minecraft.Client/Common/Media/skinHD.swf | Bin 152571 -> 152798 bytes Minecraft.Client/Common/Media/skinHDGraphics.swf | Bin 3930937 -> 1557529 bytes .../Common/Media/skinHDGraphicsHud.swf | Bin 11926 -> 14693 bytes .../Common/Media/skinHDGraphicsInGame.swf | Bin 111299 -> 292436 bytes Minecraft.Client/Common/Media/skinHDHud.swf | Bin 7688 -> 9077 bytes Minecraft.Client/Common/Media/skinHDInGame.swf | Bin 23251 -> 24729 bytes Minecraft.Client/Common/Media/skinHDLabels.swf | Bin 5780 -> 6309 bytes Minecraft.Client/Common/Media/skinHud.swf | Bin 7799 -> 9203 bytes Minecraft.Client/Common/Media/skinInGame.swf | Bin 23315 -> 24769 bytes Minecraft.Client/Common/Media/skinLabels.swf | Bin 6264 -> 6357 bytes Minecraft.Client/Common/Media/skin_Minecraft.xui | 4017 ++++++++++-- Minecraft.Client/Common/Media/splashes.txt | 6 +- Minecraft.Client/Common/Media/strings.resx | 3341 ++++++---- Minecraft.Client/Common/Media/xuiscene_anvil_480.h | 369 ++ .../Common/Media/xuiscene_anvil_small.h | 390 ++ Minecraft.Client/Common/Media/xuiscene_base.h | 8 + Minecraft.Client/Common/Media/xuiscene_base.xui | 96 + Minecraft.Client/Common/Media/xuiscene_base_480.h | 4 + .../Common/Media/xuiscene_base_480.xui | 48 + Minecraft.Client/Common/Media/xuiscene_beacon.h | 406 ++ Minecraft.Client/Common/Media/xuiscene_beacon.xui | 6508 ++++++++++++++++++++ .../Common/Media/xuiscene_beacon_480.xui | 5215 ++++++++++++++++ .../Common/Media/xuiscene_beacon_Small.xui | 5215 ++++++++++++++++ .../Common/Media/xuiscene_craftingpanel_3x3.h | 36 + .../Common/Media/xuiscene_craftingpanel_3x3.xui | 506 +- Minecraft.Client/Common/Media/xuiscene_enchant.h | 19 + Minecraft.Client/Common/Media/xuiscene_fireworks.h | 166 + .../Common/Media/xuiscene_fireworks.xui | 2359 +++++++ .../Common/Media/xuiscene_fireworks_480.xui | 1973 ++++++ .../Common/Media/xuiscene_fireworks_small.xui | 1558 +++++ Minecraft.Client/Common/Media/xuiscene_hopper.h | 99 + Minecraft.Client/Common/Media/xuiscene_hopper.xui | 1436 +++++ .../Common/Media/xuiscene_hopper_480.h | 141 + .../Common/Media/xuiscene_hopper_480.xui | 1891 ++++++ .../Common/Media/xuiscene_hopper_small.h | 99 + .../Common/Media/xuiscene_hopper_small.xui | 1348 ++++ Minecraft.Client/Common/Media/xuiscene_horse.h | 160 + Minecraft.Client/Common/Media/xuiscene_horse.xui | 2281 +++++++ Minecraft.Client/Common/Media/xuiscene_horse_480.h | 209 + .../Common/Media/xuiscene_horse_480.xui | 2770 +++++++++ .../Common/Media/xuiscene_horse_small.h | 163 + .../Common/Media/xuiscene_horse_small.xui | 2175 +++++++ Minecraft.Client/Common/Media/xuiscene_howtoplay.h | 18 + .../Common/Media/xuiscene_howtoplay.xui | 176 +- .../Common/Media/xuiscene_howtoplay_480.h | 18 + .../Common/Media/xuiscene_howtoplay_480.xui | 165 +- .../Common/Media/xuiscene_howtoplay_small.h | 18 + .../Common/Media/xuiscene_howtoplay_small.xui | 165 +- Minecraft.Client/Common/Media/xuiscene_hud.h | 55 +- Minecraft.Client/Common/Media/xuiscene_hud.xui | 353 +- Minecraft.Client/Common/Media/xuiscene_hud_480.h | 55 +- Minecraft.Client/Common/Media/xuiscene_hud_480.xui | 353 +- Minecraft.Client/Common/Media/xuiscene_hud_small.h | 55 +- .../Common/Media/xuiscene_hud_small.xui | 353 +- .../Common/Media/xuiscene_ingame_host_options.h | 7 + .../Common/Media/xuiscene_ingame_host_options.xui | 104 +- .../Media/xuiscene_ingame_host_options_480.h | 7 + .../Media/xuiscene_ingame_host_options_480.xui | 117 +- .../Media/xuiscene_ingame_host_options_small.h | 7 + .../Media/xuiscene_ingame_host_options_small.xui | 117 +- .../Common/Media/xuiscene_inventory_creative.h | 19 + .../Common/Media/xuiscene_inventory_creative.xui | 287 +- .../Common/Media/xuiscene_load_settings.h | 3 + .../Common/Media/xuiscene_load_settings.xui | 65 +- .../Common/Media/xuiscene_load_settings_480.h | 3 + .../Common/Media/xuiscene_load_settings_480.xui | 79 +- .../Common/Media/xuiscene_multi_create.h | 7 +- .../Common/Media/xuiscene_multi_create.xui | 144 +- .../Common/Media/xuiscene_multi_create_480.h | 7 +- .../Common/Media/xuiscene_multi_create_480.xui | 149 +- .../Media/xuiscene_multi_launch_more_options.h | 32 +- .../Media/xuiscene_multi_launch_more_options.xui | 472 +- .../Media/xuiscene_multi_launch_more_options_480.h | 40 +- .../xuiscene_multi_launch_more_options_480.xui | 513 +- .../Common/Media/xuiscene_trading_480.h | 463 ++ .../Common/Media/xuiscene_trading_small.h | 445 ++ .../Common/Media/zh-CHT/4J_strings.resx | 4 +- Minecraft.Client/Common/Media/zh-CHT/strings.resx | 1079 +++- .../Common/Network/GameNetworkManager.cpp | 197 +- .../Common/Network/GameNetworkManager.h | 1 + .../Common/Network/NetworkPlayerInterface.h | 5 +- .../Common/Network/Sony/NetworkPlayerSony.cpp | 31 +- .../Common/Network/Sony/NetworkPlayerSony.h | 6 +- .../Network/Sony/PlatformNetworkManagerSony.cpp | 26 +- .../Common/Network/Sony/SQRNetworkManager.cpp | 73 + .../Common/Network/Sony/SQRNetworkManager.h | 16 +- .../Common/Network/Sony/SQRNetworkPlayer.cpp | 258 +- .../Common/Network/Sony/SQRNetworkPlayer.h | 52 +- .../Common/Network/Sony/SonyCommerce.h | 4 + .../Common/Network/Sony/SonyRemoteStorage.cpp | 249 +- .../Common/Network/Sony/SonyRemoteStorage.h | 45 +- Minecraft.Client/Common/Potion_Macros.h | 2 + .../Common/Tutorial/DiggerItemHint.cpp | 2 +- Minecraft.Client/Common/Tutorial/FullTutorial.cpp | 75 +- .../Common/Tutorial/HorseChoiceTask.cpp | 43 + Minecraft.Client/Common/Tutorial/HorseChoiceTask.h | 23 + .../Common/Tutorial/LookAtTileHint.cpp | 12 +- .../Common/Tutorial/RideEntityTask.cpp | 30 + Minecraft.Client/Common/Tutorial/RideEntityTask.h | 22 + Minecraft.Client/Common/Tutorial/Tutorial.cpp | 260 +- Minecraft.Client/Common/Tutorial/Tutorial.h | 3 +- Minecraft.Client/Common/Tutorial/TutorialEnum.h | 32 +- Minecraft.Client/Common/Tutorial/TutorialTask.h | 6 +- Minecraft.Client/Common/Tutorial/TutorialTasks.h | 2 + Minecraft.Client/Common/Tutorial/UseItemTask.h | 1 - Minecraft.Client/Common/UI/IUIController.h | 2 +- .../Common/UI/IUIScene_AbstractContainerMenu.cpp | 353 +- .../Common/UI/IUIScene_AbstractContainerMenu.h | 58 +- Minecraft.Client/Common/UI/IUIScene_AnvilMenu.cpp | 12 +- Minecraft.Client/Common/UI/IUIScene_AnvilMenu.h | 4 +- Minecraft.Client/Common/UI/IUIScene_BeaconMenu.cpp | 410 ++ Minecraft.Client/Common/UI/IUIScene_BeaconMenu.h | 31 + .../Common/UI/IUIScene_CommandBlockMenu.cpp | 25 + .../Common/UI/IUIScene_CommandBlockMenu.h | 18 + .../Common/UI/IUIScene_CraftingMenu.cpp | 148 +- Minecraft.Client/Common/UI/IUIScene_CraftingMenu.h | 1 + .../Common/UI/IUIScene_CreativeMenu.cpp | 537 +- Minecraft.Client/Common/UI/IUIScene_CreativeMenu.h | 27 +- .../Common/UI/IUIScene_FireworksMenu.cpp | 129 + .../Common/UI/IUIScene_FireworksMenu.h | 9 + Minecraft.Client/Common/UI/IUIScene_HUD.cpp | 264 + Minecraft.Client/Common/UI/IUIScene_HUD.h | 85 + Minecraft.Client/Common/UI/IUIScene_HopperMenu.cpp | 77 + Minecraft.Client/Common/UI/IUIScene_HopperMenu.h | 12 + .../Common/UI/IUIScene_HorseInventoryMenu.cpp | 251 + .../Common/UI/IUIScene_HorseInventoryMenu.h | 20 + Minecraft.Client/Common/UI/IUIScene_PauseMenu.cpp | 60 +- Minecraft.Client/Common/UI/IUIScene_StartGame.cpp | 4 +- .../Common/UI/IUIScene_TradingMenu.cpp | 49 +- Minecraft.Client/Common/UI/IUIScene_TradingMenu.h | 9 +- Minecraft.Client/Common/UI/UI.h | 8 + Minecraft.Client/Common/UI/UIBitmapFont.cpp | 16 +- .../Common/UI/UIComponent_Panorama.cpp | 2 +- .../Common/UI/UIComponent_PressStartToPlay.cpp | 13 +- .../Common/UI/UIComponent_Tooltips.cpp | 61 +- Minecraft.Client/Common/UI/UIComponent_Tooltips.h | 12 +- .../Common/UI/UIComponent_TutorialPopup.cpp | 10 +- .../Common/UI/UIComponent_TutorialPopup.h | 2 + Minecraft.Client/Common/UI/UIControl.h | 1 + Minecraft.Client/Common/UI/UIControl_Base.cpp | 20 +- Minecraft.Client/Common/UI/UIControl_Base.h | 9 +- .../Common/UI/UIControl_BeaconEffectButton.cpp | 121 + .../Common/UI/UIControl_BeaconEffectButton.h | 49 + Minecraft.Client/Common/UI/UIControl_Button.cpp | 2 +- Minecraft.Client/Common/UI/UIControl_Button.h | 4 +- .../Common/UI/UIControl_ButtonList.cpp | 44 + Minecraft.Client/Common/UI/UIControl_ButtonList.h | 14 + Minecraft.Client/Common/UI/UIControl_CheckBox.cpp | 2 +- Minecraft.Client/Common/UI/UIControl_CheckBox.h | 2 +- .../Common/UI/UIControl_EnchantmentBook.cpp | 4 +- .../Common/UI/UIControl_EnchantmentButton.cpp | 12 + .../Common/UI/UIControl_EnchantmentButton.h | 2 +- Minecraft.Client/Common/UI/UIControl_Label.cpp | 24 +- Minecraft.Client/Common/UI/UIControl_Label.h | 8 +- .../Common/UI/UIControl_MinecraftHorse.cpp | 103 + .../Common/UI/UIControl_MinecraftHorse.h | 15 + .../Common/UI/UIControl_MinecraftPlayer.cpp | 3 +- .../Common/UI/UIControl_PlayerSkinPreview.cpp | 7 +- Minecraft.Client/Common/UI/UIControl_Progress.cpp | 2 +- Minecraft.Client/Common/UI/UIControl_Progress.h | 2 +- Minecraft.Client/Common/UI/UIControl_Slider.cpp | 3 +- Minecraft.Client/Common/UI/UIControl_Slider.h | 2 +- Minecraft.Client/Common/UI/UIControl_SlotList.cpp | 7 + Minecraft.Client/Common/UI/UIControl_SlotList.h | 2 + .../Common/UI/UIControl_SpaceIndicatorBar.cpp | 2 +- .../Common/UI/UIControl_SpaceIndicatorBar.h | 2 +- Minecraft.Client/Common/UI/UIControl_TextInput.cpp | 2 +- Minecraft.Client/Common/UI/UIControl_TextInput.h | 2 +- Minecraft.Client/Common/UI/UIController.cpp | 268 +- Minecraft.Client/Common/UI/UIController.h | 46 +- Minecraft.Client/Common/UI/UIEnums.h | 28 +- Minecraft.Client/Common/UI/UIGroup.cpp | 14 +- Minecraft.Client/Common/UI/UIGroup.h | 2 + Minecraft.Client/Common/UI/UILayer.cpp | 43 +- Minecraft.Client/Common/UI/UILayer.h | 2 + Minecraft.Client/Common/UI/UIScene.cpp | 26 +- Minecraft.Client/Common/UI/UIScene.h | 7 + .../Common/UI/UIScene_AbstractContainerMenu.cpp | 33 +- .../Common/UI/UIScene_AbstractContainerMenu.h | 7 +- Minecraft.Client/Common/UI/UIScene_AnvilMenu.cpp | 22 +- Minecraft.Client/Common/UI/UIScene_BeaconMenu.cpp | 519 ++ Minecraft.Client/Common/UI/UIScene_BeaconMenu.h | 71 + .../Common/UI/UIScene_BrewingStandMenu.cpp | 4 +- .../Common/UI/UIScene_ConnectingProgress.cpp | 2 +- .../Common/UI/UIScene_ContainerMenu.cpp | 2 +- .../Common/UI/UIScene_ControlsMenu.cpp | 2 +- .../Common/UI/UIScene_CraftingMenu.cpp | 20 +- Minecraft.Client/Common/UI/UIScene_CraftingMenu.h | 6 + .../Common/UI/UIScene_CreateWorldMenu.cpp | 251 +- .../Common/UI/UIScene_CreateWorldMenu.h | 18 +- .../Common/UI/UIScene_CreativeMenu.cpp | 26 +- Minecraft.Client/Common/UI/UIScene_CreativeMenu.h | 1 - Minecraft.Client/Common/UI/UIScene_Credits.cpp | 43 +- Minecraft.Client/Common/UI/UIScene_Credits.h | 10 +- Minecraft.Client/Common/UI/UIScene_DLCMainMenu.cpp | 35 +- Minecraft.Client/Common/UI/UIScene_DLCMainMenu.h | 2 +- .../Common/UI/UIScene_DLCOffersMenu.cpp | 24 +- Minecraft.Client/Common/UI/UIScene_DeathMenu.cpp | 12 +- .../Common/UI/UIScene_DebugOptions.cpp | 6 +- .../Common/UI/UIScene_DebugOverlay.cpp | 4 +- .../Common/UI/UIScene_DispenserMenu.cpp | 4 +- .../Common/UI/UIScene_EnchantingMenu.cpp | 4 +- Minecraft.Client/Common/UI/UIScene_EndPoem.cpp | 11 +- .../Common/UI/UIScene_FireworksMenu.cpp | 233 + Minecraft.Client/Common/UI/UIScene_FireworksMenu.h | 44 + .../Common/UI/UIScene_FullscreenProgress.cpp | 6 +- Minecraft.Client/Common/UI/UIScene_FurnaceMenu.cpp | 8 +- Minecraft.Client/Common/UI/UIScene_HUD.cpp | 440 +- Minecraft.Client/Common/UI/UIScene_HUD.h | 55 +- .../Common/UI/UIScene_HelpAndOptionsMenu.cpp | 17 +- Minecraft.Client/Common/UI/UIScene_HopperMenu.cpp | 197 + Minecraft.Client/Common/UI/UIScene_HopperMenu.h | 40 + .../Common/UI/UIScene_HorseInventoryMenu.cpp | 338 + .../Common/UI/UIScene_HorseInventoryMenu.h | 54 + Minecraft.Client/Common/UI/UIScene_HowToPlay.cpp | 59 +- Minecraft.Client/Common/UI/UIScene_HowToPlay.h | 20 + .../Common/UI/UIScene_HowToPlayMenu.cpp | 46 +- Minecraft.Client/Common/UI/UIScene_HowToPlayMenu.h | 5 + .../Common/UI/UIScene_InGameHostOptionsMenu.cpp | 61 +- .../Common/UI/UIScene_InGameHostOptionsMenu.h | 18 +- .../Common/UI/UIScene_InGameInfoMenu.cpp | 303 +- .../Common/UI/UIScene_InGameInfoMenu.h | 22 +- .../Common/UI/UIScene_InGamePlayerOptionsMenu.cpp | 88 +- .../Common/UI/UIScene_InGamePlayerOptionsMenu.h | 2 + .../Common/UI/UIScene_InGameSaveManagementMenu.cpp | 2 +- Minecraft.Client/Common/UI/UIScene_Intro.cpp | 14 +- Minecraft.Client/Common/UI/UIScene_JoinMenu.cpp | 58 +- .../Common/UI/UIScene_LanguageSelector.cpp | 129 + .../Common/UI/UIScene_LanguageSelector.h | 165 + .../Common/UI/UIScene_LaunchMoreOptionsMenu.cpp | 265 +- .../Common/UI/UIScene_LaunchMoreOptionsMenu.h | 132 +- .../Common/UI/UIScene_LeaderboardsMenu.cpp | 50 +- .../Common/UI/UIScene_LeaderboardsMenu.h | 8 +- Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp | 473 +- Minecraft.Client/Common/UI/UIScene_LoadMenu.h | 12 +- .../Common/UI/UIScene_LoadOrJoinMenu.cpp | 358 +- .../Common/UI/UIScene_LoadOrJoinMenu.h | 10 + Minecraft.Client/Common/UI/UIScene_MainMenu.cpp | 250 +- Minecraft.Client/Common/UI/UIScene_MainMenu.h | 32 +- Minecraft.Client/Common/UI/UIScene_MessageBox.h | 3 +- .../Common/UI/UIScene_NewUpdateMessage.cpp | 121 + .../Common/UI/UIScene_NewUpdateMessage.h | 45 + Minecraft.Client/Common/UI/UIScene_PauseMenu.cpp | 134 +- .../Common/UI/UIScene_QuadrantSignin.cpp | 137 +- .../Common/UI/UIScene_QuadrantSignin.h | 13 +- Minecraft.Client/Common/UI/UIScene_SaveMessage.cpp | 22 +- .../Common/UI/UIScene_SettingsMenu.cpp | 23 +- .../Common/UI/UIScene_SettingsOptionsMenu.cpp | 223 +- .../Common/UI/UIScene_SettingsOptionsMenu.h | 15 + .../Common/UI/UIScene_SkinSelectMenu.cpp | 274 +- .../Common/UI/UIScene_SkinSelectMenu.h | 6 + Minecraft.Client/Common/UI/UIScene_Timer.cpp | 2 +- Minecraft.Client/Common/UI/UIScene_Timer.h | 2 +- Minecraft.Client/Common/UI/UIScene_TradingMenu.cpp | 33 +- Minecraft.Client/Common/UI/UIScene_TradingMenu.h | 8 +- .../Common/UI/UIScene_TrialExitUpsell.cpp | 2 +- Minecraft.Client/Common/UI/UIString.cpp | 176 + Minecraft.Client/Common/UI/UIString.h | 103 + Minecraft.Client/Common/UI/UIStructs.h | 118 +- Minecraft.Client/Common/UI/UITTFFont.cpp | 13 +- Minecraft.Client/Common/UI/UITTFFont.h | 6 +- .../res/TitleUpdate/DLC/Candy/Data/TexturePack.xzp | Bin 3590769 -> 4186611 bytes .../res/TitleUpdate/DLC/Candy/Data/x16Data.pck | Bin 869992 -> 922699 bytes .../TitleUpdate/DLC/Cartoon/Data/TexturePack.xzp | Bin 0 -> 3252842 bytes .../res/TitleUpdate/DLC/Cartoon/Data/x32Data.pck | Bin 0 -> 1340321 bytes .../res/TitleUpdate/DLC/City/Data/TexturePack.xzp | Bin 4060458 -> 4641946 bytes .../res/TitleUpdate/DLC/City/Data/x32Data.pck | Bin 2636993 -> 2808253 bytes .../TitleUpdate/DLC/Fantasy/Data/TexturePack.xzp | Bin 4777159 -> 5512680 bytes .../res/TitleUpdate/DLC/Fantasy/Data/x32Data.pck | Bin 2527182 -> 2691065 bytes .../res/TitleUpdate/DLC/Festive/Data/Festive.mcs | Bin 0 -> 9037178 bytes .../res/TitleUpdate/DLC/Festive/Data/GameRules.grf | Bin 0 -> 499 bytes .../TitleUpdate/DLC/Festive/Data/TexturePack.xzp | Bin 0 -> 5378108 bytes .../res/TitleUpdate/DLC/Festive/Data/x16Data.pck | Bin 0 -> 1121604 bytes .../res/TitleUpdate/DLC/Festive/TexturePack.pck | Bin 0 -> 237468 bytes .../TitleUpdate/DLC/Halloween/Data/TexturePack.xzp | Bin 3705530 -> 4039115 bytes .../res/TitleUpdate/DLC/Halloween/Data/x16Data.pck | Bin 786598 -> 944327 bytes .../res/TitleUpdate/DLC/Halo/Data/TexturePack.xzp | Bin 4123875 -> 4504823 bytes .../res/TitleUpdate/DLC/Halo/Data/x16Data.pck | Bin 967988 -> 961022 bytes .../res/TitleUpdate/DLC/Halo/TexturePack.pck | Bin 217553 -> 222568 bytes .../DLC/MassEffect/Data/TexturePack.xzp | Bin 3022739 -> 3249263 bytes .../TitleUpdate/DLC/MassEffect/Data/masseffect.mcs | Bin 3485486 -> 3485102 bytes .../TitleUpdate/DLC/MassEffect/Data/x16Data.pck | Bin 733891 -> 775721 bytes .../res/TitleUpdate/DLC/MassEffect/TexturePack.pck | Bin 176514 -> 180503 bytes .../TitleUpdate/DLC/Natural/Data/TexturePack.xzp | Bin 4166364 -> 4582759 bytes .../res/TitleUpdate/DLC/Natural/Data/x32Data.pck | Bin 2894225 -> 3042432 bytes .../TitleUpdate/DLC/Plastic/Data/TexturePack.xzp | Bin 2607406 -> 2818128 bytes .../res/TitleUpdate/DLC/Plastic/Data/x16Data.pck | Bin 567845 -> 581566 bytes .../TitleUpdate/DLC/Skyrim/Data/TexturePack.xzp | Bin 3413075 -> 3767760 bytes .../res/TitleUpdate/DLC/Skyrim/Data/x16Data.pck | Bin 996979 -> 1143990 bytes .../res/TitleUpdate/DLC/Skyrim/TexturePack.pck | Bin 181667 -> 187182 bytes .../TitleUpdate/DLC/Steampunk/Data/TexturePack.xzp | Bin 0 -> 4897015 bytes .../res/TitleUpdate/DLC/Steampunk/Data/x32Data.pck | Bin 0 -> 3341040 bytes .../Common/res/TitleUpdate/GameRules/Tutorial.mcs | Bin 0 -> 9184230 bytes .../Common/res/TitleUpdate/GameRules/Tutorial.pck | Bin 90648 -> 2025 bytes .../Common/res/TitleUpdate/audio/1.6.4.xwb | Bin 0 -> 13988264 bytes .../Common/res/TitleUpdate/audio/Minecraft.xgs | Bin 488 -> 488 bytes .../Common/res/TitleUpdate/audio/additional.xsb | Bin 3047 -> 7361 bytes .../Common/res/TitleUpdate/res/colours.col | Bin 5258 -> 5546 bytes .../Common/res/TitleUpdate/res/colours.xml | 16 + .../Common/res/TitleUpdate/res/font/Default.png | Bin 4343 -> 4616 bytes .../res/TitleUpdate/res/font/Mojangles_11.png | Bin 7024 -> 7013 bytes .../res/TitleUpdate/res/font/Mojangles_7.png | Bin 5322 -> 5328 bytes .../Common/res/TitleUpdate/res/item/christmas.png | Bin 0 -> 2195 bytes .../res/TitleUpdate/res/item/christmas_double.png | Bin 0 -> 2911 bytes .../Common/res/TitleUpdate/res/item/lead_knot.png | Bin 0 -> 746 bytes .../Common/res/TitleUpdate/res/item/trapped.png | Bin 0 -> 1720 bytes .../res/TitleUpdate/res/item/trapped_double.png | Bin 0 -> 2219 bytes .../Common/res/TitleUpdate/res/items.png | Bin 121590 -> 39203 bytes .../res/TitleUpdate/res/misc/beacon_beam.png | Bin 0 -> 260 bytes .../Common/res/TitleUpdate/res/mob/bat.png | Bin 0 -> 2935 bytes .../res/mob/horse/armor/horse_armor_diamond.png | Bin 0 -> 5177 bytes .../res/mob/horse/armor/horse_armor_gold.png | Bin 0 -> 5140 bytes .../res/mob/horse/armor/horse_armor_iron.png | Bin 0 -> 5064 bytes .../res/TitleUpdate/res/mob/horse/donkey.png | Bin 0 -> 11755 bytes .../res/TitleUpdate/res/mob/horse/horse_black.png | Bin 0 -> 9191 bytes .../res/TitleUpdate/res/mob/horse/horse_brown.png | Bin 0 -> 9931 bytes .../TitleUpdate/res/mob/horse/horse_chestnut.png | Bin 0 -> 10512 bytes .../res/TitleUpdate/res/mob/horse/horse_creamy.png | Bin 0 -> 9674 bytes .../TitleUpdate/res/mob/horse/horse_darkbrown.png | Bin 0 -> 9271 bytes .../res/TitleUpdate/res/mob/horse/horse_gray.png | Bin 0 -> 11698 bytes .../res/mob/horse/horse_markings_blackdots.png | Bin 0 -> 5401 bytes .../res/mob/horse/horse_markings_white.png | Bin 0 -> 3668 bytes .../res/mob/horse/horse_markings_whitedots.png | Bin 0 -> 4000 bytes .../res/mob/horse/horse_markings_whitefield.png | Bin 0 -> 4727 bytes .../TitleUpdate/res/mob/horse/horse_skeleton.png | Bin 0 -> 11643 bytes .../res/TitleUpdate/res/mob/horse/horse_white.png | Bin 0 -> 9414 bytes .../res/TitleUpdate/res/mob/horse/horse_zombie.png | Bin 0 -> 13998 bytes .../Common/res/TitleUpdate/res/mob/horse/mule.png | Bin 0 -> 11294 bytes .../Common/res/TitleUpdate/res/mob/witch.png | Bin 0 -> 2228 bytes .../res/TitleUpdate/res/mob/wither/wither.png | Bin 0 -> 2702 bytes .../TitleUpdate/res/mob/wither/wither_armor.png | Bin 0 -> 3477 bytes .../res/mob/wither/wither_invulnerable.png | Bin 0 -> 3045 bytes .../Common/res/TitleUpdate/res/terrain.png | Bin 122236 -> 142406 bytes .../res/TitleUpdate/res/terrainMipMapLevel2.png | Bin 30830 -> 43876 bytes .../res/TitleUpdate/res/terrainMipMapLevel3.png | Bin 10551 -> 12618 bytes 557 files changed, 67560 insertions(+), 6810 deletions(-) create mode 100644 Minecraft.Client/Common/Leaderboards/LeaderboardInterface.cpp create mode 100644 Minecraft.Client/Common/Leaderboards/LeaderboardInterface.h create mode 100644 Minecraft.Client/Common/Leaderboards/SonyLeaderboardManager.cpp create mode 100644 Minecraft.Client/Common/Leaderboards/SonyLeaderboardManager.h create mode 100644 Minecraft.Client/Common/Leaderboards/base64.cpp create mode 100644 Minecraft.Client/Common/Leaderboards/base64.h create mode 100644 Minecraft.Client/Common/Media/BeaconMenu1080.swf create mode 100644 Minecraft.Client/Common/Media/BeaconMenu480.swf create mode 100644 Minecraft.Client/Common/Media/BeaconMenu720.swf create mode 100644 Minecraft.Client/Common/Media/BeaconMenuSplit1080.swf create mode 100644 Minecraft.Client/Common/Media/BeaconMenuSplit720.swf create mode 100644 Minecraft.Client/Common/Media/BeaconMenuVita.swf create mode 100644 Minecraft.Client/Common/Media/FireworksMenu1080.swf create mode 100644 Minecraft.Client/Common/Media/FireworksMenu480.swf create mode 100644 Minecraft.Client/Common/Media/FireworksMenu720.swf create mode 100644 Minecraft.Client/Common/Media/FireworksMenuSplit1080.swf create mode 100644 Minecraft.Client/Common/Media/FireworksMenuSplit720.swf create mode 100644 Minecraft.Client/Common/Media/FireworksMenuVita.swf create mode 100644 Minecraft.Client/Common/Media/Graphics/Beacon_1.png create mode 100644 Minecraft.Client/Common/Media/Graphics/Beacon_2.png create mode 100644 Minecraft.Client/Common/Media/Graphics/Beacon_3.png create mode 100644 Minecraft.Client/Common/Media/Graphics/Beacon_4.png create mode 100644 Minecraft.Client/Common/Media/Graphics/Beacon_Button_Cross.png create mode 100644 Minecraft.Client/Common/Media/Graphics/Beacon_Button_Disabled.png create mode 100644 Minecraft.Client/Common/Media/Graphics/Beacon_Button_Hover.png create mode 100644 Minecraft.Client/Common/Media/Graphics/Beacon_Button_Normal.png create mode 100644 Minecraft.Client/Common/Media/Graphics/Beacon_Button_Pressed.png create mode 100644 Minecraft.Client/Common/Media/Graphics/Beacon_Button_Tick.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HUD/Health_Full_Absorb.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HUD/Health_Full_Wither.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HUD/Health_Full_Wither_Flash.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HUD/Health_Half_Absorb.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HUD/Health_Half_Wither.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HUD/Health_Half_Wither_Flash.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Full.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Full_Flash.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Half.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Half_Flash.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HUD/HorseJump_bar_empty.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HUD/HorseJump_bar_full.png create mode 100644 Minecraft.Client/Common/Media/Graphics/Horse_Armor_Slot.png create mode 100644 Minecraft.Client/Common/Media/Graphics/Horse_Saddle_Slot.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Beacon.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Beacon_Small.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Fireworks.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Fireworks_Small.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Hopper.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Hopper_Small.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Horses.png create mode 100644 Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Horses_Small.png create mode 100644 Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/GameOptionsTabOn.png create mode 100644 Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/GameOptionsTabOn_Small.png create mode 100644 Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/MoreOptionsTabOff.png create mode 100644 Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/MoreOptionsTabOff_Small.png create mode 100644 Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/WorldOptionsTabOn.png create mode 100644 Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/WorldOptionsTabOn_Small.png create mode 100644 Minecraft.Client/Common/Media/Graphics/PotionEffect/Potion_Effect_Icon_HealthBoost.png create mode 100644 Minecraft.Client/Common/Media/Graphics/PotionEffect/Potion_Effect_Icon_Wither.png create mode 100644 Minecraft.Client/Common/Media/Graphics/X360ControllerIcons/ButtonRS_TT.png create mode 100644 Minecraft.Client/Common/Media/HopperMenu1080.swf create mode 100644 Minecraft.Client/Common/Media/HopperMenu480.swf create mode 100644 Minecraft.Client/Common/Media/HopperMenu720.swf create mode 100644 Minecraft.Client/Common/Media/HopperMenuSplit1080.swf create mode 100644 Minecraft.Client/Common/Media/HopperMenuSplit720.swf create mode 100644 Minecraft.Client/Common/Media/HopperMenuVita.swf create mode 100644 Minecraft.Client/Common/Media/HorseInventoryMenuVita.swf create mode 100644 Minecraft.Client/Common/Media/LanguagesMenu1080.swf create mode 100644 Minecraft.Client/Common/Media/LanguagesMenu480.swf create mode 100644 Minecraft.Client/Common/Media/LanguagesMenu720.swf create mode 100644 Minecraft.Client/Common/Media/LanguagesMenuSplit1080.swf create mode 100644 Minecraft.Client/Common/Media/LanguagesMenuSplit720.swf create mode 100644 Minecraft.Client/Common/Media/LanguagesMenuVita.swf create mode 100644 Minecraft.Client/Common/Media/font/CHS/MSYH.ttf create mode 100644 Minecraft.Client/Common/Media/xuiscene_anvil_480.h create mode 100644 Minecraft.Client/Common/Media/xuiscene_anvil_small.h create mode 100644 Minecraft.Client/Common/Media/xuiscene_beacon.h create mode 100644 Minecraft.Client/Common/Media/xuiscene_beacon.xui create mode 100644 Minecraft.Client/Common/Media/xuiscene_beacon_480.xui create mode 100644 Minecraft.Client/Common/Media/xuiscene_beacon_Small.xui create mode 100644 Minecraft.Client/Common/Media/xuiscene_fireworks.h create mode 100644 Minecraft.Client/Common/Media/xuiscene_fireworks.xui create mode 100644 Minecraft.Client/Common/Media/xuiscene_fireworks_480.xui create mode 100644 Minecraft.Client/Common/Media/xuiscene_fireworks_small.xui create mode 100644 Minecraft.Client/Common/Media/xuiscene_hopper.h create mode 100644 Minecraft.Client/Common/Media/xuiscene_hopper.xui create mode 100644 Minecraft.Client/Common/Media/xuiscene_hopper_480.h create mode 100644 Minecraft.Client/Common/Media/xuiscene_hopper_480.xui create mode 100644 Minecraft.Client/Common/Media/xuiscene_hopper_small.h create mode 100644 Minecraft.Client/Common/Media/xuiscene_hopper_small.xui create mode 100644 Minecraft.Client/Common/Media/xuiscene_horse.h create mode 100644 Minecraft.Client/Common/Media/xuiscene_horse.xui create mode 100644 Minecraft.Client/Common/Media/xuiscene_horse_480.h create mode 100644 Minecraft.Client/Common/Media/xuiscene_horse_480.xui create mode 100644 Minecraft.Client/Common/Media/xuiscene_horse_small.h create mode 100644 Minecraft.Client/Common/Media/xuiscene_horse_small.xui create mode 100644 Minecraft.Client/Common/Media/xuiscene_trading_480.h create mode 100644 Minecraft.Client/Common/Media/xuiscene_trading_small.h create mode 100644 Minecraft.Client/Common/Tutorial/HorseChoiceTask.cpp create mode 100644 Minecraft.Client/Common/Tutorial/HorseChoiceTask.h create mode 100644 Minecraft.Client/Common/Tutorial/RideEntityTask.cpp create mode 100644 Minecraft.Client/Common/Tutorial/RideEntityTask.h create mode 100644 Minecraft.Client/Common/UI/IUIScene_BeaconMenu.cpp create mode 100644 Minecraft.Client/Common/UI/IUIScene_BeaconMenu.h create mode 100644 Minecraft.Client/Common/UI/IUIScene_CommandBlockMenu.cpp create mode 100644 Minecraft.Client/Common/UI/IUIScene_CommandBlockMenu.h create mode 100644 Minecraft.Client/Common/UI/IUIScene_FireworksMenu.cpp create mode 100644 Minecraft.Client/Common/UI/IUIScene_FireworksMenu.h create mode 100644 Minecraft.Client/Common/UI/IUIScene_HUD.cpp create mode 100644 Minecraft.Client/Common/UI/IUIScene_HUD.h create mode 100644 Minecraft.Client/Common/UI/IUIScene_HopperMenu.cpp create mode 100644 Minecraft.Client/Common/UI/IUIScene_HopperMenu.h create mode 100644 Minecraft.Client/Common/UI/IUIScene_HorseInventoryMenu.cpp create mode 100644 Minecraft.Client/Common/UI/IUIScene_HorseInventoryMenu.h create mode 100644 Minecraft.Client/Common/UI/UIControl_BeaconEffectButton.cpp create mode 100644 Minecraft.Client/Common/UI/UIControl_BeaconEffectButton.h create mode 100644 Minecraft.Client/Common/UI/UIControl_MinecraftHorse.cpp create mode 100644 Minecraft.Client/Common/UI/UIControl_MinecraftHorse.h create mode 100644 Minecraft.Client/Common/UI/UIScene_BeaconMenu.cpp create mode 100644 Minecraft.Client/Common/UI/UIScene_BeaconMenu.h create mode 100644 Minecraft.Client/Common/UI/UIScene_FireworksMenu.cpp create mode 100644 Minecraft.Client/Common/UI/UIScene_FireworksMenu.h create mode 100644 Minecraft.Client/Common/UI/UIScene_HopperMenu.cpp create mode 100644 Minecraft.Client/Common/UI/UIScene_HopperMenu.h create mode 100644 Minecraft.Client/Common/UI/UIScene_HorseInventoryMenu.cpp create mode 100644 Minecraft.Client/Common/UI/UIScene_HorseInventoryMenu.h create mode 100644 Minecraft.Client/Common/UI/UIScene_LanguageSelector.cpp create mode 100644 Minecraft.Client/Common/UI/UIScene_LanguageSelector.h create mode 100644 Minecraft.Client/Common/UI/UIScene_NewUpdateMessage.cpp create mode 100644 Minecraft.Client/Common/UI/UIScene_NewUpdateMessage.h create mode 100644 Minecraft.Client/Common/UI/UIString.cpp create mode 100644 Minecraft.Client/Common/UI/UIString.h create mode 100644 Minecraft.Client/Common/res/TitleUpdate/DLC/Cartoon/Data/TexturePack.xzp create mode 100644 Minecraft.Client/Common/res/TitleUpdate/DLC/Cartoon/Data/x32Data.pck create mode 100644 Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/Festive.mcs create mode 100644 Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/GameRules.grf create mode 100644 Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/TexturePack.xzp create mode 100644 Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/x16Data.pck create mode 100644 Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/TexturePack.pck create mode 100644 Minecraft.Client/Common/res/TitleUpdate/DLC/Steampunk/Data/TexturePack.xzp create mode 100644 Minecraft.Client/Common/res/TitleUpdate/DLC/Steampunk/Data/x32Data.pck create mode 100644 Minecraft.Client/Common/res/TitleUpdate/GameRules/Tutorial.mcs create mode 100644 Minecraft.Client/Common/res/TitleUpdate/audio/1.6.4.xwb create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/item/christmas.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/item/christmas_double.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/item/lead_knot.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/item/trapped.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/item/trapped_double.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/misc/beacon_beam.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/bat.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/armor/horse_armor_diamond.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/armor/horse_armor_gold.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/armor/horse_armor_iron.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/donkey.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_black.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_brown.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_chestnut.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_creamy.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_darkbrown.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_gray.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_blackdots.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_white.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_whitedots.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_whitefield.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_skeleton.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_white.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_zombie.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/mule.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/witch.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/wither/wither.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/wither/wither_armor.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/wither/wither_invulnerable.png (limited to 'Minecraft.Client/Common') diff --git a/Minecraft.Client/Common/App_Defines.h b/Minecraft.Client/Common/App_Defines.h index de1d1bdc..7e96896c 100644 --- a/Minecraft.Client/Common/App_Defines.h +++ b/Minecraft.Client/Common/App_Defines.h @@ -36,8 +36,29 @@ #define GAME_HOST_OPTION_BITMASK_HOSTINVISIBLE 0x00010000 #define GAME_HOST_OPTION_BITMASK_BEDROCKFOG 0x00020000 #define GAME_HOST_OPTION_BITMASK_DISABLESAVE 0x00040000 +#define GAME_HOST_OPTION_BITMASK_NOTOWNER 0x00080000 +#define GAME_HOST_OPTION_BITMASK_WORLDSIZE 0x00700000 // 3 bits, 5 values (unset(0), classic(1), small(2), medium(3), large(4)) +#define GAME_HOST_OPTION_BITMASK_MOBGRIEFING 0x00800000 +#define GAME_HOST_OPTION_BITMASK_KEEPINVENTORY 0x01000000 +#define GAME_HOST_OPTION_BITMASK_DOMOBSPAWNING 0x02000000 +#define GAME_HOST_OPTION_BITMASK_DOMOBLOOT 0x04000000 +#define GAME_HOST_OPTION_BITMASK_DOTILEDROPS 0x08000000 +#define GAME_HOST_OPTION_BITMASK_NATURALREGEN 0x10000000 +#define GAME_HOST_OPTION_BITMASK_DODAYLIGHTCYCLE 0x20000000 #define GAME_HOST_OPTION_BITMASK_ALL 0xFFFFFFFF +#define GAME_HOST_OPTION_BITMASK_WORLDSIZE_BITSHIFT 20 + +enum EGameHostOptionWorldSize +{ + e_worldSize_Unknown = 0, + e_worldSize_Classic, + e_worldSize_Small, + e_worldSize_Medium, + e_worldSize_Large +}; + + #ifdef _XBOX #define PROFILE_VERSION_1 1 #define PROFILE_VERSION_2 2 @@ -53,7 +74,12 @@ #define PROFILE_VERSION_10 12 // 4J-JEV: New Statistics and Achievements for 'NexGen' platforms. -#define PROFILE_VERSION_BUILD_JUNE14 13 +#define PROFILE_VERSION_11 13 + +// Java 1.6.4 +#define PROFILE_VERSION_12 14 + +#define PROFILE_VERSION_CURRENT PROFILE_VERSION_12 #define MAX_FAVORITE_SKINS 10 // these are stored in the profile data so keep it small diff --git a/Minecraft.Client/Common/App_enums.h b/Minecraft.Client/Common/App_enums.h index b6c484dc..db7bf70b 100644 --- a/Minecraft.Client/Common/App_enums.h +++ b/Minecraft.Client/Common/App_enums.h @@ -73,6 +73,7 @@ enum eXuiAction eAppAction_LevelInBanLevelList, eAppAction_ReloadTexturePack, + eAppAction_ReloadFont, eAppAction_TexturePackRequired, // when the user has joined from invite, but doesn't have the texture pack #ifdef __ORBIS__ @@ -380,6 +381,10 @@ enum eMinecraftColour eMinecraftColour_Effect_Hunger, eMinecraftColour_Effect_Weakness, eMinecraftColour_Effect_Poison, + eMinecraftColour_Effect_Wither, + eMinecraftColour_Effect_HealthBoost, + eMinecraftColour_Effect_Absoprtion, + eMinecraftColour_Effect_Saturation, eMinecraftColour_Potion_BaseColour, @@ -425,6 +430,12 @@ enum eMinecraftColour eMinecraftColour_Mob_Ocelot_Colour2, eMinecraftColour_Mob_Villager_Colour1, eMinecraftColour_Mob_Villager_Colour2, + eMinecraftColour_Mob_Bat_Colour1, + eMinecraftColour_Mob_Bat_Colour2, + eMinecraftColour_Mob_Witch_Colour1, + eMinecraftColour_Mob_Witch_Colour2, + eMinecraftColour_Mob_Horse_Colour1, + eMinecraftColour_Mob_Horse_Colour2, eMinecraftColour_Armour_Default_Leather_Colour, @@ -443,6 +454,11 @@ enum eMinecraftColour eMinecraftColour_Sign_Text, eMinecraftColour_Map_Text, + eMinecraftColour_Leash_Light_Colour, + eMinecraftColour_Leash_Dark_Colour, + + eMinecraftColour_Fire_Overlay, + eHTMLColor_0, eHTMLColor_1, eHTMLColor_2, @@ -487,20 +503,20 @@ enum eMinecraftColour eTextColor_RenamedItemTitle, //eHTMLColor_0 = 0x000000, //r:0 , g: 0, b: 0, i: 0 - //eHTMLColor_1 = 0x0000aa, //r:0 , g: 0, b: aa, i: 1 - //eHTMLColor_2 = 0x109e10, // Changed by request of Dave //0x00aa00, //r:0 , g: aa, b: 0, i: 2 - //eHTMLColor_3 = 0x109e9e, // Changed by request of Dave //0x00aaaa, //r:0 , g: aa, b: aa, i: 3 - //eHTMLColor_4 = 0xaa0000, //r:aa , g: 0, b: 0, i: 4 - //eHTMLColor_5 = 0xaa00aa, //r:aa , g: 0, b: aa, i: 5 - //eHTMLColor_6 = 0xffaa00, //r:ff , g: aa, b: 0, i: 6 - //eHTMLColor_7 = 0xaaaaaa, //r:aa , g: aa, b: aa, i: 7 - //eHTMLColor_8 = 0x555555, //r:55 , g: 55, b: 55, i: 8 - //eHTMLColor_9 = 0x5555ff, //r:55 , g: 55, b: ff, i: 9 - //eHTMLColor_a = 0x55ff55, //r:55 , g: ff, b: 55, i: a - //eHTMLColor_b = 0x55ffff, //r:55 , g: ff, b: ff, i: b - //eHTMLColor_c = 0xff5555, //r:ff , g: 55, b: 55, i: c - //eHTMLColor_d = 0xff55ff, //r:ff , g: 55, b: ff, i: d - //eHTMLColor_e = 0xffff55, //r:ff , g: ff, b: 55, i: e + //eHTMLColor_1 = 0x0000aa, //r:0 , g: 0, b: aa, i: 1 // blue, quite dark + //eHTMLColor_2 = 0x109e10, // Changed by request of Dave //0x00aa00, //r:0 , g: aa, b: 0, i: 2 // green + //eHTMLColor_3 = 0x109e9e, // Changed by request of Dave //0x00aaaa, //r:0 , g: aa, b: aa, i: 3 // cyan + //eHTMLColor_4 = 0xaa0000, //r:aa , g: 0, b: 0, i: 4 // red + //eHTMLColor_5 = 0xaa00aa, //r:aa , g: 0, b: aa, i: 5 // purple + //eHTMLColor_6 = 0xffaa00, //r:ff , g: aa, b: 0, i: 6 // orange + //eHTMLColor_7 = 0xaaaaaa, //r:aa , g: aa, b: aa, i: 7 // light gray + //eHTMLColor_8 = 0x555555, //r:55 , g: 55, b: 55, i: 8 // gray + //eHTMLColor_9 = 0x5555ff, //r:55 , g: 55, b: ff, i: 9 // blue + //eHTMLColor_a = 0x55ff55, //r:55 , g: ff, b: 55, i: a // green + //eHTMLColor_b = 0x55ffff, //r:55 , g: ff, b: ff, i: b // cyan + //eHTMLColor_c = 0xff5555, //r:ff , g: 55, b: 55, i: c // red pink + //eHTMLColor_d = 0xff55ff, //r:ff , g: 55, b: ff, i: d // bright pink + //eHTMLColor_e = 0xffff55, //r:ff , g: ff, b: 55, i: e // yellow //eHTMLColor_f = 0xffffff, //r:ff , g: ff, b: ff, i: f //eHTMLColor_0_dark = 0x000000, //r:0 , g: 0, b: 0, i: 10 //eHTMLColor_1_dark = 0x00002a, //r:0 , g: 0, b: 2a, i: 11 @@ -509,12 +525,12 @@ enum eMinecraftColour //eHTMLColor_4_dark = 0x2a0000, //r:2a , g: 0, b: 0, i: 14 //eHTMLColor_5_dark = 0x2a002a, //r:2a , g: 0, b: 2a, i: 15 //eHTMLColor_6_dark = 0x2a2a00, //r:2a , g: 2a, b: 0, i: 16 - //eHTMLColor_7_dark = 0x2a2a2a, //r:2a , g: 2a, b: 2a, i: 17 + //eHTMLColor_7_dark = 0x2a2a2a, //r:2a , g: 2a, b: 2a, i: 17 // dark gray //eHTMLColor_8_dark = 0x151515, //r:15 , g: 15, b: 15, i: 18 //eHTMLColor_9_dark = 0x15153f, //r:15 , g: 15, b: 3f, i: 19 //eHTMLColor_a_dark = 0x153f15, //r:15 , g: 3f, b: 15, i: 1a //eHTMLColor_b_dark = 0x153f3f, //r:15 , g: 3f, b: 3f, i: 1b - //eHTMLColor_c_dark = 0x3f1515, //r:3f , g: 15, b: 15, i: 1c + //eHTMLColor_c_dark = 0x3f1515, //r:3f , g: 15, b: 15, i: 1c // brown //eHTMLColor_d_dark = 0x3f153f, //r:3f , g: 15, b: 3f, i: 1d //eHTMLColor_e_dark = 0x3f3f15, //r:3f , g: 3f, b: 15, i: 1e //eHTMLColor_f_dark = 0x3f3f3f, //r:3f , g: 3f, b: 3f, i: 1f @@ -617,9 +633,19 @@ enum eGameHostOption eGameHostOption_HostCanBeInvisible, eGameHostOption_BedrockFog, eGameHostOption_NoHUD, + eGameHostOption_WorldSize, eGameHostOption_All, eGameHostOption_DisableSaving, + eGameHostOption_WasntSaveOwner, // Added for PS3 save transfer, so we can add a nice message in the future instead of the creative mode one + + eGameHostOption_MobGriefing, + eGameHostOption_KeepInventory, + eGameHostOption_DoMobSpawning, + eGameHostOption_DoMobLoot, + eGameHostOption_DoTileDrops, + eGameHostOption_NaturalRegeneration, + eGameHostOption_DoDaylightCycle, }; // 4J-PB - If any new DLC items are added to the TMSFiles, this array needs updated @@ -639,6 +665,8 @@ enum _TMSFILES TMS_SPM, TMS_SPI, TMS_SPG, + TMS_SPD1, + TMS_SPSW1, TMS_THST, TMS_THIR, @@ -748,6 +776,8 @@ enum _TMSFILES TMS_MPSR_DAT, TMS_MPHA, TMS_MPHA_DAT, + TMS_MPFE, + TMS_MPFE_DAT, TMS_TP01, TMS_TP01_DAT, @@ -761,6 +791,8 @@ enum _TMSFILES TMS_TP06_DAT, TMS_TP07, TMS_TP07_DAT, + TMS_TP08, + TMS_TP08_DAT, TMS_COUNT }; @@ -875,7 +907,7 @@ enum eMCLang eMCLang_plPL, eMCLang_trTR, eMCLang_elEL, - eMCLang_zhCHS, + eMCLang_csCS, eMCLang_zhCHT, eMCLang_laLAS, @@ -910,4 +942,7 @@ enum eMCLang eMCLang_elGR, eMCLang_nnNO, eMCLang_skSK, + + eMCLang_hans, + eMCLang_hant, }; \ No newline at end of file diff --git a/Minecraft.Client/Common/App_structs.h b/Minecraft.Client/Common/App_structs.h index ed321b5f..a7552ec0 100644 --- a/Minecraft.Client/Common/App_structs.h +++ b/Minecraft.Client/Common/App_structs.h @@ -100,6 +100,10 @@ typedef struct // PS3 1.05 - Adding Greek, so need a language unsigned char ucLanguage; + + // 29/Oct/2014 - Language selector. + unsigned char ucLocale; + // 4J Stu - See comment for GAME_SETTINGS_PROFILE_DATA_BYTES below // was 192 //unsigned char ucUnused[192-TUTORIAL_PROFILE_STORAGE_BYTES-sizeof(DWORD)-sizeof(char)-sizeof(char)-sizeof(char)-sizeof(char)-sizeof(LONG)-sizeof(LONG)-sizeof(DWORD)]; diff --git a/Minecraft.Client/Common/Audio/Consoles_SoundEngine.cpp b/Minecraft.Client/Common/Audio/Consoles_SoundEngine.cpp index 269b605b..e440316d 100644 --- a/Minecraft.Client/Common/Audio/Consoles_SoundEngine.cpp +++ b/Minecraft.Client/Common/Audio/Consoles_SoundEngine.cpp @@ -35,4 +35,43 @@ void ConsoleSoundEngine::SetIsPlayingNetherMusic(bool bVal) m_bIsPlayingNetherMusic=bVal; } +void ConsoleSoundEngine::tick() +{ + if (scheduledSounds.empty()) + { + return; + } + + for(AUTO_VAR(it,scheduledSounds.begin()); it != scheduledSounds.end();) + { + SoundEngine::ScheduledSound *next = *it; + next->delay--; + + if (next->delay <= 0) + { + play(next->iSound, next->x, next->y, next->z, next->volume, next->pitch); + it =scheduledSounds.erase(it); + delete next; + } + else + { + ++it; + } + } +} +void ConsoleSoundEngine::schedule(int iSound, float x, float y, float z, float volume, float pitch, int delayTicks) +{ + scheduledSounds.push_back(new SoundEngine::ScheduledSound(iSound, x, y, z, volume, pitch, delayTicks)); +} + +ConsoleSoundEngine::ScheduledSound::ScheduledSound(int iSound, float x, float y, float z, float volume, float pitch, int delay) +{ + this->iSound = iSound; + this->x = x; + this->y = y; + this->z = z; + this->volume = volume; + this->pitch = pitch; + this->delay = delay; +} \ No newline at end of file diff --git a/Minecraft.Client/Common/Audio/Consoles_SoundEngine.h b/Minecraft.Client/Common/Audio/Consoles_SoundEngine.h index 4ec76036..b29b4378 100644 --- a/Minecraft.Client/Common/Audio/Consoles_SoundEngine.h +++ b/Minecraft.Client/Common/Audio/Consoles_SoundEngine.h @@ -69,6 +69,25 @@ public: static const WCHAR *wchSoundNames[eSoundType_MAX]; static const WCHAR *wchUISoundNames[eSFX_MAX]; +public: + void tick(); + void schedule(int iSound, float x, float y, float z, float volume, float pitch, int delayTicks); + +private: + class ScheduledSound + { + public: + int iSound; + float x, y, z; + float volume, pitch; + int delay; + + public: + ScheduledSound(int iSound, float x, float y, float z, float volume, float pitch, int delay); + }; + + vector scheduledSounds; + private: // platform specific functions diff --git a/Minecraft.Client/Common/Audio/SoundEngine.cpp b/Minecraft.Client/Common/Audio/SoundEngine.cpp index dfed0de7..4d356c13 100644 --- a/Minecraft.Client/Common/Audio/SoundEngine.cpp +++ b/Minecraft.Client/Common/Audio/SoundEngine.cpp @@ -490,6 +490,12 @@ void SoundEngine::updateMiles() case eSoundType_MOB_ENDERDRAGON_HIT: distanceScaler=100.0f; break; + case eSoundType_FIREWORKS_BLAST: + case eSoundType_FIREWORKS_BLAST_FAR: + case eSoundType_FIREWORKS_LARGE_BLAST: + case eSoundType_FIREWORKS_LARGE_BLAST_FAR: + distanceScaler=100.0f; + break; case eSoundType_MOB_GHAST_MOAN: case eSoundType_MOB_GHAST_SCREAM: case eSoundType_MOB_GHAST_DEATH: @@ -624,6 +630,7 @@ static S32 running = AIL_ms_count(); void SoundEngine::tick(shared_ptr *players, float a) { + ConsoleSoundEngine::tick(); #ifdef __DISABLE_MILES__ return; #endif @@ -1129,6 +1136,11 @@ int SoundEngine::OpenStreamThreadProc( void* lpParameter ) #endif SoundEngine *soundEngine = (SoundEngine *)lpParameter; soundEngine->m_hStream = AIL_open_stream(soundEngine->m_hDriver,soundEngine->m_szStreamName,0); + + if(soundEngine->m_hStream==0) + { + app.DebugPrintf("SoundEngine::OpenStreamThreadProc - Could not open - %s\n",soundEngine->m_szStreamName); + } return 0; } @@ -1225,7 +1237,11 @@ void SoundEngine::playMusicUpdate() char szName[255]; wcstombs(szName,wstrSoundName.c_str(),255); +#if defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ + string strFile="TPACK:/Data/" + string(szName) + ".binka"; +#else string strFile="TPACK:\\Data\\" + string(szName) + ".binka"; +#endif std::string mountedPath = StorageManager.GetMountedPath(strFile); strcpy(m_szStreamName,mountedPath.c_str()); #endif diff --git a/Minecraft.Client/Common/Audio/SoundNames.cpp b/Minecraft.Client/Common/Audio/SoundNames.cpp index 170c87a0..1ab709b2 100644 --- a/Minecraft.Client/Common/Audio/SoundNames.cpp +++ b/Minecraft.Client/Common/Audio/SoundNames.cpp @@ -151,6 +151,78 @@ const WCHAR *ConsoleSoundEngine::wchSoundNames[eSoundType_MAX]= L"dig.snow", // eSoundType_DIG_SNOW L"dig.stone", // eSoundType_DIG_STONE L"dig.wood", // eSoundType_DIG_WOOD + + // 1.6.4 + L"fireworks.launch", //eSoundType_FIREWORKS_LAUNCH, + L"fireworks.blast", //eSoundType_FIREWORKS_BLAST, + L"fireworks.blast_far", //eSoundType_FIREWORKS_BLAST_FAR, + L"fireworks.large_blast", //eSoundType_FIREWORKS_LARGE_BLAST, + L"fireworks.large_blast_far", //eSoundType_FIREWORKS_LARGE_BLAST_FAR, + L"fireworks.twinkle", //eSoundType_FIREWORKS_TWINKLE, + L"fireworks.twinkle_far", //eSoundType_FIREWORKS_TWINKLE_FAR, + + L"mob.bat.idle", //eSoundType_MOB_BAT_IDLE, + L"mob.bat.hurt", //eSoundType_MOB_BAT_HURT, + L"mob.bat.death", //eSoundType_MOB_BAT_DEATH, + L"mob.bat.takeoff", //eSoundType_MOB_BAT_TAKEOFF, + + L"mob.wither.spawn", //eSoundType_MOB_WITHER_SPAWN, + L"mob.wither.idle", //eSoundType_MOB_WITHER_IDLE, + L"mob.wither.hurt", //eSoundType_MOB_WITHER_HURT, + L"mob.wither.death", //eSoundType_MOB_WITHER_DEATH, + L"mob.wither.shoot", //eSoundType_MOB_WITHER_SHOOT, + + L"mob.cow.step", //eSoundType_MOB_COW_STEP, + L"mob.chicken.step", //eSoundType_MOB_CHICKEN_STEP, + L"mob.pig.step", //eSoundType_MOB_PIG_STEP, + L"mob.enderman.stare", //eSoundType_MOB_ENDERMAN_STARE, + L"mob.enderman.scream", //eSoundType_MOB_ENDERMAN_SCREAM, + L"mob.sheep.shear", //eSoundType_MOB_SHEEP_SHEAR, + L"mob.sheep.step", //eSoundType_MOB_SHEEP_STEP, + L"mob.skeleton.death", //eSoundType_MOB_SKELETON_DEATH, + L"mob.skeleton.step", //eSoundType_MOB_SKELETON_STEP, + L"mob.spider.step", //eSoundType_MOB_SPIDER_STEP, + L"mob.wolf.step", //eSoundType_MOB_WOLF_STEP, + L"mob.zombie.step", //eSoundType_MOB_ZOMBIE_STEP, + + L"liquid.swim", //eSoundType_LIQUID_SWIM, + + L"mob.horse.land", //eSoundType_MOB_HORSE_LAND, + L"mob.horse.armor", //eSoundType_MOB_HORSE_ARMOR, + L"mob.horse.leather", //eSoundType_MOB_HORSE_LEATHER, + L"mob.horse.zombie.death", //eSoundType_MOB_HORSE_ZOMBIE_DEATH, + L"mob.horse.skeleton.death", //eSoundType_MOB_HORSE_SKELETON_DEATH, + L"mob.horse.donkey.death", //eSoundType_MOB_HORSE_DONKEY_DEATH, + L"mob.horse.death", //eSoundType_MOB_HORSE_DEATH, + L"mob.horse.zombie.hit", //eSoundType_MOB_HORSE_ZOMBIE_HIT, + L"mob.horse.skeleton.hit", //eSoundType_MOB_HORSE_SKELETON_HIT, + L"mob.horse.donkey.hit", //eSoundType_MOB_HORSE_DONKEY_HIT, + L"mob.horse.hit", //eSoundType_MOB_HORSE_HIT, + L"mob.horse.zombie.idle", //eSoundType_MOB_HORSE_ZOMBIE_IDLE, + L"mob.horse.skeleton.idle", //eSoundType_MOB_HORSE_SKELETON_IDLE, + L"mob.horse.donkey.idle", //eSoundType_MOB_HORSE_DONKEY_IDLE, + L"mob.horse.idle", //eSoundType_MOB_HORSE_IDLE, + L"mob.horse.donkey.angry", //eSoundType_MOB_HORSE_DONKEY_ANGRY, + L"mob.horse.angry", //eSoundType_MOB_HORSE_ANGRY, + L"mob.horse.gallop", //eSoundType_MOB_HORSE_GALLOP, + L"mob.horse.breathe", //eSoundType_MOB_HORSE_BREATHE, + L"mob.horse.wood", //eSoundType_MOB_HORSE_WOOD, + L"mob.horse.soft", //eSoundType_MOB_HORSE_SOFT, + L"mob.horse.jump", //eSoundType_MOB_HORSE_JUMP, + + L"mob.witch.idle", //eSoundType_MOB_WITCH_IDLE, <--- missing + L"mob.witch.hurt", //eSoundType_MOB_WITCH_HURT, <--- missing + L"mob.witch.death", //eSoundType_MOB_WITCH_DEATH, <--- missing + + L"mob.slime.big", //eSoundType_MOB_SLIME_BIG, + L"mob.slime.small", //eSoundType_MOB_SLIME_SMALL, + + L"eating", //eSoundType_EATING <--- missing + L"random.levelup", //eSoundType_RANDOM_LEVELUP + + // 4J-PB - Some sounds were updated, but we can't do that for the 360 or we have to do a new sound bank + // instead, we'll add the sounds as new ones and change the code to reference them + L"fire.new_ignite", }; diff --git a/Minecraft.Client/Common/BuildVer.h b/Minecraft.Client/Common/BuildVer.h index ee558b03..9248a8eb 100644 --- a/Minecraft.Client/Common/BuildVer.h +++ b/Minecraft.Client/Common/BuildVer.h @@ -7,14 +7,14 @@ // This goes up with each build // 4J-JEV: This value is extracted with a regex so it can be placed as the version in the AppX manifest on Durango. -#define VER_PRODUCTBUILD 495 +#define VER_PRODUCTBUILD 560 // This goes up if there is any change to network traffic or code in a build -#define VER_NETWORK 495 +#define VER_NETWORK 560 #define VER_PRODUCTBUILD_QFE 0 -#define VER_FILEVERSION_STRING "1.3" +#define VER_FILEVERSION_STRING "1.6" #define VER_PRODUCTVERSION_STRING VER_FILEVERSION_STRING -#define VER_FILEVERSION_STRING_W L"1.3" +#define VER_FILEVERSION_STRING_W L"1.6" #define VER_PRODUCTVERSION_STRING_W VER_FILEVERSION_STRING_W #define VER_FILEBETA_STR "" #undef VER_FILEVERSION diff --git a/Minecraft.Client/Common/Colours/ColourTable.cpp b/Minecraft.Client/Common/Colours/ColourTable.cpp index dc58cfb1..5c74d5ec 100644 --- a/Minecraft.Client/Common/Colours/ColourTable.cpp +++ b/Minecraft.Client/Common/Colours/ColourTable.cpp @@ -201,6 +201,10 @@ wchar_t *ColourTable::ColourTableElements[eMinecraftColour_COUNT] = L"Effect_Hunger", L"Effect_Weakness", L"Effect_Poison", + L"Effect_Wither", + L"Effect_HealthBoost", + L"Effect_Absorption", + L"Effect_Saturation", L"Potion_BaseColour", @@ -246,6 +250,12 @@ wchar_t *ColourTable::ColourTableElements[eMinecraftColour_COUNT] = 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"Armour_Default_Leather_Colour", L"Under_Water_Clear_Colour", @@ -262,6 +272,11 @@ wchar_t *ColourTable::ColourTableElements[eMinecraftColour_COUNT] = L"Sign_Text", L"Map_Text", + + L"Leash_Light_Colour", + L"Leash_Dark_Colour", + + L"Fire_Overlay", L"HTMLColor_0", L"HTMLColor_1", diff --git a/Minecraft.Client/Common/Console_Debug_enum.h b/Minecraft.Client/Common/Console_Debug_enum.h index 4e6c2b14..3d2b97af 100644 --- a/Minecraft.Client/Common/Console_Debug_enum.h +++ b/Minecraft.Client/Common/Console_Debug_enum.h @@ -12,15 +12,15 @@ enum eDebugSetting eDebugSetting_CraftAnything, eDebugSetting_UseDpadForDebug, eDebugSetting_MobsDontTick, - eDebugSetting_InstantDestroy, + eDebugSetting_ArtTools, //eDebugSetting_InstantDestroy, eDebugSetting_ShowUIConsole, eDebugSetting_DistributableSave, eDebugSetting_DebugLeaderboards, - eDebugSetting_EnableHeightWaterBiomeOverride, //eDebugSetting_TipsAlwaysOn, + eDebugSetting_EnableHeightWaterOverride, //eDebugSetting_TipsAlwaysOn, eDebugSetting_SuperflatNether, //eDebugSetting_LightDarkBackground, eDebugSetting_RegularLightning, - eDebugSetting_GoToNether, + eDebugSetting_EnableBiomeOverride, //eDebugSetting_GoToNether, //eDebugSetting_GoToEnd, eDebugSetting_GoToOverworld, eDebugSetting_UnlockAllDLC, // eDebugSetting_ToggleFont, diff --git a/Minecraft.Client/Common/Consoles_App.cpp b/Minecraft.Client/Common/Consoles_App.cpp index b047f58e..30bc8533 100644 --- a/Minecraft.Client/Common/Consoles_App.cpp +++ b/Minecraft.Client/Common/Consoles_App.cpp @@ -1,10 +1,12 @@  #include "stdafx.h" - -#include "..\..\Minecraft.World\Recipy.h" -#include "..\..\Minecraft.Client\Options.h" -#include "..\..\Minecraft.World\AABB.h" -#include "..\..\Minecraft.World\Vec3.h" +#include "..\..\Minecraft.World\net.minecraft.world.entity.item.h" +#include "..\..\Minecraft.World\net.minecraft.world.entity.player.h" +#include "..\..\Minecraft.World\net.minecraft.world.level.tile.entity.h" +#include "..\..\Minecraft.World\net.minecraft.world.phys.h" +#include "..\..\Minecraft.World\InputOutputStream.h" +#include "..\..\Minecraft.World\compression.h" +#include "..\Options.h" #include "..\MinecraftServer.h" #include "..\MultiPlayerLevel.h" #include "..\GameRenderer.h" @@ -35,8 +37,6 @@ #include "..\ServerPlayer.h" #include "GameRules\ConsoleGameRules.h" #include "GameRules\ConsoleSchematicFile.h" -#include "..\..\Minecraft.World\InputOutputStream.h" -#include "..\..\Minecraft.World\LevelSettings.h" #include "..\User.h" #include "..\..\Minecraft.World\LevelData.h" #include "..\..\Minecraft.World\net.minecraft.world.entity.player.h" @@ -155,8 +155,8 @@ CMinecraftApp::CMinecraftApp() ZeroMemory(&m_InviteData,sizeof(JoinFromInviteData) ); -// m_bRead_TMS_XUIDS_XML=false; -// m_bRead_TMS_DLCINFO_XML=false; + // m_bRead_TMS_XUIDS_XML=false; + // m_bRead_TMS_DLCINFO_XML=false; m_pDLCFileBuffer=NULL; m_dwDLCFileSize=0; @@ -178,6 +178,12 @@ CMinecraftApp::CMinecraftApp() m_uiGameHostSettings=0; +#ifdef _LARGE_WORLDS + m_GameNewWorldSize = 0; + m_bGameNewWorldSizeUseMoat = false; + m_GameNewHellScale = 0; +#endif + ZeroMemory(m_playerColours,MINECRAFT_NET_MAX_PLAYERS); m_iDLCOfferC=0; @@ -198,10 +204,10 @@ CMinecraftApp::CMinecraftApp() m_dwRequiredTexturePackID=0; m_bResetNether=false; - + #ifdef _XBOX -// m_bTransferSavesToXboxOne=false; -// m_uiTransferSlotC=5; + // m_bTransferSavesToXboxOne=false; + // m_uiTransferSlotC=5; #endif #if (defined _CONTENT_PACAKGE) || (defined _XBOX) @@ -308,7 +314,15 @@ LPCWSTR CMinecraftApp::GetString(int iID) void CMinecraftApp::SetAction(int iPad, eXuiAction action, LPVOID param) { - if(m_eXuiAction[iPad] == eAppAction_ExitWorldCapturedThumbnail && action != eAppAction_Idle) + if( ( m_eXuiAction[iPad] == eAppAction_ReloadTexturePack ) && ( action == eAppAction_EthernetDisconnected ) ) + { + app.DebugPrintf("Invalid change of App action for pad %d from %d to %d, ignoring\n", iPad, m_eXuiAction[iPad], action); + } + else if( ( m_eXuiAction[iPad] == eAppAction_ReloadTexturePack ) && ( action == eAppAction_ExitWorld ) ) + { + app.DebugPrintf("Invalid change of App action for pad %d from %d to %d, ignoring\n", iPad, m_eXuiAction[iPad], action); + } + else if(m_eXuiAction[iPad] == eAppAction_ExitWorldCapturedThumbnail && action != eAppAction_Idle) { app.DebugPrintf("Invalid change of App action for pad %d from %d to %d, ignoring\n", iPad, m_eXuiAction[iPad], action); } @@ -352,17 +366,17 @@ void CMinecraftApp::HandleButtonPresses() void CMinecraftApp::HandleButtonPresses(int iPad) { -// // test an update of the profile data -// void *pData=ProfileManager.GetGameDefinedProfileData(iPad); -// -// unsigned char *pchData= (unsigned char *)pData; -// int iCount=0; -// for(int i=0;i player,bool bNavigateBack) @@ -463,7 +477,32 @@ bool CMinecraftApp::LoadCrafting3x3Menu(int iPad,shared_ptr player, return success; } -bool CMinecraftApp::LoadEnchantingMenu(int iPad,shared_ptr inventory, int x, int y, int z, Level *level) +bool CMinecraftApp::LoadFireworksMenu(int iPad,shared_ptr player, int x, int y, int z) +{ + bool success = true; + + FireworksScreenInput* initData = new FireworksScreenInput(); + initData->player = player; + initData->iPad = iPad; + initData->x = x; + initData->y = y; + initData->z = z; + + if(app.GetLocalPlayerCount()>1) + { + initData->bSplitscreen=true; + success = ui.NavigateToScene(iPad,eUIScene_FireworksMenu, initData); + } + else + { + initData->bSplitscreen=false; + success = ui.NavigateToScene(iPad,eUIScene_FireworksMenu, initData); + } + + return success; +} + +bool CMinecraftApp::LoadEnchantingMenu(int iPad,shared_ptr inventory, int x, int y, int z, Level *level, const wstring &name) { bool success = true; @@ -474,6 +513,7 @@ bool CMinecraftApp::LoadEnchantingMenu(int iPad,shared_ptr inventory, initData->y = y; initData->z = z; initData->iPad = iPad; + initData->name = name; if(app.GetLocalPlayerCount()>1) { @@ -634,7 +674,7 @@ bool CMinecraftApp::LoadRepairingMenu(int iPad,shared_ptr inventory, return success; } -bool CMinecraftApp::LoadTradingMenu(int iPad, shared_ptr inventory, shared_ptr trader, Level *level) +bool CMinecraftApp::LoadTradingMenu(int iPad, shared_ptr inventory, shared_ptr trader, Level *level, const wstring &name) { bool success = true; @@ -651,6 +691,71 @@ bool CMinecraftApp::LoadTradingMenu(int iPad, shared_ptr inventory, s return success; } +bool CMinecraftApp::LoadHopperMenu(int iPad ,shared_ptr inventory, shared_ptr hopper) +{ + bool success = true; + + HopperScreenInput *initData = new HopperScreenInput(); + initData->inventory = inventory; + initData->hopper = hopper; + initData->iPad = iPad; + if(app.GetLocalPlayerCount()>1) initData->bSplitscreen=true; + else initData->bSplitscreen=false; + + success = ui.NavigateToScene(iPad,eUIScene_HopperMenu, initData); + + return success; +} + +bool CMinecraftApp::LoadHopperMenu(int iPad ,shared_ptr inventory, shared_ptr hopper) +{ + bool success = true; + + HopperScreenInput *initData = new HopperScreenInput(); + initData->inventory = inventory; + initData->hopper = dynamic_pointer_cast(hopper); + initData->iPad = iPad; + if(app.GetLocalPlayerCount()>1) initData->bSplitscreen=true; + else initData->bSplitscreen=false; + + success = ui.NavigateToScene(iPad,eUIScene_HopperMenu, initData); + + return success; +} + + +bool CMinecraftApp::LoadHorseMenu(int iPad ,shared_ptr inventory, shared_ptr container, shared_ptr horse) +{ + bool success = true; + + HorseScreenInput *initData = new HorseScreenInput(); + initData->inventory = inventory; + initData->container = container; + initData->horse = horse; + initData->iPad = iPad; + if(app.GetLocalPlayerCount()>1) initData->bSplitscreen=true; + else initData->bSplitscreen=false; + + success = ui.NavigateToScene(iPad,eUIScene_HorseMenu, initData); + + return success; +} + +bool CMinecraftApp::LoadBeaconMenu(int iPad ,shared_ptr inventory, shared_ptr beacon) +{ + bool success = true; + + BeaconScreenInput *initData = new BeaconScreenInput(); + initData->inventory = inventory; + initData->beacon = beacon; + initData->iPad = iPad; + if(app.GetLocalPlayerCount()>1) initData->bSplitscreen=true; + else initData->bSplitscreen=false; + + success = ui.NavigateToScene(iPad,eUIScene_BeaconMenu, initData); + + return success; +} ////////////////////////////////////////////// // GAME SETTINGS @@ -750,15 +855,32 @@ int CMinecraftApp::SetDefaultOptions(C_4JProfile::PROFILESETTINGS *pSettings,con // TU 13 GameSettingsA[iPad]->uiMashUpPackWorldsDisplay=0xFFFFFFFF; + // 1.6.4 + app.SetGameHostOption(eGameHostOption_MobGriefing, 1); + app.SetGameHostOption(eGameHostOption_KeepInventory, 0); + app.SetGameHostOption(eGameHostOption_DoMobSpawning, 1 ); + app.SetGameHostOption(eGameHostOption_DoMobLoot, 1 ); + app.SetGameHostOption(eGameHostOption_DoTileDrops, 1 ); + app.SetGameHostOption(eGameHostOption_NaturalRegeneration, 1 ); + app.SetGameHostOption(eGameHostOption_DoDaylightCycle, 1 ); + // 4J-PB - leave these in, or remove from everywhere they are referenced! // Although probably best to leave in unless we split the profile settings into platform specific classes - having different meaning per platform for the same bitmask could get confusing -//#ifdef __PS3__ + //#ifdef __PS3__ // PS3DEC13 SetGameSettings(iPad,eGameSetting_PS3_EULA_Read,0); // EULA not read // PS3 1.05 - added Greek - GameSettingsA[iPad]->ucLanguage = MINECRAFT_LANGUAGE_DEFAULT; // use the system language -//#endif + + // 4J-JEV: We cannot change these in-game, as they could affect localised strings and font. + // XB1: Fix for #172947 - Content: Gameplay: While playing in language different form system default one and resetting options to their defaults in active gameplay causes in-game language to change and HUD to disappear + if (!app.GetGameStarted()) + { + GameSettingsA[iPad]->ucLanguage = MINECRAFT_LANGUAGE_DEFAULT; // use the system language + GameSettingsA[iPad]->ucLocale = MINECRAFT_LANGUAGE_DEFAULT; // use the system locale + } + + //#endif #if (defined __PS3__ || defined __ORBIS__ || defined _DURANGO || defined __PSVITA__) GameSettingsA[iPad]->bSettingsChanged=bWriteProfile; @@ -780,7 +902,7 @@ int CMinecraftApp::DefaultOptionsCallback(LPVOID pParam,C_4JProfile::PROFILESETT pApp->DebugPrintf("Setting default options for player %d", iPad); pApp->SetAction(iPad,eAppAction_SetDefaultOptions, (LPVOID)pSettings); //pApp->SetDefaultOptions(pSettings,iPad); - + // if the profile data has been changed, then force a profile write // It seems we're allowed to break the 5 minute rule if it's the result of a user action //pApp->CheckGameSettingsChanged(); @@ -790,6 +912,28 @@ int CMinecraftApp::DefaultOptionsCallback(LPVOID pParam,C_4JProfile::PROFILESETT #if ( defined __PS3__ || defined __ORBIS__ || defined _DURANGO || defined __PSVITA__) +wstring CMinecraftApp::toStringOptionsStatus(const C4JStorage::eOptionsCallback &eStatus) +{ +#ifndef _CONTENT_PACKAGE + switch(eStatus) + { + case C4JStorage::eOptions_Callback_Idle: return L"Idle"; + case C4JStorage::eOptions_Callback_Write: return L"Write"; + case C4JStorage::eOptions_Callback_Write_Fail_NoSpace: return L"Write_Fail_NoSpace"; + case C4JStorage::eOptions_Callback_Write_Fail: return L"Write_Fail"; + case C4JStorage::eOptions_Callback_Read: return L"Read"; + case C4JStorage::eOptions_Callback_Read_Fail: return L"Read_Fail"; + case C4JStorage::eOptions_Callback_Read_FileNotFound: return L"Read_FileNotFound"; + case C4JStorage::eOptions_Callback_Read_Corrupt: return L"Read_Corrupt"; + case C4JStorage::eOptions_Callback_Read_CorruptDeletePending: return L"Read_CorruptDeletePending"; + case C4JStorage::eOptions_Callback_Read_CorruptDeleted: return L"Read_CorruptDeleted"; + default: return L"[UNRECOGNISED_OPTIONS_STATUS]"; + } +#else + return L""; +#endif +} + #ifdef __ORBIS__ int CMinecraftApp::OptionsDataCallback(LPVOID pParam,int iPad,unsigned short usVersion,C4JStorage::eOptionsCallback eStatus,int iBlocksRequired) { @@ -808,7 +952,13 @@ int CMinecraftApp::GetOptionsBlocksRequired(int iPad) int CMinecraftApp::OptionsDataCallback(LPVOID pParam,int iPad,unsigned short usVersion,C4JStorage::eOptionsCallback eStatus) { CMinecraftApp *pApp=(CMinecraftApp *)pParam; - pApp->m_eOptionsStatusA[iPad]=eStatus; + +#ifndef _CONTENT_PACKAGE + pApp->DebugPrintf("[OptionsDataCallback] Pad_%i: new status == %ls(%i).\n", iPad, pApp->toStringOptionsStatus(eStatus).c_str(), (int) eStatus); +#endif + + pApp->m_eOptionsStatusA[iPad] = eStatus; + return 0; } #endif @@ -850,7 +1000,7 @@ int CMinecraftApp::OldProfileVersionCallback(LPVOID pParam,unsigned char *pucDat pGameSettings->uiBitmaskValues=0L; // reset pGameSettings->uiBitmaskValues|=GAMESETTING_CLOUDS; //eGameSetting_Clouds - on pGameSettings->uiBitmaskValues|=GAMESETTING_ONLINE; //eGameSetting_GameSetting_Online - on - //eGameSetting_GameSetting_Invite - off + //eGameSetting_GameSetting_Invite - off pGameSettings->uiBitmaskValues|=GAMESETTING_FRIENDSOFFRIENDS; //eGameSetting_GameSetting_FriendsOfFriends - on pGameSettings->uiBitmaskValues|=GAMESETTING_DISPLAYUPDATEMSG; //eGameSetting_DisplayUpdateMessage (counter) // TU6 @@ -885,7 +1035,7 @@ int CMinecraftApp::OldProfileVersionCallback(LPVOID pParam,unsigned char *pucDat pGameSettings->uiBitmaskValues=0L; // reset pGameSettings->uiBitmaskValues|=GAMESETTING_CLOUDS; //eGameSetting_Clouds - on pGameSettings->uiBitmaskValues|=GAMESETTING_ONLINE; //eGameSetting_GameSetting_Online - on - //eGameSetting_GameSetting_Invite - off + //eGameSetting_GameSetting_Invite - off pGameSettings->uiBitmaskValues|=GAMESETTING_FRIENDSOFFRIENDS; //eGameSetting_GameSetting_FriendsOfFriends - on pGameSettings->uiBitmaskValues|=GAMESETTING_DISPLAYUPDATEMSG; //eGameSetting_DisplayUpdateMessage (counter) // TU6 @@ -917,7 +1067,7 @@ int CMinecraftApp::OldProfileVersionCallback(LPVOID pParam,unsigned char *pucDat case PROFILE_VERSION_4: { GAME_SETTINGS *pGameSettings=(GAME_SETTINGS *)pucData; - + pGameSettings->uiBitmaskValues&=~GAMESETTING_BEDROCKFOG; //eGameSetting_BedrockFog - off pGameSettings->uiBitmaskValues|=GAMESETTING_DISPLAYHUD; //eGameSetting_DisplayHUD - on pGameSettings->uiBitmaskValues|=GAMESETTING_DISPLAYHAND; //eGameSetting_DisplayHand - on @@ -1040,7 +1190,7 @@ int CMinecraftApp::OldProfileVersionCallback(LPVOID pParam,unsigned char *pucDat { GAME_SETTINGS *pGameSettings=(GAME_SETTINGS *)pucData; // reset the display new message counter - //pGameSettings->uiBitmaskValues|=GAMESETTING_DISPLAYUPDATEMSG; //eGameSetting_DisplayUpdateMessage (counter) + pGameSettings->uiBitmaskValues|=GAMESETTING_DISPLAYUPDATEMSG; //eGameSetting_DisplayUpdateMessage (counter) // Added a bitmask in TU13 to enable/disable display of the Mash-up pack worlds in the saves list pGameSettings->uiMashUpPackWorldsDisplay = 0xFFFFFFFF; @@ -1057,8 +1207,9 @@ int CMinecraftApp::OldProfileVersionCallback(LPVOID pParam,unsigned char *pucDat // PS3DEC13 { GAME_SETTINGS *pGameSettings=(GAME_SETTINGS *)pucData; + pGameSettings->uiBitmaskValues|=GAMESETTING_DISPLAYUPDATEMSG; //eGameSetting_DisplayUpdateMessage (counter) pGameSettings->uiBitmaskValues&=~GAMESETTING_PS3EULAREAD; //eGameSetting_PS3_EULA_Read - off - + // PS3 1.05 - added Greek pGameSettings->ucLanguage = MINECRAFT_LANGUAGE_DEFAULT; // use the system language @@ -1067,18 +1218,29 @@ int CMinecraftApp::OldProfileVersionCallback(LPVOID pParam,unsigned char *pucDat case PROFILE_VERSION_10: { GAME_SETTINGS *pGameSettings=(GAME_SETTINGS *)pucData; - + pGameSettings->uiBitmaskValues|=GAMESETTING_DISPLAYUPDATEMSG; //eGameSetting_DisplayUpdateMessage (counter) pGameSettings->ucLanguage = MINECRAFT_LANGUAGE_DEFAULT; // use the system language } break; - + case PROFILE_VERSION_11: + { + GAME_SETTINGS *pGameSettings=(GAME_SETTINGS *)pucData; + pGameSettings->uiBitmaskValues|=GAMESETTING_DISPLAYUPDATEMSG; //eGameSetting_DisplayUpdateMessage (counter) + } + break; + case PROFILE_VERSION_12: + { + GAME_SETTINGS *pGameSettings=(GAME_SETTINGS *)pucData; + pGameSettings->uiBitmaskValues|=GAMESETTING_DISPLAYUPDATEMSG; //eGameSetting_DisplayUpdateMessage (counter) + } + break; default: { // This might be from a version during testing of new profile updates app.DebugPrintf("Don't know what to do with this profile version!\n"); - #ifndef _CONTENT_PACKAGE - // __debugbreak(); - #endif +#ifndef _CONTENT_PACKAGE + // __debugbreak(); +#endif GAME_SETTINGS *pGameSettings=(GAME_SETTINGS *)pucData; pGameSettings->ucMenuSensitivity=100; //eGameSetting_Sensitivity_InMenu @@ -1208,7 +1370,7 @@ void CMinecraftApp::ActionGameSettings(int iPad,eGameSetting eVal) { app.DebugPrintf("NOT ACTIONING DIFFICULTY - Primary pad is %d, This pad is %d\n",ProfileManager.GetPrimaryPad(),iPad); } - + break; case eGameSetting_Sensitivity_InGame: // 4J-PB - we don't use the options value @@ -1278,7 +1440,7 @@ void CMinecraftApp::ActionGameSettings(int iPad,eGameSetting eVal) } } break; -// Interim TU 1.6.6 + // Interim TU 1.6.6 case eGameSetting_Sensitivity_InMenu: // 4J-PB - we don't use the options value // tell the input that we've changed the sensitivity - range of the slider is 0 to 200, default is 100 @@ -1414,7 +1576,7 @@ DWORD CMinecraftApp::GetPlayerSkinId(int iPad) { // 4J Stu - DLC skins are numbered using decimal rather than hex to make it easier to number manually swprintf(chars, 256, L"dlcskin%08d.png", GET_DLC_SKIN_ID_FROM_BITMASK(dwSkin)); - + Pack=app.m_dlcManager.getPackContainingSkin(chars); if(Pack) @@ -1439,10 +1601,10 @@ DWORD CMinecraftApp::GetPlayerSkinId(int iPad) return dwSkin; } - DWORD CMinecraftApp::GetAdditionalModelParts(int iPad) - { +DWORD CMinecraftApp::GetAdditionalModelParts(int iPad) +{ return m_dwAdditionalModelParts[iPad]; - } +} void CMinecraftApp::SetPlayerCape(int iPad,const wstring &name) @@ -1518,7 +1680,7 @@ unsigned int CMinecraftApp::GetPlayerFavoriteSkinsCount(int iPad) void CMinecraftApp::ValidateFavoriteSkins(int iPad) { unsigned int uiCount=GetPlayerFavoriteSkinsCount(iPad); - + // remove invalid skins unsigned int uiValidSkin=0; wchar_t chars[256]; @@ -1558,12 +1720,6 @@ void CMinecraftApp::HideMashupPackWorld(int iPad, unsigned int iMashupPackID) GameSettingsA[iPad]->bSettingsChanged = true; } -void CMinecraftApp::SetMinecraftLanguage(int iPad, unsigned char ucLanguage) -{ - GameSettingsA[iPad]->ucLanguage = ucLanguage; - GameSettingsA[iPad]->bSettingsChanged = true; -} - void CMinecraftApp::EnableMashupPackWorlds(int iPad) { GameSettingsA[iPad]->uiMashUpPackWorldsDisplay=0xFFFFFFFF; @@ -1575,6 +1731,12 @@ unsigned int CMinecraftApp::GetMashupPackWorlds(int iPad) return GameSettingsA[iPad]->uiMashUpPackWorldsDisplay; } +void CMinecraftApp::SetMinecraftLanguage(int iPad, unsigned char ucLanguage) +{ + GameSettingsA[iPad]->ucLanguage = ucLanguage; + GameSettingsA[iPad]->bSettingsChanged = true; +} + unsigned char CMinecraftApp::GetMinecraftLanguage(int iPad) { // if there are no game settings read yet, return the default language @@ -1588,6 +1750,25 @@ unsigned char CMinecraftApp::GetMinecraftLanguage(int iPad) } } +void CMinecraftApp::SetMinecraftLocale(int iPad, unsigned char ucLocale) +{ + GameSettingsA[iPad]->ucLocale = ucLocale; + GameSettingsA[iPad]->bSettingsChanged = true; +} + +unsigned char CMinecraftApp::GetMinecraftLocale(int iPad) +{ + // if there are no game settings read yet, return the default language + if(GameSettingsA[iPad]==NULL) + { + return 0; + } + else + { + return GameSettingsA[iPad]->ucLocale; + } +} + void CMinecraftApp::SetGameSettings(int iPad,eGameSetting eVal,unsigned char ucVal) { //Minecraft *pMinecraft=Minecraft::GetInstance(); @@ -1958,7 +2139,7 @@ void CMinecraftApp::SetGameSettings(int iPad,eGameSetting eVal,unsigned char ucV } break; - // TU9 + // TU9 case eGameSetting_DeathMessages: if((GameSettingsA[iPad]->uiBitmaskValues&GAMESETTING_DEATHMESSAGES)!=(ucVal&0x01)<<10) { @@ -2091,7 +2272,7 @@ unsigned char CMinecraftApp::GetGameSettings(int iPad,eGameSetting eVal) case eGameSetting_SplitScreenVertical: return ((GameSettingsA[iPad]->usBitmaskValues&0x0100)>>8); break; - // 4J-PB - Added for Interim TU for 1.6.6 + // 4J-PB - Added for Interim TU for 1.6.6 case eGameSetting_Sensitivity_InMenu: return GameSettingsA[iPad]->ucMenuSensitivity; break; @@ -2116,7 +2297,7 @@ unsigned char CMinecraftApp::GetGameSettings(int iPad,eGameSetting eVal) case eGameSetting_InterfaceOpacity: return GameSettingsA[iPad]->ucInterfaceOpacity; break; - + case eGameSetting_Clouds: return (GameSettingsA[iPad]->uiBitmaskValues&GAMESETTING_CLOUDS); break; @@ -2144,7 +2325,7 @@ unsigned char CMinecraftApp::GetGameSettings(int iPad,eGameSetting eVal) case eGameSetting_CustomSkinAnim: return (GameSettingsA[iPad]->uiBitmaskValues&GAMESETTING_CUSTOMSKINANIM)>>9; break; - // TU9 + // TU9 case eGameSetting_DeathMessages: return (GameSettingsA[iPad]->uiBitmaskValues&GAMESETTING_DEATHMESSAGES)>>10; break; @@ -2333,18 +2514,18 @@ void CMinecraftApp::ActionDebugMask(int iPad,bool bSetAllClear) } break; - //case eDebugSetting_HandRenderingOff: - // if(ulBitmask&(1<func = &UIScene_PauseMenu::SaveWorldThreadProc; loadingParams->lpParam = (LPVOID)false; @@ -2593,7 +2774,7 @@ void CMinecraftApp::HandleXuiActions(void) } loadingParams->completionData = completionData; - + // 4J Stu - Xbox only #ifdef _XBOX // Temporarily make this scene fullscreen @@ -2624,12 +2805,12 @@ void CMinecraftApp::HandleXuiActions(void) // This just allows it to be shown if(pMinecraft->localgameModes[ProfileManager.GetPrimaryPad()] != NULL) pMinecraft->localgameModes[ProfileManager.GetPrimaryPad()]->getTutorial()->showTutorialPopup(false); - + //INT saveOrCheckpointId = 0; //bool validSave = StorageManager.GetSaveUniqueNumber(&saveOrCheckpointId); //SentientManager.RecordLevelSaveOrCheckpoint(ProfileManager.GetPrimaryPad(), saveOrCheckpointId); - + LoadingInputParams *loadingParams = new LoadingInputParams(); loadingParams->func = &UIScene_PauseMenu::SaveWorldThreadProc; @@ -2642,7 +2823,7 @@ void CMinecraftApp::HandleXuiActions(void) completionData->iPad = ProfileManager.GetPrimaryPad(); //completionData->bAutosaveWasMenuDisplayed=ui.GetMenuDisplayed(ProfileManager.GetPrimaryPad()); loadingParams->completionData = completionData; - + // 4J Stu - Xbox only #ifdef _XBOX // Temporarily make this scene fullscreen @@ -2676,11 +2857,11 @@ void CMinecraftApp::HandleXuiActions(void) #endif // not required - it's done within the removeLocalPlayerIdx - // if(pMinecraft->level->isClientSide) - // { - // // we need to remove the qnetplayer, or this player won't be able to get back into the game until qnet times out and removes them - // g_NetworkManager.NotifyPlayerLeaving(g_NetworkManager.GetLocalPlayerByUserIndex(i)); - // } + // if(pMinecraft->level->isClientSide) + // { + // // we need to remove the qnetplayer, or this player won't be able to get back into the game until qnet times out and removes them + // g_NetworkManager.NotifyPlayerLeaving(g_NetworkManager.GetLocalPlayerByUserIndex(i)); + // } // if there are any tips showing, we need to close them @@ -2747,11 +2928,11 @@ void CMinecraftApp::HandleXuiActions(void) } } } - + #ifdef _DURANGO ProfileManager.RemoveGamepadFromGame(i); #endif - + SetAction(i,eAppAction_Idle); } break; @@ -2936,12 +3117,12 @@ void CMinecraftApp::HandleXuiActions(void) UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestMessageBox(IDS_UNLOCK_TITLE, IDS_UNLOCK_TOSAVE_TEXT, uiIDA, 2, i,&CMinecraftApp::UnlockFullExitReturned,this,app.GetStringTable()); + ui.RequestErrorMessage(IDS_UNLOCK_TITLE, IDS_UNLOCK_TOSAVE_TEXT, uiIDA, 2, i,&CMinecraftApp::UnlockFullExitReturned,this); } // Change the presence info // Are we offline or online, and how many players are there - + if(g_NetworkManager.GetPlayerCount()>1) { for(int j=0;jplayerLeftTutorial( idx ); @@ -3031,14 +3212,14 @@ void CMinecraftApp::HandleXuiActions(void) SetGameStarted(false); ui.CloseAllPlayersScenes(); - + // 4J Stu - Fix for #12368 - Crash: Game crashes when saving then exiting and selecting to save for(unsigned int idx = 0; idx < XUSER_MAX_COUNT; ++idx) { #ifdef _XBOX app.TutorialSceneNavigateBack(idx,true); #endif - + // 4J Stu - Fix for #13257 - CRASH: Gameplay: Title crashed after exiting the tutorial // It doesn't matter if they were in the tutorial already pMinecraft->playerLeftTutorial( idx ); @@ -3054,7 +3235,7 @@ void CMinecraftApp::HandleXuiActions(void) completionData->type = e_ProgressCompletion_NavigateToHomeMenu; completionData->iPad = DEFAULT_XUI_MENU_USER; loadingParams->completionData = completionData; - + ui.NavigateToScene(ProfileManager.GetPrimaryPad(),eUIScene_FullscreenProgress, loadingParams); } @@ -3072,7 +3253,7 @@ void CMinecraftApp::HandleXuiActions(void) param->showTooltips = false; param->setFailTimer = false; ui.NavigateToScene(i,eUIScene_ConnectingProgress, param); - + // Need to reset this incase the player has already died and respawned pMinecraft->localplayers[i]->SetPlayerRespawned(false); @@ -3100,7 +3281,7 @@ void CMinecraftApp::HandleXuiActions(void) // Disable game & update thread whilst we do any of this //app.SetGameStarted(false); pMinecraft->gameRenderer->DisableUpdateThread(); - + // 4J Stu - We don't need this on a thread in multiplayer as respawning is asynchronous. pMinecraft->localplayers[i]->respawn(); @@ -3135,8 +3316,8 @@ void CMinecraftApp::HandleXuiActions(void) // clear the progress messages -// pMinecraft->progressRenderer->progressStart(-1); -// pMinecraft->progressRenderer->progressStage(-1); + // pMinecraft->progressRenderer->progressStart(-1); + // pMinecraft->progressRenderer->progressStage(-1); } else if(!g_NetworkManager.IsInGameplay()) { @@ -3173,10 +3354,10 @@ void CMinecraftApp::HandleXuiActions(void) pStats->clear(); // 4J-PB - the libs will display the Returned to Title screen -// UINT uiIDA[1]; -// uiIDA[0]=IDS_CONFIRM_OK; -// -// ui.RequestMessageBox(IDS_RETURNEDTOMENU_TITLE, IDS_RETURNEDTOTITLESCREEN_TEXT, uiIDA, 1, i,&CMinecraftApp::PrimaryPlayerSignedOutReturned,this,app.GetStringTable()); + // UINT uiIDA[1]; + // uiIDA[0]=IDS_CONFIRM_OK; + // + // ui.RequestMessageBox(IDS_RETURNEDTOMENU_TITLE, IDS_RETURNEDTOTITLESCREEN_TEXT, uiIDA, 1, i,&CMinecraftApp::PrimaryPlayerSignedOutReturned,this,app.GetStringTable()); if( g_NetworkManager.IsInSession() ) { app.SetAction(i,eAppAction_PrimaryPlayerSignedOutReturned); @@ -3215,7 +3396,7 @@ void CMinecraftApp::HandleXuiActions(void) // If there's a non-null level then, for our purposes, the game has started bool gameStarted = false; - for(int i = 0; i < pMinecraft->levels.length; i++) + for(int j = 0; j < pMinecraft->levels.length; j++) { if (pMinecraft->levels.data[i] != NULL) { @@ -3239,7 +3420,7 @@ void CMinecraftApp::HandleXuiActions(void) UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST), g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_LIVE), uiIDA, 1, i,&CMinecraftApp::EthernetDisconnectReturned,this, app.GetStringTable()); + ui.RequestErrorMessage(g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST), g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_LIVE), uiIDA, 1, i,&CMinecraftApp::EthernetDisconnectReturned,this); } else { @@ -3250,6 +3431,15 @@ void CMinecraftApp::HandleXuiActions(void) } else { +#if defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ + if(UIScene_LoadOrJoinMenu::isSaveTransferRunning()) + { + // the save transfer is still in progress, delay jumping back to the main menu until we've cleaned up + SetAction(i,eAppAction_EthernetDisconnected); + } + else +#endif + { app.DebugPrintf("Handling eAppAction_EthernetDisconnected - Not host\n"); // need to clear the player stats - can't assume it'll be done in setlevel - we may not be in the game StatsCounter* pStats = Minecraft::GetInstance()->stats[ i ]; @@ -3257,12 +3447,14 @@ void CMinecraftApp::HandleXuiActions(void) UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST), g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_LIVE), uiIDA, 1, i,&CMinecraftApp::EthernetDisconnectReturned,this, app.GetStringTable()); + ui.RequestErrorMessage(g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST), g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_LIVE), uiIDA, 1, i,&CMinecraftApp::EthernetDisconnectReturned,this); + + } } } } break; - // We currently handle both these returns the same way. + // We currently handle both these returns the same way. case eAppAction_EthernetDisconnectedReturned: case eAppAction_PrimaryPlayerSignedOutReturned: { @@ -3294,14 +3486,14 @@ void CMinecraftApp::HandleXuiActions(void) ui.HideAllGameUIElements(); ui.CloseAllPlayersScenes(); - + // 4J Stu - Fix for #12368 - Crash: Game crashes when saving then exiting and selecting to save for(unsigned int idx = 0; idx < XUSER_MAX_COUNT; ++idx) { #ifdef _XBOX app.TutorialSceneNavigateBack(idx,true); #endif - + // 4J Stu - Fix for #13257 - CRASH: Gameplay: Title crashed after exiting the tutorial // It doesn't matter if they were in the tutorial already pMinecraft->playerLeftTutorial( idx ); @@ -3352,7 +3544,7 @@ void CMinecraftApp::HandleXuiActions(void) uiIDA[0]=IDS_UNLOCK_TITLE; uiIDA[1]=IDS_EXIT_GAME; - ui.RequestMessageBox(IDS_TRIALOVER_TITLE, IDS_TRIALOVER_TEXT, uiIDA, 2, i,&CMinecraftApp::TrialOverReturned,this,app.GetStringTable()); + ui.RequestErrorMessage(IDS_TRIALOVER_TITLE, IDS_TRIALOVER_TEXT, uiIDA, 2, i,&CMinecraftApp::TrialOverReturned,this); } break; @@ -3366,7 +3558,7 @@ void CMinecraftApp::HandleXuiActions(void) uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestMessageBox(IDS_UNLOCK_TITLE, IDS_UNLOCK_ACCEPT_INVITE, uiIDA, 2, i,&CMinecraftApp::UnlockFullInviteReturned,this,app.GetStringTable()); + ui.RequestErrorMessage(IDS_UNLOCK_TITLE, IDS_UNLOCK_ACCEPT_INVITE, uiIDA, 2, i,&CMinecraftApp::UnlockFullInviteReturned,this); } break; case eAppAction_ExitAndJoinFromInvite: @@ -3384,7 +3576,7 @@ void CMinecraftApp::HandleXuiActions(void) uiIDA[1]=IDS_EXIT_GAME_SAVE; uiIDA[2]=IDS_EXIT_GAME_NO_SAVE; - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_LEAVE_VIA_INVITE, uiIDA, 3, i,&CMinecraftApp::ExitAndJoinFromInviteSaveDialogReturned,this, app.GetStringTable(), 0, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_LEAVE_VIA_INVITE, uiIDA, 3, i,&CMinecraftApp::ExitAndJoinFromInviteSaveDialogReturned,this); } else #else @@ -3394,7 +3586,7 @@ void CMinecraftApp::HandleXuiActions(void) uiIDA[1]=IDS_EXIT_GAME_SAVE; uiIDA[2]=IDS_EXIT_GAME_NO_SAVE; - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_LEAVE_VIA_INVITE, uiIDA, 3, i,&CMinecraftApp::ExitAndJoinFromInviteSaveDialogReturned,this, app.GetStringTable(), 0, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_LEAVE_VIA_INVITE, uiIDA, 3, i,&CMinecraftApp::ExitAndJoinFromInviteSaveDialogReturned,this); } else #endif @@ -3406,13 +3598,13 @@ void CMinecraftApp::HandleXuiActions(void) // upsell uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestMessageBox(IDS_UNLOCK_TITLE, IDS_UNLOCK_ACCEPT_INVITE, uiIDA, 2, i,&CMinecraftApp::UnlockFullInviteReturned,this,app.GetStringTable()); + ui.RequestErrorMessage(IDS_UNLOCK_TITLE, IDS_UNLOCK_ACCEPT_INVITE, uiIDA, 2, i,&CMinecraftApp::UnlockFullInviteReturned,this); } else { uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_LEAVE_VIA_INVITE, uiIDA, 2,i,&CMinecraftApp::ExitAndJoinFromInvite,this,app.GetStringTable(), 0, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_LEAVE_VIA_INVITE, uiIDA, 2,i,&CMinecraftApp::ExitAndJoinFromInvite,this); } } } @@ -3430,14 +3622,14 @@ void CMinecraftApp::HandleXuiActions(void) SetGameStarted(false); ui.CloseAllPlayersScenes(); - + // 4J Stu - Fix for #12368 - Crash: Game crashes when saving then exiting and selecting to save for(unsigned int idx = 0; idx < XUSER_MAX_COUNT; ++idx) { #ifdef _XBOX app.TutorialSceneNavigateBack(idx,true); #endif - + // 4J Stu - Fix for #13257 - CRASH: Gameplay: Title crashed after exiting the tutorial // It doesn't matter if they were in the tutorial already pMinecraft->playerLeftTutorial( idx ); @@ -3567,8 +3759,8 @@ void CMinecraftApp::HandleXuiActions(void) // 4J Stu - Copied this from XUI_FullScreenProgress to properly handle the fail case, as the thread will no longer be failing UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_CONNECTION_FAILED, IDS_CONNECTION_LOST_SERVER, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); - + ui.RequestErrorMessage( IDS_CONNECTION_FAILED, IDS_CONNECTION_LOST_SERVER, uiIDA,1,ProfileManager.GetPrimaryPad()); + ui.NavigateToHomeMenu(); ui.UpdatePlayerBasePositions(); } @@ -3580,7 +3772,7 @@ void CMinecraftApp::HandleXuiActions(void) if( g_NetworkManager.IsInGameplay() ) { // This kicks off a thread that waits for the server to end, then closes the current session, starts a new one and joins the local players into it - + SetAction(i,eAppAction_Idle); if( !GetChangingSessionType() && !g_NetworkManager.IsLocalGame() ) @@ -3597,11 +3789,11 @@ void CMinecraftApp::HandleXuiActions(void) ui.CloseAllPlayersScenes(); } ui.ShowOtherPlayersBaseScene(ProfileManager.GetPrimaryPad(), true); - + // Remove this line to fix: // #49084 - TU5: Code: Gameplay: The title crashes every time client navigates to 'Play game' menu and loads/creates new game after a "Connection to Xbox LIVE was lost" message has appeared. //app.NavigateToScene(0,eUIScene_Main); - + LoadingInputParams *loadingParams = new LoadingInputParams(); loadingParams->func = &CGameNetworkManager::ChangeSessionTypeThreadProc; loadingParams->lpParam = NULL; @@ -3663,7 +3855,7 @@ void CMinecraftApp::HandleXuiActions(void) CheckGameSettingsChanged(true,i); break; - + case eAppAction_RemoteServerSave: { // If the remote server save has already finished, don't complete the action @@ -3674,7 +3866,7 @@ void CMinecraftApp::HandleXuiActions(void) } SetAction(i,eAppAction_WaitRemoteServerSaveComplete); - + for(unsigned int i = 0; i < XUSER_MAX_COUNT; ++i) { ui.CloseUIScenes(i, true); @@ -3716,7 +3908,7 @@ void CMinecraftApp::HandleXuiActions(void) { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - C4JStorage::EMessageResult result = ui.RequestMessageBox( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); + C4JStorage::EMessageResult result = ui.RequestErrorMessage( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad()); if(result != C4JStorage::EMessage_Busy) SetAction(i,eAppAction_Idle); } break; @@ -3736,7 +3928,7 @@ void CMinecraftApp::HandleXuiActions(void) MinecraftServer::resetFlags(); } break; - + case eAppAction_BanLevel: { // It's possible that this state can get set after the game has been exited (e.g. by network disconnection) so we can't ban the level at that point @@ -3780,7 +3972,7 @@ void CMinecraftApp::HandleXuiActions(void) { swprintf(wchFormat, 40, L"%ls\n\n%%ls",player->GetOnlineName()); - C4JStorage::EMessageResult result = ui.RequestMessageBox( IDS_BANNED_LEVEL_TITLE, IDS_PLAYER_BANNED_LEVEL, uiIDA,2,i,&CMinecraftApp::BannedLevelDialogReturned,this, app.GetStringTable(),wchFormat); + C4JStorage::EMessageResult result = ui.RequestErrorMessage( IDS_BANNED_LEVEL_TITLE, IDS_PLAYER_BANNED_LEVEL, uiIDA,2,i,&CMinecraftApp::BannedLevelDialogReturned,this, wchFormat); if(result != C4JStorage::EMessage_Busy) SetAction(i,eAppAction_Idle); } else @@ -3809,7 +4001,7 @@ void CMinecraftApp::HandleXuiActions(void) Minecraft *pMinecraft = Minecraft::GetInstance(); pMinecraft->textures->reloadAll(); pMinecraft->skins->updateUI(); - + if(!pMinecraft->skins->isUsingDefaultSkin()) { TexturePack *pTexturePack = pMinecraft->skins->getSelected(); @@ -3833,11 +4025,37 @@ void CMinecraftApp::HandleXuiActions(void) Minecraft::GetInstance()->soundEngine->playStreaming(L"", 0, 0, 0, 1, 1); } } + break; + + case eAppAction_ReloadFont: + { +#ifndef _XBOX + app.DebugPrintf( + "[Consoles_App] eAppAction_ReloadFont, ingame='%s'.\n", + app.GetGameStarted() ? "Yes" : "No" ); + + SetAction(i,eAppAction_Idle); + + ui.SetTooltips(i, -1); + + ui.ReloadSkin(); + ui.StartReloadSkinThread(); + ui.setCleanupOnReload(); +#endif + } break; case eAppAction_TexturePackRequired: { +#if defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ + UINT uiIDA[2]; + uiIDA[0]=IDS_TEXTUREPACK_FULLVERSION; + uiIDA[1]=IDS_CONFIRM_CANCEL; // let them continue without the texture pack here (as this is only really for r + // Give the player a warning about the texture pack missing + ui.RequestErrorMessage(IDS_DLC_TEXTUREPACK_NOT_PRESENT_TITLE, IDS_DLC_TEXTUREPACK_NOT_PRESENT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::TexturePackDialogReturned,this); + SetAction(i,eAppAction_Idle); +#else #ifdef _XBOX ULONGLONG ullOfferID_Full; app.GetDLCFullOfferIDForPackID(app.GetRequiredTexturePackID(),&ullOfferID_Full); @@ -3850,8 +4068,9 @@ void CMinecraftApp::HandleXuiActions(void) uiIDA[1]=IDS_TEXTURE_PACK_TRIALVERSION; // Give the player a warning about the texture pack missing - ui.RequestMessageBox(IDS_DLC_TEXTUREPACK_NOT_PRESENT_TITLE, IDS_DLC_TEXTUREPACK_NOT_PRESENT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::TexturePackDialogReturned,this,app.GetStringTable()); + ui.RequestErrorMessage(IDS_DLC_TEXTUREPACK_NOT_PRESENT_TITLE, IDS_DLC_TEXTUREPACK_NOT_PRESENT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::TexturePackDialogReturned,this); SetAction(i,eAppAction_Idle); +#endif } break; @@ -3877,7 +4096,7 @@ void CMinecraftApp::HandleXuiActions(void) app.TMSPP_RetrieveFileList(i,C4JStorage::eGlobalStorage_Title,eTMSAction_TMSPP_UserFileList); #else SetTMSAction(i,eTMSAction_TMSPP_UserFileList); - #endif +#endif break; #ifdef _XBOX @@ -3983,47 +4202,47 @@ void CMinecraftApp::HandleXuiActions(void) // TMS files -/* case eTMSAction_TMS_RetrieveFiles_CreateLoad_SignInReturned: - case eTMSAction_TMS_RetrieveFiles_RunPlayGame: -#ifdef _XBOX + /* case eTMSAction_TMS_RetrieveFiles_CreateLoad_SignInReturned: + case eTMSAction_TMS_RetrieveFiles_RunPlayGame: + #ifdef _XBOX SetTMSAction(i,eTMSAction_TMS_XUIDSFile_Waiting); // pass in the next app action on the call or callback completing app.ReadXuidsFileFromTMS(i,eTMSAction_TMS_DLCFile,true); -#else + #else SetTMSAction(i,eTMSAction_TMS_DLCFile); -#endif + #endif break; - case eTMSAction_TMS_DLCFile: -#ifdef _XBOX + case eTMSAction_TMS_DLCFile: + #ifdef _XBOX SetTMSAction(i,eTMSAction_TMS_DLCFile_Waiting); // pass in the next app action on the call or callback completing app.ReadDLCFileFromTMS(i,eTMSAction_TMS_BannedListFile,true); -#else + #else SetTMSAction(i,eTMSAction_TMS_BannedListFile); -#endif + #endif break; - case eTMSAction_TMS_RetrieveFiles_HelpAndOptions: - case eTMSAction_TMS_RetrieveFiles_DLCMain: -#ifdef _XBOX + case eTMSAction_TMS_RetrieveFiles_HelpAndOptions: + case eTMSAction_TMS_RetrieveFiles_DLCMain: + #ifdef _XBOX SetTMSAction(i,eTMSAction_TMS_DLCFile_Waiting); // pass in the next app action on the call or callback completing app.ReadDLCFileFromTMS(i,eTMSAction_Idle,true); -#else + #else SetTMSAction(i,eTMSAction_Idle); -#endif + #endif break; - case eTMSAction_TMS_BannedListFile: -#ifdef _XBOX + case eTMSAction_TMS_BannedListFile: + #ifdef _XBOX SetTMSAction(i,eTMSAction_TMS_BannedListFile_Waiting); // pass in the next app action on the call or callback completing app.ReadBannedList(i, eTMSAction_TMS_RetrieveFiles_Complete,true); -#else + #else SetTMSAction(i,eTMSAction_TMS_RetrieveFiles_Complete); -#endif + #endif break; @@ -4102,12 +4321,12 @@ void CMinecraftApp::loadMediaArchive() #if 0 string path = "Common\\media.arc"; HANDLE hFile = CreateFile( path.c_str(), - GENERIC_READ, - FILE_SHARE_READ, - NULL, - OPEN_EXISTING, - FILE_FLAG_SEQUENTIAL_SCAN, - NULL ); + GENERIC_READ, + FILE_SHARE_READ, + NULL, + OPEN_EXISTING, + FILE_FLAG_SEQUENTIAL_SCAN, + NULL ); if( hFile != INVALID_HANDLE_VALUE ) { @@ -4120,10 +4339,10 @@ void CMinecraftApp::loadMediaArchive() DWORD m_fSize = 0; BOOL hr = ReadFile( hFile, - m_fBody, - dwFileSize, - &m_fSize, - NULL ); + m_fBody, + dwFileSize, + &m_fSize, + NULL ); assert( m_fSize == dwFileSize ); @@ -4199,10 +4418,8 @@ int CMinecraftApp::EthernetDisconnectReturned(void *pParam,int iPad,const C4JSto else { // 4J-PB - turn off the PSN store icon just in case this happened when we were in one of the DLC menus -#ifdef __ORBIS__ - sceNpCommerceHidePsStoreIcon(); -#elif defined __PSVITA__ - sceNpCommerce2HidePsStoreIcon(); +#if defined __ORBIS__ || defined __PSVITA__ + app.GetCommerce()->HidePsStoreIcon(); #endif app.SetAction(iPad,eAppAction_EthernetDisconnectedReturned_Menus); } @@ -4326,7 +4543,7 @@ int CMinecraftApp::SignoutExitWorldThreadProc( void* lpParameter ) app.m_gameRules.unloadCurrentGameRules(); // MinecraftServer::resetFlags(); - + // We can't start/join a new game until the session is destroyed, so wait for it to be idle again while( g_NetworkManager.IsInSession() ) { @@ -4362,7 +4579,7 @@ int CMinecraftApp::UnlockFullInviteReturned(void *pParam,int iPad,C4JStorage::EM { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,&app, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else #endif @@ -4377,7 +4594,7 @@ int CMinecraftApp::UnlockFullInviteReturned(void *pParam,int iPad,C4JStorage::EM UINT uiIDA[2]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::MustSignInFullVersionPurchaseReturned,&app, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::MustSignInFullVersionPurchaseReturned,&app); } #endif @@ -4407,7 +4624,7 @@ int CMinecraftApp::UnlockFullSaveReturned(void *pParam,int iPad,C4JStorage::EMes { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,&app, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else #endif @@ -4422,7 +4639,7 @@ int CMinecraftApp::UnlockFullSaveReturned(void *pParam,int iPad,C4JStorage::EMes UINT uiIDA[2]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::MustSignInFullVersionPurchaseReturned,&app, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::MustSignInFullVersionPurchaseReturned,&app); } #elif defined(__ORBIS__) else @@ -4435,14 +4652,14 @@ int CMinecraftApp::UnlockFullSaveReturned(void *pParam,int iPad,C4JStorage::EMes UINT uiIDA[1]; uiIDA[0] = IDS_OK; - ui.RequestMessageBox( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad); } else { // Not signed in to PSN UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPad, &CMinecraftApp::MustSignInFullVersionPurchaseReturned,&app, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPad, &CMinecraftApp::MustSignInFullVersionPurchaseReturned,&app); } } #endif @@ -4472,7 +4689,7 @@ int CMinecraftApp::UnlockFullExitReturned(void *pParam,int iPad,C4JStorage::EMes { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,&app, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else #endif @@ -4491,7 +4708,7 @@ int CMinecraftApp::UnlockFullExitReturned(void *pParam,int iPad,C4JStorage::EMes UINT uiIDA[2]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::MustSignInFullVersionPurchaseReturnedExitTrial,&app, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::MustSignInFullVersionPurchaseReturnedExitTrial,&app); } #elif defined(__ORBIS__) else @@ -4504,7 +4721,7 @@ int CMinecraftApp::UnlockFullExitReturned(void *pParam,int iPad,C4JStorage::EMes UINT uiIDA[1]; uiIDA[0] = IDS_OK; - ui.RequestMessageBox( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad); // still need to exit the trial or we'll be in the Pause menu with input ignored pApp->SetAction(pMinecraft->player->GetXboxPad(),eAppAction_ExitWorldTrial); } @@ -4513,7 +4730,7 @@ int CMinecraftApp::UnlockFullExitReturned(void *pParam,int iPad,C4JStorage::EMes // Not signed in to PSN UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPad, &CMinecraftApp::MustSignInFullVersionPurchaseReturnedExitTrial,&app, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPad, &CMinecraftApp::MustSignInFullVersionPurchaseReturnedExitTrial,&app); } } #endif @@ -4545,7 +4762,7 @@ int CMinecraftApp::TrialOverReturned(void *pParam,int iPad,C4JStorage::EMessageR { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,&app, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else #endif @@ -4561,7 +4778,7 @@ int CMinecraftApp::TrialOverReturned(void *pParam,int iPad,C4JStorage::EMessageR UINT uiIDA[2]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::MustSignInFullVersionPurchaseReturned,&app, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::MustSignInFullVersionPurchaseReturned,&app); // 4J Stu - We can't actually exit the game, so just exit back to the main menu //pApp->SetAction(pMinecraft->player->GetXboxPad(),eAppAction_ExitWorldTrial); @@ -4629,7 +4846,7 @@ void CMinecraftApp::SignInChangeCallback(LPVOID pParam,bool bPrimaryPlayerChange { // Primary Player gone or there's been a sign out and sign in of the primary player, so kick them out pApp->SetAction(iPrimaryPlayer,eAppAction_PrimaryPlayerSignedOut); - + // 4J-PB - invalidate their banned level list pApp->InvalidateBannedList(iPrimaryPlayer); @@ -4665,7 +4882,7 @@ void CMinecraftApp::SignInChangeCallback(LPVOID pParam,bool bPrimaryPlayerChange { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_GUEST_ORDER_CHANGED_TITLE, IDS_GUEST_ORDER_CHANGED_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,NULL,app.GetStringTable()); + ui.RequestErrorMessage(IDS_GUEST_ORDER_CHANGED_TITLE, IDS_GUEST_ORDER_CHANGED_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad()); } // 4J Stu - On PS4 we can also cause to exit players if they are signed out here, but we shouldn't do that if @@ -4687,7 +4904,7 @@ void CMinecraftApp::SignInChangeCallback(LPVOID pParam,bool bPrimaryPlayerChange if(hasGuestIdChanged && pApp->m_currentSigninInfo[i].dwGuestNumber != 0 && g_NetworkManager.GetLocalPlayerByUserIndex(i)!=NULL) { pApp->DebugPrintf("Recommending removal of player at index %d because their guest id changed\n",i); - pApp->SetAction(i,eAppAction_ExitPlayer); + pApp->SetAction(i, eAppAction_ExitPlayer); } else { @@ -4705,11 +4922,13 @@ void CMinecraftApp::SignInChangeCallback(LPVOID pParam,bool bPrimaryPlayerChange // 4J-PB - invalidate their banned level list pApp->DebugPrintf("Player at index %d Left - invalidating their banned list\n",i); pApp->InvalidateBannedList(i); - - if(g_NetworkManager.GetLocalPlayerByUserIndex(i)!=NULL) + + // 4J-HG: If either the player is in the network manager or in the game, need to exit player + // TODO: Do we need to check the network manager? + if (g_NetworkManager.GetLocalPlayerByUserIndex(i) != NULL || Minecraft::GetInstance()->localplayers[i] != NULL) { pApp->DebugPrintf("Player %d signed out\n", i); - pApp->SetAction(i,eAppAction_ExitPlayer); + pApp->SetAction(i, eAppAction_ExitPlayer); } } } @@ -4735,15 +4954,20 @@ void CMinecraftApp::SignInChangeCallback(LPVOID pParam,bool bPrimaryPlayerChange pApp->SetAction(iPrimaryPlayer,eAppAction_EthernetDisconnected); } - + g_NetworkManager.HandleSignInChange(); } // Some menus require the player to be signed in to live, so if this callback happens and the primary player is // no longer signed in then nav back else if ( pApp->GetLiveLinkRequired() && !ProfileManager.IsSignedInLive( ProfileManager.GetLockedProfile() ) ) { +#ifdef __PSVITA__ + if(!CGameNetworkManager::usingAdhocMode()) // if we're in adhoc mode, we can ignore this +#endif + { pApp->SetAction(iPrimaryPlayer,eAppAction_EthernetDisconnected); } + } #if ( defined __PS3__ || defined __ORBIS__ || defined _DURANGO || defined __PSVITA__ ) // 4J-JEV: Need to kick of loading of profile data for sub-sign in players. @@ -4930,16 +5154,16 @@ void CMinecraftApp::UpsellReturnedCallback(LPVOID pParam, eUpsellType type, eUps #ifdef __PS3__ // special case for people who are not signed in to the PSN while playing the trial game case eUpsellResponse_UserNotSignedInPSN: - + uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::MustSignInFullVersionPurchaseReturned,&app, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::MustSignInFullVersionPurchaseReturned,&app); return; case eUpsellResponse_NotAllowedOnline: // On earning a trophy in the trial version, where the user is underage and can't go online to buy the game, but they selected to buy the game on the trophy upsell uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,&app, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); break; #endif case eUpsellResponse_Declined: @@ -4963,6 +5187,13 @@ void CMinecraftApp::UpsellReturnedCallback(LPVOID pParam, eUpsellType type, eUps TelemetryManager->RecordUpsellResponded(ProfileManager.GetPrimaryPad(), eSen_UpsellID_Full_Version_Of_Game, app.m_dwOfferID, senResponse); } +#ifdef _DEBUG_MENUS_ENABLED +bool CMinecraftApp::DebugArtToolsOn() +{ + return DebugSettingsOn() && (GetGameSettingsDebugMask(ProfileManager.GetPrimaryPad())&(1L< 0) { - Minecraft *pMinecraft=Minecraft::GetInstance(); - pMinecraft->levelRenderer->AddDLCSkinsToMemTextures(); + Minecraft *pMinecraft=Minecraft::GetInstance(); + pMinecraft->levelRenderer->AddDLCSkinsToMemTextures(); } */ @@ -5108,9 +5339,19 @@ void CMinecraftApp::MountNextDLC(int iPad) } } #endif - } -} - +#if defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ + { + TexturePack* currentTPack = Minecraft::GetInstance()->skins->getSelected(); + TexturePack* requiredTPack = Minecraft::GetInstance()->skins->getTexturePackById(app.GetRequiredTexturePackID()); + if(currentTPack != requiredTPack) + { + Minecraft::GetInstance()->skins->selectTexturePackById(app.GetRequiredTexturePackID()); + } + } +#endif + } +} + // 4J-JEV: For the sake of clarity in DLCMountedCallback. #if defined(_XBOX) || defined(__PS3__) || defined(_WINDOWS64) #define CONTENT_DATA_DISPLAY_NAME(a) (a.szDisplayName) @@ -5142,7 +5383,7 @@ int CMinecraftApp::DLCMountedCallback(LPVOID pParam,int iPad,DWORD dwErr,DWORD d app.m_dlcManager.removePack(pack); pack = NULL; } - + if(pack == NULL) { app.DebugPrintf("Pack \"%ls\" is not installed, so adding it\n", CONTENT_DATA_DISPLAY_NAME(ContentData)); @@ -5211,20 +5452,25 @@ int CMinecraftApp::DLCMountedCallback(LPVOID pParam,int iPad,DWORD dwErr,DWORD d // } // } - void CMinecraftApp::HandleDLC(DLCPack *pack) - { - DWORD dwFilesProcessed = 0; +void CMinecraftApp::HandleDLC(DLCPack *pack) +{ + DWORD dwFilesProcessed = 0; #ifndef _XBOX #if defined(__PS3__) || defined(__ORBIS__) || defined(_WINDOWS64) || defined (__PSVITA__) - std::vector dlcFilenames; + std::vector dlcFilenames; #elif defined _DURANGO - std::vector dlcFilenames; + std::vector dlcFilenames; +#endif + StorageManager.GetMountedDLCFileList("DLCDrive", dlcFilenames); +#ifdef __ORBIS__ + // 4J Stu - I don't know why we handle more than one file here any more, however this doesn't seem to work with the PS4 patches + if(dlcFilenames.size() > 0) m_dlcManager.readDLCDataFile(dwFilesProcessed, dlcFilenames[0], pack); +#else + for(int i=0; iucRefCount; @@ -5667,7 +5913,7 @@ int CMinecraftApp::ExitAndJoinFromInviteSaveDialogReturned(void *pParam,int iPad uiIDA[1]=IDS_CONFIRM_CANCEL; // Give the player a warning about the trial version of the texture pack - ui.RequestMessageBox(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_WARNING_DLC_TRIALTEXTUREPACK_TEXT, uiIDA, 2, iPad,&CMinecraftApp::WarningTrialTexturePackReturned,pClass,app.GetStringTable()); + ui.RequestErrorMessage(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_WARNING_DLC_TRIALTEXTUREPACK_TEXT, uiIDA, 2, iPad,&CMinecraftApp::WarningTrialTexturePackReturned,pClass); return S_OK; } @@ -5683,7 +5929,7 @@ int CMinecraftApp::ExitAndJoinFromInviteSaveDialogReturned(void *pParam,int iPad UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TITLE_SAVE_GAME, IDS_CONFIRM_SAVE_GAME, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::ExitAndJoinFromInviteAndSaveReturned,pClass, app.GetStringTable()); + ui.RequestErrorMessage(IDS_TITLE_SAVE_GAME, IDS_CONFIRM_SAVE_GAME, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::ExitAndJoinFromInviteAndSaveReturned,pClass); return 0; } else @@ -5701,7 +5947,7 @@ int CMinecraftApp::ExitAndJoinFromInviteSaveDialogReturned(void *pParam,int iPad UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TITLE_DECLINE_SAVE_GAME, IDS_CONFIRM_DECLINE_SAVE_GAME, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::ExitAndJoinFromInviteDeclineSaveReturned,pClass, app.GetStringTable()); + ui.RequestErrorMessage(IDS_TITLE_DECLINE_SAVE_GAME, IDS_CONFIRM_DECLINE_SAVE_GAME, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CMinecraftApp::ExitAndJoinFromInviteDeclineSaveReturned,pClass); return 0; } @@ -5712,6 +5958,102 @@ int CMinecraftApp::ExitAndJoinFromInviteSaveDialogReturned(void *pParam,int iPad int CMinecraftApp::WarningTrialTexturePackReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) { + // 4J Stu - I added this in when fixing an X1 bug. We should probably add this as well but I don't have time to test all platforms atm +#if 0 //defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) + if(result==C4JStorage::EMessage_ResultAccept) + { + if(!ProfileManager.IsSignedInLive(iPad)) + { + // you're not signed in to PSN! + + } + else + { + // 4J-PB - need to check this user can access the store + bool bContentRestricted; + ProfileManager.GetChatAndContentRestrictions(iPad,true,NULL,&bContentRestricted,NULL); + if(bContentRestricted) + { + UINT uiIDA[1]; + uiIDA[0]=IDS_CONFIRM_OK; + ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad); + } + else + { + // need to get info on the pack to see if the user has already downloaded it + TexturePack *tPack = Minecraft::GetInstance()->skins->getSelected(); + DLCTexturePack *pDLCTexPack=(DLCTexturePack *)tPack; + + // retrieve the store name for the skin pack + DLCPack *pDLCPack=pDLCTexPack->getDLCInfoParentPack();//tPack->getDLCPack(); + const char *pchPackName=wstringtofilename(pDLCPack->getName()); + app.DebugPrintf("Texture Pack - %s\n",pchPackName); + SONYDLC *pSONYDLCInfo=app.GetSONYDLCInfo((char *)pchPackName); + + if(pSONYDLCInfo!=NULL) + { + char chName[42]; + char chSkuID[SCE_NP_COMMERCE2_SKU_ID_LEN]; + + memset(chSkuID,0,SCE_NP_COMMERCE2_SKU_ID_LEN); + // find the info on the skin pack + // we have to retrieve the skuid from the store info, it can't be hardcoded since Sony may change it. + // So we assume the first sku for the product is the one we want +#ifdef __ORBIS__ + sprintf(chName,"%s",pSONYDLCInfo->chDLCKeyname); +#else + sprintf(chName,"%s-%s",app.GetCommerceCategory(),pSONYDLCInfo->chDLCKeyname); +#endif + app.GetDLCSkuIDFromProductList(chName,chSkuID); + // 4J-PB - need to check for an empty store +#if defined __ORBIS__ || defined __PSVITA__ || defined __PS3__ + if(app.CheckForEmptyStore(iPad)==false) +#endif + { + if(app.DLCAlreadyPurchased(chSkuID)) + { + app.DownloadAlreadyPurchased(chSkuID); + } + else + { + app.Checkout(chSkuID); + } + } + } + } + } + } +#endif // + +#ifdef _XBOX_ONE + if(result==C4JStorage::EMessage_ResultAccept) + { + if(ProfileManager.IsSignedIn(iPad)) + { + if (ProfileManager.IsSignedInLive(iPad)) + { + TexturePack *tPack = Minecraft::GetInstance()->skins->getSelected(); + // get the dlc texture pack + DLCTexturePack *pDLCTexPack=(DLCTexturePack *)tPack; + + DLCPack *pDLCPack=pDLCTexPack->getDLCInfoParentPack(); + + DLC_INFO *pDLCInfo=app.GetDLCInfoForProductName((WCHAR *)pDLCPack->getName().c_str()); + + StorageManager.InstallOffer(1,(WCHAR *)pDLCInfo->wsProductId.c_str(),NULL,NULL); + + // the license change coming in when the offer has been installed will cause this scene to refresh + } + else + { + // 4J-JEV: Fix for XB1: #165863 - XR-074: Compliance: With no active network connection user is unable to convert from Trial to Full texture pack and is not messaged why. + UINT uiIDA[1] = { IDS_CONFIRM_OK }; + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad); + } + } + } + +#endif #ifdef _XBOX CMinecraftApp* pClass = (CMinecraftApp*)pParam; @@ -5777,7 +6119,7 @@ int CMinecraftApp::ExitAndJoinFromInviteAndSaveReturned(void *pParam,int iPad,C4 uiIDA[1]=IDS_CONFIRM_CANCEL; // Give the player a warning about the trial version of the texture pack - ui.RequestMessageBox(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_WARNING_DLC_TRIALTEXTUREPACK_TEXT, uiIDA, 2, iPad,&CMinecraftApp::WarningTrialTexturePackReturned,NULL,app.GetStringTable()); + ui.RequestErrorMessage(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_WARNING_DLC_TRIALTEXTUREPACK_TEXT, uiIDA, 2, iPad,&CMinecraftApp::WarningTrialTexturePackReturned,NULL); return S_OK; } @@ -5797,7 +6139,7 @@ int CMinecraftApp::ExitAndJoinFromInviteDeclineSaveReturned(void *pParam,int iPa if(result==C4JStorage::EMessage_ResultDecline) { #if defined(_XBOX_ONE) || defined(__ORBIS__) - StorageManager.SetSaveDisabled(false); + StorageManager.SetSaveDisabled(false); #endif MinecraftServer::getInstance()->setSaveOnExit( false ); // flag a app action of exit and join game from invite @@ -5919,9 +6261,9 @@ void CMinecraftApp::InitialiseTips() // randomise then quicksort // going to leave the multiplayer tip so it is always first -// Only randomise the content package build + // Only randomise the content package build #ifdef _CONTENT_PACKAGE - + for(int i=1;inextInt(); @@ -6019,7 +6361,7 @@ int CMinecraftApp::GetHTMLFontSize(EHTMLFontSize size) wstring CMinecraftApp::FormatHTMLString(int iPad, const wstring &desc, int shadowColour /*= 0xFFFFFFFF*/) { wstring text(desc); - + wchar_t replacements[64]; // We will also insert line breaks here as couldn't figure out how to get them to come through from strings.resx ! text = replaceAll(text, L"{*B*}", L"
" ); @@ -6094,6 +6436,8 @@ wstring CMinecraftApp::FormatHTMLString(int iPad, const wstring &desc, int shado text = replaceAll(text, L"{*CONTROLLER_ACTION_CRAFTING*}", GetActionReplacement(iPad,MINECRAFT_ACTION_CRAFTING ) ); text = replaceAll(text, L"{*CONTROLLER_ACTION_DROP*}", GetActionReplacement(iPad,MINECRAFT_ACTION_DROP ) ); text = replaceAll(text, L"{*CONTROLLER_ACTION_CAMERA*}", GetActionReplacement(iPad,MINECRAFT_ACTION_RENDER_THIRD_PERSON ) ); + text = replaceAll(text, L"{*CONTROLLER_ACTION_MENU_PAGEDOWN*}", GetActionReplacement(iPad,ACTION_MENU_PAGEDOWN ) ); + text = replaceAll(text, L"{*CONTROLLER_ACTION_DISMOUNT*}", GetActionReplacement(iPad,MINECRAFT_ACTION_SNEAK_TOGGLE ) ); text = replaceAll(text, L"{*CONTROLLER_VK_A*}", GetVKReplacement(VK_PAD_A) ); text = replaceAll(text, L"{*CONTROLLER_VK_B*}", GetVKReplacement(VK_PAD_B) ); text = replaceAll(text, L"{*CONTROLLER_VK_X*}", GetVKReplacement(VK_PAD_X) ); @@ -6198,20 +6542,20 @@ wstring CMinecraftApp::GetActionReplacement(int iPad, unsigned char ucAction) else if(input &_360_JOY_BUTTON_X) replacement = L"ButtonX"; else if(input &_360_JOY_BUTTON_Y) replacement = L"ButtonY"; else if( - (input &_360_JOY_BUTTON_LSTICK_UP) || - (input &_360_JOY_BUTTON_LSTICK_DOWN) || - (input &_360_JOY_BUTTON_LSTICK_LEFT) || - (input &_360_JOY_BUTTON_LSTICK_RIGHT) - ) + (input &_360_JOY_BUTTON_LSTICK_UP) || + (input &_360_JOY_BUTTON_LSTICK_DOWN) || + (input &_360_JOY_BUTTON_LSTICK_LEFT) || + (input &_360_JOY_BUTTON_LSTICK_RIGHT) + ) { replacement = L"ButtonLeftStick"; } else if( - (input &_360_JOY_BUTTON_RSTICK_LEFT) || - (input &_360_JOY_BUTTON_RSTICK_RIGHT) || - (input &_360_JOY_BUTTON_RSTICK_UP) || - (input &_360_JOY_BUTTON_RSTICK_DOWN) - ) + (input &_360_JOY_BUTTON_RSTICK_LEFT) || + (input &_360_JOY_BUTTON_RSTICK_RIGHT) || + (input &_360_JOY_BUTTON_RSTICK_UP) || + (input &_360_JOY_BUTTON_RSTICK_DOWN) + ) { replacement = L"ButtonRightStick"; } @@ -6465,7 +6809,7 @@ HRESULT CMinecraftApp::RegisterMojangData(WCHAR *pXuidName, PlayerUID xuid, WCHA pMojangData = new MOJANG_DATA; ZeroMemory(pMojangData,sizeof(MOJANG_DATA)); pMojangData->eXuid=eTempXuid; - + wcsncpy( pMojangData->wchSkin, pSkin, MAX_CAPENAME_SIZE); wcsncpy( pMojangData->wchCape, pCape, MAX_CAPENAME_SIZE); MojangData[xuid]=pMojangData; @@ -6483,27 +6827,27 @@ HRESULT CMinecraftApp::RegisterConfigValues(WCHAR *pType, int iValue) { HRESULT hr=S_OK; -// #ifdef _XBOX -// if(pType!=NULL) -// { -// if(wcscmp(pType,L"XboxOneTransfer")==0) -// { -// if(iValue>0) -// { -// app.m_bTransferSavesToXboxOne=true; -// } -// else -// { -// app.m_bTransferSavesToXboxOne=false; -// } -// } -// else if(wcscmp(pType,L"TransferSlotCount")==0) -// { -// app.m_uiTransferSlotC=iValue; -// } -// -// } -// #endif + // #ifdef _XBOX + // if(pType!=NULL) + // { + // if(wcscmp(pType,L"XboxOneTransfer")==0) + // { + // if(iValue>0) + // { + // app.m_bTransferSavesToXboxOne=true; + // } + // else + // { + // app.m_bTransferSavesToXboxOne=false; + // } + // } + // else if(wcscmp(pType,L"TransferSlotCount")==0) + // { + // app.m_uiTransferSlotC=iValue; + // } + // + // } + // #endif return hr; @@ -6630,18 +6974,18 @@ HRESULT CMinecraftApp::RegisterDLCData(eDLCContentType eType, WCHAR *pwchBannerN { case e_DLC_MashupPacks: case e_DLC_TexturePacks: - DLCTextures_PackID[iConfig]=pDLCData->wsProductId; + DLCTextures_PackID[iConfig]=pDLCData->wsProductId; break; } if(pwchFirstSkin[0]!=0) DLCInfo_SkinName[pwchFirstSkin]=pDLCData->wsProductId; - #ifdef _XBOX_ONE +#ifdef _XBOX_ONE // ignore the names, and use the product id instead DLCInfo_Full[pDLCData->wsProductId]=pDLCData; - #else +#else DLCInfo_Full[pDLCData->wsDisplayName]=pDLCData; - #endif +#endif } app.DebugPrintf("DLCInfo - type - %d, productID - %ls, name - %ls , banner - %ls, iconfig - %d, sort index - %d\n",eType,pwchProductId, pwchProductName,pwchBannerName, iConfig, uiSortIndex); return hr; @@ -6689,11 +7033,11 @@ HRESULT CMinecraftApp::RegisterDLCData(char *pchDLCName, unsigned int uiSortInde app.DebugPrintf(5,"Adding DLC - %s\n",pchDLCName); DLCInfo[pchDLCName]=pDLCData; -// if(ullOfferID_Trial!=0ll) DLCInfo_Trial[ullOfferID_Trial]=pDLCData; -// if(ullOfferID_Full!=0ll) DLCInfo_Full[ullOfferID_Full]=pDLCData; -// if(pFirstSkin[0]!=0) DLCInfo_SkinName[pFirstSkin]=ullOfferID_Full; + // if(ullOfferID_Trial!=0ll) DLCInfo_Trial[ullOfferID_Trial]=pDLCData; + // if(ullOfferID_Full!=0ll) DLCInfo_Full[ullOfferID_Full]=pDLCData; + // if(pFirstSkin[0]!=0) DLCInfo_SkinName[pFirstSkin]=ullOfferID_Full; -// DLCInfo[ullOfferID_Trial]=pDLCData; + // DLCInfo[ullOfferID_Trial]=pDLCData; return hr; } @@ -6965,7 +7309,7 @@ DLC_INFO *CMinecraftApp::GetDLCInfoForProductName(WCHAR *pwchProductName) } ++it; } - + return NULL; } @@ -6998,6 +7342,8 @@ void CMinecraftApp::EnterSaveNotificationSection() EnterCriticalSection(&m_saveNotificationCriticalSection); if( m_saveNotificationDepth++ == 0 ) { + if(g_NetworkManager.IsInSession()) // this can be triggered from the front end if we're downloading a save + { MinecraftServer::getInstance()->broadcastStartSavingPacket(); if( g_NetworkManager.IsLocalGame() && g_NetworkManager.GetPlayerCount() == 1 ) @@ -7005,6 +7351,7 @@ void CMinecraftApp::EnterSaveNotificationSection() app.SetXuiServerAction(ProfileManager.GetPrimaryPad(),eXuiServerAction_PauseServer,(void *)TRUE); } } + } LeaveCriticalSection(&m_saveNotificationCriticalSection); } @@ -7013,6 +7360,8 @@ void CMinecraftApp::LeaveSaveNotificationSection() EnterCriticalSection(&m_saveNotificationCriticalSection); if( --m_saveNotificationDepth == 0 ) { + if(g_NetworkManager.IsInSession()) // this can be triggered from the front end if we're downloading a save + { MinecraftServer::getInstance()->broadcastStopSavingPacket(); if( g_NetworkManager.IsLocalGame() && g_NetworkManager.GetPlayerCount() == 1 ) @@ -7020,6 +7369,7 @@ void CMinecraftApp::LeaveSaveNotificationSection() app.SetXuiServerAction(ProfileManager.GetPrimaryPad(),eXuiServerAction_PauseServer,(void *)FALSE); } } + } LeaveCriticalSection(&m_saveNotificationCriticalSection); } @@ -7069,12 +7419,12 @@ int CMinecraftApp::RemoteSaveThreadProc( void* lpParameter ) void CMinecraftApp::ExitGameFromRemoteSave( LPVOID lpParameter ) { int primaryPad = ProfileManager.GetPrimaryPad(); - + UINT uiIDA[3]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 2, primaryPad,&CMinecraftApp::ExitGameFromRemoteSaveDialogReturned,NULL, app.GetStringTable(), 0, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 2, primaryPad,&CMinecraftApp::ExitGameFromRemoteSaveDialogReturned,NULL); } int CMinecraftApp::ExitGameFromRemoteSaveDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) @@ -7212,12 +7562,12 @@ void CMinecraftApp::RemoveLevelFromBannedLevelList(int iPad, PlayerUID xuid, cha { //bool bFound=false; //bool bRes; - + // we will have retrieved the banned level list from TMS, so remove this one from it and write it back to TMS for(AUTO_VAR(it, m_vBannedListA[iPad]->begin()); it != m_vBannedListA[iPad]->end(); ) { PBANNEDLISTDATA pBannedListData = *it; - + if(pBannedListData!=NULL) { #ifdef _XBOX_ONE @@ -7327,8 +7677,8 @@ void CMinecraftApp::SetGameHostOption(eGameHostOption eVal,unsigned int uiVal) } -void CMinecraftApp::SetGameHostOption(unsigned int &uiHostSettings, eGameHostOption eVal,unsigned int uiVal) - { +void CMinecraftApp::SetGameHostOption(unsigned int &uiHostSettings, eGameHostOption eVal, unsigned int uiVal) +{ switch(eVal) { case eGameHostOption_FriendsOfFriends: @@ -7530,6 +7880,99 @@ void CMinecraftApp::SetGameHostOption(unsigned int &uiHostSettings, eGameHostOpt uiHostSettings&=~GAME_HOST_OPTION_BITMASK_DISABLESAVE; } break; + case eGameHostOption_WasntSaveOwner: + if(uiVal!=0) + { + uiHostSettings|=GAME_HOST_OPTION_BITMASK_NOTOWNER; + } + else + { + // off + uiHostSettings&=~GAME_HOST_OPTION_BITMASK_NOTOWNER; + } + break; + case eGameHostOption_MobGriefing: + if(uiVal!=1) + { + uiHostSettings |= GAME_HOST_OPTION_BITMASK_MOBGRIEFING; + } + else + { + // off + uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_MOBGRIEFING; + } + break; + case eGameHostOption_KeepInventory: + if(uiVal!=0) + { + uiHostSettings |= GAME_HOST_OPTION_BITMASK_KEEPINVENTORY; + } + else + { + // off + uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_KEEPINVENTORY; + } + break; + case eGameHostOption_DoMobSpawning: + if(uiVal!=1) + { + uiHostSettings |= GAME_HOST_OPTION_BITMASK_DOMOBSPAWNING; + } + else + { + // off + uiHostSettings &=~ GAME_HOST_OPTION_BITMASK_DOMOBSPAWNING; + } + break; + case eGameHostOption_DoMobLoot: + if(uiVal!=1) + { + uiHostSettings |= GAME_HOST_OPTION_BITMASK_DOMOBLOOT; + } + else + { + // off + uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_DOMOBLOOT; + } + break; + case eGameHostOption_DoTileDrops: + if(uiVal!=1) + { + uiHostSettings |= GAME_HOST_OPTION_BITMASK_DOTILEDROPS; + } + else + { + // off + uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_DOTILEDROPS; + } + break; + case eGameHostOption_NaturalRegeneration: + if(uiVal!=1) + { + uiHostSettings |= GAME_HOST_OPTION_BITMASK_NATURALREGEN; + } + else + { + // off + uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_NATURALREGEN; + } + break; + case eGameHostOption_DoDaylightCycle: + if(uiVal!=1) + { + uiHostSettings |= GAME_HOST_OPTION_BITMASK_DODAYLIGHTCYCLE; + } + else + { + // off + uiHostSettings &= ~GAME_HOST_OPTION_BITMASK_DODAYLIGHTCYCLE; + } + break; + case eGameHostOption_WorldSize: + // clear the difficulty first + uiHostSettings&=~GAME_HOST_OPTION_BITMASK_WORLDSIZE; + uiHostSettings|=(GAME_HOST_OPTION_BITMASK_WORLDSIZE & (uiVal<> GAME_HOST_OPTION_BITMASK_WORLDSIZE_BITSHIFT; + case eGameHostOption_MobGriefing: + return !(uiHostSettings&GAME_HOST_OPTION_BITMASK_MOBGRIEFING); + case eGameHostOption_KeepInventory: + return (uiHostSettings&GAME_HOST_OPTION_BITMASK_KEEPINVENTORY); + case eGameHostOption_DoMobSpawning: + return !(uiHostSettings&GAME_HOST_OPTION_BITMASK_DOMOBSPAWNING); + case eGameHostOption_DoMobLoot: + return !(uiHostSettings&GAME_HOST_OPTION_BITMASK_DOMOBLOOT); + case eGameHostOption_DoTileDrops: + return !(uiHostSettings&GAME_HOST_OPTION_BITMASK_DOTILEDROPS); + case eGameHostOption_NaturalRegeneration: + return !(uiHostSettings&GAME_HOST_OPTION_BITMASK_NATURALREGEN); + case eGameHostOption_DoDaylightCycle: + return !(uiHostSettings&GAME_HOST_OPTION_BITMASK_DODAYLIGHTCYCLE); + break; } return false; @@ -7614,11 +8081,18 @@ unsigned int CMinecraftApp::GetGameHostOption(unsigned int uiHostSettings, eGame bool CMinecraftApp::CanRecordStatsAndAchievements() { + bool isTutorial = Minecraft::GetInstance() != NULL && Minecraft::GetInstance()->isTutorial(); // 4J Stu - All of these options give the host player some advantage, so should not allow achievements return !(app.GetGameHostOption(eGameHostOption_HasBeenInCreative) || app.GetGameHostOption(eGameHostOption_HostCanBeInvisible) || app.GetGameHostOption(eGameHostOption_HostCanChangeHunger) || - app.GetGameHostOption(eGameHostOption_HostCanFly)); + app.GetGameHostOption(eGameHostOption_HostCanFly) || + app.GetGameHostOption(eGameHostOption_WasntSaveOwner) || + !app.GetGameHostOption(eGameHostOption_MobGriefing) || + app.GetGameHostOption(eGameHostOption_KeepInventory) || + !app.GetGameHostOption(eGameHostOption_DoMobSpawning) || + (!app.GetGameHostOption(eGameHostOption_DoDaylightCycle) && !isTutorial ) + ); } void CMinecraftApp::processSchematics(LevelChunk *levelChunk) @@ -7723,8 +8197,8 @@ void CMinecraftApp::GetImageTextData(PBYTE pbImageData, DWORD dwImageBytes,unsig bHostOptionsRead = true; // read the host options value unsigned int uiValueC=0; - unsigned char pszHostOptions[8]; // Hex representation of unsigned int - ZeroMemory(&pszHostOptions,8); + unsigned char pszHostOptions[9]; // Hex representation of unsigned int + ZeroMemory(&pszHostOptions,9); while(*pszKeyword!=0 && (pszKeyword < ucPtr + uiCount + uiChunkLen) && uiValueC < 8) { pszHostOptions[uiValueC++]=*pszKeyword; @@ -7740,8 +8214,8 @@ void CMinecraftApp::GetImageTextData(PBYTE pbImageData, DWORD dwImageBytes,unsig { // read the texture pack value unsigned int uiValueC=0; - unsigned char pszTexturePack[8]; // Hex representation of unsigned int - ZeroMemory(&pszTexturePack,8); + unsigned char pszTexturePack[9]; // Hex representation of unsigned int + ZeroMemory(&pszTexturePack,9); while(*pszKeyword!=0 && (pszKeyword < ucPtr + uiCount + uiChunkLen) && uiValueC < 8) { pszTexturePack[uiValueC++]=*pszKeyword; @@ -7830,7 +8304,7 @@ bool CMinecraftApp::GetTerrainFeaturePosition(_eTerrainFeatureType eType,int *pX for(AUTO_VAR(it, m_vTerrainFeatures.begin()); it < m_vTerrainFeatures.end(); ++it) { FEATURE_DATA *pFeatureData=*it; - + if(pFeatureData->eTerrainFeature==eType) { *pX=pFeatureData->x; @@ -7936,7 +8410,14 @@ wstring CMinecraftApp::getEntityName(eINSTANCEOF type) // 4J-PB - fix for #107167 - Customer Encountered: TU12: Content: UI: There is no information what killed Player after being slain by Iron Golem. case eTYPE_VILLAGERGOLEM: return app.GetString(IDS_IRONGOLEM); - + case eTYPE_HORSE: + return app.GetString(IDS_HORSE); + case eTYPE_WITCH: + return app.GetString(IDS_WITCH); + case eTYPE_WITHERBOSS: + return app.GetString(IDS_WITHER); + case eTYPE_BAT: + return app.GetString(IDS_BAT); }; return L""; @@ -8015,29 +8496,29 @@ unsigned int CMinecraftApp::AddTMSPPFileTypeRequest(eDLCContentType eType, bool for(AUTO_VAR(it, m_TMSPPDownloadQueue.begin()); it != m_TMSPPDownloadQueue.end(); ++it) { - TMSPPRequest *pCurrent = *it; + TMSPPRequest *pCurrent = *it; - if(pCurrent->eType==eType) - { - if(!(pCurrent->eState == e_TMS_ContentState_Retrieving || pCurrent->eState == e_TMS_ContentState_Retrieved)) - { - // promote - if(bPromote) - { - m_TMSPPDownloadQueue.erase(m_TMSPPDownloadQueue.begin()+iPosition); - m_TMSPPDownloadQueue.insert(m_TMSPPDownloadQueue.begin(),pCurrent); - bPromoted=true; - } - } - } - iPosition++; + if(pCurrent->eType==eType) + { + if(!(pCurrent->eState == e_TMS_ContentState_Retrieving || pCurrent->eState == e_TMS_ContentState_Retrieved)) + { + // promote + if(bPromote) + { + m_TMSPPDownloadQueue.erase(m_TMSPPDownloadQueue.begin()+iPosition); + m_TMSPPDownloadQueue.insert(m_TMSPPDownloadQueue.begin(),pCurrent); + bPromoted=true; + } + } + } + iPosition++; } if(bPromoted) { - // re-ordered the list, so leave now - LeaveCriticalSection(&csTMSPPDownloadQueue); - return 0; + // re-ordered the list, so leave now + LeaveCriticalSection(&csTMSPPDownloadQueue); + return 0; } */ @@ -8185,7 +8666,7 @@ unsigned int CMinecraftApp::AddTMSPPFileTypeRequest(eDLCContentType eType, bool //if(iIndex!=-1) { bool bPresent = app.IsFileInMemoryTextures(cString); - + if(!bPresent) { // this may already be present in the vector because of a previous trial/full offer @@ -8329,7 +8810,7 @@ int CMinecraftApp::TMSPPFileReturned(LPVOID pParam,int iPad,int iUserData,C4JSto #if defined(_XBOX) || defined(_WINDOWS64) char szFile[MAX_TMSFILENAME_SIZE]; wcstombs(szFile,pCurrent->wchFilename,MAX_TMSFILENAME_SIZE); - + if(strcmp(szFilename,szFile)==0) #elif _XBOX_ONE @@ -8343,7 +8824,7 @@ int CMinecraftApp::TMSPPFileReturned(LPVOID pParam,int iPad,int iUserData,C4JSto { #ifdef _XBOX_ONE - + switch(pCurrent->eType) { @@ -8365,10 +8846,10 @@ int CMinecraftApp::TMSPPFileReturned(LPVOID pParam,int iPad,int iUserData,C4JSto if(pFileData->pbData[0]==0x89) { // 4J-PB - we need to allocate memory for the file data and copy into it, since the current data is a reference into the blob download memory - PBYTE pbData = new BYTE [pFileData->dwSize]; - memcpy(pbData,pFileData->pbData,pFileData->dwSize); - - pClass->m_vTMSPPData.push_back(pbData); + PBYTE pbData = new BYTE [pFileData->dwSize]; + memcpy(pbData,pFileData->pbData,pFileData->dwSize); + + pClass->m_vTMSPPData.push_back(pbData); app.DebugPrintf("Got image data - %ls\n",pCurrent->wchFilename); app.AddMemoryTextureFile(pCurrent->wchFilename, pbData, pFileData->dwSize); } @@ -8407,7 +8888,7 @@ int CMinecraftApp::TMSPPFileReturned(LPVOID pParam,int iPad,int iUserData,C4JSto } break; } - + } LeaveCriticalSection(&pClass->csTMSPPDownloadQueue); @@ -8661,7 +9142,7 @@ void CMinecraftApp::SetAdditionalSkinBoxes(DWORD dwSkinID, SKIN_BOX *SkinBoxA, D m_AdditionalModelParts.insert( std::pair *>(dwSkinID, pvModelPart) ); m_AdditionalSkinBoxes.insert( std::pair *>(dwSkinID, pvSkinBoxes) ); - + LeaveCriticalSection( &csAdditionalSkinBoxes ); LeaveCriticalSection( &csAdditionalModelParts ); @@ -8725,7 +9206,7 @@ vector *CMinecraftApp::GetAdditionalSkinBoxes(DWORD dwSkinID) pvSkinBoxes = (*it).second; } } - + LeaveCriticalSection( &csAdditionalSkinBoxes ); return pvSkinBoxes; } @@ -8770,14 +9251,14 @@ DWORD CMinecraftApp::getSkinIdFromPath(const wstring &skin) { bool dlcSkin = false; unsigned int skinId = 0; - + if(skin.size() >= 14) { dlcSkin = skin.substr(0,3).compare(L"dlc") == 0; wstring skinValue = skin.substr(7,skin.size()); skinValue = skinValue.substr(0,skinValue.find_first_of(L'.')); - + std::wstringstream ss; // 4J Stu - dlc skins are numbered using decimal to make it easier for artists/people to number manually // Everything else is numbered using hex @@ -8801,7 +9282,7 @@ wstring CMinecraftApp::getSkinPathFromId(DWORD skinId) { // 4J Stu - DLC skins are numbered using decimal rather than hex to make it easier to number manually swprintf(chars, 256, L"dlcskin%08d.png", GET_DLC_SKIN_ID_FROM_BITMASK(skinId)); - + } else { @@ -8822,6 +9303,61 @@ wstring CMinecraftApp::getSkinPathFromId(DWORD skinId) int CMinecraftApp::TexturePackDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) { + + +#if defined __PSVITA__ || defined __PS3__ || defined __ORBIS__ + if(result==C4JStorage::EMessage_ResultAccept) + { + Minecraft *pMinecraft = Minecraft::GetInstance(); + if( pMinecraft->skins->selectTexturePackById(app.GetRequiredTexturePackID()) ) + { + // it's been installed already + } + else + { + // we need to enable background downloading for the DLC + XBackgroundDownloadSetMode(XBACKGROUND_DOWNLOAD_MODE_ALWAYS_ALLOW); + SONYDLC *pSONYDLCInfo=app.GetSONYDLCInfo(app.GetRequiredTexturePackID()); + if(pSONYDLCInfo!=NULL) + { + char chName[42]; + char chKeyName[20]; + char chSkuID[SCE_NP_COMMERCE2_SKU_ID_LEN]; + + memset(chSkuID,0,SCE_NP_COMMERCE2_SKU_ID_LEN); + // we have to retrieve the skuid from the store info, it can't be hardcoded since Sony may change it. + // So we assume the first sku for the product is the one we want + // MGH - keyname in the DLC file is 16 chars long, but there's no space for a NULL terminating char + memset(chKeyName, 0, sizeof(chKeyName)); + strncpy(chKeyName, pSONYDLCInfo->chDLCKeyname, 16); + + #ifdef __ORBIS__ + strcpy(chName, chKeyName); + #else + sprintf(chName,"%s-%s",app.GetCommerceCategory(),chKeyName); + #endif + app.GetDLCSkuIDFromProductList(chName,chSkuID); + // 4J-PB - need to check for an empty store + if(app.CheckForEmptyStore(iPad)==false) + { + if(app.DLCAlreadyPurchased(chSkuID)) + { + app.DownloadAlreadyPurchased(chSkuID); + } + else + { + app.Checkout(chSkuID); + } + } + } + } + } + else + { + app.DebugPrintf("Continuing without installing texture pack\n"); + } +#endif + #ifdef _XBOX if(result!=C4JStorage::EMessage_Cancelled) { @@ -8993,7 +9529,7 @@ bool CMinecraftApp::IsLocalMultiplayerAvailable() void CMinecraftApp::getLocale(vector &vecWstrLocales) { vector locales; - + DWORD dwSystemLanguage = XGetLanguage( ); // 4J-PB - restrict the 360 language until we're ready to have them in @@ -9101,6 +9637,8 @@ void CMinecraftApp::getLocale(vector &vecWstrLocales) case XC_LOCALE_CHILE: case XC_LOCALE_COLOMBIA: case XC_LOCALE_UNITED_STATES: + case XC_LOCALE_LATIN_AMERICA: + locales.push_back(eMCLang_laLAS); locales.push_back(eMCLang_esMX); break; default://XC_LOCALE_SPAIN @@ -9127,6 +9665,7 @@ void CMinecraftApp::getLocale(vector &vecWstrLocales) default: break; } + locales.push_back(eMCLang_hant); locales.push_back(eMCLang_zhCHT); break; case XC_LANGUAGE_PORTUGUESE : @@ -9170,26 +9709,21 @@ void CMinecraftApp::getLocale(vector &vecWstrLocales) { case XC_LOCALE_SINGAPORE: locales.push_back(eMCLang_zhSG); - break; + break; default: break; } - locales.push_back(eMCLang_zhCHS); + locales.push_back(eMCLang_hans); + locales.push_back(eMCLang_csCS); locales.push_back(eMCLang_zhCN); break; - #if defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ || defined _DURANGO case XC_LANGUAGE_DANISH: locales.push_back(eMCLang_daDA); locales.push_back(eMCLang_daDK); break; - case XC_LANGUAGE_LATINAMERICANSPANISH: - locales.push_back(eMCLang_laLAS); - locales.push_back(eMCLang_esES); - break; - case XC_LANGUAGE_FINISH : locales.push_back(eMCLang_fiFI); break; @@ -9238,7 +9772,7 @@ DWORD CMinecraftApp::get_xcLang(WCHAR *pwchLocale) void CMinecraftApp::LocaleAndLanguageInit() { m_localeA[eMCLang_zhCHT] =L"zh-CHT"; - m_localeA[eMCLang_zhCHS] =L"zh-CHS"; + m_localeA[eMCLang_csCS] =L"cs-CS"; m_localeA[eMCLang_laLAS] =L"la-LAS"; m_localeA[eMCLang_null] =L"en-EN"; m_localeA[eMCLang_enUS] =L"en-US"; @@ -9294,14 +9828,17 @@ void CMinecraftApp::LocaleAndLanguageInit() m_localeA[eMCLang_esCO] =L"es-CO"; m_localeA[eMCLang_esUS] =L"es-US"; m_localeA[eMCLang_svSE] =L"sv-SE"; - + m_localeA[eMCLang_csCZ] =L"cs-CZ"; m_localeA[eMCLang_elGR] =L"el-GR"; m_localeA[eMCLang_nnNO] =L"nn-NO"; m_localeA[eMCLang_skSK] =L"sk-SK"; - m_eMCLangA[L"zh-CHT"] =eMCLang_zhCHS; - m_eMCLangA[L"zh-CHS"] =eMCLang_zhCHT; + m_localeA[eMCLang_hans] =L"zh-HANS"; + m_localeA[eMCLang_hant] =L"zh-HANT"; + + m_eMCLangA[L"zh-CHT"] =eMCLang_zhCHT; + m_eMCLangA[L"cs-CS"] =eMCLang_csCS; m_eMCLangA[L"la-LAS"] =eMCLang_laLAS; m_eMCLangA[L"en-EN"] =eMCLang_null; m_eMCLangA[L"en-US"] =eMCLang_enUS; @@ -9363,8 +9900,11 @@ void CMinecraftApp::LocaleAndLanguageInit() m_eMCLangA[L"nn-NO"] =eMCLang_nnNO; m_eMCLangA[L"sk-SK"] =eMCLang_skSK; + m_eMCLangA[L"zh-HANS"] =eMCLang_hans; + m_eMCLangA[L"zh-HANT"] =eMCLang_hant; + m_xcLangA[L"zh-CHT"] =XC_LOCALE_CHINA; - m_xcLangA[L"zh-CHS"] =XC_LOCALE_CHINA; + m_xcLangA[L"cs-CS"] =XC_LOCALE_CHINA; m_xcLangA[L"en-EN"] =XC_LOCALE_UNITED_STATES; m_xcLangA[L"en-US"] =XC_LOCALE_UNITED_STATES; m_xcLangA[L"en-GB"] =XC_LOCALE_GREAT_BRITAIN; @@ -9428,6 +9968,9 @@ void CMinecraftApp::LocaleAndLanguageInit() m_xcLangA[L"cs-CZ"] =XC_LOCALE_CZECH_REPUBLIC; m_xcLangA[L"el-GR"] =XC_LOCALE_GREECE; m_xcLangA[L"sk-SK"] =XC_LOCALE_SLOVAK_REPUBLIC; + + m_xcLangA[L"zh-HANS"] =XC_LOCALE_CHINA; + m_xcLangA[L"zh-HANT"] =XC_LOCALE_CHINA; } void CMinecraftApp::SetTickTMSDLCFiles(bool bVal) @@ -9436,17 +9979,15 @@ void CMinecraftApp::SetTickTMSDLCFiles(bool bVal) m_bTickTMSDLCFiles=bVal; } -wstring CMinecraftApp::getFilePath(DWORD packId, wstring filename, bool bAddDataFolder) +wstring CMinecraftApp::getFilePath(DWORD packId, wstring filename, bool bAddDataFolder, wstring mountPoint) { -#ifdef _XBOX - wstring path = getRootPath(packId, true, bAddDataFolder) + filename; + wstring path = getRootPath(packId, true, bAddDataFolder, mountPoint) + filename; File f(path); if(f.exists()) { return path; } -#endif - return getRootPath(packId, false, true) + filename; + return getRootPath(packId, false, true, mountPoint) + filename; } #ifdef _XBOX @@ -9456,13 +9997,16 @@ enum ETitleUpdateTexturePacks eTUTP_MassEffect = 0x400, eTUTP_Skyrim = 0x401, eTUTP_Halo = 0x402, + eTUTP_Festive = 0x405, eTUTP_Plastic = 0x801, eTUTP_Candy = 0x802, eTUTP_Fantasy = 0x803, eTUTP_Halloween = 0x804, eTUTP_Natural = 0x805, - eTUTP_City = 0x01000806 // 4J Stu - The released City pack had a sub-pack ID + eTUTP_City = 0x01000806, // 4J Stu - The released City pack had a sub-pack ID + eTUTP_Cartoon = 0x807, + eTUTP_Steampunk = 0x01000808, // 4J Stu - The released Steampunk pack had a sub-pack ID }; #ifdef _TU_BUILD @@ -9470,11 +10014,41 @@ wstring titleUpdateTexturePackRoot = L"UPDATE:\\res\\DLC\\"; #else wstring titleUpdateTexturePackRoot = L"GAME:\\res\\TitleUpdate\\DLC\\"; #endif +#else +enum ETitleUpdateTexturePacks +{ + //eTUTP_MassEffect = 0x400, + //eTUTP_Skyrim = 0x401, + //eTUTP_Halo = 0x402, + //eTUTP_Festive = 0x405, + + //eTUTP_Plastic = 0x801, + //eTUTP_Candy = 0x802, + //eTUTP_Fantasy = 0x803, + eTUTP_Halloween = 0x804, + //eTUTP_Natural = 0x805, + //eTUTP_City = 0x01000806, // 4J Stu - The released City pack had a sub-pack ID + //eTUTP_Cartoon = 0x807, + //eTUTP_Steampunk = 0x01000808, // 4J Stu - The released Steampunk pack had a sub-pack ID +}; + +#ifdef _WINDOWS64 +wstring titleUpdateTexturePackRoot = L"Windows64\\DLC\\"; +#elif defined(__ORBIS__) +wstring titleUpdateTexturePackRoot = L"/app0/orbis/CU/DLC/"; +#elif defined(__PSVITA__) +wstring titleUpdateTexturePackRoot = L"PSVita/CU/DLC/"; +#elif defined(__PS3__) +wstring titleUpdateTexturePackRoot = L"PS3/CU/DLC/"; +#else +wstring titleUpdateTexturePackRoot = L"CU\\DLC\\"; +#endif + #endif -wstring CMinecraftApp::getRootPath(DWORD packId, bool allowOverride, bool bAddDataFolder) +wstring CMinecraftApp::getRootPath(DWORD packId, bool allowOverride, bool bAddDataFolder, wstring mountPoint) { - wstring path = L"TPACK:"; + wstring path = mountPoint; #ifdef _XBOX if(allowOverride) { @@ -9489,6 +10063,9 @@ wstring CMinecraftApp::getRootPath(DWORD packId, bool allowOverride, bool bAddDa case eTUTP_Halo: path = titleUpdateTexturePackRoot + L"Halo"; break; + case eTUTP_Festive: + path = titleUpdateTexturePackRoot + L"Festive"; + break; case eTUTP_Plastic: path = titleUpdateTexturePackRoot + L"Plastic"; break; @@ -9507,11 +10084,32 @@ wstring CMinecraftApp::getRootPath(DWORD packId, bool allowOverride, bool bAddDa case eTUTP_City: path = titleUpdateTexturePackRoot + L"City"; break; + case eTUTP_Cartoon: + path = titleUpdateTexturePackRoot + L"Cartoon"; + break; + case eTUTP_Steampunk: + path = titleUpdateTexturePackRoot + L"Steampunk"; + break; }; File folder(path); if(!folder.exists()) { - path = L"TPACK:"; + path = mountPoint; + } + } +#else + if(allowOverride) + { + switch(packId) + { + case eTUTP_Halloween: + path = titleUpdateTexturePackRoot + L"Halloween Texture Pack"; + break; + }; + File folder(path); + if(!folder.exists()) + { + path = mountPoint; } } #endif @@ -9524,6 +10122,7 @@ wstring CMinecraftApp::getRootPath(DWORD packId, bool allowOverride, bool bAddDa { return path + L"\\"; } + } #ifdef _XBOX_ONE diff --git a/Minecraft.Client/Common/Consoles_App.h b/Minecraft.Client/Common/Consoles_App.h index 110054f2..ec36b765 100644 --- a/Minecraft.Client/Common/Consoles_App.h +++ b/Minecraft.Client/Common/Consoles_App.h @@ -39,6 +39,11 @@ class Container; class DispenserTileEntity; class SignTileEntity; class BrewingStandTileEntity; +class CommandBlockEntity; +class HopperTileEntity; +class MinecartHopper; +class EntityHorse; +class BeaconTileEntity; class LocalPlayer; class DLCPack; class LevelRuleset; @@ -87,9 +92,9 @@ public: #ifdef _EXTENDED_ACHIEVEMENTS /* 4J-JEV: - * We need more space in the profile data because of the new achievements and statistics - * necessary for the new expanded achievement set. - */ + * We need more space in the profile data because of the new achievements and statistics + * necessary for the new expanded achievement set. + */ static const int GAME_DEFINED_PROFILE_DATA_BYTES = 2*972; // per user #else static const int GAME_DEFINED_PROFILE_DATA_BYTES = 972; // per user @@ -108,7 +113,7 @@ public: static const int USER_RR = 5; static const int USER_SR = 6; static const int USER_UI = 7; // 4J Stu - This also makes it appear on the UI console - + void HandleButtonPresses(); bool IntroRunning() { return m_bIntroRunning;} void SetIntroRunning(bool bSet) {m_bIntroRunning=bSet;} @@ -127,23 +132,30 @@ public: int GetLocalPlayerCount(void); bool LoadInventoryMenu(int iPad,shared_ptr player, bool bNavigateBack=false); bool LoadCreativeMenu(int iPad,shared_ptr player,bool bNavigateBack=false); - bool LoadEnchantingMenu(int iPad,shared_ptr inventory, int x, int y, int z, Level *level); + bool LoadEnchantingMenu(int iPad,shared_ptr inventory, int x, int y, int z, Level *level, const wstring &name); bool LoadFurnaceMenu(int iPad,shared_ptr inventory, shared_ptr furnace); bool LoadBrewingStandMenu(int iPad,shared_ptr inventory, shared_ptr brewingStand); bool LoadContainerMenu(int iPad,shared_ptr inventory, shared_ptr container); bool LoadTrapMenu(int iPad,shared_ptr inventory, shared_ptr trap); bool LoadCrafting2x2Menu(int iPad,shared_ptr player); bool LoadCrafting3x3Menu(int iPad,shared_ptr player, int x, int y, int z); + bool LoadFireworksMenu(int iPad,shared_ptr player, int x, int y, int z); bool LoadSignEntryMenu(int iPad,shared_ptr sign); bool LoadRepairingMenu(int iPad,shared_ptr inventory, Level *level, int x, int y, int z); - bool LoadTradingMenu(int iPad, shared_ptr inventory, shared_ptr trader, Level *level); + bool LoadTradingMenu(int iPad, shared_ptr inventory, shared_ptr trader, Level *level, const wstring &name); + + bool LoadCommandBlockMenu(int iPad, shared_ptr commandBlock) { return false; } + bool LoadHopperMenu(int iPad ,shared_ptr inventory, shared_ptr hopper); + bool LoadHopperMenu(int iPad ,shared_ptr inventory, shared_ptr hopper); + bool LoadHorseMenu(int iPad ,shared_ptr inventory, shared_ptr container, shared_ptr horse); + bool LoadBeaconMenu(int iPad ,shared_ptr inventory, shared_ptr beacon); bool GetTutorialMode() { return m_bTutorialMode;} void SetTutorialMode(bool bSet) {m_bTutorialMode=bSet;} void SetSpecialTutorialCompletionFlag(int iPad, int index); - static LPCWSTR GetString(int iID); + static LPCWSTR GetString(int iID); eGameMode GetGameMode() { return m_eGameMode;} void SetGameMode(eGameMode eMode) { m_eGameMode=eMode;} @@ -159,7 +171,7 @@ public: void SetXuiServerAction(int iPad, eXuiServerAction action, LPVOID param = NULL) {m_eXuiServerAction[iPad]=action; m_eXuiServerActionParam[iPad] = param;} eXuiServerAction GetGlobalXuiServerAction() {return m_eGlobalXuiServerAction;} void SetGlobalXuiServerAction(eXuiServerAction action) {m_eGlobalXuiServerAction=action;} - + DisconnectPacket::eDisconnectReason GetDisconnectReason() { return m_disconnectReason; } void SetDisconnectReason(DisconnectPacket::eDisconnectReason bVal) { m_disconnectReason = bVal; } @@ -206,6 +218,7 @@ public: static int OldProfileVersionCallback(LPVOID pParam,unsigned char *pucData, const unsigned short usVersion, const int iPad); #if ( defined __PS3__ || defined __ORBIS__ || defined _DURANGO || defined __PSVITA__ ) + wstring toStringOptionsStatus(const C4JStorage::eOptionsCallback &eStatus); static int DefaultOptionsCallback(LPVOID pParam,C4JStorage::PROFILESETTINGS *pSettings, const int iPad); int SetDefaultOptions(C4JStorage::PROFILESETTINGS *pSettings,const int iPad,bool bWriteProfile=true); #ifdef __ORBIS__ @@ -224,7 +237,7 @@ public: #endif virtual void SetRichPresenceContext(int iPad, int contextId) = 0; - + void SetGameSettings(int iPad,eGameSetting eVal,unsigned char ucVal); unsigned char GetGameSettings(int iPad,eGameSetting eVal); unsigned char GetGameSettings(eGameSetting eVal); // for the primary pad @@ -247,7 +260,8 @@ public: // Minecraft language select void SetMinecraftLanguage(int iPad, unsigned char ucLanguage); unsigned char GetMinecraftLanguage(int iPad); - + void SetMinecraftLocale(int iPad, unsigned char ucLanguage); + unsigned char GetMinecraftLocale(int iPad); // 4J-PB - set a timer when the user navigates the quickselect, so we can bring the opacity back to defaults for a short time unsigned int GetOpacityTimer(int iPad) { return m_uiOpacityCountDown[iPad]; } @@ -301,9 +315,11 @@ public: #endif #ifdef _DEBUG_MENUS_ENABLED - bool DebugSettingsOn() { return m_bDebugOptions;} + bool DebugSettingsOn() { return m_bDebugOptions;} + bool DebugArtToolsOn(); #else - bool DebugSettingsOn() { return false;} + bool DebugSettingsOn() { return false;} + bool DebugArtToolsOn() { return false;} #endif void SetDebugSequence(const char *pchSeq); static int DebugInputCallback(LPVOID pParam); @@ -424,10 +440,10 @@ public: byteArray getArchiveFile(const wstring &filename); private: - + static int BannedLevelDialogReturned(void *pParam,int iPad,const C4JStorage::EMessageResult); static int TexturePackDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result); - + VBANNEDLIST *m_vBannedListA[XUSER_MAX_COUNT]; void HandleButtonPresses(int iPad); @@ -440,7 +456,7 @@ private: // Container scene for some menu -// CXuiScene debugContainerScene; + // CXuiScene debugContainerScene; //bool m_bSplitScreenEnabled; @@ -482,14 +498,14 @@ public: static const DWORD m_dwOfferID = 0x00000001; -// timer + // timer void InitTime(); void UpdateTime(); // trial timer void SetTrialTimerStart(void); float getTrialTimer(void); - + // notifications from the game for qnet VNOTIFICATIONS *GetNotifications() {return &m_vNotifications;} @@ -599,7 +615,7 @@ public: unsigned int GetDLCCreditsCount(); SCreditTextItemDef * GetDLCCredits(int iIndex); -// TMS + // TMS void ReadDLCFileFromTMS(int iPad,eTMSAction action, bool bCallback=false); void ReadXuidsFileFromTMS(int iPad,eTMSAction action,bool bCallback=false); @@ -633,8 +649,8 @@ private: static unordered_map DLCInfo_Full; // full offerid, dlc_info static unordered_map DLCInfo_SkinName; // skin name, full offer id #endif -// bool m_bRead_TMS_XUIDS_XML; // track whether we have already read the TMS xuids.xml file -// bool m_bRead_TMS_DLCINFO_XML; // track whether we have already read the TMS DLC.xml file + // bool m_bRead_TMS_XUIDS_XML; // track whether we have already read the TMS xuids.xml file + // bool m_bRead_TMS_DLCINFO_XML; // track whether we have already read the TMS DLC.xml file bool m_bDefaultCapeInstallAttempted; // have we attempted to install the default cape from tms @@ -651,13 +667,13 @@ public: XUSER_SIGNIN_INFO m_currentSigninInfo[XUSER_MAX_COUNT]; //void OverrideFontRenderer(bool set, bool immediate = true); -// void ToggleFontRenderer() { OverrideFontRenderer(!m_bFontRendererOverridden,false); } + // void ToggleFontRenderer() { OverrideFontRenderer(!m_bFontRendererOverridden,false); } BANNEDLIST BannedListA[XUSER_MAX_COUNT]; private: -// XUI_FontRenderer *m_fontRenderer; -// bool m_bFontRendererOverridden; -// bool m_bOverrideFontRenderer; + // XUI_FontRenderer *m_fontRenderer; + // bool m_bFontRendererOverridden; + // bool m_bOverrideFontRenderer; bool m_bRead_BannedListA[XUSER_MAX_COUNT]; @@ -667,7 +683,7 @@ private: public: void SetBanListCheck(int iPad,bool bVal) {m_BanListCheck[iPad]=bVal;} bool GetBanListCheck(int iPad) { return m_BanListCheck[iPad];} -// AUTOSAVE + // AUTOSAVE public: void SetAutosaveTimerTime(void); bool AutosaveDue(void); @@ -685,6 +701,11 @@ private: unsigned int m_uiGameHostSettings; static unsigned char m_szPNG[8]; +#ifdef _LARGE_WORLDS + unsigned int m_GameNewWorldSize; + bool m_bGameNewWorldSizeUseMoat; + unsigned int m_GameNewHellScale; +#endif unsigned int FromBigEndian(unsigned int uiValue); public: @@ -695,6 +716,13 @@ public: unsigned int GetGameHostOption(eGameHostOption eVal); unsigned int GetGameHostOption(unsigned int uiHostSettings, eGameHostOption eVal); +#ifdef _LARGE_WORLDS + void SetGameNewWorldSize(unsigned int newSize, bool useMoat) { m_GameNewWorldSize = newSize; m_bGameNewWorldSizeUseMoat = useMoat; } + unsigned int GetGameNewWorldSize() { return m_GameNewWorldSize; } + unsigned int GetGameNewWorldSizeUseMoat() { return m_bGameNewWorldSizeUseMoat; } + void SetGameNewHellScale(unsigned int newScale) { m_GameNewHellScale = newScale; } + unsigned int GetGameNewHellScale() { return m_GameNewHellScale; } +#endif void SetResetNether(bool bResetNether) {m_bResetNether=bResetNether;} bool GetResetNether() {return m_bResetNether;} bool CanRecordStatsAndAchievements(); @@ -808,9 +836,9 @@ public: DWORD m_dwDLCFileSize; BYTE *m_pDLCFileBuffer; -// static int CallbackReadXuidsFileFromTMS(LPVOID lpParam, WCHAR *wchFilename, int iPad, bool bResult, int iAction); -// static int CallbackDLCFileFromTMS(LPVOID lpParam, WCHAR *wchFilename, int iPad, bool bResult, int iAction); -// static int CallbackBannedListFileFromTMS(LPVOID lpParam, WCHAR *wchFilename, int iPad, bool bResult, int iAction); + // static int CallbackReadXuidsFileFromTMS(LPVOID lpParam, WCHAR *wchFilename, int iPad, bool bResult, int iAction); + // static int CallbackDLCFileFromTMS(LPVOID lpParam, WCHAR *wchFilename, int iPad, bool bResult, int iAction); + // static int CallbackBannedListFileFromTMS(LPVOID lpParam, WCHAR *wchFilename, int iPad, bool bResult, int iAction); // Storing additional model parts per skin texture void SetAdditionalSkinBoxes(DWORD dwSkinID, SKIN_BOX *SkinBoxA, DWORD dwSkinBoxC); @@ -875,27 +903,27 @@ public: void SetTickTMSDLCFiles(bool bVal); - wstring getFilePath(DWORD packId, wstring filename, bool bAddDataFolder); + wstring getFilePath(DWORD packId, wstring filename, bool bAddDataFolder, wstring mountPoint = L"TPACK:"); private: - unordered_mapm_localeA; - unordered_mapm_eMCLangA; - unordered_mapm_xcLangA; - wstring getRootPath(DWORD packId, bool allowOverride, bool bAddDataFolder); + unordered_mapm_localeA; + unordered_mapm_eMCLangA; + unordered_mapm_xcLangA; + wstring getRootPath(DWORD packId, bool allowOverride, bool bAddDataFolder, wstring mountPoint); public: #ifdef _XBOX -// bool m_bTransferSavesToXboxOne; -// unsigned int m_uiTransferSlotC; - + // bool m_bTransferSavesToXboxOne; + // unsigned int m_uiTransferSlotC; + #elif defined (__PS3__) - + #elif defined _DURANGO - + #elif defined _WINDOWS64 //CMinecraftAudio audio; #else // PS4 - + #endif #ifdef _XBOX_ONE diff --git a/Minecraft.Client/Common/DLC/DLCManager.cpp b/Minecraft.Client/Common/DLC/DLCManager.cpp index 123e4266..17c9fc6d 100644 --- a/Minecraft.Client/Common/DLC/DLCManager.cpp +++ b/Minecraft.Client/Common/DLC/DLCManager.cpp @@ -91,6 +91,28 @@ void DLCManager::removePack(DLCPack *pack) } } +void DLCManager::removeAllPacks(void) +{ + for(AUTO_VAR(it, m_packs.begin()); it != m_packs.end(); ++it) + { + DLCPack *pack = (DLCPack *)*it; + delete pack; + } + + m_packs.clear(); +} + +void DLCManager::LanguageChanged(void) +{ + for(AUTO_VAR(it, m_packs.begin()); it != m_packs.end(); ++it) + { + DLCPack *pack = (DLCPack *)*it; + // update the language + pack->UpdateLanguage(); + } + +} + DLCPack *DLCManager::getPack(const wstring &name) { DLCPack *pack = NULL; @@ -292,12 +314,12 @@ DWORD DLCManager::checkForCorruptDLCAndAlert(bool showMessage /*= true*/) WCHAR wchFormat[132]; swprintf(wchFormat, 132, L"%ls\n\n%%ls", firstCorruptPack->getName().c_str()); - C4JStorage::EMessageResult result = ui.RequestMessageBox( IDS_CORRUPT_DLC_TITLE, IDS_CORRUPT_DLC, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable(),wchFormat); + C4JStorage::EMessageResult result = ui.RequestErrorMessage( IDS_CORRUPT_DLC_TITLE, IDS_CORRUPT_DLC, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL,wchFormat); } else { - C4JStorage::EMessageResult result = ui.RequestMessageBox( IDS_CORRUPT_DLC_TITLE, IDS_CORRUPT_DLC_MULTIPLE, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); + C4JStorage::EMessageResult result = ui.RequestErrorMessage( IDS_CORRUPT_DLC_TITLE, IDS_CORRUPT_DLC_MULTIPLE, uiIDA,1,ProfileManager.GetPrimaryPad()); } } diff --git a/Minecraft.Client/Common/DLC/DLCManager.h b/Minecraft.Client/Common/DLC/DLCManager.h index 55a62312..27765232 100644 --- a/Minecraft.Client/Common/DLC/DLCManager.h +++ b/Minecraft.Client/Common/DLC/DLCManager.h @@ -74,6 +74,8 @@ public: void addPack(DLCPack *pack); void removePack(DLCPack *pack); + void removeAllPacks(void); + void LanguageChanged(void); DLCPack *getPack(const wstring &name); #ifdef _XBOX_ONE diff --git a/Minecraft.Client/Common/DLC/DLCPack.cpp b/Minecraft.Client/Common/DLC/DLCPack.cpp index 507e51a7..4a003d05 100644 --- a/Minecraft.Client/Common/DLC/DLCPack.cpp +++ b/Minecraft.Client/Common/DLC/DLCPack.cpp @@ -191,7 +191,8 @@ DLCFile *DLCPack::addFile(DLCManager::EDLCType type, const wstring &path) { case DLCManager::e_DLCType_Skin: { - std::vector splitPath = stringSplit(path,L'/'); + wstring newPath = replaceAll(path, L"\\", L"/"); + std::vector splitPath = stringSplit(newPath,L'/'); wstring strippedPath = splitPath.back(); newFile = new DLCSkinFile(strippedPath); @@ -211,7 +212,8 @@ DLCFile *DLCPack::addFile(DLCManager::EDLCType type, const wstring &path) break; case DLCManager::e_DLCType_Cape: { - std::vector splitPath = stringSplit(path,L'/'); + wstring newPath = replaceAll(path, L"\\", L"/"); + std::vector splitPath = stringSplit(newPath,L'/'); wstring strippedPath = splitPath.back(); newFile = new DLCCapeFile(strippedPath); } @@ -411,3 +413,19 @@ bool DLCPack::hasPurchasedFile(DLCManager::EDLCType type, const wstring &path) return true; }*/ } + +void DLCPack::UpdateLanguage() +{ + // find the language file + DLCManager::e_DLCType_LocalisationData; + DLCFile *file = NULL; + + if(m_files[DLCManager::e_DLCType_LocalisationData].size() > 0) + { + file = m_files[DLCManager::e_DLCType_LocalisationData][0]; + DLCLocalisationFile *localisationFile = (DLCLocalisationFile *)getFile(DLCManager::e_DLCType_LocalisationData, L"languages.loc"); + StringTable *strTable = localisationFile->getStringTable(); + strTable->ReloadStringTable(); + } + +} \ No newline at end of file diff --git a/Minecraft.Client/Common/DLC/DLCPack.h b/Minecraft.Client/Common/DLC/DLCPack.h index 856744c2..df1f65f0 100644 --- a/Minecraft.Client/Common/DLC/DLCPack.h +++ b/Minecraft.Client/Common/DLC/DLCPack.h @@ -68,6 +68,8 @@ public: DWORD getLicenseMask( ) { return m_dwLicenseMask; } wstring getName() { return m_packName; } + + void UpdateLanguage(); #ifdef _XBOX_ONE wstring getPurchaseOfferId() { return m_wsProductId; } #else diff --git a/Minecraft.Client/Common/DLC/DLCTextureFile.cpp b/Minecraft.Client/Common/DLC/DLCTextureFile.cpp index cf99465a..edf071c6 100644 --- a/Minecraft.Client/Common/DLC/DLCTextureFile.cpp +++ b/Minecraft.Client/Common/DLC/DLCTextureFile.cpp @@ -30,6 +30,7 @@ void DLCTextureFile::addParameter(DLCManager::EDLCParameterType type, const wstr { case DLCManager::e_DLCParamType_Anim: m_animString = value; + if(m_animString.empty()) m_animString = L","; m_bIsAnim = true; break; diff --git a/Minecraft.Client/Common/GameRules/ConsoleGenerateStructure.h b/Minecraft.Client/Common/GameRules/ConsoleGenerateStructure.h index 5b97b108..91c4ef35 100644 --- a/Minecraft.Client/Common/GameRules/ConsoleGenerateStructure.h +++ b/Minecraft.Client/Common/GameRules/ConsoleGenerateStructure.h @@ -35,4 +35,8 @@ public: bool checkIntersects(int x0, int y0, int z0, int x1, int y1, int z1); virtual int getMinY(); + + EStructurePiece GetType() { return (EStructurePiece)0; } + void addAdditonalSaveData(CompoundTag *tag) {} + void readAdditonalSaveData(CompoundTag *tag) {} }; \ No newline at end of file diff --git a/Minecraft.Client/Common/GameRules/ConsoleSchematicFile.cpp b/Minecraft.Client/Common/GameRules/ConsoleSchematicFile.cpp index 4a4e27b2..3b995000 100644 --- a/Minecraft.Client/Common/GameRules/ConsoleSchematicFile.cpp +++ b/Minecraft.Client/Common/GameRules/ConsoleSchematicFile.cpp @@ -278,7 +278,7 @@ __int64 ConsoleSchematicFile::applyBlocksAndData(LevelChunk *chunk, AABB *chunkB //{ // if(blockData[i] == Tile::sand_Id || blockData[i] == Tile::sandStone_Id) // { - // blockData[i] = Tile::whiteStone_Id; + // blockData[i] = Tile::endStone_Id; // } //} @@ -706,15 +706,19 @@ void ConsoleSchematicFile::generateSchematicFile(DataOutputStream *dos, Level *l shared_ptr e = *it; bool mobCanBeSaved = false; - if(bSaveMobs) + if (bSaveMobs) { - if( ( e->GetType() & eTYPE_MONSTER ) || ( e->GetType() & eTYPE_WATERANIMAL ) || ( e->GetType() & eTYPE_ANIMAL ) || - ( e->GetType() == eTYPE_CHICKEN ) || ( e->GetType() == eTYPE_WOLF ) || ( e->GetType() == eTYPE_VILLAGER) || ( e->GetType() == eTYPE_MUSHROOMCOW ) ) + if ( e->instanceof(eTYPE_MONSTER) || e->instanceof(eTYPE_WATERANIMAL) || e->instanceof(eTYPE_ANIMAL) || (e->GetType() == eTYPE_VILLAGER) ) + + // 4J-JEV: All these are derived from eTYPE_ANIMAL and true implicitly. + //|| ( e->GetType() == eTYPE_CHICKEN ) || ( e->GetType() == eTYPE_WOLF ) || ( e->GetType() == eTYPE_MUSHROOMCOW ) ) { mobCanBeSaved = true; } } - if(mobCanBeSaved || e->GetType() == eTYPE_MINECART || e->GetType() == eTYPE_BOAT || e->GetType() == eTYPE_PAINTING || e->GetType() == eTYPE_ITEM_FRAME) + + // 4J-JEV: Changed to check for instances of minecarts and hangingEntities instead of just eTYPE_PAINTING, eTYPE_ITEM_FRAME and eTYPE_MINECART + if (mobCanBeSaved || e->instanceof(eTYPE_MINECART) || e->GetType() == eTYPE_BOAT || e->instanceof(eTYPE_HANGING_ENTITY)) { CompoundTag *eTag = new CompoundTag(); if( e->save(eTag) ) @@ -725,7 +729,7 @@ void ConsoleSchematicFile::generateSchematicFile(DataOutputStream *dos, Level *l pos->get(1)->data -= yStart; pos->get(2)->data -= zStart; - if( e->GetType() == eTYPE_PAINTING || e->GetType() == eTYPE_ITEM_FRAME ) + if( e->instanceof(eTYPE_HANGING_ENTITY) ) { ((IntTag *) eTag->get(L"TileX") )->data -= xStart; ((IntTag *) eTag->get(L"TileY") )->data -= yStart; diff --git a/Minecraft.Client/Common/GameRules/GameRuleManager.cpp b/Minecraft.Client/Common/GameRules/GameRuleManager.cpp index 0c6a7804..6e5688cc 100644 --- a/Minecraft.Client/Common/GameRules/GameRuleManager.cpp +++ b/Minecraft.Client/Common/GameRules/GameRuleManager.cpp @@ -106,17 +106,14 @@ void GameRuleManager::loadGameRules(DLCPack *pack) DWORD dSize; byte *dData = dlcHeader->getData(dSize); - LevelGenerationOptions *createdLevelGenerationOptions = new LevelGenerationOptions(); + LevelGenerationOptions *createdLevelGenerationOptions = new LevelGenerationOptions(pack); // = loadGameRules(dData, dSize); //, strings); createdLevelGenerationOptions->setGrSource( dlcHeader ); + createdLevelGenerationOptions->setSrc( LevelGenerationOptions::eSrc_fromDLC ); readRuleFile(createdLevelGenerationOptions, dData, dSize, strings); - createdLevelGenerationOptions->setSrc( LevelGenerationOptions::eSrc_fromDLC ); - - - //createdLevelGenerationOptions->setSrc( LevelGenerationOptions::eSrc_fromDLC ); dlcHeader->lgo = createdLevelGenerationOptions; } @@ -128,15 +125,13 @@ void GameRuleManager::loadGameRules(DLCPack *pack) DWORD dSize; byte *dData = dlcFile->getData(dSize); - LevelGenerationOptions *createdLevelGenerationOptions = new LevelGenerationOptions(); + LevelGenerationOptions *createdLevelGenerationOptions = new LevelGenerationOptions(pack); // = loadGameRules(dData, dSize); //, strings); createdLevelGenerationOptions->setGrSource( new JustGrSource() ); - readRuleFile(createdLevelGenerationOptions, dData, dSize, strings); - createdLevelGenerationOptions->setSrc( LevelGenerationOptions::eSrc_tutorial ); - - //createdLevelGenerationOptions->set_DLCGameRulesFile( dlcFile ); + + readRuleFile(createdLevelGenerationOptions, dData, dSize, strings); createdLevelGenerationOptions->setLoadedData(); } @@ -659,6 +654,25 @@ void GameRuleManager::loadDefaultGameRules() #else // _XBOX +#ifdef _WINDOWS64 + File packedTutorialFile(L"Windows64Media\\Tutorial\\Tutorial.pck"); + if(!packedTutorialFile.exists()) packedTutorialFile = File(L"Windows64\\Tutorial\\Tutorial.pck"); +#elif defined(__ORBIS__) + File packedTutorialFile(L"/app0/orbis/Tutorial/Tutorial.pck"); +#elif defined(__PSVITA__) + File packedTutorialFile(L"PSVita/Tutorial/Tutorial.pck"); +#elif defined(__PS3__) + File packedTutorialFile(L"PS3/Tutorial/Tutorial.pck"); +#else + File packedTutorialFile(L"Tutorial\\Tutorial.pck"); +#endif + if(loadGameRulesPack(&packedTutorialFile)) + { + m_levelGenerators.getLevelGenerators()->at(0)->setWorldName(app.GetString(IDS_PLAY_TUTORIAL)); + //m_levelGenerators.getLevelGenerators()->at(0)->setDefaultSaveName(L"Tutorial"); + m_levelGenerators.getLevelGenerators()->at(0)->setDefaultSaveName(app.GetString(IDS_TUTORIALSAVENAME)); + } +#if 0 wstring fpTutorial = L"Tutorial.pck"; if(app.getArchiveFileSize(fpTutorial) >= 0) { @@ -667,25 +681,18 @@ void GameRuleManager::loadDefaultGameRules() if ( app.m_dlcManager.readDLCDataFile(dwFilesProcessed,fpTutorial,pack,true) ) { app.m_dlcManager.addPack(pack); - m_levelGenerators.getLevelGenerators()->at(0)->setWorldName(app.GetString(IDS_PLAY_TUTORIAL)); - m_levelGenerators.getLevelGenerators()->at(0)->setDefaultSaveName(app.GetString(IDS_TUTORIALSAVENAME)); + //m_levelGenerators.getLevelGenerators()->at(0)->setWorldName(app.GetString(IDS_PLAY_TUTORIAL)); + //m_levelGenerators.getLevelGenerators()->at(0)->setDefaultSaveName(app.GetString(IDS_TUTORIALSAVENAME)); } else delete pack; } - /*StringTable *strings = new StringTable(baStrings.data, baStrings.length); - LevelGenerationOptions *lgo = new LevelGenerationOptions(); - lgo->setGrSource( new JustGrSource() ); - lgo->setSrc( LevelGenerationOptions::eSrc_tutorial ); - readRuleFile(lgo, tutorial.data, tutorial.length, strings); - lgo->setLoadedData();*/ - +#endif #endif } bool GameRuleManager::loadGameRulesPack(File *path) { bool success = false; -#ifdef _XBOX if(path->exists()) { DLCPack *pack = new DLCPack(L"",0xffffffff); @@ -700,12 +707,13 @@ bool GameRuleManager::loadGameRulesPack(File *path) delete pack; } } -#endif return success; } void GameRuleManager::setLevelGenerationOptions(LevelGenerationOptions *levelGen) { + unloadCurrentGameRules(); + m_currentGameRuleDefinitions = NULL; m_currentLevelGenerationOptions = levelGen; diff --git a/Minecraft.Client/Common/GameRules/LevelGenerationOptions.cpp b/Minecraft.Client/Common/GameRules/LevelGenerationOptions.cpp index 717b066e..9ebd3428 100644 --- a/Minecraft.Client/Common/GameRules/LevelGenerationOptions.cpp +++ b/Minecraft.Client/Common/GameRules/LevelGenerationOptions.cpp @@ -7,6 +7,7 @@ #include "..\..\..\Minecraft.World\net.minecraft.world.phys.h" #include "..\..\..\Minecraft.World\net.minecraft.world.level.h" #include "..\..\..\Minecraft.World\net.minecraft.world.level.chunk.h" +#include "Common\DLC\DLCGameRulesHeader.h" #include "..\..\StringTable.h" #include "LevelGenerationOptions.h" #include "ConsoleGameRules.h" @@ -41,7 +42,7 @@ void JustGrSource::setBaseSavePath(const wstring &x) { m_baseSavePath = x; m_bRe bool JustGrSource::ready() { return true; } -LevelGenerationOptions::LevelGenerationOptions() +LevelGenerationOptions::LevelGenerationOptions(DLCPack *parentPack) { m_spawnPos = NULL; m_stringTable = NULL; @@ -49,6 +50,7 @@ LevelGenerationOptions::LevelGenerationOptions() m_hasLoadedData = false; m_seed = 0; + m_bHasBeenInCreative = true; m_useFlatWorld = false; m_bHaveMinY = false; m_minY = INT_MAX; @@ -56,6 +58,9 @@ LevelGenerationOptions::LevelGenerationOptions() m_pbBaseSaveData = NULL; m_dwBaseSaveSize = 0; + + m_parentDLCPack = parentPack; + m_bLoadingData = false; } LevelGenerationOptions::~LevelGenerationOptions() @@ -70,17 +75,17 @@ LevelGenerationOptions::~LevelGenerationOptions() { delete *it; } - + for(AUTO_VAR(it, m_biomeOverrides.begin()); it != m_biomeOverrides.end(); ++it) { delete *it; } - + for(AUTO_VAR(it, m_features.begin()); it != m_features.end(); ++it) { delete *it; } - + if (m_stringTable) if (!isTutorial()) delete m_stringTable; @@ -93,7 +98,7 @@ ConsoleGameRules::EGameRuleType LevelGenerationOptions::getActionType() { return void LevelGenerationOptions::writeAttributes(DataOutputStream *dos, UINT numAttrs) { GameRuleDefinition::writeAttributes(dos, numAttrs + 5); - + ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_spawnX); dos->writeUTF(_toString(m_spawnPos->x)); ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_spawnY); @@ -110,12 +115,12 @@ void LevelGenerationOptions::writeAttributes(DataOutputStream *dos, UINT numAttr void LevelGenerationOptions::getChildren(vector *children) { GameRuleDefinition::getChildren(children); - + vector used_schematics; for (AUTO_VAR(it, m_schematicRules.begin()); it != m_schematicRules.end(); it++) if ( !(*it)->isComplete() ) used_schematics.push_back( *it ); - + for(AUTO_VAR(it, m_structureRules.begin()); it!=m_structureRules.end(); it++) children->push_back( *it ); for(AUTO_VAR(it, used_schematics.begin()); it!=used_schematics.end(); it++) @@ -190,24 +195,24 @@ void LevelGenerationOptions::addAttribute(const wstring &attributeName, const ws { if(attributeValue.compare(L"true") == 0) m_useFlatWorld = true; app.DebugPrintf("LevelGenerationOptions: Adding parameter flatworld=%s\n",m_useFlatWorld?"TRUE":"FALSE"); - } + } else if(attributeName.compare(L"saveName") == 0) { - wstring string(getString(attributeValue)); + wstring string(attributeValue); if(!string.empty()) setDefaultSaveName( string ); else setDefaultSaveName( attributeValue ); app.DebugPrintf("LevelGenerationOptions: Adding parameter saveName=%ls\n", getDefaultSaveName().c_str()); } else if(attributeName.compare(L"worldName") == 0) { - wstring string(getString(attributeValue)); + wstring string(attributeValue); if(!string.empty()) setWorldName( string ); else setWorldName( attributeValue ); app.DebugPrintf("LevelGenerationOptions: Adding parameter worldName=%ls\n", getWorldName()); } else if(attributeName.compare(L"displayName") == 0) { - wstring string(getString(attributeValue)); + wstring string(attributeValue); if(!string.empty()) setDisplayName( string ); else setDisplayName( attributeValue ); app.DebugPrintf("LevelGenerationOptions: Adding parameter displayName=%ls\n", getDisplayName()); @@ -228,6 +233,12 @@ void LevelGenerationOptions::addAttribute(const wstring &attributeName, const ws setBaseSavePath( attributeValue ); app.DebugPrintf("LevelGenerationOptions: Adding parameter baseSaveName=%ls\n", getBaseSavePath().c_str()); } + else if(attributeName.compare(L"hasBeenInCreative") == 0) + { + bool value = _fromString(attributeValue); + m_bHasBeenInCreative = value; + app.DebugPrintf("LevelGenerationOptions: Adding parameter gameMode=%d\n", m_bHasBeenInCreative); + } else { GameRuleDefinition::addAttribute(attributeName, attributeValue); @@ -297,7 +308,7 @@ bool LevelGenerationOptions::checkIntersects(int x0, int y0, int z0, int x1, int m_bHaveMinY = true; } - + // 4J Stu - We DO NOT intersect if our upper bound is below the lower bound for all schematics if( y1 < m_minY ) return false; @@ -413,14 +424,14 @@ void LevelGenerationOptions::getBiomeOverride(int biomeId, BYTE &tile, BYTE &top } } -bool LevelGenerationOptions::isFeatureChunk(int chunkX, int chunkZ, StructureFeature::EFeatureTypes feature) +bool LevelGenerationOptions::isFeatureChunk(int chunkX, int chunkZ, StructureFeature::EFeatureTypes feature, int *orientation) { bool isFeature = false; for(AUTO_VAR(it, m_features.begin()); it != m_features.end(); ++it) { StartFeature *sf = *it; - if(sf->isFeatureChunk(chunkX, chunkZ, feature)) + if(sf->isFeatureChunk(chunkX, chunkZ, feature, orientation)) { isFeature = true; break; @@ -442,15 +453,175 @@ unordered_map *LevelGenerationOptions::getUnfin = new unordered_map(); for (AUTO_VAR(it, usedFiles.begin()); it!=usedFiles.end(); it++) out->insert( pair(*it, getSchematicFile(*it)) ); - + return out; } +void LevelGenerationOptions::loadBaseSaveData() +{ + int mountIndex = -1; + if(m_parentDLCPack != NULL) mountIndex = m_parentDLCPack->GetDLCMountIndex(); + + if(mountIndex > -1) + { +#ifdef _DURANGO + if(StorageManager.MountInstalledDLC(ProfileManager.GetPrimaryPad(),mountIndex,&LevelGenerationOptions::packMounted,this,L"WPACK")!=ERROR_IO_PENDING) +#else + if(StorageManager.MountInstalledDLC(ProfileManager.GetPrimaryPad(),mountIndex,&LevelGenerationOptions::packMounted,this,"WPACK")!=ERROR_IO_PENDING) +#endif + { + // corrupt DLC + setLoadedData(); + app.DebugPrintf("Failed to mount LGO DLC %d for pad %d\n",mountIndex,ProfileManager.GetPrimaryPad()); + } + else + { + m_bLoadingData = true; + app.DebugPrintf("Attempted to mount DLC data for LGO %d\n", mountIndex); + } + } + else + { + setLoadedData(); + app.SetAction(ProfileManager.GetPrimaryPad(), eAppAction_ReloadTexturePack); + } +} + +int LevelGenerationOptions::packMounted(LPVOID pParam,int iPad,DWORD dwErr,DWORD dwLicenceMask) +{ + LevelGenerationOptions *lgo = (LevelGenerationOptions *)pParam; + lgo->m_bLoadingData = false; + if(dwErr!=ERROR_SUCCESS) + { + // corrupt DLC + app.DebugPrintf("Failed to mount LGO DLC for pad %d: %d\n",iPad,dwErr); + } + else + { + app.DebugPrintf("Mounted DLC for LGO, attempting to load data\n"); + DWORD dwFilesProcessed = 0; + int gameRulesCount = lgo->m_parentDLCPack->getDLCItemsCount(DLCManager::e_DLCType_GameRulesHeader); + for(int i = 0; i < gameRulesCount; ++i) + { + DLCGameRulesHeader *dlcFile = (DLCGameRulesHeader *) lgo->m_parentDLCPack->getFile(DLCManager::e_DLCType_GameRulesHeader, i); + + if (!dlcFile->getGrfPath().empty()) + { + File grf( app.getFilePath(lgo->m_parentDLCPack->GetPackID(), dlcFile->getGrfPath(),true, L"WPACK:" ) ); + if (grf.exists()) + { +#ifdef _UNICODE + wstring path = grf.getPath(); + const WCHAR *pchFilename=path.c_str(); + HANDLE fileHandle = CreateFile( + pchFilename, // file name + GENERIC_READ, // access mode + 0, // share mode // TODO 4J Stu - Will we need to share file? Probably not but... + NULL, // Unused + OPEN_EXISTING , // how to create // TODO 4J Stu - Assuming that the file already exists if we are opening to read from it + FILE_FLAG_SEQUENTIAL_SCAN, // file attributes + NULL // Unsupported + ); +#else + const char *pchFilename=wstringtofilename(grf.getPath()); + HANDLE fileHandle = CreateFile( + pchFilename, // file name + GENERIC_READ, // access mode + 0, // share mode // TODO 4J Stu - Will we need to share file? Probably not but... + NULL, // Unused + OPEN_EXISTING , // how to create // TODO 4J Stu - Assuming that the file already exists if we are opening to read from it + FILE_FLAG_SEQUENTIAL_SCAN, // file attributes + NULL // Unsupported + ); +#endif + + if( fileHandle != INVALID_HANDLE_VALUE ) + { + DWORD dwFileSize = grf.length(); + DWORD bytesRead; + PBYTE pbData = (PBYTE) new BYTE[dwFileSize]; + BOOL bSuccess = ReadFile(fileHandle,pbData,dwFileSize,&bytesRead,NULL); + if(bSuccess==FALSE) + { + app.FatalLoadError(); + } + CloseHandle(fileHandle); + + // 4J-PB - is it possible that we can get here after a read fail and it's not an error? + dlcFile->setGrfData(pbData, dwFileSize, lgo->m_stringTable); + + delete [] pbData; + + app.m_gameRules.setLevelGenerationOptions( dlcFile->lgo ); + } + } + } + } + if(lgo->requiresBaseSave() && !lgo->getBaseSavePath().empty() ) + { + File save(app.getFilePath(lgo->m_parentDLCPack->GetPackID(), lgo->getBaseSavePath(),true, L"WPACK:" )); + if (save.exists()) + { +#ifdef _UNICODE + wstring path = save.getPath(); + const WCHAR *pchFilename=path.c_str(); + HANDLE fileHandle = CreateFile( + pchFilename, // file name + GENERIC_READ, // access mode + 0, // share mode // TODO 4J Stu - Will we need to share file? Probably not but... + NULL, // Unused + OPEN_EXISTING , // how to create // TODO 4J Stu - Assuming that the file already exists if we are opening to read from it + FILE_FLAG_SEQUENTIAL_SCAN, // file attributes + NULL // Unsupported + ); +#else + const char *pchFilename=wstringtofilename(save.getPath()); + HANDLE fileHandle = CreateFile( + pchFilename, // file name + GENERIC_READ, // access mode + 0, // share mode // TODO 4J Stu - Will we need to share file? Probably not but... + NULL, // Unused + OPEN_EXISTING , // how to create // TODO 4J Stu - Assuming that the file already exists if we are opening to read from it + FILE_FLAG_SEQUENTIAL_SCAN, // file attributes + NULL // Unsupported + ); +#endif + + if( fileHandle != INVALID_HANDLE_VALUE ) + { + DWORD bytesRead,dwFileSize = GetFileSize(fileHandle,NULL); + PBYTE pbData = (PBYTE) new BYTE[dwFileSize]; + BOOL bSuccess = ReadFile(fileHandle,pbData,dwFileSize,&bytesRead,NULL); + if(bSuccess==FALSE) + { + app.FatalLoadError(); + } + CloseHandle(fileHandle); + + // 4J-PB - is it possible that we can get here after a read fail and it's not an error? + lgo->setBaseSaveData(pbData, dwFileSize); + } + } + + } +#ifdef _DURANGO + DWORD result = StorageManager.UnmountInstalledDLC(L"WPACK"); +#else + DWORD result = StorageManager.UnmountInstalledDLC("WPACK"); +#endif + + } + + lgo->setLoadedData(); + + return 0; +} + void LevelGenerationOptions::reset_start() { for ( AUTO_VAR( it, m_schematicRules.begin()); - it != m_schematicRules.end(); - it++ ) + it != m_schematicRules.end(); + it++ ) { (*it)->reset(); } @@ -478,9 +649,38 @@ bool LevelGenerationOptions::isFromDLC() { return getSrc() == eSrc_fromDLC; } bool LevelGenerationOptions::requiresTexturePack() { return info()->requiresTexturePack(); } UINT LevelGenerationOptions::getRequiredTexturePackId() { return info()->getRequiredTexturePackId(); } -wstring LevelGenerationOptions::getDefaultSaveName() { return info()->getDefaultSaveName(); } -LPCWSTR LevelGenerationOptions::getWorldName() { return info()->getWorldName(); } -LPCWSTR LevelGenerationOptions::getDisplayName() { return info()->getDisplayName(); } + +wstring LevelGenerationOptions::getDefaultSaveName() +{ + switch (getSrc()) + { + case eSrc_fromSave: return getString( info()->getDefaultSaveName() ); + case eSrc_fromDLC: return getString( info()->getDefaultSaveName() ); + case eSrc_tutorial: return app.GetString(IDS_TUTORIALSAVENAME); + } + return L""; +} +LPCWSTR LevelGenerationOptions::getWorldName() +{ + switch (getSrc()) + { + case eSrc_fromSave: return getString( info()->getWorldName() ); + case eSrc_fromDLC: return getString( info()->getWorldName() ); + case eSrc_tutorial: return app.GetString(IDS_PLAY_TUTORIAL); + } + return L""; +} +LPCWSTR LevelGenerationOptions::getDisplayName() +{ + switch (getSrc()) + { + case eSrc_fromSave: return getString( info()->getDisplayName() ); + case eSrc_fromDLC: return getString( info()->getDisplayName() ); + case eSrc_tutorial: return L""; + } + return L""; +} + wstring LevelGenerationOptions::getGrfPath() { return info()->getGrfPath(); } bool LevelGenerationOptions::requiresBaseSave() { return info()->requiresBaseSave(); } wstring LevelGenerationOptions::getBaseSavePath() { return info()->getBaseSavePath(); } @@ -506,6 +706,7 @@ bool LevelGenerationOptions::hasLoadedData() { return m_hasLoadedData; } void LevelGenerationOptions::setLoadedData() { m_hasLoadedData = true; } __int64 LevelGenerationOptions::getLevelSeed() { return m_seed; } +int LevelGenerationOptions::getLevelHasBeenInCreative() { return m_bHasBeenInCreative; } Pos *LevelGenerationOptions::getSpawnPos() { return m_spawnPos; } bool LevelGenerationOptions::getuseFlatWorld() { return m_useFlatWorld; } diff --git a/Minecraft.Client/Common/GameRules/LevelGenerationOptions.h b/Minecraft.Client/Common/GameRules/LevelGenerationOptions.h index 0cc9da79..aa128ff8 100644 --- a/Minecraft.Client/Common/GameRules/LevelGenerationOptions.h +++ b/Minecraft.Client/Common/GameRules/LevelGenerationOptions.h @@ -149,6 +149,7 @@ private: __int64 m_seed; bool m_useFlatWorld; Pos *m_spawnPos; + int m_bHasBeenInCreative; vector m_schematicRules; vector m_structureRules; bool m_bHaveMinY; @@ -162,8 +163,11 @@ private: StringTable *m_stringTable; + DLCPack *m_parentDLCPack; + bool m_bLoadingData; + public: - LevelGenerationOptions(); + LevelGenerationOptions(DLCPack *parentPack = NULL); ~LevelGenerationOptions(); virtual ConsoleGameRules::EGameRuleType getActionType(); @@ -174,6 +178,7 @@ public: virtual void addAttribute(const wstring &attributeName, const wstring &attributeValue); __int64 getLevelSeed(); + int getLevelHasBeenInCreative(); Pos *getSpawnPos(); bool getuseFlatWorld(); @@ -197,12 +202,15 @@ public: LevelRuleset *getRequiredGameRules(); void getBiomeOverride(int biomeId, BYTE &tile, BYTE &topTile); - bool isFeatureChunk(int chunkX, int chunkZ, StructureFeature::EFeatureTypes feature); + bool isFeatureChunk(int chunkX, int chunkZ, StructureFeature::EFeatureTypes feature, int *orientation = NULL); void loadStringTable(StringTable *table); LPCWSTR getString(const wstring &key); unordered_map *getUnfinishedSchematicFiles(); + + void loadBaseSaveData(); + static int packMounted(LPVOID pParam,int iPad,DWORD dwErr,DWORD dwLicenceMask); // 4J-JEV: // ApplySchematicRules contain limited state diff --git a/Minecraft.Client/Common/GameRules/StartFeature.cpp b/Minecraft.Client/Common/GameRules/StartFeature.cpp index 9d5f15c0..7f0c8b5c 100644 --- a/Minecraft.Client/Common/GameRules/StartFeature.cpp +++ b/Minecraft.Client/Common/GameRules/StartFeature.cpp @@ -6,12 +6,13 @@ StartFeature::StartFeature() { m_chunkX = 0; m_chunkZ = 0; + m_orientation = 0; m_feature = StructureFeature::eFeature_Temples; } void StartFeature::writeAttributes(DataOutputStream *dos, UINT numAttrs) { - GameRuleDefinition::writeAttributes(dos, numAttrs + 3); + GameRuleDefinition::writeAttributes(dos, numAttrs + 4); ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_chunkX); dos->writeUTF(_toString(m_chunkX)); @@ -19,6 +20,8 @@ void StartFeature::writeAttributes(DataOutputStream *dos, UINT numAttrs) dos->writeUTF(_toString(m_chunkZ)); ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_feature); dos->writeUTF(_toString((int)m_feature)); + ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_orientation); + dos->writeUTF(_toString(m_orientation)); } void StartFeature::addAttribute(const wstring &attributeName, const wstring &attributeValue) @@ -35,6 +38,12 @@ void StartFeature::addAttribute(const wstring &attributeName, const wstring &att m_chunkZ = value; app.DebugPrintf("StartFeature: Adding parameter chunkZ=%d\n",m_chunkZ); } + else if(attributeName.compare(L"orientation") == 0) + { + int value = _fromString(attributeValue); + m_orientation = value; + app.DebugPrintf("StartFeature: Adding parameter orientation=%d\n",m_orientation); + } else if(attributeName.compare(L"feature") == 0) { int value = _fromString(attributeValue); @@ -47,7 +56,8 @@ void StartFeature::addAttribute(const wstring &attributeName, const wstring &att } } -bool StartFeature::isFeatureChunk(int chunkX, int chunkZ, StructureFeature::EFeatureTypes feature) +bool StartFeature::isFeatureChunk(int chunkX, int chunkZ, StructureFeature::EFeatureTypes feature, int *orientation) { + if(orientation != NULL) *orientation = m_orientation; return chunkX == m_chunkX && chunkZ == m_chunkZ && feature == m_feature; } \ No newline at end of file diff --git a/Minecraft.Client/Common/GameRules/StartFeature.h b/Minecraft.Client/Common/GameRules/StartFeature.h index d3f1280a..b198a2fa 100644 --- a/Minecraft.Client/Common/GameRules/StartFeature.h +++ b/Minecraft.Client/Common/GameRules/StartFeature.h @@ -7,7 +7,7 @@ using namespace std; class StartFeature : public GameRuleDefinition { private: - int m_chunkX, m_chunkZ; + int m_chunkX, m_chunkZ, m_orientation; StructureFeature::EFeatureTypes m_feature; public: @@ -18,5 +18,5 @@ public: virtual void writeAttributes(DataOutputStream *dos, UINT numAttrs); virtual void addAttribute(const wstring &attributeName, const wstring &attributeValue); - bool isFeatureChunk(int chunkX, int chunkZ, StructureFeature::EFeatureTypes feature); + bool isFeatureChunk(int chunkX, int chunkZ, StructureFeature::EFeatureTypes feature, int *orientation); }; \ No newline at end of file diff --git a/Minecraft.Client/Common/GameRules/XboxStructureActionPlaceContainer.cpp b/Minecraft.Client/Common/GameRules/XboxStructureActionPlaceContainer.cpp index 8184f45b..d81a2b03 100644 --- a/Minecraft.Client/Common/GameRules/XboxStructureActionPlaceContainer.cpp +++ b/Minecraft.Client/Common/GameRules/XboxStructureActionPlaceContainer.cpp @@ -74,16 +74,16 @@ bool XboxStructureActionPlaceContainer::placeContainerInLevel(StructurePiece *st { // Remove the current tile entity level->removeTileEntity( worldX, worldY, worldZ ); - level->setTile( worldX, worldY, worldZ, 0 ); + level->setTileAndData( worldX, worldY, worldZ, 0, 0, Tile::UPDATE_ALL ); } - level->setTile( worldX, worldY, worldZ, m_tile ); + level->setTileAndData( worldX, worldY, worldZ, m_tile, 0, Tile::UPDATE_ALL ); shared_ptr container = dynamic_pointer_cast(level->getTileEntity( worldX, worldY, worldZ )); app.DebugPrintf("XboxStructureActionPlaceContainer - placing a container at (%d,%d,%d)\n", worldX, worldY, worldZ); if ( container != NULL ) { - level->setData( worldX, worldY, worldZ, m_data); + level->setData( worldX, worldY, worldZ, m_data, Tile::UPDATE_CLIENTS); // Add items int slotId = 0; for(AUTO_VAR(it, m_items.begin()); it != m_items.end() && (slotId < container->getContainerSize()); ++it, ++slotId ) diff --git a/Minecraft.Client/Common/GameRules/XboxStructureActionPlaceSpawner.cpp b/Minecraft.Client/Common/GameRules/XboxStructureActionPlaceSpawner.cpp index 1eca3342..3f6204af 100644 --- a/Minecraft.Client/Common/GameRules/XboxStructureActionPlaceSpawner.cpp +++ b/Minecraft.Client/Common/GameRules/XboxStructureActionPlaceSpawner.cpp @@ -50,10 +50,10 @@ bool XboxStructureActionPlaceSpawner::placeSpawnerInLevel(StructurePiece *struct { // Remove the current tile entity level->removeTileEntity( worldX, worldY, worldZ ); - level->setTile( worldX, worldY, worldZ, 0 ); + level->setTileAndData( worldX, worldY, worldZ, 0, 0, Tile::UPDATE_ALL ); } - level->setTile( worldX, worldY, worldZ, m_tile ); + level->setTileAndData( worldX, worldY, worldZ, m_tile, 0, Tile::UPDATE_ALL ); shared_ptr entity = dynamic_pointer_cast(level->getTileEntity( worldX, worldY, worldZ )); #ifndef _CONTENT_PACKAGE diff --git a/Minecraft.Client/Common/Leaderboards/LeaderboardInterface.cpp b/Minecraft.Client/Common/Leaderboards/LeaderboardInterface.cpp new file mode 100644 index 00000000..07463517 --- /dev/null +++ b/Minecraft.Client/Common/Leaderboards/LeaderboardInterface.cpp @@ -0,0 +1,88 @@ +#include "stdafx.h" +#include "LeaderboardInterface.h" + +LeaderboardInterface::LeaderboardInterface(LeaderboardManager *man) +{ + m_manager = man; + m_pending = false; + + m_filter = (LeaderboardManager::EFilterMode) -1; + m_callback = NULL; + m_difficulty = 0; + m_type = LeaderboardManager::eStatsType_UNDEFINED; + m_startIndex = 0; + m_readCount = 0; + + m_manager->OpenSession(); +} + +LeaderboardInterface::~LeaderboardInterface() +{ + m_manager->CancelOperation(); + m_manager->CloseSession(); +} + +void LeaderboardInterface::ReadStats_Friends(LeaderboardReadListener *callback, int difficulty, LeaderboardManager::EStatsType type, PlayerUID myUID, unsigned int startIndex, unsigned int readCount) +{ + m_filter = LeaderboardManager::eFM_Friends; + m_pending = true; + + m_callback = callback; + m_difficulty = difficulty; + m_type = type; + m_myUID = myUID; + m_startIndex = startIndex; + m_readCount = readCount; + + tick(); +} + +void LeaderboardInterface::ReadStats_MyScore(LeaderboardReadListener *callback, int difficulty, LeaderboardManager::EStatsType type, PlayerUID myUID, unsigned int readCount) +{ + m_filter = LeaderboardManager::eFM_MyScore; + m_pending = true; + + m_callback = callback; + m_difficulty = difficulty; + m_type = type; + m_myUID = myUID; + m_readCount = readCount; + + tick(); +} + +void LeaderboardInterface::ReadStats_TopRank(LeaderboardReadListener *callback, int difficulty, LeaderboardManager::EStatsType type, unsigned int startIndex, unsigned int readCount) +{ + m_filter = LeaderboardManager::eFM_TopRank; + m_pending = true; + + m_callback = callback; + m_difficulty = difficulty; + m_type = type; + m_startIndex = startIndex; + m_readCount = readCount; + + tick(); +} + +void LeaderboardInterface::CancelOperation() +{ + m_manager->CancelOperation(); + m_pending = false; +} + +void LeaderboardInterface::tick() +{ + if (m_pending) m_pending = !callManager(); +} + +bool LeaderboardInterface::callManager() +{ + switch (m_filter) + { + case LeaderboardManager::eFM_Friends: return m_manager->ReadStats_Friends(m_callback, m_difficulty, m_type, m_myUID, m_startIndex, m_readCount); + case LeaderboardManager::eFM_MyScore: return m_manager->ReadStats_MyScore(m_callback, m_difficulty, m_type, m_myUID, m_readCount); + case LeaderboardManager::eFM_TopRank: return m_manager->ReadStats_TopRank(m_callback, m_difficulty, m_type, m_startIndex, m_readCount); + default: assert(false); return true; + } +} \ No newline at end of file diff --git a/Minecraft.Client/Common/Leaderboards/LeaderboardInterface.h b/Minecraft.Client/Common/Leaderboards/LeaderboardInterface.h new file mode 100644 index 00000000..089c482b --- /dev/null +++ b/Minecraft.Client/Common/Leaderboards/LeaderboardInterface.h @@ -0,0 +1,35 @@ +#pragma once + +#include "LeaderboardManager.h" + +// 4J-JEV: Simple interface for handling ReadStat failures. +class LeaderboardInterface +{ +private: + LeaderboardManager *m_manager; + bool m_pending; + + // Arguments. + LeaderboardManager::EFilterMode m_filter; + LeaderboardReadListener *m_callback; + int m_difficulty; + LeaderboardManager::EStatsType m_type; + PlayerUID m_myUID; + unsigned int m_startIndex; + unsigned int m_readCount; + +public: + LeaderboardInterface(LeaderboardManager *man); + ~LeaderboardInterface(); + + void ReadStats_Friends(LeaderboardReadListener *callback, int difficulty, LeaderboardManager::EStatsType type, PlayerUID myUID, unsigned int startIndex, unsigned int readCount); + void ReadStats_MyScore(LeaderboardReadListener *callback, int difficulty, LeaderboardManager::EStatsType type, PlayerUID myUID, unsigned int readCount); + void ReadStats_TopRank(LeaderboardReadListener *callback, int difficulty, LeaderboardManager::EStatsType type, unsigned int startIndex, unsigned int readCount); + + void CancelOperation(); + + void tick(); + +private: + bool callManager(); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/Leaderboards/SonyLeaderboardManager.cpp b/Minecraft.Client/Common/Leaderboards/SonyLeaderboardManager.cpp new file mode 100644 index 00000000..78d62568 --- /dev/null +++ b/Minecraft.Client/Common/Leaderboards/SonyLeaderboardManager.cpp @@ -0,0 +1,1131 @@ +#include "stdafx.h" + +#include +#include +//#include + +#include "SonyLeaderboardManager.h" + +#include "base64.h" + +#include "Common\Consoles_App.h" +#include "Common\Network\Sony\SQRNetworkManager.h" + +#include "..\..\..\Minecraft.World\StringHelpers.h" + + +#ifdef __ORBIS__ +#include "Orbis\OrbisExtras\ShutdownManager.h" +#include "Orbis\Orbis_App.h" +#elif defined __PSVITA__ +#include "PSVita\PSVitaExtras\ShutdownManager.h" +#include "PSVita\PSVita_App.h" +#elif defined __PS3__ +#include "PS3\PS3Extras\ShutdownManager.h" +#include "PS3\PS3_App.h" +#else +#error "SonyLeaderboardManager is included for a non-sony platform." +#endif + +SonyLeaderboardManager::SonyLeaderboardManager() +{ + m_eStatsState = eStatsState_Idle; + + m_titleContext = -1; + + m_myXUID = INVALID_XUID; + + m_scores = NULL; + + m_statsType = eStatsType_Kills; + m_difficulty = 0; + + m_requestId = 0; + + m_openSessions = 0; + + InitializeCriticalSection(&m_csViewsLock); + + m_running = false; + m_threadScoreboard = NULL; +} + +SonyLeaderboardManager::~SonyLeaderboardManager() +{ + m_running = false; + + // 4J-JEV: Wait for thread to stop and hope it doesn't take too long. + long long startShutdown = System::currentTimeMillis(); + while (m_threadScoreboard->isRunning()) + { + Sleep(1); + assert( (System::currentTimeMillis() - startShutdown) < 16 ); + } + + delete m_threadScoreboard; + + DeleteCriticalSection(&m_csViewsLock); +} + +int SonyLeaderboardManager::scoreboardThreadEntry(LPVOID lpParam) +{ + ShutdownManager::HasStarted(ShutdownManager::eLeaderboardThread); + SonyLeaderboardManager *self = reinterpret_cast(lpParam); + + self->m_running = true; + app.DebugPrintf("[SonyLeaderboardManager] Thread started.\n"); + + bool needsWriting = false; + do + { + if (self->m_openSessions > 0 || needsWriting) + { + self->scoreboardThreadInternal(); + } + + EnterCriticalSection(&self->m_csViewsLock); + needsWriting = self->m_views.size() > 0; + LeaveCriticalSection(&self->m_csViewsLock); + + // 4J Stu - We can't write while we aren't signed in to live + if (!ProfileManager.IsSignedInLive(ProfileManager.GetPrimaryPad())) + { + needsWriting = false; + } + + if ( (!needsWriting) && (self->m_eStatsState != eStatsState_Getting) ) + { + Sleep(50); // 4J-JEV: When we're not reading or writing. + } + + } while ( (self->m_running || self->m_eStatsState == eStatsState_Getting || needsWriting) + && ShutdownManager::ShouldRun(ShutdownManager::eLeaderboardThread) + ); + + // 4J-JEV, moved this here so setScore can finish up. + self->destroyTitleContext(self->m_titleContext); + + // TODO sceNpScoreTerm(); + app.DebugPrintf("[SonyLeaderboardManager] Thread closed.\n"); + ShutdownManager::HasFinished(ShutdownManager::eLeaderboardThread); + return 0; +} + +void SonyLeaderboardManager::scoreboardThreadInternal() +{ + // 4J-JEV: Just initialise the context the once now. + if (m_titleContext == -1) + { + int primaryPad = ProfileManager.GetPrimaryPad(); + + if (!ProfileManager.IsSignedInLive(primaryPad)) return; + + int ret = initialiseScoreUtility(); + if (ret < 0) + { + if ( !scoreUtilityAlreadyInitialised(ret) ) + { + app.DebugPrintf("[SonyLeaderboardManager] initialiseScoreUtility() failed. ret = 0x%x\n", ret); + return; + } + else + { + app.DebugPrintf("[SonyLeaderboardManager] initialiseScoreUtility() already initialised, (0x%x)\n", ret); + } + } + + SceNpId npId; + ProfileManager.GetSceNpId(primaryPad,&npId); + + ret = createTitleContext(npId); + + if (ret < 0) return; + else m_titleContext = ret; + } + else assert( m_titleContext > 0 ); //Paranoia + + + switch (m_eStatsState) + { + case eStatsState_Getting: + // Player starts using async multiplayer feature + // 4J-PB - Fix for SCEA FQA #4 - TRC R4064 - Incorrect usage of AsyncMultiplay + // Note 1: + // The following NP call should be reserved for asynchronous multiplayer modes that require PS Plus to be accessed. + // + // Note 2: + // The message is not displayed with a user without PlayStation®Plus subscription and they are able to access the Leaderboards. + + // NotifyAsyncPlusFeature(); + + switch(m_eFilterMode) + { + case eFM_MyScore: + case eFM_Friends: + getScoreByIds(); + break; + case eFM_TopRank: + getScoreByRange(); + break; + } + break; + + case eStatsState_Canceled: + case eStatsState_Failed: + case eStatsState_Ready: + case eStatsState_Idle: + + // 4J-JEV: Moved this here, I don't want reading and + // writing going on at the same time. + // -- + // 4J-JEV: Writing no longer changes the manager state, + // we'll manage the write queue seperately. + + EnterCriticalSection(&m_csViewsLock); + bool hasWork = !m_views.empty(); + LeaveCriticalSection(&m_csViewsLock); + + if (hasWork) + { + setScore(); + } + + break; + } +} + +HRESULT SonyLeaderboardManager::fillByIdsQuery(const SceNpId &myNpId, SceNpId* &npIds, uint32_t &len) +{ + HRESULT ret; + + // Get queried users. + switch(m_eFilterMode) + { + case eFM_Friends: + { + // 4J-JEV: Implementation for Orbis & Vita as they a very similar. +#if (defined __ORBIS__) || (defined __PSVITA__) + + sce::Toolkit::NP::Utilities::Future s_friendList; + ret = getFriendsList(s_friendList); + + if(ret != SCE_TOOLKIT_NP_SUCCESS) + { + // Error handling + if (m_eStatsState != eStatsState_Canceled) m_eStatsState = eStatsState_Failed; + app.DebugPrintf("[SonyLeaderboardManager] 'getFriendslist' fail, 0x%x.\n", ret); + return false; + } + else if (s_friendList.hasResult()) + { + // 4J-JEV: Friends list doesn't include player, leave space for them. + len = s_friendList.get()->size() + 1; + + npIds = new SceNpId[len]; + + int i = 0; + + sce::Toolkit::NP::FriendsList::const_iterator itr; + for (itr = s_friendList.get()->begin(); itr != s_friendList.get()->end(); itr++) + { + npIds[i] = itr->npid; + i++; + } + + npIds[len-1] = myNpId; // 4J-JEV: Append player to end of query. + } + else + { + // 4J-JEV: Something terrible must have happend, + // 'getFriendslist' was supposed to be a synchronous operation. + __debugbreak(); + + // 4J-JEV: We can at least fall-back to just the players score. + len = 1; + npIds = new SceNpId[1]; + + npIds[0] = myNpId; + } + +#elif (defined __PS3__) + // PS3 + + // 4J-JEV: Doesn't include the player (its just their friends). + ret = sceNpBasicGetFriendListEntryCount(&len); + len += 1; + + npIds = new SceNpId[len]; + + + for (uint32_t i = 0; i < len-1; i++) + { + ret = sceNpBasicGetFriendListEntry(i, npIds+i); + if (ret<0) return ret; + + } + npIds[len-1] = myNpId; // 4J-JEV: Append player to end of query. + +#endif + } + break; + case eFM_MyScore: + { + len = 1; + npIds = new SceNpId[1]; + npIds[0] = myNpId; + } + break; + } + + return S_OK; +} + +bool SonyLeaderboardManager::getScoreByIds() +{ + if (m_eStatsState == eStatsState_Canceled) return false; + + // ---------------------------- + SonyRtcTick last_sort_date; + SceNpScoreRankNumber mTotalRecord; + + SceNpId *npIds = NULL; + + int ret; + uint32_t num = 0; + + SceNpScorePlayerRankData *ptr; + SceNpScoreComment *comments; + // ---------------------------- + + // Check for invalid LManager state. + assert( m_eFilterMode == eFM_Friends + || m_eFilterMode == eFM_MyScore); + + SceNpId myNpId; + // 4J-PB - should it be user 0? + if(!ProfileManager.IsSignedInLive(0)) + { + app.DebugPrintf("[SonyLeaderboardManager] OpenSession() fail: User isn't signed in to PSN\n"); + return false; + } + ProfileManager.GetSceNpId(0,&myNpId); + + ret = fillByIdsQuery(myNpId, npIds, num); +#ifdef __PS3__ + if (ret < 0) goto error2; +#endif + + ptr = new SceNpScorePlayerRankData[num]; + comments = new SceNpScoreComment[num]; + + ZeroMemory(ptr, sizeof(SceNpScorePlayerRankData) * num); + ZeroMemory(comments, sizeof(SceNpScoreComment) * num); + + /* app.DebugPrintf("sceNpScoreGetRankingByNpId(\n\t transaction=%i,\n\t boardID=0,\n\t npId=%i,\n\t friendCount*sizeof(SceNpId)=%i*%i=%i,\ + rankData=%i,\n\t friendCount*sizeof(SceNpScorePlayerRankData)=%i,\n\t NULL, 0, NULL, 0,\n\t friendCount=%i,\n...\n", + transaction, npId, friendCount, sizeof(SceNpId), friendCount*sizeof(SceNpId), + rankData, friendCount*sizeof(SceNpScorePlayerRankData), friendCount + ); */ + + int boardId = getBoardId(m_difficulty, m_statsType); + + // 4J-JEV: Orbis can only do with 100 ids max, so we use batches. +#ifdef __ORBIS__ + for (int batch=0; batchrankData.scoreValue + ); + + // Sort scores + std::sort(m_scores, m_scores + m_readCount, SortByRank); + + delete [] ptr; + delete [] comments; + delete [] npIds; + + m_eStatsState = eStatsState_Ready; + return true; + + // Error. +error3: + if (ret!=SCE_NP_COMMUNITY_ERROR_ABORTED) //0x8002a109 + destroyTransactionContext(m_requestId); + m_requestId = 0; + delete [] ptr; + delete [] comments; +error2: + if (npIds != NULL) delete [] npIds; +error1: + if (m_eStatsState != eStatsState_Canceled) m_eStatsState = eStatsState_Failed; + app.DebugPrintf("[SonyLeaderboardManager] getScoreByIds() FAILED, ret=0x%X\n", ret); + return false; +} + +bool SonyLeaderboardManager::getScoreByRange() +{ + SonyRtcTick last_sort_date; + SceNpScoreRankNumber mTotalRecord; + + unsigned int num = m_readCount; + SceNpScoreRankData *ptr; + SceNpScoreComment *comments; + + assert(m_eFilterMode == eFM_TopRank); + + int ret = createTransactionContext(m_titleContext); + if (m_eStatsState == eStatsState_Canceled) + { + // Cancel operation has been called, abort. + app.DebugPrintf("[SonyLeaderboardManager]\tgetScoreByRange() - m_eStatsState == eStatsState_Canceled.\n"); + destroyTransactionContext(ret); + return false; + } + else if (ret < 0) + { + // Error occurred creating a transaction, abort. + m_eStatsState = eStatsState_Failed; + app.DebugPrintf("[SonyLeaderboardManager]\tgetScoreByRange() - createTransaction failed, ret=0x%X\n", ret); + return false; + } + else + { + // Transaction created successfully, continue. + m_requestId = ret; + } + + ptr = new SceNpScoreRankData[num]; + comments = new SceNpScoreComment[num]; + + int boardId = getBoardId(m_difficulty, m_statsType); + ret = sceNpScoreGetRankingByRange( + m_requestId, + boardId, // BoardId + + m_startIndex, + + ptr, sizeof(SceNpScoreRankData) * num, //OUT: Rank Data + + comments, sizeof(SceNpScoreComment) * num, //OUT: Comment Data + + NULL, 0, // GameData. + + num, + + &last_sort_date, + &m_maxRank, // 'Total number of players registered in the target scoreboard.' + + NULL // Reserved, specify null. + ); + + if (ret == SCE_NP_COMMUNITY_ERROR_ABORTED) + { + ret = destroyTransactionContext(m_requestId); + app.DebugPrintf("[SonyLeaderboardManager] getScoreByRange(): 'sceNpScoreGetRankingByRange' aborted (0x%X).\n", ret); + + delete [] ptr; + delete [] comments; + + return false; + } + else if (ret == SCE_NP_COMMUNITY_SERVER_ERROR_GAME_RANKING_NOT_FOUND) + { + ret = destroyTransactionContext(m_requestId); + app.DebugPrintf("[SonyLeaderboardManager] getScoreByRange(): Game ranking not found."); + + delete [] ptr; + delete [] comments; + + m_scores = NULL; + m_readCount = 0; + + m_eStatsState = eStatsState_Ready; + return false; + } + else if (ret<0) goto error2; + else + { + app.DebugPrintf("[SonyLeaderboardManager] getScoreByRange(), success, 1stScore=%i.\n", ptr->scoreValue); + } + + // Return. + destroyTransactionContext(m_requestId); + m_requestId = 0; + + //m_stats = ptr; //Maybe: addPadding(num,ptr); + + if (m_scores != NULL) delete [] m_scores; + m_readCount = ret; + m_scores = new ReadScore[m_readCount]; + for (int i=0; i 0) + ret = eStatsReturn_Success; + + if (m_readListener != NULL) + { + app.DebugPrintf("[SonyLeaderboardManager] OnStatsReadComplete(%i, %i, _), m_readCount=%i.\n", ret, m_maxRank, m_readCount); + m_readListener->OnStatsReadComplete(ret, m_maxRank, view); + } + + m_eStatsState = eStatsState_Idle; + + delete [] m_scores; + m_scores = NULL; + } + break; + + case eStatsState_Failed: + { + view.m_numQueries = 0; + view.m_queries = NULL; + + if ( m_readListener != NULL ) + m_readListener->OnStatsReadComplete(eStatsReturn_NetworkError, 0, view); + + m_eStatsState = eStatsState_Idle; + } + break; + + case eStatsState_Canceled: + { + m_eStatsState = eStatsState_Idle; + } + break; + + default: // Getting or Idle. + break; + } +} + +bool SonyLeaderboardManager::OpenSession() +{ + if (m_openSessions == 0) + { + if (m_threadScoreboard == NULL) + { + m_threadScoreboard = new C4JThread(&scoreboardThreadEntry, this, "4JScoreboard"); + m_threadScoreboard->SetProcessor(CPU_CORE_LEADERBOARDS); + m_threadScoreboard->SetPriority(THREAD_PRIORITY_BELOW_NORMAL); + m_threadScoreboard->Run(); + } + + app.DebugPrintf("[SonyLeaderboardManager] OpenSession(): Starting sceNpScore utility.\n"); + } + else + { + app.DebugPrintf("[SonyLeaderboardManager] OpenSession(): Another session opened, total=%i\n", m_openSessions+1); + } + + m_openSessions++; + return true; +} + +void SonyLeaderboardManager::CloseSession() +{ + m_openSessions--; + + if (m_openSessions == 0) app.DebugPrintf("[SonyLeaderboardManager] CloseSession(): Quitting sceNpScore utility.\n"); + else app.DebugPrintf("[SonyLeaderboardManager] CloseSession(): %i sessions still open.\n", m_openSessions); +} + +void SonyLeaderboardManager::DeleteSession() {} + +bool SonyLeaderboardManager::WriteStats(unsigned int viewCount, ViewIn views) +{ + // Need to cancel read/write operation first. + //if (m_eStatsState != eStatsState_Idle) return false; + + // Write relevant parameters. + //RegisterScore *regScore = reinterpret_cast(views); + + EnterCriticalSection(&m_csViewsLock); + for (int i=0; i> (8-dIndex); + + fivebits = (fivebits>>3) & 0x1F; + + if (fivebits < 10) // 0 - 9 + chars[i] = '0' + fivebits; + else if (fivebits < 32) // A - V + chars[i] = 'A' + (fivebits-10); + else + assert(false); + } + + toSymbols( getComment(out) ); +} + +void SonyLeaderboardManager::fromBase32(void *out, SceNpScoreComment *in) +{ + PBYTE bytes = (PBYTE) out; + ZeroMemory(bytes, RECORD_SIZE); + + fromSymbols( getComment(in) ); + + char ch[2] = { 0, 0 }; + for (int i = 0; i < SCE_NP_SCORE_COMMENT_MAXLEN; i++) + { + ch[0] = getComment(in)[i]; + unsigned char fivebits = strtol(ch, NULL, 32) << 3; + + int sByte = (i*5) / 8; + int eByte = (5+(i*5)) / 8; + int dIndex = (i*5) % 8; + + *(bytes + sByte) = *(bytes+sByte) | (fivebits >> dIndex); + + if (eByte != sByte) + *(bytes + eByte) = fivebits << (8-dIndex); + } +} + +char symbBase32[32] = { + ' ', '!','\"', '#', '$', '%', '&','\'', '(', ')', + '*', '+', '`', '-', '.', '/', ':', ';', '<', '=', + '>', '?', '[','\\', ']', '^', '_', '{', '|', '}', + '~', '@' +}; + +char charBase32[32] = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', + 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', + 'U', 'V' +}; + +void SonyLeaderboardManager::toSymbols(char *str) +{ + for (int i = 0; i < 63; i++) + { + for (int j=0; j < 32; j++) + { + if (str[i]==charBase32[j]) + str[i] =symbBase32[j]; + } + } +} + +void SonyLeaderboardManager::fromSymbols(char *str) +{ + for (int i = 0; i < 63; i++) + { + for (int j=0; j < 32; j++) + { + if (str[i]==symbBase32[j]) + str[i] =charBase32[j]; + } + } +} + +bool SonyLeaderboardManager::test_string(string testing) +{ +#ifndef _CONTENT_PACKAGE + static SceNpScoreComment comment; + ZeroMemory(&comment, sizeof(SceNpScoreComment)); + memcpy(&comment, testing.c_str(), SCE_NP_SCORE_COMMENT_MAXLEN); + + int ctx = createTransactionContext(m_titleContext); + if (ctx<0) return false; + + int ret = sceNpScoreCensorComment(ctx, (const char *) &comment, NULL); + + if (ret == SCE_NP_COMMUNITY_SERVER_ERROR_CENSORED) + { + app.DebugPrintf("\n[TEST_STRING]: REJECTED "); + } + else if (ret < 0) + { + destroyTransactionContext(ctx); + return false; + } + else + { + app.DebugPrintf("\n[TEST_STRING]: permitted "); + } + + app.DebugPrintf("'%s'\n", getComment(&comment)); + destroyTransactionContext(ctx); + return true; +#else + return true; +#endif +} + +void SonyLeaderboardManager::initReadScoreStruct(ReadScore &out, SceNpScoreRankData &rankData) +{ + ZeroMemory(&out, sizeof(ReadScore)); + + // Init rank and onlineID + out.m_uid.setOnlineID( rankData.npId.handle, true ); + out.m_rank = rankData.rank; + + // Convert to wstring and copy name. + wstring wstrName = convStringToWstring( string(rankData.npId.handle.data) ).c_str(); + //memcpy(&out.m_name, wstrName.c_str(), XUSER_NAME_SIZE); + out.m_name=wstrName; +} + +void SonyLeaderboardManager::fillReadScoreStruct(ReadScore &out, SceNpScoreComment &comment) +{ + StatsData statsData; + fromBase32( (void *) &statsData, &comment ); + + switch (statsData.m_statsType) + { + case eStatsType_Farming: + out.m_statsSize = 6; + out.m_statsData[0] = statsData.m_farming.m_eggs; + out.m_statsData[1] = statsData.m_farming.m_wheat; + out.m_statsData[2] = statsData.m_farming.m_mushroom; + out.m_statsData[3] = statsData.m_farming.m_sugarcane; + out.m_statsData[4] = statsData.m_farming.m_milk; + out.m_statsData[5] = statsData.m_farming.m_pumpkin; + break; + case eStatsType_Mining: + out.m_statsSize = 7; + out.m_statsData[0] = statsData.m_mining.m_dirt; + out.m_statsData[1] = statsData.m_mining.m_cobblestone; + out.m_statsData[2] = statsData.m_mining.m_sand; + out.m_statsData[3] = statsData.m_mining.m_stone; + out.m_statsData[4] = statsData.m_mining.m_gravel; + out.m_statsData[5] = statsData.m_mining.m_clay; + out.m_statsData[6] = statsData.m_mining.m_obsidian; + break; + case eStatsType_Kills: + out.m_statsSize = 7; + out.m_statsData[0] = statsData.m_kills.m_zombie; + out.m_statsData[1] = statsData.m_kills.m_skeleton; + out.m_statsData[2] = statsData.m_kills.m_creeper; + out.m_statsData[3] = statsData.m_kills.m_spider; + out.m_statsData[4] = statsData.m_kills.m_spiderJockey; + out.m_statsData[5] = statsData.m_kills.m_zombiePigman; + out.m_statsData[6] = statsData.m_kills.m_slime; + break; + case eStatsType_Travelling: + out.m_statsSize = 4; + out.m_statsData[0] = statsData.m_travelling.m_walked; + out.m_statsData[1] = statsData.m_travelling.m_fallen; + out.m_statsData[2] = statsData.m_travelling.m_minecart; + out.m_statsData[3] = statsData.m_travelling.m_boat; + break; + } +} + +bool SonyLeaderboardManager::SortByRank(const ReadScore &lhs, const ReadScore &rhs) +{ + return lhs.m_rank < rhs.m_rank; +} diff --git a/Minecraft.Client/Common/Leaderboards/SonyLeaderboardManager.h b/Minecraft.Client/Common/Leaderboards/SonyLeaderboardManager.h new file mode 100644 index 00000000..3b2c26c5 --- /dev/null +++ b/Minecraft.Client/Common/Leaderboards/SonyLeaderboardManager.h @@ -0,0 +1,133 @@ +#pragma once + +#include "Common\Leaderboards\LeaderboardManager.h" + +#ifdef __PS3__ +typedef CellRtcTick SonyRtcTick; +#else +typedef SceRtcTick SonyRtcTick; +#endif + +class SonyLeaderboardManager : public LeaderboardManager +{ +protected: + enum EStatsState + { + eStatsState_Idle, + eStatsState_Getting, + eStatsState_Failed, + eStatsState_Ready, + eStatsState_Canceled, + eStatsState_Max + }; + +public: + SonyLeaderboardManager(); + virtual ~SonyLeaderboardManager(); + +protected: + unsigned short m_openSessions; + + C4JThread *m_threadScoreboard; + bool m_running; + + int m_titleContext; + int32_t m_requestId; + + //SceNpId m_myNpId; + + static int scoreboardThreadEntry(LPVOID lpParam); + void scoreboardThreadInternal(); + + virtual bool getScoreByIds(); + virtual bool getScoreByRange(); + + virtual bool setScore(); + + queue m_views; + + CRITICAL_SECTION m_csViewsLock; + + EStatsState m_eStatsState; //State of the stats read + // EFilterMode m_eFilterMode; + + ReadScore *m_scores; + unsigned int m_maxRank; + //SceNpScoreRankData *m_stats; + +public: + virtual void Tick(); + + //Open a session + virtual bool OpenSession(); + + //Close a session + virtual void CloseSession(); + + //Delete a session + virtual void DeleteSession(); + + //Write the given stats + //This is called synchronously and will not free any memory allocated for views when it is done + + virtual bool WriteStats(unsigned int viewCount, ViewIn views); + + virtual bool ReadStats_Friends(LeaderboardReadListener *callback, int difficulty, EStatsType type, PlayerUID myUID, unsigned int startIndex, unsigned int readCount); + virtual bool ReadStats_MyScore(LeaderboardReadListener *callback, int difficulty, EStatsType type, PlayerUID myUID, unsigned int readCount); + virtual bool ReadStats_TopRank(LeaderboardReadListener *callback, int difficulty, EStatsType type, unsigned int startIndex, unsigned int readCount); + + //Perform a flush of the stats + virtual void FlushStats(); + + //Cancel the current operation + virtual void CancelOperation(); + + //Is the leaderboard manager idle. + virtual bool isIdle(); + +protected: + int getBoardId(int difficulty, EStatsType); + + SceNpScorePlayerRankData *addPadding(unsigned int num, SceNpScoreRankData *rankData); + + void convertToOutput(unsigned int &num, ReadScore *out, SceNpScorePlayerRankData *rankData, SceNpScoreComment *comm); + + void toBinary(void *out, SceNpScoreComment *in); + void fromBinary(SceNpScoreComment **out, void *in); + + void toBase32(SceNpScoreComment *out, void *in); + void fromBase32(void *out, SceNpScoreComment *in); + + void toSymbols(char *); + void fromSymbols(char *); + + bool test_string(string); + + void initReadScoreStruct(ReadScore &out, SceNpScoreRankData &); + void fillReadScoreStruct(ReadScore &out, SceNpScoreComment &comment); + + static bool SortByRank(const ReadScore &lhs, const ReadScore &rhs); + + +protected: + // 4J-JEV: Interface differences: + + // Sce NP score library function redirects. + virtual HRESULT initialiseScoreUtility() { return ERROR_SUCCESS; } + virtual bool scoreUtilityAlreadyInitialised(HRESULT hr) { return false; } + + virtual HRESULT createTitleContext(const SceNpId &npId) = 0; + virtual HRESULT destroyTitleContext(int titleContext) = 0; + + virtual HRESULT createTransactionContext(int titleContext) = 0; + virtual HRESULT abortTransactionContext(int transactionContext) = 0; + virtual HRESULT destroyTransactionContext(int transactionContext) = 0; + + virtual HRESULT fillByIdsQuery(const SceNpId &myNpId, SceNpId* &npIds, uint32_t &len); + +#if (defined __ORBIS__) || (defined __PSVITA__) + virtual HRESULT getFriendsList(sce::Toolkit::NP::Utilities::Future &friendsList) = 0; +#endif + + virtual char * getComment(SceNpScoreComment *comment) = 0; +}; diff --git a/Minecraft.Client/Common/Leaderboards/base64.cpp b/Minecraft.Client/Common/Leaderboards/base64.cpp new file mode 100644 index 00000000..19106cc4 --- /dev/null +++ b/Minecraft.Client/Common/Leaderboards/base64.cpp @@ -0,0 +1,131 @@ +/* + base64.cpp and base64.h + + Copyright (C) 2004-2008 René Nyffenegger + + This source code is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this source code must not be misrepresented; you must not + claim that you wrote the original source code. If you use this source code + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original source code. + + 3. This notice may not be removed or altered from any source distribution. + + René Nyffenegger rene.nyffenegger@adp-gmbh.ch + +*/ + +#include "stdafx.h" + +#include "base64.h" +#include + +static const std::string base64_chars = + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + + +static inline bool is_base64(unsigned char c) { + return (isalnum(c) || (c == '+') || (c == '/')); +} + +// 4J ADDED, +std::string base64_encode(std::string str) +{ + return base64_encode( reinterpret_cast(str.c_str()), str.length() ); +} + +std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) { + std::string ret; + int i = 0; + int j = 0; + unsigned char char_array_3[3]; + unsigned char char_array_4[4]; + + while (in_len--) { + char_array_3[i++] = *(bytes_to_encode++); + if (i == 3) { + char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; + char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); + char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); + char_array_4[3] = char_array_3[2] & 0x3f; + + for(int ii = 0; (ii <4) ; ii++) + ret += base64_chars[char_array_4[ii]]; + i = 0; + } + } + + if (i) + { + for(j = i; j < 3; j++) + char_array_3[j] = '\0'; + + char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; + char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); + char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); + char_array_4[3] = char_array_3[2] & 0x3f; + + for (j = 0; (j < i + 1); j++) + ret += base64_chars[char_array_4[j]]; + + while((i++ < 3)) + ret += '='; + + } + + return ret; + +} + +std::string base64_decode(std::string const& encoded_string) { + int in_len = encoded_string.size(); + int i = 0; + int j = 0; + int in_ = 0; + unsigned char char_array_4[4], char_array_3[3]; + std::string ret; + + while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) { + char_array_4[i++] = encoded_string[in_]; in_++; + if (i ==4) { + for (i = 0; i <4; i++) + char_array_4[i] = base64_chars.find(char_array_4[i]); + + char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); + char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); + char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; + + for (i = 0; (i < 3); i++) + ret += char_array_3[i]; + i = 0; + } + } + + if (i) { + for (j = i; j <4; j++) + char_array_4[j] = 0; + + for (j = 0; j <4; j++) + char_array_4[j] = base64_chars.find(char_array_4[j]); + + char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); + char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); + char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; + + for (j = 0; (j < i - 1); j++) ret += char_array_3[j]; + } + + return ret; +} \ No newline at end of file diff --git a/Minecraft.Client/Common/Leaderboards/base64.h b/Minecraft.Client/Common/Leaderboards/base64.h new file mode 100644 index 00000000..7f6a1e49 --- /dev/null +++ b/Minecraft.Client/Common/Leaderboards/base64.h @@ -0,0 +1,7 @@ +#pragma once + +#include + +std::string base64_encode(std::string str); +std::string base64_encode(unsigned char const* , unsigned int len); +std::string base64_decode(std::string const& s); \ No newline at end of file diff --git a/Minecraft.Client/Common/Media/BeaconMenu1080.swf b/Minecraft.Client/Common/Media/BeaconMenu1080.swf new file mode 100644 index 00000000..f84c9101 Binary files /dev/null and b/Minecraft.Client/Common/Media/BeaconMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/BeaconMenu480.swf b/Minecraft.Client/Common/Media/BeaconMenu480.swf new file mode 100644 index 00000000..b04e2919 Binary files /dev/null and b/Minecraft.Client/Common/Media/BeaconMenu480.swf differ diff --git a/Minecraft.Client/Common/Media/BeaconMenu720.swf b/Minecraft.Client/Common/Media/BeaconMenu720.swf new file mode 100644 index 00000000..c470b04e Binary files /dev/null and b/Minecraft.Client/Common/Media/BeaconMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/BeaconMenuSplit1080.swf b/Minecraft.Client/Common/Media/BeaconMenuSplit1080.swf new file mode 100644 index 00000000..02647e98 Binary files /dev/null and b/Minecraft.Client/Common/Media/BeaconMenuSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/BeaconMenuSplit720.swf b/Minecraft.Client/Common/Media/BeaconMenuSplit720.swf new file mode 100644 index 00000000..1a68b14f Binary files /dev/null and b/Minecraft.Client/Common/Media/BeaconMenuSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/BeaconMenuVita.swf b/Minecraft.Client/Common/Media/BeaconMenuVita.swf new file mode 100644 index 00000000..ab91a154 Binary files /dev/null and b/Minecraft.Client/Common/Media/BeaconMenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/Controls1080.swf b/Minecraft.Client/Common/Media/Controls1080.swf index 36051b8c..9ec38f92 100644 Binary files a/Minecraft.Client/Common/Media/Controls1080.swf and b/Minecraft.Client/Common/Media/Controls1080.swf differ diff --git a/Minecraft.Client/Common/Media/Crafting2x2Menu1080.swf b/Minecraft.Client/Common/Media/Crafting2x2Menu1080.swf index 65cb014a..e462de70 100644 Binary files a/Minecraft.Client/Common/Media/Crafting2x2Menu1080.swf and b/Minecraft.Client/Common/Media/Crafting2x2Menu1080.swf differ diff --git a/Minecraft.Client/Common/Media/Crafting2x2MenuVita.swf b/Minecraft.Client/Common/Media/Crafting2x2MenuVita.swf index 041e7663..27a0b580 100644 Binary files a/Minecraft.Client/Common/Media/Crafting2x2MenuVita.swf and b/Minecraft.Client/Common/Media/Crafting2x2MenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/Crafting3x3MenuSplit1080.swf b/Minecraft.Client/Common/Media/Crafting3x3MenuSplit1080.swf index cc42f3d1..155db47e 100644 Binary files a/Minecraft.Client/Common/Media/Crafting3x3MenuSplit1080.swf and b/Minecraft.Client/Common/Media/Crafting3x3MenuSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/CreateWorldMenu1080.swf b/Minecraft.Client/Common/Media/CreateWorldMenu1080.swf index 245bbf65..282c51f8 100644 Binary files a/Minecraft.Client/Common/Media/CreateWorldMenu1080.swf and b/Minecraft.Client/Common/Media/CreateWorldMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/CreateWorldMenu480.swf b/Minecraft.Client/Common/Media/CreateWorldMenu480.swf index 9426b616..2773341d 100644 Binary files a/Minecraft.Client/Common/Media/CreateWorldMenu480.swf and b/Minecraft.Client/Common/Media/CreateWorldMenu480.swf differ diff --git a/Minecraft.Client/Common/Media/CreateWorldMenu720.swf b/Minecraft.Client/Common/Media/CreateWorldMenu720.swf index b7474a63..985ef7a1 100644 Binary files a/Minecraft.Client/Common/Media/CreateWorldMenu720.swf and b/Minecraft.Client/Common/Media/CreateWorldMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/CreateWorldMenuVita.swf b/Minecraft.Client/Common/Media/CreateWorldMenuVita.swf index 814efa9c..f7fe1071 100644 Binary files a/Minecraft.Client/Common/Media/CreateWorldMenuVita.swf and b/Minecraft.Client/Common/Media/CreateWorldMenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/CreativeMenuVita.swf b/Minecraft.Client/Common/Media/CreativeMenuVita.swf index ecbbb3db..01797a06 100644 Binary files a/Minecraft.Client/Common/Media/CreativeMenuVita.swf and b/Minecraft.Client/Common/Media/CreativeMenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/FireworksMenu1080.swf b/Minecraft.Client/Common/Media/FireworksMenu1080.swf new file mode 100644 index 00000000..20250d06 Binary files /dev/null and b/Minecraft.Client/Common/Media/FireworksMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/FireworksMenu480.swf b/Minecraft.Client/Common/Media/FireworksMenu480.swf new file mode 100644 index 00000000..81a8290b Binary files /dev/null and b/Minecraft.Client/Common/Media/FireworksMenu480.swf differ diff --git a/Minecraft.Client/Common/Media/FireworksMenu720.swf b/Minecraft.Client/Common/Media/FireworksMenu720.swf new file mode 100644 index 00000000..917736e1 Binary files /dev/null and b/Minecraft.Client/Common/Media/FireworksMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/FireworksMenuSplit1080.swf b/Minecraft.Client/Common/Media/FireworksMenuSplit1080.swf new file mode 100644 index 00000000..f8537492 Binary files /dev/null and b/Minecraft.Client/Common/Media/FireworksMenuSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/FireworksMenuSplit720.swf b/Minecraft.Client/Common/Media/FireworksMenuSplit720.swf new file mode 100644 index 00000000..c3e56007 Binary files /dev/null and b/Minecraft.Client/Common/Media/FireworksMenuSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/FireworksMenuVita.swf b/Minecraft.Client/Common/Media/FireworksMenuVita.swf new file mode 100644 index 00000000..e54cdd78 Binary files /dev/null and b/Minecraft.Client/Common/Media/FireworksMenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/Graphics/Beacon_1.png b/Minecraft.Client/Common/Media/Graphics/Beacon_1.png new file mode 100644 index 00000000..7e272400 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/Beacon_1.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/Beacon_2.png b/Minecraft.Client/Common/Media/Graphics/Beacon_2.png new file mode 100644 index 00000000..1668e204 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/Beacon_2.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/Beacon_3.png b/Minecraft.Client/Common/Media/Graphics/Beacon_3.png new file mode 100644 index 00000000..818adb91 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/Beacon_3.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/Beacon_4.png b/Minecraft.Client/Common/Media/Graphics/Beacon_4.png new file mode 100644 index 00000000..70d5a9e6 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/Beacon_4.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Cross.png b/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Cross.png new file mode 100644 index 00000000..b8194456 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Cross.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Disabled.png b/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Disabled.png new file mode 100644 index 00000000..55f7727e Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Disabled.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Hover.png b/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Hover.png new file mode 100644 index 00000000..85e785c8 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Hover.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Normal.png b/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Normal.png new file mode 100644 index 00000000..29b0cd58 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Normal.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Pressed.png b/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Pressed.png new file mode 100644 index 00000000..9c94f518 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Pressed.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Tick.png b/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Tick.png new file mode 100644 index 00000000..47e0ad46 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/Beacon_Button_Tick.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HUD/Health_Full_Absorb.png b/Minecraft.Client/Common/Media/Graphics/HUD/Health_Full_Absorb.png new file mode 100644 index 00000000..e51ce707 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HUD/Health_Full_Absorb.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HUD/Health_Full_Wither.png b/Minecraft.Client/Common/Media/Graphics/HUD/Health_Full_Wither.png new file mode 100644 index 00000000..004bc5c5 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HUD/Health_Full_Wither.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HUD/Health_Full_Wither_Flash.png b/Minecraft.Client/Common/Media/Graphics/HUD/Health_Full_Wither_Flash.png new file mode 100644 index 00000000..3a20d5f2 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HUD/Health_Full_Wither_Flash.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HUD/Health_Half_Absorb.png b/Minecraft.Client/Common/Media/Graphics/HUD/Health_Half_Absorb.png new file mode 100644 index 00000000..e9529e1a Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HUD/Health_Half_Absorb.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HUD/Health_Half_Wither.png b/Minecraft.Client/Common/Media/Graphics/HUD/Health_Half_Wither.png new file mode 100644 index 00000000..0746bdd9 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HUD/Health_Half_Wither.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HUD/Health_Half_Wither_Flash.png b/Minecraft.Client/Common/Media/Graphics/HUD/Health_Half_Wither_Flash.png new file mode 100644 index 00000000..c14d3625 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HUD/Health_Half_Wither_Flash.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Full.png b/Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Full.png new file mode 100644 index 00000000..c4e90222 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Full.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Full_Flash.png b/Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Full_Flash.png new file mode 100644 index 00000000..f64c5c55 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Full_Flash.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Half.png b/Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Half.png new file mode 100644 index 00000000..e07dce1b Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Half.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Half_Flash.png b/Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Half_Flash.png new file mode 100644 index 00000000..d5d5ad61 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HUD/HorseHealth_Half_Flash.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HUD/HorseJump_bar_empty.png b/Minecraft.Client/Common/Media/Graphics/HUD/HorseJump_bar_empty.png new file mode 100644 index 00000000..368e9848 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HUD/HorseJump_bar_empty.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HUD/HorseJump_bar_full.png b/Minecraft.Client/Common/Media/Graphics/HUD/HorseJump_bar_full.png new file mode 100644 index 00000000..b7eaca73 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HUD/HorseJump_bar_full.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/Horse_Armor_Slot.png b/Minecraft.Client/Common/Media/Graphics/Horse_Armor_Slot.png new file mode 100644 index 00000000..5445c58b Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/Horse_Armor_Slot.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/Horse_Saddle_Slot.png b/Minecraft.Client/Common/Media/Graphics/Horse_Saddle_Slot.png new file mode 100644 index 00000000..7df8dbfc Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/Horse_Saddle_Slot.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Beacon.png b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Beacon.png new file mode 100644 index 00000000..3a22ce06 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Beacon.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Beacon_Small.png b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Beacon_Small.png new file mode 100644 index 00000000..0d5f33b2 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Beacon_Small.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Fireworks.png b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Fireworks.png new file mode 100644 index 00000000..4d0e5bac Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Fireworks.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Fireworks_Small.png b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Fireworks_Small.png new file mode 100644 index 00000000..fb1e3a80 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Fireworks_Small.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Hopper.png b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Hopper.png new file mode 100644 index 00000000..23a09824 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Hopper.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Hopper_Small.png b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Hopper_Small.png new file mode 100644 index 00000000..6454bcab Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Hopper_Small.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Horses.png b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Horses.png new file mode 100644 index 00000000..872584b8 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Horses.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Horses_Small.png b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Horses_Small.png new file mode 100644 index 00000000..93ba58c9 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/HowToPlay/HowToPlay_Horses_Small.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/GameOptionsTabOn.png b/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/GameOptionsTabOn.png new file mode 100644 index 00000000..519b87a2 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/GameOptionsTabOn.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/GameOptionsTabOn_Small.png b/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/GameOptionsTabOn_Small.png new file mode 100644 index 00000000..90f65b5b Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/GameOptionsTabOn_Small.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/MoreOptionsTabOff.png b/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/MoreOptionsTabOff.png new file mode 100644 index 00000000..8c408680 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/MoreOptionsTabOff.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/MoreOptionsTabOff_Small.png b/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/MoreOptionsTabOff_Small.png new file mode 100644 index 00000000..336895b0 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/MoreOptionsTabOff_Small.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/WorldOptionsTabOn.png b/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/WorldOptionsTabOn.png new file mode 100644 index 00000000..04c41d25 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/WorldOptionsTabOn.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/WorldOptionsTabOn_Small.png b/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/WorldOptionsTabOn_Small.png new file mode 100644 index 00000000..d5752af8 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/PanelsAndTabs/WorldOptionsTabOn_Small.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/PotionEffect/Potion_Effect_Icon_HealthBoost.png b/Minecraft.Client/Common/Media/Graphics/PotionEffect/Potion_Effect_Icon_HealthBoost.png new file mode 100644 index 00000000..dc57f82f Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/PotionEffect/Potion_Effect_Icon_HealthBoost.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/PotionEffect/Potion_Effect_Icon_Wither.png b/Minecraft.Client/Common/Media/Graphics/PotionEffect/Potion_Effect_Icon_Wither.png new file mode 100644 index 00000000..8fa22b21 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/PotionEffect/Potion_Effect_Icon_Wither.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/TutorialExitScreenshot.png b/Minecraft.Client/Common/Media/Graphics/TutorialExitScreenshot.png index b8475962..4052436a 100644 Binary files a/Minecraft.Client/Common/Media/Graphics/TutorialExitScreenshot.png and b/Minecraft.Client/Common/Media/Graphics/TutorialExitScreenshot.png differ diff --git a/Minecraft.Client/Common/Media/Graphics/X360ControllerIcons/ButtonRS_TT.png b/Minecraft.Client/Common/Media/Graphics/X360ControllerIcons/ButtonRS_TT.png new file mode 100644 index 00000000..e6d47265 Binary files /dev/null and b/Minecraft.Client/Common/Media/Graphics/X360ControllerIcons/ButtonRS_TT.png differ diff --git a/Minecraft.Client/Common/Media/HTMLColours.col b/Minecraft.Client/Common/Media/HTMLColours.col index 50999d5a..21db75ae 100644 Binary files a/Minecraft.Client/Common/Media/HTMLColours.col and b/Minecraft.Client/Common/Media/HTMLColours.col differ diff --git a/Minecraft.Client/Common/Media/HTMLColours.xml b/Minecraft.Client/Common/Media/HTMLColours.xml index ea6ef00c..8f17132c 100644 --- a/Minecraft.Client/Common/Media/HTMLColours.xml +++ b/Minecraft.Client/Common/Media/HTMLColours.xml @@ -7,14 +7,14 @@ - + - + diff --git a/Minecraft.Client/Common/Media/HUD1080.swf b/Minecraft.Client/Common/Media/HUD1080.swf index c9a05166..261be0e6 100644 Binary files a/Minecraft.Client/Common/Media/HUD1080.swf and b/Minecraft.Client/Common/Media/HUD1080.swf differ diff --git a/Minecraft.Client/Common/Media/HUD480.swf b/Minecraft.Client/Common/Media/HUD480.swf index d8a65a41..25cc211c 100644 Binary files a/Minecraft.Client/Common/Media/HUD480.swf and b/Minecraft.Client/Common/Media/HUD480.swf differ diff --git a/Minecraft.Client/Common/Media/HUD720.swf b/Minecraft.Client/Common/Media/HUD720.swf index 3527bb70..b044e31f 100644 Binary files a/Minecraft.Client/Common/Media/HUD720.swf and b/Minecraft.Client/Common/Media/HUD720.swf differ diff --git a/Minecraft.Client/Common/Media/HUDSplit1080.swf b/Minecraft.Client/Common/Media/HUDSplit1080.swf index cff338b9..c22cfc85 100644 Binary files a/Minecraft.Client/Common/Media/HUDSplit1080.swf and b/Minecraft.Client/Common/Media/HUDSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/HUDSplit720.swf b/Minecraft.Client/Common/Media/HUDSplit720.swf index 405cb99d..ba9937e1 100644 Binary files a/Minecraft.Client/Common/Media/HUDSplit720.swf and b/Minecraft.Client/Common/Media/HUDSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/HUDVita.swf b/Minecraft.Client/Common/Media/HUDVita.swf index 3197a722..03b05f42 100644 Binary files a/Minecraft.Client/Common/Media/HUDVita.swf and b/Minecraft.Client/Common/Media/HUDVita.swf differ diff --git a/Minecraft.Client/Common/Media/HopperMenu1080.swf b/Minecraft.Client/Common/Media/HopperMenu1080.swf new file mode 100644 index 00000000..84394e94 Binary files /dev/null and b/Minecraft.Client/Common/Media/HopperMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/HopperMenu480.swf b/Minecraft.Client/Common/Media/HopperMenu480.swf new file mode 100644 index 00000000..6a9efe29 Binary files /dev/null and b/Minecraft.Client/Common/Media/HopperMenu480.swf differ diff --git a/Minecraft.Client/Common/Media/HopperMenu720.swf b/Minecraft.Client/Common/Media/HopperMenu720.swf new file mode 100644 index 00000000..bbfc69b7 Binary files /dev/null and b/Minecraft.Client/Common/Media/HopperMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/HopperMenuSplit1080.swf b/Minecraft.Client/Common/Media/HopperMenuSplit1080.swf new file mode 100644 index 00000000..98dd6cde Binary files /dev/null and b/Minecraft.Client/Common/Media/HopperMenuSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/HopperMenuSplit720.swf b/Minecraft.Client/Common/Media/HopperMenuSplit720.swf new file mode 100644 index 00000000..030e18aa Binary files /dev/null and b/Minecraft.Client/Common/Media/HopperMenuSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/HopperMenuVita.swf b/Minecraft.Client/Common/Media/HopperMenuVita.swf new file mode 100644 index 00000000..fcb93ba7 Binary files /dev/null and b/Minecraft.Client/Common/Media/HopperMenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/HorseInventoryMenu1080.swf b/Minecraft.Client/Common/Media/HorseInventoryMenu1080.swf index 2f383848..db0f4d36 100644 Binary files a/Minecraft.Client/Common/Media/HorseInventoryMenu1080.swf and b/Minecraft.Client/Common/Media/HorseInventoryMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/HorseInventoryMenu480.swf b/Minecraft.Client/Common/Media/HorseInventoryMenu480.swf index 1c1d8177..599c3e38 100644 Binary files a/Minecraft.Client/Common/Media/HorseInventoryMenu480.swf and b/Minecraft.Client/Common/Media/HorseInventoryMenu480.swf differ diff --git a/Minecraft.Client/Common/Media/HorseInventoryMenu720.swf b/Minecraft.Client/Common/Media/HorseInventoryMenu720.swf index b07966bc..eee79a2f 100644 Binary files a/Minecraft.Client/Common/Media/HorseInventoryMenu720.swf and b/Minecraft.Client/Common/Media/HorseInventoryMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/HorseInventoryMenuSplit1080.swf b/Minecraft.Client/Common/Media/HorseInventoryMenuSplit1080.swf index c90925e5..edfa8430 100644 Binary files a/Minecraft.Client/Common/Media/HorseInventoryMenuSplit1080.swf and b/Minecraft.Client/Common/Media/HorseInventoryMenuSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/HorseInventoryMenuSplit720.swf b/Minecraft.Client/Common/Media/HorseInventoryMenuSplit720.swf index d4814571..5883cba4 100644 Binary files a/Minecraft.Client/Common/Media/HorseInventoryMenuSplit720.swf and b/Minecraft.Client/Common/Media/HorseInventoryMenuSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/HorseInventoryMenuVita.swf b/Minecraft.Client/Common/Media/HorseInventoryMenuVita.swf new file mode 100644 index 00000000..606f515e Binary files /dev/null and b/Minecraft.Client/Common/Media/HorseInventoryMenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/HowToPlay1080.swf b/Minecraft.Client/Common/Media/HowToPlay1080.swf index 8a74aae1..c1e91110 100644 Binary files a/Minecraft.Client/Common/Media/HowToPlay1080.swf and b/Minecraft.Client/Common/Media/HowToPlay1080.swf differ diff --git a/Minecraft.Client/Common/Media/HowToPlay480.swf b/Minecraft.Client/Common/Media/HowToPlay480.swf index 60449f75..e7cbe808 100644 Binary files a/Minecraft.Client/Common/Media/HowToPlay480.swf and b/Minecraft.Client/Common/Media/HowToPlay480.swf differ diff --git a/Minecraft.Client/Common/Media/HowToPlay720.swf b/Minecraft.Client/Common/Media/HowToPlay720.swf index eb7652ac..3e12dbb0 100644 Binary files a/Minecraft.Client/Common/Media/HowToPlay720.swf and b/Minecraft.Client/Common/Media/HowToPlay720.swf differ diff --git a/Minecraft.Client/Common/Media/HowToPlayMenu1080.swf b/Minecraft.Client/Common/Media/HowToPlayMenu1080.swf index 5dc90de1..6e128ffa 100644 Binary files a/Minecraft.Client/Common/Media/HowToPlayMenu1080.swf and b/Minecraft.Client/Common/Media/HowToPlayMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/HowToPlayMenu480.swf b/Minecraft.Client/Common/Media/HowToPlayMenu480.swf index df33898a..5e25feaf 100644 Binary files a/Minecraft.Client/Common/Media/HowToPlayMenu480.swf and b/Minecraft.Client/Common/Media/HowToPlayMenu480.swf differ diff --git a/Minecraft.Client/Common/Media/HowToPlayMenu720.swf b/Minecraft.Client/Common/Media/HowToPlayMenu720.swf index 0f01ef70..ef85f005 100644 Binary files a/Minecraft.Client/Common/Media/HowToPlayMenu720.swf and b/Minecraft.Client/Common/Media/HowToPlayMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/HowToPlayMenuSplit1080.swf b/Minecraft.Client/Common/Media/HowToPlayMenuSplit1080.swf index 2c1515ce..f44140b6 100644 Binary files a/Minecraft.Client/Common/Media/HowToPlayMenuSplit1080.swf and b/Minecraft.Client/Common/Media/HowToPlayMenuSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/HowToPlayMenuSplit720.swf b/Minecraft.Client/Common/Media/HowToPlayMenuSplit720.swf index c861543a..fe33c20e 100644 Binary files a/Minecraft.Client/Common/Media/HowToPlayMenuSplit720.swf and b/Minecraft.Client/Common/Media/HowToPlayMenuSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/HowToPlayMenuVita.swf b/Minecraft.Client/Common/Media/HowToPlayMenuVita.swf index b2db55a1..aa1ca7a7 100644 Binary files a/Minecraft.Client/Common/Media/HowToPlayMenuVita.swf and b/Minecraft.Client/Common/Media/HowToPlayMenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/HowToPlaySplit1080.swf b/Minecraft.Client/Common/Media/HowToPlaySplit1080.swf index db806225..3ba64d5a 100644 Binary files a/Minecraft.Client/Common/Media/HowToPlaySplit1080.swf and b/Minecraft.Client/Common/Media/HowToPlaySplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/HowToPlaySplit720.swf b/Minecraft.Client/Common/Media/HowToPlaySplit720.swf index 1735af41..bc9542e3 100644 Binary files a/Minecraft.Client/Common/Media/HowToPlaySplit720.swf and b/Minecraft.Client/Common/Media/HowToPlaySplit720.swf differ diff --git a/Minecraft.Client/Common/Media/HowToPlayVita.swf b/Minecraft.Client/Common/Media/HowToPlayVita.swf index 7ead38e2..51f2397d 100644 Binary files a/Minecraft.Client/Common/Media/HowToPlayVita.swf and b/Minecraft.Client/Common/Media/HowToPlayVita.swf differ diff --git a/Minecraft.Client/Common/Media/InGameHostOptions1080.swf b/Minecraft.Client/Common/Media/InGameHostOptions1080.swf index 9caefeab..207c86a7 100644 Binary files a/Minecraft.Client/Common/Media/InGameHostOptions1080.swf and b/Minecraft.Client/Common/Media/InGameHostOptions1080.swf differ diff --git a/Minecraft.Client/Common/Media/InGameHostOptions480.swf b/Minecraft.Client/Common/Media/InGameHostOptions480.swf index 6177ad68..f0d0e0c6 100644 Binary files a/Minecraft.Client/Common/Media/InGameHostOptions480.swf and b/Minecraft.Client/Common/Media/InGameHostOptions480.swf differ diff --git a/Minecraft.Client/Common/Media/InGameHostOptions720.swf b/Minecraft.Client/Common/Media/InGameHostOptions720.swf index 448b39a3..f4e55bf4 100644 Binary files a/Minecraft.Client/Common/Media/InGameHostOptions720.swf and b/Minecraft.Client/Common/Media/InGameHostOptions720.swf differ diff --git a/Minecraft.Client/Common/Media/InGameHostOptionsSplit1080.swf b/Minecraft.Client/Common/Media/InGameHostOptionsSplit1080.swf index 281f75d9..a45e8a37 100644 Binary files a/Minecraft.Client/Common/Media/InGameHostOptionsSplit1080.swf and b/Minecraft.Client/Common/Media/InGameHostOptionsSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/InGameHostOptionsSplit720.swf b/Minecraft.Client/Common/Media/InGameHostOptionsSplit720.swf index 328a3115..7f76aaaf 100644 Binary files a/Minecraft.Client/Common/Media/InGameHostOptionsSplit720.swf and b/Minecraft.Client/Common/Media/InGameHostOptionsSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/InGameHostOptionsVita.swf b/Minecraft.Client/Common/Media/InGameHostOptionsVita.swf index c9f6c0d7..a7276f10 100644 Binary files a/Minecraft.Client/Common/Media/InGameHostOptionsVita.swf and b/Minecraft.Client/Common/Media/InGameHostOptionsVita.swf differ diff --git a/Minecraft.Client/Common/Media/InGamePlayerOptions1080.swf b/Minecraft.Client/Common/Media/InGamePlayerOptions1080.swf index 12a15405..601cc467 100644 Binary files a/Minecraft.Client/Common/Media/InGamePlayerOptions1080.swf and b/Minecraft.Client/Common/Media/InGamePlayerOptions1080.swf differ diff --git a/Minecraft.Client/Common/Media/InGamePlayerOptions480.swf b/Minecraft.Client/Common/Media/InGamePlayerOptions480.swf index 707d8fdb..9e0b0ad9 100644 Binary files a/Minecraft.Client/Common/Media/InGamePlayerOptions480.swf and b/Minecraft.Client/Common/Media/InGamePlayerOptions480.swf differ diff --git a/Minecraft.Client/Common/Media/InGamePlayerOptions720.swf b/Minecraft.Client/Common/Media/InGamePlayerOptions720.swf index 36c7ea04..bc9c4f6b 100644 Binary files a/Minecraft.Client/Common/Media/InGamePlayerOptions720.swf and b/Minecraft.Client/Common/Media/InGamePlayerOptions720.swf differ diff --git a/Minecraft.Client/Common/Media/InGamePlayerOptionsSplit1080.swf b/Minecraft.Client/Common/Media/InGamePlayerOptionsSplit1080.swf index 65772a1b..c4187a09 100644 Binary files a/Minecraft.Client/Common/Media/InGamePlayerOptionsSplit1080.swf and b/Minecraft.Client/Common/Media/InGamePlayerOptionsSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/InGamePlayerOptionsSplit720.swf b/Minecraft.Client/Common/Media/InGamePlayerOptionsSplit720.swf index 1c3b7820..ab0b3a7e 100644 Binary files a/Minecraft.Client/Common/Media/InGamePlayerOptionsSplit720.swf and b/Minecraft.Client/Common/Media/InGamePlayerOptionsSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/InGamePlayerOptionsVita.swf b/Minecraft.Client/Common/Media/InGamePlayerOptionsVita.swf index c8d8d370..13c0b653 100644 Binary files a/Minecraft.Client/Common/Media/InGamePlayerOptionsVita.swf and b/Minecraft.Client/Common/Media/InGamePlayerOptionsVita.swf differ diff --git a/Minecraft.Client/Common/Media/Intro1080.swf b/Minecraft.Client/Common/Media/Intro1080.swf index 92569e1a..c9f2d3ba 100644 Binary files a/Minecraft.Client/Common/Media/Intro1080.swf and b/Minecraft.Client/Common/Media/Intro1080.swf differ diff --git a/Minecraft.Client/Common/Media/Intro480.swf b/Minecraft.Client/Common/Media/Intro480.swf index 2b289ff8..425c01fe 100644 Binary files a/Minecraft.Client/Common/Media/Intro480.swf and b/Minecraft.Client/Common/Media/Intro480.swf differ diff --git a/Minecraft.Client/Common/Media/Intro720.swf b/Minecraft.Client/Common/Media/Intro720.swf index 42c086d4..0c2bb3eb 100644 Binary files a/Minecraft.Client/Common/Media/Intro720.swf and b/Minecraft.Client/Common/Media/Intro720.swf differ diff --git a/Minecraft.Client/Common/Media/IntroVita.swf b/Minecraft.Client/Common/Media/IntroVita.swf index 54a9b2d5..8229640d 100644 Binary files a/Minecraft.Client/Common/Media/IntroVita.swf and b/Minecraft.Client/Common/Media/IntroVita.swf differ diff --git a/Minecraft.Client/Common/Media/InventoryMenu1080.swf b/Minecraft.Client/Common/Media/InventoryMenu1080.swf index f7e84e8a..47434cc3 100644 Binary files a/Minecraft.Client/Common/Media/InventoryMenu1080.swf and b/Minecraft.Client/Common/Media/InventoryMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/InventoryMenu480.swf b/Minecraft.Client/Common/Media/InventoryMenu480.swf index c5facdc4..5c129e1d 100644 Binary files a/Minecraft.Client/Common/Media/InventoryMenu480.swf and b/Minecraft.Client/Common/Media/InventoryMenu480.swf differ diff --git a/Minecraft.Client/Common/Media/InventoryMenu720.swf b/Minecraft.Client/Common/Media/InventoryMenu720.swf index e6f3cee0..3de2da83 100644 Binary files a/Minecraft.Client/Common/Media/InventoryMenu720.swf and b/Minecraft.Client/Common/Media/InventoryMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/InventoryMenuSplit1080.swf b/Minecraft.Client/Common/Media/InventoryMenuSplit1080.swf index 4f6e78c5..efe2d484 100644 Binary files a/Minecraft.Client/Common/Media/InventoryMenuSplit1080.swf and b/Minecraft.Client/Common/Media/InventoryMenuSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/InventoryMenuSplit720.swf b/Minecraft.Client/Common/Media/InventoryMenuSplit720.swf index 1e7d00ed..a9d13a05 100644 Binary files a/Minecraft.Client/Common/Media/InventoryMenuSplit720.swf and b/Minecraft.Client/Common/Media/InventoryMenuSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/InventoryMenuVita.swf b/Minecraft.Client/Common/Media/InventoryMenuVita.swf index e38bb07d..1eae726a 100644 Binary files a/Minecraft.Client/Common/Media/InventoryMenuVita.swf and b/Minecraft.Client/Common/Media/InventoryMenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/LanguagesMenu1080.swf b/Minecraft.Client/Common/Media/LanguagesMenu1080.swf new file mode 100644 index 00000000..9c0bef5a Binary files /dev/null and b/Minecraft.Client/Common/Media/LanguagesMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/LanguagesMenu480.swf b/Minecraft.Client/Common/Media/LanguagesMenu480.swf new file mode 100644 index 00000000..5cea7c87 Binary files /dev/null and b/Minecraft.Client/Common/Media/LanguagesMenu480.swf differ diff --git a/Minecraft.Client/Common/Media/LanguagesMenu720.swf b/Minecraft.Client/Common/Media/LanguagesMenu720.swf new file mode 100644 index 00000000..09022fd6 Binary files /dev/null and b/Minecraft.Client/Common/Media/LanguagesMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/LanguagesMenuSplit1080.swf b/Minecraft.Client/Common/Media/LanguagesMenuSplit1080.swf new file mode 100644 index 00000000..24d7a0b6 Binary files /dev/null and b/Minecraft.Client/Common/Media/LanguagesMenuSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/LanguagesMenuSplit720.swf b/Minecraft.Client/Common/Media/LanguagesMenuSplit720.swf new file mode 100644 index 00000000..99b9076f Binary files /dev/null and b/Minecraft.Client/Common/Media/LanguagesMenuSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/LanguagesMenuVita.swf b/Minecraft.Client/Common/Media/LanguagesMenuVita.swf new file mode 100644 index 00000000..cffdba59 Binary files /dev/null and b/Minecraft.Client/Common/Media/LanguagesMenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/LaunchMoreOptionsMenu1080.swf b/Minecraft.Client/Common/Media/LaunchMoreOptionsMenu1080.swf index 3db865f8..07d81207 100644 Binary files a/Minecraft.Client/Common/Media/LaunchMoreOptionsMenu1080.swf and b/Minecraft.Client/Common/Media/LaunchMoreOptionsMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/LaunchMoreOptionsMenu480.swf b/Minecraft.Client/Common/Media/LaunchMoreOptionsMenu480.swf index ea1132c0..666f1127 100644 Binary files a/Minecraft.Client/Common/Media/LaunchMoreOptionsMenu480.swf and b/Minecraft.Client/Common/Media/LaunchMoreOptionsMenu480.swf differ diff --git a/Minecraft.Client/Common/Media/LaunchMoreOptionsMenu720.swf b/Minecraft.Client/Common/Media/LaunchMoreOptionsMenu720.swf index 1cdf4d22..e77beb4e 100644 Binary files a/Minecraft.Client/Common/Media/LaunchMoreOptionsMenu720.swf and b/Minecraft.Client/Common/Media/LaunchMoreOptionsMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/LaunchMoreOptionsMenuVita.swf b/Minecraft.Client/Common/Media/LaunchMoreOptionsMenuVita.swf index 21fede27..5c1d44d9 100644 Binary files a/Minecraft.Client/Common/Media/LaunchMoreOptionsMenuVita.swf and b/Minecraft.Client/Common/Media/LaunchMoreOptionsMenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/LoadMenu1080.swf b/Minecraft.Client/Common/Media/LoadMenu1080.swf index e89f1875..d0d61ec7 100644 Binary files a/Minecraft.Client/Common/Media/LoadMenu1080.swf and b/Minecraft.Client/Common/Media/LoadMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/LoadMenu480.swf b/Minecraft.Client/Common/Media/LoadMenu480.swf index ce7ac1ad..e105c9e7 100644 Binary files a/Minecraft.Client/Common/Media/LoadMenu480.swf and b/Minecraft.Client/Common/Media/LoadMenu480.swf differ diff --git a/Minecraft.Client/Common/Media/LoadMenu720.swf b/Minecraft.Client/Common/Media/LoadMenu720.swf index c3976f49..ef33463e 100644 Binary files a/Minecraft.Client/Common/Media/LoadMenu720.swf and b/Minecraft.Client/Common/Media/LoadMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/LoadMenuVita.swf b/Minecraft.Client/Common/Media/LoadMenuVita.swf index 8bbf94e7..a5be6f3f 100644 Binary files a/Minecraft.Client/Common/Media/LoadMenuVita.swf and b/Minecraft.Client/Common/Media/LoadMenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/MediaDurango.arc b/Minecraft.Client/Common/Media/MediaDurango.arc index 53e9b222..50240c42 100644 Binary files a/Minecraft.Client/Common/Media/MediaDurango.arc and b/Minecraft.Client/Common/Media/MediaDurango.arc differ diff --git a/Minecraft.Client/Common/Media/MediaOrbis.arc b/Minecraft.Client/Common/Media/MediaOrbis.arc index fcb53c05..aea52dc1 100644 Binary files a/Minecraft.Client/Common/Media/MediaOrbis.arc and b/Minecraft.Client/Common/Media/MediaOrbis.arc differ diff --git a/Minecraft.Client/Common/Media/MediaPS3.arc b/Minecraft.Client/Common/Media/MediaPS3.arc index 7ab3a320..5eb550f8 100644 Binary files a/Minecraft.Client/Common/Media/MediaPS3.arc and b/Minecraft.Client/Common/Media/MediaPS3.arc differ diff --git a/Minecraft.Client/Common/Media/MediaPSVita.arc b/Minecraft.Client/Common/Media/MediaPSVita.arc index 01aa7466..8683db23 100644 Binary files a/Minecraft.Client/Common/Media/MediaPSVita.arc and b/Minecraft.Client/Common/Media/MediaPSVita.arc differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64.arc b/Minecraft.Client/Common/Media/MediaWindows64.arc index 130661a2..5ea229dc 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/Media/PressStartToPlay1080.swf b/Minecraft.Client/Common/Media/PressStartToPlay1080.swf index d15bedfc..87de331d 100644 Binary files a/Minecraft.Client/Common/Media/PressStartToPlay1080.swf and b/Minecraft.Client/Common/Media/PressStartToPlay1080.swf differ diff --git a/Minecraft.Client/Common/Media/PressStartToPlay720.swf b/Minecraft.Client/Common/Media/PressStartToPlay720.swf index 30255042..2554a31d 100644 Binary files a/Minecraft.Client/Common/Media/PressStartToPlay720.swf and b/Minecraft.Client/Common/Media/PressStartToPlay720.swf differ diff --git a/Minecraft.Client/Common/Media/QuadrantSignin1080.swf b/Minecraft.Client/Common/Media/QuadrantSignin1080.swf index 760a0319..92e2f348 100644 Binary files a/Minecraft.Client/Common/Media/QuadrantSignin1080.swf and b/Minecraft.Client/Common/Media/QuadrantSignin1080.swf differ diff --git a/Minecraft.Client/Common/Media/QuadrantSignin720.swf b/Minecraft.Client/Common/Media/QuadrantSignin720.swf index fd3542ff..d22c12a2 100644 Binary files a/Minecraft.Client/Common/Media/QuadrantSignin720.swf and b/Minecraft.Client/Common/Media/QuadrantSignin720.swf differ diff --git a/Minecraft.Client/Common/Media/SettingsOptionsMenu1080.swf b/Minecraft.Client/Common/Media/SettingsOptionsMenu1080.swf index 9dc478c4..ede96935 100644 Binary files a/Minecraft.Client/Common/Media/SettingsOptionsMenu1080.swf and b/Minecraft.Client/Common/Media/SettingsOptionsMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/SettingsOptionsMenu480.swf b/Minecraft.Client/Common/Media/SettingsOptionsMenu480.swf index 717e8ac9..d3d5b93e 100644 Binary files a/Minecraft.Client/Common/Media/SettingsOptionsMenu480.swf and b/Minecraft.Client/Common/Media/SettingsOptionsMenu480.swf differ diff --git a/Minecraft.Client/Common/Media/SettingsOptionsMenu720.swf b/Minecraft.Client/Common/Media/SettingsOptionsMenu720.swf index 05a1bc63..ce8434bf 100644 Binary files a/Minecraft.Client/Common/Media/SettingsOptionsMenu720.swf and b/Minecraft.Client/Common/Media/SettingsOptionsMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit1080.swf b/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit1080.swf index 5bef6ed3..b435a238 100644 Binary files a/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit1080.swf and b/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit720.swf b/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit720.swf index e6bf0a4e..d178d4cb 100644 Binary files a/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit720.swf and b/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/SettingsOptionsMenuVita.swf b/Minecraft.Client/Common/Media/SettingsOptionsMenuVita.swf index a3ca1b24..562a0c22 100644 Binary files a/Minecraft.Client/Common/Media/SettingsOptionsMenuVita.swf and b/Minecraft.Client/Common/Media/SettingsOptionsMenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/SkinSelectMenu1080.swf b/Minecraft.Client/Common/Media/SkinSelectMenu1080.swf index 002d7639..5eaf67fb 100644 Binary files a/Minecraft.Client/Common/Media/SkinSelectMenu1080.swf and b/Minecraft.Client/Common/Media/SkinSelectMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/SkinSelectMenu720.swf b/Minecraft.Client/Common/Media/SkinSelectMenu720.swf index ae8b3ed3..059ae199 100644 Binary files a/Minecraft.Client/Common/Media/SkinSelectMenu720.swf and b/Minecraft.Client/Common/Media/SkinSelectMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/SkinSelectMenuSplit1080.swf b/Minecraft.Client/Common/Media/SkinSelectMenuSplit1080.swf index a6666acf..03c532fe 100644 Binary files a/Minecraft.Client/Common/Media/SkinSelectMenuSplit1080.swf and b/Minecraft.Client/Common/Media/SkinSelectMenuSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/SkinSelectMenuSplit720.swf b/Minecraft.Client/Common/Media/SkinSelectMenuSplit720.swf index b090beaa..a49f20e8 100644 Binary files a/Minecraft.Client/Common/Media/SkinSelectMenuSplit720.swf and b/Minecraft.Client/Common/Media/SkinSelectMenuSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/SkinSelectMenuVita.swf b/Minecraft.Client/Common/Media/SkinSelectMenuVita.swf index 34950165..f46cda9b 100644 Binary files a/Minecraft.Client/Common/Media/SkinSelectMenuVita.swf and b/Minecraft.Client/Common/Media/SkinSelectMenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/ToolTips1080.swf b/Minecraft.Client/Common/Media/ToolTips1080.swf index 6bb2e367..2251f80e 100644 Binary files a/Minecraft.Client/Common/Media/ToolTips1080.swf and b/Minecraft.Client/Common/Media/ToolTips1080.swf differ diff --git a/Minecraft.Client/Common/Media/ToolTips480.swf b/Minecraft.Client/Common/Media/ToolTips480.swf index 735361e7..3ebebb9b 100644 Binary files a/Minecraft.Client/Common/Media/ToolTips480.swf and b/Minecraft.Client/Common/Media/ToolTips480.swf differ diff --git a/Minecraft.Client/Common/Media/ToolTips720.swf b/Minecraft.Client/Common/Media/ToolTips720.swf index f29f1649..7c5a5ba4 100644 Binary files a/Minecraft.Client/Common/Media/ToolTips720.swf and b/Minecraft.Client/Common/Media/ToolTips720.swf differ diff --git a/Minecraft.Client/Common/Media/ToolTipsSplit1080.swf b/Minecraft.Client/Common/Media/ToolTipsSplit1080.swf index 91d6327c..820fdda1 100644 Binary files a/Minecraft.Client/Common/Media/ToolTipsSplit1080.swf and b/Minecraft.Client/Common/Media/ToolTipsSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/ToolTipsSplit720.swf b/Minecraft.Client/Common/Media/ToolTipsSplit720.swf index 260092c5..7c5ae7ea 100644 Binary files a/Minecraft.Client/Common/Media/ToolTipsSplit720.swf and b/Minecraft.Client/Common/Media/ToolTipsSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/ToolTipsVita.swf b/Minecraft.Client/Common/Media/ToolTipsVita.swf index f8aa42fc..c2b9dfe8 100644 Binary files a/Minecraft.Client/Common/Media/ToolTipsVita.swf and b/Minecraft.Client/Common/Media/ToolTipsVita.swf differ diff --git a/Minecraft.Client/Common/Media/TradingMenu1080.swf b/Minecraft.Client/Common/Media/TradingMenu1080.swf index b4bd5ebd..75b6292e 100644 Binary files a/Minecraft.Client/Common/Media/TradingMenu1080.swf and b/Minecraft.Client/Common/Media/TradingMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/TradingMenu480.swf b/Minecraft.Client/Common/Media/TradingMenu480.swf index e6fa8b5f..035b4747 100644 Binary files a/Minecraft.Client/Common/Media/TradingMenu480.swf and b/Minecraft.Client/Common/Media/TradingMenu480.swf differ diff --git a/Minecraft.Client/Common/Media/TradingMenu720.swf b/Minecraft.Client/Common/Media/TradingMenu720.swf index 1ce0cfb1..774e14b8 100644 Binary files a/Minecraft.Client/Common/Media/TradingMenu720.swf and b/Minecraft.Client/Common/Media/TradingMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/TradingMenuSplit1080.swf b/Minecraft.Client/Common/Media/TradingMenuSplit1080.swf index ac6c27ae..2545ebb0 100644 Binary files a/Minecraft.Client/Common/Media/TradingMenuSplit1080.swf and b/Minecraft.Client/Common/Media/TradingMenuSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/TradingMenuSplit720.swf b/Minecraft.Client/Common/Media/TradingMenuSplit720.swf index 73ece9f8..5677b19b 100644 Binary files a/Minecraft.Client/Common/Media/TradingMenuSplit720.swf and b/Minecraft.Client/Common/Media/TradingMenuSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/TradingMenuVita.swf b/Minecraft.Client/Common/Media/TradingMenuVita.swf index f36749fb..e93787ae 100644 Binary files a/Minecraft.Client/Common/Media/TradingMenuVita.swf and b/Minecraft.Client/Common/Media/TradingMenuVita.swf differ diff --git a/Minecraft.Client/Common/Media/TutorialPopup1080.swf b/Minecraft.Client/Common/Media/TutorialPopup1080.swf index 01619554..edd94f4f 100644 Binary files a/Minecraft.Client/Common/Media/TutorialPopup1080.swf and b/Minecraft.Client/Common/Media/TutorialPopup1080.swf differ diff --git a/Minecraft.Client/Common/Media/TutorialPopup480.swf b/Minecraft.Client/Common/Media/TutorialPopup480.swf index fbea78ea..321dd391 100644 Binary files a/Minecraft.Client/Common/Media/TutorialPopup480.swf and b/Minecraft.Client/Common/Media/TutorialPopup480.swf differ diff --git a/Minecraft.Client/Common/Media/TutorialPopup720.swf b/Minecraft.Client/Common/Media/TutorialPopup720.swf index 0d3dcb20..94b6958e 100644 Binary files a/Minecraft.Client/Common/Media/TutorialPopup720.swf and b/Minecraft.Client/Common/Media/TutorialPopup720.swf differ diff --git a/Minecraft.Client/Common/Media/TutorialPopupSplit1080.swf b/Minecraft.Client/Common/Media/TutorialPopupSplit1080.swf index cdb09fc9..bb088d8c 100644 Binary files a/Minecraft.Client/Common/Media/TutorialPopupSplit1080.swf and b/Minecraft.Client/Common/Media/TutorialPopupSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/TutorialPopupSplit720.swf b/Minecraft.Client/Common/Media/TutorialPopupSplit720.swf index 2234e02c..3626e9c7 100644 Binary files a/Minecraft.Client/Common/Media/TutorialPopupSplit720.swf and b/Minecraft.Client/Common/Media/TutorialPopupSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/TutorialPopupVita.swf b/Minecraft.Client/Common/Media/TutorialPopupVita.swf index e671b2c5..e4866163 100644 Binary files a/Minecraft.Client/Common/Media/TutorialPopupVita.swf and b/Minecraft.Client/Common/Media/TutorialPopupVita.swf differ diff --git a/Minecraft.Client/Common/Media/de-DE/strings.resx b/Minecraft.Client/Common/Media/de-DE/strings.resx index 219cb1b9..430711f8 100644 --- a/Minecraft.Client/Common/Media/de-DE/strings.resx +++ b/Minecraft.Client/Common/Media/de-DE/strings.resx @@ -150,7 +150,7 @@ Minecraft ist ein Spiel, bei dem du Blöcke platzierst, um alles zu bauen, was d Mit{*CONTROLLER_ACTION_LOOK*} kannst du dich umsehen.{*B*}{*B*} Mit{*CONTROLLER_ACTION_MOVE*} kannst du dich bewegen.{*B*}{*B*} Drück{*CONTROLLER_ACTION_JUMP*}, um zu springen.{*B*}{*B*} -Drück{*CONTROLLER_ACTION_MOVE*} zweimal schnell nacheinander nach vorn, um zu sprinten. Solange du{*CONTROLLER_ACTION_MOVE*} nach vorn gedrückt hältst, sprintest du weiter, bis dir die Sprintzeit ausgeht oder deine Hungerleiste weniger als{*ICON_SHANK_03*} anzeigt. +Drück{*CONTROLLER_ACTION_MOVE*} zweimal schnell nacheinander nach vorn, um zu sprinten. Solange du{*CONTROLLER_ACTION_MOVE*} nach vorn gedrückt hältst, sprintest du weiter, bis dir die Sprintzeit ausgeht oder deine Hungerleiste weniger als{*ICON_SHANK_03*} anzeigt..{*B*}{*B*} Halte{*CONTROLLER_ACTION_ACTION*} gedrückt, um mit deiner Hand oder dem, was du darin hältst, zu graben oder zu hacken. Möglicherweise musst du dir ein Werkzeug bauen, um manche Blöcke abbauen zu können.{*B*}{*B*} Wenn du einen Gegenstand in der Hand hältst, kannst du ihn mit{*CONTROLLER_ACTION_USE*} verwenden. Drück{*CONTROLLER_ACTION_DROP*}, um ihn abzulegen. @@ -228,13 +228,13 @@ Du wirst selbst mit Kombinationen von Zutaten experimentieren müssen, um alle v {*T3*}SO WIRD GESPIELT: VERZAUBERN{*ETW*}{*B*}{*B*} -Mithilfe der Erfahrungspunkte, die du erhältst, wenn ein NPC stirbt oder wenn du bestimmte Blöcke abbaust oder im Ofen einschmilzt, kannst du einige Werkzeuge, Waffen, Rüstungen und Bücher verzaubern. {*B*} -Wenn ein Schwert, ein Bogen, eine Axt, eine Spitzhacke, eine Schaufel, eine Rüstung oder ein Buch in das Feld unter dem Buch in den Zaubertisch gelegt werden, zeigen die drei Schaltflächen rechts des Feldes ein paar Zauber und ihre Kosten in Erfahrungsleveln an. {*B*} -Wenn du für einen der Zauber nicht genug Erfahrungslevel hast, werden seine Kosten in Rot angezeigt, sonst in Grün. {*B*}{*B*} -Die tatsächlich angewendete Verzauberung wird zufällig aus den angezeigten Verzauberungen ausgewählt. {*B*}{*B*} -Wenn der Zaubertisch von Bücherregalen umgeben ist (bis hin zu maximal 15 Bücherregalen), wobei zwischen Zaubertisch und Bücherregal ein Block Abstand sein muss, werden die Verzauberungen verstärkt und man kann sehen, wie arkane Schriftzeichen aus dem Buch auf dem Zaubertisch herausfliegen. {*B*}{*B*} +Mithilfe der Erfahrungspunkte, die du erhältst, wenn ein NPC stirbt oder wenn du bestimmte Blöcke abbaust oder im Ofen einschmilzt, kannst du einige Werkzeuge, Waffen, Rüstungen und Bücher verzaubern.{*B*} +Wenn ein Schwert, ein Bogen, eine Axt, eine Spitzhacke, eine Schaufel, eine Rüstung oder ein Buch in das Feld unter dem Buch in den Zaubertisch gelegt werden, zeigen die drei Schaltflächen rechts des Feldes ein paar Zauber und ihre Kosten in Erfahrungsleveln an.{*B*} +Wenn du für einen der Zauber nicht genug Erfahrungslevel hast, werden seine Kosten in Rot angezeigt, sonst in Grün.{*B*}{*B*} +Die tatsächlich angewendete Verzauberung wird zufällig aus den angezeigten Verzauberungen ausgewählt.{*B*}{*B*} +Wenn der Zaubertisch von Bücherregalen umgeben ist (bis hin zu maximal 15 Bücherregalen), wobei zwischen Zaubertisch und Bücherregal ein Block Abstand sein muss, werden die Verzauberungen verstärkt und man kann sehen, wie arkane Schriftzeichen aus dem Buch auf dem Zaubertisch herausfliegen.{*B*}{*B*} Alle Zutaten für einen Zaubertisch kann man in den Dörfern einer Welt finden oder indem man die Welt abbaut und bewirtschaftet.{*B*}{*B*} -Zauberbücher werden beim Amboss benutzt, um Verzauberungen auf Gegenstände anzuwenden. Das gibt dir mir Kontrolle darüber, welche Verzauberungen du auf deinen Gegenständen möchtest.{*B*} +Zauberbücher werden beim Amboss benutzt, um Verzauberungen auf Gegenstände anzuwenden. Das gibt dir mehr Kontrolle darüber, welche Verzauberungen du auf deinen Gegenständen möchtest.{*B*} {*T3*}SO WIRD GESPIELT: TIERHALTUNG{*ETW*}{*B*}{*B*} @@ -301,6 +301,27 @@ Beim Laden oder Erstellen einer Welt kannst du mit der Schaltfläche "Weitere Op {*T2*}Hostprivilegien{*ETW*}{*B*} Aktiviert, dass der Host das Fliegen nutzen, Erschöpfung deaktivieren und sich selbst im Spielmenü unsichtbar machen kann. {*DISABLES_ACHIEVEMENTS*}{*B*}{*B*} + {*T2*}Tageslichtzyklus{*ETW*}{*B*} + Bei Deaktivierung ändert sich die Tageszeit nicht.{*B*}{*B*} + + {*T2*}Inventar behalten{*ETW*}{*B*} + Bei Aktivierung behalten Spieler ihr Inventar, wenn sie sterben.{*B*}{*B*} + + {*T2*}NPC-Eintritt{*ETW*}{*B*} + Bei Deaktivierung erscheinen keine NPCs auf natürlichem Weg.{*B*}{*B*} + + {*T2*}NPC-Griefing{*ETW*}{*B*} + Bei Deaktivierung können Monster und Tiere keine Blöcke verändern (z. B. werden bei Creeper-Explosionen keine Blöcke zerstört und Schafe entfernen kein Gras) oder Gegenstände aufheben.{*B*}{*B*} + + {*T2*}NPC-Beute{*ETW*}{*B*} + Bei Deaktivierung lassen Monster und Tiere keine Beute fallen (z. B. lassen Creeper kein Schießpulver fallen).{*B*}{*B*} + + {*T2*}Felderertrag{*ETW*}{*B*} + Bei Deaktivierung lassen Blöcke keine Gegenstände zurück, wenn sie zerstört werden (z. B. hinterlassen Steinblöcke keine Pflastersteine).{*B*}{*B*} + + {*T2*}Natürliche Erholung{*ETW*}{*B*} + Bei Deaktivierung wird die Gesundheit von Spielern nicht auf natürlichem Weg wiederhergestellt.{*B*}{*B*} + {*T1*}Optionen für das Erstellen der Welt{*ETW*}{*B*} Beim Erstellen einer neuen Welt gibt es einige zusätzliche Optionen.{*B*}{*B*} @@ -317,7 +338,7 @@ Beim Erstellen einer neuen Welt gibt es einige zusätzliche Optionen.{*B*}{*B*} Bei Aktivierung wird der Nether neu erstellt. Das ist nützlich, wenn du einen älteren Spielstand ohne Netherfestungen hast.{*B*}{*B*} {*T1*}Optionen im Spiel{*ETW*}{*B*} - Während des Spielens hast du Zugriff auf eine Reihe von Optionen, indem du mit der BACK-Taste das Spielmenü aufrufst.{*B*}{*B*} + Während des Spielens hast du Zugriff auf eine Reihe von Optionen, indem du mit {*BACK_BUTTON*} das Spielmenü aufrufst.{*B*}{*B*} {*T2*}Hostoptionen{*ETW*}{*B*} Der Host-Spieler und alle anderen als Moderatoren eingesetzten Spieler haben Zugriff auf das Menü "Hostoptionen". In diesem Menü können "Feuer breitet sich aus" und "TNT explodiert" aktiviert und deaktiviert werden.{*B*}{*B*} @@ -344,24 +365,26 @@ Um die Privilegien für einen Spieler zu bearbeiten, rufst du mit {*CONTROLLER_V Ist diese Option aktiviert, kann der Spieler Privilegien für andere Spieler (den Host ausgenommen) ändern, wenn "Spielern vertrauen" ausgeschaltet ist. Der Spieler kann andere Spieler ausschließen und "Feuer breitet sich aus" sowie "TNT explodiert" an- und ausschalten.{*B*}{*B*} {*T2*}Spieler ausschließen{*ETW*}{*B*} - Ist diese Option ausgewählt, werden Spieler, die nicht auf der gleichen {*PLATFORM_NAME*} Konsole wie der Host-Spieler spielen, ebenso wie alle anderen Spieler auf seiner {*PLATFORM_NAME*} Konsole vom Spiel ausgeschlossen. Dieser Spieler kann dem Spiel erst wieder beitreten, wenn es neu gestartet wird.{*B*}{*B*} + {*KICK_PLAYER_DESCRIPTION*}{*B*}{*B*} {*T1*}Optionen für Host-Spieler{*ETW*}{*B*} Wenn "Hostprivilegien" aktiviert ist, kann der Host-Spieler einige seiner eigenen Privilegien bearbeiten. Zur Bearbeitung der Privilegien für einen Spieler rufst du mit {*CONTROLLER_VK_A*} das Privilegien-Menü für Spieler auf, wo du die folgenden Optionen nutzen kannst.{*B*}{*B*} {*T2*}Kann fliegen{*ETW*}{*B*} Ist diese Option aktiviert, kann der Spieler fliegen. Diese Option ist nur für den Überlebensmodus relevant, da das Fliegen im Kreativmodus für alle Spieler aktiviert ist.{*B*}{*B*} - + {*T2*}Erschöpfung deaktivieren{*ETW*}{*B*} Diese Option betrifft nur den Überlebensmodus. Aktiviert, dass körperliche Aktivitäten (Laufen/Sprinten/Springen etc.) sich nicht auf die Hungerleiste auswirken. Verletzt der Spieler sich allerdings, verringert sich die Hungerleiste langsam während des Heilungsvorgangs.{*B*}{*B*} - + {*T2*}Unsichtbar{*ETW*}{*B*} Ist diese Option aktiviert, kann der Spieler von anderen Spielern nicht gesehen werden und ist unverwundbar.{*B*}{*B*} - - {*T2*}Kann teleportieren{*ETW*}{*B*} + + {*T2*}Kann teleportieren{*ETW*}{*B*} Dies erlaubt dem Spieler, sich selbst oder andere Spieler zu anderen Spielern in der Welt zu bewegen. +Mit dieser Option wird ein Spieler, der nicht auf der {*PLATFORM_NAME*} Konsole des Hosts spielt, vom Spiel ausgeschlossen; andere Spieler auf der {*PLATFORM_NAME*} Konsole des ausgeschlossenen Spielers werden ebenfalls ausgeschlossen. Dieser Spieler kann dem Spiel erst wieder beitreten, wenn es neu gestartet wird. + Nächste Seite Vorige Seite @@ -374,7 +397,7 @@ Wenn "Hostprivilegien" aktiviert ist, kann der Host-Spieler einige seiner eigene Truhen -Dinge herstellen +Crafting Ofen @@ -425,63 +448,95 @@ sie können dir also leicht zu Hilfe kommen. Neuigkeiten - -{*T3*}Veränderungen und Neuerungen{*ETW*}{*B*}{*B*} -- Neue Gegenstände hinzugefügt: Smaragde, Smaragderz, Smaragdblock, Endertruhe, Stolperdrahthaken, verzauberter goldener Apfel, Amboss, Blumentopf, Pflastersteinmauer, bemooste Pflastersteinmauer, Dörrgemälde, Kartoffel, Ofenkartoffel, giftige Kartoffel, Karotte, goldene Karotte, -Karottenangel, Kürbiskuchen, Nachtsichttrank, Unsichtbarkeitstrank, Netherquarz, Netherquarzerz, Quarzblock, Quarzstufe, Quarztreppe, gemeißelter Quarzblock, Säulen-Quarzblock, Zauberbuch, Teppich.{*B*} -- Neue Rezepte für glatten und gemeißelten Sandstein hinzugefügt.{*B*} -- Neue NPCs hinzugefügt: Zombie-Dorfbewohner.{*B*} -- Neue Geländeerstellungsfunktionen hinzugefügt: Wüstentempel, Wüstendörfer, Dschungeltempel.{*B*} -- Handel mit Dorfbewohnern hinzugefügt.{*B*} -- Ambossmenü hinzugefügt.{*B*} -- Lederrüstungen können nun eingefärbt werden.{*B*} -- Wolfshalsbänder können nun eingefärbt werden.{*B*} -- Beim Reiten auf Schweinen kann mit einer Karottenangel gesteuert werden.{*B*} -- Aktualisierter Bonustruheninhalt mit mehr Gegenständen.{*B*} -- Die Platzierung halber Blöcke sowie von Blöcken auf halben Blöcken wurde geändert.{*B*} -- Die Platzierung von umgedrehten Treppen und Stufen wurde geändert.{*B*} -- Verschiedene Berufe für Dorfbewohner hinzugefügt.{*B*} -- Dorfbewohner, die aus einem Eintrittsei spawnen, haben zufällige Berufe.{*B*} -- Baumstämme können seitwärts platziert werden.{*B*} -- Öfen können mit hölzernen Werkzeugen befeuert werden.{*B*} -- Eis- und Glasscheiben können mit Werkzeugen gesammelt werden, die mit Behutsamkeit verzaubert wurden.{*B*} -- Hölzerne Knöpfe und Druckplatten können durch Pfeile betätigt werden.{*B*} -- Nether-NPCs können oberirdisch aus Portalen spawnen.{*B*} -- Creeper und Spinnen sind aggressiver gegenüber dem Spieler, der sie zuletzt geschlagen hat.{*B*} -- Im Kreativmodus werden NPCs nach kurzer Zeit wieder neutral.{*B*} -- Der Rückstoßeffekt beim Ertrinken wurde entfernt.{*B*} -- Wenn Zombies Türen zerstören, ist der Schaden jetzt sichtbar.{*B*} -- Eis schmilzt im Nether.{*B*} -- Kessel, die draußen im Regen stehen, werden aufgefüllt.{*B*} -- Die Aktualisierungszeit von Kolben wurde verdoppelt.{*B*} -- Schweine verlieren gegebenenfalls ihren Sattel, wenn sie getötet werden.{*B*} -- Die Farbe des Himmels im Ende wurde geändert.{*B*} -- Draht für Stolperdraht kann platziert werden.{*B*} -- Regen tropft durch Blätter.{*B*} -- Hebel können an der Unterseite von Blöcken platziert werden.{*B*} -- Je nach Schwierigkeit verursacht TNT mehr oder weniger Schaden.{*B*} -- Das Bücherrezept wurde geändert.{*B*} -- Boote zerstören jetzt Seerosenblätter, nicht mehr umgekehrt.{*B*} -- Schweine lassen mehr Schweinefleisch fallen.{*B*} -- In superflachen Welten spawnen weniger Slimes.{*B*} -- Creeper verursachen je nach Schwierigkeit mehr oder weniger Schaden und der Rückstoß wurde erhöht.{*B*} -- Das Problem, durch das Endermen ihre Kiefer nicht bewegen konnten, wurde behoben.{*B*} -- Spieler können nun im BACK-Taste-Menü während des Spiels teleportieren.{*B*} -- Neue Hostoptionen für Flug, Unsichtbarkeit und Unverwundbarkeit entfernter Spieler hinzugefügt.{*B*} -- Neue Tutorials über neue Gegenstände und Funktionen zur Tutorial-Welt hinzugefügt.{*B*} -- Die Schallplattentruhen in der Tutorial-Welt wurden neu verteilt.{*B*} +{*T3*}Veränderungen und Neuerungen{*ETW*}{*B*}{*B*} +- Neue Gegenstände hinzugefügt: Ausgehärteter Lehm, gefärbter Lehm, Kohleblock, Heuballen, Aktivierungsschiene, Redstone-Block, Tageslichtsensor, Auswurfblock, Trichter, Lore mit Trichter, Lore mit TNT, Redstone-Vergleicher, beschwerte Druckplatte, Signalfeuer, eingeklemmte Truhe, Feuerwerksrakete, Feuerwerksstern, Netherstern, Leine, Pferderüstung, Namensschild, Pferde-Eintrittsei.{*B*} +- Neue NPCs hinzugefügt: Dürre, Dörrskelette, Hexen, Fledermäuse, Pferde, Esel und Maultiere.{*B*} +- Neue Geländeerstellungsfunktionen hinzugefügt: Hexenhütten.{*B*} +- Signalfeuer-Oberfläche hinzugefügt.{*B*} +- Pferde-Oberfläche hinzugefügt.{*B*} +Trichter-Oberfläche hinzugefügt.{*B*} +- Feuerwerk hinzugefügt: Die Feuerwerk-Oberfläche kann von der Werkbank aufgerufen werden, wenn du die Zutaten zum Craften eines Feuerwerkssterns oder einer Feuerwerksrakete hast.{*B*} +- Abenteuermodus hinzugefügt: Du kannst Blöcke nur mit den richtigen Werkzeugen abbauen.{*B*} +- Viele neue Sounds hinzugefügt.{*B*} +NPCs, Gegenstände und Projektile können jetzt durch Portale gehen.{*B*} +- Repeater können jetzt gesperrt werden, indem ihre Seiten von einem weiteren Repeater mit Strom versorgt werden.{*B*} +- Zombies und Skelette können jetzt andere Waffen und Rüstungen haben.{*B*} +- Neue Todesmeldungen.{*B*} +- Benenne NPCs mit einem Namensschild und benenne Behälter um, um den Titel des geöffneten Menüs zu ändern.{*B*} +- Knochenmehl lässt nicht mehr alles sofort zu voller Größe wachsen, sondern in zufälligen Stufen.{*B*} +- Ein Redstone-Signal, das den Inhalt von Truhen, Brauständen, Dispensern und Jukeboxen beschreibt, kann aufgefangen werden, indem ein Redstone-Vergleicher direkt daran platziert wird.{*B*} +- Dispenser können in jede Richtung zeigen.{*B*} +- Goldene Äpfel verleihen Spielern kurzfristig zusätzliche Absorptions-Gesundheit.{*B*} +- In einem Gebiet erscheinende Monster werden mit zunehmender Dauer des Aufenthalts immer schwieriger.{*B*} {*ETB*}Willkommen zurück! Vielleicht hast du es gar nicht bemerkt, aber dein Minecraft wurde gerade aktualisiert.{*B*}{*B*} Es gibt jede Menge neue Funktionen für dich und deine Freunde. Hier stellen wir dir nur ein paar Highlights vor. Lies sie dir durch und dann ziehe los und hab Spaß!{*B*}{*B*} -{*T1*}Neue Gegenstände{*ETB*}: Smaragde, Smaragderz, Smaragdblock, Endertruhe, Stolperdrahthaken, verzauberter goldener Apfel, Amboss, Blumentopf, Pflastersteinmauer, bemooste Pflastersteinmauer, Dörrgemälde, Kartoffel, Ofenkartoffel, giftige Kartoffel, Karotte, goldene Karotte, -Karottenangel, Kürbiskuchen, Nachtsichttrank, Unsichtbarkeitstrank, Netherquarz, Netherquarzerz, Quarzblock, Quarzstufe, Quarztreppe, gemeißelter Quarzblock, Säulen-Quarzblock, Zauberbuch, Teppich.{*B*}{*B*} - {*T1*}Neue NPCs{*ETB*} – Zombie-Dorfbewohner.{*B*}{*B*} -{*T1*}Neue Funktionen{*ETB*}: Handel mit Dorfbewohnern, Waffen und Werkzeuge auf Ambossen reparieren oder verzaubern, Gegenstände in einer Endertruhe lagern, Steuerung beim Reiten auf Schweinen mit einer Karottenangel!{*B*}{*B*} -{*T1*}Neue Mini-Tutorials{*ETB*} – Lerne in der Tutorial-Welt, wie man die neuen Features benutzt!{*B*}{*B*} -{*T1*}Neue 'Easter Eggs'{*ETB*} – Wir haben alle geheimen Schallplatten in der Tutorial-Welt neu platziert. Versuch, sie alle wiederzufinden!{*B*}{*B*} +{*T1*}Neue Gegenstände{*ETB*} – Ausgehärteter Lehm, gefärbter Lehm, Kohleblock, Heuballen, Aktivierungsschiene, Redstone-Block, Tageslichtsensor, Auswurfblock, Trichter, Lore mit Trichter, Lore mit TNT, Redstone-Vergleicher, beschwerte Druckplatte, Signalfeuer, eingeklemmte Truhe, Feuerwerksrakete, Feuerwerksstern, Netherstern, Leine, Pferderüstung, Namensschild, Pferde-Eintrittsei.{*B*}{*B*} +{*T1*}Neue NPCs{*ETB*} – Dürre, Dörrskelette, Hexen, Fledermäuse, Pferde, Esel und Maultiere.{*B*}{*B*} +{*T1*}Neue Features{*ETB*} – Zähme und reite ein Pferd, crafte Feuerkwerk für eine Show, benenne Tiere und Monster mit einem Namensschild, erschaffe fortgeschrittenere Redstone-Schaltkreise und neue Hostoptionen zur Kontrolle der Gastberechtigungen!{*B*}{*B*} +{*T1*}Neue Tutorial-Welt{*ETB*} – Lerne den Umgang mit neuen und alten Features. Versuche, alle geheimen Schallplatten in der Welt zu finden!{*B*}{*B*} +Pferde + +{*T3*}SO WIRD GESPIELT: PFERDE{*ETW*}{*B*}{*B*} +Pferde und Esel findet man hauptsächlich auf freiem Feld. Maultiere sind die Nachfahren von jeweils einem Esel und einem Pferd, sie sind aber selbst unfruchtbar.{*B*} +Alle ausgewachsenen Pferde, Esel und Maultiere können geritten werden. Allerdings können nur Pferden Rüstungen angelegt werden und nur Maultiere sowie Esel können mit Satteltaschen für den Transport von Gegenständen ausgestattet werden.{*B*}{*B*} +Pferde, Esel und Maultiere müssen vor dem Gebrauch gezähmt werden. Du zähmst ein Pferd, indem du versuchst, es zu reiten, und oben bleibst, wenn es versucht, dich abzuwerfen.{*B*} +Wenn um das Pferd herum Liebesherzen erscheinen, ist es zahm und versucht nicht mehr, dich abzuwerfen. Um ein Pferd beim Reiten zu lenken, musst du ihm einen Sattel anlegen.{*B*}{*B*} +Du kannst Sättel von Dorfbewohnern kaufen oder in versteckten Truhen in der Welt finden.{*B*} +Du kannst zahmen Eseln und Maultieren Satteltaschen geben, indem du eine Truhe anbringst. Du kannst dann während des Reitens oder beim Schleichen auf die Taschen zugreifen.{*B*}{*B*} +Pferde und Esel (nicht aber Maultiere) können wie andere Tiere mithilfe von goldenen Äpfeln oder goldenen Karotten gezüchtet werden.{*B*} +Fohlen wachsen mit der Zeit zu Pferden heran und du kannst dies beschleunigen, indem du sie mit Weizen oder Heu fütterst.{*B*} + + +Signalfeuer + +{*T3*}SO WIRD GESPIELT: SIGNALFEUER{*ETW*}{*B*}{*B*} +Aktive Signalfeuer werfen einen hellen Lichtstrahl in den Himmel und gewähren Spielern in der Nähe Kräfte.{*B*} +Sie werden aus Glas, Obsidian und Nethersternen gefertigt, die du erhältst, wenn du die Dürre besiegst.{*B*}{*B*} +Signalfeuer müssen auf Pyramiden aus Eisen, Gold, Smaragd oder Diamant so platziert werden, dass sie tagsüber dem Sonnenlicht ausgesetzt sind.{*B*} +Das Material der Unterlage hat keine Auswirkungen auf die Kraft des Signalfeuers.{*B*}{*B*} +Im Signalfeuermenü kannst du eine Hauptkraft für dein Signalfeuer auswählen. Je mehr Stufen deine Pyramide hat, desto mehr Kräfte stehen dir zur Auswahl.{*B*} +Bei einem Signalfeuer auf einer Pyramide mit mindestens vier Stufen hast du außerdem die Option, entweder die Regeneration als Zweitkraft oder eine stärkere Hauptkraft auszuwählen.{*B*}{*B*} +Um die Kräfte deines Signalfeuers einzustellen, musst du einen Smaragd, Diamant, Gold- oder Eisenbarren im Bezahl-Slot opfern.{*B*} +Danach strahlt das Signalfeuer für unbegrenzte Zeit die Kräfte aus.{*B*} + + +Feuerwerk + +{*T3*}SO WIRD GESPIELT: FEUERWERK{*ETW*}{*B*}{*B*} +Feuerwerk sind dekorative Gegenstände, die manuell oder von Dispensern gestartet werden können. Sie werden aus Papier, Schießpulver und wahlweise einigen Feuerwerkssternen gecraftet.{*B*} +Farben, Verblassen, Form, Größe und Effekte (wie Spuren und Funkeln) von Feuerwerkssternen können beim Craften durch zusätzliche Zutaten angepasst werden.{*B*}{*B*} +Feuerkwerk craftest du, indem du Schießpulver und Papier in das 3x3-Crafting-Raster legst, das über deinem Inventar angezeigt wird.{*B*} +Du kannst wahlweise mehrere Feuerwerkssterne in das Raster legen, um sie dem Feuerwerk hinzuzufügen.{*B*} +Mehr Schießpulver im Raster erhöht die Höhe, in der Feuerwerkssterne explodieren.{*B*}{*B*} +Du kannst das fertige Feuerwerk dann aus dem Ausgabeplatz nehmen.{*B*}{*B*} +Feuerwerkssterne werden hergestellt, indem du Schießpulver und Farbe in das Raster legst.{*B*} + – Die Explosion des Feuerwerkssterns nimmt die jeweilige Farbe an.{*B*} + – Die Form des Feuerwerkssterns ändert sich durch das Hinzufügen von Feuerkugeln, Goldklumpen, Federn oder NPC-Köpfen.{*B*} + – Spur oder Funkeln können mit Diamanten oder Glowstone-Staub hinzugefügt werden.{*B*}{*B*} +Wenn ein Feuerwerksstern gecraftet wurde, kannst du das Verblassen mit Farbe ändern. + + +Trichter + +{*T3*}SO WIRD GESPIELT: TRICHTER{*ETW*}{*B*}{*B*} +Mit Trichtern kannst du Gegenstände in Behälter füllen oder sie daraus entnehmen sowie automatisch Gegenstände aufheben, die hineingeworfen werden.{*B*} +Sie können mit Brauständen, Truhen, Dispensern, Auswurfblöcken, Loren mit Truhen, Loren mit Trichtern sowie anderen Trichtern verwendet werden.{*B*}{*B*} +Trichter versuchen fortwährend, Gegenstände aus einem geeigneten Behälter aufzusaugen, der über ihnen platziert wird. Sie versuchen auch, gelagerte Gegenstände in einen Ausgabebehälter zu legen.{*B*} +Wenn ein Trichter mit Redstone betrieben wird, wird er inaktiv und hört auf, Gegenstände aufzusaugen und einzufügen.{*B*}{*B*} +Ein Trichter zeigt in die Ausgaberichtung für Gegenstände. Damit ein Trichter auf einen bestimmten Block zeigt, platzierst du ihn dagegen, während du schleichst.{*B*} + + +Auswurfblöcke + +{*T3*}SO WIRD GESPIELT: AUSWURFBLÖCKE{*ETW*}{*B*}{*B*} +Von Redstone mit Energie versorgte Auswurfblöcke lassen einen einzelnen, zufälligen Gegenstand fallen. Öffne den Auswurfblock mit {*CONTROLLER_ACTION_USE*} und fülle ihn dann mit Gegenständen aus deinem Inventar.{*B*} +Wenn der Auswurfblock einer Truhe oder einem anderen Behälter zugewandt ist, wird der Gegenstand stattdessen darin abgelegt. Lange Ketten aus Auswurfblöcken können hergestellt werden, um Gegenstände über längere Entfernungen zu transportieren. Dafür müssen sie abwechselnd ein- und ausgeschaltet werden. + + Fügt mehr Schaden zu als eine leere Hand. Hiermit kannst du Erde, Gras, Sand, Kies und Schnee schneller als mit der Hand abbauen. Du brauchst eine Schaufel, um Schneebälle abzubauen. @@ -613,10 +668,36 @@ haben. Erzeugt ein Abbild einer Gegend, bei deren Erforschung du sie in der Hand hattest. Nützlich, um den Weg zu finden. +Wird bei Benutzung zu einem Kartenteil der aktuellen Welt und füllt sich, wenn du die Gegend erkundest. + Erlaubt Fernangriffe mit Pfeilen. Wird als Munition für Bögen verwendet. +Von der Dürre fallen gelassen, wird zur Herstellung von Signalfeuern verwendet. + +Erzeugt bei Aktivierung bunte Explosionen. Die Farbe, der Effekt, die Form und das Verblassen hängen davon ab, welcher Feuerwerksstern zur Herstellung verwendet wird. + +Legt die Farbe, den Effekt und die Form eines Feuerwerks fest. + +Wird in Redstone-Schaltkreisen verwendet, um die Signalstärke aufrechtzuerhalten, zu vergleichen oder zu mindern, oder um bestimmte Blockzustände zu messen. + +Ein Lorentyp, der als beweglicher TNT-Block funktioniert. + +Ein Block, der auf Grundlage des Sonnenlichts (oder des Mangels an Sonnenlicht) ein Redstone-Signal ausgibt. + +Ein besonderer Lorentyp, der ähnlich funktioniert wie ein Trichter. Er sammelt Gegenstände, die auf Schienen liegen, und aus Behältern darüber. + +Ein besonderer Rüstungstyp, der einem Pferd angelegt werden kann. Gewährt 5 Rüstungspunkte. + +Ein besonderer Rüstungstyp, der einem Pferd angelegt werden kann. Gewährt 7 Rüstungspunkte. + +Ein besonderer Rüstungstyp, der einem Pferd angelegt werden kann. Gewährt 11 Rüstungspunkte. + +Hiermit kannst du NPCs am Spieler oder an Zaunpfosten festbinden. + +Hiermit kannst du NPCs in der Welt Namen geben. + Regeneriert 2,5{*ICON_SHANK_01*}. Regeneriert 1,5{*ICON_SHANK_01*}. Kann 6-mal verwendet werden. @@ -668,7 +749,7 @@ Kann auch genutzt werden, um ein wenig Licht zu erzeugen. Beschleunigt darüberfahrende Loren, wenn sie unter Strom steht. Wenn kein Strom anliegt, bewirkt sie, dass Loren auf ihr anhalten. -Funktioniert wie eine Druckplatte – sendet ein Redstone-Signal, wenn sie aktiviert wird, kann aber nur durch Loren aktiviert werden. +Funktioniert wie eine Druckplatte – sendet ein Redstone-Signal, wenn sie aktiviert wird, kann aber nur durch Loren aktiviert werden. Kann dich, ein Tier oder ein Monster auf Schienen transportieren. @@ -944,100 +1025,158 @@ statt nur 3.) NPC-Köpfe können als Dekoration platziert werden oder als Maske anstatt eines Helms getragen werden. +Hiermit werden Befehle ausgeführt. + +Wirft einen Lichtstrahl in den Himmel und kann Spielern in der Nähe Statuseffekte gewähren. + +Lässt dich in ihrem Inneren Blöcke und Gegenstände lagern. Platzier zwei Truhen nebeneinander, um eine größere Truhe mit der doppelten Kapazität zu erschaffen. Die eingeklemmte Truhe erstellt beim Öffnen außerdem eine Redstone-Ladung. + +Gewährt eine Redstone-Ladung. Die Ladung wird stärker, wenn mehr Gegenstände auf der Platte liegen. + +Gewährt eine Redstone-Ladung. Die Ladung wird stärker, wenn mehr Gegenstände auf der Platte liegen. Erfordert mehr Gewicht als die leichte Platte. + +Dient als Redstone-Energiequelle. Kann in Redstone zurückverwandelt werden. + +Kann Gegenstände fangen oder sie in Behälter legen bzw. aus ihnen entfernen. + +Ein Schienentyp, der Loren mit Trichtern aktivieren oder deaktivieren und Loren mit TNT auslösen kann. + +Kann Gegenstände lagern und ablegen oder in einen anderen Behälter schieben, wenn er einen Impuls von einem Redstone-Stromkreis erhält. + +Bunte Blöcke aus gefärbtem, ausgehärtetem Lehm. + +Kann an Pferde, Esel oder Maultiere verfüttert werden, um bis zu 10 Herzen zu heilen. Lässt Fohlen schneller wachsen. + +Wird hergestellt, indem man Lehm in einem Ofen schmilzt. + +Wird aus Glas und einer Farbe hergestellt. + +Wird aus Buntglas hergestellt. + +Eine kompakte Art, Kohle zu lagern. Kann als Brennstoff in Öfen verwendet werden. + Tintenfisch - + Wenn er getötet wird, lässt er einen Tintensack fallen. - + Kuh - + Wenn sie getötet wird, lässt sie Leder fallen. Kann außerdem mit einem Eimer gemolken werden. - + Schaf - + Wenn es geschoren wird, lässt es Wolle fallen, wenn es nicht schon geschoren war. Kann gefärbt werden, wodurch seine Wolle eine andere Farbe erhält. - + Huhn - + Wenn es getötet wird, lässt es Federn fallen. Legt in zufälligen Abständen Eier. - + Schwein - + Wenn es getötet wird, lässt es Schweinefleisch fallen. Kann mithilfe eines Sattels geritten werden. - + Wolf - + Friedlich, bis er angegriffen wird, dann wehrt er sich. Kann mithilfe von Knochen gezähmt werden. Der Wolf wird dir dann folgen und alles angreifen, was dich angreift. - + Creeper - + Explodiert, wenn du ihm zu nahe kommst! - + Skelett - + Schießt mit Pfeilen auf dich. Wenn es getötet wird, lässt es Pfeile fallen. - + Spinne - + Greift dich an, wenn du ihr zu nahe kommst. Kann Wände hochklettern. Wenn sie getötet wird, lässt sie Faden fallen. - + Zombie - + Greift dich an, wenn du ihm zu nahe kommst. - + Zombie-Schweinezüchter - + Eigentlich friedlich, greift dich aber in Gruppen an, wenn du einen angreifst. - + Ghast - + Schießt Feuerbälle auf dich, die beim Auftreffen explodieren. - + Slime - + Zerfällt in kleinere Slimes, wenn er Schaden erhält. - + Enderman - + Greift dich an, wenn du ihn ansiehst. Kann außerdem Blöcke bewegen. - + Silberfisch - + Lockt in der Nähe versteckte Silberfische an, wenn er angegriffen wird. Versteckt sich in Steinblöcken. - + Höhlenspinne - + Hat einen giftigen Biss. - + Pilzkuh - + Kann mithilfe einer Schüssel zu Pilzsuppe verarbeitet werden. Lässt Pilze fallen und wird zu einer normalen Kuh, wenn man sie schert. - + Schneegolem - + Der Schneegolem entsteht, wenn Spieler Schneeblöcke und einen Kürbis kombinieren. Bewirft die Feinde seines Erbauers mit Schneebällen. - + Enderdrache - + Ein großer schwarzer Drache, den man im Ende findet. - + Lohe - + Gegner, die man im Nether findet, vorwiegend in Netherfestungen. Lassen Lohenruten fallen, wenn sie getötet werden. - + Magmawürfel - + Findet man im Nether. Ähnlich wie Schleim zerfallen sie zu kleineren Versionen, wenn man sie tötet. - + Dorfbewohner - + Ozelot - + Findet man in Dschungeln. Füttere sie mit rohem Fisch, um sie zu zähmen. Du musst aber zulassen, dass der Ozelot sich dir nähert, denn bei schnellen Bewegungen läuft er weg. - + Eisengolem - + Erscheinen in Dörfern, um sie zu beschützen, und können mittels Eisenblöcken und Kürbissen erstellt werden. - + +Fledermaus + +Diese fliegenden Geschöpfe findet man in Höhlen oder anderen großen geschlossenen Räumen. + +Hexe + +Diese Feinde findet man in Sümpfen, und sie werfen mit Tränken nach dir, um dich anzugreifen. Wenn sie sterben, lassen sie Tränke fallen. + +Pferd + +Diese Tiere können gezähmt und dann geritten werden. + +Esel + +Diese Tiere können gezähmt und dann geritten werden. Du kannst Truhen an ihnen anbringen. + +Maultier + +Eine Kreuzung aus einem Pferd und einem Esel. Diese Tiere können gezähmt und dann geritten werden. Sie können Truhen tragen. + +Zombiepferd + +Skelettpferd + +Dürre + +Werden aus Dörrschädeln und Seelensand hergestellt. Feuern explodierende Schädel auf dich ab. + Explosives Animator Concept Artist @@ -1384,6 +1523,8 @@ statt nur 3.) Karte +Leere Karte + Schallplatte - "13" Schallplatte - "cat" @@ -1486,6 +1627,28 @@ statt nur 3.) Creeper-Kopf +Netherstern + +Feuerwerksrakete + +Feuerwerksstern + +Redstone-Vergleicher + +Lore mit TNT + +Lore mit Trichter + +Eisen-Pferderüstung + +Gold-Pferderüstung + +Diamant-Pferderüstung + +Leine + +Namensschild + Stein Grasblock @@ -1502,6 +1665,8 @@ statt nur 3.) Dschungelholzbretter +Holzbretter (jeder Typ) + Setzling Eichensetzling @@ -1838,6 +2003,190 @@ statt nur 3.) Schädel +Befehlsblock + +Signalfeuer + +Eingeklemmte Truhe + +Beschwerte Druckplatte (leicht) + +Beschwerte Druckplatte (schwer) + +Redstone-Vergleicher + +Tageslichtsensor + +Redstone-Block + +Trichter + +Aktivierungsschiene + +Auswurfblock + +Gefärbter Lehm + +Heuballen + +Ausgehärteter Lehm + +Kohleblock + +Schwarz gefärbter Lehm + +Rot gefärbter Lehm + +Grün gefärbter Lehm + +Braun gefärbter Lehm + +Blau gefärbter Lehm + +Lila gefärbter Lehm + +Cyanfarbener gefärbter Lehm + +Hellgrau gefärbter Lehm + +Grau gefärbter Lehm + +Rosa gefärbter Lehm + +Hellgrün gefärbter Lehm + +Gelb gefärbter Lehm + +Hellblau gefärbter Lehm + +Magentafarben gefärbter Lehm + +Orange gefärbter Lehm + +Weiß gefärbter Lehm + +Buntglas + +Schwarzes Buntglas + +Rotes Buntglas + +Grünes Buntglas + +Braunes Buntglas + +Blaues Buntglas + +Lila Buntglas + +Cyanfarbenes Buntglas + +Hellgraues Buntglas + +Graues Buntglas + +Rosa Buntglas + +Hellgrünes Buntglas + +Gelbes Buntglas + +Hellblaues Buntglas + +Magentafarbenes Buntglas + +Oranges Buntglas + +Weißes Buntglas + +Buntglasscheibe + +Schwarze Buntglasscheibe + +Rote Buntglasscheibe + +Grüne Buntglasscheibe + +Braune Buntglasscheibe + +Blaue Buntglasscheibe + +Lila Buntglasscheibe + +Cyanfarbene Buntglasscheibe + +Hellgraue Buntglasscheibe + +Graue Buntglasscheibe + +Rosa Buntglasscheibe + +Hellgrüne Buntglasscheibe + +Gelbe Buntglasscheibe + +Hellblaue Buntglasscheibe + +Magentafarbene Buntglasscheibe + +Orange Buntglasscheibe + +Weiße Buntglasscheibe + +Kleiner Ball + +Großer Ball + +Sternförmig + +Creeper-förmig + +Explosion + +Unbekannte Form + +Schwarz + +Rot + +Grün + +Braun + +Blau + +Lila + +Cyan + +Hellgrau + +Grau + +Rosa + +Hellgrün + +Gelb + +Hellblau + +Magenta + +Orange + +Weiß + +Andere + +Verblassen + +Funkeln + +Spur + +Flugdauer: +  Derzeitige Steuerung Layout @@ -2015,8 +2364,7 @@ Nachts treiben sich Monster herum, du solltest dir einen Unterstand bauen, bevor Dies ist dein Inventar. Hier werden die Gegenstände angezeigt, die du in deiner Hand verwenden kannst, sowie alle anderen Gegenstände, die du bei dir trägst. Außerdem wird hier deine Rüstung angezeigt. - - + {*B*} Drück zum Fortfahren{*CONTROLLER_VK_A*}.{*B*} Drück{*CONTROLLER_VK_B*}, wenn du bereits weißt, wie das Inventar verwendet wird. @@ -2037,7 +2385,7 @@ Nachts treiben sich Monster herum, du solltest dir einen Unterstand bauen, bevor - Wenn du mehr Informationen über einen Gegenstand brauchst, beweg den Cursor über den Gegenstand und drück{*CONTROLLER_VK_RT*}. + Wenn du mehr Informationen über einen Gegenstand brauchst, beweg den Cursor über den Gegenstand und drück{*CONTROLLER_ACTION_MENU_PAGEDOWN*}. @@ -2071,7 +2419,7 @@ Nachts treiben sich Monster herum, du solltest dir einen Unterstand bauen, bevor - Wenn du mehr Informationen über einen Gegenstand brauchst, beweg den Cursor über den Gegenstand und drück{*CONTROLLER_VK_RT*}. + Wenn du mehr Informationen über einen Gegenstand brauchst, beweg den Cursor über den Gegenstand und drück{*CONTROLLER_ACTION_MENU_PAGEDOWN*}. @@ -2618,6 +2966,211 @@ Im Flugmodus halte{*CONTROLLER_ACTION_JUMP*} nach unten gedrückt, um dich nach Drück{*CONTROLLER_VK_B*}, wenn du schon alles über die Hungerleiste und die Nahrungsaufnahme weißt. + + Dies ist das Pferdeinventar. + + + + {*B*}Drücke zum Fortfahren {*CONTROLLER_VK_A*}. + {*B*}Drücke {*CONTROLLER_VK_B*}, wenn du bereits weißt, wie das Pferdeinventar verwendet wird. + + + + Im Pferdeinventar kannst du Gegenstände an dein Pferd, deinen Esel oder dein Maultier übertragen oder es mit ihnen ausrüsten. + + + + Sattle dein Pferd, indem du einen Sattel im Sattel-Slot platzierst. Pferde können Rüstungen tragen, wenn du Pferderüstung im Rüstungs-Slot platzierst. + + + + Du kannst hier auch Gegenstände zwischen deinem eigenen Inventar und den Satteltaschen von Eseln und Maultieren austauschen. + + +Du hast ein Pferd gefunden. + +Du hast einen Esel gefunden. + +Du hast ein Maultier gefunden. + + + {*B*}Drücke {*CONTROLLER_VK_A*}, um mehr über Pferde, Esel und Maultiere zu erfahren. + {*B*}Drücke {*CONTROLLER_VK_B*}, wenn du bereits alles über Pferde, Esel und Maultiere weißt. + + + + Pferde und Esel findet man hauptsächlich auf freiem Feld. Maultiere sind die Nachfahren von jeweils einem Esel und einem Pferd, sie sind aber selbst unfruchtbar. + + + + Alle ausgewachsenen Pferde, Esel und Maultiere können geritten werden. Allerdings können nur Pferden Rüstungen angelegt werden und nur Maultiere sowie Esel können mit Satteltaschen für den Transport von Gegenständen ausgestattet werden. + + + + Pferde, Esel und Maultiere müssen vor dem Gebrauch gezähmt werden. Du zähmst ein Pferd, indem du versuchst, es zu reiten, und oben bleibst, wenn es versucht, dich abzuwerfen. + + + + Wenn das Tier gezähmt ist, erscheinen Liebesherzen und es versucht nicht mehr, dich abzuwerfen. + + + + Versuche jetzt, dieses Pferd zu reiten. Verwende {*CONTROLLER_ACTION_USE*} ohne Gegenstände oder Werkzeuge in der Hand, um aufzusteigen. + + + + Um ein Pferd beim Reiten zu lenken, musst du ihm einen Sattel anlegen. Du kannst Sättel von Dorfbewohnern kaufen oder in versteckten Truhen in der Welt finden. + + + + Du kannst zahmen Eseln und Maultieren Satteltaschen geben, indem du eine Truhe anbringst. Du kannst dann während des Reitens oder beim Schleichen auf die Taschen zugreifen. + + + + Pferde und Esel (nicht aber Maultiere) können wie andere Tiere mithilfe von goldenen Äpfeln oder goldenen Karotten gezüchtet werden. Fohlen wachsen mit der Zeit zu Pferden heran und du kannst dies beschleunigen, indem du sie mit Weizen oder Heu fütterst. + + + + Du kannst versuchen, die Pferde und Esel hier zu zähmen, und in den Truhen in der Nähe liegen Sättel, Pferderüstungen und andere nützliche Dinge. + + + + Dies ist das Signalfeuermenü. Hier kannst du auswählen, welche Kräfte dein Signalfeuer gewähren soll. + + + + {*B*}Drücke zum Fortfahren {*CONTROLLER_VK_A*}. + {*B*}Drücke {*CONTROLLER_VK_B*}, wenn du bereits weißt, wie das Signalfeuermenü verwendet wird. + + + + Im Signalfeuermenü kannst du 1 Hauptkraft für dein Signalfeuer auswählen. Je mehr Stufen deine Pyramide hat, desto mehr Kräfte stehen dir zur Auswahl. + + + + Bei einem Signalfeuer auf einer Pyramide mit mindestens 4 Stufen hast du außerdem die Option, entweder die Regeneration als Zweitkraft oder eine stärkere Hauptkraft auszuwählen. + + + + Um die Kräfte deines Signalfeuers einzustellen, musst du einen Smaragd, Diamant, Gold- oder Eisenbarren im Bezahl-Slot opfern. Danach strahlt das Signalfeuer für unbegrenzte Zeit die Kräfte aus. + + +Auf der Spitze dieser Pyramide steht ein inaktives Signalfeuer. + + + {*B*}Drücke {*CONTROLLER_VK_A*}, um mehr über Signalfeuer zu erfahren. + {*B*}Drücke {*CONTROLLER_VK_B*}, wenn du bereits alles über Signalfeuer weißt. + + + + Aktive Signalfeuer werfen einen hellen Lichtstrahl in den Himmel und gewähren Spielern in der Nähe Kräfte. Sie werden aus Glas, Obsidian und Nethersternen gefertigt, die du erhältst, wenn du die Dürre besiegst. + + + + Signalfeuer müssen auf Pyramiden aus Eisen, Gold, Smaragd oder Diamant so platziert werden, dass sie tagsüber dem Sonnenlicht ausgesetzt sind. Das Material der Unterlage hat aber keine Auswirkungen auf die Kraft des Signalfeuers. + + + + Verwende das Signalfeuer, um die gewährte Kraft festzulegen. Du kannst mit den bereitgestellten Eisenbarren bezahlen. + + +Dieser Raum enthält Trichter. + + + {*B*}Drücke {*CONTROLLER_VK_A*}, um mehr über Trichter zu erfahren. + {*B*}Drücke {*CONTROLLER_VK_B*}, wenn du bereits alles über Trichter weißt. + + + + Mit Trichtern kannst du Gegenstände in Behälter füllen oder sie daraus entnehmen sowie automatisch Gegenstände aufheben, die hineingeworfen werden. + + + + Sie können mit Brauständen, Truhen, Dispensern, Auswurfblöcken, Loren mit Truhen, Loren mit Trichtern sowie anderen Trichtern verwendet werden. + + + + Trichter versuchen fortwährend, Gegenstände aus einem geeigneten Behälter aufzusaugen, der über ihnen platziert wird. Sie versuchen auch, gelagerte Gegenstände in einen Ausgabebehälter zu legen. + + + + Wenn ein Trichter allerdings mit Redstone betrieben wird, wird er inaktiv und hört auf, Gegenstände aufzusaugen und einzufügen. + + + + Ein Trichter zeigt in die Ausgaberichtung für Gegenstände. Damit ein Trichter auf einen bestimmten Block zeigt, platzierst du ihn dagegen, während du schleichst. + + + + Es gibt viele nützliche Anwendungsmöglichkeiten für Trichter. In diesem Raum kannst du sie dir ansehen und ausprobieren. + + + + Dies ist das Feuerwerkmenü. Hier kannst du Feuerwerk und Feuerwerkssterne craften. + + + + {*B*}Drücke zum Fortfahren {*CONTROLLER_VK_A*}. + {*B*}Drücke {*CONTROLLER_VK_B*}, wenn du bereits weißt, wie das Signalfeuermenü verwendet wird. + + + + Leg Schießpulver und Papier in das 3x3-Crafting-Raster, das über deinem Inventar angezeigt wird, um Feuerwerk zu craften. + + + + Du kannst wahlweise mehrere Feuerwerkssterne in das Raster legen, um sie dem Feuerwerk hinzuzufügen. + + + + Mehr Schießpulver im Raster erhöht die Höhe, in der Feuerwerkssterne explodieren. + + + + Du kannst das fertige Feuerwerk dann aus dem Ausgabeplatz nehmen. + + + + Feuerwerkssterne werden hergestellt, indem du Schießpulver und Farbe in das Raster legst. + + + + Die Explosion des Feuerwerkssterns nimmt die jeweilige Farbe an. + + + + Die Form des Feuerwerkssterns ändert sich durch das Hinzufügen von Feuerkugeln, Goldklumpen, Federn oder NPC-Köpfen. + + + + Spur oder Funkeln können mit Diamanten oder Glowstone-Staub hinzugefügt werden. + + + + Wenn ein Feuerwerksstern gecraftet wurde, kannst du das Verblassen mit Farbe ändern. + + + + In diesen Truhen befinden sich verschiedene Gegenstände, die bei der Herstellung von FEUERWERK verwendet werden! + + + + {*B*}Drück{*CONTROLLER_VK_A*}, um mehr über Feuerwerk zu erfahren. + {*B*}Drück{*CONTROLLER_VK_B*}, wenn du bereits alles über Feuerwerk weißt. + + + + Feuerwerk sind dekorative Gegenstände, die manuell oder von Dispensern gestartet werden können. Sie werden aus Papier, Schießpulver und wahlweise einigen Feuerwerkssternen gecraftet. + + + + Farben, Verblassen, Form, Größe und Effekte (wie Spuren und Funkeln) von Feuerwerkssternen können beim Craften durch zusätzliche Zutaten angepasst werden. + + + + Probiere, Feuerwerk mit verschiedenen Zutaten aus den Truhen an der Werkbank herzustellen. + +  Auswählen Verwenden @@ -2678,7 +3231,7 @@ Im Flugmodus halte{*CONTROLLER_ACTION_JUMP*} nach unten gedrückt, um dich nach Schnellauswahl leeren -? +Was ist das? Auf Facebook teilen @@ -2840,6 +3393,22 @@ Im Flugmodus halte{*CONTROLLER_ACTION_JUMP*} nach unten gedrückt, um dich nach Spielstand für Xbox One hochladen +Aufsteigen + +Absteigen + +Truhe befestigen + +Starten + +Festbinden + +Losbinden + +Befestigen + +Name + OK Abbrechen @@ -3150,6 +3719,20 @@ Möchtest du das vollständige Spiel freischalten? Dispenser +Pferd + +Auswurfblock + +Trichter + +Signalfeuer + +Hauptkraft + +Zweitkraft + +Lore + Es stehen derzeit keine entsprechenden Inhalte zum Herunterladen für diesen Titel zur Verfügung. %s ist dem Spiel beigetreten. @@ -3309,10 +3892,14 @@ Möchtest du das Mash-up-Paket oder Texturpaket jetzt installieren? Spielmodus: Kreativ +Spielmodus: Abenteuer + Überleben Kreativ +Abenteuer + Im Überlebensmodus Im Kreativmodus @@ -3333,6 +3920,8 @@ Möchtest du das Mash-up-Paket oder Texturpaket jetzt installieren? Superflach +Gib einen Seed ein, um das gleiche Gelände erneut zu erstellen. Lass das Feld leer, um eine zufällige Welt zu erstellen. + Wenn dies aktiviert ist, ist das Spiel online. Wenn dies aktiviert ist, können nur eingeladene Spieler beitreten. @@ -3349,7 +3938,7 @@ Möchtest du das Mash-up-Paket oder Texturpaket jetzt installieren? Aktiviert, dass der Host das Fliegen nutzen, Erschöpfung deaktivieren und sich selbst im Spielmenü unsichtbar machen kann. Deaktiviert Erfolge und Bestenlisten-Aktualisierungen. -Sorgt bei Aktivierung dafür, dass der Nether neu erstellt wird. Dies ist nützlich, wenn du einen alten Spielstand hast, der keine Netherfestungen enthält. +Bei Aktivierung wird der Nether neu erstellt. Nützlich bei alten Spielständen, die keine Netherfestungen enthalten. Aktiviert, dass Strukturen wie Dörfer und Festungen in der Welt erstellt werden. @@ -3357,6 +3946,20 @@ Möchtest du das Mash-up-Paket oder Texturpaket jetzt installieren? Aktiviert, dass eine Truhe mit nützlichen Gegenständen in der Nähe des Startpunkts des Spielers erstellt wird. +Bei Deaktivierung können Monster und Tiere keine Blöcke verändern (z. B. werden bei Creeper-Explosionen keine Blöcke zerstört und Schafe entfernen kein Gras) oder Gegenstände aufheben. + +Bei Aktivierung behalten Spieler ihr Inventar, wenn sie sterben. + +Bei Deaktivierung erscheinen keine NPCs auf natürlichem Weg. + +Bei Deaktivierung lassen Monster und Tiere keine Beute fallen (z. B. lassen Creeper kein Schießpulver fallen). + +Bei Deaktivierung lassen Blöcke keine Gegenstände zurück, wenn sie zerstört werden (z. B. hinterlassen Steinblöcke keine Pflastersteine). + +Bei Deaktivierung wird die Gesundheit von Spielern nicht auf natürlichem Weg wiederhergestellt. + +Bei Deaktivierung ändert sich die Tageszeit nicht. + Skinpakete Themen @@ -3405,7 +4008,49 @@ Möchtest du das Mash-up-Paket oder Texturpaket jetzt installieren? {*PLAYER*} wurde von {*SOURCE*} erschlagen. -{*PLAYER*} wurde durch {*SOURCE*} getötet. +{*PLAYER*} wurde durch {*SOURCE*} mit Magie getötet. + +{*PLAYER*} ist von einer Leiter gefallen. + +{*PLAYER*} ist von Ranken heruntergefallen. + +{*PLAYER*} ist aus dem Wasser gefallen. + +{*PLAYER*} ist aus großer Höhe heruntergefallen. + +{*PLAYER*} wurde von {*SOURCE*} zum Absturz verdammt. + +{*PLAYER*} wurde von {*SOURCE*} zum Absturz verdammt. + +{*PLAYER*} wurde von {*SOURCE*} mit {*ITEM*} zum Absturz verdammt. + +{*PLAYER*} ist zu tief gefallen und wurde von {*SOURCE*} erledigt. + +{*PLAYER*} ist zu tief gefallen und wurde von {*SOURCE*} mit {*ITEM*} erledigt. + +{*PLAYER*} ist im Kampf gegen {*SOURCE*} ins Feuer gegangen. + +{*PLAYER*} wurde im Kampf gegen {*SOURCE*} eingeäschert. + +{*PLAYER*} hat versucht, in Lava zu schwimmen, um {*SOURCE*} zu entkommen. + +{*PLAYER*} ist beim Versuch ertrunken, {*SOURCE*} zu entkommen. + +{*PLAYER*} ist beim Versuch, {*SOURCE*} zu entkommen, in einen Kaktus gelaufen. + +{*PLAYER*} wurde von {*SOURCE*} in die Luft gejagt. + +{*PLAYER*} ist verdorrt. + +{*PLAYER*} wurde durch {*SOURCE*} mit {*ITEM*} getötet. + +{*PLAYER*} wurde von {*SOURCE*} mit {*ITEM*} erschossen. + +{*PLAYER*} starb durch einen Feuerball von {*SOURCE*} mit {*ITEM*}. + +{*PLAYER*} wurde von {*SOURCE*} mit {*ITEM*} erschlagen. + +{*PLAYER*} wurde durch {*SOURCE*} mit {*ITEM*} getötet. Grundgesteinnebel @@ -3570,9 +4215,9 @@ Möchtest du das Mash-up-Paket oder Texturpaket jetzt installieren? Nether nicht zurücksetzen -Pilzkuh kann momentan nicht geschoren werden. Die Höchstanzahl von Schweinen, Schafen, Kühen und Katzen wurde erreicht. +Pilzkuh kann momentan nicht geschoren werden. Die Höchstanzahl von Schweinen, Schafen, Kühen, Katzen und Pferden wurde erreicht. -Eintrittsei kann momentan nicht verwendet werden. Die Höchstanzahl von Schweinen, Schafen, Kühen und Katzen wurde erreicht. +Kann momentan kein Eintrittsei verwenden. Die Höchstanzahl von Schweinen, Schafen, Kühen, Katzen und Pferden wurde erreicht. Kann momentan kein Eintrittsei verwenden. Die Höchstanzahl von Pilzkühen wurde erreicht. @@ -3582,6 +4227,8 @@ Möchtest du das Mash-up-Paket oder Texturpaket jetzt installieren? Kann momentan kein Eintrittsei verwenden. Die Höchstanzahl von Tintenfischen in einer Welt wurde erreicht. +Kann momentan kein Eintrittsei verwenden. Die Höchstanzahl von Fledermäusen in einer Welt wurde erreicht. + Kann momentan kein Eintrittsei verwenden. Die Höchstanzahl von Feinden in einer Welt wurde erreicht. Kann momentan kein Eintrittsei verwenden. Die Höchstanzahl von Dorfbewohnern in einer Welt wurde erreicht. @@ -3590,12 +4237,14 @@ Möchtest du das Mash-up-Paket oder Texturpaket jetzt installieren? Im friedlichen Modus kannst du keine Feinde erscheinen lassen. -Tier kann nicht in den Liebesmodus versetzt werden. Die Zuchtobergrenze für Schweine, Schafe, Kühe und Katzen wurde erreicht. +Tier kann nicht in den Liebesmodus versetzt werden. Die Zuchtobergrenze für Schweine, Schafe, Kühen, Katzen und Pferden wurde erreicht. Tier kann nicht in den Liebesmodus versetzt werden. Die Zuchtobergrenze für Wölfe wurde erreicht. Tier kann nicht in den Liebesmodus versetzt werden. Die Zuchtobergrenze für Hühner wurde erreicht. +Tier kann nicht in den Liebesmodus versetzt werden. Die Zuchtobergrenze für Pferde wurde erreicht. + Tier kann nicht in den Liebesmodus versetzt werden. Die Zuchtobergrenze für Pilzkühe wurde erreicht. Die Höchstanzahl von Booten in einer Welt wurde erreicht. @@ -3623,27 +4272,43 @@ Möchtest du das Mash-up-Paket oder Texturpaket jetzt installieren? Mitwirkende Inhalte neu installieren - + Debug-Einstellungen - + Feuer breitet sich aus - + TNT explodiert - + Spieler gegen Spieler - + Spielern vertrauen - + Hostprivilegien - + Strukturen erzeugen - + Superflache Welt - + Bonustruhe - + Weltoptionen - + +Spieloptionen + +NPC-Griefing + +Inventar behalten + +NPC-Eintritt + +NPC-Beute + +Felderertrag + +Natürliche Erholung + +Tageslichtzyklus + Kann bauen und abbauen Kann Türen und Schalter verwenden @@ -3830,6 +4495,14 @@ Möchtest du das Mash-up-Paket oder Texturpaket jetzt installieren? Gift +Dürre + +Gesundheitsbonus + +Absorption + +Sättigung + der Geschwindigkeit der Langsamkeit @@ -3868,6 +4541,14 @@ Möchtest du das Mash-up-Paket oder Texturpaket jetzt installieren? des Gifts +des Verfalls + +des Gesundheitsbonus + +der Absorption + +der Sättigung + II @@ -3964,6 +4645,22 @@ Möchtest du das Mash-up-Paket oder Texturpaket jetzt installieren? Verringert mit der Zeit die Gesundheit von betroffenen Spielern, Tieren und Monstern. +Bei Anwendung: + +Pferdesprungstärke + +Zombie-Verstärkungen + +Max. Gesundheit + +NPC-Folgereichweite + +Rückstoßwiderstand + +Geschwindigkeit + +Angriffsschaden + Schärfe Bann @@ -4054,7 +4751,7 @@ Möchtest du das Mash-up-Paket oder Texturpaket jetzt installieren? Regeneriert 3{*ICON_SHANK_01*}. Entsteht, wenn man eine Kartoffel im Ofen brät. -Regeneriert 1{*ICON_SHANK_01*}, doch du kannst dich damit vergiften. Kann in einem Ofen gebraten oder auf Ackerland gepflanzt werden. +Regeneriert 1{*ICON_SHANK_01*}, doch du kannst dich damit vergiften. Regeneriert 3{*ICON_SHANK_01*}. Wird aus einer Karotte und Goldnuggets hergestellt. @@ -4452,7 +5149,7 @@ Alle Endertruhen in einer Welt sind verknüpft, sodass Gegenstände, die in eine Xbox 360 -Back +BACK Diese Option deaktiviert für diese Welt Erfolge und Bestenlisten-Aktualisierungen während des Spielens und wenn nach dem Speichern mit aktivierter Option erneut geladen wird. diff --git a/Minecraft.Client/Common/Media/es-ES/4J_strings.resx b/Minecraft.Client/Common/Media/es-ES/4J_strings.resx index ea428db6..4882271b 100644 --- a/Minecraft.Client/Common/Media/es-ES/4J_strings.resx +++ b/Minecraft.Client/Common/Media/es-ES/4J_strings.resx @@ -73,11 +73,11 @@ Perfil de jugador no en línea -Este juego ofrece características que requieren un perfil de jugador habilitado para Xbox Live, pero en estos momentos estás desconectado. +Este juego ofrece características que requieren un perfil de jugador habilitado para Xbox LIVE, pero en estos momentos estás desconectado. -Esta característica requiere un perfil de jugador con sesión iniciada en Xbox Live. +Esta característica requiere un perfil de jugador con sesión iniciada en Xbox LIVE. -Conectarse a Xbox Live +Conectarse a Xbox LIVE Seguir jugando sin conexión @@ -100,7 +100,7 @@ Desbloquear juego completo Esta es la versión de prueba de Minecraft. Si tuvieras el juego completo, ¡habrías conseguido un logro! -Desbloquea el juego completo para vivir toda la emoción de Minecraft y jugar con amigos de todo el mundo a través de Xbox Live. +Desbloquea el juego completo para vivir toda la emoción de Minecraft y jugar con amigos de todo el mundo a través de Xbox LIVE. ¿Te gustaría desbloquear el juego completo? Volverás al menú principal porque se ha producido un error al leer tu perfil. diff --git a/Minecraft.Client/Common/Media/es-ES/strings.resx b/Minecraft.Client/Common/Media/es-ES/strings.resx index 6fbeff35..1e07927c 100644 --- a/Minecraft.Client/Common/Media/es-ES/strings.resx +++ b/Minecraft.Client/Common/Media/es-ES/strings.resx @@ -11,7 +11,7 @@ Si estableces la dificultad del juego en Pacífico, tu salud se regenerará automáticamente. ¡Además, no saldrán monstruos por la noche! -Dale un hueso a un lobo para domesticarlo. Puedes hacer que se siente o que te siga. +Dale un hueso a un lobo para domarlo. Puedes hacer que se siente o que te siga. Para soltar objetos desde el menú de inventario, mueve el cursor fuera del menú y pulsa{*CONTROLLER_VK_A*}. @@ -87,7 +87,7 @@ Si colocas dos cofres juntos crearás un cofre grande. -Los lobos domesticados indican su salud con la posición de su cola. Dales de comer para curarlos. +Los lobos domados indican su salud con la posición de su cola. Dales de comer para curarlos. Cocina un cactus en un horno para obtener tinte verde. @@ -216,7 +216,7 @@ Los ingredientes originales de las pociones son :{*B*}{*B*} * {*T2*}Verruga del mundo inferior{*ETW*}{*B*} * {*T2*}Ojo de araña{*ETW*}{*B*} * {*T2*}Azúcar{*ETW*}{*B*} -* {*T2*}Lágrima de espectro{*ETW*}{*B*} +* {*T2*}Lágrima de Ghast{*ETW*}{*B*} * {*T2*}Polvo de llama{*ETW*}{*B*} * {*T2*}Crema de magma{*ETW*}{*B*} * {*T2*}Melón resplandeciente{*ETW*}{*B*} @@ -229,7 +229,7 @@ Tendrás que experimentar y combinar ingredientes para averiguar cuántas pocion {*T3*}CÓMO SE JUEGA: HECHIZOS{*ETW*}{*B*}{*B*} Los puntos de experiencia que se recogen cuando muere un enemigo, o cuando se extraen o se funden determinados bloques en un horno, se pueden usar para hechizar herramientas, armas, armaduras y libros.{*B*} -Cuando la espada, el arco, el hacha, el pico, la pala, la armadura o el libro se colocan en el espacio que está debajo del libro en la mesa de hechizos, los tres botones de la parte derecha del espacio mostrarán algunos hechizos y sus niveles de experiencia correspondientes.{*B*} +Cuando la espada, el arco, el hacha, el pico, la pala, la armadura o el libro se colocan en el espacio que está debajo del libro en la mesa de hechizos, los tres botones de la parte derecha del espacio mostrarán algunos hechizos y sus niveles de experiencia correspondientes.{*B*} Si no tienes suficientes niveles de experiencia para usarlos, el coste aparecerá en rojo; si no, aparecerá en verde.{*B*}{*B*} El hechizo real que se aplica se selecciona aleatoriamente en función del coste que aparece.{*B*}{*B*} Si la mesa de hechizos está rodeada de estanterías (hasta un máximo de 15), con un espacio de un bloque entre la estantería y la mesa de hechizos, la intensidad de los hechizos aumentará y aparecerán glifos arcanos en el libro de la mesa de hechizos.{*B*}{*B*} @@ -286,19 +286,40 @@ En modo de vuelo, puedes mantener pulsado{*CONTROLLER_ACTION_JUMP*} para subir y Al cargar o crear un mundo, pulsa el botón "Más opciones" para entrar en un menú donde podrás tener más control sobre tu juego.{*B*}{*B*} {*T2*}Jugador contra jugador{*ETW*}{*B*} - Si está habilitada, los jugadores pueden causar daño a otros jugadores. Esta opción solo afecta al modo Supervivencia.{*B*}{*B*} + Si está habilitado, los jugadores pueden causar daño a otros jugadores. Esta opción solo afecta al modo Supervivencia.{*B*}{*B*} {*T2*}Confiar en jugadores{*ETW*}{*B*} - Si está deshabilitada, los jugadores que se unen al juego tienen restringidas sus acciones. No pueden extraer ni usar objetos, colocar bloques, usar puertas ni interruptores, usar contenedores, atacar a jugadores o atacar a animales. Las opciones de un jugador determinado se pueden cambiar en el menú de juego.{*B*}{*B*} + Si está deshabilitado, los jugadores que se unen al juego tienen restringidas sus acciones. No pueden extraer ni usar objetos, colocar bloques, usar puertas ni interruptores, usar contenedores, atacar a jugadores o atacar a animales. Las opciones de un jugador determinado se pueden cambiar en el menú de juego.{*B*}{*B*} {*T2*}El fuego se propaga{*ETW*}{*B*} - Si está habilitada, el fuego se puede propagar a los bloques inflamables cercanos. Esta opción también se puede cambiar dentro del juego.{*B*}{*B*} + Si está habilitado, el fuego se puede propagar a los bloques inflamables cercanos. Esta opción también se puede cambiar dentro del juego.{*B*}{*B*} {*T2*}La dinamita explota{*ETW*}{*B*} - Si está habilitada, la dinamita explota cuando se detona. Esta opción también se puede cambiar dentro del juego.{*B*}{*B*} + Si está habilitado, la dinamita explota cuando se denota. Esta opción también se puede cambiar dentro del juego.{*B*}{*B*} {*T2*}Privilegios de host{*ETW*}{*B*} - Si está habilitada, el host puede activar su habilidad para volar, deshabilitar la extenuación y hacerse invisible desde el menú de juego. Esta opción deshabilita los logros y las actualizaciones del marcador de este mundo cuando se juega y si se vuelve a cargar después de guardarlo con esta opción activada.{*B*}{*B*} + Si está habilitado, el host puede activar su habilidad para volar, deshabilitar la extenuación y hacerse invisible desde el menú de juego. {*DISABLES_ACHIEVEMENTS*}{*B*}{*B*} + + {*T2*}Ciclo de luz diurna{*ETW*}{*B*} + Al desactivarse, la hora del día no cambiará.{*B*}{*B*} + + {*T2*}Mantener inventario{*ETW*}{*B*} + Al activarse, los jugadores mantendrán el inventario al morir.{*B*}{*B*} + + {*T2*}Generación de enemigos{*ETW*}{*B*} + Al desactivarse, los enemigos no se generarán de forma natural.{*B*}{*B*} + + {*T2*}Vandalismo de enemigos{*ETW*}{*B*} + Cuando se desactiva, impide que monstruos y animales cambien bloques (por ejemplo, las explosiones de Creepers no destruirán bloques y las ovejas no quitarán el césped) o recojan objetos.{*B*}{*B*} + + {*T2*}Botín de enemigos{*ETW*}{*B*} + Al desactivarse, los monstruos y animales no soltarán botín (por ejemplo, los Creepers no soltarán pólvora).{*B*}{*B*} + + {*T2*}Soltar casillas{*ETW*}{*B*} + Al desactivarse, los bloques no soltarán objetos cuando se destruyan (por ejemplo, los bloques de piedra no soltarán guijarros).{*B*}{*B*} + + {*T2*}Regeneración natural{*ETW*}{*B*} + Al desactivarse, los jugadores no regenerarán salud de forma natural.{*B*}{*B*} {*T1*}Opciones de generación del mundo{*ETW*}{*B*} Cuando se crea un mundo existen opciones adicionales.{*B*}{*B*} @@ -313,10 +334,10 @@ Cuando se crea un mundo existen opciones adicionales.{*B*}{*B*} Si está habilitada, se creará un cofre con objetos útiles cerca del punto de generación del jugador.{*B*}{*B*} {*T2*}Restablecer mundo inferior{*ETW*}{*B*} - Si está habilitada, el mundo inferior se regenará. Esta opción te será útil si tienes una partida guardada en la que no aparecían fortalezas del mundo inferior.{*B*}{*B*} + Si está habilitado, el mundo inferior se regenerará. Esta opción te será útil si tienes una partida guardada en la que no aparecían fortalezas del mundo inferior.{*B*}{*B*} {*T1*}Opciones del juego{*ETW*}{*B*} - Dentro del juego se pueden acceder a varias opciones pulsando BACK para mostrar el menú del juego.{*B*}{*B*} + Dentro del juego se pueden acceder a varias opciones pulsando {*BACK_BUTTON*} para mostrar el menú del juego.{*B*}{*B*} {*T2*}Opciones de host{*ETW*}{*B*} El host y cualquier jugador establecido como moderador pueden acceder al menú "Opciones de host". En este menú se puede habilitar y deshabilitar la propagación del fuego y la explosión de dinamita.{*B*}{*B*} @@ -325,42 +346,44 @@ Cuando se crea un mundo existen opciones adicionales.{*B*}{*B*} Para modificar los privilegios de un jugador, selecciona su nombre y pulsa{*CONTROLLER_VK_A*} para mostrar el menú de privilegios donde podrás usar las siguientes opciones.{*B*}{*B*} {*T2*}Puede construir y extraer{*ETW*}{*B*} - Esta opción solo está disponible cuando "Confiar en jugadores" está desactivada. Cuando esta opción está habilitada, el jugador puede interaccionar con el mundo de forma normal. Cuando está deshabilitada el jugador no puede colocar ni destruir bloques ni interaccionar con muchos objetos y bloques.{*B*}{*B*} + Esta opción solo está disponible cuando "Confiar en jugadores" está desactivado. Cuando esta opción está habilitada, el jugador puede interaccionar con el mundo de forma normal. Cuando está deshabilitado el jugador no puede colocar ni destruir bloques ni interaccionar con muchos objetos y bloques.{*B*}{*B*} {*T2*}Puede usar puertas e interruptores{*ETW*}{*B*} - Esta opción solo está disponible cuando "Confiar en jugadores" está desactivada. Cuando esta opción está deshabilitada, el jugador no puede usar puertas e interruptores.{*B*}{*B*} + Esta opción solo está disponible cuando "Confiar en jugadores" está desactivado. Cuando esta opción está deshabilitada, el jugador no puede usar puertas e interruptores.{*B*}{*B*} {*T2*}Puede abrir contenedores{*ETW*}{*B*} - Esta opción solo está disponible cuando "Confiar en jugadores" está desactivada. Cuando esta opción está deshabilitada, el jugador no puede abrir contenedores, como por ejemplo cofres.{*B*}{*B*} + Esta opción solo está disponible cuando "Confiar en jugadores" está desactivado. Cuando esta opción está deshabilitada, el jugador no puede abrir contenedores, como por ejemplo cofres.{*B*}{*B*} {*T2*}Puede atacar a jugadores{*ETW*}{*B*} - Esta opción solo está disponible cuando "Confiar en jugadores" está desactivada. Cuando esta opción está deshabilitada, el jugador no puede causar daños a otros jugadores.{*B*}{*B*} + Esta opción solo está disponible cuando "Confiar en jugadores" está desactivado. Cuando esta opción está deshabilitada, el jugador no puede causar daños a otros jugadores.{*B*}{*B*} {*T2*}Puede atacar a animales{*ETW*}{*B*} - Esta opción solo está disponible cuando "Confiar en jugadores" está desactivada. Cuando esta opción está deshabilitada, el jugador no puede causar daños a los animales.{*B*}{*B*} + Esta opción solo está disponible cuando "Confiar en jugadores" está desactivado. Cuando esta opción está deshabilitada, el jugador no puede causar daños a los animales.{*B*}{*B*} {*T2*}Moderador{*ETW*}{*B*} Cuando esta opción está habilitada, el jugador puede cambiar los privilegios de otros jugadores (excepto los del host) si "Confiar en jugadores" está desactivada, expulsar jugadores, y activar y desactivar "El fuego se propaga" y "La dinamita explota".{*B*}{*B*} {*T2*}Expulsar jugador{*ETW*}{*B*} - En el caso de jugadores que no estén en la misma Consola Xbox 360 que el host, si se selecciona esta opción se expulsará al jugador de la partida y a cualquier otro jugador en la misma Consola Xbox 360. El jugador no podrá volver a unirse al juego hasta que se reinicie.{*B*}{*B*} + {*KICK_PLAYER_DESCRIPTION*}{*B*}{*B*} {*T1*}Opciones de host{*ETW*}{*B*} Si "Privilegios de host" está habilitado, el host podrá modificar algunos privilegios para sí mismo. Para modificar los privilegios de un jugador, selecciona su nombre y pulsa{*CONTROLLER_VK_A*} para mostrar el menú de privilegios donde podrás usar las siguientes opciones.{*B*}{*B*} {*T2*}Puede volar{*ETW*}{*B*} Cuando esta opción está habilitada, el jugador puede volar. Esta opción solo es relevante en el modo Supervivencia, ya que el vuelo está habilitado para todos los jugadores en el modo Creativo.{*B*}{*B*} - - {*T2*}Desactivar extenuación{*ETW*}{*B*} + + {*T2*}Desactiva la extenuación{*ETW*}{*B*} Esta opción solo afecta al modo Supervivencia. Si se habilita, las actividades físicas (caminar/correr/saltar, etc.) no disminuyen la barra de comida. Sin embargo, si el jugador resulta herido, la barra de comida disminuye lentamente mientras el jugador se cura.{*B*}{*B*} - + {*T2*}Invisible{*ETW*}{*B*} Cuando esta opción está habilitada, el jugador es invisible para otros jugadores y es invulnerable.{*B*}{*B*} - - {*T2*}Puede teletransportarse{*ETW*}{*B*} + + {*T2*}Puede teletransportarse{*ETW*}{*B*} Permite al jugador desplazarse o desplazar a otros hasta la posición de otros jugadores en el mundo. +En el caso de jugadores que no estén en la misma {*PLATFORM_NAME*} que el host, si se selecciona esta opción se expulsará al jugador de la partida y a cualquier otro jugador en la misma {*PLATFORM_NAME*}. El jugador no podrá volver a unirse al juego hasta que se reinicie. + Página siguiente Página anterior @@ -424,62 +447,94 @@ para que puedan unirse a ti con facilidad. Novedades - -{*T3*}Cambios e incorporaciones{*ETW*}{*B*}{*B*} -- Se han añadido nuevos objetos: esmeralda, mena de esmeralda, bloque de esmeralda, cofre de Ender, gancho de cable trampa, manzana dorada hechizada, yunque, maceta, paredes de adoquines, paredes de adoquines musgosas, pintura de Wither, patata, patata asada, patata venenosa, zanahoria, zanahoria dorada, palo y zanahoria, -pastel de calabaza, poción de visión nocturna, poción de invisibilidad, cuarzo del mundo inferior, mena de cuarzo del mundo inferior, bloque de cuarzo, losa de cuarzo, escaleras de cuarzo, bloque de cuarzo cincelado, pilar de cuarzo, libro hechizado, alfombra.{*B*} -- Se han añadido nuevas recetas de arenisca lisa y arenisca cincelada.{*B*} -- Se han añadido nuevos enemigos: aldeanos zombis.{*B*} -- Se han añadido nuevas funciones de generación de terrenos: templos del desierto, aldeas del desierto, templos de la jungla.{*B*} -- Se ha añadido la función de comerciar con los aldeanos.{*B*} -- Se ha añadido la interfaz del yunque.{*B*} -- Se ha añadido la posibilidad de teñir las armaduras de cuero.{*B*} -- Se ha añadido la posibilidad de teñir los collares de los lobos.{*B*} -- Se puede montar sobre un cerdo y controlarlo con un palo y una zanahoria.{*B*} -- Actualización del contenido de los cofres de bonificación con más objetos.{*B*} -- Se ha modificado la colocación de medios bloques y otros bloques en medios bloques.{*B*} -- Se ha modificado la colocación de las escaleras y las losas del revés.{*B*} -- Se han añadido diferentes profesiones de aldeanos.{*B*} -- Los aldeanos generados a partir de un huevo generador desempeñarán profesiones al azar.{*B*} -- Se ha añadido la posibilidad de colocar troncos de lado.{*B*} -- Los hornos pueden usar herramientas de madera como combustible.{*B*} -- Los paneles de hielo y cristal se pueden recoger mediante herramientas hechizadas con el toque sedoso.{*B*} -- Los botones de madera y los platos de presión de madera se pueden activar mediante flechas.{*B*} -- Los enemigos del mundo inferior pueden acceder al mundo superior mediante portales.{*B*} -- Los Creepers y las arañas son agresivos con el último jugador que los toque.{*B*} -- Los enemigos en el modo Creativo vuelven a ser neutrales tras un breve periodo de tiempo.{*B*} -- Se ha eliminado el derribo durante el ahogamiento.{*B*} -- Las puertas muestran daños cuando los zombis las rompen.{*B*} -- El hielo se derrite en el mundo inferior.{*B*} -- Los calderos se llenan cuando están bajo la lluvia.{*B*} -- Los pistones tardan el doble en actualizarse.{*B*} -- Los cerdos dejan caer la silla de montar al morir (si llevan una).{*B*} -- Se ha modificado el color del cielo en El Fin.{*B*} -- Se puede colocar una cuerda (para los cables trampa).{*B*} -- La lluvia cae entre las hojas.{*B*} -- Se pueden colocar palancas en la parte inferior de los bloques.{*B*} -- La dinamita provoca daños variables en función del nivel de dificultad.{*B*} -- Se han modificado las recetas de libros.{*B*} -- Los barcos rompen los nenúfares y no al contrario.{*B*} -- Los cerdos dejan caer más chuletas.{*B*} -- La generación de limos es menor en los mundos superplanos.{*B*} -- Los Creepers causan daños variables en función del nivel de dificultad; más derribo.{*B*} -- Se ha corregido el error que hacía que los Finalizadores no abrieran sus mandíbulas.{*B*} -- Se ha añadido el teletransporte de jugadores (usando el menú {*BACK_BUTTON*} del juego).{*B*} -- Se han añadido nuevas opciones de host que permiten a los jugadores remotos volar, volverse invisibles e invulnerables.{*B*} -- Se han añadido nuevos tutoriales al mundo tutorial sobre nuevos objetos y funciones.{*B*} -- Se han actualizado las posiciones de los cofres de discos en el mundo tutorial.{*B*} +{*T3*}Cambios e incorporaciones{*ETW*}{*B*}{*B*} +- Nuevos objetos añadidos: arcilla endurecida, arcilla tintada, bloque de hulla, fardo de heno, raíl activador, bloque de piedra rojiza, sensor de luz diurna, soltador, embudo, vagoneta con embudo, vagoneta con dinamita, comparador de piedra rojiza, plato de presión por peso, faro, cofre trampa, cohete de fuegos artificiales, estrella de fuegos artificiales, estrella del mundo inferior, rienda, armadura para caballo, etiqueta de nombre y huevo generador de caballos.{*B*} +- Nuevos enemigos añadidos: Wither, esqueletos atrofiados, brujas, murciélagos, caballos, burros y mulas.{*B*} +- Nuevas funciones de generación de terrenos: chozas de bruja.{*B*} +- Nueva interfaz de faro.{*B*} +- Nueva interfaz de caballo.{*B*} +- Nueva interfaz de embudo.{*B*} +- Nueva interfaz de fuegos artificiales: podrás acceder a ella desde la mesa de creación cuando tengas los ingredientes necesarios para fabricar una estrella de fuegos artificiales o un cohete de fuegos artificiales.{*B*} +- Nuevo modo Aventura: en él solo podrás romper bloques con las herramientas correctas.{*B*} +- Nuevos efectos de sonido.{*B*} +- Los enemigos, los objetos y los proyectiles podrán pasar ahora a través de portales.{*B*} +- Ahora los repetidores se pueden bloquear proporcionándoles energía con otros repetidores.{*B*} +- Los zombis y esqueletos pueden generarse con diferentes armas y armaduras.{*B*} +- Nuevos mensajes de muerte.{*B*} +- Ponles nombre a tus enemigos con una etiqueta y cámbiales el nombre a los contenedores para que aparezca en el título del menú.{*B*} +- Ahora la carne de hueso no hará crecer todo a su máximo tamaño, sino que lo hará por fases.{*B*} +- La señal de piedra rojiza que describe el contenido de los cofres, puestos de destilado, dispensadores y tocadiscos se puede detectar con un comparador de piedra rojiza.{*B*} +- Los dispensadores se pueden orientar en cualquier dirección.{*B*} +- Comerse una manzana dorada le da al jugador salud de "absorción" extra durante un corto periodo de tiempo.{*B*} +- Cuanto más tiempo permanezcas en una zona, más fuertes serán los monstruos que se generen en dicha zona.{*B*} {*ETB*}¡Hola otra vez! Quizá no te hayas dado cuenta, pero hemos actualizado Minecraft.{*B*}{*B*} -Hay un montón de novedades con las que lo pasarás en grande con tus amigos. A continuación te detallamos las más destacadas:{*B*}{*B*} -{*T1*}Nuevos objetos{*ETB*}: esmeralda, mena de esmeralda, bloque de esmeralda, cofre de Ender, gancho de cable trampa, manzana dorada hechizada, yunque, maceta, paredes de adoquines, paredes de adoquines musgosas, pintura de Wither, patata, patata asada, patata venenosa, zanahoria, zanahoria dorada, palo y zanahoria, -Pastel de calabaza, poción de visión nocturna, poción de invisibilidad, cuarzo del mundo inferior, mena de cuarzo del mundo inferior, bloque de cuarzo, losa de cuarzo, escaleras de cuarzo, bloque de cuarzo cincelado, pilar de cuarzo,, libro hechizado, alfombra.{*B*}{*B*} - {*T1*}Nuevos enemigos{*ETB*}: aldeanos zombis.{*B*}{*B*} -{*T1*}Nuevas funciones{*ETB*}: ¡comercia con los aldeanos, repara o hechiza armas y herramientas con el yunque, guarda objetos en un cofre de Ender o controla a un cerdo mientras montas sobre él usando un palo y una zanahoria!{*B*}{*B*} -{*T1*}Nuevos minitutoriales{*ETB*} – ¡Aprende a utilizar las nuevas funciones con el mundo tutorial!{*B*}{*B*} -{*T1*}Nuevos "huevos de Pascua"{*ETB*} – Hemos cambiado de sitio todos los discos secretos del mundo tutorial. ¡Intenta encontrarlos de nuevo!{*B*}{*B*} - +Hay un montón de novedades con las que lo pasarás en grande con tus amigos. A continuación te detallamos las más destacadas:{*B*}{*B*} +{*T1*}Nuevos objetos{*ETB*}: arcilla endurecida, arcilla tintada, bloque de hulla, fardo de heno, raíl activador, bloque de piedra rojiza, sensor de luz diurna, soltador, embudo, vagoneta con embudo, vagoneta con dinamita, comparador de piedra rojiza, plato de presión por peso, faro, cofre trampa, cohete de fuegos artificiales, estrella de fuegos artificiales, estrella del mundo inferior, rienda, armadura para caballo, etiqueta de nombre y huevo generador de caballos.{*B*}{*B*} +{*T1*}Nuevos enemigos{*ETB*}: Wither, esqueletos atrofiados, brujas, murciélagos, caballos, burros y mulas.{*B*}{*B*} +{*T1*}Nuevas funciones{*ETB*}: doma caballos y móntalos, fabrica fuegos artificiales y lánzalos, ponle nombre a los animales y a los monstruos con etiquetas, crea circuitos de piedra rojiza más avanzados y, además, descubre las nuevas opciones de host que te ayudarán a controlar lo que tus invitados pueden hacer en tu mundo.{*B*}{*B*} +{*T1*}Nuevos mundo tutorial{*ETB*} – ¡Aprende a utilizar las antiguas y las nuevas funciones con el mundo tutorial! ¡A ver si puedes encontrar todos los discos secretos ocultos en el mundo!{*B*}{*B*} + + +Caballos + +{*T3*}CÓMO SE JUEGA: CABALLOS{*ETW*}{*B*}{*B*} +Los caballos y los burros se suelen encontrar en las llanuras abiertas. Las mulas son las crías de un burro y un caballo, pero no son fértiles.{*B*} +Todos los caballos, burros y mulas adultos se pueden montar. Sin embargo, solo los caballos pueden llevar armadura, y solo las mulas y los burros pueden equiparse con alforjas para llevar objetos.{*B*}{*B*} +Los caballos, burros y mulas deben domarse antes de poder usarse. Un caballo se doma intentando montarlo y logrando mantenerse sobre él mientras trata de tirarte.{*B*} +Cuando estén domados, aparecerán corazones de amor a su alrededor y ya no intentarán tirarte. Para dirigir un caballo, debes equiparlo con una silla de montar.{*B*}{*B*} +Puedes comprar sillas de montar a los aldeanos o encontrarlas en cofres ocultos por el mundo.{*B*} +Puedes poner alforjas a los burros y mulas domados; solo tienes que colocarles un cofre. Puedes acceder a estas alforjas mientras montas o acechas.{*B*}{*B*} +Los caballos y los burros (pero no las mulas) pueden cruzarse como los demás animales utilizando manzanas doradas o zanahorias doradas.{*B*} +Los potros se convertirán en caballos adultos con el tiempo, aunque alimentarlos con trigo o heno acelerará el proceso.{*B*} + + +Faros + +{*T3*}CÓMO SE JUEGA: FAROS{*ETW*}{*B*}{*B*} +Los faros activos proyectan un rayo de luz brillante hacia el cielo y otorgan poderes a los jugadores cercanos.{*B*} +Se crean con cristal, obsidiana y estrellas del mundo inferior, que se pueden obtener derrotando al Wither.{*B*}{*B*} +Los faros deben situarse de modo que queden al sol durante el día. Los faros deben colocarse en pirámides de hierro, oro, esmeralda o diamante.{*B*} +El material sobre el que se sitúe el faro no tiene ningún efecto sobre el poder del mismo.{*B*}{*B*} +En el menú de faro puedes elegir un poder principal para este. Podrás elegir entre más poderes cuantas más plantas tenga la pirámide.{*B*} +Un faro sobre una pirámide de al menos cuatro plantas también ofrece la posibilidad de o bien tener el poder secundario Regeneración, o bien tener un poder principal más fuerte.{*B*}{*B*} +Para establecer los poderes del faro, debes sacrificar un lingote de esmeralda, diamante, oro o hierro en el espacio de pago.{*B*} +Una vez establecidos, los poderes emanarán del faro indefinidamente.{*B*} + + +Fuegos artificiales + +{*T3*}CÓMO SE JUEGA: FUEGOS ARTIFICIALES{*ETW*}{*B*}{*B*} +Los fuegos artificiales son objetos decorativos que se pueden lanzar manualmente o con dispensadores. Se pueden crear usando papel, pólvora y, opcionalmente, una cantidad específica de estrellas de fuegos artificiales.{*B*} +Se pueden personalizar el color, el desvanecimiento, la forma, el tamaño y los efectos (como estelas y brillos) de las estrellas de fuegos artificiales si se les incluye ingredientes adicionales durante la creación.{*B*}{*B*} +Para crear un fuego artificial, coloca pólvora y papel en el recuadro de creación de 3x3 que se ve en tu inventario.{*B*} +También puedes colocar varias estrellas de fuegos artificiales en el recuadro de creación para agregarlas a los fuegos artificiales.{*B*} +Cuanta más pólvora utilices durante la creación, más ascenderá la estrella de fuegos artificiales antes de explotar.{*B*}{*B*} +Luego recoge el fuego artificial que has creado del espacio de producción.{*B*}{*B*} +Las estrellas de fuegos artificiales se pueden crear con pólvora y tinte.{*B*} + - El tinte determinará el color de la estrella al explotar.{*B*} + - La forma de la estrella se puede determinar añadiéndole descargas de fuego, pepitas de oro, plumas o cabeza de enemigos.{*B*} + - Se puede añadir una estela o un brillo usando diamantes o polvo de piedra brillante.{*B*}{*B*} +Cuando hayas creado un fuego artificial, puedes determinar el color de desvanecimiento de la estrella con tinte. + + +Embudos + +{*T3*}CÓMO SE JUEGA: EMBUDOS{*ETW*}{*B*}{*B*} +Los embudos se utilizan para insertar o quitar objetos de contenedores y para recoger de forma automática los objetos que se hayan lanzado en su interior.{*B*} +Pueden afectar a puestos de destilado, cofres, dispensadores, soltadores, vagonetas con cofres, vagonetas con embudos y otros embudos.{*B*}{*B*} +Los embudos intentarán absorber sin cesar objetos de un contenedor apto que se coloque sobre ellos. También tratarán de insertar objetos almacenados en un contenedor de salida.{*B*} +Si un embudo funciona con piedra rojiza, se volverá inactivo y dejará tanto de absorber como de insertar objetos.{*B*}{*B*} +Un embudo apunta en la dirección en la que intenta soltar objetos. Para que un embudo apunte a cierto bloque, colócalo contra dicho bloque mientras acechas.{*B*} + + +Soltadores + +{*T3*}CÓMO SE JUEGA: SOLTADORES{*ETW*}{*B*}{*B*} +Cuando se encuentren junto a una piedra rojiza, los soltadores dejarán caer un objeto aleatorio. Usa {*CONTROLLER_ACTION_USE*} para abrir el soltador y cargarlo con objetos de tu inventario.{*B*} +Si el soltador se encuentra frente a un cofre o a otro tipo de contenedor, el objeto caerá en dicho cofre o contenedor. Se pueden construir largas cadenas de soltadores para transportar objetos a grandes distancias. Para que esto funcione, se los tiene que activar y desactivar alternativamente. + Causa más daño que a mano. @@ -606,10 +661,36 @@ Los colores de la cama siempre son los mismos, independientemente del color de l Cuando se porta, crea una imagen del área explorada. Se puede usar para buscar rutas. +Al usarse, se convierte en un mapa de la parte del mundo en la que te encuentras y se llena conforme lo exploras. + Permite ataques a distancia con flechas. Se usa como munición para arcos. +La suelta el Wither y se utiliza para crear faros. + +Cuando se activan, crean coloridas explosiones. El color, efecto, forma y desaparición vienen determinados por la estrella de fuegos artificiales que se utilice al crear unos fuegos artificiales. + +Se utiliza para determinar el color, efecto y forma de unos fuegos artificiales. + +Se utiliza en los circuitos de piedra rojiza para mantener, comparar o sustraer fuerza de señal, o para medir el estado de ciertos bloques. + +Es un tipo de vagoneta que funciona como un bloque de dinamita móvil. + +Es un bloque que emite una señal de piedra rojiza en función de la luz solar (o la falta de la misma). + +Es un tipo especial de vagoneta que funciona de forma similar a un embudo. Recogerá objetos que estén sueltos en las vías y de los contenedores de encima. + +Un tipo especial de armadura con la que se puede equipar un caballo. Proporciona 5 de armadura. + +Un tipo especial de armadura con la que se puede equipar un caballo. Proporciona 7 de armadura. + +Un tipo especial de armadura con la que se puede equipar un caballo. Proporciona 11 de armadura. + +Se utiliza para atar enemigos al jugador o a postes de valla. + +Se utiliza para nombrar enemigos del mundo. + Restablece 2,5{*ICON_SHANK_01*}. Restablece 1{*ICON_SHANK_01*}. Se puede usar 6 veces. @@ -626,7 +707,7 @@ Los colores de la cama siempre son los mismos, independientemente del color de l Restablece 1.5{*ICON_SHANK_01*}, o se puede cocinar en el horno. -Restablece {*ICON_SHANK_01*}. Se crea cocinando ternera cruda en el horno. +Restablece 4{*ICON_SHANK_01*}. Se crea cocinando ternera cruda en el horno. Restablece 1.5{*ICON_SHANK_01*}, o se puede cocinar en el horno. @@ -667,7 +748,7 @@ de nivel bajo. Cuando se activa, acelera las vagonetas que pasan por encima. Si no está activado, las vagonetas se detendrán. -Funciona como un plato de presión, envía una señal de piedra rojiza cuando se activa, pero solo una vagoneta puede hacerlo. +Funciona como un plato de presión, ya que envía una señal de piedra rojiza cuando se activa, pero solo una vagoneta puede hacer que se active. Se usa para transportarte a ti, a un animal o a un monstruo por raíles. @@ -731,7 +812,7 @@ de tinta en vez de 3). Se usa para crear libros y mapas. -Se usa para crear una estantería o para hechizar libros. +Se usa para crear estanterías o libros hechizados. Permite crear hechizos más potentes cuando se coloca alrededor de una mesa de hechizos. @@ -881,7 +962,7 @@ de tinta en vez de 3). Se usa para destilar pociones y para localizar fortalezas. Lo sueltan las llamas, que se suelen encontrar en las fortalezas del mundo inferior o cerca. -Se usa para destilar pociones. Lo sueltan los espectros cuando mueren. +Se usa para destilar pociones. Lo sueltan los Ghast cuando mueren. Lo sueltan los porqueros zombis cuando mueren. Los porqueros zombis se encuentran en el mundo inferior. Se usa como ingrediente para destilar pociones. @@ -911,7 +992,7 @@ de tinta en vez de 3). Flota en el agua y se puede caminar sobre él. -Se usa para construir fortalezas del mundo inferior. Inmume a las bolas de fuego del espectro. +Se usa para construir fortalezas del mundo inferior. Inmume a las bolas de fuego del Ghast. Se usa en las fortalezas del mundo inferior. @@ -947,100 +1028,158 @@ de tinta en vez de 3). Las cabezas de enemigos pueden colocarse como decoración o llevarse como una máscara en el espacio de casco. +Se utiliza para ejecutar comandos. + +Proyecta un rayo de luz hacia el cielo y puede causar efectos de estado en los jugadores cercanos. + +Almacena bloques y objetos en su interior. Coloca dos cofres uno junto a otro para crear un cofre más grande con el doble de capacidad. El cofre trampa también crea una descarga de piedra rojiza cuando se abre. + +Proporciona una descarga de piedra rojiza. La descarga será más fuerte si hay más objetos en el plato. + +Proporciona una descarga de piedra rojiza. La descarga será más fuerte si hay más objetos en el plato. Requiere más peso que el plato ligero. + +Se usa como fuente de energía de piedra rojiza. Se puede volver a transformar en piedra rojiza. + +Se utiliza para coger objetos o transferir objetos dentro o fuera de contenedores. + +Un tipo de raíl que puede activar o desactivar vagonetas con embudos y activar vagonetas con dinamita. + +Se usa para sujetar y soltar objetos, o para empujarlos dentro de otro contenedor cuando recibe una descarga de piedra rojiza. + +Bloques coloridos que se crean tiñendo arcilla endurecida. + +Se le puede dar de comer a los caballos, burros o mulas para curar hasta 10 corazones. Acelera el crecimiento de los potros. + +Se crea al fundir arcilla en un horno. + +Se crea a partir de cristal y un tinte. + +Se crea a partir de vidrio tintado. + +Una manera de almacenar hulla de forma compacta. Se puede usar como combustible en un horno. + Calamar - + Suelta bolsas de tinta cuando muere. - + Vaca - + Suelta cuero cuando muere. Se puede ordeñar con un cubo. - + Oveja - + Suelta lana cuando se esquila (si aún no ha sido esquilada). Se puede teñir para que su lana sea de diferente color. - + Gallina - + Suelta plumas cuando muere y pone huevos al azar. - + Cerdo - + Suelta chuletas de cerdo cuando muere. Se puede montar con una silla. - + Lobo - + Es dócil hasta que lo atacan, ya que devolverá el ataque. Se puede domar con huesos, lo que ocasionará que el lobo te siga a todas partes y ataque a cualquier cosa que te ataque a ti. - + Creeper - + ¡Explota si te acercas demasiado! - + Esqueleto - + Te dispara flechas. Suelta flechas cuando muere. - + Araña - + Te ataca cuando está cerca. Puede escalar muros. Suelta cuerda cuando muere. - + Zombi - + Te ataca cuando está cerca. - + Porquero zombi - + En principio es manso, pero si atacas a uno atacará en grupo. - + Ghast - + Te dispara bolas de fuego que explotan al hacer contacto. - + Limo - -Escupe limos más pequeños cuando recibe daños. - + +Se divide en Limos más pequeños cuando recibe daños. + Enderman - + Te ataca si lo miras. También puede mover bloques de sitio. - + Pez plateado - + Atrae a los peces plateados ocultos cercanos al atacarlo. Se oculta en bloques de piedra. - + Araña de las cuevas - + Tiene una picadura venenosa. - + Champiñaca - + Crea estofado de champiñón si se usa en un cuenco. Suelta champiñones y se convierte en una vaca normal cuando se esquila. - + Gólem de nieve - + Los jugadores pueden crear el gólem de nieve con bloques de nieve y una calabaza. Lanza bolas de nieve a los enemigos de su creador. - + Dragón de Ender - + Un dragón negro y grande que se encuentra en El Fin. - + Llama - + Son enemigos que se encuentran en el mundo inferior, principalmente dentro de las fortalezas del mundo inferior. Sueltan barras de llama cuando mueren. - + Cubo de magma - + Se encuentran en el mundo inferior. Son parecidos a los limos y se fragmentan en versiones más pequeñas cuando mueren. - + Aldeano - + Ocelote - -Se encuentran en junglas. Pueden domesticarse dándoles de comer pescado crudo. Tienes que dejar se te acerque el ocelote, aunque ten cuidado: cualquier movimiento repentino le espantará. - + +Se encuentran en junglas. Pueden domarse dándoles de comer pescado crudo. Tienes que dejar se te acerque el ocelote, aunque ten cuidado: cualquier movimiento repentino le espantará. + Gólem de hierro - + Aparecen en aldeas para protegerlas y pueden crearse usando bloques de hierro y calabazas. - + +Murciélago + +Estas criaturas voladoras se encuentran en cuevas y otros grandes espacios cerrados. + +Bruja + +Estos enemigos pueden encontrarse en pantanos y atacan lanzando pociones. Si las matas, sueltan pociones. + +Caballo + +Estos animales se pueden domar y montar. + +Burro + +Estos animales se pueden domar y montar. Es posible colocarles un cofre. + +Mula + +Nace del cruce de un caballo y un burro. Estos animales se pueden domar y, después, montar y usar para transportar cofres. + +Caballo zombi + +Caballo esqueleto + +Wither + +Se crea a partir de calaveras atrofiadas y arena de almas. Dispara calaveras explosivas. + Explosives Animator Concept Artist @@ -1203,7 +1342,7 @@ de tinta en vez de 3). Casco de malla -Peto de malla +Coraza de malla Mallas de malla @@ -1319,7 +1458,7 @@ de tinta en vez de 3). Libro -Repugnante +Bola de limo Vagoneta con cofre @@ -1387,6 +1526,8 @@ de tinta en vez de 3). Mapa +Mapa vacío + Disco: "13" Disco: "gato" @@ -1433,7 +1574,7 @@ de tinta en vez de 3). Barra de llama -Lágrima de espectro +Lágrima de Ghast Pepita de oro @@ -1489,6 +1630,28 @@ de tinta en vez de 3). Cabeza de Creeper +Estrella del mundo inferior + +Cohete de fuegos artificiales + +Estrella de fuegos artificiales + +Comparador de piedra rojiza + +Vagoneta con dinamita + +Vagoneta con embudo + +Armadura para caballo de hierro + +Armadura para caballo de oro + +Armadura para caballo de diamante + +Rienda + +Etiqueta de nombre + Piedra Bloque de hierba @@ -1505,6 +1668,8 @@ de tinta en vez de 3). Tablones de la jungla +Tablones (de cualquier tipo) + Arbolillo Arbolillo de roble @@ -1765,7 +1930,7 @@ de tinta en vez de 3). Ladrillos de piedra musgosa -Ladrillos de piedra requebrajada +Ladrillos de piedra resquebrajada Ladrillos de piedra cincelados @@ -1841,6 +2006,190 @@ de tinta en vez de 3). Calavera +Bloque de comando + +Faro + +Cofre trampa + +Plato de presión por peso (ligero) + +Plato de presión por peso (pesado) + +Comparador de piedra rojiza + +Sensor de luz diurna + +Bloque de piedra rojiza + +Embudo + +Raíl activador + +Soltador + +Arcilla tintada + +Fardo de heno + +Arcilla endurecida + +Bloque de hulla + +Arcilla tintada negra + +Arcilla tintada roja + +Arcilla tintada verde + +Arcilla tintada marrón + +Arcilla tintada azul + +Arcilla tintada púrpura + +Arcilla tintada cian + +Arcilla tintada gris claro + +Arcilla tintada gris + +Arcilla tintada rosa + +Arcilla tintada lima + +Arcilla tintada amarilla + +Arcilla tintada azul claro + +Arcilla tintada magenta + +Arcilla tintada naranja + +Arcilla tintada blanca + +Vidrio tintado + +Vidrio tintado negro + +Vidrio tintado rojo + +Vidrio tintado verde + +Vidrio tintado marrón + +Vidrio tintado azul + +Vidrio tintado púrpura + +Vidrio tintado cian + +Vidrio tintado gris claro + +Vidrio tintado gris + +Vidrio tintado rosa + +Vidrio tintado lima + +Vidrio tintado amarillo + +Vidrio tintado azul claro + +Vidrio tintado magenta + +Vidrio tintado naranja + +Vidrio tintado blanco + +Panel de vidrio tintado + +Panel de vidrio tintado negro + +Panel de vidrio tintado rojo + +Panel de vidrio tintado verde + +Panel de vidrio tintado marrón + +Panel de vidrio tintado azul + +Panel de vidrio tintado púrpura + +Panel de vidrio tintado cian + +Panel de vidrio tintado gris claro + +Panel de vidrio tintado gris + +Panel de vidrio tintado rosa + +Panel de vidrio tintado lima + +Panel de vidrio tintado amarillo + +Panel de vidrio tintado azul claro + +Panel de vidrio tintado magenta + +Panel de vidrio tintado naranja + +Panel de vidrio tintado blanco + +Bola pequeña + +Bola grande + +Forma de estrella + +Forma de Creeper + +Explosión + +Forma desconocida + +Negros + +Rojos + +Verdes + +Marrones + +Azules + +Púrpuras + +Cian + +Gris claro + +Grises + +Rosas + +Lima + +Amarillos + +Azul claro + +Magenta + +Naranjas + +Blancos + +Personalizados + +Desaparición en + +Destello + +Rastro + +Duración del vuelo: +  Controles actuales Diseño @@ -2018,8 +2367,7 @@ Pulsa{*CONTROLLER_VK_A*} para continuar el tutorial.{*B*} Este es tu inventario. Muestra los objetos que llevas en la mano y los demás objetos que portas. Aquí también aparece tu armadura. - - + {*B*} Pulsa{*CONTROLLER_VK_A*} para continuar.{*B*} Pulsa{*CONTROLLER_VK_B*} si ya sabes cómo usar el inventario. @@ -2040,7 +2388,7 @@ Pulsa{*CONTROLLER_VK_A*} para continuar el tutorial.{*B*} - Si quieres obtener más información sobre un objeto, mueve el foco sobre él y pulsa{*CONTROLLER_VK_RT*} . + Si quieres obtener más información sobre un objeto, mueve el foco sobre él y pulsa{*CONTROLLER_ACTION_MENU_PAGEDOWN*} . @@ -2074,7 +2422,7 @@ Pulsa{*CONTROLLER_VK_A*} para continuar el tutorial.{*B*} - Si quieres obtener más información sobre un objeto, mueve el foco sobre él y pulsa{*CONTROLLER_VK_RT*} . + Si quieres obtener más información sobre un objeto, mueve el foco sobre él y pulsa{*CONTROLLER_ACTION_MENU_PAGEDOWN*} . @@ -2540,7 +2888,7 @@ En el modo de vuelo, mantén pulsado{*CONTROLLER_ACTION_JUMP*} para moverte haci Algunos animales te seguirán si tienes su comida en la mano. Así te será más fácil agrupar animales para hacer que se reproduzcan.{*ICON*}296{*/ICON*} - Los lobos salvajes se pueden domesticar dándoles huesos. Una vez domesticados, aparecerán corazones de amor a su alrededor. Los lobos mansos seguirán al jugador y lo defenderán si no reciben la orden de quedarse sentados. + Los lobos salvajes se pueden domar dándoles huesos. Una vez domados, aparecerán corazones de amor a su alrededor. Los lobos mansos seguirán al jugador y lo defenderán si no reciben la orden de quedarse sentados. Has completado el tutorial de reproducción de animales. @@ -2620,6 +2968,211 @@ En el modo de vuelo, mantén pulsado{*CONTROLLER_ACTION_JUMP*} para moverte haci Pulsa{*CONTROLLER_VK_B*} si ya tienes información sobre la barra de comida y cómo comer. + + Esta es la interfaz del inventario equino. + + + + {*B*}Pulsa{*CONTROLLER_VK_A*} para continuar. + {*B*}Pulsa {*CONTROLLER_VK_B*} si ya sabes cómo usar el inventario equino. + + + + El inventario equino te permite transferir o equipar con objetos tu caballo, burro o mula. + + + + Ensilla tu caballo colocando una silla de montar en el espacio correspondiente. Puedes poner armaduras a los caballos; solo tienes que colocar la armadura para caballo en el espacio correspondiente. + + + + También puedes transferir objetos entre tu propio inventario y las alforjas que llevan los burros y mulas desde este menú. + + +Has encontrado un caballo. + +Has encontrado un burro. + +Has encontrado una mula. + + + {*B*}Pulsa {*CONTROLLER_VK_A*} para obtener más información sobre los caballos, los burros y las mulas. + {*B*}Pulsa {*CONTROLLER_VK_B*} si ya sabes cómo funcionan los caballos, los burros y las mulas. + + + + Los caballos y los burros se suelen encontrar en las llanuras abiertas. Las mulas se pueden criar a partir de un burro y un caballo, pero no son fértiles. + + + + Todos los caballos, burros y mulas adultos se pueden montar. Sin embargo, solo los caballos pueden llevar armadura, y solo las mulas y los burros pueden equiparse con alforjas para llevar objetos. + + + + Los caballos, burros y mulas deben domarse antes de poder usarse. Un caballo se doma intentando montarlo y logrando mantenerse sobre él mientras trata de tirarte. + + + + Cuando estén domados, aparecerán corazones de amor a su alrededor y ya no intentarán tirarte. + + + + Ahora intenta montar este caballo. Usa {*CONTROLLER_ACTION_USE*} sin objetos ni herramientas en las manos para montarlo. + + + + Para dirigir un caballo, debe estar equipado antes con una silla de montar que se puede comprar a los aldeanos o encontrar en cofres ocultos por el mundo. + + + + Puedes poner alforjas a los burros y mulas domados; solo tienes que colocarles un cofre. Puedes acceder a estas alforjas mientras montas o acechas. + + + + Los caballos y los burros (pero no las mulas) pueden cruzarse como los demás animales utilizando manzanas doradas o zanahorias doradas. Los potros se convertirán en caballos adultos con el tiempo, aunque alimentarlos con trigo o heno acelerará el proceso. + + + + Aquí puedes intentar domar los caballos y burros, y hay sillas de montar, armaduras de caballo y otros objetos útiles para caballos en los cofres de la zona. + + + + Esta es la interfaz de faro, que puedes utilizar para elegir los poderes que otorgará tu faro. + + + + {*B*}Pulsa{*CONTROLLER_VK_A*} para continuar. + {*B*}Pulsa {*CONTROLLER_VK_B*} si ya sabes cómo usar la interfaz de faro. + + + + En el menú de faro puedes elegir un poder principal para este. Podrás elegir entre más poderes cuantas más plantas tenga la pirámide. + + + + Un faro sobre una pirámide de al menos cuatro plantas también ofrece la posibilidad de o bien tener el poder secundario Regeneración, o bien tener un poder principal más fuerte. + + + + Para establecer los poderes del faro, debes sacrificar un lingote de esmeralda, diamante, oro o hierro en el espacio de pago. Una vez establecidos, los poderes emanarán del faro indefinidamente. + + +En lo alto de esta pirámide hay un faro inactivo. + + + {*B*}Pulsa {*CONTROLLER_VK_A*} para obtener más información sobre los faros. + {*B*}Pulsa {*CONTROLLER_VK_B*} si ya sabes cómo funcionan los faros. + + + + Los faros activos proyectan un rayo de luz brillante hacia el cielo y otorgan poderes a los jugadores cercanos. Se crean con cristal, obsidiana y estrellas del mundo inferior, que se pueden obtener derrotando al Wither. + + + + Los faros deben situarse de modo que queden al sol durante el día. Los faros deben colocarse en pirámides de hierro, oro, esmeralda o diamante. Sin embargo, el material sobre el que se sitúe el faro no tiene ningún efecto sobre el poder del mismo. + + + + Intenta utilizar el faro para establecer los poderes que otorga; puedes pagar con los lingotes de hierro que se te han proporcionado. + + +Esta sala contiene embudos + + + {*B*}Pulsa {*CONTROLLER_VK_A*} para obtener más información sobre los embudos. + {*B*}Pulsa {*CONTROLLER_VK_B*} si ya sabes cómo funcionan los embudos. + + + + Los embudos se utilizan para insertar o quitar objetos de contenedores y para recoger de forma automática los objetos que se hayan lanzado en su interior. + + + + Pueden afectar a puestos de destilado, cofres, dispensadores, soltadores, vagonetas con cofres, vagonetas con embudos y otros embudos. + + + + Los embudos intentarán absorber sin cesar objetos de un contenedor apto que se coloque sobre ellos. También tratarán de insertar objetos almacenados en un contenedor de salida. + + + + Sin embargo, si un embudo funciona con piedra rojiza, se volverá inactivo y dejará tanto de absorber como de insertar objetos. + + + + Un embudo apunta en la dirección en la que intenta soltar objetos. Para que un embudo apunte a cierto bloque, colócalo contra dicho bloque mientras acechas. + + + + Hay varias configuraciones útiles de embudo que ver y probar en esta sala. + + + + Esta es la interfaz de fuegos artificiales, que puedes utilizar para fabricar fuegos artificiales y estrellas de fuegos artificiales. + + + + {*B*}Pulsa{*CONTROLLER_VK_A*} para continuar. + {*B*}Pulsa{*CONTROLLER_VK_B*} si ya sabes cómo usar la interfaz de fuegos artificiales. + + + + Para crear un fuego artificial, coloca pólvora y papel en el recuadro de creación de 3x3 que se ve en tu inventario. + + + + También puedes colocar varias estrellas de fuegos artificiales en el recuadro de creación para agregarlas a los fuegos artificiales. + + + + Cuanta más pólvora utilices durante la creación, más ascenderá la estrella de fuegos artificiales antes de explotar. + + + + Luego recoge el fuego artificial que has creado del espacio de producción si quieres usarlo. + + + + Las estrellas de fuegos artificiales se pueden crear con pólvora y tinte. + + + + El tinte determinará el color de la estrella al explotar. + + + + La forma de la estrella se puede determinar añadiéndole descargas de fuego, pepitas de oro, plumas o cabeza de enemigos. + + + + Se puede añadir una estela o un brillo usando diamantes o polvo de piedra brillante. + + + + Cuando hayas creado un fuego artificial, puedes determinar el color de desvanecimiento de la estrella con tinte. + + + + ¡Dentro del cofre hay varios objetos que puedes usar para crear FUEGOS ARTIFICIALES! + + + + {*B*}Pulsa {*CONTROLLER_VK_A*} para obtener más información sobre los fuegos artificiales. + {*B*}Pulsa {*CONTROLLER_VK_B*} si ya sabes cómo funcionan los fuegos artificiales. + + + + Los fuegos artificiales son objetos decorativos que se pueden lanzar manualmente o con dispensadores. Se pueden crear usando papel, pólvora y, opcionalmente, una cantidad específica de estrellas de fuegos artificiales. + + + + Se pueden personalizar el color, el desvanecimiento, la forma, el tamaño y los efectos (como estelas y brillos) de las estrellas de fuegos artificiales si se les incluye ingredientes adicionales durante la creación. + + + + Prueba a crear fuegos artificiales en la mesa de creación usando los ingredientes que desees de los cofres. + +  Seleccionar Usar @@ -2708,7 +3261,7 @@ En el modo de vuelo, mantén pulsado{*CONTROLLER_ACTION_JUMP*} para moverte haci Alimentar -Domesticar +Domar Curar @@ -2816,7 +3369,7 @@ En el modo de vuelo, mantén pulsado{*CONTROLLER_ACTION_JUMP*} para moverte haci Equipar -Retirar +Tensar Soltar @@ -2840,8 +3393,24 @@ En el modo de vuelo, mantén pulsado{*CONTROLLER_ACTION_JUMP*} para moverte haci Eliminar todos los espacios -Subir partida guardada para Xbox One +Cargar partida guardada para Xbox One +Montar + +Desmontar + +Colocar cofre + +Lanzar + +Atar + +Soltar + +Colocar + +Nombre + Aceptar Cancelar @@ -3152,6 +3721,20 @@ Ve a la Interfaz para seleccionar este tema. Dispensador +Caballo + +Soltador + +Embudo + +Faro + +Poder principal + +Poder secundario + +Vagoneta + No existen ofertas de descarga de contenido de este tipo disponibles para este título en este momento. %s se ha unido al juego. @@ -3311,10 +3894,14 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. Modo juego: Creativo +Modo juego: Aventura + Supervivencia Creativo +Aventura + En modo Supervivencia En modo Creativo @@ -3335,6 +3922,8 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. Superplano +Introduce una semilla para volver a generar el mismo terreno. Déjalo vacío para un mundo aleatorio. + Si está habilitado, el juego será un juego en línea. Si está habilitado, solo los jugadores invitados pueden unirse. @@ -3359,6 +3948,20 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. Si está habilitado, se creará un cofre con objetos útiles cerca del punto de generación del jugador. +Cuando se desactiva, impide que monstruos y animales cambien bloques (por ejemplo, las explosiones de Creepers no destruirán bloques y las ovejas no quitarán el césped) o recojan objetos. + +Al activarse, los jugadores mantendrán el inventario al morir. + +Al desactivarse, los enemigos no se generarán de forma natural. + +Al desactivarse, los monstruos y animales no soltarán botín (por ejemplo, los Creepers no soltarán pólvora). + +Al desactivarse, los bloques no soltarán objetos cuando se destruyan (por ejemplo, los bloques de piedra no soltarán guijarros). + +Al desactivarse, los jugadores no regenerarán salud de forma natural. + +Al desactivarse, la hora del día no cambiará. + Packs de aspecto Temas @@ -3407,7 +4010,49 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. {*SOURCE*} apaleó a {*PLAYER*} -{*PLAYER*} ha muerto a manos de {*SOURCE*} +{*SOURCE*} mató a {*PLAYER*} con magia. + +{*PLAYER*} se cayó de una escalera. + +{*PLAYER*} se cayó de unas hiedras. + +{*PLAYER*} se cayó del agua. + +{*PLAYER*} se cayó de un lugar alto. + +{*SOURCE*} condenó a caer a {*PLAYER*}. + +{*SOURCE*} condenó a caer a {*PLAYER*}. + +{*SOURCE*} condenó a caer a {*PLAYER*} con {*ITEM*}. + + {*PLAYER*} cayó demasiado lejos y murió a manos de {*SOURCE*}. + + {*PLAYER*} cayó demasiado lejos y murió a manos de {*SOURCE*}, que utilizó {*ITEM*}. + +{*PLAYER*} tropezó con fuego mientras luchaba contra {*SOURCE*}. + +{*PLAYER*} acabó cual tostada chamuscada mientras luchaba contra {*SOURCE*}. + +{*PLAYER*} intentó nadar en la lava para escapar de {*SOURCE*}. + +{*PLAYER*} se ahogó mientras intentaba escapar de {*SOURCE*}. + +{*PLAYER*} tropezó con un cactus mientras intentaba escapar de {*SOURCE*}. + +{*SOURCE*} hizo volar por los aires a {*PLAYER*}. + +{*PLAYER*} sufrió los efectos del Wither. + +{*SOURCE*} asesinó a {*PLAYER*} con {*ITEM*}. + +{*SOURCE*} disparó a {*PLAYER*} con {*ITEM*}. + +{*SOURCE*} quemó con bolas de fuego a {*PLAYER*} con {*ITEM*}. + +{*SOURCE*} apaleó a {*PLAYER*} con {*ITEM*}. + +{*PLAYER*} ha muerto a manos de {*SOURCE*}, que utilizó {*ITEM*}. Niebla de lecho de roca @@ -3574,7 +4219,7 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. No se puede trasquilar esta champiñaca en este momento. Límite de cerdos, ovejas, vacas y gatos alcanzado. -El huevo generador no está disponible en estos momentos. Se ha alcanzado la cantidad máxima de cerdos, ovejas, vacas y gatos. +No se pueden usar huevos generadores en este momento. Límite de cerdos, ovejas, vacas y gatos alcanzado. No se pueden usar huevos generadores ahora. Límite de champiñacas en un mundo alcanzado. @@ -3584,6 +4229,8 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. No se pueden usar huevos generadores en este momento. Se ha alcanzado el límite de calamares en un mundo. +No se pueden usar huevos generadores en este momento. Se ha alcanzado el límite de murciélagos en un mundo. + No se pueden usar huevos generadores en este momento. Se ha alcanzado el límite de enemigos en un mundo. No se pueden usar huevos generadores en este momento. Se ha alcanzado el límite de aldeanos en un mundo. @@ -3592,12 +4239,14 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. No puedes generar enemigos en el modo pacífico. -Este animal no puede entrar en el modo Amor. Se ha alcanzado la cantidad máxima de cerdos, ovejas, vacas y gatos reproductores. +Este animal no puede estar en modo Amor. Límite de cría de cerdos, ovejas, vacas, gatos y caballos alcanzado. Este animal no puede estar en modo Amor. Se ha alcanzado el límite de cría de lobos. Este animal no puede estar en modo Amor. Se ha alcanzado el límite de cría de gallinas. +Este animal no puede estar en modo Amor. Se ha alcanzado el límite de cría de caballos. + Este animal no puede estar en modo Amor. Se ha alcanzado el límite de cría de champiñacas. Se ha alcanzado la cantidad máxima de barcos en un mundo. @@ -3610,7 +4259,7 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. ¡Has muerto! -Regenerarse +Regenerar Descarga de contenido @@ -3625,40 +4274,56 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. Créditos Volver a instalar contenido - + Configuración de depuración - + El fuego se propaga - + La dinamita explota - + Jugador contra jugador - + Confiar en jugadores - + Privilegios de host - + Genera estructuras - + Mundo superplano - + Cofre de bonificación - + Opciones del mundo - + +Opciones de juego + +Vandalismo de enemigos + +Mantener inventario + +Generación de enemigos + +Botín de enemigos + +Soltar casillas + +Regeneración natural + +Ciclo de luz diurna + Puede construir y extraer -Puedes usar puertas e interruptores. +Puede usar puertas e interruptores -Puedes abrir contenedores. +Puede abrir contenedores -Puede atacar a los jugadores +Puede atacar a jugadores -Puedes atacar a animales. +Puede atacar a animales Moderador -Expulsar +Expulsar jugador Puede volar @@ -3832,6 +4497,14 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. Veneno +Wither + +Mejora de salud + +Absorción + +Saturación + de rapidez de lentitud @@ -3870,6 +4543,14 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. de veneno +de decadencia + +de mejora de salud + +de absorción + +de saturación + II @@ -3966,6 +4647,22 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. Disminuye la salud de los jugadores, animales y monstruos afectados con el tiempo. +Cuando se aplica: + +Fuerza de salto de caballo + +Refuerzos zombis + +Salud máxima + +Alcance de seguimiento de enemigos + +Resistencia a derribo + +Velocidad + +Daño de ataque + Afilado Aporrear @@ -4056,7 +4753,7 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. Restablece 3{*ICON_SHANK_01*}. Se crea cocinando una patata en el horno. -Restablece 1{*ICON_SHANK_01*}o se puede cocinar en el horno. Se puede plantar en tierras de cultivo. Si comes esto puede que te envenene. +Restablece 1{*ICON_SHANK_01*}. Si comes esto puede que te envenene. Restablece 3{*ICON_SHANK_01*}. Se produce a partir de una zanahoria y pepitas de oro. Restablece 3. @@ -4066,7 +4763,7 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. Se usa junto con un yunque para hechizar armas, herramientas o armaduras. -Se crea fundiendo menas de cuarzo del mundo inferior. Se le puede dar forma de bloque de cuarzo. +Se crea fundiendo minerales de cuarzo del mundo inferior. Se le puede dar forma de bloque de cuarzo. Se fabrica con lana. Se usa como decoración. @@ -4092,7 +4789,7 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. Cuarzo del mundo inferior -Mena de esmeralda +Mineral de esmeralda Cofre de Ender @@ -4120,7 +4817,7 @@ No apagues la Consola Xbox 360 cuando aparezca este icono en pantalla. Yunque muy dañado -Mena de cuarzo del mundo inferior +Mineral de cuarzo del mundo inferior Bloque de cuarzo @@ -4435,7 +5132,7 @@ Todos los cofres de Ender de un mundo están vinculados, y los objetos que conti - Una vez domesticados, los lobos siempre llevarán un collar. Tíñelo para cambiarlo de color. + Una vez domados, los lobos siempre llevarán un collar. Tíñelo para cambiarlo de color. Planta zanahorias o patatas y coséchalas cuando empiecen a brotar del suelo. @@ -4458,7 +5155,7 @@ Todos los cofres de Ender de un mundo están vinculados, y los objetos que conti Esta opción deshabilita los logros y las actualizaciones del marcador de este mundo cuando se juega y si se vuelve a cargar después de guardarlo con esta opción activada. -Subir partida guardada para Xbox One +Cargar partida guardada para Xbox One Subir datos guardados diff --git a/Minecraft.Client/Common/Media/font/CHS/MSYH.ttf b/Minecraft.Client/Common/Media/font/CHS/MSYH.ttf new file mode 100644 index 00000000..96d1db19 Binary files /dev/null and b/Minecraft.Client/Common/Media/font/CHS/MSYH.ttf differ diff --git a/Minecraft.Client/Common/Media/fr-FR/strings.resx b/Minecraft.Client/Common/Media/fr-FR/strings.resx index 788799ff..541bbb7d 100644 --- a/Minecraft.Client/Common/Media/fr-FR/strings.resx +++ b/Minecraft.Client/Common/Media/fr-FR/strings.resx @@ -230,11 +230,11 @@ Vous devrez essayer diverses combinaisons d'ingrédients pour découvrir toutes {*T3*}COMMENT JOUER : ENCHANTEMENT{*ETW*}{*B*}{*B*} Les points d'expérience obtenus à la mort d'un monstre, ou lorsque certains blocs sont minés ou fondus dans un four, peuvent servir à enchanter les outils, armes, armures et livres.{*B*} -Lorsqu'une épée, une hache, une pioche, une pelle, une armure ou un livre est placé dans l'emplacement situé sous le livre de la table d'enchantement, les trois boutons à sa droite afficheront certains enchantements ainsi que leur coût en niveaux d'expérience.{*B*} +Lorsqu'une épée, une hache, une pioche, une pelle, une armure ou un livre est placé dans l'emplacement situé sous le livre de la table d'enchantement, les trois boutons à sa droite afficheront certains enchantements ainsi que leur coût en niveaux d'expérience.{*B*} Si vous n'avez pas assez de niveaux d'expérience pour utiliser certains d'entre eux, le coût apparaîtra en rouge ; sinon, en vert.{*B*}{*B*} L'enchantement appliqué par défaut est choisi aléatoirement d'après le coût affiché.{*B*}{*B*} Si la table d'enchantement est entourée de bibliothèques (jusqu'à 15) avec un intervalle d'un bloc entre la table et la bibliothèque, la puissance des enchantements sera renforcée et des glyphes arcaniques apparaîtront, projetés par le livre sur la table d'enchantement.{*B*}{*B*} -Tous les ingrédients nécessaires à une table d'enchantement peuvent se trouver dans les villages, ou bien en minant et cultivant.{*B*} +Tous les ingrédients nécessaires à une table d'enchantement peuvent se trouver dans les villages, ou bien en minant et cultivant.{*B*}{*B*} Utilisez les livres d'enchantement à l'enclume pour enchanter des objets. Ainsi, vous contrôlez mieux quels enchantements vous désirez utiliser sur vos objets.{*B*} @@ -274,14 +274,14 @@ Pour ce faire, affichez le menu Pause puis appuyez sur{*CONTROLLER_VK_RB*} pour Si vous tentez de rejoindre ce niveau à l'avenir, un message vous indiquera qu'il figure dans votre liste de niveaux exclus. Vous pourrez alors décider de le supprimer de la liste et d'y accéder, ou bien d'annuler. {*T3*}COMMENT JOUER : MODE CRÉATIF{*ETW*}{*B*}{*B*} -L'interface du mode Créatif permet de déplacer dans l'inventaire du joueur n'importe quel objet du jeu sans qu'il soit besoin de le miner ou de le fabriquer. {*B*} +L'interface du mode Créatif permet de déplacer dans l'inventaire du joueur n'importe quel objet du jeu sans qu'il soit besoin de le miner ou de le fabriquer. Les objets figurant dans l'inventaire du joueur ne sont pas supprimés lorsqu'ils sont placés ou utilisés dans l'environnement du jeu, ce qui permet au joueur de tout miser sur la construction sans se soucier de collecter des ressources.{*B*} Si vous créez, chargez ou sauvegardez un monde en mode Créatif, les mises à jour des succès et des classements seront désactivées pour ce monde, même s'il est chargé en mode Survie.{*B*} -Pour voler en mode Créatif, appuyez deux fois rapidement sur {*CONTROLLER_ACTION_JUMP*}. Pour ne plus voler, répétez l'opération. Pour voler plus vite, orientez rapidement{*CONTROLLER_ACTION_MOVE*} deux fois vers l'avant en cours de vol.{*B*} -En mode Vol, maintenez{*CONTROLLER_ACTION_JUMP*} pour monter et{*CONTROLLER_ACTION_SNEAK*} pour descendre, ou bien utilisez{*CONTROLLER_ACTION_DPAD_UP*} pour monter, {*CONTROLLER_ACTION_DPAD_DOWN*} pour descendre, {*B*} +Pour voler en mode Créatif, appuyez deux fois rapidement sur {*CONTROLLER_ACTION_JUMP*}. Pour ne plus voler, répétez l'opération. Pour voler plus vite, orientez rapidement{*CONTROLLER_ACTION_MOVE*} deux fois vers l'avant en cours de vol. +En mode Vol, maintenez{*CONTROLLER_ACTION_JUMP*} pour monter et{*CONTROLLER_ACTION_SNEAK*} pour descendre, ou bien utilisez{*CONTROLLER_ACTION_DPAD_UP*} pour monter, {*CONTROLLER_ACTION_DPAD_DOWN*} pour descendre, {*CONTROLLER_ACTION_DPAD_LEFT*} pour virer à gauche et {*CONTROLLER_ACTION_DPAD_RIGHT*} pour virer à droite. -{*T3*}COMMENT JOUER : OPTIONS DU JOUEUR ET DE L'HÔTE{*ETW*}{*B*}{*B*} +{*T3*}COMMENT JOUER : OPTIONS DU JOUEUR ET DE L'HÔTE{*ETW*}{*B*}{*B*} {*T1*}Options du joueur{*ETW*}{*B*} Lorsque vous chargez ou créez un monde, appuyez sur le bouton Plus d'options pour accéder à un menu où figurent d'autres paramètres de configuration de la partie.{*B*}{*B*} @@ -299,7 +299,28 @@ Lorsque vous chargez ou créez un monde, appuyez sur le bouton Plus d'options po Lorsque cette option est activée, le TNT peut exploser lorsqu'il est activé. Vous pouvez aussi modifier cette option depuis le menu de jeu.{*B*}{*B*} {*T2*}Privilèges d'hôte{*ETW*}{*B*} - Lorsque cette option est activée, l'hôte peut activer/désactiver sa capacité à voler, désactiver la fatigue et se rendre invisible depuis le menu de jeu. {*DISABLES ACHIEVEMENTS}{*.{*B*}{*B*} + Lorsque cette option est activée, l'hôte peut activer/désactiver sa capacité à voler, désactiver la fatigue et se rendre invisible depuis le menu de jeu. {*DISABLES_ACHIEVEMENTS*}{*B*}{*B*} + + {*T2*}Cycle jour/nuit{*ETW*}{*B*} + Si vous désactivez cette option, le moment de la journée ne change pas.{*B*}{*B*} + + {*T2*}Conservation d'inventaire{*ETW*}{*B*} + Si vous activez cette option, les joueurs conservent leur inventaire après leur mort.{*B*}{*B*} + + {*T2*}Apparition des monstres{*ETW*}{*B*} + Si vous désactivez cette option, les monstres n'apparaissent pas automatiquement.{*B*}{*B*} + + {*T2*}Ingérence des monstres{*ETW*}{*B*} + Si vous désactivez cette option, les monstres et animaux ne peuvent ni modifier des blocs (par exemple, les explosions des Creepers ne détruisent pas les blocs et les moutons ne retirent pas d'herbe), ni ramasser des objets.{*B*}{*B*} + + {*T2*}Butin des monstres{*ETW*}{*B*} + Si vous désactivez cette option, les monstres et animaux ne laissent pas d'objets (par exemple, les Creepers ne laissent pas de poudre à canon).{*B*}{*B*} + + {*T2*}Butin des blocs{*ETW*}{*B*} + Si vous désactivez cette option, les blocs ne laissent pas d'objets après être détruits (par exemple, les blocs de pierre ne laissent pas de pierre taillée).{*B*}{*B*} + + {*T2*}Régénération auto{*ETW*}{*B*} + Si vous désactivez cette option, les joueurs ne regagnent pas leur santé automatiquement.{*B*}{*B*} {*T1*}Options de création de monde{*ETW*}{*B*} Lorsque vous créez un monde, vous disposez d'options supplémentaires.{*B*}{*B*} @@ -314,10 +335,10 @@ Lorsque vous créez un monde, vous disposez d'options supplémentaires.{*B*}{*B* Lorsque cette option est activée, un coffre renfermant des objets utiles sera créé à proximité du point d'apparition du joueur.{*B*}{*B*} {*T2*}Réinitialiser le Nether{*ETW*}{*B*} - Quand activé, le Nether sera généré de nouveau. Ceci est utile si vous avez une sauvegarde plus ancienne sans forteresse du Nether.{*B*}{*B*} + Activé, le Nether se régénérera. Utile si vous avez une ancienne sauvegarde sans forteresse du Nether.{*B*}{*B*} {*T1*}Options de jeu{*ETW*}{*B*} - Appuyez sur la touche BACK pour afficher le menu de jeu et accéder à diverses options.{*B*}{*B*} + Appuyez sur {*BACK_BUTTON*} pour afficher le menu de jeu et accéder à diverses options.{*B*}{*B*} {*T2*}Options de l'hôte{*ETW*}{*B*} Le joueur hôte et les joueurs au statut de modérateur peuvent accéder au menu Options de l'hôte. Depuis ce menu, ils peuvent activer/désactiver la propagation du feu et l'explosion de TNT.{*B*}{*B*} @@ -337,38 +358,40 @@ Pour modifier les privilèges d'un joueur, sélectionnez son nom et appuyez sur{ {*T2*}Peut attaquer les joueurs{*ETW*}{*B*} Uniquement disponible si l'option Joueurs de confiance est désactivée. Cette option désactivée, le joueur ne pourra pas infliger de dégâts aux autres joueurs.{*B*}{*B*} - {*T2*}Peut attaquer des animaux{*ETW*}{*B*} + {*T2*}Peut attaquer les animaux{*ETW*}{*B*} Uniquement disponible quand l'option Joueurs de confiance est désactivée. Quand cette option est désactivée, le joueur ne pourra pas infliger des dégâts aux animaux.{*B*}{*B*} {*T2*}Modérateur{*ETW*}{*B*} Lorsque cette option est activée, le joueur peut modifier les privilèges des autres joueurs (à l'exception de l'hôte) si l'option Joueurs de confiance est désactivée, il peut exclure des joueurs et activer ou désactiver la propagation du feu et l'explosion de TNT.{*B*}{*B*} {*T2*}Exclure joueur{*ETW*}{*B*} - Pour les joueurs qui ne jouent pas sur la même console {*PLATFORM_NAME*} que le joueur hôte, sélectionner cette option exclura le joueur de la partie, ainsi que tout autre joueur sur sa console {*PLATFORM_NAME*}. Ce joueur ne pourra plus rejoindre la partie jusqu'à son redémarrage.{*B*}{*B*} + {*KICK_PLAYER_DESCRIPTION*}{*B*}{*B*} {*T1*}Options du joueur hôte{*ETW*}{*B*} Si l'option Privilèges d'hôte est activée, le joueur hôte peut modifier certains de ses propres privilèges. Pour modifier les privilèges d'un joueur, sélectionnez son nom et appuyez sur{*CONTROLLER_VK_A*} pour afficher le menu des privilèges et paramétrer les options suivantes.{*B*}{*B*} {*T2*}Peut voler{*ETW*}{*B*} Lorsque cette option est activée, le joueur peut voler. Cette option ne sert qu'en mode Survie, puisque tous les joueurs peuvent voler en mode Créatif.{*B*}{*B*} - + {*T2*}Fatigue désactivée{*ETW*}{*B*} Cette option ne s'applique qu'au mode Survie. Lorsque cette option est activée, les activités physiques (marcher, courir, sauter, etc.) n'épuisent pas la jauge de nourriture. En revanche, si le joueur est blessé, sa jauge de nourriture se videra progressivement tandis qu'il se remet de ses blessures.{*B*}{*B*} - + {*T2*}Invisible{*ETW*}{*B*} Lorsque cette option est activée, le joueur est dissimulé au regard des autres joueurs et est invulnérable.{*B*}{*B*} - - {*T2*}Peut se téléporter{*ETW*}{*B*} + + {*T2*}Peut se téléporter{*ETW*}{*B*} Cette option permet au joueur de se déplacer ou déplacer d'autres joueurs instantanément dans le monde. +Pour les joueurs qui ne sont pas sur la même console {*PLATFORM_NAME*} que le joueur hôte, la sélection de cette option éjectera le joueur de la partie, ainsi que tous les autres joueurs connectés sur sa console {*PLATFORM_NAME*}. Ce joueur ne pourra rejoindre la partie qu'après son redémarrage. + Page suivante Page précédente Principes -Interface principale +Interface Inventaire @@ -411,7 +434,7 @@ L'Ender est une autre dimension du jeu, atteinte par un portail de l'Ender actif Pour activer le portail de l'Ender, vous devrez placer un Å“il d'Ender dans n'importe quel cadre de portail de l'Ender qui n'en contient pas.{*B*} Quand le portail est actif, sautez dedans pour vous rendre dans l'Ender.{*B*}{*B*} Dans l'Ender, vous rencontrerez le dragon de l'Ender, un ennemi féroce et puissant, et de nombreux Enderman. Vous devrez donc être préparé au combat avant de vous y rendre !{*B*}{*B*} -Vous découvrirez qu'il existe des cristaux d'Ender à l'extrémité de huit pics d'obsidienne que le dragon utilise pour se soigner. +Vous découvrirez qu'il existe des cristaux d'Ender à l'extrémité de huit pics d'obsidienne que le dragon utilise pour se soigner. La première étape est donc de détruire chacun d'entre eux.{*B*} Les premiers peuvent être atteints par des flèches, mais les derniers sont protégés par une cage d'acier, et vous devrez les atteindre par étapes.{*B*}{*B*} Ce faisant, le dragon de l'Ender vous attaquera en volant vers vous et en crachant des boules d'acide de l'Ender !{*B*} @@ -425,63 +448,95 @@ et ils pourront facilement vous rejoindre. Nouveautés - -{*T3*}Modifications et ajouts {*ETW*}{*B*}{*B*} -- Ajout de nouveaux objets : émeraude, minerai d'émeraude, bloc d'émeraude, coffre du Néant, crochet, pomme dorée enchantée, enclume, pot de fleurs, murets, murets moussus, peinture de Wither, pomme de terre, pomme de terre cuite, pomme de terre empoisonnée, carotte, carotte dorée, carotte sur un bâton, -tarte à la citrouille, potion de vision nocturne, potion d'invisibilité, quartz du Nether, minerai de quartz du Nether, bloc de quartz du Nether, dalle de quartz, escalier en quartz, bloc de quartz taillé, pilier de blocs de quartz, livre enchanté, tapis.{*B*} -- Ajout de nouvelles recettes pour le grès lisse et le grès taillé.{*B*} -- Ajout de nouveaux monstres : villageois zombies.{*B*} -- Ajout de nouvelles fonctions de génération de terrain : pyramides, villages du désert, temples de la jungle.{*B*} -- Ajout de transactions avec les villageois.{*B*} -- Ajout d'une interface d'enclume.{*B*} -- Possibilité de teindre les armures en cuir.{*B*} -- Possibilité de teindre les colliers des loups.{*B*} -- Possibilité de contrôler un cochon comme monture à l'aide d'une carotte sur un bâton.{*B*} -- Mise à jour du contenu des coffres bonus, qui contiennent maintenant plus d'objets.{*B*} -- Modification du placement des demi-blocs et autres blocs sur demi-blocs.{*B*} -- Modification du placement des escaliers et dalles à l'envers.{*B*} -- Ajout de différentes professions pour les villageois.{*B*} -- Les villageois générés par un Å“uf d'apparition ont une profession aléatoire.{*B*} -- Ajout d'un placement de tronc oblique.{*B*} -- Les fours peuvent utiliser les outils en bois comme combustible.{*B*} -- Vous pouvez récupérer les vitres en glace et en verre à l'aide d'outils disposant de l'enchantement Délicatesse.{*B*} -- Vous pouvez déclencher les boutons en bois et les plaques de détection en bois à l'aide de flèches.{*B*} -- Les portails à la Surface peuvent générer des monstres du Nether.{*B*} -- Les creepers et les araignées attaquent le dernier joueur qui les a touchés.{*B*} -- En mode Créatif, les monstres redeviennent neutres après un bref laps de temps.{*B*} -- Suppression du recul en cas de noyade.{*B*} -- Les dégâts des portes abîmées par les zombies sont visibles.{*B*} -- La glace fond dans le Nether.{*B*} -- Les chaudrons se remplissent d'eau de pluie.{*B*} -- Les pistons sont deux fois plus longs à mettre à jour.{*B*} -- Le cochon laisse une selle à sa mort (s'il en possède une).{*B*} -- La couleur du ciel de La Fin a changé.{*B*} -- Il est possible de placer un fil de déclenchement relié à un crochet.{*B*} -- La pluie goutte à travers les feuilles.{*B*} -- Il est possible de placer des leviers sur le bas des blocs.{*B*} -- La TNT inflige des dégâts variables selon la difficulté choisie.{*B*} -- La recette des livres a changé.{*B*} -- Ce sont les bateaux qui cassent les nénuphars et non l'inverse.{*B*} -- Les cochons lâchent plus de viande de porc.{*B*} -- Les slimes se reproduisent moins dans les mondes superplats.{*B*} -- Les dégâts des creepers sont variables selon la difficulté choisie. Recul accru.{*B*} -- Correction du bug qui empêchait l'Enderman d'ouvrir les mâchoires.{*B*} -- Ajout d'une téléportation des joueurs (à l'aide du menu {*BACK_BUTTON*} dans le jeu).{*B*} -- Ajout de nouvelles options de l'hôte gérant la lévitation, l'invisibilité et l'invulnérabilité des joueurs distants.{*B*} -- Ajout de nouveaux didacticiels dans le monde didacticiel, correspondant aux nouveaux objets et fonctionnalités.{*B*} -- Mise à jour de l'emplacement des coffres à disques vinyles dans le monde didacticiel.{*B*} +{*T3*}Modifications et ajouts{*ETW*}{*B*}{*B*} +- Ajout de nouveaux objets : argile durcie, argile colorée, bloc de charbon, botte de foin, rail activateur, bloc de redstone, capteur de lumière, dropper, entonnoir, chariot de mine avec entonnoir, chariot de mine avec TNT, comparateur de redstone, plaque de détection lestée, balise, coffre piégé, fusée d'artifice, étoile à feux d'artifice, étoile du Nether, laisse, caparaçon, étiquette, Å“uf d'apparition de cheval{*B*} +- Ajout de nouveaux monstres et animaux : Wither, Withers squelettes, sorcières, chauves-souris, chevaux, ânes et mules{*B*} +- Ajout de nouvelles fonctions de génération de terrain : cabanes de sorcières.{*B*} +- Ajout d'une interface pour les balises.{*B*} +- Ajout d'une interface pour les chevaux.{*B*} +- Ajout d'une interface pour les entonnoirs.{*B*} +- Ajout de feux d'artifice : l'interface des feux d'artifice est accessible depuis l'atelier, quand vous disposez des ingrédients nécessaires à la fabrication d'une étoile à feux d'artifice ou d'une fusée d'artifice.{*B*} +- Ajout d'un "mode Aventure" : il vous faut les bons outils pour briser les blocs.{*B*} +- Ajout de nouveaux sons en pagaille.{*B*} +- Les monstres, animaux, objets et projectiles peuvent désormais traverser les portails.{*B*} +- Il est maintenant possible de verrouiller les répéteurs en alimentant leurs flancs avec un autre répéteur.{*B*} +- Les zombies et squelettes peuvent maintenant apparaître avec différentes armes et armures.{*B*} +- Nouveaux messages de mort.{*B*} +- Nommez les monstres et animaux à l'aide d'une étiquette et renommez les conteneurs pour modifier leur titre quand le menu est ouvert.{*B*} +- La poudre d'os ne fait plus tout grandir immédiatement à sa taille maximale, mais par étapes aléatoires.{*B*} +- Vous pouvez détecter un signal de redstone décrivant le contenu des coffres, alambics, distributeurs et juke-box en plaçant un comparateur directement devant l'objet en question.{*B*} +- Les distributeurs peuvent être orientés dans toutes les directions.{*B*} +- Si vous mangez une pomme dorée, vous bénéficiez temporairement d'un bonus d'absorption de santé.{*B*} +- Plus vous restez dans une zone, plus les montres qui y apparaissent sont dangereux.{*B*} {*ETB*}Bienvenue ! Comme vous l'avez peut-être déjà remarqué, votre Minecraft vient de bénéficier d'une nouvelle mise à jour.{*B*}{*B*} -Vous et vos amis pouvez découvrir de nombreuses nouvelles fonctionnalités. Jetez un Å“il à l'aperçu qui suit et allez jouer !{*B*}{*B*} -{*T1*}Nouveaux objets{*ETB*} - Émeraude, minerai d'émeraude, bloc d'émeraude, coffre du Néant, crochet, pomme dorée enchantée, enclume, pot de fleurs, murets, murets moussus, peinture de Wither, pomme de terre, pomme de terre cuite, pomme de terre empoisonnée, carotte, carotte dorée, carotte sur un bâton, -tarte à la citrouille, potion de vision nocturne, potion d'invisibilité, quartz du Nether, minerai de quartz du Nether, bloc de quartz, dalle de quartz, escalier en quartz, bloc de quartz taillé, pilier de blocs de quartz, livre enchanté, tapis.{*B*}{*B*} -{*T1*}Nouveaux monstres{*ETB*} - Villageois zombies.{*B*}{*B*} -{*T1*}Nouvelles fonctionnalités{*ETB*} - Commercez avec les villageois, réparez ou enchantez vos armes et outils à l'aide d'une enclume, stockez des objets dans le coffre du Néant, faites du rodéo sur un cochon avec une carotte sur un bâton !{*B*}{*B*} -{*T1*}Nouveaux mini-didacticiels{*ETB*} – Apprenez à utiliser ces nouvelles fonctionnalités dans le monde didacticiel !{*B*}{*B*} -{*T1*}Nouveaux 'Easter Eggs'{*ETB*} – Nous avons modifié l'emplacement de tous les disques vinyles secrets dans le monde didacticiel. Essayez de les retrouver !{*B*}{*B*} +Vous et vos amis pouvez découvrir de nombreuses nouvelles fonctionnalités. Jetez un Å“il à l'aperçu qui suit et amusez-vous bien !{*B*}{*B*} +{*T1*}Nouveaux objets{*ETB*} : argile durcie, argile colorée, bloc de charbon, botte de foin, rail activateur, bloc de redstone, capteur de lumière, dropper, entonnoir, chariot de mine avec entonnoir, chariot de mine avec TNT, comparateur de redstone, plaque de détection lestée, balise, coffre piégé, fusée d'artifice, étoile à feux d'artifice, étoile du Nether, laisse, caparaçon, étiquette, Å“uf d'apparition de cheval{*B*}{*B*} +{*T1*}Nouveaux monstres et animaux{*ETB*} : Wither, Withers squelettes, sorcières, chauves-souris, chevaux, ânes et mules{*B*}{*B*} +{*T1*}Nouvelles fonctions{*ETB*} : domptez et montez un cheval, fabriquez des feux d'artifice et assurez le spectacle, nommez les animaux et monstres à l'aide d'une étiquette, créez des circuits de redstone plus complexes et accédez en tant qu'hôte à de nouvelles options pour mieux contrôler les actions de vos visiteurs !{*B*}{*B*} +{*T1*}Nouveau monde didacticiel{*ETB*} : découvrez comment utiliser les fonctions existantes et nouvelles dans le monde didacticiel. Arriverez-vous à trouver tous les disques vinyles qui s'y cachent ?{*B*}{*B*} +Chevaux + +{*T3*}COMMENT JOUER : CHEVAUX{*ETW*}{*B*}{*B*} +C'est surtout dans les plaines que l'on trouve des chevaux et des ânes. En croisant ces deux espèces, on obtient une mule, mais celle-ci ne peut pas avoir de descendance.{*B*} +Vous pouvez monter tous les chevaux, ânes et mules adultes. En revanche, seuls les chevaux peuvent porter une armure (appelée caparaçon), alors que les ânes et les mules peuvent être équipés de sacoches pour transporter des objets.{*B*}{*B*} +Avant de pouvoir utiliser un cheval, un âne ou une mule, il faut le dompter. Un cheval se dompte en essayant de monter dessus et de vous y maintenir pendant qu'il tente de vous désarçonner.{*B*} +Quand des cÅ“urs apparaissent autour du cheval, c'est que vous l'avez dompté : il n'essaiera plus de vous désarçonner. Pour diriger un cheval, vous devez l'équiper d'une selle.{*B*}{*B*} +Vous pouvez trouver des selles auprès des villageois ou dans les coffres cachés dans l'environnement.{*B*} +Un âne ou une mule dompté peut être équipé d'une sacoche en lui associant un coffre. Vous pourrez ensuite accéder à cette sacoche en vous faufilant devant l'animal ou en le chevauchant.{*B*}{*B*} +Les chevaux et les ânes (mais pas les mules) s'élèvent comme les autres animaux, à l'aide de pommes dorées ou de carottes dorées.{*B*} +Les poulains deviennent adultes au fil du temps, mais vous pouvez accélérer le processus en leur donnant du blé ou du foin à manger.{*B*} + + +Balises + +{*T3*}COMMENT JOUER : BALISES{*ETW*}{*B*}{*B*} +Les balises actives projettent un intense rayon de lumière dans le ciel et octroient des pouvoirs aux joueurs avoisinants.{*B*} +Vous pouvez les fabriquer à l'aide de verre, d'obsidienne et d'étoiles du Nether, qui s'obtiennent en terrassant le Wither.{*B*}{*B*} +Une balise doit être placée au sommet d'une pyramide de fer, d'or, d'émeraude ou de diamant, et doit pouvoir recevoir la lumière du soleil le jour.{*B*} +Le matériau sur lequel la balise est placée n'a aucun effet sur son pouvoir.{*B*}{*B*} +Ouvrez le menu de la balise pour sélectionner son pouvoir principal. Plus votre pyramide a d'étages, plus il y a de pouvoirs disponibles.{*B*} +Une balise sur une pyramide d'au moins quatre étages dispose en outre d'un pouvoir secondaire (Régénération), ou d'un pouvoir principal plus puissant.{*B*}{*B*} +Pour définir les pouvoirs de votre balise, vous devez sacrifier un lingot d'émeraude, de diamant, d'or ou de fer dans l'emplacement de paiement.{*B*} +Cela fait, la balise restera active indéfiniment.{*B*} + + +Feux d'artifice + +{*T3*}COMMENT JOUER : FEUX D'ARTIFICE{*ETW*}{*B*}{*B*} +Les feux d'artifice sont des objets décoratifs pouvant être lancés à la main ou depuis un distributeur. Ils se fabriquent à l'aide de papier, de poudre à canon et (facultatif) de plusieurs étoiles à feux d'artifice.{*B*} +En ajoutant des ingrédients supplémentaires lors de la fabrication, vous pouvez personnaliser les étoiles à feux d'artifice : couleurs, disparition, forme, taille et effets (traînée, scintillement, etc.).{*B*}{*B*} +Pour fabriquer un feu d'artifice, placez de la poudre à canon et du papier dans la grille d'artisanat 3x3 qui s'affiche au-dessus de votre inventaire.{*B*} +Vous pouvez aussi placer plusieurs étoiles à feux d'artifice dans la grille d'artisanat pour les ajouter au feu d'artifice.{*B*} +Plus il y a de cases contenant de la poudre à canon dans la grille d'artisanat, plus les étoiles à feux d'artifice explosent haut.{*B*}{*B*} +Vous pouvez ensuite récupérer le feu d'artifice terminé dans la case de résultat.{*B*}{*B*} +Vous pouvez fabriquer une étoile à feux d'artifice en plaçant de la poudre à canon et un colorant dans la grille d'artisanat.{*B*} + - Ce colorant définit la couleur que prend l'étoile à feux d'artifice en explosant.{*B*} + - Pour définir la forme de l'étoile à feux d'artifice, ajoutez une boule de feu, une pépite d'or, une plume ou un crâne de monstre.{*B*} + - Pour ajouter une traînée ou un scintillement, utilisez des diamants ou de la poudre glowstone.{*B*}{*B*} +Après avoir fabriqué une étoile à feux d'artifice, vous pouvez définir sa couleur de disparition en lui ajoutant un colorant. + + +Entonnoirs + +{*T3*}COMMENT JOUER : ENTONNOIRS{*ETW*}{*B*}{*B*} +Les entonnoirs servent à insérer ou retirer des objets d'un conteneur et à ramasser automatiquement les objets qu'on y jette.{*B*} +Ils peuvent interagir avec les alambics, les coffres, les distributeurs, les droppers, les chariots de mine avec coffre, les chariots de mine avec entonnoir, et d'autres entonnoirs.{*B*}{*B*} +Un entonnoir cherche en permanence à aspirer les objets d'un conteneur compatible placé au-dessus. Il tente également d'insérer les objets stockés dans un conteneur de destination.{*B*} +Si un entonnoir est alimenté par un bloc de redstone, il devient inactif et arrête à la fois d'aspirer et d'insérer.{*B*}{*B*} +Un entonnoir est orienté dans la direction vers laquelle il essaie d'insérer des objets. Pour l'orienter vers un bloc précis, placez-le contre ce bloc tout en vous faufilant.{*B*} + + +Droppers + +{*T3*}COMMENT JOUER : DROPPERS{*ETW*}{*B*}{*B*} +Quand un dropper est alimenté par la redstone, il dépose au sol un unique objet aléatoire qu'il contient. Utilisez {*CONTROLLER_ACTION_USE*} pour ouvrir le dropper, après quoi vous pouvez y insérer des objets de votre inventaire.{*B*} +Si le dropper fait face à un coffre ou tout autre conteneur, l'objet sera transféré dedans. Il est possible de construire de longues chaînes de droppers pour transporter des objets en les allumant et éteignant à tour de rôle. + + Inflige plus de dégâts qu'à mains nues. Sert à pelleter la terre, l'herbe, le sable, le gravier et la neige plus vite qu'à mains nues. Vous devrez posséder une pelle pour creuser les boules de neige. @@ -609,13 +664,39 @@ La couleur des lits est toujours la même. Tenue en main, la carte crée l'image d'une zone explorée. Peut servir à la détermination d'un trajet. +Si vous utilisez cet objet, il devient une carte de la zone géographique dans laquelle vous vous trouvez et se remplit au fur et à mesure de votre exploration. + Permet d'attaquer à distance à l'aide de flèches. Sert de munitions pour les arcs. +Produite par le Wither, sert à fabriquer des balises. + +Crée des explosions colorées après activation. La couleur, l'effet, la forme et la disparition dépendent de l'étoile à feux d'artifice utilisée pour créer le feu d'artifice. + +Détermine la couleur, l'effet et la forme d'un feu d'artifice. + +À utiliser dans un circuit de redstone pour entretenir, comparer ou réduire la force du signal, ou encore mesurer l'état de blocs précis. + +Type de chariot de mine qui se comporte comme un bloc de TNT mobile. + +Bloc qui émet un signal de redstone selon l'ensoleillement (ou le manque d'ensoleillement). + +Type de chariot de mine spécial qui se comporte comme un entonnoir. Il connecte les objets sur le rail et les conteneurs au-dessus. + +Type d'armure spécial pour chevaux. Confère une armure de 5. + +Type d'armure spécial pour chevaux. Confère une armure de 7. + +Type d'armure spécial pour chevaux. Confère une armure de 11. + +Sert à tenir les monstres en laisse ou à les attacher à un piquet de barrière. + +Sert à nommer les monstres dans le monde. + Restitue 2,5{*ICON_SHANK_01*}. -Restitue 1{*ICON_SHANK_01*}.. Peut s'utiliser jusqu'à 6 fois. +Restitue 1{*ICON_SHANK_01*}. Peut s'utiliser jusqu'à 6 fois. Restitue 1{*ICON_SHANK_01*}. @@ -938,100 +1019,158 @@ Remarque : vous pouvez aussi combiner colorant gris et poudre d'os pour en produ Les crânes peuvent servir de décoration ou être portés comme masques dans l'emplacement pour le casque. +Sert à exécuter un ordre. + +Projette un rayon de lumière dans le ciel et peut octroyer des altérations aux joueurs avoisinants. + +Permet d'entreposer des blocs et objets. Placez deux coffres côte à côte pour former un grand coffre à la capacité doublée. Le coffre piégé crée en outre une charge de redstone à l'ouverture. + +Fournit une charge de redstone. Plus il y a d'objets sur la plaque, plus la charge est puissante. + +Fournit une charge de redstone. Plus il y a d'objets sur la plaque, plus la charge est puissante. Nécessite plus de poids que la plaque légère. + +Source d'alimentation de redstone. Peut être retransformé en redstone. + +Sert à intercepter des objets ou à en transférer depuis un conteneur vers un autre. + +Type de rail permettant d'activer ou de désactiver les chariots de mine avec entonnoir, ou encore de déclencher les chariots de mine avec du TNT. + +Sert à entreposer et distribuer des objets, ou à les pousser vers un autre conteneur, lorsqu'on lui applique une charge de redstone. + +Des blocs colorés en argile durcie puis teinte. + +Nourriture pour chevaux, ânes et mules qui restitue jusqu'à 10 cÅ“urs. Accélère la croissance des poulains. + +Obtenue en fondant de l'argile dans un four. + +Mélange de verre et d'un colorant. + +Panneau de verre coloré. + +Un moyen peu encombrant d'entreposer du charbon. Peut servir de combustible dans un four. + Pieuvre - + Produit une poche d'encre une fois tuée. - + Vache - + Produit du cuir une fois tuée. Utilisez un seau pour la traire. - + Mouton - + Produit de la laine dès qu'il est tondu (s'il ne l'a pas déjà été). Utilisez un colorant pour changer la couleur de sa laine. - + Poulet - + Produit des plumes une fois tué ; pond aussi des Å“ufs, à l'occasion. - + Cochon - + Produit de la viande de porc une fois tué. Utilisez une selle pour le chevaucher. - + Loup - + Inoffensif à moins d'être attaqué : il n'hésitera pas à riposter. Utilisez des os pour le domestiquer : le loup vous suivra et s'en prendra à tous vos assaillants. - + Creeper - + Explose si vous l'approchez de trop près ! - + Squelette - + Vous décoche des flèches. Produit des flèches une fois tué. - + Araignée - + Attaque dès que vous approchez. Peut escalader les murs. Produit du fil une fois tuée. - + Zombie - + Attaque dès que vous approchez. - + Cochon zombie - + Inoffensifs de nature, ils vous attaqueront en groupe si vous vous en prenez à l'un d'entre eux. - + Ghast - + Décoche des boules de feu qui explosent à l'impact. - + Slime - + Se divise en plusieurs slimes plus petits dès qu'il est touché. - + Enderman - + Vous attaquera si vous le regardez. Peut aussi déplacer des blocs. - + Poisson d'argent - + Attire les poissons d'argent tapis à proximité si vous l'attaquez. Se cache dans les blocs de pierre. - + Araignée bleue - + Sa morsure est empoisonnée. - + Champimeuh - + Combiné à un bol, sert à la préparation de ragoûts de champignons. Produit des champignons et devient une vache normale une fois tondue. - + Golem de neige - + Le Golem de neige se crée en combinant des blocs de neige et une citrouille. Ils lancent des boules de neige sur les ennemis de leur créateur. - + Dragon de l'Ender - + Un colossal dragon noir qu'on rencontre dans l'Ender. - + Blaze - + Des ennemis qu'on croise dans le Nether, surtout dans les forteresses du Nether. Ils produisent des bâtons de feu une fois tués. - + Cube de magma - + On les rencontre dans le Nether. De même que les Slimes, ils se scindent en plusieurs cubes plus petits dès qu'ils sont tués. - + Villageois - + Ocelot - + Se trouve dans la jungle. Peut être dompté en le nourrissant de poisson cru. Vous devrez cependant laisser l'ocelot vous approcher, tout mouvement brusque le fera fuir. - + Golem de fer - + Apparaît dans les villages pour les protéger et peut être créé à partir de blocs de fer et de citrouilles. - + +Chauve-souris + +Ces créatures volantes habitent les cavernes et autres grands espaces fermés. + +Sorcière + +Ces ennemis des marécages vous attaquent en lançant des potions, et en abandonnent aussi à leur mort. + +Cheval + +Vous pouvez monter ces animaux, à condition de les dompter d'abord. + +Âne + +Vous pouvez monter ces animaux, à condition de les dompter d'abord. Il est possible de leur associer un coffre. + +Mule + +Croisement entre un cheval et un âne. Vous pouvez monter ces animaux, à condition de les dompter d'abord. Ils peuvent aussi porter des sacoches. + +Cheval zombie + +Cheval squelette + +Wither + +Il vous faut des crânes de Wither et du sable des âmes pour créer ce monstre, qui vous attaque en tirant des crânes explosifs. + Explosives Animator Concept Artist @@ -1378,6 +1517,8 @@ Remarque : vous pouvez aussi combiner colorant gris et poudre d'os pour en produ Carte +Carte vide + Disque vinyle "13" Disque vinyle "cat" @@ -1480,6 +1621,28 @@ Remarque : vous pouvez aussi combiner colorant gris et poudre d'os pour en produ Crâne de creeper +Étoile du Nether + +Fusée d'artifice + +Étoile à feux d'artifice + +Comparateur de redstone + +Chariot de mine avec TNT + +Chariot de mine avec entonnoir + +Caparaçon en fer + +Caparaçon en or + +Caparaçon en diamant + +Plomb + +Étiquette + Pierre Bloc d'herbe @@ -1496,6 +1659,8 @@ Remarque : vous pouvez aussi combiner colorant gris et poudre d'os pour en produ Planches de bois tropical +Planches de bois (tout type) + Pousse d'arbre Pousse de chêne @@ -1832,6 +1997,190 @@ Remarque : vous pouvez aussi combiner colorant gris et poudre d'os pour en produ Crâne +Bloc de commande + +Balise + +Coffre piégé + +Plaque de détection lestée (légère) + +Plaque de détection lestée (lourde) + +Comparateur de redstone + +Capteur de lumière + +Bloc de redstone + +Entonnoir + +Rail activateur + +Dropper + +Argile colorée + +Botte de foin + +Argile durcie + +Bloc de charbon + +Argile noire + +Argile rouge + +Argile verte + +Argile marron + +Argile bleue + +Argile violette + +Argile cyan + +Argile gris clair + +Argile grise + +Argile rose + +Argile vert clair + +Argile jaune + +Argile bleu ciel + +Argile magenta + +Argile orange + +Argile blanche + +Verre coloré + +Verre gris + +Verre rouge + +Verre vert + +Verre marron + +Verre bleu + +Verre violet + +Verre cyan + +Verre gris clair + +Verre gris + +Verre rose + +Verre vert clair + +Verre jaune + +Verre bleu ciel + +Verre magenta + +Verre orange + +Verre blanc + +Vitrail + +Vitrail gris + +Vitrail rouge + +Vitrail vert + +Vitrail marron + +Vitrail bleu + +Vitrail violet + +Vitrail cyan + +Vitrail gris clair + +Vitrail gris + +Vitrail rose + +Vitrail vert clair + +Vitrail jaune + +Vitrail bleu ciel + +Vitrail magenta + +Vitrail orange + +Vitrail blanc + +Petite boule + +Grande boule + +Étoile + +Creeper + +Explosion + +Forme inconnue + +Noir + +Rouge + +Vert + +Marron + +Bleu + +Violet + +Cyan + +Gris clair + +Gris + +Rose + +Vert clair + +Jaune + +Bleu ciel + +Magenta + +Orange + +Blanc + +Perso. + +Dégradé + +Scintillement + +Traînée + +Durée du vol : +  Commandes actuelles Config. @@ -2009,8 +2358,7 @@ La nuit, les monstres sont de sortie ; tâchez donc d'aménager un abri avant l Voici votre inventaire. Il affiche les objets susceptibles d'être tenus en main ainsi que tous les autres objets que vous portez, armure comprise. - - + {*B*} Appuyez sur{*CONTROLLER_VK_A*} pour continuer.{*B*} Appuyez sur{*CONTROLLER_VK_B*} si vous savez déjà utiliser l'inventaire. @@ -2031,7 +2379,7 @@ La nuit, les monstres sont de sortie ; tâchez donc d'aménager un abri avant l - Si vous voulez en savoir plus sur un objet, déplacez le pointeur sur l'objet en question et appuyez sur{*CONTROLLER_VK_RT*}. + Si vous voulez en savoir plus sur un objet, déplacez le pointeur sur l'objet en question et appuyez sur{*CONTROLLER_ACTION_MENU_PAGEDOWN*}. @@ -2065,7 +2413,7 @@ La nuit, les monstres sont de sortie ; tâchez donc d'aménager un abri avant l - Si vous voulez en savoir plus sur un objet, déplacez le pointeur sur l'objet en question et appuyez sur{*CONTROLLER_VK_RT*}. + Si vous voulez en savoir plus sur un objet, déplacez le pointeur sur l'objet en question et appuyez sur{*CONTROLLER_ACTION_MENU_PAGEDOWN*}. @@ -2612,6 +2960,211 @@ En mode Vol, maintenez{*CONTROLLER_ACTION_JUMP*} pour monter et{*CONTROLLER_ACTI Appuyez sur{*CONTROLLER_VK_B*} si vous savez déjà tout ce qu'il y a à savoir sur la barre de nourriture et les aliments. + + Voici l'interface d'inventaire du cheval. + + + + {*B*}Appuyez sur{*CONTROLLER_VK_A*} pour continuer. + {*B*}Appuyez sur{*CONTROLLER_VK_B*} si vous savez déjà utiliser l'inventaire du cheval. + + + + L'inventaire du cheval vous permet de transférer des objets ou d'en équiper votre cheval, âne ou mule. + + + + Sellez votre cheval en plaçant une selle dans l'emplacement à cet effet. Vous pouvez aussi l'équiper d'une armure en plaçant un caparaçon dans l'emplacement d'armure. + + + + Ce menu permet aussi de transférer des objets de votre inventaire vers les sacoches de votre âne ou mule, et vice versa. + + +Vous avez trouvé un cheval. + +Vous avez trouvé un âne. + +Vous avez trouvé une mule. + + + {*B*}Appuyez sur{*CONTROLLER_VK_A*} pour en savoir plus sur les chevaux, ânes et mules. + {*B*}Appuyez sur{*CONTROLLER_VK_B*} si vous n'avez plus rien à apprendre sur la question. + + + + C'est surtout dans les plaines et la savane que l'on trouve des chevaux et des ânes. En croisant ces deux espèces, on obtient une mule, mais celle-ci ne peut pas avoir de descendance. + + + + Vous pouvez monter tous les chevaux, ânes et mules adultes. En revanche, seuls les chevaux peuvent porter une armure (appelée caparaçon), alors que les ânes et les mules peuvent être équipés de sacoches pour transporter des objets. + + + + Avant de pouvoir utiliser un cheval, un âne ou une mule, il faut le dompter. Un cheval se dompte en essayant de monter dessus et de vous y maintenir pendant qu'il tente de vous désarçonner. + + + + Quand des cÅ“urs apparaissent autour du cheval, c'est que vous l'avez dompté : il n'essaiera plus de vous désarçonner. + + + + Essayez de monter ce cheval. Utilisez {*CONTROLLER_ACTION_USE*} sans objet ni outil en main pour le chevaucher. + + + + Pour diriger un cheval, vous devez l'équiper d'une selle que vous trouverez auprès des villageois, en pêchant, ou dans les coffres cachés à travers l'environnement. + + + + Un âne ou une mule dompté peut être équipé d'une sacoche en lui associant un coffre. Vous pourrez ensuite accéder à cette sacoche en vous faufilant devant l'animal ou en le chevauchant. + + + + Les chevaux et les ânes (mais pas les mules) s'élèvent comme les autres animaux, à l'aide de pommes dorées ou de carottes dorées. Les poulains deviennent adultes au fil du temps, mais vous pouvez accélérer le processus en leur donnant du blé ou du foin à manger. + + + + Vous pouvez essayer de dompter les chevaux et les ânes ici. Les coffres des environs contiennent également des selles, caparaçons et autres objets utiles pour chevaux. + + + + Vous êtes dans l'interface de la balise, qui vous permet de choisir les pouvoirs qu'octroiera votre balise. + + + + {*B*}Appuyez sur{*CONTROLLER_VK_A*} pour continuer. + {*B*}Appuyez sur{*CONTROLLER_VK_B*} si vous savez déjà utiliser cet inventaire. + + + + Le menu de la balise vous permet de sélectionner son pouvoir principal. Plus votre pyramide a d'étages, plus il y a de pouvoirs disponibles. + + + + Une balise sur une pyramide d'au moins quatre étages dispose d'un pouvoir secondaire (Régénération), ou d'un pouvoir principal plus puissant. + + + + Pour définir les pouvoirs de votre balise, vous devez sacrifier un lingot d'émeraude, de diamant, d'or ou de fer dans l'emplacement de paiement. Cela fait, la balise restera active indéfiniment. + + +Cette pyramide est surmontée d'une balise inactive. + + + {*B*}Appuyez sur{*CONTROLLER_VK_A*} pour en savoir plus sur les balises. + {*B*}Appuyez sur{*CONTROLLER_VK_B*} si vous n'avez plus rien à apprendre sur la question. + + + + Les balises actives projettent un intense rayon de lumière dans le ciel et octroient des pouvoirs aux joueurs avoisinants. Vous pouvez les fabriquer à l'aide de verre, d'obsidienne et d'étoiles du Nether, qui s'obtiennent en terrassant le Wither. + + + + Une balise doit être placée au sommet d'une pyramide de fer, d'or, d'émeraude ou de diamant, et doit pouvoir recevoir la lumière du soleil le jour. Le matériau sur lequel la balise est placée n'a aucun effet sur son pouvoir. + + + + Essayez d'utiliser la balise pour définir ses pouvoirs. Vous pouvez utiliser en guise de paiement les lingots de fer fournis. + + +Cette pièce contient des entonnoirs. + + + {*B*}Appuyez sur{*CONTROLLER_VK_A*} pour en savoir plus sur les entonnoirs. + {*B*}Appuyez sur{*CONTROLLER_VK_B*} si vous n'avez plus rien à apprendre sur la question. + + + + Les entonnoirs servent à insérer ou retirer des objets d'un conteneur et à ramasser automatiquement les objets qu'on y jette. + + + + Ils peuvent interagir avec les alambics, les coffres, les distributeurs, les droppers, les chariots de mine avec coffre, les chariots de mine avec entonnoir, et d'autres entonnoirs. + + + + Un entonnoir cherche en permanence à aspirer un objet d'un conteneur compatible placé au-dessus. Il tente également d'insérer les objets stockés dans un conteneur de destination. + + + + Si un entonnoir est alimenté par un bloc de redstone, il devient inactif et arrête à la fois d'aspirer et d'insérer. + + + + Un entonnoir est orienté dans la direction vers laquelle il essaie d'insérer des objets. Pour l'orienter vers un bloc précis, placez-le contre ce bloc tout en vous faufilant. + + + + Cette salle contient diverses configurations d'entonnoirs qui méritent d'être étudiées et testées. + + + + Vous êtes dans l'interface des feux d'artifice, qui vous permet de fabriquer des feux d'artifice et des étoile à feux d'artifice. + + + + {*B*}Appuyez sur{*CONTROLLER_VK_A*} pour continuer. + {*B*}Appuyez sur{*CONTROLLER_VK_B*} si vous savez déjà utiliser cet inventaire. + + + + Pour fabriquer un feu d'artifice, placez de la poudre à canon et du papier dans la grille d'artisanat 3x3 qui apparaît au-dessus de votre inventaire. + + + + Facultatif : vous pouvez placer plusieurs étoiles à feux d'artifice dans la grille d'artisanat pour les ajouter au feu d'artifice. + + + + Plus il y a de cases contenant de la poudre à canon dans la grille d'artisanat, plus les étoiles à feux d'artifice explosent haut. + + + + Vous pouvez ensuite récupérer le feu d'artifice terminé dans la case de résultat. + + + + Vous pouvez fabriquer une étoile à feux d'artifice en plaçant de la poudre à canon et un colorant dans la grille d'artisanat. + + + + Ce colorant définit la couleur que prend l'étoile à feux d'artifice en explosant. + + + + Pour définir la forme de l'étoile à feux d'artifice, ajoutez une boule de feu, une pépite d'or, une plume ou un crâne. + + + + Pour ajouter une traînée ou un scintillement, utilisez des diamants ou de la poudre glowstone. + + + + Après avoir fabriqué une étoile à feux d'artifice, vous pouvez définir sa couleur de disparition en lui ajoutant un colorant. + + + + Les coffres des environs contiennent divers objets servant à créer des FEUX D'ARTIFICE ! + + + + {*B*}Appuyez sur{*CONTROLLER_VK_A*} pour en savoir plus sur les feux d'artifice. + {*B*}Appuyez sur{*CONTROLLER_VK_B*} si vous n'avez plus rien à apprendre sur la question. + + + + Les feux d'artifice sont des objets décoratifs pouvant être lancés à la main ou depuis un distributeur. Ils se fabriquent à l'aide de papier, de poudre à canon et (facultatif) de plusieurs étoiles à feux d'artifice. + + + + En ajoutant des ingrédients supplémentaires lors de la fabrication, vous pouvez personnaliser les étoiles à feux d'artifice : couleurs, disparition, forme, taille et effets (traînée, scintillement, etc.). + + + + Essayez de fabriquer un feu d'artifice à l'atelier en combinant les ingrédients que contiennent les coffres. + +  Sélectionner Utiliser @@ -2834,6 +3387,22 @@ En mode Vol, maintenez{*CONTROLLER_ACTION_JUMP*} pour monter et{*CONTROLLER_ACTI Charger la sauvegarde pour Xbox One +Monter + +Descendre + +Associer un coffre + +Lancer + +Tenir en laisse + +Lâcher + +Fixer + +Nom + O.K. Annuler @@ -3144,6 +3713,20 @@ Voulez-vous déverrouiller le jeu complet ? Distributeur +Cheval + +Dropper + +Entonnoir + +Balise + +Pouvoir principal + +Pouvoir secondaire + +Chariot de mine + Aucun contenu téléchargeable de ce type n'est actuellement disponible pour ce jeu. %s a rejoint la partie. @@ -3303,10 +3886,14 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ? Mode de jeu : Créatif +Mode de jeu : Aventure + Survie Créatif +Aventure + Créé en mode Survie Créé en mode Créatif @@ -3327,6 +3914,8 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ? Superplat +Saisissez une valeur initiale pour générer à nouveau le même terrain. Champ vide = monde aléatoire. + Une fois activé, le jeu sera un jeu en ligne. Une fois activé, seuls les joueurs invités peuvent participer. @@ -3343,7 +3932,7 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ? Cette option permet à l'hôte d'activer sa capacité à voler et à se rendre un invisible, et de désactiver la fatigue. Elle désactive la mise à jour des succès et classements. -Si vous l'activez, le Nether sera régénéré. Très utile si vous avez une ancienne sauvegarde où les forteresses du Nether ne sont pas présentes. +Activé, le Nether se régénérera. Utile si vous avez une ancienne sauvegarde sans forteresse du Nether. Lorsque cette option est activée, les structures comme les villages et les forts apparaîtront dans le monde. @@ -3351,6 +3940,20 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ? Lorsque cette option est activée, un coffre renfermant des objets utiles sera créé à proximité du point d'apparition du joueur. +Si vous désactivez cette option, les monstres et animaux ne peuvent ni modifier des blocs (par exemple, les explosions des creepers ne détruisent pas les blocs et les moutons ne retirent pas d'herbe), ni ramasser des objets. + +Si vous activez cette option, les joueurs conservent leur inventaire après leur mort. + +Si vous désactivez cette option, les monstres n'apparaissent pas automatiquement. + +Si vous désactivez cette option, les monstres et animaux ne laissent pas d'objets (par exemple, les creepers ne laissent pas de poudre à canon). + +Si vous désactivez cette option, les blocs ne laissent pas d'objets après être détruits (par exemple, les blocs de pierre ne laissent pas de pierre taillée). + +Si vous désactivez cette option, les joueurs ne regagnent pas leur santé automatiquement. + +Si vous désactivez cette option, le moment de la journée ne change pas. + Packs de skins Thèmes @@ -3399,7 +4002,49 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ? {*PLAYER*} s'est fait rouer de coups par {*SOURCE*} -{*PLAYER*} s'est fait tuer par {*SOURCE*} +{*SOURCE*} a tué {*PLAYER*} par magie + +{*PLAYER*} a chuté d'une échelle + +{*PLAYER*} a chuté d'une liane + +{*PLAYER*} a chuté hors de l'eau + +{*PLAYER*} a chuté d'un endroit élevé + +{*PLAYER*} s'est fait pousser par {*SOURCE*} + +{*PLAYER*} s'est fait pousser par {*SOURCE*} + +{*PLAYER*} s'est fait pousser par {*SOURCE*} avec {*ITEM*} + +Après une lourde chute, {*SOURCE*} a achevé {*PLAYER*} + +Après une lourde chute, {*SOURCE*} a achevé {*PLAYER*} avec {*ITEM*} + +{*PLAYER*} a marché dans le feu tout en combattant {*SOURCE*} + +{*PLAYER*} s'est fait carboniser tout en combattant {*SOURCE*} + +{*PLAYER*} a piqué une tête dans la lave pour échapper à {*SOURCE*} + +{*PLAYER*} a péri par noyade en tentant d'échapper à {*SOURCE*} + +{*PLAYER*} a percuté un cactus en tentant d'échapper à {*SOURCE*} + +{*PLAYER*} s'est fait exploser par {*SOURCE*} + +{*PLAYER*} s'est fait Witherifier + +{*PLAYER*} s'est fait occire par {*SOURCE*} avec {*ITEM*} + +{*PLAYER*} s'est fait tirer dessus par {*SOURCE*} avec {*ITEM*} + +{*PLAYER*} a encaissé une boule de feu décochée par {*SOURCE*} avec {*ITEM*} + +{*PLAYER*} s'est fait rouer de coups par {*SOURCE*} avec {*ITEM*} + +{*PLAYER*} s'est fait tuer par {*SOURCE*} avec {*ITEM*} Brouillard d'adminium @@ -3413,7 +4058,7 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ? Personnage animé -Animations personnalisée pour skin +Anim. pers. pour skin Vous ne pouvez plus miner ou utiliser d'objet @@ -3566,9 +4211,9 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ? Ne pas réinitialiser le Nether -Pas de tonte de champimeuh pour le moment. Le nombre max de cochons, moutons, vaches et chats a été atteint. +Pas de tonte de champimeuh pour le moment. Le nombre max de cochons, moutons, vaches chats et chevaux a été atteint. -Impossible d'utiliser l'Å“uf d'apparition pour le moment. Vous avez atteint le nombre maximum de cochons, moutons, vaches et chats. +Impossible d'utiliser l'Å“uf d'apparition pour le moment. Vous avez atteint le nombre maximum de cochons, moutons, vaches, chats et chevaux. Impossible d'utiliser l'Å“uf d'apparition pour le moment. Vous avez atteint le nombre maximum de champimeuh. @@ -3578,6 +4223,8 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ? Impossible d'utiliser l'Å“uf d'apparition pour le moment. Vous avez atteint le nombre maximum de pieuvres dans un monde. +Impossible d'utiliser l'Å“uf d'apparition pour le moment. Vous avez atteint le nombre maximum de chauves-souris dans un monde. + Impossible d'utiliser un Å“uf d'apparition pour le moment. Le nombre maximum d'ennemis dans un monde a été atteint. Impossible d'utiliser un Å“uf d'apparition pour le moment. Le nombre maximum de villageois dans un monde a été atteint. @@ -3586,12 +4233,14 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ? Vous ne pouvez pas faire apparaître des ennemis en mode Paisible. -Cet animal ne peut pas entrer en mode amour. Le nombre maximum de cochons, moutons, vaches et chats en cours d'élevage a été atteint. +Cet animal ne peut pas entrer en mode amour. Le nombre maximum de cochons, moutons, vaches, chats et chevaux en cours d'élevage a été atteint. Cet animal ne peut pas entrer en mode amour. Le nombre maximum de loups en cours d'élevage a été atteint. Cet animal ne peut pas entrer en mode amour. Le nombre maximum de poulets en cours d'élevage a été atteint. +Cet animal ne peut pas entrer en mode amour. Le nombre maximum de chevaux en cours d'élevage a été atteint. + Cet animal ne peut pas entrer en mode amour. Nbre max de champimeuh élevés atteint. Le nombre maximum de bateaux dans un monde a été atteint. @@ -3619,27 +4268,43 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ?Crédits Réinstaller le contenu - + Debug Settings - + Propagation du feu - + Explosion de TNT - + PvP - + Joueurs de confiance - + Privilèges d'hôte - + Génération de structures - + Monde superplat - + Coffre bonus - + Options mondiales - + +Options du joueur + +Ingérence des monstres + +Conservation d'inventaire + +Apparition des monstres + +Butin des monstres + +Butin des blocs + +Régénération auto + +Cycle jour/nuit + Peut construire et miner Utilisation de portes et leviers possible @@ -3648,7 +4313,7 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ? Peut attaquer les joueurs -Attaque d'animaux possible +Peut attaquer les animaux Modérateur @@ -3826,6 +4491,14 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ? Poison +Wither + +Boost de santé + +Absorption + +Saturation + de rapidité de lenteur @@ -3864,6 +4537,14 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ? de poison +de flétrissure + +de boost de santé + +d'absorption + +de saturation + II @@ -3960,6 +4641,22 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ? Réduit progressivement la santé des joueurs, animaux et monstres affectés. +À l'application : + +Force de saut du cheval + +Renforts zombies + +Santé max + +Portée d'aggro + +Résistance au recul + +Vitesse + +Dégâts d'attaque + Tranchant Châtiment @@ -4050,7 +4747,7 @@ Voulez-vous installer le pack mash-up ou le pack de textures maintenant ? Restitue 3{*ICON_SHANK_01*}. Obtenu en cuisinant une pomme de terre dans un four. -Restitue 1{*ICON_SHANK_01*} mais peut vous empoisonner. À cuire dans un four ou planter dans une terre labourée. +Restitue 1{*ICON_SHANK_01*} mais peut vous rendre malade. Restitue 3{*ICON_SHANK_01*}. Se fabrique avec une carotte et des pépites d'or. diff --git a/Minecraft.Client/Common/Media/it-IT/strings.resx b/Minecraft.Client/Common/Media/it-IT/strings.resx index 8082dfdc..6eb30dc3 100644 --- a/Minecraft.Client/Common/Media/it-IT/strings.resx +++ b/Minecraft.Client/Common/Media/it-IT/strings.resx @@ -300,6 +300,27 @@ Quando carichi o crei un mondo, se premi il pulsante "Altre opzioni" accederai a {*T2*}Privilegi dell'host{*ETW*}{*B*} Se l'opzione è abilitata, l'host, tramite il menu di gioco, può attivare o disattivare la possibilità di volare, disabilitare la stanchezza e rendersi invisibile. {*DISABLES_ACHIEVEMENTS*}{*B*}{*B*} + {*T2*}Ciclo giorno/notte{*ETW*}{*B*} + Se disattivato, l'ora del giorno non cambia.{*B*}{*B*} + + {*T2*}Mantieni inventario{*ETW*}{*B*} + Se attivato, i giocatori mantengono l'inventario quando muoiono.{*B*}{*B*} + + {*T2*}Generazione mostri{*ETW*}{*B*} + Se disattivata, i mostri non vengono generati naturalmente.{*B*}{*B*} + + {*T2*}Immutabilità{*ETW*}{*B*} + Se disattivata, impedisce a mostri e animali di modificare i blocchi (per esempio, le esplosioni dei creeper non distruggono i blocchi e le pecore non brucano l'erba) o raccogliere oggetti.{*B*}{*B*} + + {*T2*}Bottino mostri{*ETW*}{*B*} + Se disattivato, mostri e animali non rilasciano bottino (per esempio, i creeper non rilasciano polvere da sparo).{*B*}{*B*} + + {*T2*}Rilascio blocchi{*ETW*}{*B*} + Se disattivato, i blocchi non rilasciano oggetti quando vengono distrutti (per esempio, i blocchi di pietra non rilasciano ciottoli).{*B*}{*B*} + + {*T2*}Rigenerazione naturale{*ETW*}{*B*} + Se disattivata, la salute dei giocatori non si rigenera naturalmente.{*B*}{*B*} + {*T1*}Opzioni di generazione del mondo{*ETW*}{*B*} Quando crei un nuovo mondo, sono disponibili alcune opzioni aggiuntive.{*B*}{*B*} @@ -316,7 +337,7 @@ Quando crei un nuovo mondo, sono disponibili alcune opzioni aggiuntive.{*B*}{*B* Quando è attivato, il Sottomondo sarà rigenerato. Questa funzionalità può essere molto utile se hai dei vecchi salvataggi in cui le Fortezze del Sottomondo non erano presenti.{*B*}{*B*} {*T1*}Opzioni di gioco{*ETW*}{*B*} - Durante la partita, premi BACK per aprire il menu di gioco, dove potrai accedere a diverse opzioni.{*B*}{*B*} + Durante la partita, premi{*BACK_BUTTON*}per aprire il menu di gioco, dove potrai accedere a diverse opzioni.{*B*}{*B*} {*T2*}Opzioni host{*ETW*}{*B*} L'host e tutti i giocatori identificati come moderatori possono accedere al menu "Opzioni host", nel quale avranno la possibilità di abilitare o disabilitare le opzioni "Diffusione incendio" ed "Esplosione TNT".{*B*}{*B*} @@ -325,42 +346,44 @@ Quando crei un nuovo mondo, sono disponibili alcune opzioni aggiuntive.{*B*}{*B* Per modificare i privilegi di un giocatore, seleziona il suo nome e premi{*CONTROLLER_VK_A*} per accedere al menu dei privilegi del giocatore, dove potrai agire sulle seguenti opzioni.{*B*}{*B*} {*T2*}Può costruire e scavare{*ETW*}{*B*} - Quando quest'opzione è abilitata, il giocatore può interagire con il mondo normalmente. Se, invece, l'opzione è disattivata, il giocatore non può posizionare né distruggere blocchi e non potrà interagire con oggetti e blocchi di vario tipo. Quest'opzione è disponibile solo se "Autorizza giocatori" è disattivata.{*B*}{*B*} + Questa opzione è disponibile solo se "Autorizza giocatori" è disattivata. Quando l'opzione è attiva, il giocatore può interagire normalmente con il mondo di gioco. Se, invece, l'opzione è disattivata, il giocatore non può posizionare né distruggere blocchi e non potrà interagire con oggetti e blocchi di vario tipo.{*B*}{*B*} {*T2*}Può usare porte e interruttori{*ETW*}{*B*} - Se disattivata, il giocatore non sarà in grado di usare né le porte né gli interruttori. Quest'opzione è disponibile solo se "Autorizza giocatori" è disattivata.{*B*}{*B*} + Questa opzione è disponibile solo se "Autorizza giocatori" è disattivata. Se disattivata, il giocatore non sarà in grado di usare né le porte né gli interruttori.{*B*}{*B*} {*T2*}Può aprire contenitori{*ETW*}{*B*} - Se disattivata, il giocatore non sarà in grado di aprire i contenitori, come le casse. Quest'opzione è disponibile solo se "Autorizza giocatori" è disattivata.{*B*}{*B*} + Questa opzione è disponibile solo se "Autorizza giocatori" è disattivata. Se disattivata, il giocatore non sarà in grado di aprire i contenitori, come le casse.{*B*}{*B*} {*T2*}Può attaccare i giocatori{*ETW*}{*B*} - Se disattivata, impedisce al giocatore di causare danni agli altri utenti. Quest'opzione è disponibile solo se "Autorizza giocatori" è disattivata.{*B*}{*B*} + Questa opzione è disponibile solo se "Autorizza giocatori" è disattivata. Se disattivata, impedisce al giocatore di causare danni agli altri utenti.{*B*}{*B*} {*T2*}Può attaccare animali{*ETW*}{*B*} - Se disattivata, il giocatore non sarà in grado di infliggere danni agli animali. Quest'opzione è disponibile solo se "Autorizza giocatori" è disattivata.{*B*}{*B*} + Questa opzione è disponibile solo se "Autorizza giocatori" è disattivata. Se disattivata, il giocatore non sarà in grado di infliggere danni agli animali.{*B*}{*B*} {*T2*}Moderatore{*ETW*}{*B*} Se quest'opzione è attivata, il giocatore potrà modificare i privilegi degli altri utenti, fatta eccezione per l'host, a patto che "Autorizza giocatori" sia disabilitata. Inoltre, il giocatore potrà espellere gli altri utenti e modificare le opzioni relative alla diffusione degli incendi e all'esplosione del TNT.{*B*}{*B*} {*T2*}Espelli giocatore{*ETW*}{*B*} - Selezionando quest'opzione, è possibile espellere qualsiasi giocatore che non si trova sulla console {*PLATFORM_NAME*} dell'host e tutti gli altri utenti eventualmente collegati tramite la console {*PLATFORM_NAME*} del giocatore espulso. I giocatori espulsi non potranno rientrare prima che la partita sia riavviata.{*B*}{*B*} + {*KICK_PLAYER_DESCRIPTION*}{*B*}{*B*} {*T1*}Opzioni del giocatore host{*ETW*}{*B*} -Se l'opzione "Privilegi dell'host" è attivata, l'host può modificare da solo alcuni privilegi. Per modificare i privilegi di un giocatore, seleziona il suo nome e premi {*CONTROLLER_VK_A*} per aprire il menu dei privilegi del giocatore e accedere alle seguenti opzioni.{*B*}{*B*} +Se l'opzione "Privilegi dell'host" è attivata, l'host può modificare da solo alcuni privilegi. Per modificare i privilegi di un giocatore, seleziona il suo nome e premi{*CONTROLLER_VK_A*} per aprire il menu dei privilegi del giocatore e accedere alle seguenti opzioni.{*B*}{*B*} {*T2*}Può volare{*ETW*}{*B*} Se l'opzione è attivata, il giocatore è in grado di volare. L'opzione ha effetto esclusivamente sulla modalità Sopravvivenza, perché in modalità Creativa, tutti i giocatori possono volare.{*B*}{*B*} - + {*T2*}Disabilita stanchezza{*ETW*}{*B*} L'opzione ha effetto esclusivamente sulla modalità Sopravvivenza. Se attivata, le attività fisiche (camminare, correre, saltare e altre ancora) non fanno diminuire la barra del cibo. Tuttavia, se il giocatore viene ferito, la barra del cibo diminuirà lentamente man mano che il giocatore guarisce.{*B*}{*B*} - + {*T2*}Invisibile{*ETW*}{*B*} Se l'opzione è abilitata, il giocatore è invulnerabile e gli altri utenti non possono vederlo.{*B*}{*B*} - + {*T2*}Può usare il teletrasporto{*ETW*}{*B*} - Permette al giocatore di spostare sé stesso o gli altri utenti, raggiungendo altri giocatori presenti nel mondo. + Permette al giocatore di spostare se stesso o gli altri utenti, raggiungendo altri giocatori presenti nel mondo. +Selezionando quest'opzione, è possibile espellere qualsiasi giocatore che non si trova sulla console {*PLATFORM_NAME*} dell'host e tutti gli altri utenti eventualmente collegati tramite la console {*PLATFORM_NAME*} del giocatore espulso. Il giocatore non potrà accedere nuovamente finché il gioco non sarà stato riavviato. + Pagina successiva Pagina precedente @@ -424,63 +447,95 @@ così saranno in grado di raggiungerti facilmente. Novità - -{*T3*}Modifiche e aggiunte{*ETW*}{*B*}{*B*} -- Nuovi oggetti: smeraldi, minerale di smeraldo, blocco di smeraldo, forziere di Ender, gancio a filo, mela d'oro incantata, incudine, vaso di fiori, muro di ciottoli, muro di ciottoli coperto di muschio, quadro sbiadito, patata, patata arrostita, patata velenosa, carota, carota d'oro, carota e bastone, -torta di zucca, pozione della visione notturna, pozione dell'invisibilità, quarzo del Sottomondo, minerale di quarzo del Sottomondo, blocco di quarzo, lastra di quarzo, scala di quarzo, blocco cesellato di quarzo, blocco portante di quarzo, libro incantato, tappeto.{*B*} -- Nuove ricette per arenaria liscia e arenaria cesellata.{*B*} -- Nuovi nemici: abitanti del villaggio zombie.{*B*} -- Nuove caratteristiche per la generazione del mondo: templi nel deserto, villaggi nel deserto, templi nella giungla.{*B*} -- Aggiunta la possibilità di commerciare con gli abitanti dei villaggi.{*B*} -- Aggiunta l'interfaccia incudine.{*B*} -- Il colore delle armature di pelle può essere cambiato usando le tinture.{*B*} -- Il colore dei collari dei lupi può essere cambiato usando le tinture.{*B*} -- I maiali possono essere controllati usando bastone e carota quando li si cavalca.{*B*} -- Il contenuto dei forzieri bonus è stato aggiornato con altri oggetti.{*B*} -- La posizione dei mezzi blocchi e degli altri blocchi sui mezzi blocchi è stata modificata.{*B*} -- La posizione delle scale e delle lastre al contrario è stata modificata.{*B*} -- Sono stati aggiunti mestieri diversi per gli abitanti dei villaggi.{*B*} -- Gli abitanti dei villaggi nati da un uovo generazione svolgono mestieri scelti in modo casuale.{*B*} -- È stata aggiunta la possibilità di posizionare i tronchi di legno in orizzontale.{*B*} -- Gli attrezzi di legno possono essere usati come combustibile nelle fornaci.{*B*} -- Le lastre di vetro e quelle di ghiaccio possono essere raccolte con attrezzi dotati dell'incantesimo "Tocco di seta".{*B*} -- Le piastre a pressione di legno e i pulsanti di legno possono essere attivati con le frecce.{*B*} -- I nemici del Sottomondo possono essere generati nel Sopramondo tramite i portali.{*B*} -- I creeper e i ragni sono aggressivi nei confronti del giocatore che li ha colpiti per ultimo.{*B*} -- I nemici in modalità Creativa tornano a essere neutrali dopo un breve periodo.{*B*} -- È stato rimosso l'atterramento in caso di annegamento.{*B*} -- Le porte rotte dagli zombie mostrano i segni dei danni subiti.{*B*} -- Il ghiaccio si scioglie nel Sottomondo.{*B*} -- I calderoni si riempiono d'acqua sotto la pioggia.{*B*} -- I pistoni impiegano il doppio del tempo per tornare al punto di partenza.{*B*} -- In caso siano sellati, i maiali lasciano cadere la sella quando sono uccisi.{*B*} -- Il colore del cielo nel Limite è stato cambiato.{*B*} -- È possibile posizionare corde (per i ganci a filo).{*B*} -- Le gocce di pioggia filtrano tra le foglie.{*B*} -- Le leve possono essere posizionate sulla parte inferiore dei blocchi.{*B*} -- Il TNT infligge danni che variano in base al livello di difficoltà.{*B*} -- La ricetta del libro è stata cambiata.{*B*} -- Le barche rompono le ninfee (le ninfee non rompono più le barche).{*B*} -- I maiali fanno guadagnare un maggior numero di costolette di maiale.{*B*} -- Sono generati meno slime nei mondi superpiatti.{*B*} -- I creeper infliggono una quantità di danni variabile in base al livello di difficoltà, ma l'atterramento è aumentato.{*B*} -- È stato risolto il problema degli Enderman che non aprono le mascelle.{*B*} -- È stato aggiunto il teletrasporto per i giocatori (usando il menu BACK durante il gioco).{*B*} -- Sono state aggiunte opzioni host per il volo, l'invisibilità e l'invulnerabilità per i giocatori in remoto.{*B*} -- Nel mondo tutorial sono stati aggiunti altri tutorial che spiegano nuovi oggetti e caratteristiche del gioco.{*B*} -- Le posizioni dei forzieri dei dischi nel mondo tutorial sono state aggiornate.{*B*} +{*T3*}Modifiche e aggiunte{*ETW*}{*B*}{*B*} +- Aggiunti nuovi oggetti: argilla indurita, argilla colorata, blocco di carbone, balla di fieno, binario attivatore, blocco di pietra rossa, sensore luce diurna, sgancio, vagoncino, carrello con vagoncino, carrello con TNT, comparatore pietra rossa, piastra a pressione con peso, segnale, cassa intrappolata, razzo d'artificio, stella Fuoco d'artificio, stella del Sottomondo, piombo, corazza per cavalli, targhetta nome, uovo generazione cavallo{*B*} +- Aggiunti nuovi mostri: Avvizzito, scheletri avvizziti, streghe, pipistrelli, cavalli, asini e muli{*B*} +- Aggiunte nuove funzionalità di generazione del terreno: capanna della strega.{*B*} +- Aggiunta interfaccia del segnale.{*B*} +- Aggiunta interfaccia del cavallo.{*B*} +- Aggiunta interfaccia del vagoncino.{*B*} +- Aggiunti i fuochi d'artificio, la cui interfaccia è accessibile dal tavolo da lavoro quando si dispone degli ingredienti per la produzione di una stella Fuoco d'artificio o di un razzo d'artificio.{*B*} +- Aggiunta la modalità Avventura: puoi distruggere i blocchi solo se disponi degli attrezzi adatti.{*B*} +- Aggiunti numerosi nuovi suoni.{*B*} +- Ora mostri, oggetti e proiettili possono attraversare i portali.{*B*} +- Ora i ripetitori possono essere bloccati attivandone i lati con un altro ripetitore.{*B*} +- Zombie e scheletri ora possono essere generati con diverse armi e armature.{*B*} +- Nuovi messaggi in caso di morte del giocatore.{*B*} +- Possibilità di dare un nome ai mostri con una targhetta e di rinominare i contenitori al fine di modificarne il titolo quando viene visualizzato il relativo menu.{*B*} +- La farina d'ossa non fa più crescere qualsiasi oggetto istantaneamente alla dimensione massima, invece lo fa crescere casualmente di vari livelli.{*B*} +- Collocando un comparatore di pietra rossa accanto a casse, banchi di distillazione, distributori e jukebox, è possibile rilevare un segnale pietra rossa che ne illustra il contenuto.{*B*} +- I distributori possono essere rivolti in qualsiasi direzione.{*B*} +- Mangiando una mela d'oro, il giocatore ottiene un "assorbimento" extra di salute temporaneo.{*B*} +- Maggiore è il tempo trascorso in un'area, più i mostri generati in quel luogo saranno potenti.{*B*} {*ETB*}Bentornato! Forse non lo sai, ma Minecraft è appena stato aggiornato.{*B*}{*B*} -Abbiamo aggiunto tante nuove funzionalità per te e i tuoi amici: di seguito troverai elencate quelle principali. Dai un'occhiata e corri a divertirti!{*B*}{*B*} -{*T1*}Nuovi oggetti{*ETB*} - Smeraldi, minerale di smeraldo, blocco di smeraldo, forziere di Ender, gancio a filo, mela d'oro incantata, incudine, vaso di fiori, muro di ciottoli, muro di ciottoli coperto di muschio, quadro sbiadito, patata, patata arrostita, patata velenosa, carota, carota d'oro, carota e bastone, -torta di zucca, pozione della visione notturna, pozione dell'invisibilità, quarzo del Sottomondo, minerale di quarzo del Sottomondo, blocco di quarzo, lastra di quarzo, scala di quarzo, blocco cesellato di quarzo, blocco portante di quarzo, libro incantato, tappeto.{*B*}{*B*} - {*T1*}Nuovi nemici{*ETB*} - Abitanti del villaggio zombie.{*B*}{*B*} -{*T1*}Nuove funzioni di gioco{*ETB*} - Commercia con gli abitanti dei villaggi, ripara e incanta armi e attrezzi con l'incudine, custodisci oggetti nei forzieri di Ender, controlla il maiale che cavalchi usando bastone e carota!{*B*}{*B*} -{*T1*}Nuovi mini tutorial{*ETB*} – Impara a usare le nuove funzioni di gioco nel mondo tutorial!{*B*}{*B*} -{*T1*}Nuove "sorprese nascoste"{*ETB*} – Abbiamo cambiato la posizione di tutti i dischi segreti nel mondo tutorial. Vediamo se riesci a trovarli di nuovo!{*B*}{*B*} +Abbiamo aggiunto tante nuove funzionalità per te e i tuoi amici: di seguito troverai elencate quelle principali. Dai un'occhiata e corri a divertirti!{*B*}{*B*} +{*T1*}Nuovi oggetti{*ETB*} - Argilla indurita, argilla colorata, blocco di carbone, balla di fieno, binario attivatore, blocco di pietra rossa, sensore luce diurna, sgancio, vagoncino, carrello con vagoncino, carrello con TNT, comparatore pietra rossa, piastra a pressione con peso, segnale, cassa intrappolata, razzo d'artificio, stella Fuoco d'artificio, stella del Sottomondo, piombo, corazza per cavalli, targhetta nome, uovo generazione cavallo{*B*}{*B*} +{*T1*}Nuovi mostri{*ETB*} - Avvizzito, scheletri avvizziti, streghe, pipistrelli, cavalli, asini e muli{*B*}{*B*} +{*T1*}Nuove funzionalità{*ETB*} - Doma e cavalca i cavalli, produci e usa i fuochi d'artificio, usa le targhette per dare un nome ad animali e mostri, crea circuiti a pietra rossa più avanzati e usa le nuove opzioni host per controllare le azioni disponibili per i visitatori del tuo mondo!{*B*}{*B*} +{*T1*}Nuovo mondo tutorial{*ETB*} – Scopri funzionalità nuove e familiari nel mondo tutorial. Cerca di trovare tutti i dischi nascosti!{*B*}{*B*} +Cavalli + +{*T3*}COME GIOCARE: CAVALLI{*ETW*}{*B*}{*B*} +Cavalli e asini si trovano principalmente nelle pianure. Se un asino si accoppia con una cavalla, nasce un mulo, il quale però è sterile.{*B*} +Puoi cavalcare tutti i cavalli, asini e muli adulti, ma solo i cavalli possono essere dotati di armatura, così come le borse da sella per il trasporto di oggetti sono riservate ad asini e muli.{*B*}{*B*} +Prima di poter cavalcare un cavallo, un asino o un mulo, dovrai domarlo tentando di cavalcarlo e rimanendo in groppa mentre cerca di disarcionarti.{*B*} +Quando compaiono dei cuoricini intorno all'animale, significa che è domato e potrai cavalcarlo. Per controllare un cavallo, devi dotarlo di una sella.{*B*}{*B*} +Puoi acquistare le selle dagli abitanti dei villaggi oppure trovarle nelle casse nascoste un po' ovunque.{*B*} +Puoi mettere una borsa da sella su un asino o un mulo domato assicurandovi una cassa. Potrai accedere alle borse da sella mentre cavalchi o sei in modalità furtiva.{*B*}{*B*} +Puoi allevare cavalli e asini (ma non muli) come gli altri animali, usando mele d'oro o carote d'oro.{*B*} +Col passare del tempo, i puledri diventeranno adulti, comunque puoi velocizzare l'operazione nutrendoli con fieno o grano.{*B*} + + +Segnali + +{*T3*}COME GIOCARE: SEGNALI{*ETW*}{*B*}{*B*} +I segnali attivi proiettano un raggio di luce nel cielo, conferendo poteri speciali ai giocatori nelle vicinanze.{*B*} +Per produrli servono vetro, ossidiana e stelle del Sottomondo, le quali si ottengono sconfiggendo l'Avvizzito.{*B*}{*B*} +I segnali devono essere collocati in modo tale che siano colpiti dalla luce del sole durante il giorno; inoltre vanno posti su piramidi di ferro, oro, smeraldo o diamante.{*B*} +Il materiale su cui è collocato il segnale non influisce sul suo potere.{*B*}{*B*} +Nel menu dei segnali puoi selezionare un potere principale per il tuo segnale: più livelli possiede la piramide, maggiore sarà il numero di poteri tra cui scegliere.{*B*} +Un segnale su una piramide con almeno quattro livelli offre inoltre il potere secondario Rigenerazione o un potere principale rafforzato.{*B*}{*B*} +Per impostare i poteri del tuo segnale, devi sacrificare un lingotto di smeraldo, diamante, oro o ferro nello slot di pagamento.{*B*} +Una volta impostati, i poteri saranno emanati dal segnale senza scadenze o limiti.{*B*} + + +Fuochi d'artificio + +{*T3*}COME GIOCARE: FUOCHI D'ARTIFICIO{*ETW*}{*B*}{*B*} +I fuochi d'artificio sono oggetti decorativi che possono essere lanciati manualmente o dai distributori. Si producono usando carta, povere da sparo e alcune stelle Fuoco d'artificio (facoltative).{*B*} +Colori, dissolvenza, forma, dimensione ed effetti (come scia o scintillii) delle stelle Fuoco d'artificio possono essere personalizzati includendo ingredienti aggiuntivi durante la produzione.{*B*}{*B*} +Per produrre un fuoco d'artificio, inserisci polvere da sparo e carta nella griglia di produzione 3x3 al di sopra dell'inventario.{*B*} +Se lo desideri, puoi inserire alcune stelle Fuoco d'artificio nella griglia di produzione, per aggiungerle al fuoco d'artificio.{*B*} +Più caselle occupi con la polvere da sparo, maggiore sarà l'altezza a cui esploderanno le stelle Fuoco d'artificio.{*B*}{*B*} +Quando vuoi produrre il fuoco d'artificio, prendilo dalla casella di produzione.{*B*}{*B*} +Per produrre le stelle Fuoco d'artificio, inserisci polvere da sparo e tintura nella griglia di produzione.{*B*} + - La tintura stabilisce il colore dell'esplosione della stella Fuoco d'artificio.{*B*} + - Per decidere la forma della stella Fuoco d'artificio, aggiungi una scarica di fuoco, una pepita d'oro, una piuma o una testa di mostro.{*B*} + - Puoi aggiungere una scia usando diamanti e polvere di pietra brillante.{*B*}{*B*} +Una volta creata una stella Fuoco d'artificio, puoi stabilirne il colore di dissolvenza usando la tintura. + + +Vagoncini + +{*T3*}COME GIOCARE: VAGONCINI{*ETW*}{*B*}{*B*} +I vagoncini si usano per inserire o rimuovere oggetti dai contenitori e per raccogliere automaticamente gli oggetti che vi vengono riposti.{*B*} +Possono influire su Banchi di distillazione, casse, distributori, sganci, carrelli con casse, carrelli con vagoncini e altri vagoncini.{*B*}{*B*} +I vagoncini tentano continuamente di estrarre oggetti da un contenitore adatto posizionato sopra di essi. Inoltre, cercheranno di inserire gli oggetti in essi riposti in un contenitore di scarico.{*B*} +Se un vagoncino funziona grazie a una pietra rossa, si disattiverà e smetterà di prelevare e consegnare oggetti.{*B*}{*B*} +Il vagoncino punta nella direzione in cui cerca di scaricare gli oggetti. Per rivolgere un vagoncino verso un blocco particolare, posizionalo a ridosso di tale blocco mentre ti muovi furtivamente.{*B*} + + +Sganci + +{*T3*}COME GIOCARE: SGANCI{*ETW*}{*B*}{*B*} +Se attivati da una pietra rossa, gli sganci rilasciano un oggetto casuale sul terreno. Usa {*CONTROLLER_ACTION_USE*} per aprire lo sgancio e inserisci gli oggetti del tuo inventario.{*B*} +Se lo sgancio è rivolto verso un forziere o un altro tipo di contenitore, l'oggetto verrà riposto lì. Puoi creare lunghe serie di sganci per trasportare gli oggetti, ma affinché funzionino devono essere alternativamente attivati e disattivati. + + Infligge un danno maggiore della mano. Serve per scavare terra, erba, sabbia, ghiaia e neve più in fretta che a mano. Le pale servono per scavare palle di neve. @@ -553,7 +608,7 @@ torta di zucca, pozione della visione notturna, pozione dell'invisibilità, quar Si usa per creare scale lunghe. Due lastre una sopra l'altra creano un blocco doppio di dimensioni normali. -Si usa per costruire scale lunghe. Due lastre poste l'una sull'altra creano un blocco da due lastre di dimensioni normali. +Si usa per creare scale lunghe. Due lastre una sopra l'altra creano un blocco doppio di dimensioni normali. La torcia si usa per fare luce, nonché per sciogliere neve e ghiaccio. @@ -606,10 +661,36 @@ I colori sono sempre gli stessi, qualunque sia la lana usata. Mentre la tieni in mano, crea un'immagine di un'area esplorata. Può essere utile per orientarti. +Quando viene utilizzata, diventa una mappa della parte del mondo in cui ti trovi e si compila man mano che procedi nell'esplorazione. + Consente attacchi a distanza con le frecce. Si usa come munizione per l'arco. +Rilasciato dall'Avvizzito, si usa per produrre segnali. + +Quando si attiva, crea esplosioni colorate. Colore, effetto, forma e dissolvenza sono determinati dalla stella Fuoco d'artificio utilizzata al momento della sua produzione. + +Si usa per determinare colore, effetto e forma di un fuoco d'artificio. + +Si usa nei circuiti con pietre rosse per mantenere, confrontare o sottrarre forza al segnale o per misurare le condizioni di determinati blocchi. + +È un tipo di carrello che funge da blocco di TNT mobile. + +È un blocco che emette un segnale pietra rossa in base alla luce del sole (o alla sua assenza). + +È uno speciale tipo di carrello che funziona in modo simile al vagoncino. Raccoglie gli oggetti sui binari e dai contenitori sopra di esso. + +Speciale tipo di corazza che si può far indossare a un cavallo. Garantisce 5 punti armatura. + +Speciale tipo di corazza che si può far indossare a un cavallo. Garantisce 7 punti armatura. + +Speciale tipo di corazza che si può far indossare a un cavallo. Garantisce 11 punti armatura. + +Serve per allacciare il nemico al giocatore o alle recinzioni. + +Serve per dare un nome ai nemici nel mondo. + Reintegra 2,5{*ICON_SHANK_01*}. Reintegra 1{*ICON_SHANK_01*}. Utilizzabile 6 volte. @@ -628,7 +709,7 @@ I colori sono sempre gli stessi, qualunque sia la lana usata. Reintegra 4{*ICON_SHANK_01*}. Si crea cucinando il manzo crudo nella fornace. -Reintegra 1,5{*ICON_SHANK_01*} o si può cucinare nella fornace. +Reintegra 1,5{*ICON_SHANK_01*}, o può essere cucinato in una fornace. Reintegra 4{*ICON_SHANK_01*}. Si crea cucinando una costoletta di maiale in una fornace. @@ -661,7 +742,7 @@ I colori sono sempre gli stessi, qualunque sia la lana usata. Accesi, fanno accelerare i carrelli da miniera che ci passano sopra. Spenti, fanno fermare i carrelli da miniera. -Funzionano come la piastra a pressione (inviano un segnale pietra rossa mentre sono in funzione) ma sono attivabili solo dal carrello da miniera. +Funziona come la piastra a pressione (invia un segnale pietra rossa mentre è in funzione) ma è attivabile solo dal carrello da miniera. Trasporta te, un animale o un mostro sui binari. @@ -934,100 +1015,158 @@ I colori sono sempre gli stessi, qualunque sia la lana usata. Le teste di Mob si possono collocare come decorazioni o indossare come maschere nello slot per l'elmo. +Serve per eseguire ordini. + +Proietta un raggio di luce nel cielo e conferisce effetti positivi ai giocatori vicini. + +Vi si possono conservare blocchi e oggetti. Colloca due casse una accanto all'altra per creare una cassa grande dalla capacità doppia. La cassa intrappolata crea inoltre una carica di pietra rossa quando viene aperta. + +Fornisce una carica di pietra rossa. La carica è più potente se ci sono più oggetti sulla piastra. + +Fornisce una carica di pietra rossa. La carica è più potente se ci sono più oggetti sulla piastra. Richiede un peso maggiore rispetto alla piastra leggera. + +Si usa come fonte energetica per la pietra rossa. Riconvertibile in pietra rossa. + +Si usa per prelevare oggetti o per trasferirli dentro e fuori vari contenitori. + +Un tipo di binario che attiva o disattiva i carrelli con vagoncini e attiva i carrelli con TNT. + +Serve per custodire e depositare oggetti o per spingerli in un altro contenitore quando viene fornita una carica di pietra rossa. + +Blocchi colorati prodotti tingendo l'argilla indurita. + +Si può usare per nutrire cavalli, asini o muli e reintegrare fino a 10 cuori. Accelera la crescita dei puledri. + +Si crea fondendo argilla nella fornace. + +Si produce usando vetro e tintura. + +Si produce con il vetro colorato. + +Per conservare il carbone in poco spazio. Utilizzabile per il funzionamento della fornace. + Calamaro - + Rilascia sacche di inchiostro quando viene ucciso. - + Mucca - + Rilascia pelle quando viene uccisa. Si può anche mungere usando un secchio. - + Pecora - + Rilascia lana quando viene tosata (se non è già stata tosata). Si può creare lana di vari colori usando le tinture. - + Gallina - + Rilascia piume quando viene uccisa, inoltre a volte depone le uova. - + Maiale - + Rilascia costolette quando viene ucciso. Si può cavalcare usando una sella. - + Lupo - + Docile finché non viene attaccato, nel qual caso reagisce. Si può domare usando le ossa, che lo convincono a seguirti e ad attaccare i tuoi nemici. - + Creeper - + Esplode se ti avvicini troppo! - + Scheletro - + Ti lancia delle frecce. Rilascia frecce quando viene ucciso. - + Ragno - + Ti attacca quando ti avvicini. Può arrampicarsi sui muri. Rilascia un pungiglione quando viene ucciso. - + Zombie - + Ti attacca quando ti avvicini. - + Uomo-maiale zombie - + Inizialmente docile, ma se ne colpisci uno verrai attaccato da un gruppo. - + Ghast - + Ti lancia sfere di fuoco che esplodono al contatto. - + Slime - + Se danneggiato, si divide in slime più piccoli. - + Enderman - + Ti attacca se lo guardi. Può anche spostare blocchi. - + Pesciolino d'argento - + Quando viene attaccato, attira tutti i Pesciolini d'argento nascosti nei dintorni. Si nasconde nei blocchi di pietra. - + Ragno delle grotte - + Il suo morso è velenoso. - + Muccafungo - + Si usa con una Ciotola per preparare la Zuppa di funghi. Deposita funghi e diventa una mucca normale quando viene tosata. - + Golem di neve - + Il Golem di neve può essere creato assemblando blocchi di neve e una zucca. Lancia palle di neve contro i nemici del suo creatore. - + Drago di Ender - + Grosso drago nero che si trova nel Limite. - + Vampe - + Nemici che si trovano nel Sottomondo, soprattutto all'interno delle Fortezze. Quando vengono uccisi, depositano Bacchette di Vampe. - + Cubo di magma - + Si trovano nel Sottomondo. Simili a Slime, si dividono in esemplari più piccoli quando vengono uccisi. - + Abitante del villaggio - + Ocelot - + Possono essere trovati nelle giungle. Sono addomesticabili se sfamati con pesce crudo, ma aspetta che sia lui ad avvicinarsi a te, perché un movimento brusco lo metterebbe in fuga. - + Golem di ferro - + Appare nei villaggi per proteggerli, può essere creato usando blocchi di ferro e zucche. - + +Pipistrello + +Queste creature volanti si trovano nelle caverne o in altri grandi spazi chiusi. + +Strega + +Si trovano nelle paludi e attaccano lanciando pozioni. Quando vengono uccise, rilasciano pozioni. + +Cavallo + +Questi animali possono essere domati e quindi cavalcati. + +Asino + +Questi animali possono essere domati e quindi cavalcati. Possono trasportare una cassa. + +Mulo + +Nasce dall'incrocio tra un cavallo e un asino. Questi animali possono essere domati e quindi cavalcati; inoltre possono trasportare casse. + +Cavallo zombie + +Cavallo scheletro + +Avvizzito + +Si producono usando teschi di Avvizzito e sabbie mobili. Scagliano teschi esplosivi contro di te. + Explosives Animator Concept Artist @@ -1374,6 +1513,8 @@ I colori sono sempre gli stessi, qualunque sia la lana usata. Mappa +Mappa vuota + Disco - "13" Disco - "gatto" @@ -1452,9 +1593,9 @@ I colori sono sempre gli stessi, qualunque sia la lana usata. Scarica di fuoco -Scarica di fuoco (carbone vegetale) +Scarica fuoco (carbone veg.) -Scarica di fuoco (carbone) +Scarica fuoco (carbone) Espositore @@ -1476,6 +1617,28 @@ I colori sono sempre gli stessi, qualunque sia la lana usata. Testa di Creeper +Stella del Sottomondo + +Razzo d'artificio + +Stella Fuoco d'artificio + +Comparatore pietra rossa + +Carrello con TNT + +Carrello con vagoncino + +Corazza di ferro per cavallo + +Corazza d'oro per cavallo + +Corazza di diamante per cavallo + +Piombo + +Targhetta nome + Pietra Blocco d'erba @@ -1492,6 +1655,8 @@ I colori sono sempre gli stessi, qualunque sia la lana usata. Assi di legno della giungla +Assi di legno (qualsiasi tipo) + Arbusto Arbusto di quercia @@ -1604,7 +1769,7 @@ I colori sono sempre gli stessi, qualunque sia la lana usata. Lastra di arenaria -Lastra di legno +Lastra di legno di quercia Lastra acciottolata @@ -1612,15 +1777,15 @@ I colori sono sempre gli stessi, qualunque sia la lana usata. Lastra di mattoni di pietra -Lastra di legna di quercia +Lastra di legno di quercia Lastra di arbusto Lastra di legno di betulla -Lastra di legno della giungla +Lastra di legno tropicale -Lastra di mattoni del Sottomondo +Lastra matt. Sottomondo Mattoni @@ -1750,7 +1915,7 @@ I colori sono sempre gli stessi, qualunque sia la lana usata. Mattoni di pietra -Mattoni di pietra coperti di muschio +Mattoni di pietra muschiati Mattoni di pietra lesionati @@ -1790,9 +1955,9 @@ I colori sono sempre gli stessi, qualunque sia la lana usata. Mattone del Sottomondo -Recinzione di mattoni del Sottomondo +Recinzione matt. Sottomondo -Scale di mattoni del Sottomondo +Scale matt. Sottomondo Verruca del Sottomondo @@ -1820,7 +1985,7 @@ I colori sono sempre gli stessi, qualunque sia la lana usata. Scale di legno di betulla -Scala di legno della giungla +Scala di legno tropicale Torcia di pietra rossa @@ -1828,6 +1993,190 @@ I colori sono sempre gli stessi, qualunque sia la lana usata. Teschio +Blocco di comando + +Segnale + +Cassa intrappolata + +Piastra a press. pesata (leggera) + +Piastra a press. pesata (pesante) + +Comparatore pietra rossa + +Sensore luce diurna + +Blocco di pietra rossa + +Vagoncino + +Binario attivatore + +Sgancio + +Argilla colorata + +Balla di fieno + +Argilla indurita + +Blocco di carbone + +Argilla colorata nera + +Argilla colorata rossa + +Argilla colorata verde + +Argilla colorata marrone + +Argilla colorata blu + +Argilla colorata viola + +Argilla colorata turchese + +Arg. col. grigio chiaro + +Argilla colorata grigia + +Argilla colorata rosa + +Arg. col. verde acido + +Argilla colorata gialla + +Argilla colorata azzurra + +Argilla colorata magenta + +Argilla colorata arancione + +Argilla colorata bianca + +Vetro colorato + +Vetro colorato nero + +Vetro colorato rosso + +Vetro colorato verde + +Vetro colorato marrone + +Vetro colorato blu + +Vetro colorato viola + +Vetro colorato turchese + +Vetro colorato grigio chiaro + +Vetro colorato grigio + +Vetro colorato rosa + +Vetro colorato verde lime + +Vetro colorato giallo + +Vetro colorato azzurro + +Vetro colorato magenta + +Vetro colorato arancione + +Vetro colorato bianco + +Lastra di vetro colorato + +Lastra di vetro colorato nera + +Lastra di vetro colorato rossa + +Lastra di vetro colorato verde + +Lastra di vetro colorato marrone + +Lastra di vetro colorato blu + +Lastra di vetro colorato viola + +Lastra di vetro colorato turchese + +Lastra di vetro colorato grigio chiaro + +Lastra di vetro colorato grigia + +Lastra di vetro colorato rosa + +Lastra di vetro colorato verde lime + +Lastra di vetro colorato gialla + +Lastra di vetro colorato azzurra + +Lastra di vetro colorato magenta + +Lastra di vetro colorato arancione + +Lastra di vetro colorato bianca + +Sfera piccola + +Sfera grande + +A forma di stella + +A forma di creeper + +Esplosione + +Forma sconosciuta + +Nero + +Rosso + +Verde + +Marrone + +Blu + +Viola + +Turchese + +Grigio chiaro + +Grigio + +Rosa + +Verde lime + +Giallo + +Azzurro + +Magenta + +Arancione + +Bianco + +Personalizzato + +Dissolvenza + +Luccichio + +Scia + +Durata volo: +  Comandi attuali Layout @@ -2005,8 +2354,7 @@ Di notte, i mostri vagano in libertà, quindi costruisci un riparo per tempo. Questo è il tuo inventario. Mostra gli oggetti che puoi tenere in mano e quelli che trasporti, nonché la tua eventuale armatura. - - + {*B*} Premi{*CONTROLLER_VK_A*} per continuare.{*B*} Premi{*CONTROLLER_VK_B*} se sai già come si usa l'inventario. @@ -2027,8 +2375,8 @@ Di notte, i mostri vagano in libertà, quindi costruisci un riparo per tempo. - Se vuoi maggiori informazioni su un oggetto, spostaci sopra il puntatore e premi{*CONTROLLER_VK_RT*}. - + Se vuoi maggiori informazioni su un oggetto, spostaci sopra il puntatore e premi{*CONTROLLER_ACTION_MENU_PAGEDOWN*} . + Ora premi{*CONTROLLER_VK_B*} per uscire dall'inventario. @@ -2061,8 +2409,8 @@ Di notte, i mostri vagano in libertà, quindi costruisci un riparo per tempo. - Se vuoi maggiori informazioni su un oggetto, spostaci sopra il puntatore e premi{*CONTROLLER_VK_RT*}. - + Se vuoi maggiori informazioni su un oggetto, spostaci sopra il puntatore e premi{*CONTROLLER_ACTION_MENU_PAGEDOWN*} . + Ora premi{*CONTROLLER_VK_B*} per uscire dall'inventario della modalità Creativa. @@ -2608,6 +2956,211 @@ Durante il volo, puoi tenere premuto{*CONTROLLER_ACTION_JUMP*} per salire e{*CON Premi{*CONTROLLER_VK_B*} se sai già come funzionano la barra del cibo e l'alimentazione. + + Questa è l'interfaccia dell'inventario del cavallo. + + + + {*B*}Premi{*CONTROLLER_VK_A*} per continuare. + {*B*}Premi{*CONTROLLER_VK_B*} se sai già usare l'inventario del cavallo. + + + + L'inventario del cavallo ti consente di trasferire o equipaggiare oggetti per il tuo cavallo, asino o mulo. + + + + Sella il tuo cavallo inserendo una sella nel relativo slot. Puoi far indossare una corazza a un cavallo collocandola nel relativo slot. + + + + In questo menu puoi anche trasferire oggetti tra l'inventario e le borse da sella sulla groppa di asini e muli. + + +Hai trovato un cavallo. + +Hai trovato un asino. + +Hai trovato un mulo. + + + {*B*}Premi{*CONTROLLER_VK_A*} per saperne di più su cavalli, asini e muli. + {*B*}Premi{*CONTROLLER_VK_B*} se sai già tutto su cavalli, asini e muli. + + + + Cavalli e asini si trovano principalmente nelle pianure, mentre i muli nascono dall'accoppiamento tra un asino e un cavallo, ma ricorda che sono sterili e non potranno riprodursi a loro volta. + + + + Puoi cavalcare tutti i cavalli, i muli e gli asini adulti, ma puoi far indossare una corazza soltanto ai cavalli, mentre asini e muli possono essere dotati di una borsa da sella per il trasporto di oggetti. + + + + Prima di poter cavalcare un cavallo, un asino o un mulo, è necessario domarlo tentando di cavalcarlo e resistendo mentre cerca di disarcionarti. + + + + Quando compaiono dei cuori e non tenta più di farti finire a terra, significa che è stato domato. + + + + Ora prova a cavalcare questo cavallo. Usa {*CONTROLLER_ACTION_USE*} senza impugnare oggetti o attrezzi per salirgli in groppa. + + + + Per controllare un cavallo, devi dotarlo di una sella, che puoi acquistare dagli abitanti dei villaggi o trovare nelle casse sparse per il mondo. + + + + Puoi mettere una borsa da sella su un asino o un mulo domato assicurandovi una cassa. Potrai accedere alle borse da sella mentre cavalchi o sei in modalità furtiva. + + + + Cavalli e asini (non i muli) possono essere allevati come gli altri animali, usando mele d'oro o carote d'oro. Col passare del tempo, i puledri diventeranno cavalli adulti, ma puoi velocizzare il processo nutrendoli con fieno o grano. + + + + Qui puoi provare a domare cavalli e asini; inoltre, troverai selle, corazze e altre oggetti utili nelle casse. + + + + Questa è l'interfaccia del segnale, che puoi usare per scegliere i poteri conferiti dai tuoi segnali. + + + + {*B*}Premi{*CONTROLLER_VK_A*} per continuare. + {*B*}Premi{*CONTROLLER_VK_B*} se sai già usare l'inventario del segnale. + + + + Nel menu del segnale, puoi selezionare un potere principale: più livelli possiede la piramide, maggiore sarà il numero di poteri tra cui scegliere. + + + + Un segnale su una piramide con almeno quattro livelli offre inoltre il potere secondario Rigenerazione o un potere principale rafforzato. + + + + Per impostare i poteri del tuo segnale, devi sacrificare un lingotto di smeraldo, diamante, oro o ferro nello slot di pagamento. Una volta impostati, i poteri saranno emanati dal segnale senza scadenze o limiti. + + +Sulla cima di questa piramide c'è un segnale inattivo. + + + {*B*}Premi{*CONTROLLER_VK_A*} per saperne di più sui segnali. + {*B*}Premi{*CONTROLLER_VK_B*} se sai già tutto sui segnali. + + + + I segnali attivi proiettano un raggio di luce nel cielo, conferendo poteri speciali ai giocatori nelle vicinanze. Per produrli servono vetro, ossidiana e stelle del Sottomondo, le quali si ottengono sconfiggendo l'Avvizzito. + + + + I segnali devono essere collocati in modo tale che siano colpiti dalla luce del sole durante il giorno; inoltre vanno posti su piramidi di ferro, oro, smeraldo o diamante. Il materiale su cui è collocato il segnale non influisce sul suo potere. + + + + Prova a usare il segnale per impostare il potere concesso: per il pagamento, puoi usare i lingotti di ferro che ti abbiamo fornito. + + +Questa stanza contiene dei vagoncini + + + {*B*}Premi{*CONTROLLER_VK_A*} per saperne di più sui vagoncini. + {*B*}Premi{*CONTROLLER_VK_B*} se sai già tutto sui vagoncini. + + + + I vagoncini si usano per inserire o rimuovere oggetti dai contenitori e per raccogliere automaticamente gli oggetti che vi vengono riposti. + + + + Possono influire su Banchi di distillazione, casse, distributori, sganci, carrelli con casse, carrelli con vagoncini e altri vagoncini. + + + + I vagoncini tentano continuamente di estrarre oggetti da un contenitore adatto posizionato sopra di essi. Inoltre, cercheranno di inserire gli oggetti in essi riposti in un contenitore di scarico. + + + + Se un vagoncino funziona grazie a una pietra rossa, si disattiverà e smetterà di prelevare e consegnare oggetti. + + + + Il vagoncino punta nella direzione in cui cerca di scaricare gli oggetti. Per rivolgere un vagoncino verso un blocco particolare, posizionalo a ridosso di tale blocco mentre ti muovi furtivamente. + + + + In questa stanza puoi sperimentare diverse configurazioni di vagoncini. + + + + Questa è l'interfaccia dei fuochi d'artificio, che si usa per produrre i fuochi d'artificio e le relative stelle. + + + + {*B*}Premi{*CONTROLLER_VK_A*} per continuare. + {*B*}Premi{*CONTROLLER_VK_B*} se sai già usare l'inventario dei fuochi d'artificio. + + + + Per produrre un fuoco d'artificio, inserisci polvere da sparo e carta nella griglia di produzione 3x3 al di sopra dell'inventario. + + + + Se lo desideri, puoi inserire alcune stelle Fuoco d'artificio nella griglia di produzione, per aggiungerle al fuoco d'artificio. + + + + Più caselle occupi con la polvere da sparo, maggiore sarà l'altezza a cui esploderanno le stelle Fuoco d'artificio. + + + + Quando vuoi produrre il fuoco d'artificio, prendilo dalla casella di produzione. + + + + Per produrre le stelle Fuoco d'artificio, inserisci polvere da sparo e tintura nella griglia di produzione. + + + + La tintura stabilisce il colore dell'esplosione della stella Fuoco d'artificio. + + + + Per decidere la forma della stella Fuoco d'artificio, aggiungi una scarica di fuoco, una pepita d'oro, una piuma o una testa. + + + + Puoi aggiungere uno scintillio usando diamanti e polvere di pietra brillante. + + + + Una volta creata una stella Fuoco d'artificio, puoi stabilirne il colore di dissolvenza usando la tintura. + + + + In queste casse ci sono vari oggetti usati nella produzione di FUOCHI D'ARTIFICIO! + + + + {*B*}Premi{*CONTROLLER_VK_A*} per saperne di più sui fuochi d'artificio. + {*B*}Premi{*CONTROLLER_VK_B*} se sai già tutto sui fuochi d'artificio. + + + + I fuochi d'artificio sono oggetti decorativi che possono essere lanciati manualmente o dai distributori. Si producono usando carta, povere da sparo e alcune stelle Fuoco d'artificio (facoltative). + + + + Colori, dissolvenza, forma, dimensione ed effetti (come scia o scintillii) delle stelle Fuoco d'artificio possono essere personalizzati includendo ingredienti aggiuntivi durante la produzione. + + + + Prova a realizzare un fuoco d'artificio al tavolo da lavoro usando gli ingredienti che trovi nelle casse. + +  Seleziona Usa @@ -2830,6 +3383,22 @@ Durante il volo, puoi tenere premuto{*CONTROLLER_ACTION_JUMP*} per salire e{*CON Carica salvataggio per Xbox One +Sali + +Scendi + +Posiziona cassa + +Lancia + +Guinzaglio + +Rilascia + +Attacca + +Nomina + OK Annulla @@ -3068,7 +3637,7 @@ Vuoi sbloccare il gioco completo? Disconnesso -Sei tornato alla schermata iniziale perché il tuo profilo giocatore si è disconnesso +Sei tornato alla schermata iniziale perché il tuo profilo giocatore si è disconnesso. Difficoltà @@ -3140,6 +3709,20 @@ Vuoi sbloccare il gioco completo? Dispenser +Cavallo + +Sgancio + +Vagoncino + +Segnale + +Potere principale + +Potere secondario + +Carrello da miniera + Nessuna offerta di contenuto scaricabile disponibile per questo titolo al momento. %s si unisce alla partita. @@ -3299,10 +3882,14 @@ Vuoi installare uno dei due pacchetti ora? Modalità: Creativa +Modalità: Avventura + Sopravvivenza Creativa +Avventura + In modalità Sopravvivenza In modalità Creativa @@ -3323,6 +3910,8 @@ Vuoi installare uno dei due pacchetti ora? Superpiatto +Inserisci un seme per generare di nuovo lo stesso terreno. Lascia vuoto per un mondo casuale. + Se attivato, il gioco sarà un gioco online. Se attivato, i giocatori potranno unirsi solo su invito. @@ -3347,6 +3936,20 @@ Vuoi installare uno dei due pacchetti ora? Se l'opzione è abilitata, vicino al punto di generazione del giocatore apparirà una cassa contenente alcuni oggetti utili. +Se disattivato, impedisce a mostri e animali di cambiare i blocchi (per esempio, le esplosioni dei creeper non distruggono i blocchi e le pecore non brucano erba) o di raccogliere oggetti. + +Se attivo, i giocatori mantengono il proprio inventario quando muoiono. + +Se disattivato, i nemici non vengono generati naturalmente. + +Se disattivato, mostri e animali non rilasciano bottino (per esempio, i creeper non rilasciano polvere da sparo). + +Se disattivato, i blocchi non rilasciano oggetti quando vengono distrutti (per esempio, i blocchi di pietra non rilasciano ciottoli). + +Se disattivato, la salute dei giocatori non si rigenera naturalmente. + +Se disattivato, l'ora del giorno non cambia. + Pacchetti di skin Temi @@ -3395,7 +3998,49 @@ Vuoi installare uno dei due pacchetti ora? {*PLAYER*} è stato pestato a morte da {*SOURCE*} -{*PLAYER*} è stato ucciso da {*SOURCE*} +{*PLAYER*} è stato ucciso da {*SOURCE*} con la magia + +{*PLAYER*} è caduto da una scala + +{*PLAYER*} è caduto dai rampicanti + +{*PLAYER*} è caduto fuori dall'acqua + +{*PLAYER*} è caduto da una grande altezza + +{*SOURCE*} ha condannato {*PLAYER*} alla caduta + +{*SOURCE*} ha condannato {*PLAYER*} alla caduta + +{*SOURCE*} ha condannato {*PLAYER*} alla caduta usando {*ITEM*} + +{*PLAYER*} è caduto troppo lontano ed è stato fatto fuori da {*SOURCE*} + +{*PLAYER*} è caduto troppo lontano ed è stato fatto fuori da {*SOURCE*} usando {*ITEM*} + +{*PLAYER*} è finito nel fuoco mentre affrontava {*SOURCE*} + +{*PLAYER*} è finito arrosto mentre affrontava {*SOURCE*} + +{*PLAYER*} ha cercato di nuotare nella lava per sfuggire a {*SOURCE*} + +{*PLAYER*} è annegato mentre cercava di sfuggire a {*SOURCE*} + +{*PLAYER*} è finito contro un cactus mentre cercava di sfuggire a {*SOURCE*} + +{*SOURCE*} ha fatto esplodere {*PLAYER*} + +{*PLAYER*} è avvizzito + +{*SOURCE*} ha massacrato {*PLAYER*} usando {*ITEM*} + +{*SOURCE*} ha sparato a {*PLAYER*} usando {*ITEM*} + +{*SOURCE*} ha lanciato una sfera di fuoco a {*PLAYER*} usando {*ITEM*} + +{*SOURCE*} ha preso a pugni {*PLAYER*} usando {*ITEM*} + +{*SOURCE*} ha ucciso {*PLAYER*} usando {*ITEM*} Nebbia substrato roccioso @@ -3560,9 +4205,9 @@ Vuoi installare uno dei due pacchetti ora? Non ripristinare il Sottomondo -Impossibile tosare il muccafungo al momento. Hai raggiunto il numero massimo di maiali, pecore, mucche e gatti. +Impossibile tosare il muccafungo al momento. Hai raggiunto il numero massimo di maiali, pecore, mucche, gatti e cavalli. -Impossibile usare l'uovo generazione al momento. Hai raggiunto il numero massimo di maiali, pecore, mucche e gatti. +Impossibile usare l'uovo generazione al momento. Hai raggiunto il numero massimo di maiali, pecore, mucche, gatti e cavalli. Impossibile usare l'uovo generazione al momento. Hai raggiunto il numero massimo di muccafunghi. @@ -3572,6 +4217,8 @@ Vuoi installare uno dei due pacchetti ora? Impossibile usare l'uovo generazione al momento. Hai raggiunto il numero massimo di calamari. +Impossibile usare l'uovo generazione al momento. È stato raggiunto il numero massimo di pipistrelli per mondo. + Impossibile usare Uovo rigenerazione al momento. È stato raggiunto il numero massimo di nemici nel mondo. Impossibile usare Uovo rigenerazione al momento. È stato raggiunto il numero massimo di villici nel mondo. @@ -3580,12 +4227,14 @@ Vuoi installare uno dei due pacchetti ora? Non puoi generare nemici in modalità Relax. -Questo animale non può entrare in "modalità Amore". Hai raggiunto il numero massimo di maiali, pecore, mucche e gatti. +Questo animale non può entrare in "modalità Amore". Hai raggiunto il numero massimo di maiali, pecore, mucche, gatti e cavalli. Questo animale non può entrare in "modalità Amore". Hai raggiunto il numero massimo di riproduzione di lupi. Questo animale non può entrare in "modalità Amore". Hai raggiunto il numero massimo di riproduzione di galline. +Questo animale non può entrare in "modalità Amore". Hai raggiunto il numero massimo di riproduzione di cavalli. + Questo animale non può entrare in "modalità Amore". Hai raggiunto il numero massimo di riproduzione di muccafunghi. È stato raggiunto il numero massimo di navi per mondo. @@ -3613,27 +4262,43 @@ Vuoi installare uno dei due pacchetti ora? Riconoscimenti Reinstalla contenuto - + Impostazioni debug - + Diffusione incendio - + Esplosione TNT - + Giocatore vs Giocatore - + Autorizza giocatori - + Privilegi dell'host - + Genera strutture - + Mondo superpiatto - + Cassa bonus - + Opzioni mondo - + +Opzioni di gioco + +Immutabilità + +Mantieni inventario + +Generazione mostri + +Bottino mostri + +Rilascio blocchi + +Rigenerazione naturale + +Ciclo giorno/notte + Può costruire e scavare Può usare porte e interruttori @@ -3820,6 +4485,14 @@ Vuoi installare uno dei due pacchetti ora? Veleno +Avvizzito + +Bonus salute + +Assorbimento + +Saturazione + della Velocità della Lentezza @@ -3858,6 +4531,14 @@ Vuoi installare uno dei due pacchetti ora? del Veleno +del decadimento + +del bonus salute + +dell'assorbimento + +della saturazione + II @@ -3954,6 +4635,22 @@ Vuoi installare uno dei due pacchetti ora? Riduce progressivamente la salute di giocatori, animali e mostri affetti. +Quando applicato: + +Forza salto cavallo + +Rinforzi zombie + +Salute massima + +Distanza inseguimento mostri + +Resistenza ad atterramento + +Velocità + +Danno attacco + Acutezza Percossa @@ -4044,7 +4741,7 @@ Vuoi installare uno dei due pacchetti ora? Fa recuperare 3 {*ICON_SHANK_01*}. Si crea cucinando una patata nella fornace. -Reintegra 1 {*ICON_SHANK_01*}, o si può cucinare nella fornace. Si può piantare sulle zolle. Può avvelenarti. +Fa recuperare 1 {*ICON_SHANK_01*}. Può avvelenarti. Reintegra 3 {*ICON_SHANK_01*}. Si realizza usando una carota e delle pepite d'oro. @@ -4092,7 +4789,7 @@ Vuoi installare uno dei due pacchetti ora? Muro di ciottoli -Muro di ciottoli coperto di muschio +Muro di ciottoli muschiato Vaso di fiori diff --git a/Minecraft.Client/Common/Media/ja-JP/4J_strings.resx b/Minecraft.Client/Common/Media/ja-JP/4J_strings.resx index 63927afe..5ef7111d 100644 --- a/Minecraft.Client/Common/Media/ja-JP/4J_strings.resx +++ b/Minecraft.Client/Common/Media/ja-JP/4J_strings.resx @@ -73,9 +73,9 @@ Xbox LIVE ã«ã‚µã‚¤ãƒ³ã‚¤ãƒ³ã—ã¦ã„ã¾ã›ã‚“ -ã“ã®ã‚²ãƒ¼ãƒ ã®ä¸€éƒ¨ã®æ©Ÿèƒ½ã§ã¯ã€Xbox LIVE ã«ã‚µã‚¤ãƒ³ã‚¤ãƒ³ã—ã¦ã„るゲーマー プロフィールãŒå¿…è¦ã¨ãªã‚Šã¾ã™ã€‚ç¾åœ¨ã¯ Xbox LIVE ã«ã‚µã‚¤ãƒ³ã‚¤ãƒ³ã—ã¦ã„ã¾ã›ã‚“ +ã“ã®ã‚²ãƒ¼ãƒ ã®ä¸€éƒ¨ã®æ©Ÿèƒ½ã§ã¯ã€Xbox LIVE ã«ã‚µã‚¤ãƒ³ã‚¤ãƒ³ã—ã¦ã„るゲーマー プロフィールãŒå¿…è¦ã¨ãªã‚Šã¾ã™ã€‚ç¾åœ¨ã¯ Xbox LIVE ã«ã‚µã‚¤ãƒ³ã‚¤ãƒ³ã—ã¦ã„ã¾ã›ã‚“。 -ã“ã®æ©Ÿèƒ½ã‚’使ã†ã«ã¯ã€Xbox LIVE ã«ã‚µã‚¤ãƒ³ã‚¤ãƒ³ã—ã¦ã„るゲーマー プロフィールãŒå¿…è¦ã§ã™ +ã“ã®æ©Ÿèƒ½ã‚’使ã†ã«ã¯ã€Xbox LIVE ã«ã‚µã‚¤ãƒ³ã‚¤ãƒ³ã—ã¦ã„るゲーマー プロフィールãŒå¿…è¦ã§ã™ã€‚ Xbox LIVE ã«ã‚µã‚¤ãƒ³ã‚¤ãƒ³ @@ -100,7 +100,7 @@ 完全版を購入 ã“れ㯠Minecraft ã®ãŠè©¦ã—版ã§ã™ã€‚完全版ã§ã‚れã°ã€ä»Šã™ãç²å¾—ã§ãる実績ãŒã‚りã¾ã™! -完全版を購入ã—ã¦ã€Xbox LIVE を通ã˜ã¦ä¸–界中ã®ãƒ•レンドã¨ä¸€ç·’ã«éŠã¹ã‚‹Minecraft ã®æ¥½ã—ã•を体験ã—ã¦ãã ã•ã„。 +完全版を購入ã—ã¦ã€Xbox LIVE を通ã˜ã¦ä¸–界中ã®ãƒ•レンドã¨ä¸€ç·’ã«éŠã¹ã‚‹ Minecraft ã®æ¥½ã—ã•を体験ã—ã¦ãã ã•ã„。 完全版を購入ã—ã¾ã™ã‹? プロフィールã®èª­ã¿è¾¼ã¿ã«å•題ãŒç™ºç”Ÿã—ãŸãŸã‚ã€ãƒ¡ã‚¤ãƒ³ ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã«æˆ»ã‚Šã¾ã™ diff --git a/Minecraft.Client/Common/Media/ja-JP/strings.resx b/Minecraft.Client/Common/Media/ja-JP/strings.resx index 132435fb..5326fb11 100644 --- a/Minecraft.Client/Common/Media/ja-JP/strings.resx +++ b/Minecraft.Client/Common/Media/ja-JP/strings.resx @@ -159,7 +159,7 @@ Minecraft ã¯è‡ªç”±ãªç™ºæƒ³ã§ãƒ–ロックをç©ã¿ä¸Šã’ã¦ã€æŽ¢æ¤œã—ãŸã‚Š çµŒé¨“å€¤ã‚²ãƒ¼ã‚¸ã‚‚ç”»é¢ã«è¡¨ç¤ºã•れã€ç¾åœ¨ã®çµŒé¨“å€¤ãƒ¬ãƒ™ãƒ«ã¨æ¬¡ã®ãƒ¬ãƒ™ãƒ«ã¾ã§ã«å¿…è¦ãªå€¤ã‚’確èªã§ãã¾ã™ã€‚ 経験値ã¯ã€ç”Ÿã物を倒ã—ãŸæ™‚ã€ç‰¹å®šã®ãƒ–ロックを採掘ã—ãŸæ™‚ã€å‹•ç‰©ã‚’ç¹æ®–ã•ã›ãŸæ™‚ã€é‡£ã‚Šã€ã‹ã¾ã©ã§é‰±çŸ³ã‚’製錬ã—ãŸæ™‚ãªã©ã«ç²å¾—ã§ãる経験値オーブを集ã‚ã‚‹ã¨è²¯ã¾ã£ã¦ã„ãã¾ã™ã€‚{*B*}{*B*} ã•らã«ä½¿ç”¨ã§ãるアイテムも表示ã•れã€{*CONTROLLER_ACTION_LEFT_SCROLL*} 㨠{*CONTROLLER_ACTION_RIGHT_SCROLL*} ã§æ‰‹ã«æŒã¤ã‚¢ã‚¤ãƒ†ãƒ ã‚’切り替ãˆã‚‰ã‚Œã¾ã™ -{{*T3*}éŠã³æ–¹: æŒã¡ç‰©{*ETW*}{*B*}{*B*} +{*T3*}éŠã³æ–¹: æŒã¡ç‰©{*ETW*}{*B*}{*B*} æŒã¡ç‰©ã¯ {*CONTROLLER_ACTION_INVENTORY*} ã§è¦‹ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚{*B*}{*B*} ã“ã®ç”»é¢ã§ã¯ã€æ‰‹ã«ã—ã¦ã„る使用å¯èƒ½ãªã‚¢ã‚¤ãƒ†ãƒ ã€æ‰€æœ‰ã—ã¦ã„るアイテムã®ãƒªã‚¹ãƒˆã€ç¾åœ¨è£…å‚™ã—ã¦ã„る防具を確èªã§ãã¾ã™ã€‚{*B*}{*B*} ãƒã‚¤ãƒ³ã‚¿ãƒ¼ã‚’ {*CONTROLLER_MENU_NAVIGATE*} ã§å‹•ã‹ã—ã¦ã€ã‚¢ã‚¤ãƒ†ãƒ ã«åˆã‚ã›ã¦ã‹ã‚‰ {*CONTROLLER_VK_A*} を押ã™ã¨ã€ã‚¢ã‚¤ãƒ†ãƒ ã‚’é¸æŠžã§ãã¾ã™ã€‚ãã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’複数所有ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãã®ã™ã¹ã¦ãŒé¸æŠžã•れã¾ã™ã€‚åŠåˆ†ã ã‘é¸æŠžã™ã‚‹ã«ã¯ {*CONTROLLER_VK_X*} を使用ã—ã¾ã™ã€‚{*B*}{*B*} @@ -231,7 +231,7 @@ Minecraft ã¯è‡ªç”±ãªç™ºæƒ³ã§ãƒ–ロックをç©ã¿ä¸Šã’ã¦ã€æŽ¢æ¤œã—ãŸã‚Š ã‚¨ãƒ³ãƒãƒ£ãƒ³ãƒˆã«å¿…è¦ãªçµŒé¨“値ã¯ã€ä¸è¶³ã—ã¦ã„ã‚‹å ´åˆã¯èµ¤ã€è¶³ã‚Šã¦ã„ã‚‹å ´åˆã¯ç·‘ã§è¡¨ç¤ºã•れã¾ã™ã€‚{*B*}{*B*} エンãƒãƒ£ãƒ³ãƒˆã¯æ¶ˆè²»å¯èƒ½ãªçµŒé¨“値ã®ç¯„囲ã§ãƒ©ãƒ³ãƒ€ãƒ ã«é¸æŠžã•れã¾ã™ã€‚{*B*}{*B*} エンãƒãƒ£ãƒ³ãƒˆãƒ†ãƒ¼ãƒ–ルã®å‘¨å›²ã«ã€ãƒ†ãƒ¼ãƒ–ルã¨ãƒ–ロック 1 ã¤åˆ†ã®ã™ã間を空ã‘ã¦æœ¬æ£š (最大 15 å°) を並ã¹ã‚‹ã“ã¨ã§ã€ã‚¨ãƒ³ãƒãƒ£ãƒ³ãƒˆã®ãƒ¬ãƒ™ãƒ«ãŒä¸ŠãŒã‚Šã¾ã™ã€‚ã¾ãŸæœ¬æ£šã‹ã‚‰ãƒ†ãƒ¼ãƒ–ãƒ«ä¸Šã®æœ¬ã«å‘ã‘ã¦æ–‡å­—ãŒæµã‚Œè¾¼ã‚€ã‚¨ãƒ•ェクトãŒè¡¨ç¤ºã•れã¾ã™ã€‚{*B*}{*B*} -エンãƒãƒ£ãƒ³ãƒˆãƒ†ãƒ¼ãƒ–ルã«å¿…è¦ãªææ–™ã¯ã™ã¹ã¦æ‘や採掘ã€è¾²è€•ãªã©ã§æ‰‹ã«å…¥ã‚Šã¾ã™ã€‚{*B*}{*B} +エンãƒãƒ£ãƒ³ãƒˆãƒ†ãƒ¼ãƒ–ルã«å¿…è¦ãªææ–™ã¯ã™ã¹ã¦æ‘や採掘ã€è¾²è€•ãªã©ã§æ‰‹ã«å…¥ã‚Šã¾ã™ã€‚{*B*}{*B*} エンãƒãƒ£ãƒ³ãƒˆã—ãŸæœ¬ã¯é‡‘床を使ã£ã¦ã‚¢ã‚¤ãƒ†ãƒ ã‚’エンãƒãƒ£ãƒ³ãƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã‚¢ã‚¤ãƒ†ãƒ ã«ã‚ˆã‚Šå¤šãã®ã‚¨ãƒ³ãƒãƒ£ãƒ³ãƒˆã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™{*B*} @@ -280,9 +280,9 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠{*CONTROLLER_ACTION_DPAD_LEFT*} ã§å·¦ã«ã€{*CONTROLLER_ACTION_DPAD_RIGHT*} ã§å³ã«é£›ã¹ã¾ã™ {*T3*}éŠã³æ–¹: ホストã¨ãƒ—レイヤーã®ã‚ªãƒ—ション{*ETW*}{*B*}{*B*} - + {*T1*}ゲーム オプション{*ETW*}{*B*} -世界をロードã¾ãŸã¯ç”Ÿæˆã™ã‚‹éš›ã€[ãã®ä»–ã®ã‚ªãƒ—ション] ã‚’é¸æŠžã—ã¦ã€ã‚ˆã‚Šè©³ç´°ãªè¨­å®šãŒã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚{*B*}{*B*} +世界をロードã¾ãŸã¯ç”Ÿæˆã™ã‚‹éš›ã€[ãã®ä»–ã®ã‚ªãƒ—ション] ã‚’é¸æŠžã—ã¦ã€ã•らã«è©³ç´°ãªè¨­å®šãŒã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚{*B*}{*B*} {*T2*}PvP{*ETW*}{*B*} 有効ã«ã™ã‚‹ã¨ã€ãƒ—レイヤーãŒä»–ã®ãƒ—レイヤーã«ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚’与ãˆã‚‰ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ (サãƒã‚¤ãƒãƒ« モードã®ã¿)。{*B*}{*B*} @@ -299,6 +299,27 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠{*T2*}ホスト特権{*ETW*}{*B*} 有効ã«ã™ã‚‹ã¨ã€ãƒ›ã‚¹ãƒˆã®é£›è¡Œèƒ½åŠ›ã€ç–²åŠ´ç„¡åŠ¹ã€ã‚²ãƒ¼ãƒ å†…メニューã§ã®éžè¡¨ç¤ºã‚’切り替ãˆã‚‰ã‚Œã¾ã™ã€‚{*DISABLES_ACHIEVEMENTS*}{*B*}{*B*} + {*T2*}時刻ã®å¤‰åŒ–{*ETW*}{*B*} + 無効ã«ã™ã‚‹ã¨ã€æ™‚刻ãŒå¤‰ã‚りã¾ã›ã‚“。{*B*}{*B*} + + {*T2*}æŒã¡ç‰©ã®ä¿æŒ{*ETW*}{*B*} + 有効ã«ã™ã‚‹ã¨ã€ã‚²ãƒ¼ãƒ ã‚ªãƒ¼ãƒãƒ¼æ™‚ã«ãƒ—ãƒ¬ã‚¤ãƒ¤ãƒ¼ã®æŒã¡ç‰©ãŒå¤±ã‚れã¾ã›ã‚“。{*B*}{*B*} + + {*T2*}生ã物ã®å‡ºç¾{*ETW*}{*B*} + 無効ã«ã™ã‚‹ã¨ã€ç”Ÿã物ã¯è‡ªç„¶ã«å‡ºç¾ã—ã¾ã›ã‚“。{*B*}{*B*} + + {*T2*}生ã物ã«ã‚ˆã‚‹å¦¨å®³{*ETW*}{*B*} + 無効ã«ã™ã‚‹ã¨ã€ãƒ¢ãƒ³ã‚¹ã‚¿ãƒ¼ã‚„動物ãŒãƒ–ロックを変更ã—ãŸã‚Š (例: Creeper ãŒçˆ†ç™ºã—ã¦ã‚‚ブロックãŒç ´å£Šã•れãªã„ã€ç¾ŠãŒè‰ã‚’å–り除ã‹ãªã„)ã€ã‚¢ã‚¤ãƒ†ãƒ ã‚’拾ã„ã¾ã›ã‚“。{*B*}{*B*} + + {*T2*}生ã物ã‹ã‚‰ã®æˆ¦åˆ©å“{*ETW*}{*B*} + 無効ã«ã™ã‚‹ã¨ã€ãƒ¢ãƒ³ã‚¹ã‚¿ãƒ¼ã‚„å‹•ç‰©ã¯æˆ¦åˆ©å“をドロップã—ã¾ã›ã‚“ (例: Creeper ã¯ç«è–¬ã‚’ドロップã—ãªã„)。{*B*}{*B*} + + {*T2*}タイルã‹ã‚‰ã®ã‚¢ã‚¤ãƒ†ãƒ å…¥æ‰‹{*ETW*}{*B*} + 無効ã«ã™ã‚‹ã¨ã€ãƒ–ロックを壊ã—ã¦ã‚‚アイテムをè½ã¨ã—ã¾ã›ã‚“ (例: 石ブロックãŒä¸¸çŸ³ã‚’è½ã¨ã•ãªã„)。{*B*}{*B*} + + {*T2*}自然å†ç”Ÿ{*ETW*}{*B*} + 無効ã«ã™ã‚‹ã¨ã€ãƒ—レイヤー㮠HP ã¯è‡ªç„¶ã«å†ç”Ÿã•れã¾ã›ã‚“。{*B*}{*B*} + {*T1*}世界ã®ç”Ÿæˆã®ã‚ªãƒ—ション{*ETW*}{*B*} 世界ã®ç”Ÿæˆã«ã‚ªãƒ—ションãŒè¿½åŠ ã•れã¾ã—ãŸã€‚{*B*}{*B*} @@ -315,7 +336,7 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠有効ã«ã™ã‚‹ã¨æš—黒界をå†ç”Ÿæˆã—ã¾ã™ã€‚æš—é»’ç ¦ãŒå­˜åœ¨ã—ãªã„セーブ データãŒã‚ã‚‹å ´åˆã«ä¾¿åˆ©ã§ã™{*B*}{*B*} {*T1*}ゲーム内ã®ã‚ªãƒ—ション{*ETW*}{*B*} - ゲーム中㫠BACK を押ã™ã¨ã€æ§˜ã€…ãªã‚ªãƒ—ション メニューを開ãã“ã¨ãŒã§ãã¾ã™ã€‚{*B*}{*B*} + ゲーム中㫠{*BACK_BUTTON*} を押ã™ã¨ã€æ§˜ã€…ãªã‚ªãƒ—ション メニューを開ãã“ã¨ãŒã§ãã¾ã™ã€‚{*B*}{*B*} {*T2*}ホスト オプション{*ETW*}{*B*} ホストプレイヤー㨠[ホストオプションを変更ã§ãã‚‹] ã«è¨­å®šã•れãŸãƒ—レイヤー㯠[ホスト オプション] メニューを使用ã§ãã¾ã™ã€‚ã“ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§ã¯ç«ã®å»¶ç„¼ã‚„ TNT ã®çˆ†ç™ºãªã©ã‚’切り替ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚{*B*}{*B*} @@ -333,7 +354,7 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠[é«˜åº¦ãªæ“作を許å¯] を無効ã«ã—ã¦ã„ã‚‹å ´åˆã®ã¿ä½¿ãˆã‚‹ã‚ªãƒ—ションã§ã™ã€‚無効ã«ã™ã‚‹ã¨ã€ã“ã®ã‚²ãƒ¼ãƒ ã«å‚加ã—ãŸãƒ—レイヤーã¯ãƒã‚§ã‚¹ãƒˆãªã©ã®å…¥ã‚Œç‰©ã‚’使用ã§ãã¾ã›ã‚“。{*B*}{*B*} {*T2*}プレイヤーを攻撃å¯èƒ½{*ETW*}{*B*} - [é«˜åº¦ãªæ“作を許å¯] を無効ã«ã—ã¦ã„ã‚‹å ´åˆã®ã¿ä½¿ãˆã‚‹ã‚ªãƒ—ションã§ã™ã€‚無効ã«ã™ã‚‹ã¨ã€ãƒ—レイヤーãŒä»–ã®ãƒ—レイヤーã«ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚’与ãˆã‚‰ã‚Œãªããªã‚Šã¾ã™ã€‚{*B*}{*B*} + [é«˜åº¦ãªæ“作を許å¯] を無効ã«ã—ã¦ã„ã‚‹å ´åˆã®ã¿ä½¿ãˆã‚‹ã‚ªãƒ—ションã§ã™ã€‚無効ã«ã™ã‚‹ã¨ã€ãƒ—レイヤーãŒä»–ã®ãƒ—レイヤーã«ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚’与ãˆã‚‰ã‚Œãªããªã‚Šã¾ã™ã€‚{*B*}{*B*} {*T2*}動物を攻撃å¯èƒ½{*ETW*}{*B*} [é«˜åº¦ãªæ“作を許å¯] を無効ã«ã—ã¦ã„ã‚‹å ´åˆã®ã¿ä½¿ãˆã‚‹ã‚ªãƒ—ションã§ã™ã€‚無効ã«ã™ã‚‹ã¨ã€ãƒ—レイヤーãŒå‹•物ã«ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚’与ãˆã‚‰ã‚Œãªããªã‚Šã¾ã™ã€‚{*B*}{*B*} @@ -342,12 +363,12 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠ã“ã®è¨­å®šã‚’有効ã«ã™ã‚‹ã¨ã€ãã®ãƒ—レイヤーã¯ã€Œé«˜åº¦ãªæ“作を許å¯ã€ãŒç„¡åйã®å ´åˆã«ã€ãƒ›ã‚¹ãƒˆã‚’除ãä»–ã®ãƒ—レイヤーã®ç‰¹æ¨©ã‚„ã€ãƒ—レイヤーã®è¿½æ”¾ã€ç«ã®å»¶ç„¼ã¨ TNT ã®çˆ†ç™ºã®è¨­å®šãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚{*B*}{*B*} {*T2*}プレイヤーを追放{*ETW*}{*B*} - ホストプレイヤーã¨åŒã˜ {*PLATFORM_NAME*} を使用ã—ã¦ã„ãªã„プレイヤーã«å¯¾ã—ã¦ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã™ã‚‹ã¨ã€ãã®ãƒ—レイヤーãŠã‚ˆã³å¯¾è±¡ãƒ—レイヤーã¨åŒã˜ {*PLATFORM_NAME*} を使用ã—ã¦ã„ã‚‹ä»–ã®ãƒ—レイヤーãŒã‚²ãƒ¼ãƒ ã‹ã‚‰è¿½æ”¾ã•れã¾ã™ã€‚追放ã•れãŸãƒ—レイヤーã¯ã€ã‚²ãƒ¼ãƒ ãŒå†èµ·å‹•ã•れるã¾ã§ã¯å†ã³å‚加ã§ãã¾ã›ã‚“。{*B*}{*B*} + {*KICK_PLAYER_DESCRIPTION*}*}{*B*}{*B*} {*T1*}ホストプレイヤー オプション{*ETW*}{*B*} [ホスト特権] ãŒæœ‰åйã®å ´åˆã€ãƒ›ã‚¹ãƒˆãƒ—レイヤーã¯è‡ªåˆ†ã«ç‰¹æ¨©ã‚’設定ã§ãã¾ã™ã€‚ホスト特権を変更ã™ã‚‹ã«ã¯ã€ãƒ—レイヤーåã‚’é¸æŠžã—㦠{*CONTROLLER_VK_A*} ã§ç‰¹æ¨©ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’é–‹ãã€æ¬¡ã®ã‚ªãƒ—ションを設定ã—ã¦ãã ã•ã„。{*B*}{*B*} - - {*T2*}飛行å¯èƒ½{*ETW*}{*B*} + + {*T2*}飛行å¯èƒ½{*ETW*}{*B*} 有効ã«ã™ã‚‹ã¨ã€é£›è¡Œã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚クリエイティブ モードã§ã¯å…¨ãƒ—レイヤーãŒé£›è¡Œã§ãã‚‹ãŸã‚ã€ã‚µãƒã‚¤ãƒãƒ« モードã«ã®ã¿é©ç”¨ã•れã¾ã™ã€‚{*B*}{*B*} {*T2*}疲労無効{*ETW*}{*B*} @@ -356,10 +377,13 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠{*T2*}ä¸å¯è¦–{*ETW*}{*B*} 有効ã«ã™ã‚‹ã¨ãƒ—レイヤーã¯ä»–ã®ãƒ—レイヤーã‹ã‚‰è¦‹ãˆãªããªã‚Šã€ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚‚å—ã‘ãªããªã‚Šã¾ã™ã€‚{*B*}{*B*} - {*T2*テレãƒãƒ¼ãƒˆå¯èƒ½{*ETW*}{*B*} - 自分や他ã®ãƒ—レイヤーを世界ã«ã„ã‚‹ä»–ã®ãƒ—レイヤーã®å ´æ‰€ã«ç§»å‹•ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ + {*T2*}テレãƒãƒ¼ãƒˆå¯èƒ½{*ETW*}{*B*} + 自分や他ã®ãƒ—レイヤーを世界ã«ã„ã‚‹ä»–ã®ãƒ—レイヤーã®å ´æ‰€ã«ç§»å‹•ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ + +ホストプレイヤーã¨åŒã˜ {*PLATFORM_NAME*} を使用ã—ã¦ã„ãªã„プレイヤーã«å¯¾ã—ã¦ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã™ã‚‹ã¨ã€ãã®ãƒ—レイヤーãŠã‚ˆã³å¯¾è±¡ãƒ—レイヤーã¨åŒã˜ {*PLATFORM_NAME*} を使用ã—ã¦ã„ã‚‹ä»–ã®ãƒ—レイヤーãŒã‚²ãƒ¼ãƒ ã‹ã‚‰è¿½æ”¾ã•れã¾ã™ã€‚追放ã•れãŸãƒ—レイヤーã¯ã€ã‚²ãƒ¼ãƒ ãŒå†èµ·å‹•ã•れるã¾ã§ã¯å†ã³å‚加ã§ãã¾ã›ã‚“ + 次㸠å‰ã¸ @@ -423,61 +447,94 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠最新情報 -{*T3*}修正ã¨è¿½åŠ {*ETW*}{*B*}{*B*} -- æ–°ã—ã„アイテムを追加ã—ã¾ã—ãŸã€‚エメラルドã€ã‚¨ãƒ¡ãƒ©ãƒ«ãƒ‰é‰±çŸ³ã€ã‚¨ãƒ¡ãƒ©ãƒ«ãƒ‰ã®ãƒ–ロックã€ã‚¨ãƒ³ãƒ€ãƒ¼ ãƒã‚§ã‚¹ãƒˆã€ãƒˆãƒªãƒƒãƒ—ワイヤー フックã€ã‚¨ãƒ³ãƒãƒ£ãƒ³ãƒˆã—ãŸé‡‘ã®ãƒªãƒ³ã‚´ã€é‡‘åºŠã€æ¤æœ¨é‰¢ã€ä¸¸çŸ³ã®å£ã€è‹”ã®ç”ŸãˆãŸä¸¸çŸ³ã®å£ã€ã‚¦ã‚£ã‚¶ãƒ¼ã®çµµã€ã‚¸ãƒ£ã‚¬ã‚¤ãƒ¢ã€ãƒ™ã‚¤ã‚¯ãƒ‰ ãƒãƒ†ãƒˆï½¤æœ‰æ¯’ãªã‚¸ãƒ£ã‚¬ã‚¤ãƒ¢ã€ãƒ‹ãƒ³ã‚¸ãƒ³ã€é‡‘ã®ãƒ‹ãƒ³ã‚¸ãƒ³ã€æ£’付ãã®ãƒ‹ãƒ³ã‚¸ãƒ³ -パンプキン ãƒ‘ã‚¤ã€æš—視ã®ãƒãƒ¼ã‚·ãƒ§ãƒ³ã€ä¸å¯è¦–ã®ãƒãƒ¼ã‚·ãƒ§ãƒ³ã€é—‡ã®ã‚¯ã‚©ãƒ¼ãƒ„ã€é—‡ã®ã‚¯ã‚©ãƒ¼ãƒ„鉱石ã€ã‚¯ã‚©ãƒ¼ãƒ„ã®ãƒ–ロックã€ã‚¯ã‚©ãƒ¼ãƒ„ã®åŽšæ¿ã€ã‚¯ã‚©ãƒ¼ãƒ„ã®éšŽæ®µã€æ¨¡æ§˜å…¥ã‚Šã®ã‚¯ã‚©ãƒ¼ãƒ„ã®ãƒ–ãƒ­ãƒƒã‚¯ã€æŸ±çжã®ã‚¯ã‚©ãƒ¼ãƒ„ã®ãƒ–ロックã€ã‚¨ãƒ³ãƒãƒ£ãƒ³ãƒˆã—ãŸæœ¬ã€ã‚«ãƒ¼ãƒšãƒƒãƒˆã€‚{*B*} -- ãªã‚らã‹ãªç ‚å²©ã¨æ¨¡æ§˜å…¥ã‚Šã®ç ‚å²©ã®æ–°ã—ã„レシピを追加ã—ã¾ã—ãŸã€‚{*B*} -- æ–°ã—ã„ç”Ÿç‰©ã€æ‘人ゾンビを追加ã—ã¾ã—ãŸã€‚{*B*} -- æ–°ã—ã„åœ°å½¢ç”Ÿæˆæ©Ÿèƒ½ã‚’追加ã—ã¾ã—ãŸã€‚ç ‚æ¼ ã®ç¥žæ®¿ã€ç ‚æ¼ ã®æ‘ã€ã‚¸ãƒ£ãƒ³ã‚°ãƒ«ã®ç¥žæ®¿ã€‚{*B*} -- æ‘人ã¨ã®å–引を追加ã—ã¾ã—ãŸã€‚{*B*} -- 金床ã®ç”»é¢ã‚’追加ã—ã¾ã—ãŸã€‚{*B*} -- é©ã®ã‚¢ãƒ¼ãƒžãƒ¼ã‚’染色ã§ãã¾ã™ã€‚{*B*} -- オオカミã®é¦–輪を染色ã§ãã¾ã™ã€‚{*B*} -- 棒付ãã®ãƒ‹ãƒ³ã‚¸ãƒ³ã§ä¹—り物ã®è±šã‚’æ“縦ã§ãã¾ã™ã€‚{*B*} -- ボーナス ãƒã‚§ã‚¹ãƒˆ コンテンツã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’増やã—ã¾ã—ãŸã€‚{*B*} -- ãƒãƒ¼ãƒ•ブロックã¨ãƒãƒ¼ãƒ•ブロック上ã®ãã®ä»–ã®ãƒãƒ¼ãƒ•ブロックã®é…置を変更ã—ã¾ã—ãŸã€‚{*B*} -- 上下逆ã®éšŽæ®µã¨åŽšæ¿ã®é…置を変更ã—ã¾ã—ãŸã€‚{*B*} -- ç•°ãªã‚‹æ‘人ã®è·æ¥­ã‚’追加ã—ã¾ã—ãŸã€‚{*B*} -- スãƒãƒ¼ãƒ³ エッグã‹ã‚‰å‡ºç¾ã—ãŸæ‘人ã®è·æ¥­ãŒãƒ©ãƒ³ãƒ€ãƒ ã«ãªã‚Šã¾ã™ã€‚{*B*} -- 横é“ã®ä¸¸å¤ªã®é…置を追加ã—ã¾ã—ãŸã€‚{*B*} -- 木ã®é“å…·ã‚’ã‹ã¾ã©ã®ç‡ƒæ–™ã¨ã—ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚{*B*} -- æ°·æ¿ã¨ã‚¬ãƒ©ã‚¹æ¿ã‚’技能ã§ã‚¨ãƒ³ãƒãƒ£ãƒ³ãƒˆã—ãŸé“å…·ã§å›žåŽã§ãã¾ã™ã€‚{*B*} -- 木ã®ãƒœã‚¿ãƒ³ã¨æœ¨ã®ãƒ—レッシャー プレートを矢ã§èµ·å‹•ã§ãã¾ã™ã€‚{*B*} -- é—‡ã®ç”Ÿç‰©ãŒåœ°ä¸Šç•Œã®ãƒãƒ¼ã‚¿ãƒ«ã‹ã‚‰ç™ºç”Ÿã—ã¾ã™ã€‚{*B*} -- Creeperã¨ã‚¯ãƒ¢ãŒã€æœ€å¾Œã«æ”»æ’ƒã—ã¦ããŸãƒ—レイヤーã«å¯¾ã—ã¦æ”»æ’ƒçš„ã«ãªã‚Šã¾ã™ã€‚{*B*} -- クリエイティブ モードã®ç”Ÿç‰©ãŒçŸ­æ™‚é–“ã§ä¸­ç«‹ã«æˆ»ã‚Šã¾ã™ã€‚{*B*} -- 溺れã¦ã„る時ã®ãƒŽãƒƒã‚¯ãƒãƒƒã‚¯ã‚’排除ã—ã¾ã—ãŸã€‚{*B*} -- ゾンビã«å£Šã•れã¦ã„るドアã®ãƒ€ãƒ¡ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れã¾ã™ã€‚{*B*} -- 暗黒界ã§ã¯æ°·ãŒæº¶ã‘ã¾ã™ã€‚{*B*} -- 雨ãŒé™ã£ã¦ã„る時ã«å¤§é‡œã‚’外ã«å‡ºã™ã¨ä¸€æ¯ã«ãªã‚Šã¾ã™ã€‚{*B*} -- ãƒ”ã‚¹ãƒˆãƒ³ã®æ›´æ–°ã« 2 å€ã®æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™ã€‚{*B*} -- 豚を殺ã™ã¨éžã‚’è½ã¨ã—ã¾ã™ (éžã‚’ç€ã‘ã¦ã„ã‚‹å ´åˆ)。{*B*} -- æžœã¦ã®ä¸–界ã®ç©ºã®è‰²ã‚’変更ã—ã¾ã—ãŸã€‚{*B*} -- ã²ã‚‚ (トップワイヤー用) を付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚{*B*} -- 雨ãŒè‘‰ã®é–“ã‚’ã—ãŸãŸã‚Šè½ã¡ã¾ã™ã€‚{*B*} -- ブロックã®ä¸‹ã«ãƒ¬ãƒãƒ¼ã‚’付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚{*B*} -- 難易度設定ã«ã‚ˆã£ã¦ TNT ãŒã•ã¾ã–ã¾ãªãƒ€ãƒ¡ãƒ¼ã‚¸ã‚’与ãˆã¾ã™ã€‚{*B*} -- 本ã®ãƒ¬ã‚·ãƒ”を変更ã—ã¾ã—ãŸã€‚{*B*} -- スイレンã®è‘‰ãŒãƒœãƒ¼ãƒˆã‚’壊ã™ä»£ã‚りã«ã€ãƒœãƒ¼ãƒˆãŒã‚¹ã‚¤ãƒ¬ãƒ³ã®è‘‰ã‚’壊ã—ã¾ã™ã€‚{*B*} -- 豚ã®è½ã¨ã™è±šè‚‰ã‚’増やã—ã¾ã—ãŸã€‚{*B*} -- スーパーフラットã§ç™ºç”Ÿã™ã‚‹ã‚¹ãƒ©ã‚¤ãƒ ã‚’減らã—ã¾ã—ãŸã€‚{*B*} -- Creeper ã®ãƒ€ãƒ¡ãƒ¼ã‚¸å¤‰æ•°ãŒé›£æ˜“度設定ã«åŸºã¥ãã€ãƒŽãƒƒã‚¯ãƒãƒƒã‚¯ã‚’増やã—ã¾ã—ãŸã€‚{*B*} -- EndermanãŒã‚¢ã‚´ã‚’é–‹ã‹ãªã„ã¨ã„ã†å•題を修正ã—ã¾ã—ãŸã€‚{*B*} -- プレイヤーã®ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’追加ã—ã¾ã—㟠(ゲーム内㮠BACK メニューを使用)。{*B*} -- リモート プレイヤー用ã®é£›è¡Œã€ä¸å¯è¦–ã€ä¸æ­»èº«ã®æ–°ã—ã„ホスト オプションを追加ã—ã¾ã—ãŸã€‚{*B*} -- æ–°ã—ã„ã‚¢ã‚¤ãƒ†ãƒ ã¨æ©Ÿèƒ½ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’追加ã—ã¾ã—ãŸã€‚{*B*} -- ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã®éŸ³æ¥½ãƒ‡ã‚£ã‚¹ã‚¯ ãƒã‚§ã‚¹ãƒˆã®ä½ç½®ã‚’変更ã—ã¾ã—ãŸ{*B*} - + +{*T3*}修正ã¨è¿½åŠ {*ETW*}{*B*}{*B*} +- æ–°ã—ã„アイテムを追加ã—ã¾ã—ãŸã€‚堅焼ã粘土ã€è‰²ä»˜ã粘土ã€çŸ³ç‚­ã®ãƒ–ロックã€å¹²ã—è‰ã®ä¿µã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ã‚¿ãƒ¼ レールã€ãƒ¬ãƒƒãƒ‰ã‚¹ãƒˆãƒ¼ãƒ³ã®ãƒ–ãƒ­ãƒƒã‚¯ã€æ—¥ç…§ã‚»ãƒ³ã‚µãƒ¼ã€ãƒ‰ãƒ­ãƒƒãƒ‘ーã€ãƒ›ãƒƒãƒ‘ーã€ãƒ›ãƒƒãƒ‘ー付ãトロッコã€TNT 付ãトロッコã€ãƒ¬ãƒƒãƒ‰ã‚¹ãƒˆãƒ¼ãƒ³ コンパレーターã€é‡é‡æ„ŸçŸ¥æ¿ã€ãƒ“ーコンã€ãƒˆãƒ©ãƒƒãƒ— ãƒã‚§ã‚¹ãƒˆã€ãƒ­ã‚±ãƒƒãƒˆèбç«ã€èбç«ã®æ˜Ÿã€ãƒã‚¶ãƒ¼ スターã€é¦–ã²ã‚‚ã€é¦¬ã‚ˆã‚ã„ã€å札ã€é¦¬ã®ã‚¹ãƒãƒ¼ãƒ³ エッグを追加ã—ã¾ã—ãŸã€‚{*B*} +- æ–°ã—ã„生ã物ã€ã‚¦ã‚£ã‚¶ãƒ¼ã€ã‚¦ã‚£ã‚¶ãƒ¼ スケルトンã€ã‚¦ã‚£ãƒƒãƒã€ã‚³ã‚¦ãƒ¢ãƒªã€é¦¬ã€ãƒ­ãƒã€ãŠã‚ˆã³ãƒ©ãƒã‚’追加ã—ã¾ã—ãŸã€‚{*B*} +- æ–°ã—ã„åœ°å½¢ç”Ÿæˆæ©Ÿèƒ½ã€ã‚¦ã‚£ãƒƒãƒã®å°å±‹ã‚’追加ã—ã¾ã—ãŸã€‚{*B*} +- ビーコンã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを追加ã—ã¾ã—ãŸã€‚{*B*} +- 馬ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを追加ã—ã¾ã—ãŸã€‚{*B*} +- ホッパーã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを追加ã—ã¾ã—ãŸã€‚{*B*} +- 花ç«ã‚’追加ã—ã¾ã—ãŸã€‚花ç«ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã«ã¯ã€èбç«ã®æ˜Ÿã¾ãŸã¯ãƒ­ã‚±ãƒƒãƒˆèбç«ã‚’作るãŸã‚ã®ææ–™ã‚’æ‰€æŒã—ã¦ã„ã‚‹å ´åˆã€ä½œæ¥­å°ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚{*B*} +- 「アドベンãƒãƒ£ãƒ¼ モードã€ã‚’追加ã—ã¾ã—ãŸã€‚ãƒ–ãƒ­ãƒƒã‚¯ã¯æ­£ã—ã„ツールã§ã®ã¿å£Šã™ã“ã¨ãŒã§ãã¾ã™ã€‚{*B*} +- æ–°ã—ã„サウンドを多数追加ã—ã¾ã—ãŸã€‚{*B*} +- 生ã物ã€ã‚¢ã‚¤ãƒ†ãƒ ã€ç™ºå°„物もã€ãƒãƒ¼ã‚¿ãƒ«ã‚’通れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚{*B*} +- ãƒªãƒ”ãƒ¼ã‚¿ãƒ¼ã«æ¨ªã‹ã‚‰åˆ¥ã®ãƒªãƒ”ーターã§é›»æºã‚’é€ã‚‹ã“ã¨ã§ã€ãƒ­ãƒƒã‚¯ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚{*B*} +- ゾンビã¨ã‚¹ã‚±ãƒ«ãƒˆãƒ³ã¯ç•°ãªã£ãŸæ­¦å™¨ã¨é˜²å…·ã‚’装備ã—ã¦å‡ºç¾ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚{*B*} +- æ–°ã—ã„ゲームオーãƒãƒ¼ メッセージ。{*B*} +- åæœ­ã‚’使ã£ã¦ç”Ÿã物ã«åå‰ã‚’付ã‘ãŸã‚Šã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’é–‹ã„ãŸçŠ¶æ…‹ã§å…¥ã‚Œç‰©ã®åå‰ã‚’変ãˆã¦ã‚¿ã‚¤ãƒˆãƒ«ã‚’変更ã—ã¾ã™ã€‚{*B*} +- 骨粉を使ã£ã¦ã‚‚ã™ã¹ã¦ãŒçž¬æ™‚ã«æˆé•·ã—ãªããªã‚Šã¾ã—ãŸã€‚æˆé•·ã¯ãƒ©ãƒ³ãƒ€ãƒ ã«æ®µéšŽçš„ã«ãªã‚Šã¾ã™ã€‚{*B*} +- ãƒã‚§ã‚¹ãƒˆã€èª¿åˆå°ã€ç™ºå°„装置ã€ã‚¸ãƒ¥ãƒ¼ã‚¯ãƒœãƒƒã‚¯ã‚¹ã®ä¸­èº«ã‚’示ã™ãƒ¬ãƒƒãƒ‰ã‚¹ãƒˆãƒ¼ãƒ³ä¿¡å·ã¯ã€ãƒ¬ãƒƒãƒ‰ã‚¹ãƒˆãƒ¼ãƒ³ コンパレーターをãã¡ã‚‰ã«å‘ã‘ã¦ç›´æŽ¥è¨­ç½®ã™ã‚Œã°æ¤œå‡ºã§ãã¾ã™ã€‚{*B*} +- 発射装置ã¯ã©ã®æ–¹å‘ã«ã‚‚å‘ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚{*B*} +- 金ã®ãƒªãƒ³ã‚´ã‚’食ã¹ã‚‹ã¨ã€ãƒ—レイヤーã¯çŸ­æ™‚é–“ã€è¿½åŠ ã®ã€Œå¸åŽã€HP ã‚’ç²å¾—ã§ãã¾ã™ã€‚{*B*} +- 一定ã®ã‚¨ãƒªã‚¢ã«é•·ãã„れã°ã„ã‚‹ã»ã©ã€ãã®ã‚¨ãƒªã‚¢ã§å‡ºç¾ã™ã‚‹ãƒ¢ãƒ³ã‚¹ã‚¿ãƒ¼ã®é›£æ˜“度ãŒä¸ŠãŒã‚Šã¾ã™ã€‚{*B*} {*ETB*}よã†ã“ã! ã¾ã ãŠæ°—ã¥ãã§ãªã„ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€Minecraft ãŒã‚¢ãƒƒãƒ—デートã•れã¾ã—ãŸã€‚{*B*}{*B*} ã“ã“ã§ã”紹介ã—ã¦ã„ã‚‹ã®ã¯ã€ãƒ•レンドã¨ä¸€ç·’ã«éŠã¹ã‚‹æ–°æ©Ÿèƒ½ã®ã»ã‚“ã®ä¸€éƒ¨ã§ã™ã€‚よãèª­ã‚“ã§æ¥½ã—ãéŠã‚“ã§ãã ã•ã„!{*B*}{*B*} -{*T1*}新アイテム{*ETB*} - エメラルドã€ã‚¨ãƒ¡ãƒ©ãƒ«ãƒ‰é‰±çŸ³ã€ã‚¨ãƒ¡ãƒ©ãƒ«ãƒ‰ã®ãƒ–ロックã€ã‚¨ãƒ³ãƒ€ãƒ¼ ãƒã‚§ã‚¹ãƒˆã€ãƒˆãƒªãƒƒãƒ—ワイヤー フックã€ã‚¨ãƒ³ãƒãƒ£ãƒ³ãƒˆã—ãŸé‡‘ã®ãƒªãƒ³ã‚´ã€é‡‘åºŠã€æ¤æœ¨é‰¢ã€ä¸¸çŸ³ã®å£ã€è‹”ã®ç”ŸãˆãŸä¸¸çŸ³ã®å£ã€ã‚¦ã‚£ã‚¶ãƒ¼ã®çµµã€ã‚¸ãƒ£ã‚¬ã‚¤ãƒ¢ã€ãƒ™ã‚¤ã‚¯ãƒ‰ ãƒãƒ†ãƒˆï½¤æœ‰æ¯’ãªã‚¸ãƒ£ã‚¬ã‚¤ãƒ¢ã€ãƒ‹ãƒ³ã‚¸ãƒ³ã€é‡‘ã®ãƒ‹ãƒ³ã‚¸ãƒ³ã€æ£’付ãã®ãƒ‹ãƒ³ã‚¸ãƒ³ã€ -パンプキン ãƒ‘ã‚¤ã€æš—視ã®ãƒãƒ¼ã‚·ãƒ§ãƒ³ã€ä¸å¯è¦–ã®ãƒãƒ¼ã‚·ãƒ§ãƒ³ã€é—‡ã®ã‚¯ã‚©ãƒ¼ãƒ„ã€é—‡ã®ã‚¯ã‚©ãƒ¼ãƒ„鉱石ã€ã‚¯ã‚©ãƒ¼ãƒ„ã®ãƒ–ロックã€ã‚¯ã‚©ãƒ¼ãƒ„ã®åŽšæ¿ã€ã‚¯ã‚©ãƒ¼ãƒ„ã®éšŽæ®µã€æ¨¡æ§˜å…¥ã‚Šã®ã‚¯ã‚©ãƒ¼ãƒ„ã®ãƒ–ãƒ­ãƒƒã‚¯ã€æŸ±çжã®ã‚¯ã‚©ãƒ¼ãƒ„ã®ãƒ–ロックã€ã‚¨ãƒ³ãƒãƒ£ãƒ³ãƒˆã—ãŸæœ¬ã€ã‚«ãƒ¼ãƒšãƒƒãƒˆã€‚{*B*}{*B*} - {*T1*}æ–°ã—ã„生物{*ETB*} - æ‘人ゾンビ。{*B*}{*B*} -{*T1*}新機能{*ETB*} - æ‘人ã¨ã®å–引ã€é‡‘床ã§ã®æ­¦å™¨ã¨é“å…·ã®ä¿®ç†ã¾ãŸã¯ã‚¨ãƒ³ãƒãƒ£ãƒ³ãƒˆã€ã‚¨ãƒ³ãƒ€ãƒ¼ ãƒã‚§ã‚¹ãƒˆã«ã‚¢ã‚¤ãƒ†ãƒ ã‚’ä¿ç®¡ã€æ£’付ãニンジンを使ã£ã¦ä¹—ã£ãŸè±šã®æ“縦!{*B*}{*B*} -{*T1*}æ–°ã—ã„ミニãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«{*ETB*} ? ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã®æ–°æ©Ÿèƒ½ã‚’紹介!{*B*}{*B*} -{*T1*}æ–°ã—ã„「イースター エッグã€{*ETB*} ? ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã®ç§˜å¯†ã®éŸ³æ¥½ãƒ‡ã‚£ã‚¹ã‚¯ã‚’移動ã—ã¾ã—ãŸã€‚ã‚‚ã†ä¸€åº¦è¦‹ã¤ã‘出ã—ã¦ã¿ã¾ã—ょã†!{*B*}{*B*} - +{*T1*}新アイテム{*ETB*} - 堅焼ã粘土ã€è‰²ä»˜ã粘土ã€çŸ³ç‚­ã®ãƒ–ロックã€å¹²ã—è‰ã®ä¿µã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ã‚¿ãƒ¼ レールã€ãƒ¬ãƒƒãƒ‰ã‚¹ãƒˆãƒ¼ãƒ³ã®ãƒ–ãƒ­ãƒƒã‚¯ã€æ—¥ç…§ã‚»ãƒ³ã‚µãƒ¼ã€ãƒ‰ãƒ­ãƒƒãƒ‘ーã€ãƒ›ãƒƒãƒ‘ーã€ãƒ›ãƒƒãƒ‘ー付ãトロッコã€TNT 付ãトロッコã€ãƒ¬ãƒƒãƒ‰ã‚¹ãƒˆãƒ¼ãƒ³ コンパレーターã€é‡é‡æ„ŸçŸ¥æ¿ã€ãƒ“ーコンã€ãƒˆãƒ©ãƒƒãƒ— ãƒã‚§ã‚¹ãƒˆã€ãƒ­ã‚±ãƒƒãƒˆèбç«ã€èбç«ã®æ˜Ÿã€ãƒã‚¶ãƒ¼ スターã€é¦–ã²ã‚‚ã€é¦¬ã‚ˆã‚ã„ã€å札ã€é¦¬ã®ã‚¹ãƒãƒ¼ãƒ³ エッグ{*B*}{*B*} + {*T1*}æ–°ã—ã„生ã物{*ETB*} - ウィザーã€ã‚¦ã‚£ã‚¶ãƒ¼ スケルトンã€ã‚¦ã‚£ãƒƒãƒã€ã‚³ã‚¦ãƒ¢ãƒªã€é¦¬ã€ãƒ­ãƒã€ãŠã‚ˆã³ãƒ©ãƒ{*B*}{*B*} +{*T1*}新機能{*ETB*} - é¦¬ã®æ‰‹ãªã¥ã‘ã¨é¨Žä¹—ã€èбç«ã®ä½œè£½ã¨ã‚·ãƒ§ãƒ¼ã®å‚¬ã—ã€å札ã«ã‚ˆã‚‹å‹•物ã¨ãƒ¢ãƒ³ã‚¹ã‚¿ãƒ¼ã®å付ã‘ã€ã•らã«é«˜åº¦ãªãƒ¬ãƒƒãƒ‰ã‚¹ãƒˆãƒ¼ãƒ³å›žè·¯ã®ä½œæˆã€ãã—ã¦æ–°ã—ã„ホスト オプションã«ã‚ˆã‚‹è‡ªä¸–界ã§ã‚²ã‚¹ãƒˆãŒã§ãã‚‹ã“ã¨ã®ç®¡ç†!{*B*}{*B*} +{*T1*}æ–°ã—ã„ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«{*ETB*} ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã§æ–°æ—§æ©Ÿèƒ½ã®ä½¿ã„方を学ã³ã¾ã—ょã†ã€‚世界ã«éš ã•れãŸç§˜å¯†ã®éŸ³æ¥½ãƒ‡ã‚£ã‚¹ã‚¯ã‚’ã™ã¹ã¦è¦‹ã¤ã‘られるã§ã—ょã†ã‹ã€‚{*B*}{*B*} + + +馬 + +{*T3*}ä½¿ã„æ–¹: 馬{*ETW*}{*B*}{*B*} +馬ã¨ãƒ­ãƒã¯ã€ä¸»ã«è‰åŽŸã§è¦‹ã‚‰ã‚Œã¾ã™ã€‚ラãƒã¯ãƒ­ãƒã¨é¦¬ã‹ã‚‰ç”Ÿã¾ã‚Œã¾ã™ãŒã€ãれ自体ã§ã¯ç¹æ®–ã—ã¾ã›ã‚“。{*B*} +馬ã€ãƒ­ãƒã€ãƒ©ãƒã®æˆä½“ã«ã¯ä¹—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—ã€ã‚ˆã‚ã„ã‚’ç€ã‘られるã®ã¯é¦¬ã®ã¿ã§ã€ã‚¢ã‚¤ãƒ†ãƒ ã‚’é‹ã¶ãŸã‚ã«éžè¢‹ã‚’ç€ã‘られるã®ã¯ãƒ­ãƒã¨ãƒ©ãƒã®ã¿ã§ã™ã€‚{*B*}{*B*} +馬ã€ãƒ­ãƒã€ãƒ©ãƒã‚’利用ã™ã‚‹ã«ã¯ã€æœ€åˆã«æ‰‹ãªãšã‘ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚騎乗ã—ã¦ã€æŒ¯ã‚Šè½ã¨ã•れãã†ã«ãªã£ã¦ã‚‚乗り続ã‘ã‚‹ã¨ã€æ‰‹ãªãšã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚{*B*} +馬ã®å‘¨ã‚Šã«ãƒãƒ¼ãƒˆãŒè¡¨ç¤ºã•ã‚Œã‚‹ã¨æ‰‹ãªãšã‘完了ã§ã€ä»¥é™ã¯ãƒ—レイヤーを振りè½ã¨ã•ãªããªã‚Šã¾ã™ã€‚ 馬をæ“縦ã™ã‚‹ã«ã¯éžã‚’ç½®ãå¿…è¦ãŒã‚りã¾ã™ã€‚{*B*}{*B*} +éžã¯æ‘人ã‹ã‚‰è³¼å…¥ã™ã‚‹ã€ã¾ãŸã¯ä¸–界ã®ä¸­ã«éš ã•れãŸãƒã‚§ã‚¹ãƒˆå†…ã«è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚{*B*} +手ãªãšã‘ãŸãƒ­ãƒã¨ãƒ©ãƒã«ãƒã‚§ã‚¹ãƒˆã‚’装ç€ã™ã‚Œã°éžè¢‹ã‚’背負ã‚ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®éžè¢‹ã«ã¯ã€é¨Žä¹—ã¾ãŸã¯ã—ã®ã³è¶³ã—ã¦ã„ã‚‹é–“ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚{*B*}{*B*} +馬ã¨ãƒ­ãƒ (ラãƒã¯é™¤ã) ã¯ã€ä»–ã®å‹•物ã¨åŒæ§˜ã«é‡‘ã®ãƒªãƒ³ã‚´ã¾ãŸã¯é‡‘ã®ãƒ‹ãƒ³ã‚¸ãƒ³ã‚’使ã£ã¦ç¹æ®–ã•ã›ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚{*B*} +å­é¦¬ã‚„å­ãƒ­ãƒã¯æ™‚é–“ã®çµŒéŽã¨ã¨ã‚‚ã«æˆé•·ã—ã¾ã™ãŒã€å°éº¦ã¾ãŸã¯å¹²ã—è‰ã‚’与ãˆã‚Œã°æˆé•·ãŒæ—©ã¾ã‚Šã¾ã™ã€‚{*B*} + + +ビーコン + +{*T3*}ä½¿ã„æ–¹: ビーコン{*ETW*}{*B*}{*B*} +アクティブãªãƒ“ーコンã¯ã€æ˜Žã‚‹ã„å…‰ç·šã‚’ç©ºã¸æ”¾ã¡ã€è¿‘ãã«ã„るプレイヤーã«ãƒ‘ワーを与ãˆã¾ã™ã€‚{*B*} +作るã«ã¯ã€ã‚¬ãƒ©ã‚¹ã€é»’曜石ã€ã‚¦ã‚£ã‚¶ãƒ¼ã‚’倒ã™ã“ã¨ã§æ‰‹ã«å…¥ã‚‹ãƒã‚¶ãƒ¼ スターを使ã„ã¾ã™ã€‚{*B*}{*B*} +ビーコンã¯ã€æ—¥ä¸­ã«æ—¥å…‰ãŒå½“ãŸã‚‹å ´æ‰€ã«é…ç½®ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã€ãƒ“ーコンã¯é‰„ã€é‡‘ã€ã‚¨ãƒ¡ãƒ©ãƒ«ãƒ‰ã€ã¾ãŸã¯ãƒ€ã‚¤ãƒ¤ãƒ¢ãƒ³ãƒ‰ã®ãƒ”ラミッドã®ä¸Šã«é…ç½®ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚{*B*} +ã©ã®å»ºæä¸Šã«ãƒ“ーコンをé…ç½®ã™ã‚‹ã‹ã¯ã€ãƒ“ーコンã®ãƒ‘ワーã«å½±éŸ¿ã—ã¾ã›ã‚“。{*B*}{*B*} +ビーコン メニューã§ã€ãƒ“ーコンã®ãƒ—ライマリ パワーを 1 ã¤é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ピラミッドã®éšŽå±¤ãŒå¢—ãˆã‚‹ã»ã©ã€ãƒ‘ワーã®é¸æŠžè‚¢ãŒå¢—ãˆã¾ã™ã€‚{*B*} +å°‘ãªãã¨ã‚‚ 4 段以上ã®ãƒ”ラミッド上ã«é…ç½®ã•れãŸãƒ“ーコンã§ã¯ã€ã€Œå›žå¾©ã€ã®ã‚»ã‚«ãƒ³ãƒ€ãƒª パワーã‹ã€ã•らã«å¼·åŠ›ãªãƒ—ライマリ ãƒ‘ãƒ¯ãƒ¼ã‚‚é¸æŠžå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚{*B*}{*B*} +ビーコンã®ãƒ‘ワーを設定ã™ã‚‹ã«ã¯ã€æ”¯æ‰•ã„スロットã§ã‚¨ãƒ¡ãƒ©ãƒ«ãƒ‰ã€ãƒ€ã‚¤ãƒ¤ãƒ¢ãƒ³ãƒ‰ã€é‡‘ã¾ãŸã¯é‰„ã®ã‚¤ãƒ³ã‚´ãƒƒãƒˆã®ã„ãšã‚Œã‹ã‚’消費ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。{*B*} +è¨­å®šãŒæ¸ˆã‚€ã¨ã€ãƒ“ーコンã‹ã‚‰ã®ãƒ‘ワーã¯ç„¡é™ã«ç™ºã›ã‚‰ã‚Œã¾ã™ã€‚{*B*} + + +èŠ±ç« + +{*T3*}ä½¿ã„æ–¹: 花ç«{*ETW*}{*B*}{*B*} +花ç«ã¯è£…飾アイテムã§ã€æ‰‹å‹•ã€ã¾ãŸã¯ç™ºå°„装置ã‹ã‚‰æ‰“ã¡ä¸Šã’ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚作るã«ã¯ã€ç´™ã€ç«è–¬ã€ã‚ªãƒ—ションã¨ã—ã¦æ•°ã€…ã®èбç«ã®æ˜Ÿã‚’使用ã—ã¾ã™ã€‚{*B*} +花ç«ã®æ˜Ÿã®è‰²ã€è‰²å¤‰åŒ–ã€å½¢çжã€ã‚µã‚¤ã‚ºã€åŠ¹æžœ (例: 光跡ã€ç‚¹æ»…) ã¯ã€ä½œæˆæ™‚ã«è¿½åŠ ã®ææ–™ã‚’å«ã‚ã‚‹ã“ã¨ã§ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã§ãã¾ã™ã€‚{*B*}{*B*} +花ç«ã‚’作るã«ã¯ã€ç«è–¬ã¨ç´™ã‚’æŒã¡ç‰©ã®ä¸Šã«è¡¨ç¤ºã•れる 3x3 ã®ã‚¯ãƒ©ãƒ•ト グリッドã«ç½®ãã¾ã™ã€‚{*B*} +オプションã¨ã—ã¦ã€ã‚¯ãƒ©ãƒ•ト グリッド上ã«è¤‡æ•°ã®èбç«ã®æ˜Ÿã‚’ç½®ã„ã¦ã€èбç«ã«åŠ ãˆã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚{*B*} +クラフト グリッドã®ã‚¹ãƒ­ãƒƒãƒˆã«ç½®ãç«è–¬ãŒå¤šããªã‚Œã°ã€èбç«ã®æ˜Ÿã¯ã‚ˆã‚Šé«˜ã„ä½ç½®ã§ç ´è£‚ã—ã¾ã™ã€‚{*B*}{*B*} +作ã£ãŸèбç«ã¯ã€å–り出ã—å£ã‹ã‚‰å–り出ã›ã¾ã™ã€‚{*B*}{*B*} +花ç«ã®æ˜Ÿã¯ã€ç«è–¬ã¨æŸ“料をクラフト グリッドã«ç½®ãã¨ä½œã‚Œã¾ã™ã€‚{*B*} + - 染料ã¯ã€èбç«ã®æ˜ŸãŒç ´è£‚ã™ã‚‹éš›ã®è‰²ã‚’設定ã—ã¾ã™ã€‚{*B*} + - 花ç«ã®æ˜Ÿã®å½¢çжã¯ã€ç™ºç«å‰¤ã€é‡‘塊ã€ç¾½æ ¹ã€ã¾ãŸã¯ç”Ÿã物ã®ãƒ˜ãƒƒãƒ‰ã‚’追加ã™ã‚‹ã“ã¨ã§è¨­å®šã—ã¾ã™ã€‚{*B*} + - 光跡や点滅ã¯ã€ãƒ€ã‚¤ãƒ¤ãƒ¢ãƒ³ãƒ‰ã¾ãŸã¯ã‚°ãƒ­ã‚¦ã‚¹ãƒˆãƒ¼ãƒ³ã®ç²‰ã‚’使ã†ã“ã¨ã§è¿½åŠ ã§ãã¾ã™ã€‚{*B*}{*B*} +花ç«ã®æ˜Ÿã‚’作ã£ãŸå¾Œã€ã•ã‚‰ã«æŸ“料を加ãˆã‚‹ã“ã¨ã§ã€èбç«ã®æ˜Ÿã®è‰²å¤‰åŒ–を決ã‚ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ + + +ホッパー + +{*T3*}ä½¿ã„æ–¹: ホッパー{*ETW*}{*B*}{*B*} +ホッパーã¯ã€å…¥ã‚Œç‰©ã«ã‚¢ã‚¤ãƒ†ãƒ ã‚’出ã—入れã™ã‚‹ãŸã‚ã«ã€ã¾ãŸã€ãã®ä¸Šã«æŠ•ã’られãŸã‚¢ã‚¤ãƒ†ãƒ ã‚’è‡ªå‹•çš„ã«æ‹¾ã†ã®ã«ä½¿ã„ã¾ã™ã€‚{*B*} +ホッパーã¯èª¿åˆå°ã€ãƒã‚§ã‚¹ãƒˆã€ç™ºå°„装置ã€ãƒ‰ãƒ­ãƒƒãƒ‘ーã€ãƒã‚§ã‚¹ãƒˆä»˜ãトロッコã€ãƒ›ãƒƒãƒ‘ー付ãトロッコã€ãŠã‚ˆã³ä»–ã®ãƒ›ãƒƒãƒ‘ーã«å¯¾ã—ã¦ä½œç”¨ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚{*B*}{*B*} +ホッパーã¯ã€ãã®ä¸Šã«ä½ç½®ã™ã‚‹é©åˆ‡ãªå…¥ã‚Œç‰©ã‹ã‚‰ã‚¢ã‚¤ãƒ†ãƒ ã‚’å¸ã„出ã—ç¶šã‘ã¾ã™ã€‚ã¾ãŸã€ä¿ç®¡ã•れãŸã‚¢ã‚¤ãƒ†ãƒ ã‚’出力先ã®å…¥ã‚Œç‰©ã«æ ¼ç´ã—よã†ã¨ã—ã¾ã™ã€‚{*B*} +レッドストーンãŒé›»æºã®å ´åˆã€ãƒ›ãƒƒãƒ‘ーã¯éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã‚Šã€ã‚¢ã‚¤ãƒ†ãƒ ã®å¸ã„出ã—ã‚‚æ ¼ç´ã‚‚åœæ­¢ã—ã¾ã™ã€‚{*B*}{*B*} +ホッパーã¯å‘ã„ã¦ã„ã‚‹æ–¹å‘ã«ã‚¢ã‚¤ãƒ†ãƒ ã‚’出ã—ã¾ã™ã€‚ホッパーãŒç‰¹å®šã®ãƒ–ロックã«å‘ãよã†ã«ã™ã‚‹ã«ã¯ã€ãã®ãƒ–ロックã«å‘ã‘ã¦ã—ã®ã³è¶³ã§ãƒ›ãƒƒãƒ‘ーを設置ã—ã¾ã™ã€‚ {*B*} + + +ドロッパー + +{*T3*}ä½¿ã„æ–¹: ドロッパー{*ETW*}{*B*}{*B*} +レッドストーンãŒé›»æºã®å ´åˆã€ãƒ‰ãƒ­ãƒƒãƒ‘ãƒ¼ã¯æ ¼ç´ã—ã¦ã„るアイテムをランダム㫠1 ã¤ã€åœ°ä¸Šã«ãƒ‰ãƒ­ãƒƒãƒ—ã—ã¾ã™ã€‚{*CONTROLLER_ACTION_USE*} を使ã£ã¦ãƒ‰ãƒ­ãƒƒãƒ‘ーを開ãã¨ã€è‡ªåˆ†ã®æŒã¡ç‰©ã‹ã‚‰ã‚¢ã‚¤ãƒ†ãƒ ã‚’ãƒ‰ãƒ­ãƒƒãƒ‘ãƒ¼ã«æŠ•å…¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚{*B*} +ドロッパーãŒãƒã‚§ã‚¹ãƒˆã¾ãŸã¯ä»–ã®ç¨®é¡žã®å…¥ã‚Œç‰©ã«é¢ã—ã¦ã„ã‚‹å ´åˆã€ã‚¢ã‚¤ãƒ†ãƒ ã¯ãƒ‰ãƒ­ãƒƒãƒ‘ーã§ã¯ãªãã€ãã¡ã‚‰ã¸æŠ•å…¥ã•れã¾ã™ã€‚ドロッパーを多数ã¤ãªã’ã¦è¨­ç½®ã™ã‚Œã°ã€é›¢ã‚ŒãŸå ´æ‰€ã¨ã®é–“ã§ã‚¢ã‚¤ãƒ†ãƒ ã‚’é‹ã¹ã¾ã™ã€‚ãã®ã‚ˆã†ã«å‹•作ã•ã›ã‚‹ã«ã¯ã€é›»æºã‚’交互ã«ã‚ªãƒ³ã¨ã‚ªãƒ•ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ + 手よりも攻撃力ãŒé«˜ã„ @@ -503,7 +560,7 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +1 -装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +3 +装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +3。 装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +2 @@ -513,7 +570,7 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +5 -装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +4 +装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +4。 装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +1 @@ -529,17 +586,17 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +5 -装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +3 +装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +3。 装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +1 -装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +3 +装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +3。 装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +8 装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +6 -装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +3 +装備ã™ã‚‹ã¨ã‚¢ãƒ¼ãƒžãƒ¼ãƒã‚¤ãƒ³ãƒˆ +3。 光沢を放ã¤å»¶ã¹æ£’ã€é“å…·ã‚’ä½œã‚‹ææ–™ã¨ã—ã¦ä½¿ã†ã€‚ã‹ã¾ã©ã§é‰±çŸ³ã‚’精錬ã—ã¦ä½œã‚‹ @@ -604,19 +661,45 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ã‚²ãƒ¼ãƒ ã« æ‰‹ã«æŒã£ã¦ã„ã‚‹ã¨ã€æŽ¢ç´¢æ¸ˆã¿ã®ã‚¨ãƒªã‚¢ã®åœ°å›³ã‚’表示ã™ã‚‹ã€‚é“を確èªã™ã‚‹ã®ã«ä½¿ã† +使用ã™ã‚‹ã¨ã€ãƒ—レイヤーã®ä¸–界内ã§ã®ç¾åœ¨ä½ç½®å‘¨è¾ºã®åœ°å›³ã«ãªã‚‹ã€‚探検ã™ã‚‹ã«ã¤ã‚Œã¦å›³é¢ãŒåŸ‹ã¾ã£ã¦ã„ã + 矢を射る攻撃ãŒã§ãã‚‹ 弓ã¨çµ„ã¿åˆã‚ã›ã¦ã€æ­¦å™¨ã¨ã—ã¦ä½¿ã† -2.5{*ICON_SHANK_01*} 回復ã™ã‚‹ +ウィザーãŒè½ã¨ã™ã€‚ビーコンを作るã®ã«ä½¿ã†ã€‚ + +作動ã™ã‚‹ã¨ã€è‰²ã¨ã‚Šã©ã‚Šã®ç«èŠ±ã‚’ä½œã‚Šå‡ºã™ã€‚ãã®è‰²ã€å½¢çжã€è‰²å¤‰åŒ–ã¯ã€èбç«ã‚’作る際ã«ä½¿ã†èбç«ã®æ˜Ÿã«ã‚ˆã£ã¦æ±ºã¾ã‚‹ã€‚ + +花ç«ã®è‰²ã€åŠ¹æžœã€å½¢çŠ¶ã‚’æ±ºã‚ã‚‹ãŸã‚ã«ä½¿ã†ã€‚ + +レッドストーン回路ã§ã€ä¿¡å·å¼·åº¦ã‚’ç¶­æŒã€æ¯”較ã€ã¾ãŸã¯æ¸›ç®—ã—ãŸã‚Šã€ç‰¹å®šã®ãƒ–ロックã®çŠ¶æ…‹ã‚’æ¸¬å®šã—ãŸã‚Šã™ã‚‹ãŸã‚ã«ä½¿ã†ã€‚ + +移動ã™ã‚‹ TNT ブロックã¨ã—ã¦æ©Ÿèƒ½ã™ã‚‹ã€ãƒˆãƒ­ãƒƒã‚³ã®ä¸€ç¨®ã€‚ + +日光 (ã¾ãŸã¯ãã®ä¸è¶³) ã«å¿œã˜ã¦ãƒ¬ãƒƒãƒ‰ã‚¹ãƒˆãƒ¼ãƒ³ä¿¡å·ã‚’出力ã™ã‚‹ãƒ–ロック。 + +ホッパーã¨åŒã˜ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ç‰¹åˆ¥ãªç¨®é¡žã®ãƒˆãƒ­ãƒƒã‚³ã€‚軌é“上ã«è½ã¡ã¦ã„るアイテムやã€ä¸Šã«ä½ç½®ã™ã‚‹å…¥ã‚Œç‰©ã‹ã‚‰ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’åŽé›†ã™ã‚‹ã€‚ + +馬ã«è£…ç€ã§ãる特別ãªç¨®é¡žã®é˜²å…·ã€‚防御力 +5。 + +馬ã«è£…ç€ã§ãる特別ãªç¨®é¡žã®é˜²å…·ã€‚防御力 +7。 + +馬ã«è£…ç€ã§ãる特別ãªç¨®é¡žã®é˜²å…·ã€‚防御力 +11。 + +生ã物をプレイヤーã¾ãŸã¯ãƒ•ã‚§ãƒ³ã‚¹ã®æŸ±ã«ã¤ãªããŸã‚ã«ä½¿ã†ã€‚ + +世界内ã®ç”Ÿã物ã«åå‰ã‚’ã¤ã‘ã‚‹ã®ã«ä½¿ã†ã€‚ + +2.5{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚ -1{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚6 回ã¾ã§ä½¿ç”¨ã§ãã‚‹ +1{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚6 回ã¾ã§ä½¿ç”¨ã§ãる。 -1{*ICON_SHANK_01*} 回復ã™ã‚‹ +1{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚ -1{*ICON_SHANK_01*} 回復ã™ã‚‹ +1{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚ -3{*ICON_SHANK_01*} 回復ã™ã‚‹ +3{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚ 1{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚ã‹ã¾ã©ã§èª¿ç†ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã€‚ç—…æ°—ã«ãªã‚‹å ´åˆã‚‚ã‚ã‚‹ @@ -634,7 +717,7 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠2.5{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚生魚をã‹ã¾ã©ã§èª¿ç†ã™ã‚‹ã¨ã§ãã‚‹ -2{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚金ã®ãƒªãƒ³ã‚´ã®ææ–™ã¨ãªã‚‹ +2{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚金ã®ãƒªãƒ³ã‚´ã®ææ–™ã¨ãªã‚‹ã€‚ 2{*ICON_SHANK_01*} 回復ã—ã€ã•ら㫠HP ㌠4 ç§’é–“ã€è‡ªå‹•回復ã™ã‚‹ã€‚リンゴã¨é‡‘ã®å¡Šã‹ã‚‰ä½œã‚‹ @@ -659,7 +742,7 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠電æºãŒå…¥ã£ã¦ã„る時ã€ä¸Šã‚’走るトロッコを加速ã•ã›ã‚‹ã€‚é›»æºãŒå…¥ã£ã¦ã„ãªã„時ã¯ã€ä¸Šã§ãƒˆãƒ­ãƒƒã‚³ãŒæ­¢ã¾ã‚‹ -トロッコ専用ã®é‡é‡æ„ŸçŸ¥æ¿ã¨ã—ã¦æ©Ÿèƒ½ã™ã‚‹ã€‚é›»æºãŒå…¥ã£ã¦ã„る時ã«ãƒ¬ãƒƒãƒ‰ã‚¹ãƒˆãƒ¼ãƒ³ã®ä¿¡å·ã‚’é€ã‚‹ +トロッコ専用ã®é‡é‡æ„ŸçŸ¥æ¿ã¨ã—ã¦æ©Ÿèƒ½ã™ã‚‹ã€‚é›»æºãŒå…¥ã£ã¦ã„る時ã«ãƒ¬ãƒƒãƒ‰ã‚¹ãƒˆãƒ¼ãƒ³ã®ä¿¡å·ã‚’é€ã‚‹ã€‚ プレイヤーや動物ã€ãƒ¢ãƒ³ã‚¹ã‚¿ãƒ¼ã‚’ä¹—ã›ã¦ã€ãƒ¬ãƒ¼ãƒ«ã®ä¸Šã‚’移動ã§ãã‚‹ @@ -716,7 +799,7 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠本や地図を作るã®ã«ä½¿ã† -本棚を作るã®ã«ä½¿ã£ãŸã‚Šã€ã‚¨ãƒ³ãƒãƒ£ãƒ³ãƒˆã—ã¦ã‚¨ãƒ³ãƒãƒ£ãƒ³ãƒˆã—ãŸæœ¬ã‚’作るãŸã‚ã«ä½¿ã† +本棚を作るã®ã«ä½¿ã£ãŸã‚Šã€ã‚¨ãƒ³ãƒãƒ£ãƒ³ãƒˆã—ã¦ã‚¨ãƒ³ãƒãƒ£ãƒ³ãƒˆã—ãŸæœ¬ã‚’作るãŸã‚ã«ä½¿ã†ã€‚ エンãƒãƒ£ãƒ³ãƒˆãƒ†ãƒ¼ãƒ–ルã®å‘¨å›²ã«ç½®ã„ã¦ã€ã‚ˆã‚Šå¼·åŠ›ãªã‚¨ãƒ³ãƒãƒ£ãƒ³ãƒˆã‚’作る @@ -932,100 +1015,158 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠ヘッド類ã¯é£¾ã‚Šä»˜ã‘ã¨ã—ã¦ä¸¦ã¹ãŸã‚Šã€ãƒ˜ãƒ«ãƒ¡ãƒƒãƒˆã®ã‚¹ãƒ­ãƒƒãƒˆã‹ã‚‰ãƒžã‚¹ã‚¯ã¨ã—ã¦ç€ç”¨ã‚‚ã§ãã‚‹ +コマンドを実行ã™ã‚‹ã®ã«ä½¿ã†ã€‚ + +空ã«å‘ã‘ã¦å…‰ç·šã‚’放ã¡ã€ä»˜è¿‘ã®ãƒ—レイヤーã«ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹åŠ¹æžœã‚’ã‚‚ãŸã‚‰ã™ã“ã¨ãŒã§ãる。 + +中ã«ãƒ–ロックã¨ã‚¢ã‚¤ãƒ†ãƒ ã‚’ä¿ç®¡ã™ã‚‹ã€‚2 ã¤ã®ãƒã‚§ã‚¹ãƒˆã‚’隣åŒå£«ã«ç½®ãã¨ã€å®¹é‡ 2 å€ã®å¤§ããªãƒã‚§ã‚¹ãƒˆã‚’作るã“ã¨ãŒã§ãる。トラップ ãƒã‚§ã‚¹ãƒˆã¯é–‹ã„ãŸæ™‚ã«ã€ãƒ¬ãƒƒãƒ‰ã‚¹ãƒˆãƒ¼ãƒ³é›»æºã‚‚供給ã™ã‚‹ã€‚ + +レッドストーンã«ã‚ˆã‚‹é›»æºã‚’供給ã™ã‚‹ã€‚æ¿ä¸Šã®ã‚¢ã‚¤ãƒ†ãƒ ãŒå¤šã„ã»ã©ã€ãƒãƒ£ãƒ¼ã‚¸ã¯å¼·åŠ›ã«ãªã‚‹ã€‚ + +レッドストーンã«ã‚ˆã‚‹é›»æºã‚’供給ã™ã‚‹ã€‚æ¿ä¸Šã®ã‚¢ã‚¤ãƒ†ãƒ ãŒå¤šã„ã»ã©ã€ãƒãƒ£ãƒ¼ã‚¸ã¯å¼·åŠ›ã«ãªã‚‹ã€‚è»½é‡æ¿ã‚ˆã‚Šã‚‚é‡ã•ã‚’å¿…è¦ã¨ã™ã‚‹ã€‚ + +レッドストーン電æºã¨ã—ã¦ä½¿ã†ã€‚レッドストーンã«ä½œã‚Šæˆ»ã™ã“ã¨ãŒã§ãる。 + +アイテムã®å—ã‘å–りã€ã¾ãŸã¯å…¥ã‚Œç‰©ã‹ã‚‰ã®ã‚¢ã‚¤ãƒ†ãƒ ã®å‡ºã—入れã«ä½¿ã‚れる。 + +レールã®ä¸€ç¨®ã€‚ホッパー付ãトロッコを有効ã¾ãŸã¯ç„¡åйã«ã—ãŸã‚Šã€TNT 付ãトロッコを動作ã•ã›ãŸã‚Šã§ãる。 + +アイテムをä¿ç®¡ã¾ãŸã¯è½ã¨ã™ã®ã«ä½¿ã‚れる。レッドストーン電æºãŒã‚ã‚‹å ´åˆã«ã¯ã€ä»–ã®å…¥ã‚Œç‰©ã¸ã‚¢ã‚¤ãƒ†ãƒ ã‚’ç§»ã™ã®ã«ã‚‚使ãˆã‚‹ã€‚ + +カラフルãªãƒ–ロック。堅焼ã粘土を染色ã—ã¦ä½œã‚‹ã€‚ + +馬ã€ãƒ­ãƒã€ã¾ãŸã¯ãƒ©ãƒã«é¤Œã¨ã—ã¦ä¸Žãˆã‚‹ã“ã¨ãŒã§ãã€10 ãƒãƒ¼ãƒˆã¾ã§å›žå¾©ã•ã›ã‚‹ã€‚å­é¦¬ã‚„å­ãƒ­ãƒã®æˆé•·ã‚’æ—©ã‚る効果もã‚る。 + +ã‹ã¾ã©ã®ä¸­ã§ç²˜åœŸã‚’精錬ã—ã¦ä½œã‚‰ã‚Œã‚‹ã€‚ + +ã‚¬ãƒ©ã‚¹ã¨æŸ“æ–™ã‹ã‚‰ä½œã‚‰ã‚Œã‚‹ã€‚ + +ステンドグラスã‹ã‚‰ä½œã‚‰ã‚Œã‚‹ã€‚ + +木炭をä¿ç®¡ã™ã‚‹ã®ã«ä½¿ãˆã‚‹ã€‚ã‹ã¾ã©ã§ç‡ƒæ–™ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ + イカ - + 倒ã™ã¨å¢¨è¢‹ã‚’è½ã¨ã™ - + 牛 - + 倒ã™ã¨é©ã‚’è½ã¨ã™ã€‚ãƒã‚±ãƒ„ãŒã‚れã°ãƒŸãƒ«ã‚¯ã‚‚å–れる - + 羊 - + 毛を刈るã¨ãウールをè½ã¨ã™ (æ¯›ãŒæ®‹ã£ã¦ã„ã‚‹å ´åˆ)。ウールã¯ã„ã‚ã„ã‚ãªè‰²ã«æŸ“ã‚られる - + ニワトリ - + 倒ã™ã¨ç¾½æ ¹ã‚’è½ã¨ã™ã€‚タマゴをæŒã£ã¦ã„ã‚‹å ´åˆã‚‚ã‚ã‚‹ - + 豚 - + 倒ã™ã¨è±šè‚‰ã‚’è½ã¨ã™ã€‚éžãŒã‚れã°ä¹—ã‚‹ã“ã¨ã‚‚ã§ãã‚‹ - + オオカミ - + 普段ã¯ãŠã¨ãªã—ã„ãŒã€æ”»æ’ƒã™ã‚‹ã¨åæ’ƒã—ã¦ãる。骨を使ã†ã¨æ‰‹ãªãšã‘ã‚‹ã“ã¨ãŒã§ãã€ãƒ—レイヤーã«ã¤ã„ã¦å›žã£ã¦ã€ãƒ—レイヤーを攻撃ã—ã¦ãる敵を攻撃ã—ã¦ãれる - + Creeper - + è¿‘ã¥ãã™ãŽã‚‹ã¨çˆ†ç™ºã™ã‚‹! - + ガイコツ - + 矢を放ã£ã¦ãる。倒ã™ã¨çŸ¢ã‚’è½ã¨ã™ - + クモ - + è¿‘ã¥ãã¨æ”»æ’ƒã—ã¦ãる。å£ã‚’登るã“ã¨ãŒã§ãる。倒ã™ã¨ç³¸ã‚’è½ã¨ã™ - + ゾンビ - + è¿‘ã¥ãã¨æ”»æ’ƒã—ã¦ãã‚‹ - + ゾンビ Pigman - + 最åˆã¯ãŠã¨ãªã—ã„ãŒã€1 匹を攻撃ã™ã‚‹ã¨é›†å›£ã§åæ’ƒã—ã¦ãã‚‹ - + Ghast - + 当ãŸã‚‹ã¨çˆ†ç™ºã™ã‚‹ç«ã®çŽ‰ã‚’æ”¾ã£ã¦ãã‚‹ - + スライム - + ダメージを与ãˆã‚‹ã¨ã€å°ã•ãªã‚¹ãƒ©ã‚¤ãƒ ã«åˆ†è£‚ã™ã‚‹ - + Enderman - + 照準をå‘ã‘ã‚‹ã¨æ”»æ’ƒã—ã¦ãる。ブロックを移動ã§ãã‚‹ - + Silverfish - + 攻撃ã™ã‚‹ã¨ã€è¿‘ãã«éš ã‚Œã¦ã„ã‚‹ Silverfish も集ã¾ã£ã¦ãる。石ブロックã®ä¸­ã«éš ã‚Œã¦ã„ã‚‹ - + 洞窟グモ - + ç‰™ã«æ¯’ãŒã‚ã‚‹ - + Mooshroom - + 空ã®ãŠã‚んを使ã†ã¨ãã®ã“ã‚·ãƒãƒ¥ãƒ¼ãŒæŽ¡ã‚Œã‚‹ã€‚ãƒã‚µãƒŸã§æ¯›åˆˆã‚Šã‚’ã™ã‚‹ã¨ãã®ã“ã‚’è½ã¨ã™ãŒã€æ™®é€šã®ç‰›ã«ãªã£ã¦ã—ã¾ã† - + スノー ゴーレム - + 雪ブロックã¨ã‚«ãƒœãƒãƒ£ã§ä½œã‚Œã‚‹ã‚´ãƒ¼ãƒ¬ãƒ ã€‚作ã£ãŸäººã®æ•µã«å‘ã‹ã£ã¦é›ªçŽ‰ã‚’æŠ•ã’ã¤ã‘ã‚‹ - + エンダー ドラゴン - + æžœã¦ã®ä¸–界ã«å­˜åœ¨ã™ã‚‹å¤§ããªé»’竜 - + Blaze - + 暗黒界ã«å‡ºç¾ã™ã‚‹æ•µã€‚ä¸»ã«æš—黒砦内ã«ã„る。倒ã™ã¨ Blaze ロッドをè½ã¨ã™ - + マグマ キューブ - + 暗黒界ã«å‡ºç¾ã™ã‚‹ã€‚Slime åŒæ§˜ã€å€’ã™ã¨å°ã•㪠Lava Slime ã«åˆ†è£‚ã™ã‚‹ - + æ‘人 - + ヤマãƒã‚³ - + ジャングルã«ç”Ÿæ¯ã€‚生魚を与ãˆã¦é£¼ã„慣らã›ã‚‹ã€‚䏿„ãªå‹•ãã«é©šã„ã¦ã™ãã«é€ƒã’ã‚‹ãŸã‚ã€æŽ¥è¿‘ã™ã‚‹ã®ã¯ç°¡å˜ã§ã¯ãªã„ - + アイアン ゴーレム - + æ‘ã«å‡ºç¾ã—ã¦æ‘人を守ã£ã¦ãれる。鉄ã®ãƒ–ロックã¨ã‚«ãƒœãƒãƒ£ã§ä½œã‚‹ã“ã¨ã‚‚ã§ãã‚‹ - + +コウモリ + +ã“ã®ç©ºé£›ã¶ç”Ÿã物ã¯ã€æ´žçªŸã‚„ãã®ä»–ã®å¤§ããªé–‰ã˜ãŸç©ºé–“ã§è¦‹ã¤ã‹ã‚‹ã€‚ + +ウィッム+ +ã“ã®æ•µã¯æ²¼åœ°ã§è¦‹ã‚‰ã‚Œã€ãƒãƒ¼ã‚·ãƒ§ãƒ³ã‚’投ã’ã¦æ”»æ’ƒã—ã¦ãる。倒ã™ã¨ãƒãƒ¼ã‚·ãƒ§ãƒ³ã‚’è½ã¨ã™ã€‚ + +馬 + +ã“ã®å‹•ç‰©ã¯æ‰‹ãªãšã‘ã¦ã€ä¹—ã‚‹ã“ã¨ãŒã§ãる。 + +ロム+ +ã“ã®å‹•ç‰©ã¯æ‰‹ãªãšã‘ã¦ã€ä¹—ã‚‹ã“ã¨ãŒã§ãる。ãƒã‚§ã‚¹ãƒˆã‚’装ç€ã™ã‚‹ã“ã¨ã‚‚ã§ãる。 + +ラム+ +馬ã¨ãƒ­ãƒã®äº¤é…ã«ã‚ˆã£ã¦ç”Ÿã¾ã‚Œã‚‹ã€‚ã“ã®å‹•ç‰©ã¯æ‰‹ãªãšã‘ã¦ã€ä¹—ã£ãŸã‚Šã€ãƒã‚§ã‚¹ãƒˆã‚’é‹ã°ã›ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãる。 + +馬ã®ã‚¾ãƒ³ãƒ“ + +馬ã®ã‚¹ã‚±ãƒ«ãƒˆãƒ³ + +ウィザー + +ウィザー スカルã¨ã‚½ã‚¦ãƒ« サンドã‹ã‚‰ä½œã‚‰ã‚Œã‚‹ã€‚爆発ã™ã‚‹ã‚¹ã‚«ãƒ«ã‚’æ’ƒã£ã¦ãる。 + Explosives Animator Concept Artist @@ -1372,6 +1513,8 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠地図 +空ã£ã½ã®åœ°å›³ + 音楽ディスク: 13 音楽ディスク: cat @@ -1474,6 +1617,28 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠Creeper ヘッド +ãƒã‚¶ãƒ¼ã‚¹ã‚¿ãƒ¼ + +ãƒ­ã‚±ãƒƒãƒˆèŠ±ç« + +花ç«ã®æ˜Ÿ + +レッドストーン コンパレーター + +TNT 付ãトロッコ + +ホッパー付ãトロッコ + +鉄ã®é¦¬ã‚ˆã‚ã„ + +金ã®é¦¬ã‚ˆã‚ã„ + +ダイヤモンドã®é¦¬ã‚ˆã‚ã„ + +首ã²ã‚‚ + +åæœ­ + 石 è‰ãƒ–ロック @@ -1490,6 +1655,8 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ã‚²ãƒ¼ãƒ ã« ã‚¸ãƒ£ãƒ³ã‚°ãƒ«ã®æœ¨ã®æ¿ + æœ¨ã®æ¿ (全種類) + 苗木 樫ã®è‹—木 @@ -1826,6 +1993,190 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠スカル +コマンド ブロック + +ビーコン + +トラップ ãƒã‚§ã‚¹ãƒˆ + +é‡é‡æ„ŸçŸ¥æ¿ (軽) + +é‡é‡æ„ŸçŸ¥æ¿ (é‡) + +レッドストーン コンパレーター + +日照センサー + +レッドストーンã®ãƒ–ロック + +ホッパー + +アクティベーター レール + +ドロッパー + +色付ã粘土 + +å¹²ã—è‰ã®ä¿µ + +堅焼ã粘土 + +石炭ã®ãƒ–ロック + +é»’ã®è‰²ä»˜ã粘土 + +赤ã®è‰²ä»˜ã粘土 + +ç·‘ã®è‰²ä»˜ã粘土 + +茶色ã®è‰²ä»˜ã粘土 + +é’ã®è‰²ä»˜ã粘土 + +ç´«ã®è‰²ä»˜ã粘土 + +é’ç·‘ã®è‰²ä»˜ã粘土 + +è–„ç°è‰²ã®è‰²ä»˜ã粘土 + +ç°è‰²ã®è‰²ä»˜ã粘土 + +ピンクã®è‰²ä»˜ã粘土 + +黄緑ã®è‰²ä»˜ã粘土 + +黄色ã®è‰²ä»˜ã粘土 + +空色ã®è‰²ä»˜ã粘土 + +赤紫ã®è‰²ä»˜ã粘土 + +オレンジã®è‰²ä»˜ã粘土 + +白ã®è‰²ä»˜ã粘土 + +ステンドグラス + +é»’ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +赤ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +ç·‘ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +茶色ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +é’ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +ç´«ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +赤紫ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +è–„ç°è‰²ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +ç°è‰²ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +ピンクã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +黄緑ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +黄色ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +空色ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +赤紫ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +オレンジã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +白ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹ + +ステンドグラス窓 + +é»’ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +赤ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +ç·‘ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +茶色ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +é’ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +ç´«ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +赤紫ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +è–„ç°è‰²ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +ç°è‰²ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +ピンクã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +黄緑ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +黄色ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +空色ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +赤紫ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +オレンジã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +白ã®ã‚¹ãƒ†ãƒ³ãƒ‰ã‚°ãƒ©ã‚¹çª“ + +å°çމ + +大玉 + +星形 + +Creeper å½¢ + +破裂 + +未知ã®å½¢ + +é»’ + +赤 + +ç·‘ + +茶色 + +é’ + +ç´« + +é’ç·‘ + +è–„ç°è‰² + +ç°è‰² + +ピンク + +黄緑 + +黄色 + +空色 + +赤紫 + +オレンジ + +白 + +カスタム + +変化後ã®è‰² + +点滅 + +光跡 + +滞空時間: +  ç¾åœ¨ã®æ“作方法 レイアウト @@ -2003,8 +2354,7 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠ã“れãŒã‚ãªãŸã®æŒã¡ç‰©ã§ã™ã€‚æ‰‹ã§æŒã£ã¦ä½¿ç”¨ã§ãるアイテムã¨ã€æ‰€æœ‰ã—ã¦ã„るアイテムã®ãƒªã‚¹ãƒˆã€ç¾åœ¨è£…å‚™ã—ã¦ã„る防具を確èªã§ãã¾ã™ - - + {*B*} æŒã¡ç‰©ã®èª¬æ˜Žã‚’ç¶šã‘ã‚‹: {*CONTROLLER_VK_A*}{*B*} æŒã¡ç‰©ã®èª¬æ˜Žã‚’飛ã°ã™: {*CONTROLLER_VK_B*} @@ -2025,7 +2375,7 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠- アイテムã®èª¬æ˜Žã‚’見ãŸã„時ã¯ã€ãƒã‚¤ãƒ³ã‚¿ãƒ¼ã‚’アイテムã®ä¸Šã«å‹•ã‹ã—ã¦ã‹ã‚‰ {*CONTROLLER_VK_RT*} を押ã—ã¦ãã ã•ã„ + アイテムã®èª¬æ˜Žã‚’見ãŸã„時ã¯ã€ãƒã‚¤ãƒ³ã‚¿ãƒ¼ã‚’アイテムã®ä¸Šã«å‹•ã‹ã—ã¦ã‹ã‚‰ {*CONTROLLER_ACTION_MENU_PAGEDOWN*} を押ã—ã¦ãã ã•ã„ @@ -2060,7 +2410,7 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠- アイテムã®èª¬æ˜Žã‚’見ãŸã„時ã¯ã€ãƒã‚¤ãƒ³ã‚¿ãƒ¼ã‚’アイテムã®ä¸Šã«å‹•ã‹ã—ã¦ã‹ã‚‰ {*CONTROLLER_VK_RT*} を押ã—ã¾ã™ + アイテムã®èª¬æ˜Žã‚’見ãŸã„時ã¯ã€ãƒã‚¤ãƒ³ã‚¿ãƒ¼ã‚’アイテムã®ä¸Šã«å‹•ã‹ã—ã¦ã‹ã‚‰ {*CONTROLLER_ACTION_MENU_PAGEDOWN*} を押ã—ã¦ãã ã•ã„ @@ -2442,7 +2792,7 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠- ãƒãƒ¼ã‚¿ãƒ«ã‚’èµ·å‹•ã™ã‚‹ã«ã¯ã€ç«æ‰“çŸ³ã¨æ‰“ã¡é‡‘ã§ã€ãƒ•レーム内ã®é»’曜石ã«ç«ã‚’ã¤ã‘ã¾ã—ょã†ã€‚æž ãŒå£Šã‚ŒãŸã‚Šã€è¿‘ãã§çˆ†ç™ºãŒèµ·ããŸã‚Šã€æ¶²ä½“ã‚’æµã—ãŸã‚Šã™ã‚‹ã¨ã€ãƒãƒ¼ã‚¿ãƒ«ã¯åœæ­¢ã—ã¾ã™ + ãƒãƒ¼ã‚¿ãƒ«ã‚’èµ·å‹•ã™ã‚‹ã«ã¯ã€ç«æ‰“çŸ³ã¨æ‰“ã¡é‡‘ã§ã€ãƒ•レーム内ã®é»’曜石ã«ç«ã‚’ã¤ã‘ã¾ã—ょã†ã€‚æž ãŒå£Šã‚ŒãŸã‚Šã€è¿‘ãã§çˆ†ç™ºãŒèµ·ããŸã‚Šã€æ¶²ä½“ã‚’æµã—ãŸã‚Šã™ã‚‹ã¨ã€ãƒãƒ¼ã‚¿ãƒ«ã¯åœæ­¢ã—ã¾ã™ã€‚ @@ -2607,6 +2957,211 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠ã™ã§ã«å分知ã£ã¦ã„ã‚‹å ´åˆã¯ {*CONTROLLER_VK_B*} を押ã—ã¦ãã ã•ã„。 + + ã“れã¯é¦¬ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒª インターフェイスã§ã™ã€‚ + + + + {*B*}続行ã™ã‚‹ã«ã¯ {*CONTROLLER_VK_A*} を押ã—ã¾ã™ã€‚ + {*B*}馬ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªã®ä½¿ã„方を既ã«çŸ¥ã£ã¦ã„ã‚‹å ´åˆã¯ã€{*CONTROLLER_VK_B*} を押ã—ã¾ã™ã€‚ + + + + 馬ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªã‚’使ã†ã¨ã€è‡ªåˆ†ã®é¦¬ã€ãƒ­ãƒã€ã¾ãŸã¯ãƒ©ãƒã«ã‚¢ã‚¤ãƒ†ãƒ ã‚’ç§»ã—ãŸã‚Šã€è£…å‚™ã•ã›ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ + + + + 馬ã«éžã‚’ã®ã›ã‚‹ã«ã¯ã€éžã‚¹ãƒ­ãƒƒãƒˆã«éžã‚’ç½®ãã¾ã™ã€‚防具スロットã«é¦¬ã‚ˆã‚ã„ã‚’ç½®ã‘ã°ã€é¦¬ã«é˜²å…·ã‚’装備ã•ã›ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ + + + + ã“ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§ã¯ã€è‡ªåˆ†ã®æŒã¡ç‰©ã¨ãƒ­ãƒã¾ãŸã¯ãƒ©ãƒã«è£…ç€ã—ãŸéžè¢‹ã¨ã®é–“ã§ã€ã‚¢ã‚¤ãƒ†ãƒ ã‚’移動ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ + + +馬を見ã¤ã‘ã¾ã—ãŸã€‚ + +ロãƒã‚’見ã¤ã‘ã¾ã—ãŸã€‚ + +ラãƒã‚’見ã¤ã‘ã¾ã—ãŸã€‚ + + + {*B*}馬ã€ãƒ­ãƒã€ãƒ©ãƒã«ã¤ã„ã¦ã‚‚ã£ã¨çŸ¥ã‚‹ã«ã¯ {*CONTROLLER_VK_A*} を押ã—ã¾ã™ã€‚ + {*B*}馬ã€ãƒ­ãƒã€ãƒ©ãƒã«ã¤ã„ã¦æ—¢ã«çŸ¥ã£ã¦ã„ã‚‹å ´åˆã¯ã€{*CONTROLLER_VK_B*} を押ã—ã¾ã™ã€‚ + + + + 馬ã¨ãƒ­ãƒã¯ä¸»ã«ã²ã‚‰ã‘ãŸè‰åŽŸã§è¦‹ã¤ã‹ã‚Šã¾ã™ã€‚ラãƒã¯ãƒ­ãƒã¨é¦¬ã‹ã‚‰ç¹æ®–ã§ãã¾ã™ãŒã€ãれ自体ã§ã¯å­ã‚’産ã¿ã¾ã›ã‚“。 + + + + 馬ã€ãƒ­ãƒã€ãƒ©ãƒã®æˆä½“ã«ã¯ä¹—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—防具を装備ã§ãã‚‹ã®ã¯é¦¬ã ã‘ã§ã™ã€‚ã‚¢ã‚¤ãƒ†ãƒ ã‚’é‹æ¬ã™ã‚‹ãŸã‚ã®éžè¢‹ã‚’ç€ã‘られるã®ã¯ãƒ©ãƒã¨ãƒ­ãƒã ã‘ã§ã™ã€‚ + + + + 馬ã€ãƒ­ãƒã€ãƒ©ãƒã¯ä½¿ã†å‰ã«æ‰‹ãªãšã‘ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚騎乗ã—ã¦ã€æŒ¯ã‚Šè½ã¨ã•れãã†ã«ãªã£ã¦ã‚‚乗り続ã‘れã°ã€æ‰‹ãªãšã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ + + + + 手ãªãšã‘ã‚‹ã¨å‘¨ã‚Šã«ãƒãƒ¼ãƒˆãŒè¡¨ç¤ºã•れã¦ã€äºŒåº¦ã¨ãƒ—レイヤーを振りè½ã¨ãã†ã¨ã¯ã—ã¾ã›ã‚“。 + + + + ã“ã®é¦¬ã«ä¹—ã£ã¦ã¿ã¾ã—ょã†ã€‚騎乗ã™ã‚‹ã«ã¯ã€æ‰‹ã«ã‚¢ã‚¤ãƒ†ãƒ ã‚„ツールã¯ä½•ã‚‚æŒãŸãªã„ã§ {*CONTROLLER_ACTION_USE*} を使ã„ã¾ã™ã€‚ + + + + 馬をæ“縦ã™ã‚‹ã«ã¯éžã‚’ç½®ãå¿…è¦ãŒã‚りã¾ã™ã€‚éžã¯æ‘人ã‹ã‚‰è³¼å…¥ã™ã‚‹ã‹ã€ä¸–界ã®ã©ã“ã‹ã«éš ã•れãŸãƒã‚§ã‚¹ãƒˆã®ä¸­ã‹ã‚‰è¦‹ã¤ã‹ã‚Šã¾ã™ã€‚ + + + + 手ãªãšã‘ãŸãƒ­ãƒã¨ãƒ©ãƒã«éžè¢‹ã‚’ç€ã‘ã‚‹ã«ã¯ãƒã‚§ã‚¹ãƒˆã‚’å–り付ã‘ã¾ã™ã€‚éžè¢‹ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹ã®ã¯ã€é¨Žä¹—時ã¾ãŸã¯ã—ã®ã³è¶³ã—ã¦ã„る時ã§ã™ã€‚ + + + + 馬ã¨ãƒ­ãƒ (ラãƒã¯é™¤ã) ã¯ã€ä»–ã®å‹•物ã¨åŒæ§˜ã«é‡‘ã®ãƒªãƒ³ã‚´ã‚„金ã®ãƒ‹ãƒ³ã‚¸ãƒ³ã‚’使ã£ã¦ç¹æ®–ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å­é¦¬ã‚„å­ãƒ­ãƒã¯æ™‚é–“ã¨ã¨ã‚‚ã«æˆä½“ã«ãªã‚Šã¾ã™ãŒã€å°éº¦ã‹å¹²ã—è‰ã‚’与ãˆã‚‹ã¨æˆé•·ãŒæ—©ã¾ã‚Šã¾ã™ã€‚ + + + + ã“ã“ã§ã¯é¦¬ã¨ãƒ­ãƒã‚’手ãªãšã‘ã¦ã¿ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®å‘¨è¾ºã®ãƒã‚§ã‚¹ãƒˆã«ã¯éžã‚„馬よã‚ã„ãªã©ã®ä¾¿åˆ©ãªé¦¬ç”¨ã‚¢ã‚¤ãƒ†ãƒ ã‚‚ã‚りã¾ã™ã€‚ + + + + ã“れã¯ãƒ“ーコンã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã§ã™ã€‚ã“れを使ã†ã¨ãƒ“ーコンã«å‰²ã‚Šå½“ã¦ã‚‹ãƒ‘ãƒ¯ãƒ¼ã‚’é¸æŠžã§ãã¾ã™ã€‚ + + + + {*B*}続行ã™ã‚‹ã«ã¯ {*CONTROLLER_VK_A*} を押ã—ã¾ã™ã€‚ + {*B*}ビーコンã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ä½¿ã„方を既ã«çŸ¥ã£ã¦ã„ã‚‹å ´åˆã¯ã€{*CONTROLLER_VK_B*} を押ã—ã¾ã™ã€‚ + + + + ビーコン メニューã§ã¯ã€ãƒ“ーコンã«å‰²ã‚Šå½“ã¦ã‚‹ãƒ—ライマリ パワーを 1 ã¤é¸æŠžã§ãã¾ã™ã€‚ピラミッドã®éšŽå±¤ãŒå¢—ãˆã‚‹ã¨ã€ãƒ‘ワーã®é¸æŠžè‚¢ã‚‚増ãˆã¾ã™ã€‚ + + + + å°‘ãªãã¨ã‚‚ 4 層以上ã®ãƒ”ラミッドã«ç½®ã‹ã‚ŒãŸãƒ“ーコンã«ã¯ã€è¿½åŠ ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã¨ã—ã¦ã€Œå›žå¾©ã€ã®ã‚»ã‚«ãƒ³ãƒ€ãƒª パワーã‹ã€ã•らã«å¼·åŠ›ãªãƒ—ライマリ パワーãŒä»˜ä¸Žã•れã¾ã™ã€‚ + + + + ビーコンã®ãƒ‘ワーを設定ã™ã‚‹ã«ã¯ã€ã‚¨ãƒ¡ãƒ©ãƒ«ãƒ‰ã€ãƒ€ã‚¤ãƒ¤ãƒ¢ãƒ³ãƒ‰ã€é‡‘ã¾ãŸã¯é‰„ã®ã‚¤ãƒ³ã‚´ãƒƒãƒˆã‚’支払ã„ã‚¹ãƒ­ãƒƒãƒˆã§æ¶ˆè²»ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚一度設定ã™ã‚‹ã¨ã€ãƒ“ーコンã¯ãƒ‘ワーを無é™ã«ç™ºã—ã¾ã™ã€‚ + + +ã“ã®ãƒ”ラミッドã®é ‚上ã«ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ãªã„ビーコンãŒã‚る。 + + + {*B*}ビーコンã«ã¤ã„ã¦ã‚‚ã£ã¨çŸ¥ã‚‹ã«ã¯ {*CONTROLLER_VK_A*} を押ã—ã¾ã™ã€‚ + {*B*}ビーコンã«ã¤ã„ã¦æ—¢ã«çŸ¥ã£ã¦ã„ã‚‹å ´åˆã¯ã€{*CONTROLLER_VK_B*} を押ã—ã¾ã™ã€‚ + + + + アクティブãªãƒ“ーコンã¯ç©ºã«å‘ã‘ã¦æ˜Žã‚‹ã„光線を放ã¡ã€ä»˜è¿‘ã®ãƒ—レイヤーã«ãƒ‘ワーを与ãˆã¾ã™ã€‚ビーコンã¯ã‚¬ãƒ©ã‚¹ã€é»’曜石ã€ã‚¦ã‚£ã‚¶ãƒ¼ã‚’倒ã™ã¨å…¥æ‰‹ã§ãã‚‹ãƒã‚¶ãƒ¼ã‚¹ã‚¿ãƒ¼ã‹ã‚‰ä½œã‚Šã¾ã™ã€‚ + + + + ビーコンã¯ã€æ˜¼é–“ã«æ—¥å…‰ã‚’å—ã‘る場所ã«è¨­ç½®ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã€ãƒ“ーコンã¯é‰„ã€é‡‘ã€ã‚¨ãƒ¡ãƒ©ãƒ«ãƒ‰ã€ã¾ãŸã¯ãƒ€ã‚¤ãƒ¤ãƒ¢ãƒ³ãƒ‰ã®ãƒ”ラミッド上ã«è¨­ç½®ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。ãŸã ã—建æã®é•ã„ã«ã‚ˆã‚‹ãƒ“ーコンã®ãƒ‘ワーã¸ã®å½±éŸ¿ã¯ã‚りã¾ã›ã‚“。 + + + + ビーコンを使ã£ã¦ã€ãã“ã‹ã‚‰ä¸Žãˆã‚‹ãƒ‘ワーを設定ã—ã¦ã¿ã¾ã—ょã†ã€‚å¿…è¦ãªæ”¯æ‰•ã„ã«ã¯é‰„ã®ã‚¤ãƒ³ã‚´ãƒƒãƒˆã‚’使ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ + + +ã“ã®éƒ¨å±‹ã«ã¯ãƒ›ãƒƒãƒ‘ーãŒã‚ã‚‹ + + + {*B*}ホッパーã«ã¤ã„ã¦ã‚‚ã£ã¨çŸ¥ã‚‹ã«ã¯ {*CONTROLLER_VK_A*} を押ã—ã¾ã™ã€‚ + {*B*}ホッパーã«ã¤ã„ã¦æ—¢ã«çŸ¥ã£ã¦ã„ã‚‹å ´åˆã¯ã€{*CONTROLLER_VK_B*} を押ã—ã¾ã™ã€‚ + + + + ホッパーã¯å…¥ã‚Œç‰©ã«ã‚¢ã‚¤ãƒ†ãƒ ã‚’出ã—入れã™ã‚‹ãŸã‚ã«ã€ã¾ãŸã¯ãƒ›ãƒƒãƒ‘ãƒ¼ä¸Šã«æŠ•ã’られãŸã‚¢ã‚¤ãƒ†ãƒ ã‚’è‡ªå‹•çš„ã«æ‹¾ã†ãŸã‚ã«ä½¿ã„ã¾ã™ã€‚ + + + + ホッパーã¯èª¿åˆå°ã€ãƒã‚§ã‚¹ãƒˆã€ç™ºå°„装置ã€ãƒ‰ãƒ­ãƒƒãƒ‘ーã€ãƒã‚§ã‚¹ãƒˆä»˜ãトロッコã€ãƒ›ãƒƒãƒ‘ー付ãトロッコã€ãŠã‚ˆã³ä»–ã®ãƒ›ãƒƒãƒ‘ーã«å¯¾ã—ã¦ä½œç”¨ã§ãã¾ã™ã€‚ + + + + ホッパーã¯ã€ãã®ä¸Šã«ä½ç½®ã™ã‚‹é©åˆ‡ãªå…¥ã‚Œç‰©ã‹ã‚‰ã‚¢ã‚¤ãƒ†ãƒ ã‚’å¸ã„出ã—ç¶šã‘ã¾ã™ã€‚ã¾ãŸã€ä¿ç®¡ã•れãŸã‚¢ã‚¤ãƒ†ãƒ ã‚’出力先ã®å…¥ã‚Œç‰©ã«æ ¼ç´ã—ã¾ã™ã€‚ + + + + ã—ã‹ã—ã€ãƒ¬ãƒƒãƒ‰ã‚¹ãƒˆãƒ¼ãƒ³ãŒé›»æºã®å ´åˆã€ãƒ›ãƒƒãƒ‘ーã¯éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã‚Šã€ã‚¢ã‚¤ãƒ†ãƒ ã®å¸ã„出ã—ã‚‚æ ¼ç´ã‚‚åœæ­¢ã—ã¾ã™ã€‚ + + + + ホッパーã®å‘ãã¯ã‚¢ã‚¤ãƒ†ãƒ ã‚’排出ã™ã‚‹æ–¹å‘を示ã—ã¾ã™ã€‚ホッパーãŒç‰¹å®šã®ãƒ–ロックã«å‘ãよã†ã«ã™ã‚‹ã«ã¯ã€ã—ã®ã³è¶³ã—ãªãŒã‚‰ãã®ãƒ–ロックã«å‘ã‘ã¦è¨­ç½®ã—ã¾ã™ã€‚ + + + + ã“ã®éƒ¨å±‹ã«ã¯æ§˜ã€…ãªå½¹ç«‹ã¤ãƒ›ãƒƒãƒ‘ーã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆãŒç”¨æ„ã—ã¦ã‚りã€ç›®ã§è¦‹ã¦è©¦ã›ã¾ã™ã€‚ + + + + ã“れã¯èбç«ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã§ã™ã€‚ã“れを使ãˆã°èбç«ã¨ã€èбç«ã®æ˜Ÿã‚’作るã“ã¨ãŒã§ãã¾ã™ã€‚ + + + + {*B*}続行ã™ã‚‹ã«ã¯ {*CONTROLLER_VK_A*} を押ã—ã¾ã™ã€‚ + {*B*}花ç«ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®ä½¿ã„方を既ã«çŸ¥ã£ã¦ã„ã‚‹å ´åˆã¯ã€{*CONTROLLER_VK_B*} を押ã—ã¾ã™ã€‚ + + + + 花ç«ã‚’作るã«ã¯ã€ç«è–¬ã¨ç´™ã‚’インベントリã®ä¸Šã«è¡¨ç¤ºã•れる 3x3 ã®ã‚¯ãƒ©ãƒ•ト グリッドã«ç½®ãã¾ã™ã€‚ + + + + オプションã¨ã—ã¦ã€ã‚¯ãƒ©ãƒ•ト グリッド上ã«è¤‡æ•°ã®èбç«ã®æ˜Ÿã‚’ç½®ã„ã¦ã€èбç«ã«è¿½åŠ ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ + + + + クラフト グリッドã®ã‚¹ãƒ­ãƒƒãƒˆã«ç«è–¬ã‚’多ãç½®ãã»ã©ã€èбç«ã®æ˜Ÿã¯ã•らã«é«˜ã„ã¨ã“ã‚ã§ç ´è£‚ã—ã¾ã™ã€‚ + + + + 作ã£ãŸèбç«ã¯ã€ä½œã‚ŠãŸã„時ã«ã„ã¤ã§ã‚‚å–り出ã—å£ã‹ã‚‰å–り出ã›ã¾ã™ã€‚ + + + + 花ç«ã®æ˜Ÿã‚’作るã«ã¯ã€ç«è–¬ã¨æŸ“料をクラフト グリッドã«ç½®ãã¾ã™ã€‚ + + + + 染料を使ã£ã¦ã€èбç«ã®æ˜ŸãŒç ´è£‚ã™ã‚‹éš›ã®è‰²ã‚’決ã‚ã¾ã™ã€‚ + + + + 花ç«ã®æ˜Ÿã®å½¢çжã¯ã€ç™ºç«å‰¤ã€é‡‘塊ã€ç¾½æ ¹ã€ã¾ãŸã¯ãƒ˜ãƒƒãƒ‰ã‚’追加ã—ã¦æ±ºå®šã—ã¾ã™ã€‚ + + + + 光跡や点滅ã¯ã€ãƒ€ã‚¤ãƒ¤ãƒ¢ãƒ³ãƒ‰ã¾ãŸã¯ã‚°ãƒ­ã‚¦ã‚¹ãƒˆãƒ¼ãƒ³ã®ç²‰ã‚’使ã£ã¦è¿½åŠ ã§ãã¾ã™ã€‚ + + + + 花ç«ã®æ˜Ÿã‚’作ã£ãŸå¾Œã€ã•ã‚‰ã«æŸ“料を加ãˆã‚Œã°ã€èбç«ã®æ˜Ÿã®è‰²å¤‰åŒ–を決ã‚られã¾ã™ã€‚ + + + + ã“ã“ã«ã‚ã‚‹ãƒã‚§ã‚¹ãƒˆã®ä¸­ã«ã¯ã€èбç«ä½œã‚Šã«ä½¿ã‚れる様々ãªã‚¢ã‚¤ãƒ†ãƒ ãŒå…¥ã£ã¦ã„ã¾ã™! + + + + {*B*}花ç«ã«ã¤ã„ã¦ã‚‚ã£ã¨çŸ¥ã‚‹ã«ã¯ {*CONTROLLER_VK_A*} を押ã—ã¾ã™ã€‚ + {*B*}花ç«ã«ã¤ã„ã¦æ—¢ã«çŸ¥ã£ã¦ã„ã‚‹å ´åˆã¯ã€{*CONTROLLER_VK_B*} を押ã—ã¾ã™ã€‚ + + + + 花ç«ã¯è£…飾アイテムã§ã€æ‰‹å‹•ã€ã¾ãŸã¯ç™ºå°„装置ã‹ã‚‰æ‰“ã¡ä¸Šã’ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚作るã«ã¯ã€ç´™ã€ç«è–¬ã€ãŠã‚ˆã³ã‚ªãƒ—ションã¨ã—ã¦æ•°ã€…ã®èбç«ã®æ˜Ÿã‚’使ã„ã¾ã™ã€‚ + + + + 花ç«ã®æ˜Ÿã®è‰²ã€è‰²å¤‰åŒ–ã€å½¢çжã€ã‚µã‚¤ã‚ºã€åŠ¹æžœ (光跡ã€ç‚¹æ»…ãªã©) ã¯ã€ä½œã‚‹éš›ã«ææ–™ã‚’追加ã™ã‚Œã°ã§ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã§ãã¾ã™ã€‚ + + + + ãƒã‚§ã‚¹ãƒˆã«ã‚ã‚‹ã„ã‚ã„ã‚ãªææ–™ã‚’ä½¿ã£ã¦ã€ä½œæ¥­å°ã§èбç«ã‚’作ã£ã¦ã¿ã¾ã—ょã†ã€‚ + +  é¸æŠž 使ㆠ@@ -2829,6 +3384,22 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠Xbox One 用ã«ã‚»ãƒ¼ãƒ–をアップロード +騎乗ã™ã‚‹ + +é™ã‚Šã‚‹ + +ãƒã‚§ã‚¹ãƒˆã‚’ç€ã‘ã‚‹ + +打ã¡ä¸Šã’ã‚‹ + +首ã²ã‚‚ã‚’ã¤ã‘ã‚‹ + +首ã²ã‚‚ã‚’ã¯ãšã™ + +装ç€ã™ã‚‹ + +åå‰ã‚’ã¤ã‘ã‚‹ + OK キャンセル @@ -3143,6 +3714,20 @@ Minecraft Xbox 360 版ã¯ã€åˆæœŸè¨­å®šã§ãƒžãƒ«ãƒãƒ—レイヤー ゲーム㫠発射装置 +馬 + +ドロッパー + +ホッパー + +ビーコン + +プライマリ パワー + +セカンダリ パワー + +トロッコ + ç¾åœ¨ã€ã“ã®ã‚¿ã‚¤ãƒ—ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ コンテンツã¯ã‚りã¾ã›ã‚“ %s ãŒä¸–界ã«ã‚„ã£ã¦ãã¾ã—㟠@@ -3302,10 +3887,14 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ ゲームモード: クリエイティブ +ゲーム モード: アドベンãƒãƒ£ãƒ¼ + サãƒã‚¤ãƒãƒ« クリエイティブ +アドベンãƒãƒ£ãƒ¼ + サãƒã‚¤ãƒãƒ« モードã§ä½œæˆ クリエイティブ モードã§ä½œæˆ @@ -3326,6 +3915,8 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ スーパーフラット +åŒã˜åœ°å½¢ã‚’å†åº¦ç”Ÿæˆã™ã‚‹ã«ã¯ç¨®ã‚’入れã¾ã™ã€‚ランダムãªä¸–界ã®å ´åˆã€ç©ºæ¬„ã®ã¾ã¾ã«ã—ã¾ã™ã€‚ + 有効ã«ã™ã‚‹ã¨ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã®ã‚²ãƒ¼ãƒ ã«ãªã‚Šã¾ã™ 有効ã«ã™ã‚‹ã¨ã€æ‹›å¾…ã•れãŸãƒ—レイヤーã—ã‹å‚加ã§ãã¾ã›ã‚“ @@ -3350,6 +3941,20 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ 有効ã«ã™ã‚‹ã¨ã€ãƒ—レイヤーã®å¾©æ´»åœ°ç‚¹ã®è¿‘ãã«ä¾¿åˆ©ãªã‚¢ã‚¤ãƒ†ãƒ ã®å…¥ã£ãŸãƒã‚§ã‚¹ãƒˆãŒå‡ºç¾ã—ã¾ã™ +無効ã«ã™ã‚‹ã¨ã€ãƒ¢ãƒ³ã‚¹ã‚¿ãƒ¼ã‚„動物ãŒãƒ–ロックを変ãˆã‚‹ã“ã¨ãŒãªããªã‚Š (例: Creeper ãŒçˆ†ç™ºã—ã¦ã‚‚ブロックãŒç ´å£Šã•れãªã„ã€ç¾ŠãŒè‰ã‚’å–り除ã‹ãªã„)ã€ã‚¢ã‚¤ãƒ†ãƒ ã‚‚拾ã„ã¾ã›ã‚“。 + +有効ã«ã™ã‚‹ã¨ã€ã‚²ãƒ¼ãƒ ã‚ªãƒ¼ãƒãƒ¼æ™‚ã«ãƒ—ãƒ¬ã‚¤ãƒ¤ãƒ¼ã®æŒã¡ç‰©ãŒå¤±ã‚れã¾ã›ã‚“。 + +無効ã«ã™ã‚‹ã¨ã€ç”Ÿã物ã¯è‡ªç„¶ã«å‡ºç¾ã—ã¾ã›ã‚“。 + +無効ã«ã™ã‚‹ã¨ã€ãƒ¢ãƒ³ã‚¹ã‚¿ãƒ¼ã‚„å‹•ç‰©ã¯æˆ¦åˆ©å“をドロップã—ã¾ã›ã‚“ (例: Creeper ã¯ç«è–¬ã‚’ドロップã—ãªã„)。 + +無効ã«ã™ã‚‹ã¨ã€ãƒ–ロックを壊ã—ã¦ã‚‚アイテムをè½ã¨ã—ã¾ã›ã‚“ (例: 石ブロックãŒä¸¸çŸ³ã‚’è½ã¨ã•ãªã„)。 + +無効ã«ã™ã‚‹ã¨ã€ãƒ—レイヤー㮠HP を自然ã«å†ç”Ÿã•れã¾ã›ã‚“。 + +無効ã«ã™ã‚‹ã¨ã€æ™‚刻ãŒå¤‰ã‚りã¾ã›ã‚“。 + スキン パック テーマ @@ -3398,7 +4003,49 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ {*PLAYER*} 㯠{*SOURCE*} ã«å©ãæ½°ã•れ㟠-{*PLAYER*} 㯠{*SOURCE*} ã«å€’ã•れ㟠+{*PLAYER*} 㯠{*SOURCE*} ã®é­”法ã«ã‚ˆã£ã¦å€’ã•れ㟠+ +{*PLAYER*} ã¯ãƒã‚·ã‚´ã‹ã‚‰è½ã¡ãŸ + +{*PLAYER*} ã¯ã€ã¤ã‚‹ã‹ã‚‰è½ã¡ãŸ + +{*PLAYER*} ã¯æ°´ã‹ã‚‰è½ã¡ãŸ + +{*PLAYER*} ã¯é«˜ã„ã¨ã“ã‚ã‹ã‚‰è½ã¡ãŸ + +{*PLAYER*} 㯠{*SOURCE*} ã«ã‚ˆã£ã¦æ»…ã³ã‚‹é‹å‘½ã«ã‚ã£ãŸ + +{*PLAYER*} 㯠{*SOURCE*} ã«ã‚ˆã£ã¦æ»…ã³ã‚‹é‹å‘½ã«ã‚ã£ãŸ + +{*PLAYER*} 㯠{*SOURCE*} ã® {*ITEM*} ã«ã‚ˆã£ã¦æ»…ã³ã‚‹é‹å‘½ã«ã‚ã£ãŸ + +{*PLAYER*} ã¯ã‚ã¾ã‚Šã«é«˜ã„ã¨ã“ã‚ã‹ã‚‰è½ã¡ã€{*SOURCE*} ã«ã¨ã©ã‚を刺ã•れ㟠+ +{*PLAYER*} ã¯ã‚ã¾ã‚Šã«é«˜ã„ã¨ã“ã‚ã‹ã‚‰è½ã¡ã€{*SOURCE*} ã« {*ITEM*} ã§ã¨ã©ã‚を刺ã•れ㟠+ +{*PLAYER*} 㯠{*SOURCE*} ã¨æˆ¦ã†ã†ã¡ã«ç«ã®ä¸­ã¸ã¨é€²ã‚“ã§è¡Œã£ãŸ + +{*PLAYER*} 㯠{*SOURCE*} ã¨æˆ¦ã†ã†ã¡ã«ã‚«ãƒªã‚«ãƒªã«ç„¼ã‹ã‚ŒãŸ + +{*PLAYER*} 㯠{*SOURCE*} ã‹ã‚‰é€ƒã‚Œã‚‹ãŸã‚ã«æº¶å²©ã®ä¸­ã‚’æ³³ã”ã†ã¨ã—㟠+ +{*PLAYER*} 㯠{*SOURCE*} ã‹ã‚‰é€ƒã‚Œã‚ˆã†ã¨ã™ã‚‹ã†ã¡ã«æººã‚ŒãŸ + +{*PLAYER*} 㯠{*SOURCE*} ã‹ã‚‰é€ƒã‚Œã‚ˆã†ã¨ã™ã‚‹ã†ã¡ã«ã‚µãƒœãƒ†ãƒ³ã«è¶³ã‚’è¸ã¿å…¥ã‚ŒãŸ + +{*PLAYER*} 㯠{*SOURCE*} ã«å¹ã飛ã°ã•れ㟠+ +{*PLAYER*} ã¯å¼±ã‚Šæžœã¦ãŸ + +{*PLAYER*} 㯠{*SOURCE*} ã« {*ITEM*} ã§å€’ã•れ㟠+ +{*PLAYER*} 㯠{*SOURCE*} ã« {*ITEM*} ã§æ’ƒãŸã‚ŒãŸ + +{*PLAYER*} 㯠{*SOURCE*} ã« {*ITEM*} ã§ç«ã ã‚‹ã¾ã«ã•れ㟠+ +{*PLAYER*} 㯠{*SOURCE*} ã« {*ITEM*} ã§ç«ã ã‚‹ã¾ã«ã•れ㟠+ +{*PLAYER*} 㯠{*SOURCE*} ã« {*ITEM*} ã§å€’ã•れ㟠岩盤ã®éœ§ @@ -3552,7 +4199,7 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ {*C2*}「ãã—ã¦åƒ•ãŒå›ã‚’æ„›ã™ã‚‹ã®ã¯ã€å›è‡ªèº«ãŒæ„›ã§ã‚ã‚‹ã‹ã‚‰ã ã€{*EF*}{*B*}{*B*} {*C3*}ゲームã¯çµ‚ã‚りã€ãƒ—レイヤーã¯å¤¢ã‹ã‚‰ç›®è¦šã‚ã€ã¾ãŸæ–°ã—ã„夢ãŒå§‹ã¾ã‚Šã¾ã™ã€‚次ã«ãƒ—レイヤーãŒè¦‹ã‚‹å¤¢ã¯ã‚‚ã£ã¨ç´ æ™´ã‚‰ã—ã„ã‚‚ã®ã§ã—ょã†ã€‚プレイヤーã¯å®‡å®™ã§ã‚ã‚Šã€æ„›ã§ã—ãŸ{*EF*}{*B*}{*B*} {*C3*}ã•ã‚ã€ãƒ—レイヤー{*EF*}{*B*}{*B*} -{*C2*}目を覚ã¾ã—ã¦{*EF*}{*B*}{*B*} +{*C2*}目を覚ã¾ã—ã¦{*EF*} 暗黒界をリセットã™ã‚‹ @@ -3563,9 +4210,9 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ 暗黒界をリセットã—ãªã„ -ç¾åœ¨ã€Mooshroom ã¯æ¯›åˆˆã‚Šã§ãã¾ã›ã‚“。豚ã€ç¾Šã€ç‰›ã€ãƒã‚³ã®æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—ãŸã€‚ +ç¾åœ¨ã€Mooshroom ã¯æ¯›åˆˆã‚Šã§ãã¾ã›ã‚“。豚ã€ç¾Šã€ç‰›ã€ãƒã‚³ã€é¦¬ã®æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—ãŸã€‚ -ç¾åœ¨ã€ã‚¹ãƒãƒ¼ãƒ³ エッグを使用ã§ãã¾ã›ã‚“。 豚ã€ç¾Šã€ç‰›ã€ãƒã‚³ã®æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—㟠+ç¾åœ¨ã€ã‚¹ãƒãƒ¼ãƒ³ エッグを使用ã§ãã¾ã›ã‚“。 豚ã€ç¾Šã€ç‰›ã€ãƒã‚³ã€é¦¬ã®æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—ãŸã€‚ ç¾åœ¨ã€ã‚¹ãƒãƒ¼ãƒ³ エッグを使用ã§ãã¾ã›ã‚“。 Mooshroom ã®æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—㟠@@ -3575,6 +4222,8 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ ç¾åœ¨ã€ã‚¹ãƒãƒ¼ãƒ³ エッグを使用ã§ãã¾ã›ã‚“。 世界ã®ã‚¤ã‚«ã®æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—㟠+ç¾åœ¨ã€ã‚¹ãƒãƒ¼ãƒ³ エッグを使用ã§ãã¾ã›ã‚“。 ä¸–ç•Œã®æ‘äººã®æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—㟠+ ç¾åœ¨ã€ã‚¹ãƒãƒ¼ãƒ³ エッグを使用ã§ãã¾ã›ã‚“。 ä¸–ç•Œã®æ•µã®æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—㟠ç¾åœ¨ã€ã‚¹ãƒãƒ¼ãƒ³ エッグを使用ã§ãã¾ã›ã‚“。 ä¸–ç•Œã®æ‘äººã®æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—㟠@@ -3583,12 +4232,14 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ 難易度「ピースã€ã§ã¯æ•µã‚’出ç¾ã•ã›ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 -ã“ã®å‹•ç‰©ã¯æ±‚愛モードã«ã§ãã¾ã›ã‚“。豚ã€ç¾Šã€ç‰›ã€ãƒã‚³ã®ç¹æ®–æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—㟠+ã“ã®å‹•ç‰©ã¯æ±‚愛モードã«ã§ãã¾ã›ã‚“。豚ã€ç¾Šã€ç‰›ã€ãƒã‚³ã€é¦¬ã®ç¹æ®–æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—ãŸã€‚ ã“ã®å‹•ç‰©ã¯æ±‚愛モードã«ã§ãã¾ã›ã‚“。オオカミã®ç¹æ®–æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—㟠ã“ã®å‹•ç‰©ã¯æ±‚愛モードã«ã§ãã¾ã›ã‚“。ニワトリã®ç¹æ®–æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—㟠+ã“ã®å‹•ç‰©ã¯æ±‚愛モードã«ã§ãã¾ã›ã‚“。馬ã®ç¹æ®–æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—ãŸã€‚ + ã“ã®å‹•ç‰©ã¯æ±‚愛モードã«ã§ãã¾ã›ã‚“。Mooshroom ã®ç¹æ®–æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—㟠世界ã®ãƒœãƒ¼ãƒˆã®æ•°ãŒæœ€å¤§æ•°ã«é”ã—ã¾ã—㟠@@ -3616,27 +4267,43 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ クレジット コンテンツをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« - + デãƒãƒƒã‚°è¨­å®š - + ç«ã®å»¶ç„¼ - + TNT ã®çˆ†ç™º - + PvP - + é«˜åº¦ãªæ“ä½œã‚’è¨±å¯ - + ホスト特権 - + 建物を生æˆã™ã‚‹ - + スーパーフラット - + ボーナス ãƒã‚§ã‚¹ãƒˆ - + 世界ã®ã‚ªãƒ—ション - + +ゲーム オプション + +生ã物ã«ã‚ˆã‚‹å¦¨å®³ + +æŒã¡ç‰©ã®ä¿æŒ + +生ã物ã®å‡ºç¾ + +生ã物ã‹ã‚‰ã®æˆ¦åˆ©å“ + +タイルã‹ã‚‰ã®ã‚¢ã‚¤ãƒ†ãƒ å…¥æ‰‹ + +自然å†ç”Ÿ + +時刻ã®å¤‰åŒ– + å»ºè¨­ã¨æŽ¡æŽ˜ã®è¨±å¯ ドアã¨ã‚¹ã‚¤ãƒƒãƒã‚’使用å¯èƒ½ @@ -3647,7 +4314,7 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ 動物を攻撃å¯èƒ½ -ホストオプションを変更ã§ãã‚‹ +ホストオプションを変更å¯èƒ½ プレイヤーを追放 @@ -3675,7 +4342,7 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ 世界ã®ç¨® -ランダムã«ç¨®ã‚’決ã‚ã‚‹å ´åˆã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¦ãã ã•ã„ +空白ã®ã¾ã¾ã§ç¨®ã‚’ãƒ©ãƒ³ãƒ€ãƒ ã«æ±ºå®šã™ã‚‹ プレイヤー @@ -3697,17 +4364,17 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ ã‚²ãƒ¼ãƒ ã«æˆ»ã‚‹ -セーブ +ゲームをセーブ 難易度: -ゲームタイプ: +ゲーム タイプ: ゲーマータグ: 建物: -レベルタイプ: +レベル タイプ: PvP: @@ -3823,6 +4490,14 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ 毒 +ウィザー + +HP ブースト + +å¸åŽ + +飽和 + スピード㮠éˆåŒ–ã® @@ -3861,6 +4536,14 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ 毒㮠+ (è¡°å¼±) + + (HP ブースト) + + (å¸åŽ) + + (飽和) + II @@ -3957,6 +4640,22 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ プレイヤーã€å‹•物ã€ãƒ¢ãƒ³ã‚¹ã‚¿ãƒ¼ã® HP を時間ã¨ã¨ã‚‚ã«æ¸›å°‘ã•ã›ã¾ã™ +é©ç”¨æ™‚: + +馬ã®ã‚¸ãƒ£ãƒ³ãƒ—å¼·ã• + +ã‚¾ãƒ³ãƒ“ã®æ´è» + +最大 HP + +生ã物ã«ã‚ˆã‚‹è¿½å°¾ç¯„囲 + +ノックãƒãƒƒã‚¯è€æ€§ + +スピード + +攻撃ダメージ + é‹­ã• è–ãªã‚‹åŠ› @@ -4047,13 +4746,13 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ 3{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚ジャガイモをã‹ã¾ã©ã§èª¿ç†ã™ã‚‹ã¨ã§ãã‚‹ -1{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚ã‹ã¾ã©ã§èª¿ç†ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã€‚è¾²åœ°ã«æ¤ãˆã‚‹ã“ã¨ãŒã§ãる。病気ã«ãªã‚‹å ´åˆãŒã‚ã‚‹ +1{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚ç—…æ°—ã«ãªã‚‹å ´åˆãŒã‚ã‚‹ 3{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚ニンジンã¨é‡‘ã®å¡Šã‹ã‚‰ä½œã‚‹ éžã‚’ç€ã‘ãŸè±šã«ä¹—ã£ãŸæ™‚ã€æ“縦ã™ã‚‹ã®ã«ä½¿ã† -4{*ICON_SHANK_01*} 回復ã™ã‚‹ +4{*ICON_SHANK_01*} 回復ã™ã‚‹ã€‚ 武器ã€é“å…·ã€é˜²å…·ã‚’エンãƒãƒ£ãƒ³ãƒˆã™ã‚‹ã®ã«é‡‘床ã¨ä¸€ç·’ã«ä½¿ç”¨ã™ã‚‹ @@ -4445,7 +5144,7 @@ OK ã‚’é¸æŠžã™ã‚‹ã¨ã€ã“ã®ä¸–界ã§ã®ãƒ—レイを終了ã—ã¾ã™ Xbox 360 -Back +戻る ã“ã®ã‚ªãƒ—ションã§ã¯ã€å®Ÿç¸¾ãŠã‚ˆã³ãƒ©ãƒ³ã‚­ãƒ³ã‚°æ›´æ–°ã¯ç„¡åйã«ãªã‚Šã¾ã™ã€‚ diff --git a/Minecraft.Client/Common/Media/ko-KR/4J_strings.resx b/Minecraft.Client/Common/Media/ko-KR/4J_strings.resx index a084ef5d..dfa720ac 100644 --- a/Minecraft.Client/Common/Media/ko-KR/4J_strings.resx +++ b/Minecraft.Client/Common/Media/ko-KR/4J_strings.resx @@ -73,11 +73,11 @@ 게ì´ë¨¸ í”„ë¡œí•„ì´ ì˜¤í”„ë¼ì¸ ìƒíƒœìž…니다. -ì´ ê²Œìž„ 기능 중 ì¼ë¶€ëŠ” 게ì´ë¨¸ 프로필로 Xbox Liveì— ë¡œê·¸ì¸í•´ì•¼ ì´ìš©í•  수 있습니다. 현재는 오프ë¼ì¸ ìƒíƒœìž…니다. +ì´ ê²Œìž„ 기능 중 ì¼ë¶€ëŠ” 게ì´ë¨¸ 프로필로 Xbox LIVEì— ë¡œê·¸ì¸í•´ì•¼ ì´ìš©í•  수 있습니다. 현재는 오프ë¼ì¸ ìƒíƒœìž…니다. -ì´ ê¸°ëŠ¥ì„ ì´ìš©í•˜ë ¤ë©´ 게ì´ë¨¸ 프로필로 Xbox Liveì— ë¡œê·¸ì¸í•´ì•¼ 합니다. +ì´ ê¸°ëŠ¥ì„ ì´ìš©í•˜ë ¤ë©´ 게ì´ë¨¸ 프로필로 Xbox LIVEì— ë¡œê·¸ì¸í•´ì•¼ 합니다. -Xbox Live ì—°ê²° +Xbox LIVE ì—°ê²° 오프ë¼ì¸ìœ¼ë¡œ 계ì†í•˜ê¸° diff --git a/Minecraft.Client/Common/Media/ko-KR/strings.resx b/Minecraft.Client/Common/Media/ko-KR/strings.resx index 17c67711..6516a2f4 100644 --- a/Minecraft.Client/Common/Media/ko-KR/strings.resx +++ b/Minecraft.Client/Common/Media/ko-KR/strings.resx @@ -150,7 +150,7 @@ Minecraft는 블ë¡ì„ 배치하여 무엇ì´ë“  ìƒìƒí•œ 대로 만들 수 있 {*CONTROLLER_ACTION_LOOK*}으로 주위를 둘러봅니다.{*B*}{*B*} {*CONTROLLER_ACTION_MOVE*}으로 ì£¼ë³€ì„ ì´ë™í•©ë‹ˆë‹¤.{*B*}{*B*} {*CONTROLLER_ACTION_JUMP*}를 누르면 ì í”„합니다.{*B*}{*B*} -{*CONTROLLER_ACTION_MOVE*}ì„ ì•žìœ¼ë¡œ 빠르게 ë‘ ë²ˆ 누르면 질주합니다. {*CONTROLLER_ACTION_MOVE*}를 ê³„ì† ëˆ„ë¥´ê³  있으면 질주 ì‹œê°„ì´ ë‹¤ ë˜ê±°ë‚˜ ìŒì‹ 막대가 {*ICON_SHANK_03*} ì´í•˜ê°€ ë  ë•Œê¹Œì§€ ê³„ì† ì§ˆì£¼í•©ë‹ˆë‹¤. +{*CONTROLLER_ACTION_MOVE*}ì„ ì•žìœ¼ë¡œ 빠르게 ë‘ ë²ˆ 누르면 질주합니다. {*CONTROLLER_ACTION_MOVE*}를 ê³„ì† ëˆ„ë¥´ê³  있으면 질주 ì‹œê°„ì´ ë‹¤ ë˜ê±°ë‚˜ ìŒì‹ 막대가 {*ICON_SHANK_03*} ì´í•˜ê°€ ë  ë•Œê¹Œì§€ ê³„ì† ì§ˆì£¼í•©ë‹ˆë‹¤.{*B*}{*B*} {*CONTROLLER_ACTION_ACTION*}를 누르고 있으면 ì†ì´ë‚˜ ë„구를 사용해 채굴하거나 벌목합니다. 특정 블ë¡ì„ 채굴하려면 ë„구를 만들어야 í•  수 있습니다.{*B*}{*B*} ì†ì— ì•„ì´í…œì„ 들고 있다면 {*CONTROLLER_ACTION_USE*}를 눌러 사용하거나 {*CONTROLLER_ACTION_DROP*}를 눌러 버릴 수 있습니다. @@ -229,11 +229,11 @@ HUD는 ì²´ë ¥ì´ë‚˜ 산소(물ì†ì— ìžˆì„ ë•Œ), ë°°ê³ í”” 레벨(ë°°ê³ í””ì„ {*T3*}í”Œë ˆì´ ë°©ë²•: 효과부여{*ETW*}{*B*}{*B*} 괴물 ë° ë™ë¬¼ì„ 처치하거나 ë˜ëŠ” 특정 블ë¡ì„ 채굴하거나 녹여서 ì–»ì„ ìˆ˜ 있는 경험치로 ë„구, 무기 ë° ë°©ì–´êµ¬ì— íš¨ê³¼ë¥¼ 부여할 수 있습니다.{*B*} -ê²€, 활, ë„ë¼, 곡괭ì´, 삽 ë˜ëŠ” 방어구를 íš¨ê³¼ë¶€ì—¬ëŒ€ì— ë†“ì¸ ì±… ì•„ëž˜ì— ìžˆëŠ” ìŠ¬ë¡¯ì— ë„£ìœ¼ë©´ 슬롯 ì˜¤ë¥¸ìª½ì— ê°ê° 경험치 ë¹„ìš©ì´ ì“°ì¸ ë‹¨ì¶” 세 개가 나타납니다.{*B*} +ê²€, 활, ë„ë¼, 곡괭ì´, 삽 ë˜ëŠ” 방어구를 íš¨ê³¼ë¶€ì—¬ëŒ€ì— ë†“ì¸ ì±… ì•„ëž˜ì— ìžˆëŠ” ìŠ¬ë¡¯ì— ë„£ìœ¼ë©´ 슬롯 ì˜¤ë¥¸ìª½ì— ê°ê° 경험치 ë¹„ìš©ì´ ì“°ì¸ ë‹¨ì¶” 세 개가 나타납니다.{*B*} íš¨ê³¼ë¶€ì—¬ì— í•„ìš”í•œ 경험치가 모ìžëž€ í•­ëª©ì€ ë¹¨ê°„ìƒ‰ìœ¼ë¡œ 나타나며, 그렇지 않다면 ì´ˆë¡ìƒ‰ìœ¼ë¡œ 나타납니다.{*B*}{*B*} 실제 효과부여는 í‘œì‹œëœ ë¹„ìš©ì— ê¸°ë°˜ì„ ë‘ê³  무작위로 ì ìš©ë©ë‹ˆë‹¤.{*B*}{*B*} 효과부여대가 한 ë¸”ë¡ ê°„ê²©ì„ ë‘ê³  ì±…ìž¥ì— ë‘˜ëŸ¬ì‹¸ì—¬ 있으면(최대 책장 15개까지) 효과부여 ë ˆë²¨ì´ ìƒìŠ¹í•˜ë©°, íš¨ê³¼ë¶€ì—¬ëŒ€ì— ë†“ì¸ ì±…ì— ì‹ ë¹„í•œ ë¬¸ì–‘ì´ ë‚˜íƒ€ë‚©ë‹ˆë‹¤.{*B*}{*B*} -효과부여대를 만들 때 ì“°ì´ëŠ” 모든 재료는 월드 ì•ˆì˜ ë§ˆì„ì—서 찾거나 월드 안ì—서 채굴 ë° ê²½ìž‘ì„ í†µí•´ ì–»ì„ ìˆ˜ 있습니다.{*B*} +효과부여대를 만들 때 ì“°ì´ëŠ” 모든 재료는 월드 ì•ˆì˜ ë§ˆì„ì—서 찾거나 월드 안ì—서 채굴 ë° ê²½ìž‘ì„ í†µí•´ ì–»ì„ ìˆ˜ 있습니다.{*B*}{*B*} 효과부여 ì±…ì€ ëª¨ë£¨ì—서 ì•„ì´í…œì— 효과를 부여하는 ë° ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ê²ƒìœ¼ë¡œ ì•„ì´í…œì— ë” íš¨ìœ¨ì ìœ¼ë¡œ 효과를 부여할 수 있습니다.{*B*} @@ -281,9 +281,9 @@ Xbox 360 본체용 Minecraft는 멀티 í”Œë ˆì´ ê²Œìž„ì´ ê¸°ë³¸ê°’ìœ¼ë¡œ ë˜ {*CONTROLLER_ACTION_DPAD_LEFT*}를 누르면 왼쪽으로 ì´ë™í•˜ê³  {*CONTROLLER_ACTION_DPAD_RIGHT*}를 누르면 오른쪽으로 ì´ë™í•©ë‹ˆë‹¤. {*T3*}í”Œë ˆì´ ë°©ë²•: 호스트 ë° í”Œë ˆì´ì–´ 옵션{*ETW*}{*B*}{*B*} - + {*T1*}게임 옵션{*ETW*}{*B*} -월드를 불러오거나 새로 만들 때 "추가 옵션" 단추를 누르면 ê²Œìž„ì˜ ì„¸ë¶€ ì‚¬í•­ì„ ì¡°ì •í•  수 있는 메뉴가 열립니다.{*B*}{*B*} +월드를 불러오거나 새로 만들 때 "추가 옵션"ì„ ëˆ„ë¥´ë©´ ê²Œìž„ì˜ ì„¸ë¶€ ì‚¬í•­ì„ ì¡°ì •í•  수 있는 메뉴가 열립니다.{*B*}{*B*} {*T2*}플레ì´ì–´ 대 플레ì´ì–´{*ETW*}{*B*} ì´ ì˜µì…˜ì„ ì¼œë©´ 플레ì´ì–´ê°€ 다른 플레ì´ì–´ë¥¼ 공격할 수 있습니다. ìƒì¡´ 모드ì—ë§Œ ì ìš©ë©ë‹ˆë‹¤.{*B*}{*B*} @@ -300,6 +300,27 @@ Xbox 360 본체용 Minecraft는 멀티 í”Œë ˆì´ ê²Œìž„ì´ ê¸°ë³¸ê°’ìœ¼ë¡œ ë˜ {*T2*}호스트 특권{*ETW*}{*B*} ì´ ì˜µì…˜ì„ ì¼œë©´ 호스트는 게임 메뉴ì—서 플레ì´ì–´ì—게 비행 ëŠ¥ë ¥ì„ ì£¼ê±°ë‚˜, 지치지 않게 하거나, 투명하게 만들 수 있습니다.{*DISABLES_ACHIEVEMENTS*}{*B*}{*B*} + {*T2*}시간대 전환{*ETW*}{*B*} + 비활성화하면 시간대가 변하지 않습니다.{*B*}{*B*} + + {*T2*}소지품 유지{*ETW*}{*B*} + 활성화하면 플레ì´ì–´ê°€ ì£½ì–´ë„ ì†Œì§€í’ˆì˜ ì•„ì´í…œì„ 잃지 않습니다.{*B*}{*B*} + + {*T2*}괴물 ìƒì„±{*ETW*}{*B*} + 비활성화하면 괴물ì´ë‚˜ ë™ë¬¼ì´ ìžì—°ì ìœ¼ë¡œ ìƒì„±ë˜ì§€ 않습니다.{*B*}{*B*} + + {*T2*}ê´´ë¬¼ì— ì˜í•œ 괴롭힘{*ETW*}{*B*} + 비활성화하면 몬스터와 ë™ë¬¼ì´ 블ë¡ì„ êµì²´í•˜ê±°ë‚˜ ì•„ì´í…œì„ ì§‘ì§€ 못하게 합니다. 예를 들어 Creeperê°€ í­ë°œí•´ë„ 블ë¡ì´ 파괴ë˜ì§€ 않으며, ì–‘ì€ í’€ì„ ì œê±°í•˜ì§€ 못합니다.{*B*}{*B*} + + {*T2*}괴물 전리품{*ETW*}{*B*} + 비활성화하면 괴물과 ë™ë¬¼ì´ ì „ë¦¬í’ˆì„ ë–¨ì–´íŠ¸ë¦¬ì§€ 않습니다. 예를 들어 Creeperê°€ í™”ì•½ì„ ë–¨ì–´íŠ¸ë¦¬ì§€ 않습니다.{*B*}{*B*} + + {*T2*}íƒ€ì¼ ì•„ì´í…œ{*ETW*}{*B*} + 비활성화하면 블ë¡ì´ 파괴ë¼ë„ ì•„ì´í…œì„ 떨어트리지 않습니다. 예를 들어 ëŒ ë¸”ë¡ì—서 조약ëŒì„ ì–»ì„ ìˆ˜ 없습니다.{*B*}{*B*} + + {*T2*}ìžì—° 재ìƒ{*ETW*}{*B*} + 비활성화하면 플레ì´ì–´ì˜ ì²´ë ¥ì´ ìžì—°ì ìœ¼ë¡œ 재ìƒë˜ì§€ 않습니다.{*B*}{*B*} + {*T1*}월드 ìƒì„± 옵션{*ETW*}{*B*} 새 월드를 ìƒì„±í•  때 ì„ íƒí•  수 있는 추가 옵션입니다.{*B*}{*B*} @@ -316,13 +337,13 @@ Xbox 360 본체용 Minecraft는 멀티 í”Œë ˆì´ ê²Œìž„ì´ ê¸°ë³¸ê°’ìœ¼ë¡œ ë˜ ì´ ì˜µì…˜ì„ ì¼œë©´ 지하가 재건ë©ë‹ˆë‹¤. ì‚¬ì „ì— ì§€í•˜ 요새가 없는 ê³³ì— ë¯¸ë¦¬ 저장하면 유용합니다.{*B*}{*B*} {*T1*}게임 메뉴 옵션{*ETW*}{*B*} - 게임 í”Œë ˆì´ ì¤‘ì— {*BACK_BUTTON*} 단추를 눌러서 게임 메뉴로 ì´ë™í•œ ë‹¤ìŒ ì‚¬ìš©í•  수 있는 옵션입니다.{*B*}{*B*} + 게임 í”Œë ˆì´ ì¤‘ì— {*BACK_BUTTON*}ì„ ëˆŒëŸ¬ 게임 메뉴로 ì´ë™í•œ ë‹¤ìŒ ì‚¬ìš©í•  수 있는 옵션입니다.{*B*}{*B*} {*T2*}호스트 옵션{*ETW*}{*B*} 호스트 플레ì´ì–´ë‚˜ 관리ìžë¡œ ì„¤ì •ëœ í”Œë ˆì´ì–´ëŠ” "호스트 옵션" ë©”ë‰´ì— ë“¤ì–´ê°ˆ 수 있습니다. ì´ ë©”ë‰´ì—서 불 확산과 TNT í­ë°œì„ 켜거나 ëŒ ìˆ˜ 있습니다.{*B*}{*B*} {*T1*}플레ì´ì–´ 옵션{*ETW*}{*B*} -플레ì´ì–´ì˜ í–‰ë™ ê¶Œí•œì„ ë³€ê²½í•˜ë ¤ë©´ 플레ì´ì–´ ì´ë¦„ì„ ì„ íƒí•˜ê³  {*CONTROLLER_VK_A*} 단추를 눌러 플레ì´ì–´ 특권 메뉴ì—서 ë‹¤ìŒ ì˜µì…˜ì„ ì¡°ì •í•˜ì‹­ì‹œì˜¤.{*B*}{*B*} +플레ì´ì–´ì˜ í–‰ë™ ê¶Œí•œì„ ë³€ê²½í•˜ë ¤ë©´ 플레ì´ì–´ ì´ë¦„ì„ ì„ íƒí•˜ê³  {*CONTROLLER_VK_A*}를 눌러 플레ì´ì–´ 특권 메뉴ì—서 ë‹¤ìŒ ì˜µì…˜ì„ ì¡°ì •í•˜ì‹­ì‹œì˜¤.{*B*}{*B*} {*T2*}건설 ë° ì±„ê´‘ 가능{*ETW*}{*B*} ì´ ì˜µì…˜ì€ "플레ì´ì–´ 신뢰"를 ê»ì„ 때만 사용할 수 있습니다. ì´ ì˜µì…˜ì„ ì¼œë©´ 플레ì´ì–´ëŠ” 월드ì—서 ì¼ë°˜ì ì¸ í–‰ë™ì„ ëª¨ë‘ í•  수 있습니다. ì´ ì˜µì…˜ì„ ë„ë©´ 플레ì´ì–´ëŠ” 블ë¡ì„ 놓거나 파괴하지 못합니다.{*B*}{*B*} @@ -340,27 +361,29 @@ Xbox 360 본체용 Minecraft는 멀티 í”Œë ˆì´ ê²Œìž„ì´ ê¸°ë³¸ê°’ìœ¼ë¡œ ë˜ ì´ ì˜µì…˜ì€ "플레ì´ì–´ 신뢰"를 ê»ì„ 때만 사용할 수 있습니다. ì´ ì˜µì…˜ì„ ë„ë©´ 플레ì´ì–´ëŠ” ë™ë¬¼ì—게 피해를 줄 수 없습니다.{*B*}{*B*} {*T2*}관리ìž{*ETW*}{*B*} - ì´ ì˜µì…˜ì„ ì¼œë©´ 플레ì´ì–´ëŠ” 다른 플레ì´ì–´ì˜ íŠ¹ê¶Œì„ ë³€ê²½í•  수 있습니다(호스트 제외). “플레ì´ì–´ 신뢰â€ë¥¼ ë„ë©´ 플레ì´ì–´ë¥¼ 추방하거나 불 확산과 TNT í­ë°œì„ 켜거나 ëŒ ìˆ˜ 있습니다.{*B*}{*B*} + ì´ ì˜µì…˜ì„ ì¼œë©´ 플레ì´ì–´ëŠ” 다른 플레ì´ì–´ì˜ íŠ¹ê¶Œì„ ë³€ê²½í•  수 있습니다(호스트 제외). “플레ì´ì–´ 신뢰â€ë¥¼ ë„ë©´ 플레ì´ì–´ë¥¼ 추방하거나 불 확산과 TNT í­ë°œì„ 켜거나 ëŒ ìˆ˜ 있습니다.{*B*}{*B*} {*T2*}플레ì´ì–´ 추방{*ETW*}{*B*} 호스트 플레ì´ì–´ì™€ ê°™ì€ {*PLATFORM_NAME*} 본체로 플레ì´í•˜ëŠ” 플레ì´ì–´ë¥¼ 제외하고, ì´ ì˜µì…˜ì„ ì„ íƒí•˜ë©´ 다른 {*PLATFORM_NAME*} 본체로 ì ‘ì†í•˜ëŠ” 플레ì´ì–´ë¥¼ 추방할 수 있습니다. 추방당한 플레ì´ì–´ëŠ” ê²Œìž„ì´ ìƒˆë¡œ 시작ë˜ê¸° 전까지 다시 참가할 수 없습니다.{*B*}{*B*} - + {*T1*}호스트 플레ì´ì–´ 옵션{*ETW*}{*B*} "호스트 특권" ì˜µì…˜ì„ ì¼  ìƒíƒœì—서 호스트 플레ì´ì–´ëŠ” 플레ì´ì–´ íŠ¹ê¶Œì„ ë³€ê²½í•  수 있습니다. 플레ì´ì–´ íŠ¹ê¶Œì„ ë³€ê²½í•˜ë ¤ë©´ 플레ì´ì–´ ì´ë¦„ì„ ì„ íƒí•˜ê³  {*CONTROLLER_VK_A*}를 눌러 플레ì´ì–´ 특권 메뉴ì—서 ë‹¤ìŒ ì˜µì…˜ì„ ì¡°ì •í•˜ì‹­ì‹œì˜¤.{*B*}{*B*} {*T2*}비행 가능{*ETW*}{*B*} ì´ ì˜µì…˜ì„ ì¼œë©´ 플레ì´ì–´ëŠ” ë‚  수 있습니다. ì´ ì˜µì…˜ì€ ìƒì¡´ 모드ì—서만 ì ìš©ë©ë‹ˆë‹¤(창작 모드ì—서는 모든 플레ì´ì–´ê°€ 비행 가능).{*B*}{*B*} - + {*T2*}지치지 않ìŒ{*ETW*}{*B*} ì´ ì˜µì…˜ì€ ìƒì¡´ 모드ì—서만 ì ìš©ë©ë‹ˆë‹¤. ì´ ì˜µì…˜ì„ ì¼œë©´ 걷기/달리기/ì í”„ ë“±ì˜ í–‰ë™ì„ í•´ë„ ìŒì‹ 막대가 줄어들지 않습니다. 하지만 플레ì´ì–´ê°€ ìƒì²˜ë¥¼ 입으면 회복ë˜ëŠ” ë™ì•ˆ ìŒì‹ 막대가 서서히 줄어듭니다.{*B*}{*B*} - + {*T2*}투명화{*ETW*}{*B*} ì´ ì˜µì…˜ì„ ì¼œë©´ 플레ì´ì–´ëŠ” 다른 플레ì´ì–´ì˜ ëˆˆì— ë³´ì´ì§€ 않게 ë˜ë©° ë¬´ì  ìƒíƒœê°€ ë©ë‹ˆë‹¤.{*B*}{*B*} - - {*T2*}순간ì´ë™ 가능{*ETW*}{*B*} - 플레ì´ì–´ê°€ 플레ì´ì–´ ìžì‹  ë˜ëŠ” 다른 플레ì´ì–´ë¥¼ 월드 ë‚´ 다른 곳으로 ì´ë™ì‹œí‚¬ 수 있습니다. + + {*T2*}순간ì´ë™ 가능{*ETW*}{*B*} + 플레ì´ì–´ê°€ 플레ì´ì–´ ìžì‹  ë˜ëŠ” 다른 플레ì´ì–´ë¥¼ 월드 ë‚´ 다른 곳으로 ì´ë™ì‹œí‚¬ 수 있습니다. +호스트 플레ì´ì–´ì™€ ê°™ì€ {*PLATFORM_NAME*} 본체로 플레ì´í•˜ëŠ” 플레ì´ì–´ë¥¼ 제외하고, ì´ ì˜µì…˜ì„ ì„ íƒí•˜ë©´ 다른 {*PLATFORM_NAME*} 본체로 ì ‘ì†í•˜ëŠ” 플레ì´ì–´ë¥¼ 추방할 수 있습니다. 추방당한 플레ì´ì–´ëŠ” ê²Œìž„ì´ ìƒˆë¡œ 시작ë˜ê¸° 전까지 다시 참가할 수 없습니다. + ë‹¤ìŒ íŽ˜ì´ì§€ ì´ì „ 페ì´ì§€ @@ -426,61 +449,95 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E {*T3*}수정 ë° ì¶”ê°€{*ETW*}{*B*}{*B*} -- 새 ì•„ì´í…œ 추가 - ì—메랄드, ì—메랄드 ê´‘ì„, ì—메랄드 블ë¡, Ender ìƒìž, 트립와ì´ì–´ 후í¬, íš¨ê³¼ë¶€ì—¬ëœ í™©ê¸ˆ 사과, 모루, 화분, ì¡°ì•½ëŒ ë²½, ì´ë¼ ë‚€ ì¡°ì•½ëŒ ë²½, ë§ë¼ë¹„틀어진 그림, ê°ìž, 구운 ê°ìž, ë…성 ê°ìž, 당근, 황금 당근, 당근 막대, -호박 파ì´, 야간 시야 물약, 투명화 물약, 지하 ì„ì˜, 지하 ì„ì˜ ê´‘ì„, ì„ì˜ ë¸”ë¡, ì„ì˜ ë°œíŒ, ì„ì˜ ê³„ë‹¨, ê¹Žì•„ë†“ì€ ì„ì˜ ë¸”ë¡, ì„ì˜ ë¸”ë¡ ê¸°ë‘¥, 효과부여 ì±…, 카펫{*B*} -- 새 조합법 추가 - 부드러운 사암 ë° ê¹Žì•„ë†“ì€ ì‚¬ì•”{*B*} -- 새로운 괴물 추가 - 좀비 ë§ˆì„ ì‚¬ëžŒ{*B*} -- 새 지역 ìƒì„± 기능 - 사막 사ì›, 사막 마ì„, 정글 사ì›{*B*} -- ë§ˆì„ ì‚¬ëžŒê³¼ 거래 가능{*B*} -- 모루 ì¸í„°íŽ˜ì´ìФ 추가{*B*} -- 가죽 방어구 염색 가능{*B*} -- 늑대 목줄 염색 가능{*B*} -- 당근 막대기로 ë¼ì§€ ë°©í–¥ 조종 가능{*B*} -- ë” ë§Žì€ ì•„ì´í…œìœ¼ë¡œ 보너스 ìƒìž 내용물 ì—…ë°ì´íЏ{*B*} -- 반쪽 ë¸”ë¡ ë°°ì¹˜ ë° ë°˜ìª½ ë¸”ë¡ ìœ„ì˜ ë‹¤ë¥¸ ë¸”ë¡ ë°°ì¹˜ 변경{*B*} -- 뒤집힌 계단과 ë°œíŒ ë°°ì¹˜ 변경{*B*} -- ë§ˆì„ ì‚¬ëžŒ ì§ì—… 추가{*B*} -- ë‚³ì€ ì•Œì—서 나온 ë§ˆì„ ì‚¬ëžŒì—게 무작위 ì§ì—… 부여{*B*} -- 통나무 옆으로 놓기 가능{*B*} -- 나무 ë„구를 용광로ì—서 연료로 사용 가능{*B*} -- 채굴 정확성 효과부여 ë„구로 ì–¼ìŒ ë° ìœ ë¦¬ íŒìž 수집 가능{*B*} -- 화살로 나무 단추와 나무 ì••ë ¥íŒ ìž‘ë™ ê°€ëŠ¥{*B*} -- ì°¨ì›ë¬¸ì„ 통해 ì§€ìƒì— 지하 괴물 ìƒì„± 가능{*B*} -- Creeper와 거미는 마지막으로 ìžì‹ ì„ 공격한 플레ì´ì–´ë¥¼ 공격함{*B*} -- 창작 ëª¨ë“œì˜ ê´´ë¬¼ë“¤ì€ ìž ì‹œ ì‹œê°„ì´ ì§€ë‚œ 후 중립 ìƒíƒœê°€ ë¨{*B*} -- ë¬¼ì— ë¹ ì¡Œì„ ë•Œ 타격 ë°˜ë™ ì œê±°{*B*} -- 좀비가 부수는 ë¬¸ì— í”¼í•´ 표시{*B*} -- 지하ì—서 ì–¼ìŒì´ ë…¹ìŒ{*B*} -- 비가 오면 ê°€ë§ˆì†¥ì´ ì±„ì›Œì§{*B*} -- 피스톤 ì—…ë°ì´íЏ 시간 2배로 ì¦ê°€{*B*} -- ì•ˆìž¥ì„ ê°€ì§„ ë¼ì§€ë¥¼ 죽ì´ë©´ ì•ˆìž¥ì„ ë–¨ì–´íŠ¸ë¦¼{*B*} -- Enderì˜ í•˜ëŠ˜ 색 변경{*B*} -- 트립와ì´ì–´ìš©ìœ¼ë¡œ 실 설치 가능{*B*} -- 비가 ë‚˜ë­‡ìžŽì„ í†µê³¼í•´ 내림{*B*} -- ë¸”ë¡ ì•„ëž˜ìª½ì— ë ˆë²„ 설치 가능{*B*} -- 난ì´ë„ ì„¤ì •ì— ë”°ë¼ TNT 위력 변화{*B*} -- ì±… 조합법 변경{*B*} -- ì—°ìžŽì´ ë°°ë¥¼ 파괴하지 않고, ë°°ê°€ ì—°ìžŽì„ íŒŒê´´í•˜ë„ë¡ ë³€ê²½{*B*} -- ë¼ì§€ê°€ ë¼ì§€ê³ ê¸°ë¥¼ ë” ë§Žì´ ë–¨ì–´íŠ¸ë¦¼{*B*} -- 완전í‰ë©´ 월드ì—서 슬ë¼ìž„ì´ ë” ì ê²Œ ìƒì„±ë¨{*B*} -- Creeper로부터 받는 피해가 난ì´ë„ì— ë”°ë¼ ë‹¬ë¼ì§€ê³  타격 ë°˜ë™ì´ ê°•í•´ì§{*B*} -- ê³ ì •ëœ Endermanì´ í„±ì„ ë²Œë¦¬ì§€ 않ìŒ{*B*} -- 플레ì´ì–´ 순간ì´ë™ 추가(게임 ì¤‘ì— {*BACK_BUTTON*} 메뉴 사용){*B*} -- ì›ê²© 플레ì´ì–´ 비행, 투명화, ë¬´ì  ê´€ë ¨ 호스트 옵션 추가{*B*} -- 튜토리얼 ì›”ë“œì— ìƒˆ ì•„ì´í…œ ë° ê¸°ëŠ¥ì„ ìœ„í•œ 새 튜토리얼 추가{*B*} -- 튜토리얼 ì›”ë“œì˜ ìŒì•… ë””ìŠ¤í¬ ìƒìž 위치 ì—…ë°ì´íЏ{*B*} +- 새로운 ì•„ì´í…œ 추가 - 단단한 ì°°í™, ìƒ‰ìƒ ì°°í™, ì„탄 블ë¡, ê±´ì´ˆ ë”미, ìž‘ë™ê¸° ë ˆì¼, 레드스톤 블ë¡, ì¼ê´‘ 센서, 드로í¼, 호í¼, 호í¼ê°€ ë¶€ì°©ëœ ê´‘ë¬¼ 수레, TNTê°€ 실린 광물 수레, 레드스톤 ë¹„êµ íšŒë¡œ, ì••ë ¥íŒ, 신호기, 함정 ìƒìž, í­ì£½ 로켓, í­ì£½ 별, ì§€ì˜¥ì˜ ë³„, ëˆ, ë§ ë°©ì–´êµ¬, ì´ë¦„ 태그, ë§ ìƒì„± 알{*B*} +- 새로운 괴물 추가 - 위ë”, ë§ë¼ë¹„틀어진 해골, 마녀, ë°•ì¥, ë§, 당나귀 ë° ë…¸ìƒˆ{*B*} +- 새로운 지역 ìƒì„± 기능 추가 - 마녀 오ë‘막{*B*} +- 신호기 ì¸í„°íŽ˜ì´ìŠ¤ê°€ 추가ë©ë‹ˆë‹¤.{*B*} +- ë§ ì¸í„°íŽ˜ì´ìŠ¤ê°€ 추가ë©ë‹ˆë‹¤.{*B*} +- í˜¸í¼ ì¸í„°íŽ˜ì´ìŠ¤ê°€ 추가ë©ë‹ˆë‹¤.{*B*} +- í­ì£½ 추가 - í­ì£½ 별ì´ë‚˜ í­ì£½ 로켓 재료를 가지고 있으면 작업대ì—서 í­ì£½ ì¸í„°íŽ˜ì´ìŠ¤ê°€ 활성화ë©ë‹ˆë‹¤.{*B*} +- '모험 모드' 추가 - 올바른 ë„구로만 블ë¡ì„ ê¹° 수 있습니다.{*B*} +- 새로운 사운드가 다수 추가ë©ë‹ˆë‹¤.{*B*} +- ì´ì œ 괴물 ë° ë™ë¬¼, ì•„ì´í…œ, 발사체가 ì°¨ì›ë¬¸ì„ 통과할 수 있습니다.{*B*} +- ì´ì œ íƒì§€ê¸° ì˜†ì— ë‹¤ë¥¸ íƒì§€ê¸°ë¡œ ë™ë ¥ì„ 공급해 잠글 수 있습니다.{*B*} +- 좀비와 í•´ê³¨ì´ ë‹¤ë¥¸ 무기와 방어구를 가지고 ìƒì„±ë  수 있습니다.{*B*} +- 새로운 ì‚¬ë§ ë©”ì‹œì§€ê°€ 추가ë©ë‹ˆë‹¤.{*B*} +- ì´ë¦„ 태그로 괴물 ë° ë™ë¬¼ì— ì´ë¦„ì„ ë¶™ì¼ ìˆ˜ 있으며, 보관함 ì´ë¦„ì„ ë³€ê²½í•˜ì—¬ 메뉴를 ì—´ì—ˆì„ ë•Œ 표시ë˜ëŠ” ì œëª©ì„ ë°”ê¿€ 수 있습니다.{*B*} +- 뼛가루는 ë” ì´ìƒ 모든 ê²ƒì„ ìµœëŒ€ í¬ê¸°ë¡œ 즉시 성장시키지 않으며, 무작위로 여러 ë‹¨ê³„ì— ê±¸ì³ ì„±ìž¥ì‹œí‚µë‹ˆë‹¤.{*B*} +- 레드스톤 ë¹„êµ íšŒë¡œë¥¼ ì§ì ‘ 부착해서 ìƒìž, 양조대, 디스펜서, 주í¬ë°•스 ë‚´ìš©ë¬¼ì„ ì•Œë ¤ì£¼ëŠ” 레드스톤 신호를 ê°ì§€í•  수 있습니다.{*B*} +- 디스펜서를 아무 방향으로나 향하게 í•  수 있습니다.{*B*} +- 황금 사과를 먹으면 플레ì´ì–´ê°€ 잠시 ë™ì•ˆ 추가로 'í¡ìˆ˜' ì²´ë ¥ì„ ì–»ìŠµë‹ˆë‹¤.{*B*} +- ì§€ì—­ì— ì˜¤ëž˜ ë¨¸ë¬¼ìˆ˜ë¡ ì§€ì—­ì—서 ìƒì„±ë˜ëŠ” ê´´ë¬¼ì´ ê°•í•´ì§‘ë‹ˆë‹¤.{*B*} {*ETB*}ëŒì•„오신 ê²ƒì„ í™˜ì˜í•©ë‹ˆë‹¤! ì•„ì§ ëˆˆì¹˜ì±„ì§€ 못했ì„ì§€ë„ ëª¨ë¥´ì§€ë§Œ, Minecraftê°€ ì—…ë°ì´íЏë˜ì—ˆìŠµë‹ˆë‹¤.{*B*}{*B*} -새로운 ê¸°ëŠ¥ì´ ë§Žì´ ì¶”ê°€ë습니다. ì¶”ê°€ëœ ì£¼ìš” 기능 ì¼ë¶€ë¥¼ 소개해 드리니 ì½ì–´ë³´ê³  ì‹  나는 ê²Œìž„ì˜ ì„¸ê³„ë¡œ ì—¬í–‰ì„ ë– ë‚˜ì‹­ì‹œì˜¤!{*B*}{*B*} -{*T1*}새로운 ì•„ì´í…œ{*ETB*} - ì—메랄드, ì—메랄드 ê´‘ì„, ì—메랄드 블ë¡, Ender ìƒìž, 트립와ì´ì–´ 후í¬, íš¨ê³¼ë¶€ì—¬ëœ í™©ê¸ˆ 사과, 모루, 화분, ì¡°ì•½ëŒ ë²½, ì´ë¼ ë‚€ ì¡°ì•½ëŒ ë²½, ë§ë¼ë¹„틀어진 그림, ê°ìž, 구운 ê°ìž, ë…성 ê°ìž, 당근, 황금 당근, 당근 막대, -호박 파ì´, 야간 시야 물약, 투명화 물약, 지하 ì„ì˜, 지하 ì„ì˜ ê´‘ì„, ì„ì˜ ë¸”ë¡, ì„ì˜ ë°œíŒ, ì„ì˜ ê³„ë‹¨, ê¹Žì•„ë†“ì€ ì„ì˜ ë¸”ë¡, ì„ì˜ ë¸”ë¡ ê¸°ë‘¥, 효과부여 ì±…, 카펫{*B*}{*B*} -{*T1*}새로운 괴물 추가{*ETB*} - 좀비 ë§ˆì„ ì‚¬ëžŒ{*B*}{*B*} -{*T1*}새 기능{*ETB*} - ë§ˆì„ ì‚¬ëžŒê³¼ 거래, 모루ì—서 무기 ë° ë„구를 수리하거나 효과 부여, Ender ìƒìžì— ì•„ì´í…œ 저장, ë¼ì§€ë¥¼ íƒ”ì„ ë•Œ 당근 스틱으로 ë°©í–¥ ì¡°ì • 가능!{*B*}{*B*} -{*T1*}새로운 미니 튜토리얼{*ETB*} – 튜토리얼 월드ì—서 새로운 ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ëŠ” ë°©ë²•ì„ ì•Œì•„ë³´ì„¸ìš”!{*B*}{*B*} -{*T1*}새로운 '부활절 알'{*ETB*} – 튜토리얼 월드ì—서 비밀 ìŒì•… 디스í¬ì˜ 위치를 ëª¨ë‘ ì˜®ê²¼ìŠµë‹ˆë‹¤. 다시 한번 찾아보세요!{*B*}{*B*} +새로운 ê¸°ëŠ¥ì´ ë§Žì´ ì¶”ê°€ë습니다. ì¶”ê°€ëœ ì£¼ìš” 기능 ì¼ë¶€ë¥¼ 소개해 드리니 ì½ì–´ë³´ê³  ì‹  나는 ê²Œìž„ì˜ ì„¸ê³„ë¡œ ì—¬í–‰ì„ ë– ë‚˜ì‹­ì‹œì˜¤!{*B*}{*B*} +{*T1*}New Items{*ETB*} - 단단한 ì°°í™, ìƒ‰ìƒ ì°°í™, ì„탄 블ë¡, ê±´ì´ˆ ë”미, ìž‘ë™ê¸° ë ˆì¼, 레드스톤 블ë¡, ì¼ê´‘ 센서, 드로í¼, 호í¼, 호í¼ê°€ ë¶€ì°©ëœ ê´‘ë¬¼ 수레, TNTê°€ 실린 광물 수레, 레드스톤 ë¹„êµ íšŒë¡œ, ì••ë ¥íŒ, 신호기, 함정 ìƒìž, í­ì£½ 로켓, í­ì£½ 별, ì§€ì˜¥ì˜ ë³„, ëˆ, ë§ ë°©ì–´êµ¬, ì´ë¦„ 태그, ë§ ìƒì„± 알{*B*}{*B*} +{*T1*} 새로운 괴물 ë° ë™ë¬¼ {*ETB*} - 위ë”, ë§ë¼ë¹„틀어진 해골, 마녀, ë°•ì¥, ë§, 당나귀 ë° ë…¸ìƒˆ{*B*}{*B*} +{*T1*} 새로운 기능 {*ETB*} - ë§ ê¸¸ë“¤ì´ê¸° ë° íƒ€ê¸°, í­ì£½ 만들어 터뜨리기, ì´ë¦„ 태그로 ë™ë¬¼ ë° ê´´ë¬¼ì— ì´ë¦„ ë¶™ì´ê¸°, 보다 ê³ ì„±ëŠ¥ì˜ ë ˆë“œìŠ¤í†¤ 회로 만들기, ì†ë‹˜ì´ ìžì‹ ì˜ 월드ì—서 í•  수 있는 í–‰ë™ì„ 제어하는 새로운 호스트 옵션 {*B*}{*B*} +{*T1*} 새로운 튜토리얼 월드 {*ETB*} – 기존 ë° ìƒˆ ê¸°ëŠ¥ì˜ ì‚¬ìš©ë²•ì„ íŠœí† ë¦¬ì–¼ 월드ì—서 배우십시오. ë˜í•œ ì›”ë“œì— ìˆ¨ê²¨ì§„ 모든 비밀 ìŒë°˜ 찾기ì—ë„ ë„ì „í•´ 보십시오!{*B*}{*B*} +ë§ + +{*T3*}í”Œë ˆì´ ë°©ë²•: ë§{*ETW*}{*B*}{*B*} +ë§ê³¼ 당나귀는 주로 íƒ íŠ¸ì¸ í‰ì›ì—서 ì°¾ì„ ìˆ˜ 있습니다. 노새는 당나귀와 ë§ì˜ 새ë¼ì´ì§€ë§Œ ë²ˆì‹ ëŠ¥ë ¥ì´ ì—†ìŠµë‹ˆë‹¤.{*B*} +다 ìžëž€ ë§ê³¼ 당나귀, 노새는 타고 ë‹¤ë‹ ìˆ˜ 있습니다. 하지만 방어구는 ë§ì—게만 ìž…íž ìˆ˜ 있으며, ì•„ì´í…œ ìš´ë°˜ì— í•„ìš”í•œ 안장 ê°€ë°©ì€ ë‹¹ë‚˜ê·€ì™€ 노새ì—게만 착용시킬 수 있습니다.{*B*}{*B*} +ë§ê³¼ 당나귀, 노새는 ê¸¸ì„ ë“¤ì—¬ì•¼ 사용할 수 있습니다. ë§ì€ 타려고 시ë„í•¨ìœ¼ë¡œì¨ ê¸¸ì„ ë“¤ì¼ ìˆ˜ 있지만, ì´ ê³¼ì •ì—서 ë§ì€ 기수를 떨어트리려고 í•  것ì´ë¯€ë¡œ ë§ë“±ì— 잘 타고 있어야 합니다.{*B*} +ê¸¸ì´ ë“¤ë©´ ì£¼ë³€ì— í•˜íŠ¸ 표시가 나타나며, ë” ì´ìƒ 기수를 떨어트리려고 하지 않습니다. ë§ì˜ ë°©í–¥ì„ ì¡°ì •í•˜ë ¤ë©´ ì•ˆìž¥ì„ ì°©ìš©ì‹œì¼œì•¼ 합니다.{*B*}{*B*} +ì•ˆìž¥ì€ ë§ˆì„ ì£¼ë¯¼ìœ¼ë¡œë¶€í„° 구매하거나 ê³³ê³³ì— ìˆ¨ê²¨ì§„ ìƒìžì— 들어 있습니다.{*B*} +ê¸¸ì´ ë“  당나귀와 ë…¸ìƒˆì— ìƒìžë¥¼ 부착하면 안장 ê°€ë°©ì„ ë‹¬ì•„ì¤„ 수 있습니다. ì´ ê°€ë°©ì€ ë‹¹ë‚˜ê·€ ë˜ëŠ” 노새를 타거나 수그린 ìƒíƒœì—서 사용 가능합니다.{*B*}{*B*} +ë§ê³¼ 당나귀(노새 제외)는 황금 사과나 황금 ë‹¹ê·¼ì„ ì‚¬ìš©í•´ 다른 ë™ë¬¼ë“¤ì²˜ëŸ¼ êµë°°í•  수 있습니다.{*B*} +ë§ì•„지는 ì‹œê°„ì´ ì§€ë‚˜ë©´ 성장하여 ë§ì´ ë˜ë©°, ë°€ì´ë‚˜ 건초를 먹ì´ë©´ 성장 ì‹œê°„ì´ ë‹¨ì¶•ë©ë‹ˆë‹¤.{*B*} + + +신호기 + +{*T3*}í”Œë ˆì´ ë°©ë²•: 신호기{*ETW*}{*B*}{*B*} +ìž‘ë™í•˜ëŠ” 신호기는 하늘로 ë°ì€ ê´‘ì„ ì„ ì˜ì•„ 올리고 주변 플레ì´ì–´ì—게 ëŠ¥ë ¥ì„ ë¶€ì—¬í•©ë‹ˆë‹¤.{*B*} +신호기는 위ë”를 잡고 ì–»ì„ ìˆ˜ 있는 유리와 í‘ìš”ì„, ì§€ì˜¥ì˜ ë³„ë¡œ 만듭니다.{*B*}{*B*} +신호기는 ë‚®ì— í–‡ë¹›ì„ ë°›ì„ ìˆ˜ ìž¥ì†Œì— ë†“ì•„ì•¼ 하며, 반드시 ì² , 황금, ì—메랄드 ë° ë‹¤ì´ì•„몬드 ë“±ì˜ í”¼ë¼ë¯¸ë“œ ìœ„ì— ì„¤ì¹˜í•´ì•¼ 합니다.{*B*} +하지만 ì–´ë–¤ 재료를 ì„ íƒí•´ë„ ì‹ í˜¸ê¸°ì˜ ëŠ¥ë ¥ì—는 ì˜í–¥ì„ 주지 않습니다.{*B*}{*B*} +신호기 메뉴ì—서 ì‹ í˜¸ê¸°ì˜ ì£¼ 능력 1개를 ì„ íƒí•  수 있습니다. 피ë¼ë¯¸ë“œì˜ 층수가 ë§Žì„ìˆ˜ë¡ ëŠ¥ë ¥ ì„ íƒì˜ í­ì´ ë” ë„“ì–´ì§‘ë‹ˆë‹¤.{*B*} +4층 ì´ìƒ ë˜ëŠ” 피ë¼ë¯¸ë“œ ìœ„ì˜ ì‹ í˜¸ê¸°ëŠ” ë³´ì¡° ëŠ¥ë ¥ì¸ '재ìƒ'ì´ë‚˜ 주 능력 ê°•í™” 중 한 가지를 추가로 ì„ íƒí•  수 있습니다.{*B*}{*B*} +ì‹ í˜¸ê¸°ì˜ ëŠ¥ë ¥ì„ ì„¤ì •í•˜ë ¤ë©´ 지불 ìŠ¬ë¡¯ì— ì—메랄드, 다ì´ì•„몬드, 황금 ë˜ëŠ” ì²  주괴를 넣어야 합니다.{*B*} +재료를 넣으면 신호기ì—서 ëŠ¥ë ¥ì´ ë¬´ê¸°í•œìœ¼ë¡œ ë°œë™ë©ë‹ˆë‹¤.{*B*} + + +í­ì£½ + +{*T3*}í”Œë ˆì´ ë°©ë²•: í­ì£½{*ETW*}{*B*}{*B*} +í­ì£½ì€ ì†ì´ë‚˜ 디스펜서로 발사할 수 있는 ìž¥ì‹ ì•„ì´í…œì´ë©°, 기본 ìž¬ë£Œì¸ ì¢…ì´ì™€ í™”ì•½ì— í­ì£½ ë³„ì„ ë¶€ê°€ì ìœ¼ë¡œ ë”í•´ 만들 수 있습니다.{*B*} +í­ì£½ ë³„ì„ ë§Œë“¤ 때 추가 재료를 넣으면 색ìƒê³¼ 사ë¼ì§€ëŠ” 형태, 모양, í¬ê¸°, 효과(궤ì ì´ë‚˜ ë°˜ì§ìž„ 등)를 ì›í•˜ëŠ” 대로 바꿀 수 있습니다.{*B*}{*B*} +í­ì£½ì„ 만들려면 소지품 위 3x3 ì œìž‘ì¹¸ì— í™”ì•½ê³¼ 종ì´ë¥¼ 넣으십시오.{*B*} +ì œìž‘ì¹¸ì— í­ì£½ 별 여러 개를 추가로 넣어 í­ì£½ì— ì¡°í•©í•  수 있습니다.{*B*} +제작칸 ìŠ¬ë¡¯ì— í™”ì•½ì„ ë” ë§Žì´ ì±„ìš°ë©´ í­ì£½ ë³„ì´ í­ë°œí•˜ëŠ” 높ì´ê°€ ì¦ê°€í•©ë‹ˆë‹¤.{*B*}{*B*} +그런 ë‹¤ìŒ ê²°ê³¼ë¬¼ 슬롯 밖으로 ì™„ì„±ëœ í­ì£½ì„ 꺼낼 수 있습니다.{*B*}{*B*} +í­ì£½ ë³„ì€ í™”ì•½ê³¼ 염료를 ì œìž‘ì¹¸ì— ë„£ì–´ 만들 수 있습니다.{*B*} + – 염료는 í­ì£½ ë³„ì´ í­ë°œí•  ë•Œì˜ ìƒ‰ìƒì„ 결정합니다.{*B*} + – í­ì£½ ë³„ì˜ ëª¨ì–‘ì€ ë¶ˆì˜ì‹œê°œ, 금ë©ì´, 깃털, 괴물 머리를 추가해 바꿀 수 있습니다.{*B*} + – 다ì´ì•„몬드나 ë°œê´‘ì„ ê°€ë£¨ë¥¼ 사용하면 궤ì ì´ë‚˜ ë°˜ì§ìž„ 효과가 추가ë©ë‹ˆë‹¤.{*B*}{*B*} +í­ì£½ ë³„ì„ ë§Œë“  후ì—는 염료와 함께 ì¡°í•©í•´, í­ë°œ 후 사ë¼ì§ˆ ë•Œì˜ ìƒ‰ìƒì„ 조절할 수 있습니다. + + +í˜¸í¼ + +{*T3*}í”Œë ˆì´ ë°©ë²•: 호í¼{*ETW*}{*B*}{*B*} +호í¼ëŠ” ë³´ê´€í•¨ì— ì•„ì´í…œì„ 넣거나 빼고, 보관함 ì•ˆì— ë“¤ì–´ê°„ ì•„ì´í…œì„ ìžë™ìœ¼ë¡œ 집습니다.{*B*} +호í¼ëŠ” 양조대, ìƒìž, 디스펜서, 드로í¼, ìƒìžê°€ ë“  광물 수레, 호í¼ê°€ ë¶€ì°©ëœ ê´‘ë¬¼ 수레, 다른 호í¼ì— ì˜í–¥ì„ 줄 수 있습니다.{*B*}{*B*} +호í¼ëŠ” ê·¸ ìœ„ì— ì„¤ì¹˜ëœ ì ì ˆí•œ 보관함으로부터 ê³„ì† ì•„ì´í…œì„ 빨아들ì´ë ¤ê³  시ë„합니다. ë˜í•œ ë³´ê´€ëœ ì•„ì´í…œì„ 배출구 쪽 ë³´ê´€í•¨ì— ë„£ìœ¼ë ¤ê³  합니다.{*B*} +호í¼ì— ë ˆë“œìŠ¤í†¤ì˜ ë™ë ¥ì´ 공급ë˜ë©´ ìž‘ë™ì„ 멈추고 ì•„ì´í…œ 빨아들ì´ê¸°ì™€ 넣기를 중지합니다.{*B*}{*B*} +호í¼ëŠ” ì•„ì´í…œì„ 내보내려는 ë°©í–¥ì„ ê°€ë¦¬í‚µë‹ˆë‹¤. 호í¼ê°€ 특정 블ë¡ì„ 가리키게 하려면 호í¼ë¥¼ 해당 블ë¡ê³¼ 대치ë˜ëŠ” ë°©í–¥ì— ì„¤ì¹˜í•˜ì‹­ì‹œì˜¤.{*B*} + + + +ë“œë¡œí¼ + +{*T3*}í”Œë ˆì´ ë°©ë²•: 드로í¼{*ETW*}{*B*}{*B*} +드로í¼ì— ë ˆë“œìŠ¤í†¤ì˜ ë™ë ¥ì´ 주입ë˜ë©´ ê·¸ ì•ˆì— ë“  ì•„ì´í…œ 하나를 무작위로 ë•…ì— ë–¨ì–´íŠ¸ë¦½ë‹ˆë‹¤. {*CONTROLLER_ACTION_USE*}ì„(를) 눌러 드로í¼ë¥¼ ì—´ë©´ ì†Œì§€í’ˆì˜ ì•„ì´í…œì„ 드로í¼ì— ë„£ì„ ìˆ˜ 있습니다.{*B*} +드로í¼ê°€ ìƒìžë‚˜ 다른 ì¢…ë¥˜ì˜ ë³´ê´€í•¨ì„ í–¥í•´ 놓였다면 ì•„ì´í…œì€ ë•…ì´ ì•„ë‹ˆë¼ í•´ë‹¹ ìƒìž ì•ˆì— ë“¤ì–´ê°‘ë‹ˆë‹¤. ë“œë¡œí¼ ì—¬ëŸ¬ 개를 길게 연결하면 먼 거리로 ì•„ì´í…œì„ 보낼 수 있으며, ì´ ê¸°ëŠ¥ì„ ìž‘ë™ì‹œí‚¤ë ¤ë©´ ê° ë“œë¡œí¼ì— 별ë„로 ë™ë ¥ì„ 공급하거나 차단해야 합니다. + + ë§¨ì† ê³µê²©ë³´ë‹¤ ìœ„ë ¥ì´ ê°•í•©ë‹ˆë‹¤. ì†ì„ 사용하는 것보다 í™, 잡초, 모래, ìžê°ˆ, ëˆˆì„ ë” ë¹¨ë¦¬ 파냅니다. 눈ë©ì´ë¥¼ 파내려면 ì‚½ì´ í•„ìš”í•©ë‹ˆë‹¤. @@ -606,10 +663,36 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E ì§€ë„를 들고 ìžˆì„ ë™ì•ˆ íƒí—˜í•œ ì§€ì—­ì˜ ì´ë¯¸ì§€ë¥¼ 만들어냅니다. ê¸¸ì„ ì°¾ëŠ” ë° ì‚¬ìš©í•  수 있습니다. +사용하면 현재 ì†í•œ ì›”ë“œì˜ ì§€ë„ ì¼ë¶€ê°€ ë˜ë©°, ì§€ì—­ì„ íƒí—˜í•˜ë©´ 나머지 ë¶€ë¶„ì´ ì±„ì›Œì§‘ë‹ˆë‹¤. + 화살과 함께 사용하여 ì›ê±°ë¦¬ ê³µê²©ì„ í•©ë‹ˆë‹¤. í™œì— ìž¥ì „í•˜ì—¬ 사용합니다. +위ë”ì—게서 ì–»ì„ ìˆ˜ 있으며 ì‹ í˜¸ê¸°ì˜ ìž¬ë£Œë¡œ 사용합니다. + +ìž‘ë™í•˜ë©´ 화려한 ìƒ‰ì˜ í­ë°œì„ ì¼ìœ¼í‚µë‹ˆë‹¤. 색ìƒê³¼ 효과, 모양과 사ë¼ì§€ëŠ” íŒ¨í„´ì€ í­ì£½ì„ 만들 때 사용한 í­ì£½ ë³„ì— ë”°ë¼ ê²°ì •ë©ë‹ˆë‹¤. + +í­ì£½ì˜ 색ìƒ, 효과, ëª¨ì–‘ì„ ê²°ì •í•˜ëŠ” 재료입니다. + +레드스톤 íšŒë¡œì— ì‚¬ìš©í•˜ì—¬ 신호 ê°•ë„를 유지, 비êµ, 낮추거나 특정 ë¸”ë¡ ìƒíƒœë¥¼ 측정합니다. + +움ì§ì´ëŠ” TNT 블ë¡ì²˜ëŸ¼ ìž‘ë™í•˜ëŠ” 광물 ìˆ˜ë ˆì˜ í•œ 종류입니다. + +í–‡ë¹›ì´ ìžˆê±°ë‚˜ ì—†ìŒì— ë”°ë¼ ë ˆë“œìŠ¤í†¤ 신호를 발산하는 블ë¡ìž…니다. + +호í¼ì™€ 비슷하게 ìž‘ë™í•˜ëŠ” 특별한 광물 수레입니다. íŠ¸ëž™ì— ìžˆëŠ” ì•„ì´í…œì„ 주워 담거나 수레 ìœ„ì— ìžˆëŠ” 보관함ì—서 ì•„ì´í…œì„ 빼냅니다. + +ë§ì— ìž…íž ìˆ˜ 있는 특별한 방어구입니다. ë°©ì–´ë ¥ì´ 5 ì¦ê°€í•©ë‹ˆë‹¤. + +ë§ì— ìž…íž ìˆ˜ 있는 특별한 방어구입니다. ë°©ì–´ë ¥ì´ 7 ì¦ê°€í•©ë‹ˆë‹¤. + +ë§ì— ìž…íž ìˆ˜ 있는 특별한 방어구입니다. ë°©ì–´ë ¥ì´ 11 ì¦ê°€í•©ë‹ˆë‹¤. + +괴물 ë° ë™ë¬¼ì„ 플레ì´ì–´ë‚˜ ìš¸íƒ€ë¦¬ì— ë§¤ì–´ë‘¡ë‹ˆë‹¤. + +괴물 ë° ë™ë¬¼ ì´ë¦„ ì§“ê¸°ì— ì‚¬ìš©ë©ë‹ˆë‹¤. + {*ICON_SHANK_01*}를 2.5ë§Œí¼ íšŒë³µí•©ë‹ˆë‹¤. {*ICON_SHANK_01*}를 1ë§Œí¼ íšŒë³µí•©ë‹ˆë‹¤. 효과가 6번까지 중복ë©ë‹ˆë‹¤. @@ -934,100 +1017,158 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E 괴물 머리는 장ì‹ìš©ìœ¼ë¡œ 놓아둘 ìˆ˜ë„ ìžˆê³ , 투구 ìŠ¬ë¡¯ì— ë†“ì•„ 마스í¬ë¡œ 쓸 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +ëª…ë ¹ì„ ì‹¤í–‰í•˜ëŠ” ë° ì‚¬ìš©í•©ë‹ˆë‹¤. + +하늘로 ê´‘ì„ ì„ ë°œì‚¬í•˜ê³  주변 플레ì´ì–´ì—게 ìƒíƒœ 효과를 부여합니다. + +ì•ˆì— ë¸”ë¡ê³¼ ì•„ì´í…œì„ 보관합니다. ìƒìž 2개를 나란히 ë¶™ì´ë©´ ìš©ëŸ‰ì´ 2ë°°ì¸ í° ìƒìžê°€ 만들어집니다. 함정 ìƒìžëŠ” ì—´ì—ˆì„ ë•Œ 레드스톤 ì „ê¸°ë„ ë°œìƒì‹œí‚µë‹ˆë‹¤. + +레드스톤 전기를 ë°œìƒì‹œí‚µë‹ˆë‹¤. ì•„ì´í…œì´ ë§Žì´ ì˜¬ë ¤ì ¸ 있으면 전기가 강해집니다. + +레드스톤 전기를 ë°œìƒì‹œí‚µë‹ˆë‹¤. ì•„ì´í…œì´ ë§Žì´ ì˜¬ë ¤ì ¸ 있으면 전기가 강해집니다. 가벼운 ë°œíŒë³´ë‹¤ 무거운 무게를 필요로 합니다. + +ë ˆë“œìŠ¤í†¤ì˜ ë™ë ¥ì›ìœ¼ë¡œ 사용ë©ë‹ˆë‹¤. 다시 레드스톤으로 변환할 수 있습니다. + +ì•„ì´í…œì„ 잡거나 보관함 안으로 ë˜ëŠ” 밖으로 ì•„ì´í…œì„ 옮기는 ë° ì‚¬ìš©í•©ë‹ˆë‹¤. + +호í¼ê°€ ë¶€ì°©ëœ ê´‘ë¬¼ 수레를 사용 가능 ë˜ëŠ” 불가능하게 하고 TNTê°€ 실린 광물 수레를 ìž‘ë™ì‹œí‚¬ 수 있는 ë ˆì¼ìž…니다. + +레드스톤 전기를 í˜ë¦¬ë©´ ì•„ì´í…œì„ 잡고 있거나, 떨어트리거나, 다른 보관함으로 ì•„ì´í…œì„ 밀어보냅니다. + +단단한 ì°°í™ìœ¼ë¡œ 만든 ìƒ‰ì´ í™”ë ¤í•œ 블ë¡ìž…니다. + +ë§, 당나귀, 노새ì—게 먹여 ì²´ë ¥ì„ 10 회복시킵니다. ë§ì•„지가 ë” ë¹¨ë¦¬ 성장하게 합니다. + +화로ì—서 ì°°í™ì„ 제련해서 만듭니다. + +유리와 염료로 만듭니다. + +스테ì¸ë“œê¸€ë¼ìŠ¤ë¡œë¶€í„° 만듭니다. + +ì„íƒ„ì„ ë³´ê´€í•  수 있는 편리한 방법입니다. 화로ì—서 연료로 사용할 수 있습니다. + 오징어 - + 잡으면 먹물 주머니를 ì–»ì„ ìˆ˜ 있습니다. - + 소 - + 잡으면 ê°€ì£½ì„ ì–»ì„ ìˆ˜ 있습니다. ë˜í•œ 우유를 짜서 ì–‘ë™ì´ì— ë‹´ì„ ìˆ˜ 있습니다. - + ì–‘ - + 가위를 사용하면 ì–‘í„¸ì„ ì–»ì„ ìˆ˜ 있습니다. ì´ë¯¸ í„¸ì„ ê¹Žì•˜ë‹¤ë©´ ì–‘í„¸ì´ ë‚˜ì˜¤ì§€ 않습니다. í„¸ì„ ì—¼ìƒ‰í•˜ì—¬ ìƒ‰ì„ ë°”ê¿€ 수 있습니다. - + ë‹­ - + 잡으면 ê¹ƒí„¸ì´ ë‚˜ì˜µë‹ˆë‹¤. ê°€ë” ì•Œì„ ë‚³ìŠµë‹ˆë‹¤. - + ë¼ì§€ - + 잡으면 ë¼ì§€ê³ ê¸°ë¥¼ ì–»ì„ ìˆ˜ 있습니다. ì•ˆìž¥ì„ ì‚¬ìš©í•˜ë©´ 타고 ë‹¤ë‹ ìˆ˜ 있습니다. - + 늑대 - + 공격받기 전까지는 위협ì ì´ì§€ 않으며, 공격하면 뒤를 습격합니다. 뼈를 ì´ìš©í•´ì„œ 길들ì´ë©´ ë°ë¦¬ê³  ë‹¤ë‹ ìˆ˜ 있으며, 플레ì´ì–´ë¥¼ 공격하는 대ìƒì„ 공격합니다. - + Creeper - + ê°€ê¹Œì´ ë‹¤ê°€ê°€ë©´ í­ë°œí•©ë‹ˆë‹¤! - + 해골 - + 플레ì´ì–´ì—게 í™”ì‚´ì„ ì©ë‹ˆë‹¤. 처치하면 í™”ì‚´ì„ ë–¨ì–´ëœ¨ë¦½ë‹ˆë‹¤. - + 거미 - + ê°€ê¹Œì´ ë‹¤ê°€ê°€ë©´ 공격합니다. ë²½ì„ íƒ€ê³  오를 수 있으며, 처치하면 ì‹¤ì„ ë–¨ì–´ëœ¨ë¦½ë‹ˆë‹¤. - + 좀비 - + ê°€ê¹Œì´ ë‹¤ê°€ê°€ë©´ 공격합니다. - + Pigman 좀비 - + 먼저 공격하지 않지만, ê³µê²©ì„ ë°›ìœ¼ë©´ 무리를 지어 달려듭니다. - + Ghast - + 닿으면 í­ë°œí•˜ëŠ” 불ë©ì–´ë¦¬ë¥¼ ë˜ì§‘니다. - + 슬ë¼ìž„ - + 피해를 입으면 ìž‘ì€ ìŠ¬ë¼ìž„으로 분리ë©ë‹ˆë‹¤. - + Enderman - + 플레ì´ì–´ê°€ ë°”ë¼ë³´ë©´ 공격합니다. 블ë¡ì„ 들어 옮길 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. - + Sliverfish - + 공격하면 ê·¼ì²˜ì˜ Sliverfish를 ëŒì–´ë“¤ìž…니다. ëŒ ë¸”ë¡ì— 숨어 있습니다. - + ë™êµ´ 거미 - + ë…ì´ ìžˆìŠµë‹ˆë‹¤. - + Mooshroom - + 그릇과 함께 사용하면 ë²„ì„¯ì£½ì„ ë§Œë“¤ 수 있습니다. 가위를 사용하면 ë²„ì„¯ì„ ë–¨ì–´ëœ¨ë¦¬ê³  보통 소가 ë©ë‹ˆë‹¤. - + 눈 골렘 - + 플레ì´ì–´ëŠ” 눈 블ë¡ê³¼ í˜¸ë°•ì„ ì‚¬ìš©í•´ 눈 ê³¨ë ˜ì„ ë§Œë“¤ 수 있습니다. 눈 ê³¨ë ˜ì€ í”Œë ˆì´ì–´ì˜ ì ì—게 눈ë©ì´ë¥¼ ë˜ì§‘니다. - + Ender 드래곤 - + Enderì—서 찾아볼 수 있는 거대한 ê²€ì€ìƒ‰ 드래곤입니다. - + Blaze - + 주로 지하 요새ì—서 찾아볼 수 있는 ì ìž…니다. 죽으면 Blaze 막대를 떨어뜨립니다. - + 마그마 í브 - + 지하ì—서 찾아볼 수 있습니다. 슬ë¼ìž„처럼 죽으면 분열하여 여러 ê°œì˜ ì¡°ê·¸ë§Œ í브가 ë©ë‹ˆë‹¤. - + ë§ˆì„ ì‚¬ëžŒ - + 오셀롯 - + 정글ì—서 ì°¾ì„ ìˆ˜ 있으며 ë‚ ìƒì„ ì„ 먹여서 ì¡°ë ¨ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤. ì´ë•Œ ê°‘ìžê¸° 움ì§ì´ë©´ ì˜¤ì…€ë¡¯ì´ ê²ì„ 먹고 ë„ë§ì¹˜ê¸° 때문ì—, ì˜¤ì…€ë¡¯ì´ ë‹¤ê°€ì˜¤ê²Œ 만들어야 합니다. - + ì²  골렘 - + 마ì„ì„ ë³´í˜¸í•˜ê¸° 위해 나타납니다. ì²  블ë¡ê³¼ 호박으로 만들 수 있습니다. - + +ë°•ì¥ + +ì´ ë‚ ì•„ë‹¤ë‹ˆëŠ” ë™ë¬¼ì€ ë™êµ´ì´ë‚˜ ê·¸ ì™¸ì˜ ë„“ê³  íì‡„ëœ ê³µê°„ì—서 발견ë©ë‹ˆë‹¤. + +마녀 + +늪ì—서 만날 수 있는 ì´ ì ì€ ë¬¼ì•½ì„ ë˜ì§€ë©° 공격합니다. 처치하면 ë¬¼ì•½ì„ ë–¨ì–´íŠ¸ë¦½ë‹ˆë‹¤. + +ë§ + +ì´ ë™ë¬¼ì€ 길들여서 타고 ë‹¤ë‹ ìˆ˜ 있습니다. + +당나귀 + +ì´ ë™ë¬¼ì€ 길들여서 타고 ë‹¤ë‹ ìˆ˜ 있으며, ìƒìžë¥¼ 달아줄 수 있습니다. + +노새 + +ë§ê³¼ 당나귀를 êµë°°ì‹œì¼œ 낳습니다. ì´ ë™ë¬¼ì€ 길들여서 타고 ë‹¤ë‹ ìˆ˜ 있으며 ìƒìžë¥¼ 달아줄 수 있습니다. + +좀비 ë§ + +해골 ë§ + +ìœ„ë” + +위ë”ì˜ í•´ê³¨ê³¼ ì˜í˜¼ 모래로 만듭니다. 플레ì´ì–´ë¥¼ 향해 í­ë°œí•˜ëŠ” í•´ê³¨ì„ ë°œì‚¬í•©ë‹ˆë‹¤. + Explosives Animator Concept Artist @@ -1042,7 +1183,7 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E Rest of Mojang Office -리드 게임 프로그래머 Minecraft PC +Lead Game Programmer Minecraft PC Code Ninja @@ -1374,6 +1515,8 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E ì§€ë„ +빈 ì§€ë„ + ìŒì•… ë””ìŠ¤í¬ - "13" ìŒì•… ë””ìŠ¤í¬ - "cat" @@ -1476,6 +1619,28 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E Creeper 머리 +ì§€ì˜¥ì˜ ë³„ + +í­ì£½ 로켓 + +í­ì£½ 별 + +레드스톤 ë¹„êµ íšŒë¡œ + +TNTê°€ 실린 광물 수레 + +호í¼ê°€ ë¶€ì°©ëœ ê´‘ë¬¼ 수레 + +ì² ì œ ë§ ë°©ì–´êµ¬ + +황금 ë§ ë°©ì–´êµ¬ + +다ì´ì•„몬드 ë§ ë°©ì–´êµ¬ + +ëˆ + +ì´ë¦„ 태그 + ëŒ ìž¡ì´ˆ ë¸”ë¡ @@ -1492,6 +1657,8 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E 정글 나무 íŒìž +나무 íŒìž(종류 무관) + 묘목 참나무 묘목 @@ -1828,6 +1995,190 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E ë‘개골 +명령 ë¸”ë¡ + +신호기 + +함정 ìƒìž + +가벼운 ì••ë ¥íŒ + +무거운 ì••ë ¥íŒ + +레드스톤 ë¹„êµ íšŒë¡œ + +ì¼ê´‘ 센서 + +레드스톤 ë¸”ë¡ + +í˜¸í¼ + +ìž‘ë™ê¸° ë ˆì¼ + +ë“œë¡œí¼ + +ìƒ‰ìƒ ì°°í™ + +ê±´ì´ˆ ë”미 + +단단한 ì°°í™ + +ì„탄 ë¸”ë¡ + +ê²€ì€ìƒ‰ ì°°í™ + +빨간색 ì°°í™ + +녹색 ì°°í™ + +갈색 ì°°í™ + +파란색 ì°°í™ + +ìžì£¼ìƒ‰ ì°°í™ + +ì²­ë¡ìƒ‰ ì°°í™ + +ë°ì€ 회색 ì°°í™ + +회색 ì°°í™ + +ë¶„í™ìƒ‰ ì°°í™ + +ë¼ìž„색 ì°°í™ + +노란색 ì°°í™ + +ë°ì€ 파란색 ì°°í™ + +ìží™ìƒ‰ ì°°í™ + +주황색 ì°°í™ + +í°ìƒ‰ ì°°í™ + +스테ì¸ë“œê¸€ë¼ìФ + +ê²€ì€ìƒ‰ 스테ì¸ë“œê¸€ë¼ìФ + +빨간색 스테ì¸ë“œê¸€ë¼ìФ + +녹색 스테ì¸ë“œê¸€ë¼ìФ + +갈색 스테ì¸ë“œê¸€ë¼ìФ + +파란색 스테ì¸ë“œê¸€ë¼ìФ + +ìžì£¼ìƒ‰ 스테ì¸ë“œê¸€ë¼ìФ + +ì²­ë¡ìƒ‰ 스테ì¸ë“œê¸€ë¼ìФ + +ë°ì€ 회색 스테ì¸ë“œê¸€ë¼ìФ + +회색 스테ì¸ë“œê¸€ë¼ìФ + +ë¶„í™ìƒ‰ 스테ì¸ë“œê¸€ë¼ìФ + +ë¼ìž„색 스테ì¸ë“œê¸€ë¼ìФ + +노란색 스테ì¸ë“œê¸€ë¼ìФ + +ë°ì€ 파란색 스테ì¸ë“œê¸€ë¼ìФ + +ìží™ìƒ‰ 스테ì¸ë“œê¸€ë¼ìФ + +주황색 스테ì¸ë“œê¸€ë¼ìФ + +í°ìƒ‰ 스테ì¸ë“œê¸€ë¼ìФ + +스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +ê²€ì€ìƒ‰ 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +빨간색 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +녹색 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +갈색 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +파란색 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +ìžì£¼ìƒ‰ 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +ì²­ë¡ìƒ‰ 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +ë°ì€ 회색 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +회색 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +ë¶„í™ìƒ‰ 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +ë¼ìž„색 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +노란색 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +ë°ì€ 파란색 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +ìží™ìƒ‰ 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +주황색 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +í°ìƒ‰ 스테ì¸ë“œê¸€ë¼ìФ íŒìœ ë¦¬ + +ìž‘ì€ ê³µ + +í° ê³µ + +별 모양 + +Creeper 모양 + +í­ë°œ + +알 수 없는 모양 + +ê²€ì€ìƒ‰ + +빨간색 + +녹색 + +갈색 + +파란색 + +ìžì£¼ìƒ‰ + +ì²­ë¡ìƒ‰ + +ë°ì€ 회색 + +회색 + +ë¶„í™ìƒ‰ + +ë¼ìž„색 + +노란색 + +ë°ì€ 파란색 + +ìží™ìƒ‰ + +주황색 + +í°ìƒ‰ + +ì‚¬ìš©ìž ì§€ì • + +사ë¼ì§€ëŠ” 패턴: + +ë°˜ì§ìž„ + +ê¶¤ì  + +효과 시간: +  현재 컨트롤 배치 @@ -1854,9 +2205,9 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E 버리기 -살금살금 걷기 +조용히 걷기 -살금살금 걷기/아래로 비행 +조용히 걷기/아래로 비행 ì¹´ë©”ë¼ ëª¨ë“œ 변경 @@ -2005,8 +2356,7 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E ì´ê³³ì€ 소지품입니다. ì´ í™”ë©´ì—는 ì†ì— 들고 쓸 수 있는 ì•„ì´í…œê³¼ 가지고 ë‹¤ë‹ ìˆ˜ 있는 ì•„ì´í…œì´ ëª¨ë‘ í‘œì‹œë©ë‹ˆë‹¤. ë°©ì–´ë ¥ ë˜í•œ ì´ í™”ë©´ì—서 확ì¸í•  수 있습니다. - - + {*B*} 계ì†í•˜ë ¤ë©´ {*CONTROLLER_VK_A*} 단추를 누르십시오.{*B*} 소지품 ì‚¬ìš©ë²•ì„ ì´ë¯¸ 알고 있다면 {*CONTROLLER_VK_B*} 단추를 누르십시오. @@ -2027,7 +2377,7 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E - ì•„ì´í…œ 정보를 ë” ë³´ë ¤ë©´ í¬ì¸í„°ë¡œ ì•„ì´í…œì„ 가리킨 ë‹¤ìŒ {*CONTROLLER_VK_RT*}를 누르십시오. + ì•„ì´í…œ 정보를 ë” ë³´ë ¤ë©´ í¬ì¸í„°ë¡œ ì•„ì´í…œì„ 가리킨 ë‹¤ìŒ {*CONTROLLER_ACTION_MENU_PAGEDOWN*}ì„ ëˆ„ë¥´ì‹­ì‹œì˜¤. @@ -2061,7 +2411,7 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E - ì•„ì´í…œ 정보를 ë” ë³´ë ¤ë©´ í¬ì¸í„°ë¡œ ì•„ì´í…œì„ 가리킨 ë‹¤ìŒ {*CONTROLLER_VK_RT*}를 누르십시오. + ì•„ì´í…œ 정보를 ë” ë³´ë ¤ë©´ í¬ì¸í„°ë¡œ ì•„ì´í…œì„ 가리킨 ë‹¤ìŒ {*CONTROLLER_ACTION_MENU_PAGEDOWN*}ì„ ëˆ„ë¥´ì‹­ì‹œì˜¤. @@ -2608,6 +2958,211 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E ìŒì‹ 막대와 ìŒì‹ 먹는 ë²•ì— ëŒ€í•´ ì´ë¯¸ 알고 있다면{*CONTROLLER_VK_B*} 단추를 누르십시오. + + 여기는 ë§ ì†Œì§€í’ˆ ì¸í„°íŽ˜ì´ìŠ¤ìž…ë‹ˆë‹¤. + + + + {*B*}계ì†í•˜ë ¤ë©´ {*CONTROLLER_VK_A*}를 누르십시오. + {*B*}ë§ ì†Œì§€í’ˆì— ëŒ€í•´ 알고 있다면 {*CONTROLLER_VK_B*}를 누르십시오. + + + + ë§ ì†Œì§€í’ˆì€ ë§, 당나귀, ë…¸ìƒˆì— ì•„ì´í…œì„ 옮기거나 착용시킬 수 있게 í•´ì¤ë‹ˆë‹¤. + + + + 안장 ìŠ¬ë¡¯ì— ì•ˆìž¥ì„ ë„£ì–´ ë§ì— ì•ˆìž¥ì„ ì±„ìš¸ 수 있습니다. 방어구 ìŠ¬ë¡¯ì— ë°©ì–´êµ¬ë¥¼ 넣으면 ë§ì´ 방어구를 착용해 ë°©ì–´ë ¥ì´ ì˜¤ë¦…ë‹ˆë‹¤. + + + + ì´ ë©”ë‰´ì—서 ìžì‹ ì˜ 소지품과, 당나귀 ë˜ëŠ” ë…¸ìƒˆì— ë‹¬ë¦° 안장 ê°€ë°©ì˜ ì•„ì´í…œì„ êµí™˜í•  수 있습니다. + + +ë§ì„ 찾았습니다. + +당나귀를 찾았습니다. + +노새를 찾았습니다. + + + {*B*}{*CONTROLLER_VK_A*}를 누르면 ë§ê³¼ 당나귀, ë…¸ìƒˆì— ëŒ€í•´ ë” ì•Œì•„ë³¼ 수 있습니다. + {*B*}ë§ê³¼ 당나귀, ë…¸ìƒˆì— ëŒ€í•´ ì´ë¯¸ 알고 있다면 {*CONTROLLER_VK_B*}를 누르십시오. + + + + ë§ê³¼ 당나귀는 주로 ë„“ì€ í‰ì§€ì—서 발견ë©ë‹ˆë‹¤. 노새는 ë§ê³¼ 당나귀를 êµë°°ì‹œì¼œ ì–»ì„ ìˆ˜ 있지만, 노새 ìžì²´ëŠ” êµë°° ëŠ¥ë ¥ì´ ì—†ìŠµë‹ˆë‹¤. + + + + 다 ìžëž€ ë§ê³¼ 당나귀, 노새는 타고 ë‹¤ë‹ ìˆ˜ 있습니다. 하지만 방어구는 ë§ì—게만 ìž…íž ìˆ˜ 있으며, ì•„ì´í…œ ìš´ë°˜ì— í•„ìš”í•œ 안장 ê°€ë°©ì€ ë‹¹ë‚˜ê·€ì™€ 노새ì—게만 착용시킬 수 있습니다. + + + + ë§ê³¼ 당나귀, 노새는 ê¸¸ì„ ë“¤ì—¬ì•¼ 사용할 수 있습니다. ë§ì€ 타려고 시ë„하면서, 기수를 떨어트리려는 ë§ì— 대항해 단단히 ë¶™ìž¡ì€ ì±„ 타고 있으면 ê¸¸ì„ ë“¤ì¼ ìˆ˜ 있습니다. + + + + ê¸¸ì´ ë“¤ë©´ ì£¼ë³€ì— í•˜íŠ¸ 표시가 나타나며, ë” ì´ìƒ 기수를 떨어트리려고 하지 않습니다. + + + + 지금 ë§íƒ€ê¸°ë¥¼ 시ë„í•´ 보십시오. ì†ì— ì•„ì´í…œì´ë‚˜ ë„구를 들지 ì•Šì€ ì±„ë¡œ {*CONTROLLER_ACTION_USE*}ì„ ì¡°ìž‘í•˜ë©´ 올ë¼íƒ‘니다. + + + + ë§ì˜ ë°©í–¥ì„ ì¡°ì •í•˜ë ¤ë©´ ì•ˆìž¥ì„ ì°©ìš©ì‹œì¼œì•¼ 합니다. ì•ˆìž¥ì€ ë§ˆì„ ì£¼ë¯¼ìœ¼ë¡œë¶€í„° 구매하거나 ê³³ê³³ì— ìˆ¨ê²¨ì§„ ìƒìžì— 들어 있습니다. + + + + ê¸¸ì´ ë“  당나귀와 ë…¸ìƒˆì— ìƒìžë¥¼ 부착하면 안장 ê°€ë°©ì„ ë‹¬ì•„ì¤„ 수 있습니다. ì´ ê°€ë°©ì€ ë‹¹ë‚˜ê·€ ë˜ëŠ” 노새를 타거나 ëª¸ì„ ìˆ˜ê·¸ë¦° ìƒíƒœì—서 사용 가능합니다. + + + + ë§ê³¼ 당나귀(노새 제외)는 황금 사과나 황금 ë‹¹ê·¼ì„ ì‚¬ìš©í•´ 다른 ë™ë¬¼ë“¤ì²˜ëŸ¼ êµë°°í•  수 있습니다. ë§ì•„지는 ì‹œê°„ì´ ì§€ë‚˜ë©´ 성장하여 ë§ì´ ë˜ë©°, ë°€ì´ë‚˜ 건초를 먹ì´ë©´ 성장 ì‹œê°„ì´ ë‹¨ì¶•ë©ë‹ˆë‹¤. + + + + ì´ê³³ì—서 ë§ê³¼ 당나귀 길들ì´ê¸°ë¥¼ 시ë„í•  수 있으며, ì£¼ë³€ì˜ ìƒìžì—는 안장과 ë§ ë°©ì–´êµ¬ë¥¼ 비롯해 ë§ì—게 사용할 수 있는 유용한 ì•„ì´í…œë„ 들어있습니다. + + + + ì´ê²ƒì€ 신호기 ì¸í„°íŽ˜ì´ìŠ¤ìž…ë‹ˆë‹¤. 여기서 ì‹ í˜¸ê¸°ì˜ ëŠ¥ë ¥ì„ ì„ íƒí•  수 있습니다. + + + + {*B*}계ì†í•˜ë ¤ë©´ {*CONTROLLER_VK_A*}를 누르십시오. + {*B*}신호기 ì¸í„°íŽ˜ì´ìФ 사용 ë°©ë²•ì„ ì•Œê³  있다면 {*CONTROLLER_VK_B*}를 누르십시오. + + + + 신호기 메뉴ì—서 ì‹ í˜¸ê¸°ì˜ ì£¼ 능력 1개를 ì„ íƒí•  수 있습니다. 피ë¼ë¯¸ë“œì˜ 층수가 ë§Žì„ìˆ˜ë¡ ëŠ¥ë ¥ ì„ íƒì˜ í­ì´ ë” ë„“ì–´ì§‘ë‹ˆë‹¤. + + + + 4층 ì´ìƒ ë˜ëŠ” 피ë¼ë¯¸ë“œ ìœ„ì˜ ì‹ í˜¸ê¸°ëŠ” ë³´ì¡° ëŠ¥ë ¥ì¸ '재ìƒ'ì´ë‚˜ 주 능력 ê°•í™” 중 한 가지를 추가로 ì„ íƒí•  수 있습니다. + + + + ì‹ í˜¸ê¸°ì˜ ëŠ¥ë ¥ì„ ì„¤ì •í•˜ë ¤ë©´ 지불 ìŠ¬ë¡¯ì— ì—메랄드, 다ì´ì•„몬드, 황금 ë˜ëŠ” ì²  주괴를 넣어야 합니다. 재료를 넣으면 신호기ì—서 ëŠ¥ë ¥ì´ ë¬´ê¸°í•œìœ¼ë¡œ ë°œë™ë©ë‹ˆë‹¤. + + +ì´ í”¼ë¼ë¯¸ë“œ 꼭대기ì—는 정지한 신호기가 있습니다. + + + {*B*}ì‹ í˜¸ê¸°ì— ëŒ€í•´ ë” ì•Œì•„ë³´ë ¤ë©´ {*CONTROLLER_VK_A*}를 누르십시오. + {*B*}ì‹ í˜¸ê¸°ì— ëŒ€í•´ ì´ë¯¸ 알고 있다면 {*CONTROLLER_VK_B*}를 누르십시오. + + + + ìž‘ë™í•˜ëŠ” 신호기는 하늘로 ë°ì€ ê´‘ì„ ì„ ì˜ì•„올리고 주변 플레ì´ì–´ì—게 ëŠ¥ë ¥ì„ ë¶€ì—¬í•©ë‹ˆë‹¤. 신호기는 위ë”를 잡고 ì–»ì„ ìˆ˜ 있는 유리와 í‘ìš”ì„, ì§€ì˜¥ì˜ ë³„ë¡œ 만듭니다. + + + + 신호기는 ë‚®ì— í–‡ë¹›ì„ ë°›ì„ ìˆ˜ ìž¥ì†Œì— ë†“ì•„ì•¼ 하며, 반드시 ì² , 황금, ì—메랄드 ë° ë‹¤ì´ì•„몬드 ë“±ì˜ í”¼ë¼ë¯¸ë“œ ìœ„ì— ì„¤ì¹˜í•´ì•¼ 합니다. 하지만 ì–´ë–¤ 재료를 ì„ íƒí•´ë„ ì‹ í˜¸ê¸°ì˜ ëŠ¥ë ¥ì—는 ì˜í–¥ì„ 주지 않습니다. + + + + 신호기를 사용해 ëŠ¥ë ¥ì„ ì„¤ì •í•´ 보십시오. 제공ë˜ëŠ” ì²  주괴를 대가로 지불할 수 있습니다. + + +여기ì—는 호í¼ê°€ 있습니다. + + + {*B*}호í¼ì— 대해 ë” ì•Œì•„ë³´ë ¤ë©´ {*CONTROLLER_VK_A*}를 누르십시오. + {*B*}호í¼ì— 대해 ì´ë¯¸ 알고 있다면 {*CONTROLLER_VK_B*}를 누르십시오. + + + + 호í¼ëŠ” ë³´ê´€í•¨ì— ì•„ì´í…œì„ 넣거나 빼고, 보관함 ì•ˆì— ë“¤ì–´ê°„ ì•„ì´í…œì„ ìžë™ìœ¼ë¡œ 집습니다. + + + + 호í¼ëŠ” 양조대, ìƒìž, 디스펜서, 드로í¼, ìƒìžê°€ ë“  광물 수레, 호í¼ê°€ ë¶€ì°©ëœ ê´‘ë¬¼ 수레, 다른 호í¼ì— ì˜í–¥ì„ 줄 수 있습니다. + + + + 호í¼ëŠ” ê·¸ ìœ„ì— ì„¤ì¹˜ëœ ì ì ˆí•œ 보관함으로부터 ê³„ì† ì•„ì´í…œì„ 빨아들ì´ë ¤ê³  시ë„합니다. ë˜í•œ ë³´ê´€ëœ ì•„ì´í…œì„ 배출구 쪽 ë³´ê´€í•¨ì— ë„£ìœ¼ë ¤ê³  합니다. + + + + 하지만 호í¼ì— ë ˆë“œìŠ¤í†¤ì˜ ë™ë ¥ì´ 공급ë˜ë©´ ìž‘ë™ì„ 멈추고 ì•„ì´í…œ 빨아들ì´ê¸°ì™€ 넣기를 중지합니다. + + + + 호í¼ëŠ” ì•„ì´í…œì„ 내보내려는 ë°©í–¥ì„ ê°€ë¦¬í‚µë‹ˆë‹¤. 호í¼ê°€ 특정 블ë¡ì„ 가리키게 하려면 호í¼ì— ì•„ì´í…œì´ ë“¤ì–´ìžˆì„ ë•Œ 해당 블ë¡ê³¼ 대치ë˜ëŠ” ë°©í–¥ì— ì„¤ì¹˜í•˜ì‹­ì‹œì˜¤. + + + + ì´ê³³ì—서 í˜¸í¼ ë°°ì—´ì„ í™•ì¸í•˜ê³  실험해볼 수 있습니다. + + + + ì´ê²ƒì€ í­ì£½ ì¸í„°íŽ˜ì´ìŠ¤ìž…ë‹ˆë‹¤. 여기ì—서 í­ì£½ê³¼ í­ì£½ ë³„ì„ ë§Œë“¤ 수 있습니다. + + + + {*B*}계ì†í•˜ë ¤ë©´ {*CONTROLLER_VK_A*}를 누르십시오. + {*B*} í­ì£½ ì¸í„°íŽ˜ì´ìФ 사용 ë°©ë²•ì„ ì•Œê³  있다면 {*CONTROLLER_VK_B*}를 누르십시오. + + + + í­ì£½ì„ 만들려면 소지품 위 3x3 ì œìž‘ì¹¸ì— í™”ì•½ê³¼ 종ì´ë¥¼ 넣으십시오. + + + + ì œìž‘ì¹¸ì— í­ì£½ 별 여러 개를 추가로 넣어 í­ì£½ì— ì„žì„ ìˆ˜ 있습니다. + + + + 제작칸 ìŠ¬ë¡¯ì— í™”ì•½ì„ ë” ë§Žì´ ì±„ìš°ë©´ í­ì£½ ë³„ì´ í­ë°œí•˜ëŠ” 높ì´ê°€ ì¦ê°€í•©ë‹ˆë‹¤. + + + + 그런 ë‹¤ìŒ ê²°ê³¼ë¬¼ 슬롯 밖으로 ì™„ì„±ëœ í­ì£½ì„ 꺼낼 수 있습니다. + + + + í­ì£½ ë³„ì€ í™”ì•½ê³¼ 염료를 ì œìž‘ì¹¸ì— ë„£ì–´ 만들 수 있습니다. + + + + 염료는 í­ì£½ ë³„ì´ í­ë°œí•  ë•Œì˜ ìƒ‰ìƒì„ 결정합니다. + + + + í­ì£½ ë³„ì˜ ëª¨ì–‘ì€ ë¶ˆì˜ì‹œê°œ, 금ë©ì´, 깃털, 괴물 머리를 추가해 바꿀 수 있습니다. + + + + 다ì´ì•„몬드나 ë°œê´‘ì„ ê°€ë£¨ë¥¼ 사용하면 궤ì ì´ë‚˜ ë°˜ì§ìž„ 효과가 추가ë©ë‹ˆë‹¤. + + + + í­ì£½ ë³„ì„ ë§Œë“  후ì—는 염료와 함께 ì¡°í•©í•´, í­ë°œ 후 사ë¼ì§ˆ ë•Œì˜ ìƒ‰ìƒì„ 조절할 수 있습니다. + + + + ì´ ìƒìžë“¤ì—는 í­ì£½ì„ 만드는 ë° ì“¸ 수 있는 다양한 ì•„ì´í…œì´ 들어있습니다! + + + + {*B*}í­ì£½ì— 대해 ë” ì•Œì•„ë³´ë ¤ë©´ {*CONTROLLER_VK_A*}를 누르십시오. + {*B*}í­ì£½ì— 대해 ì´ë¯¸ 알고 있다면 {*CONTROLLER_VK_B*}를 누르십시오. + + + + í­ì£½ì€ ì†ì´ë‚˜ 디스펜서로 발사할 수 있는 ìž¥ì‹ ì•„ì´í…œì´ë©°, 기본 ìž¬ë£Œì¸ ì¢…ì´ì™€ í™”ì•½ì— í­ì£½ ë³„ì„ ë¶€ê°€ì ìœ¼ë¡œ ë”í•´ 만들 수 있습니다. + + + + í­ì£½ ë³„ì„ ë§Œë“¤ 때 추가 재료를 넣으면 색ìƒê³¼ 사ë¼ì§€ëŠ” 형태, 모양, í¬ê¸°, 효과(궤ì ì´ë‚˜ ë°˜ì§ìž„ 등)를 ì›í•˜ëŠ” 대로 바꿀 수 있습니다. + + + + 작업대ì—서 ìƒìžì— ë“  ìž¬ë£Œë“¤ì„ ì´ìš©í•´ í­ì£½ì„ 만들어 보십시오. + +  ì„ íƒ ì‚¬ìš© @@ -2812,9 +3367,9 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E ë¸”ë¡ -페ì´ì§€ 위로 +페ì´ì§€ 올림 -페ì´ì§€ 아래로 +페ì´ì§€ 내림 사랑 모드 @@ -2830,6 +3385,22 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E Xbox One 저장 ë°ì´í„° 업로드 +타기 + +내리기 + +ìƒìž 달기 + +발사 + +줄 묶기 + +놓기 + +부착 + +ì´ë¦„ + í™•ì¸ ì·¨ì†Œ @@ -3144,6 +3715,20 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E 디스펜서 +ë§ + +ë“œë¡œí¼ + +í˜¸í¼ + +신호기 + +주 능력 + +ë³´ì¡° 능력 + +광물 수레 + 현재 ì´ ê²Œìž„ì—서 구매할 수 있는 해당 ìœ í˜•ì˜ ë‹¤ìš´ë¡œë“œ 콘í…츠가 없습니다. %së‹˜ì´ ê²Œìž„ì— ì°¸ê°€í–ˆìŠµë‹ˆë‹¤. @@ -3303,10 +3888,14 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E 게임 모드: 창작 +게임 모드: 모험 + ìƒì¡´ 창작 +모험 + ìƒì¡´ 모드ì—서 ìƒì„± 창작 모드ì—서 ìƒì„± @@ -3327,6 +3916,8 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E 완전í‰ë©´ +시드를 입력해서 ê°™ì€ ì§€ì—­ì„ ë§Œë“œì‹­ì‹œì˜¤. 공백으로 ë‘ë©´ 무작위 월드가 ìƒì„±ë©ë‹ˆë‹¤. + ì´ ì˜µì…˜ì„ ì¼œë©´ 온ë¼ì¸ 게임으로 플레ì´í•©ë‹ˆë‹¤. ì´ ì˜µì…˜ì„ ì¼œë©´ ì´ˆëŒ€ë°›ì€ í”Œë ˆì´ì–´ë§Œ ê²Œìž„ì— ì°¸ê°€í•  수 있습니다. @@ -3351,6 +3942,20 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E ì´ ì˜µì…˜ì„ ì¼œë©´ 쓸모있는 ì•„ì´í…œì´ ë“  ìƒìžê°€ 플레ì´ì–´ ìƒì„± ì§€ì  ê·¼ì²˜ì— ë‚˜íƒ€ë‚©ë‹ˆë‹¤. +비활성화하면 몬스터와 ë™ë¬¼ì´ 블ë¡ì„ êµì²´í•˜ê±°ë‚˜ ì•„ì´í…œì„ ì§‘ì§€ 못하게 합니다. 예를 들어 Creeperê°€ í­ë°œí•´ë„ 블ë¡ì´ 파괴ë˜ì§€ 않으며, ì–‘ì€ í’€ì„ ì œê±°í•˜ì§€ 못합니다. + +활성화하면 플레ì´ì–´ê°€ ì£½ì–´ë„ ì†Œì§€í’ˆì˜ ì•„ì´í…œì„ 잃지 않습니다. + +비활성화하면 괴물ì´ë‚˜ ë™ë¬¼ì´ ìžì—°ì ìœ¼ë¡œ ìƒì„±ë˜ì§€ 않습니다. + +비활성화하면 괴물과 ë™ë¬¼ì´ ì „ë¦¬í’ˆì„ ë–¨ì–´íŠ¸ë¦¬ì§€ 않습니다. 예를 들어 Creeperê°€ í™”ì•½ì„ ë–¨ì–´íŠ¸ë¦¬ì§€ 않습니다. + +비활성화하면 블ë¡ì´ 파괴ë¼ë„ ì•„ì´í…œì„ 떨어트리지 않습니다. 예를 들어 ëŒ ë¸”ë¡ì—서 조약ëŒì„ ì–»ì„ ìˆ˜ 없습니다. + +비활성화하면 플레ì´ì–´ì˜ ì²´ë ¥ì´ ìžì—°ì ìœ¼ë¡œ 재ìƒë˜ì§€ 않습니다. + +비활성화하면 시간대가 변하지 않습니다. + 스킨 팩 테마 @@ -3399,7 +4004,49 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E {*PLAYER*} {*SOURCE*}ì— íƒ€ê²©ì— ì˜í•´ ì‚¬ë§ -{*PLAYER*}ë‹˜ì´ {*SOURCE*}ì— ì˜í•´ 살해당했습니다. +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ì˜ ë§ˆë²•ì— ì‚´í•´ë‹¹í–ˆìŠµë‹ˆë‹¤. + +{*PLAYER*} ë‹˜ì´ ì‚¬ë‹¤ë¦¬ì—서 떨어졌습니다. + +{*PLAYER*} ë‹˜ì´ ë©êµ´ì—서 떨어졌습니다. + +{*PLAYER*} ë‹˜ì´ ë¬¼ 밖으로 떨어졌습니다. + +{*PLAYER*} ë‹˜ì´ ë†’ì€ ê³³ì—서 떨어졌습니다. + +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ì— ì˜í•´ 떨어져 사ë§í–ˆìŠµë‹ˆë‹¤. + +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ì— ì˜í•´ 떨어져 사ë§í–ˆìŠµë‹ˆë‹¤. + +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ì˜ {*ITEM*}ì— ì˜í•´ 떨어져 사ë§í–ˆìŠµë‹ˆë‹¤. + +{*PLAYER*} ë‹˜ì´ ë„ˆë¬´ 멀리 떨어져 {*SOURCE*}ì— ì˜í•´ 사ë§í–ˆìŠµë‹ˆë‹¤. + +{*PLAYER*} ë‹˜ì´ ë„ˆë¬´ 멀리 떨어져 {*SOURCE*}ì˜ {*ITEM*}ì— ì˜í•´ 사ë§í–ˆìŠµë‹ˆë‹¤. + +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ê³¼(와) ì‹¸ìš°ë˜ ì¤‘ 불 ì†ìœ¼ë¡œ 걸어 들어갔습니다. + +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ê³¼(와) ì‹¸ìš°ë˜ ì¤‘ 까맣게 타버렸습니다. + +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ì„(를) 피하다 용암ì—서 수ì˜ì„ 했습니다. + +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ì„(를) 피하려다 ìµì‚¬í–ˆìŠµë‹ˆë‹¤. + +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ì„(를) 피하려다 ì„ ì¸ìž¥ì— 찔렸습니다. + +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ì— ì˜í•´ 날아갔습니다. + +{*PLAYER*} ë‹˜ì´ ë§ë¼ 죽었습니다. + +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ì˜ {*ITEM*}ì— ì˜í•´ 사ë§í–ˆìŠµë‹ˆë‹¤. + +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ì˜ {*ITEM*}ì— ë§žì•„ 사ë§í–ˆìŠµë‹ˆë‹¤. + +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ì˜ {*ITEM*}ì— ì˜í•´ 불ë©ì–´ë¦¬ë¥¼ 맞았습니다. + +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ì˜ {*ITEM*}ì— ì˜í•´ 찌부러졌습니다. + +{*PLAYER*} ë‹˜ì´ {*SOURCE*}ì˜ {*ITEM*}ì— ì‚´í•´ë‹¹í–ˆìŠµë‹ˆë‹¤. 기반암 안개 @@ -3564,9 +4211,9 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E 지하 초기화를 하지 않습니다. -Mooshroomì˜ í„¸ì„ ìžë¥¼ 수 없습니다. ë¼ì§€, ì–‘, 소, ê³ ì–‘ì´ì˜ 수가 ìµœëŒ€ì¹˜ì— ë„달했습니다. +Mooshroomì˜ í„¸ì„ ìžë¥¼ 수 없습니다. ë¼ì§€, ì–‘, 소, ê³ ì–‘ì´, ë§ì˜ 수가 ìµœëŒ€ì¹˜ì— ë„달했습니다. -ë‚³ì€ ì•Œì„ ì‚¬ìš©í•  수 없습니다. ë¼ì§€, ì–‘, 소, ê³ ì–‘ì´ì˜ 수가 ìµœëŒ€ì¹˜ì— ë„달했습니다. +ë‚³ì€ ì•Œì„ ì‚¬ìš©í•  수 없습니다. ë¼ì§€, ì–‘, 소, ê³ ì–‘ì´, ë§ì˜ 수가 ìµœëŒ€ì¹˜ì— ë„달했습니다. ë‚³ì€ ì•Œì„ ì‚¬ìš©í•  수 없습니다. Mooshroomì˜ ìˆ˜ê°€ ìµœëŒ€ì¹˜ì— ë„달했습니다. @@ -3576,6 +4223,8 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E ë‚³ì€ ì•Œì„ ì‚¬ìš©í•  수 없습니다. ì˜¤ì§•ì–´ì˜ ìˆ˜ê°€ ìµœëŒ€ì¹˜ì— ë„달했습니다. +ë‚³ì€ ì•Œì„ ì‚¬ìš©í•  수 없습니다. ë§ˆì„ ì‚¬ëžŒì˜ ìˆ˜ê°€ ìµœëŒ€ì¹˜ì— ë„달했습니다. + ë‚³ì€ ì•Œì„ ì‚¬ìš©í•  수 없습니다. ì ì˜ 수가 ìµœëŒ€ì¹˜ì— ë„달했습니다. ë‚³ì€ ì•Œì„ ì‚¬ìš©í•  수 없습니다. ë§ˆì„ ì‚¬ëžŒì˜ ìˆ˜ê°€ ìµœëŒ€ì¹˜ì— ë„달했습니다. @@ -3584,12 +4233,14 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E ë‚™ì› ëª¨ë“œì—서는 ì ì„ ìƒì„±í•  수 없습니다. -ì´ ë™ë¬¼ì€ 사랑 모드로 만들 수 없습니다. êµë°°í•  수 있는 ë¼ì§€, ì–‘, 소, ê³ ì–‘ì´ì˜ 수가 ìµœëŒ€ì¹˜ì— ë„달했습니다. +ì´ ë™ë¬¼ì€ 사랑 모드로 만들 수 없습니다. êµë°°í•  수 있는 ë¼ì§€, ì–‘, 소, ê³ ì–‘ì´, ë§ì˜ 수가 ìµœëŒ€ì¹˜ì— ë„달했습니다. ì´ ë™ë¬¼ì€ 사랑 모드로 만들 수 없습니다. êµë°°í•  수 있는 ëŠ‘ëŒ€ì˜ ìˆ˜ê°€ ìµœëŒ€ì¹˜ì— ë„달했습니다. ì´ ë™ë¬¼ì€ 사랑 모드로 만들 수 없습니다. êµë°°í•  수 있는 ë‹­ì˜ ìˆ˜ê°€ ìµœëŒ€ì¹˜ì— ë„달했습니다. +ì´ ë™ë¬¼ì€ 사랑 모드로 만들 수 없습니다. êµë°°í•  수 있는 ë§ì˜ 수가 ìµœëŒ€ì¹˜ì— ë„달했습니다. + ì´ ë™ë¬¼ì€ 사랑 모드로 만들 수 없습니다. êµë°°í•  수 있는 Mooshroomì˜ ìˆ˜ê°€ ìµœëŒ€ì¹˜ì— ë„달했습니다. ë°°ì˜ ìˆ˜ê°€ ìµœëŒ€ì¹˜ì— ë„달했습니다. @@ -3617,27 +4268,43 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E 제작진 콘í…츠 재설치 - + 디버그 설정 - + 불 확산 - + TNT í­ë°œ - + 플레ì´ì–´ 대 플레ì´ì–´ - + 플레ì´ì–´ 신뢰 - + 호스트 특권 - + 건물 ìƒì„± - + 완전í‰ë©´ 월드 - + 보너스 ìƒìž - + 월드 옵션 - + +게임 옵션 + +ê´´ë¬¼ì— ì˜í•œ 괴롭힘 + +소지품 유지 + +괴물 ìƒì„± + +괴물 전리품 + +íƒ€ì¼ ì•„ì´í…œ + +ìžì—° ìž¬ìƒ + +시간대 전환 + 건설 ë° ì±„ê´‘ 가능 문과 스위치 사용 가능 @@ -3824,6 +4491,14 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E ë… +ìœ„ë” + +ì²´ë ¥ ê°•í™” + +í¡ìˆ˜ + +í¬ë§Œ + - ì‹ ì† - ì†ë„ 저하 @@ -3862,6 +4537,14 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E - ë… +ë§Œí¼ ë¶€íŒ¨ + +ë§Œí¼ ì²´ë ¥ ê°•í™” + +ë§Œí¼ í¡ìˆ˜ + +ë§Œí¼ í¬ë§Œ + II @@ -3958,6 +4641,22 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E 효과 ëŒ€ìƒ í”Œë ˆì´ì–´, ë™ë¬¼ ë° ê´´ë¬¼ì˜ ì²´ë ¥ì´ ì„œì„œížˆ ê°ì†Œí•©ë‹ˆë‹¤. +복용 시: + +ë§ ì í”„ ê°•í™” + +좀비 ì¦ì› + +최대 ì²´ë ¥ + +괴물 ë”°ë¼ì˜¤ê¸° 거리 + +밀치기 저항 + +ì†ë„ + +공격력 + 예리 강타 @@ -4048,7 +4747,7 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E {*ICON_SHANK_01*}를 3ë§Œí¼ íšŒë³µí•©ë‹ˆë‹¤. 화로ì—서 ê°ìžë¥¼ 조리하여 만듭니다. -먹어서 {*ICON_SHANK_01*}를 1ë§Œí¼ íšŒë³µí•˜ê±°ë‚˜ 화로ì—서 조리할 수 있습니다. ë†ì§€ì— ì‹¬ì„ ìˆ˜ 있으며 먹으면 중ë…ë  ìˆ˜ 있습니다. +먹어서 {*ICON_SHANK_01*}를 1ë§Œí¼ íšŒë³µí•©ë‹ˆë‹¤. 먹으면 중ë…ë  ìˆ˜ 있습니다. {*ICON_SHANK_01*}를 3ë§Œí¼ íšŒë³µí•©ë‹ˆë‹¤. 당근과 금ë©ì´ë¥¼ 사용해 만듭니다. @@ -4278,7 +4977,7 @@ Enderì— ë“¤ì–´ì„œë©´ 친구가 ê·¸ë“¤ì˜ ì§€ë„ì—서 요새 ë‚´ë¶€ì— ìžˆëŠ” E {*B*} - 거래 ì¸í„°íŽ˜ì´ìŠ¤ì— ëŒ€í•´ ë” ì•Œì•„ë³´ë ¤ë©´ {*CONTROLLER_VK_A*} 단추를 누르십시오.{*B*} + 거래 ì¸í„°íŽ˜ì´ìŠ¤ì— ëŒ€í•´ 알아보려면 {*CONTROLLER_VK_A*} 단추를 누르십시오.{*B*} 거래 ì¸í„°íŽ˜ì´ìŠ¤ì— ëŒ€í•´ ì´ë¯¸ 알고 있다면 {*CONTROLLER_VK_B*} 단추를 누르십시오. diff --git a/Minecraft.Client/Common/Media/movies1080.txt b/Minecraft.Client/Common/Media/movies1080.txt index f72fa4cf..782dd5bc 100644 --- a/Minecraft.Client/Common/Media/movies1080.txt +++ b/Minecraft.Client/Common/Media/movies1080.txt @@ -7,6 +7,7 @@ skinHDHud.swf skinHDLabels.swf skinHDInGame.swf AnvilMenu1080.swf +BeaconMenu1080.swf BrewingStandMenu1080.swf ChestMenu1080.swf ChestLargeMenu1080.swf @@ -31,9 +32,12 @@ DispenserMenu1080.swf EnchantingMenu1080.swf EndPoem1080.swf EULA1080.swf +FireworksMenu1080.swf FullscreenProgress1080.swf FurnaceMenu1080.swf HelpAndOptionsMenu1080.swf +HopperMenu1080.swf +HorseInventoryMenu1080.swf HowToPlay1080.swf HowToPlayMenu1080.swf HUD1080.swf @@ -44,6 +48,8 @@ InGameTeleportMenu1080.swf Intro1080.swf InventoryMenu1080.swf JoinMenu1080.swf +LanguagesMenu1080.swf +LanguagesMenuSplit1080.swf LoadOrJoinMenu1080.swf LaunchMoreOptionsMenu1080.swf LeaderboardMenu1080.swf @@ -72,6 +78,7 @@ ToolTips1080.swf TradingMenu1080.swf TutorialPopup1080.swf AnvilMenuSplit1080.swf +BeaconMenuSplit1080.swf BrewingStandMenuSplit1080.swf ChestMenuSplit1080.swf ChestLargeMenuSplit1080.swf @@ -82,9 +89,12 @@ CreativeMenuSplit1080.swf DeathMenuSplit1080.swf DispenserMenuSplit1080.swf EnchantingMenuSplit1080.swf +FireworksMenuSplit1080.swf FurnaceMenuSplit1080.swf FullscreenProgressSplit1080.swf HelpAndOptionsMenuSplit1080.swf +HopperMenuSplit1080.swf +HorseInventoryMenuSplit1080.swf HowToPlaySplit1080.swf HowToPlayMenuSplit1080.swf HUDSplit1080.swf diff --git a/Minecraft.Client/Common/Media/movies480.txt b/Minecraft.Client/Common/Media/movies480.txt index a3ab2ec6..bbc4f2a5 100644 --- a/Minecraft.Client/Common/Media/movies480.txt +++ b/Minecraft.Client/Common/Media/movies480.txt @@ -1,4 +1,5 @@ AnvilMenu480.swf +BeaconMenu480.swf BrewingStandMenu480.swf ChestLargeMenu480.swf ChestMenu480.swf @@ -15,9 +16,12 @@ DLCMainMenu480.swf EnchantingMenu480.swf EndPoem480.swf EULA480.swf +FireworksMenu480.swf FullscreenProgress480.swf FurnaceMenu480.swf HelpAndOptionsMenu480.swf +HopperMenu480.swf +HorseInventoryMenu480.swf HowToPlay480.swf HowToPlayMenu480.swf HUD480.swf @@ -27,6 +31,7 @@ InGamePlayerOptions480.swf Intro480.swf InventoryMenu480.swf JoinMenu480.swf +LanguagesMenu480.swf LaunchMoreOptionsMenu480.swf LeaderboardMenu480.swf LoadMenu480.swf diff --git a/Minecraft.Client/Common/Media/movies720.txt b/Minecraft.Client/Common/Media/movies720.txt index ee89748b..524fcee0 100644 --- a/Minecraft.Client/Common/Media/movies720.txt +++ b/Minecraft.Client/Common/Media/movies720.txt @@ -7,6 +7,7 @@ skinHud.swf skinLabels.swf skinInGame.swf AnvilMenu720.swf +BeaconMenu720.swf BrewingStandMenu720.swf ChestMenu720.swf ChestLargeMenu720.swf @@ -29,9 +30,12 @@ DispenserMenu720.swf EnchantingMenu720.swf EndPoem720.swf EULA720.swf +FireworksMenu720.swf FullscreenProgress720.swf FurnaceMenu720.swf HelpAndOptionsMenu720.swf +HopperMenu720.swf +HorseInventoryMenu720.swf HowToPlay720.swf HowToPlayMenu720.swf HUD720.swf @@ -42,6 +46,8 @@ InGameTeleportMenu720.swf Intro720.swf InventoryMenu720.swf JoinMenu720.swf +LanguagesMenu720.swf +LanguagesMenuSplit720.swf LoadOrJoinMenu720.swf LaunchMoreOptionsMenu720.swf LeaderboardMenu720.swf @@ -69,6 +75,7 @@ ToolTips720.swf TradingMenu720.swf TutorialPopup720.swf AnvilMenuSplit720.swf +BeaconMenuSplit720.swf BrewingStandMenuSplit720.swf ChestMenuSplit720.swf ChestLargeMenuSplit720.swf @@ -80,10 +87,13 @@ CreativeMenuSplit720.swf DeathMenuSplit720.swf DispenserMenuSplit720.swf EnchantingMenuSplit720.swf +FireworksMenuSplit720.swf FurnaceMenuSplit720.swf FullscreenProgressSplit720.swf GamertagSplit720.swf HelpAndOptionsMenuSplit720.swf +HopperMenuSplit720.swf +HorseInventoryMenuSplit720.swf HowToPlaySplit720.swf HowToPlayMenuSplit720.swf HUDSplit720.swf diff --git a/Minecraft.Client/Common/Media/moviesVita.txt b/Minecraft.Client/Common/Media/moviesVita.txt index 7a05e006..97627ca6 100644 --- a/Minecraft.Client/Common/Media/moviesVita.txt +++ b/Minecraft.Client/Common/Media/moviesVita.txt @@ -7,6 +7,7 @@ skinHud.swf skinLabels.swf skinInGame.swf AnvilMenuVita.swf +BeaconMenuVita.swf BrewingStandMenuVita.swf ChestLargeMenuVita.swf ChestMenuVita.swf @@ -24,9 +25,12 @@ DLCMainMenuVita.swf EnchantingMenuVita.swf EndPoemVita.swf EULAVita.swf +FireworksMenuVita.swf FullscreenProgressVita.swf FurnaceMenuVita.swf HelpAndOptionsMenuVita.swf +HopperMenuVita.swf +HorseInventoryMenuVita.swf HowToPlayMenuVita.swf HowToPlayVita.swf HUDVita.swf @@ -37,6 +41,7 @@ InGameTeleportMenuVita.swf IntroVita.swf InventoryMenuVita.swf JoinMenuVita.swf +LanguagesMenuVita.swf LaunchMoreOptionsMenuVita.swf LeaderboardMenuVita.swf LoadMenuVita.swf diff --git a/Minecraft.Client/Common/Media/pt-BR/strings.resx b/Minecraft.Client/Common/Media/pt-BR/strings.resx index 0fd411ec..67369181 100644 --- a/Minecraft.Client/Common/Media/pt-BR/strings.resx +++ b/Minecraft.Client/Common/Media/pt-BR/strings.resx @@ -147,29 +147,29 @@ {*T3*}COMO JOGAR: NOÇÕES BÃSICAS{*ETW*}{*B*}{*B*} Minecraft é um jogo que consiste em colocar blocos para construir qualquer coisa que imaginar. À noite os monstros aparecem; então, construa um abrigo antes que isso aconteça.{*B*}{*B*} -Use {*CONTROLLER_ACTION_LOOK*}para olhar à sua volta.{*B*}{*B*} -Use {*CONTROLLER_ACTION_MOVE*}para se mover.{*B*}{*B*} -Pressione {*CONTROLLER_ACTION_JUMP*}para pular.{*B*}{*B*} -Pressione {*CONTROLLER_ACTION_MOVE*}duas vezes para frente rapidamente para correr. Enquanto mantiver {*CONTROLLER_ACTION_MOVE*}pressionado para a frente, o personagem continuará correndo, a não ser que o tempo de corrida acabe ou que a Barra de Alimentos tenha menos de {*ICON_SHANK_03*}.{*B*}{*B*} -Mantenha {*CONTROLLER_ACTION_ACTION*}pressionado para extrair e cortar usando a mão ou o que estiver segurando. Talvez seja necessário fabricar uma ferramenta para extrair alguns blocos.{*B*}{*B*} -Se estiver segurando um item na mão, use {*CONTROLLER_ACTION_USE*}para utilizá-lo ou pressione {*CONTROLLER_ACTION_DROP*}para soltá-lo. +Use {*CONTROLLER_ACTION_LOOK*} para olhar à sua volta.{*B*}{*B*} +Use {*CONTROLLER_ACTION_MOVE*} para se mover.{*B*}{*B*} +Pressione {*CONTROLLER_ACTION_JUMP*} para pular.{*B*}{*B*} +Pressione {*CONTROLLER_ACTION_MOVE*} duas vezes para frente rapidamente para correr. Enquanto mantiver {*CONTROLLER_ACTION_MOVE*} pressionado para a frente, o personagem continuará correndo, a não ser que o tempo de corrida acabe ou que a Barra de Alimentos tenha menos de {*ICON_SHANK_03*}.{*B*}{*B*} +Mantenha {*CONTROLLER_ACTION_ACTION*} pressionado para extrair e cortar usando a mão ou o que estiver segurando. Talvez seja necessário fabricar uma ferramenta para extrair alguns blocos.{*B*}{*B*} +Se estiver segurando um item na mão, use {*CONTROLLER_ACTION_USE*} para utilizá-lo ou pressione {*CONTROLLER_ACTION_DROP*} para soltá-lo. {*T3*}COMO JOGAR: HUD{*ETW*}{*B*}{*B*} O HUD mostra informações sobre seu status; sua energia, o oxigênio restante quando está debaixo da água, seu nível de fome (é preciso comer para reabastecer) e sua armadura, se estiver usando uma. Se você perder energia, mas tiver uma barrra de alimentos com 9 ou mais {*ICON_SHANK_01*}, sua energia será reabastecida automaticamente. Comer reabastece sua barra de alimentos. {*B*} A Barra de Experiência também é mostrada aqui, com um valor numérico que mostra seu Nível de Experiência e a barra que indica quantos Pontos de Experiência são necessários para aumentar seu Nível de Experiência. Você ganha Pontos de Experiência coletando as Esferas de Experiência liberadas por multidões quando elas morrem, ao minerar alguns tipos de blocos, ao criar animais, pescar e fundir minérios na fornalha.{*B*}{*B*} -Também mostra os itens disponíveis para uso. Use {*CONTROLLER_ACTION_LEFT_SCROLL*}e {*CONTROLLER_ACTION_RIGHT_SCROLL*}para trocar o item em sua mão. +Também mostra os itens disponíveis para uso. Use {*CONTROLLER_ACTION_LEFT_SCROLL*} e {*CONTROLLER_ACTION_RIGHT_SCROLL*} para trocar o item em sua mão. {*T3*}COMO JOGAR: INVENTÃRIO{*ETW*}{*B*}{*B*} -Use {*CONTROLLER_ACTION_INVENTORY*}para ver seu inventário.{*B*}{*B*} +Use {*CONTROLLER_ACTION_INVENTORY*} para ver seu inventário.{*B*}{*B*} Essa tela mostra os itens disponíveis para uso em sua mão e todos os outros itens que está carregando. Sua armadura também é mostrada aqui.{*B*}{*B*} -Use{*CONTROLLER_MENU_NAVIGATE*}para mover o ponteiro. Use {*CONTROLLER_VK_A*}para pegar um item sob o ponteiro. Se houver mais de um item aqui, ele pegará todos ou você pode usar {*CONTROLLER_VK_X*}para pegar apenas metade deles.{*B*}{*B*} -Mova o item com o ponteiro sobre outro espaço no inventário e coloque-o lá usando {*CONTROLLER_VK_A*}. Se tiver vários itens no ponteiro, use {*CONTROLLER_VK_A*}para colocar todos ou {*CONTROLLER_VK_X*}para colocar apenas um.{*B*}{*B*} -Se o item sobre o qual você estiver for uma armadura, aparecerá uma dica de ferramenta para permitir a movimentação rápida para o espaço da armadura à direita no inventário. -É possível mudar a cor da sua Armadura de Couro, tingindo-a. Faça isso no menu do estoque, segurando a tinta com o cursor, e em seguida apertando{*CONTROLLER_VK_X*} enquanto o cursor estiver sobre a peça que deseja tingir. - +Use{*CONTROLLER_MENU_NAVIGATE*} para mover o ponteiro. Use {*CONTROLLER_VK_A*} para pegar um item sob o ponteiro. Se houver mais de um item aqui, ele pegará todos ou você pode usar {*CONTROLLER_VK_X*} para pegar apenas metade deles.{*B*}{*B*} +Mova o item com o ponteiro sobre outro espaço no inventário e coloque-o lá usando {*CONTROLLER_VK_A*}. Se tiver vários itens no ponteiro, use {*CONTROLLER_VK_A*} para colocar todos ou {*CONTROLLER_VK_X*} para colocar apenas um.{*B*}{*B*} +Se o item sobre o qual você estiver for uma armadura, aparecerá uma dica de ferramenta para permitir a movimentação rápida para o espaço da armadura à direita no inventário.{*B*}{*B*} +É possível mudar a cor da sua Armadura de Couro, tingindo-a. Faça isso no menu do estoque, segurando a tinta com o cursor, e em seguida apertando {*CONTROLLER_VK_X*} enquanto o cursor estiver sobre a peça que deseja tingir. + {*T3*}COMO JOGAR: BAÚ{*ETW*}{*B*}{*B*} -Depois de criar um baú, poderá colocá-lo no mundo e usá-lo com{*CONTROLLER_ACTION_USE*} para guardar itens do seu inventário.{*B*}{*B*} +Depois de criar um baú, poderá colocá-lo no mundo e usá-lo com {*CONTROLLER_ACTION_USE*} para guardar itens do seu inventário.{*B*}{*B*} Use o ponteiro para mover itens entre o inventário e o baú.{*B*}{*B*} Os itens no baú ficarão guardados lá para você até devolvê-los ao inventário mais tarde. @@ -180,20 +180,20 @@ Dois baús colocados lado a lado serão combinados para formar um Baú Grande. E {*T3*}COMO JOGAR: FABRICAÇÃO{*ETW*}{*B*}{*B*} -Na interface de fabricação, você pode combinar itens do seu inventário para criar novos tipos de itens. Use{*CONTROLLER_ACTION_CRAFTING*}para abrir a interface de fabricação.{*B*}{*B*} -Role pelas guias na parte superior usando{*CONTROLLER_VK_LB*}e{*CONTROLLER_VK_RB*}para selecionar o tipo de item que deseja criar e, em seguida, use {*CONTROLLER_MENU_NAVIGATE*}para selecionar o item a ser criado.{*B*}{*B*} -A área de fabricação mostra os itens necessários para criar o novo item. Pressione {*CONTROLLER_VK_A*}para criar o item e colocá-lo no inventário. +Na interface de fabricação, você pode combinar itens do seu inventário para criar novos tipos de itens. Use {*CONTROLLER_ACTION_CRAFTING*} para abrir a interface de fabricação.{*B*}{*B*} +Role pelas guias na parte superior usando {*CONTROLLER_VK_LB*} e {*CONTROLLER_VK_RB*} para selecionar o tipo de item que deseja criar e, em seguida, use {*CONTROLLER_MENU_NAVIGATE*} para selecionar o item a ser criado.{*B*}{*B*} +A área de fabricação mostra os itens necessários para criar o novo item. Pressione {*CONTROLLER_VK_A*} para criar o item e colocá-lo no inventário. {*T3*}COMO JOGAR: BANCADA{*ETW*}{*B*}{*B*} Você pode criar itens maiores usando uma bancada.{*B*}{*B*} -Coloque a bancada no mundo e pressione{*CONTROLLER_ACTION_USE*} para usá-la.{*B*}{*B*} +Coloque a bancada no mundo e pressione {*CONTROLLER_ACTION_USE*} para usá-la.{*B*}{*B*} A fabricação de itens na bancada funciona da mesma maneira que a fabricação básica, mas você terá uma área maior para trabalhar e uma variedade maior de itens para criar. {*T3*}COMO JOGAR: FORNALHA{*ETW*}{*B*}{*B*} Com a fornalha você pode alterar os itens queimando-os. Por exemplo, você pode transformar minério de ferro em barras de ferro na fornalha.{*B*}{*B*} -Coloque a fornalha no mundo e pressione{*CONTROLLER_ACTION_USE*} para usá-la.{*B*}{*B*} +Coloque a fornalha no mundo e pressione {*CONTROLLER_ACTION_USE*} para usá-la.{*B*}{*B*} Você deve colocar combustível sob a fornalha e o item a ser queimado na parte superior. A fornalha acenderá e começará a funcionar.{*B*}{*B*} Quando os itens estiverem queimados, você poderá movê-los da área de saída para seu inventário.{*B*}{*B*} Se o item que você estiver examinando for um ingrediente ou combustível para a fornalha, aparecerão dicas de ferramenta para permitir a movimentação rápida para a fornalha. @@ -201,7 +201,7 @@ Se o item que você estiver examinando for um ingrediente ou combustível para a {*T3*}COMO JOGAR: DISTRIBUIDOR{*ETW*}{*B*}{*B*} O distribuidor é usado para projetar itens. Você deve colocar um acionador, como uma alavanca, ao lado do distribuidor para acioná-lo.{*B*}{*B*} -Para encher o distribuidor com itens, pressione{*CONTROLLER_ACTION_USE*} e mova os itens desejados do inventário para ele.{*B*}{*B*} +Para encher o distribuidor com itens, pressione {*CONTROLLER_ACTION_USE*} e mova os itens desejados do inventário para ele.{*B*}{*B*} Então, quando usar o acionador, o distribuidor projetará um item. @@ -229,11 +229,11 @@ Você deve experimentar todas as combinações de ingredientes para descobrir to {*T3*}INSTRUÇÕES DE JOGO: FEITIÇOS{*ETW*}{*B*}{*B*} Os Pontos de Experiência recolhidos quando um habitante morre ou quando certos blocos são extraídos ou fundidos numa fornalha podem ser usados para enfeitiçar algumas ferramentas, armaduras e livros.{*B*} -Quando é colocada uma Espada, Arco, Machado, Picareta, Pá, Armadura ou Livro no orifício por baixo do livro na Mesa de Feitiços, os três botões à direita do orifício apresentam alguns feitiços e os respectivos custos em Níveis de Experiência.{*B*} +Quando é colocada uma Espada, Arco, Machado, Picareta, Pá, Armadura ou Livro no orifício por baixo do livro na Mesa de Feitiços, os três botões à direita do orifício apresentam alguns feitiços e os respectivos custos em Níveis de Experiência.{*B*} Se você não tem Níveis de Experiência suficientes para usar, o custo aparecerá em vermelho, caso contrário, verde.{*B*}{*B*} O feitiço aplicado é selecionado aleatoriamente com base no custo apresentado.{*B*}{*B*} Se a Mesa de Feitiços estiver rodeada de Estantes (até um máximo de 15 Estantes), com um bloco de intervalo entre a Estante e a Mesa de Feitiços, o poder dos feitiços irá aumentar e serão vistos glifos misteriosos saindo do livro na Mesa de Feitiços.{*B*}{*B*} -Todos os ingredientes para uma Mesa de Feitiços podem ser encontrados nas aldeias, extraindo nas minas ou cultivando no mundo.{*B*}{*B} +Todos os ingredientes para uma Mesa de Feitiços podem ser encontrados nas aldeias, extraindo nas minas ou cultivando no mundo.{*B*}{*B*} Os Livros Encantados são usados na Bigorna para aplicar feitiços aos itens. Desta forma você tem maior controle sobre os feitiços que deseja em seus itens.{*B*} @@ -257,28 +257,28 @@ Exemplos de construção de portais são mostrados na figura à direita. {*T3*}COMO JOGAR: MULTIJOGADOR{*ETW*}{*B*}{*B*} O Minecraft no console Xbox 360 é um jogo multijogador por padrão. Se você estiver jogando em um modo de Alta Definição, poderá incluir outros jogadores conectando os controles e pressionando START em qualquer ponto durante o jogo.{*B*}{*B*} -Ao iniciar ou participar de um jogo online, ele estará visível para as pessoas de sua lista de amigos (a não ser que você tenha selecionado Só Convidados como host do jogo) e, se eles entrarem no jogo, também estará visível para as pessoas da lista de amigos deles (se você tiver selecionado a opção Permitir Amigos dos Amigos). +Ao iniciar ou participar de um jogo online, ele estará visível para as pessoas de sua lista de amigos (a não ser que você tenha selecionado Só Convidados como host do jogo) e, se eles entrarem no jogo, também estará visível para as pessoas da lista de amigos deles (se você tiver selecionado a opção Permitir Amigos dos Amigos).{*B*} Quando estiver em um jogo, você poderá pressionar o botão BACK para ver a lista de todos os outros jogadores, ver os Cartões de Jogador deles, expulsar jogadores do jogo e convidar outras pessoas. {*T3*}COMO JOGAR: COMPARTILHANDO CAPTURAS DE TELA{*ETW*}{*B*}{*B*} -Você pode capturar uma tela de seu jogo abrindo o menu Pausar e pressionando{*CONTROLLER_VK_Y*} para compartilhar no Facebook. Você verá uma versão em miniatura da captura de tela e poderá editar o texto associado à postagem no Facebook.{*B*}{*B*} -Há um modo de câmera especial para essas capturas de tela, para que você possa ver a frente do seu personagem na captura: pressione {*CONTROLLER_ACTION_CAMERA*}até ter uma visão frontal do personagem antes de pressionar {*CONTROLLER_VK_Y*}para compartilhar.{*B*}{*B*} +Você pode capturar uma tela de seu jogo abrindo o menu Pausar e pressionando {*CONTROLLER_VK_Y*} para compartilhar no Facebook. Você verá uma versão em miniatura da captura de tela e poderá editar o texto associado à postagem no Facebook.{*B*}{*B*} +Há um modo de câmera especial para essas capturas de tela, para que você possa ver a frente do seu personagem na captura: pressione {*CONTROLLER_ACTION_CAMERA*} até ter uma visão frontal do personagem antes de pressionar {*CONTROLLER_VK_Y*} para compartilhar.{*B*}{*B*} Gamertags não serão exibidas na captura de tela. {*T3*}COMO JOGAR: BANINDO NÃVEIS{*ETW*}{*B*}{*B*} Se você encontrar conteúdo ofensivo em um nível em que estiver jogando, poderá optar por adicioná-lo à sua lista de Níveis Banidos. -Para isso, abra o menu Pausar e pressione {*CONTROLLER_VK_RB*}para selecionar a dica de ferramenta de Banir Nível. +Para isso, abra o menu Pausar e pressione {*CONTROLLER_VK_RB*} para selecionar a dica de ferramenta de Banir Nível. Se você tentar entrar nesse nível no futuro, será notificado de que ele está em sua lista de Níveis Banidos e poderá removê-lo da lista e continuar no nível ou sair. {*T3*}COMO JOGAR: MODO CRIATIVO{*ETW*}{*B*}{*B*} A interface do modo criativo permite que qualquer item do jogo seja movido para o inventário do jogador sem precisar minerar ou fabricar aquele item. Os itens no inventário do jogador não serão removidos quando forem colocados ou usados no mundo, e desta forma o jogador pode se concentrar na construção, em vez de coletar recursos.{*B*} Se você criar, carregar ou salvar um mundo no Modo Criativo, as atualizações de conquistas e de placar de líderes estarão desabilitadas nesse mundo, mesmo que ele seja carregado depois no Modo Sobrevivência.{*B*} -Para voar quando estiver no Modo Criativo, pressione {*CONTROLLER_ACTION_JUMP*}duas vezes rapidamente. Para parar de voar, repita a ação. Para voar mais rápido, pressione {*CONTROLLER_ACTION_MOVE*}rapidamente duas vezes para frente enquanto estiver voando. -No modo de voo, você pode manter pressionado {*CONTROLLER_ACTION_JUMP*}para se mover para cima e {*CONTROLLER_ACTION_SNEAK*}para se mover para baixo ou usar {*CONTROLLER_ACTION_DPAD_UP*}para se mover para cima, {*CONTROLLER_ACTION_DPAD_DOWN*}para se mover para baixo, -{*CONTROLLER_ACTION_DPAD_LEFT*}para se mover para a esquerda e {*CONTROLLER_ACTION_DPAD_RIGHT*}para se mover para a direita. +Para voar quando estiver no Modo Criativo, pressione {*CONTROLLER_ACTION_JUMP*} duas vezes rapidamente. Para parar de voar, repita a ação. Para voar mais rápido, pressione {*CONTROLLER_ACTION_MOVE*} rapidamente duas vezes para frente enquanto estiver voando. +No modo de voo, você pode manter pressionado {*CONTROLLER_ACTION_JUMP*} para se mover para cima e {*CONTROLLER_ACTION_SNEAK*} para se mover para baixo ou usar {*CONTROLLER_ACTION_DPAD_UP*} para se mover para cima, {*CONTROLLER_ACTION_DPAD_DOWN*} para se mover para baixo, +{*CONTROLLER_ACTION_DPAD_LEFT*} para se mover para a esquerda e {*CONTROLLER_ACTION_DPAD_RIGHT*} para se mover para a direita. {*T3*}COMO JOGAR: OPÇÕES DE HOST E JOGADOR{*ETW*}{*B*}{*B*} @@ -300,6 +300,27 @@ Ao carregar ou criar um mundo, você pode pressionar o botão "Mais Opções" pa {*T2*}Privilégios do Host{*ETW*}{*B*} Quando habilitado, o host pode ativar ou desativar no menu do jogo sua habilidade de voar, desativar a exaustão e ficar invisível. {*DISABLES_ACHIEVEMENTS*}{*B*}{*B*} + {*T2*}Ciclo do dia{*ETW*}{*B*} + Quando desativado, a hora do dia não muda.{*B*}{*B*} + + {*T2*}Manter inventário{*ETW*}{*B*} + Quando ativada, jogadores vão manter o inventário ao morrer.{*B*}{*B*} + + {*T2*}Surgimento de criaturas{*ETW*}{*B*} + Quando desativado, criaturas não aparecerão naturalmente.{*B*}{*B*} + + {*T2*}Assédio por criaturas{*ETW*}{*B*} + Quando desativado,impede monstros e animais de mudar blocos (por exemplo, explosões de Creepers não destróem blocos e ovelhas não removem grama) ou pegar itens.{*B*}{*B*} + + {*T2*}Itens de criaturas{*ETW*}{*B*} + Quando desativado, monstros e animais não derrubam itens (por exemplo, Creepers não derrubam pólvora).{*B*}{*B*} + + {*T2*}Itens de blocos{*ETW*}{*B*} + Quando desativado, blocos não derrubam itens ao serem destruídos (por exemplo, blocos de pedra não derrubam paralelepípedos).{*B*}{*B*} + + {*T2*}Regeneração natural{*ETW*}{*B*} + Quando desativada, jogadores não regeneram vida naturalmente.{*B*}{*B*} + {*T1*}Opções de Geração de Mundo{*ETW*}{*B*} Ao criar um novo mundo, há algumas opções adicionais.{*B*}{*B*} @@ -316,7 +337,7 @@ Ao criar um novo mundo, há algumas opções adicionais.{*B*}{*B*} Quando ativado, o Submundo é recriado. É útil quando se tem um jogo salvo mais antigo em que as Fortalezas do Submundo não estavam presentes.{*B*}{*B*} {*T1*}Opções no Jogo{*ETW*}{*B*} - Durante o jogo, várias opções podem ser acessadas pressionando BACK para abrir o menu do jogo.{*B*}{*B*} + Durante o jogo, várias opções podem ser acessadas pressionando {*BACK_BUTTON*} para abrir o menu do jogo.{*B*}{*B*} {*T2*}Opções do Host{*ETW*}{*B*} O jogador host e os jogadores definidos como moderadores podem acessar o menu "Opção do Host". Neste menu, eles podem habilitar e desabilitar as opções Fogo Espalha e TNT Explode.{*B*}{*B*} @@ -325,13 +346,13 @@ Ao criar um novo mundo, há algumas opções adicionais.{*B*}{*B*} Para modificar os privilégios de um jogador, selecione o nome dele e pressione {*CONTROLLER_VK_A*} para abrir o menu privilégios do jogador, onde você poderá usar as opções a seguir.{*B*}{*B*} {*T2*}Pode Construir e Minerar{*ETW*}{*B*} - Esta opção só está disponível quando "Confiar nos Jogadores" está ativado. Quando esta opção está habilitada, o jogador pode interagir com o mundo normalmente. Quando está desativada, o jogador não pode colocar nem destruir blocos, nem interagir com muitos itens e blocos.{*B*}{*B*} + Esta opção só está disponível quando "Confiar nos Jogadores" está desativada. Quando esta opção está habilitada, o jogador pode interagir com o mundo normalmente. Quando está desativada, o jogador não pode colocar nem destruir blocos, nem interagir com muitos itens e blocos.{*B*}{*B*} {*T2*}Pode utilizar portas e interruptores{*ETW*}{*B*} Esta opção só está disponível quando “Confiar nos Jogadores†está desativada. Quando esta opção estiver desabilitada, o jogador não poderá utilizar portas e interruptores.{*B*}{*B*} - {*T2*}Pode abrir containers{*ETW*}{*B*} - Esta opção só está disponível quando “Confiar nos Jogadores†está desativada. Quando esta opção estiver desabilitada, o jogador não poderá abrir containers, tais como baús.{*B*}{*B*} + {*T2*}Pode abrir recipientes{*ETW*}{*B*} + Esta opção só está disponível quando “Confiar nos Jogadores†está desativada. Quando esta opção estiver desabilitada, o jogador não poderá abrir recipientes, tais como baús.{*B*}{*B*} {*T2*}Pode Atacar Jogadores{*ETW*}{*B*} Esta opção só está disponível quando "Confiar nos Jogadores" está desativado. Quando esta opção estiver desabilitada o jogador não poderá causar danos a outros jogadores.{*B*}{*B*} @@ -343,7 +364,7 @@ Para modificar os privilégios de um jogador, selecione o nome dele e pressione Quando esta opção está habilitada, o jogador pode usar algumas das opções do menu do jogo para mudar privilégios de outros jogadores e algumas opções de mundo.{*B*}{*B*} {*T2*}Expulsar Jogador{*ETW*}{*B*} - Para os jogadores que não estão no mesmo console {*PLATFORM_NAME*} que o jogador host, selecionar esta opção faz o jogador e todos os jogadores que estiverem no console {*PLATFORM_NAME*} dele serem expulsos do jogo. Este jogador não poderá voltar ao jogo até que ele seja reiniciado.{*B*}{*B*} + {*KICK_PLAYER_DESCRIPTION*}{*B*}{*B*} {*T1*}Opções do Jogador Host{*ETW*}{*B*} Se "Privilégios do Host" estiver habilitado, o jogador host poderá modificar alguns privilégios para si mesmo. Para modificar os privilégios de um jogador, selecione o nome dele e pressione {*CONTROLLER_VK_A*} para abrir o menu privilégios do jogador, onde você pode usar as opções a seguir.{*B*}{*B*} @@ -353,14 +374,16 @@ Se "Privilégios do Host" estiver habilitado, o jogador host poderá modificar a {*T2*}Desabilitar Exaustão{*ETW*}{*B*} Esta opção só afeta o modo de Sobrevivência. Quando habilitado, as atividades físicas (voar/correr/pular etc.) não diminuem a barra de alimentos. Entretanto, se o jogador estiver ferido, a barra de alimentos diminuirá lentamente enquanto ele estiver se curando.{*B*}{*B*} - + {*T2*}Invisível{*ETW*}{*B*} Quando esta opção está habilitada, o jogador não está visível para outros jogadores e é invulnerável.{*B*}{*B*} - - {*T2*}É possível Teleportar{*ETW*}{*B*} + + {*T2*}É possível Teleportar{*ETW*}{*B*} Isto permite que o jogador mova a si mesmo ou outros jogadores para outros jogadores no mundo. +Para jogadores que não estão no mesmo console {*PLATFORM_NAME*} que o host, selecionar esta opção vai expulsá-los junto com qualquer jogador conectado em seu console {*PLATFORM_NAME*}. Este jogador não poderá se juntar novamente ao jogo até que seja reiniciado. + Próxima Página Página Anterior @@ -424,56 +447,93 @@ portanto, poderão facilmente se juntar a você. O Que Há de Novo - -{*T3*}Alterações e adições {*ETW*}{*B*}{*B*} -- Novos itens adicionados -Esmeralda, Minério de Esmeralda, Bloco de Esmeralda, Baú Ender, Gancho Disparador, Maçã Dourada Encantada, Bigorna, Vaso de Flor, Parede de Paralelepípedos, Paredes de Parelelepípedos com Musgo, Pintura Podre, Batata, Batata Cozida, Batata Venenosa, Cenoura, Cenoura Dourada, Cenoura na Vareta, Torta de Abóbora, Poção de Visão Noturna, Poção da Invisibilidade, Quartzo, Minério de Quartzo, Bloco de Quartzo, Laje de Quartzo, Escada de Quartzo, Bloco de Quartzo Cinzelado, Coluna de Bloco de Quartzo, Livro Encantado, Tapete.{*B*} -- Novos recipientes adicionados para arenito macio e arenito cinzelado.{*B*} -- Nova multidão adicionada - Aldeões zumbis.{*B*} -- Adicionados novos recursos de geração de terreno - Templos do Deserto, Aldeias Desertas, Templos de Selva.{*B*} -- Adicionado o comércio com aldeões.{*B*} -- Adicionada interface de bigorna.{*B*} -- Armadura de couro tingido.{*B*} -- Colar de lobo tingido.{*B*} -- Montaria no porco com uma cenoura na vareta.{*B*} -- Bônus de baú melhorado contendo mais itens.{*B*} -- Alteradas as posições de meio blocos e outros blocos em meio blocos.{*B*} -- Alteradas as posições de escadas invertidas e lajes.{*B*} -- Adicionadas profissões de cidadões.{*B*} -- Cidadãos vindos de ovos terão uma profissão aleatória.{*B*} -- Adicionado log unilateral.{*B*} -- Fornos podem usar ferramentas de madeira como combustível.{*B*} -- Painéis de gelo e vidro podem ser coletados com pequenos toques de ferramentas encantadas.{*B*} -- Botões de madeira e pratos de pressão de madeira podem ser ativados com flechas.{*B*} -- Pequenas multidões podem aparecer em portais no submundo.{*B*} -- Rastejantes e aranhas são agressivos com o último jogador que acertá-los.{*B*} -- Multidões no modo criativo ficam neutras novamente depois de um curto período.{*B*} -- Contra-ataque removido quando afogar.{*B*} -- Portas sendo quebradas por zumbis mostram danos.{*B*} -- Gelo derrete no submundo.{*B*} -- Calderões enchem quando estiver sem chuva.{*B*} -- Pistões levam o dobro de tempo para melhorar.{*B*} -- O Porco derruba a cela ao ser morto (se tiver uma).{*B*} -- Cor do céu No Fim alterada.{*B*} -- Barbante pode ser substituído (por corda).{*B*} -- Chuva pinga das folhas.{*B*} -- Alavancas podem ser colocadas em baixo dos blocos.{*B*} -- TNT causa dano variável dependendo da configuração de dificuldade.{*B*} -- Livro de receitas alterado.{*B*} -- Barcos quebram lírios, ao invés de lírios quebrarem barcos.{*B*} -- Porcos oferecem mais costeletas.{*B*} -- Lodos aparecem menos em mundos retos.{*B*} -- Rastejadores têm danos variáveis baseado na configuração de dificuldade, mais contra-ataque.{*B*} -- Endermen consertados para não abrir suas mandíbulas.{*B*} -- Adicionado teleporte de jogadores (usando o menu {*BACK_BUTTON*} no jogo).{*B*} --Adicionados novas opções de vôo, invisibilidade e invulnerabilidade para jogadores remotos.{*B*} -- Adicionados novos tutoriais para o Mundo do Tutorial para novos itens e recursos.{*B*} -- Melhorada a posição para o baú de discos musicais no Mundo do Tutorial.{*B*} +{*T3*}Alterações e adições{*ETW*}{*B*}{*B*} +- Novos itens adicionados - Argila endurecida, Argila colorida, Bloco de carvão, fardo de feno, trilho ativador, bloco de redstone, sensor de luz solar, monólito, tremonha, carrinho com tremonha, carrinho com TNT, comparador Redstone, placa de pressão ponderada, farol, baú preso, foguete de artifício, estrela de artifício, estrela do submundo, chumbo, armadura para cavalo, crachá, ovo de surgimento de cavalos{*B*} +- Novas criaturas adicionadas - Wither, esqueletos murchos, bruxas, morcegos, cavalos, burros e mulas{*B*} +- Adicionados novos recursos de geração de terreno - cabanas de bruxas.{*B*} +- Adicionada interface de farol.{*B*} +- Adicionada interface de cavalo.{*B*} +- Adicionada interface de tremonha.{*B*} +- Adicionados fogos de artifício - A interface dos fogos de artifício pode ser acessada na bancada quando tem os ingredientes para fazer uma estrela ou foguete de artifício.{*B*} +- Adicionado 'modo de aventura' - Você só pode quebrar blocos com as ferramentas corretas.{*B*} +- Adicionados muitos sons novos.{*B*} +- Criaturas, itens e projéteis agora podem passar pelos portais.{*B*} +- Repetidores agora podem ser trancados alimentando suas laterais com outro repetidor.{*B*} +- Agora zumbis e esqueletos podem surgir com armas e armaduras diferentes.{*B*} +- Novas mensagens de morte.{*B*} +- Nomeie criaturas com um crachá, e renomeie recipientes para mudar o título quando o menu está aberto.{*B*} +- Farelo de osso não mais faz tudo crescer imediatamente, agora cresce aleatoriamente em estágios.{*B*} +- Um sinal de redstone descrevendo o conteúdo de baús, barracas de poções, distribuidores e jukeboxes podem ser detectados colocando um comparador redstone diretamente contra eles.{*B*} +- Distribuidores podem ser colocados em qualquer direção.{*B*} +- Comer uma maçã dourada dá ao jogador vida "de absorção" extra por um curto período.{*B*} +- Quanto mais você fica em uma área, mais difíceis são as criaturas que surgem naquela área.{*B*} + +{*ETB*}Bem-vindo(a) de volta! Talvez você não tenha notado que o seu Minecraft foi atualizado.{*B*}{*B*} +Há muitos recursos novos para você e seus amigos experimentarem, aqui estão apenas alguns destaques. Dê uma lida e divirta-se!{*B*}{*B*} +\{*T1*}Novos itens{*ETB*} - Argila endurecida, argila colorida, bloco de carvão, fardo de feno, trilho ativador, bloco de redstone, sensor de luz do dia, distribuidor, tremonha, carrinho com tremonha, carrinho com TNT, comparador redstone, placa de pressão ponderada, farol, baú preso, estrela e foguete de artifício, estrela do Submundo, chumbo, armadura de cavalos, crachá, ovo de surgimento de cavalos{*B*}{*B*} +{*T1*}Novas criaturas{*ETB*} - Wither, esqueletos murchos, bruxas, morcegos, cavalos, burros e mulas{*B*}{*B*} +{*T1*}Novos recursos{*ETB*} - Dome e cavalgue um cavalo, faça fogos de artifício e dê um show, nomeie animais e monstros com um crachá, crie circuitos redstone mais avançados, e novas opções de anfitrião para ajudar a controlar o que os convidados podem fazer no seu mundo!{*B*}{*B*} +{*T1*}Novo mundo tutorial{*ETB*} – Aprenda a usar os recursos novos e velhos no mundo tutorial. Veja se consegue encontrar todos os discos de música secretos escondidos no mundo!{*B*}{*B*} -{*ETB*}Bem-vindo de volta! Talvez você não tenha notado que o seu Minecraft foi atualizado.{*B*}{*B*} -Há muitos recursos novos para você e seus amigos experimentarem, aqui estão apenas alguns destaques. Dê uma lida e divirta-se!{*B*}{*B*} -{*T1*}Novos itens{*ETB*} - Esmeralda, Minério de Esmeralda, Bloco de Esmeralda, Baú Ender, Gancho Disparador, Maçã Dourada Encantada, Bigorna, Vaso de Flor, Parede de Paralelepípedos, Paredes de Parelelepípedos com Musgo, Pintura Podre, Batata, Batata Cozida, Batata Venenosa, Cenoura, Cenoura Dourada, Cenoura na Vareta, Torta de Abóbora, Poção de Visão Noturna, Poção da Invisibilidade, Quartzo, Minério de Quartzo, Bloco de Quartzo, Laje de Quartzo, Escada de Quartzo, Bloco de Quartzo Cinzelado, Coluna de Bloco de Quartzo, Livro Encantado, Tapete{*B*}{*B*} -{*T1*}Novas multidões{*ETB*} - Aldeões zumbis.{*B*}{*B*}\r\n{*T1*}Novos recursos{*ETB*} - Comércio com aldeões, consertar ou encantar armas e ferramentas com uma Bigorna, armazenar itens em um Baú Ender, controle de um porco enquanto o monta usando uma cenoura na vareta!{*B*}{*B*}\r\n{*T1*}Novos Mini-tutoriais{*ETB*} – Saiba como usar os novos recursos no Tutorial do Mundo!{*B*}{*B*}\r\n{*T1*}Novos "Ovos de Páscoa"{*ETB*} – Movemos todos os Discos de música secretos no Mundo do Tutorial. Veja se consegue encontrá-los novamente!{*B*}{*B*}\r\n +Cavalos + +{*T3*}COMO JOGAR: CAVALOS{*ETW*}{*B*}{*B*} +Cavalos e burros são encontrados principalmente em planícies. Mulas são o fruto de um burro e um cavalo, mas são estéreis.{*B*} +Todos os cavalos, burros e mulas adultos são animais de montaria. No entanto, apenas os cavalos podem usar armadura, ao passo que só as mulas e os burros podem portar alforjes para transportar itens.{*B*}{*B*} +Cavalos, burros e mulas devem ser domesticados antes que possam ser usados. Para domesticar um cavalo, basta tentar montá-lo e permanecer montado enquanto ele tenta arremessar o montador.{*B*} +Quando aparecem coraçõezinhos em volta do cavalo, ele terá sido domesticado e não tentará mais se livrar do(a) jogador(a). Para guiar um cavalo, o jogador deve equipar uma sela sobre o animal.{*B*}{*B*} +As selas podem ser compradas de aldeões ou encontradas dentro de Baús no mundo.{*B*} +Você pode equipar alforjes em burros e mulas domesticados ao amarrar um Baú. Esses alforjes podem, então, ser acessados enquanto você monta ou se esgueira.{*B*}{*B*} +Cavalos e burros (mas não mulas) podem ser criados como os outros animais utilizando-se Maçãs Douradas ou Cenouras Douradas.{*B*} +Potros se tornarão cavalos adultos com o tempo, embora alimentá-los com Trigo ou Feno acelere o processo.{*B*} + + +Faróis + +{*T3*}COMO JOGAR: FARÓIS{*ETW*}{*B*}{*B*} +Faróis ativos projetam um feixe de luz clara no céu e concedem poderes aos jogadores próximos.{*B*} +Eles podem ser produzidos com Vidro, Obsidiana e Estrelas do Submundo, obtidas ao derrotar-se o Wither.{*B*}{*B*} +Os faróis devem ser posicionados de forma a receberem luz solar durante o dia. Eles devem ser colocados em pirâmides de ferro, ouro, esmeralda ou diamante.{*B*} +O material sobre o qual é posicionado não afeta o poder do farol.{*B*}{*B*} +No menu do Farol, você pode selecionar o poder principal deste farol. Quanto mais níveis sua pirâmide tiver, maior será o número de opções de poderes disponível para escolha.{*B*} +Um farol em uma pirâmide com pelo menos quatro níveis também concede a opção de Regenerar o segundo poder ou aumentar o poder do primeiro.{*B*}{*B*} +Para definir os poderes do seu farol, sacrifique uma esmeralda, um diamante, um ouro ou um lingote de ferro no espaço de pagamento.{*B*} +Quando tudo estiver montado, os poderes emanarão do farol indefinidamente.{*B*} + + +Fogos de artifício + +{*T3*}COMO JOGAR : FOGOS DE ARTIFÃCIO{*ETW*}{*B*}{*B*} +Fogos de artifício são itens decorativos que podem ser lançaodos à mão ou de distribuidores. Eles são criados usando papel, pólvora e opcionalmente um número de estrelas de artifício.{*B*} +As cores, desvanecimento, forma, tamanho e efeitos (como trilhas e brilho) das estrelas de artifício podem ser customizados incluindo ingredientes adicionais na criação.{*B*}{*B*} +Para criar um fogo de artifício coloque pólvora e papel na grade de criação 3x3 que é mostrada acima do seu inventário.{*B*} +Opcionalmente, você pode colocar várias estrelas de artifício na grade de criação para adicioná-los ao fogo de artifício.{*B*} +Encher mais vagas na grade de criação com pólvora aumenta a altura na qual as estrelas de artifício explodem.{*B*}{*B*} +Depois você pode tirar o fogo de artifício do espaço de resultado.{*B*}{*B*} +Estrelas de artifício podem ser criadas colocando pólvora e corante na grade de criação.{*B*} + - O corante ajusta a cor da explosão da estrela de artifício.{*B*} + - A forma da estrela de artifício é configurada adicionando uma carga de fogo, barra de ouro, pena ou cabeça de criatura.{*B*} + - Uma trilha ou um brilho podem ser adicionados usando diamantes ou pó de glowstone.{*B*}{*B*} +Depois que uma estrela de fogos de artifício foi criada, você pode ajustar a cor de desvanecimento da estrela de artifício combinando-a com um corante. + + +Tremonhas + +{*T3*}COMO JOGAR: TREMONHAS{*ETW*}{*B*}{*B*} +Tremonhas são usadas para inserir ou remover itens de recipientes e para pegar automaticamente os itens lançados dentro delas.{*B*} +Elas afetam Barraca de Poções, Baús, Distribuidor, Monólitos, Carrinhos com Baús, Carrinhos com Tremonhas, assim como outras Tremonhas.{*B*}{*B*} +Tremonhas farão tentativas contínuas de sugar os itens de recipientes convenientes que estejam acima delas. Além disso, também tentarão inserir itens depositados em um recipiente de saída.{*B*} +Se uma Tremonha for movida a Redstone, ela se tornará inativa e deixará de sugar e inserir itens.{*B*}{*B*} +Uma Tremonha aponta na direção que tenta retirar os itens. Para fazer uma Tremonha apontar para um bloco específico, coloque-a em frente a este bloco enquanto se esgueira.{*B*} + + +Monólitos + +{*T3*}COMO JOGAR : MONÓLITOS{*ETW*}{*B*}{*B*} +Quando alimentado com um sinal de Redstone, monólitos derrubam aleatoriamente um dos itens armazenados. Use {*CONTROLLER_ACTION_USE*} para abrir o monólito e então carregá-lo com itens do seu inventário.{*B*} +Se o monólito estiver de frente para um baú ou outro tipo de recipiente, o item será colocado ali ao invés de cair no chão. Longas correntes de monólitos podem ser construídos para carregar itens. Para que isso funcione, eles devem ser ativados e desativados alternadamente. + Causa mais danos que à mão. @@ -600,10 +660,36 @@ As cores da cama são sempre as mesmas, independentemente da cor da lã usada. Cria uma imagem da área explorada enquanto você o segura. Pode ser usado para encontrar caminhos. +Quando usado, vira um mapa da parte do mundo onde você está, sendo preenchido conforme você explora. + Permite ataques à distância usando flechas. Usada como munição para arcos. +Derrubados pelo Wither, utilizado na produção de Faróis. + +Quando ativado, cria explosões coloridas. Determina-se a cor, o efeito, o formato e o desvanecimento pela Estrela de Artifício usada na criação do Fogo de Artifício. + +Usado para determinar a cor, efeito e formato do Fogo de Artifício. + +Usados em circuito de Redstone para manter, comparar e subtrair a força do sinal ou para medir os estados de determinados blocos. + +Um tipo de Carrinho de Minas que funciona como um bloco de TNT móvel. + +É um bloco que produz um sinal Redstone derivado de luz do sol (ou a falta dela). + +Tipo especial de Carrinho de Minas que funciona de forma similar a uma Tremonha. Ele coletará os itens deixados nos trilhos e nos recipientes acima dele. + +Tipo especial de armadura que pode ser equipada em um cavalo. Oferece 5 de Armadura. + +Tipo especial de armadura que pode ser equipada em um cavalo. Oferece 7 de Armadura. + +Tipo especial de armadura que pode ser equipada em um cavalo. Oferece 11 de Armadura. + +Usado para amarrar criaturas ao jogador ou postes de cercas + +Usado para nomear criaturas no mundo. + Restaura 2,5{*ICON_SHANK_01*}. Restaura 1{*ICON_SHANK_01*}. Pode ser usado 6 vezes. @@ -655,7 +741,7 @@ Também pode ser usado para pouca iluminação. Quando ativado, acelera os carrinhos de minas que passam sobre ele. Quando desativado, faz os carrinhos pararem nele. -Funciona como uma chapa de pressão (envia um sinal Redstone quando ativado), mas só pode ser ativado por um carrinho de minas. +Funciona como uma chapa de pressão (envia um sinal Redstone quando ativado), mas só pode ser ativado por um Carrinho de Minas. Usado para transportar você, um animal ou um monstro sobre trilhos. @@ -928,100 +1014,158 @@ Também pode ser usado para pouca iluminação. As Cabeças de multidão podem ser colocadas como decoração, ou usadas como máscara na abertura do capacete. +Usado para executar comandos. + +Projeta um feixe de luz no céu e pode oferecer efeitos de status para os jogadores próximos. + +Armazena blocos e itens dentro. Coloque dois baús, lado a lado, para criar um baú maior com o dobro de capacidade. Além disso, o baú preso cria uma carga Redstone quando aberto. + +Oferece uma carga Redstone. A carga será mais forte se houver mais itens na chapa. + +Oferece uma carga Redstone. A carga será mais forte se houver mais itens na chapa. Exige mais peso que uma chapa leve. + +Usado como fonte de energia redstone. Redstones podem ser criadas a partir dele. + +Usado para capturar itens, transferi-los ou retirá-los de recipientes. + +Um tipo de corrimão que habilita ou desabilita Carrinhos de Minas com Tremonhas e aciona Carrinhos de Minas com TNT. + +Usado para segurar e derrubar itens ou empurrá-los em outros recipientes quando recebem carga Redstone. + +Blocos coloridos produzidos ao tingir-se a argila endurecida. + +Pode alimentar Cavalos, Burros e Mulas para curar até 10 Corações. Acelera o crescimento de potros. + +Criado ao cozinhar a argila no forno. + +Criado a partir de vidro e um corante. + +Criado a partir de um vitral + +Uma forma compacta de armazenar carvão. Pode ser usado como combustível em fornalhas. + Lula - + Solta sacos de tinta quando morta. - + Vaca - + Solta couro quando morta. Pode ser ordenhada com um balde. - + Ovelha - + Solta lã quando tosquiada (se já não tiver sido tosquiada). Pode ser tingida para produzir lã de cores diferentes. - + Galinha - + Solta penas quando morta e põe ovos aleatoriamente. - + Porco - + Solta costeletas quando morto. Pode ser montado usando uma sela. - + Lobo - + Dócil até ser atacado, quando atacará de volta. Pode ser domado usando ossos, o que faz o lobo segui-lo e atacar qualquer coisa que ataque você. - + Creeper - + Explode se você chegar muito perto! - + Esqueleto - + Dispara flechas em você. Solta flechas quando morto. - + Aranha - + Ataca quando você chega perto. Escala paredes. Solta fio quando morta. - + Zumbi - + Ataca quando você chega perto. - + Homem-porco zumbi - + Inicialmente dócil, mas ataca em grupos se você ataca um deles. - + Ghast - + Atira bolas de fogo em você, que explodem ao contato. - + Slime - + Divide-se em slimes menores quando atingido. - + Enderman - + Atacará se você olhar para ele. Também pode mover blocos. - + Traça - + Atrai as Traças próximas quando atacada. Esconde-se em blocos de pedra. - + Aranha de Caverna - + Tem uma mordida venenosa. - + Vacogumelo - + Faz sopa de cogumelo quando usada com uma vasilha. Derruba cogumelos e torna-se uma vaca normal depois de tosquiada. - + Golem de Neve - + O Golem de Neve pode ser criado pelos jogadores usando blocos de neve e uma abóbora. Ele atira bolas de neve nos inimigos dos seus criadores. - + Dragão Ender - + Este é um grande dragão negro encontrado no Final. - + Chama - + Estes são inimigos encontrados no Submundo, geralmente dentro das Fortalezas do Submundo. Derrubam Varas de Chamas quando são mortos. - + Cubo de Magma - + Eles são encontrados no Submundo. Similares aos Slimes, dividem-se em versões menores quando são mortos. - + Aldeão - + Ocelote - + Estes podem ser encontrados nas florestas. Eles podem ser domesticados, alimentando-os com Peixe Cru. Mas você deve deixar o Ocelote se aproximar, pois quaisquer movimentos bruscos podem assustá-lo e fazê-lo fugir. - + Golem de Ferro - + Aparece em vilas para protegê-las e podem ser criados usando blocos de ferro e abóboras. - + +Morcego + +Estas criaturas voadoras são encontradas nas cavernas ou em outros espaços fechados. + +Bruxa + +Estas inimigas podem ser encontradas em pântanos e atacam atirando Poções. Derrubam Poções quando mortas. + +Cavalo + +Estes animais podem ser domesticados e então montados. + +Burro + +Estes animais podem ser domesticados e então montados. Podem portar baús amarrados. + +Mula + +Fruto do cruzamento entre um cavalo e um burro. Estes animais podem ser domesticados e então montados, e podem carregar baús. + +Cavalo Zumbi + +Cavalo Esqueleto + +Wither + +Estes são criados a partir de Caveiras Murchas ou Areia Movediça. Atiram caveiras explosivas em você. + Explosives Animator Concept Artist @@ -1368,6 +1512,8 @@ Também pode ser usado para pouca iluminação. Mapa +Mapa vazio + Disco - "13" Disco de Música - "cat" @@ -1470,6 +1616,28 @@ Também pode ser usado para pouca iluminação. Cabeça de creeper +Estrela do Submundo + +Foguete de Artifício + +Estrela de Artifício + +Comparador Redstone + +Carrinho com TNT + +Carrinho com Tremonha + +Armadura de Ferro para Cavalo + +Armadura de Ouro para Cavalo + +Armadura de Diamante para Cavalo + +Chumbo + +Crachá + Pedra Bloco de Grama @@ -1486,6 +1654,8 @@ Também pode ser usado para pouca iluminação. Tábua de madeira de floresta +Tábuas (qualquer tipo) + Muda Muda de Carvalho @@ -1822,6 +1992,190 @@ Também pode ser usado para pouca iluminação. Caveira +Bloco de Comando + +Farol + +Baú Preso + +Chapa de Pressão Ponderada (Leve) + +Chapa de Pressão Ponderada (Pesada) + +Comparador Redstone + +Sensor de Luz Solar + +Bloco de Redstone + +Tremonha + +Trilho Ativador + +Monólito + +Argila colorida + +Fardo de Feno + +Argila endurecida + +Bloco de carvão + +Argila colorida preta + +Argila colorida vermelha + +Argila colorida verde + +Argila colorida marrom + +Argila colorida azul + +Argila colorida roxa + +Argila colorida ciano + +Argila colorida cinza claro + +Argila colorida cinza + +Argila colorida rosa + +Argila colorida verde-limão + +Argila colorida amarela + +Argila colorida azul claro + +Argila colorida magenta + +Argila colorida laranja + +Argila colorida branca + +Vitral + +Vitral preto + +Vitral vermelho + +Vitral verde + +Vitral marrom + +Vitral azul + +Vitral roxo + +Vitral ciano + +Vitral cinza claro + +Vitral cinza escuro + +Vitral rosa + +Vitral verde-limão + +Vitral amarelo + +Vitral azul claro + +Vitral magenta + +Vitral laranja + +Vitral branco + +Painel de vitral + +Painel de vitral preto + +Painel de vitral vermelho + +Painel de vitral verde + +Painel de vitral marrom + +Painel de vitral azul + +Painel de vitral roxo + +Painel de vitral ciano + +Painel de vitral cinza claro + +Painel de vitral cinza + +Painel de vitral rosa + +Painel de vitral verde-limão + +Painel de vitral amarelo + +Painel de vitral azul claro + +Painel de vitral magenta + +Painel de vitral laranja + +Painel de vitral branco + +Bola pequena + +Bola grande + +Forma Estelar + +Forma de Creeper + +Explosão + +Formato desconhecido + +Preto + +Vermelho + +Verde + +Marrom + +Azul + +Roxo + +Ciano + +Cinza claro + +Cinza + +Rosa + +Verde-limão + +Amarelo + +Azul claro + +Magenta + +Laranja + +Branco + +Personalizado + +Desbotado + +Brilho + +Trilho + +Duração do voo: +  Controles Atuais Estilo @@ -1999,8 +2353,7 @@ Também pode ser usado para pouca iluminação. Este é seu inventário. Ele mostra os itens disponíveis para uso em sua mão e todos os outros itens que está carregando. Sua armadura também é mostrada aqui. - - + {*B*} Pressione{*CONTROLLER_VK_A*} para continuar.{*B*} Pressione {*CONTROLLER_VK_B*} se já souber usar o inventário. @@ -2021,7 +2374,7 @@ Também pode ser usado para pouca iluminação. - Para obter mais informações sobre um item, passe o ponteiro do mouse sobre ele e pressione {*CONTROLLER_VK_RT*}. + Para obter mais informações sobre um item, passe o ponteiro do mouse sobre ele e pressione {*CONTROLLER_ACTION_MENU_PAGEDOWN*} . @@ -2055,7 +2408,7 @@ Também pode ser usado para pouca iluminação. - Para obter mais informações sobre um item, passe o ponteiro do mouse sobre ele e pressione {*CONTROLLER_VK_RT*}. + Para obter mais informações sobre um item, passe o ponteiro do mouse sobre ele e pressione {*CONTROLLER_ACTION_MENU_PAGEDOWN*} . @@ -2602,6 +2955,211 @@ No modo de voo, mantenha pressionado {*CONTROLLER_ACTION_JUMP*}para se mover par Pressione {*CONTROLLER_VK_B*}se já souber usar a barra de alimentos e como comer. + + Esta é a interface do inventário do cavalo. + + + + {*B*}Pressione{*CONTROLLER_VK_A*} para continuar. + {*B*}Pressione{*CONTROLLER_VK_B*} se você já sabe usar o inventário do cavalo. + + + + O inventário do cavalo permite a você transferir ou equipar itens no seu Cavalo, Burro ou Mula. + + + + Sele o cavalo posicionando a sela em seu respectivo espaço. Cavalos podem receber armadura ao se posicionar a Armadura de Cavalo em seu respectivo espaço. + + + + Você também pode transferir os itens entre o seu inventário e os alforjes amarrados aos burros e mulas neste menu. + + +Você encontrou um Cavalo. + +Você encontrou um Burro. + +Você encontrou uma Mula. + + + {*B*}Pressione{*CONTROLLER_VK_A*} para saber mais sobre Cavalos, Burros e Mulas. + {*B*}Pressione{*CONTROLLER_VK_B*} se você já sabe sobre Cavalos, Burros e Mulas. + + + + Cavalos e burros são encontradas principalmente em planícies abertas. Mulas são o fruto de um burro e um cavalo, mas são estéreis. + + + + Todos os cavalos, burros e mulas adultos são animais de montaria. No entanto, apenas os cavalos podem usar armadura, ao passo que só as mulas e os burros podem portar alforjes para transportar itens. + + + + Cavalos, burros e mulas devem ser domesticados antes que possam ser usados. Para domesticar um cavalo, basta tentar montá-lo e permanecer montado enquanto ele tenta tenta arremessar quem o monta. + + + + \Quando aparecem coraçõezinhos em volta do cavalo, ele terá sido domesticado e não tentará mais se livrar do(a) jogador(a). + + + + Tente montar agora neste cavalo. Use {*CONTROLLER_ACTION_USE*} sem itens ou ferramentas na mão para montar. + + + + Para guiar um cavalo, o jogador deve equipar uma sela sobre o animal, que pode ser comprada de aldeões, pescada ou encontrada dentro de baús no mundo. + + + + Você pode equipar alforjes em burros e mulas domesticados ao amarrar um Baú. Estes alforjes podem então ser acessados enquanto você monta ou se esgueira. + + + + Cavalos e burros (mas não mulas) podem ser criados como outros animais utilizando-se Maçãs Douradas ou Cenouras Douradas. Potros se tornarão cavalos adultos com o tempo, embora alimentá-los com Trigo ou Feno acelere o processo. + + + + Você pode tentar domesticar cavalos e burros aqui; além disso, há selas, armaduras de cavalos e outros itens úteis para cavalos nos baús pelas redondezas. + + + + Esta é a interface do Farol, que você pode usar para escolher os poderes que o seu farol vai conceder. + + + + {*B*}Pressione{*CONTROLLER_VK_A*} para continuar. + {*B*}Pressione{*CONTROLLER_VK_B*} se você já sabe usar a interface do Farol. + + + + No menu do Farol, você pode selecionar o poder principal deste farol. Quanto mais níveis sua pirâmide tiver, maior será o número de opções de poderes disponível para escolha. + + + + Um farol em uma pirâmide com pelo menos 4 níveis também concede a opção de Regenerar o segundo poder ou aumentar o poder do primeiro. + + + + Para definir os poderes do seu farol, sacrifique uma Esmeralda, Diamante, Ouro ou Lingote de Ferro no espaço de pagamento. Quando tudo estiver montado, os poderes emanarão do farol indefinidamente. + + +Há um farol inativo no topo desta pirâmide. + + + {*B*}Pressione{*CONTROLLER_VK_A*} para saber mais sobre os Faróis. + {*B*}Pressione{*CONTROLLER_VK_B*} se você já sabe sobre os Faróis. + + + + Faróis ativos projetam um feixe de luz clara no céu e concedem poderes aos jogadores próximos. Eles podem ser produzidos com vidro, obsidiana e estrelas do Submundo, obtidas ao derrotar o Wither. + + + + Os faróis devem ser posicionados de forma a receberem luz solar durante o dia. Eles devem ser colocados em pirâmides de ferro, ouro, esmeralda ou diamante. No entanto, o material sobre o qual um farol é posicionado não afeta o poder do farol. + + + + Tente usar o Farol para definir os poderes que ele concede. Você pode usar lingotes de ferro concedidos como o pagamento necessário. + + +Esta sala contém Tremonhas + + + {*B*}Pressione{*CONTROLLER_VK_A*} para saber mais sobre as Tremonhas. + {*B*}Press{*CONTROLLER_VK_B*} se você já sabe sobre as Tremonhas. + + + + Tremonhas são usadas para inserir ou remover itens de recipientes e para pegar itens lançados dentro delas automaticamente. + + + + Elas afetam as Barraca de Poções, Baús, Distribuidor, Monólitos, Carrinhos com Baús, Carrinhos com Tremonhas, assim como outras Tremonhas. + + + + Tremonhas farão tentativas contínuas de sugar os itens de recipientes apropriados acima delas. Além disso, também tentarão inserir itens depositados em um recipiente de saída. + + + + Se uma Tremonha for movida a Redstone, ela se tornará inativa e deixará de sugar e inserir itens. + + + + Uma Tremonha aponta na direção que tenta retirar os itens. Para fazer uma Tremonha apontar para um bloco específico, coloque-a em frente a este bloco enquanto se esgueira. + + + + Há diversos modelos de Tremonhas para você ver e experimentar nesta sala. + + + + Essa é a interface de fogos de artifício, que você pode usar para fazer fogos de artifício e estrelas de fogos de artifício. + + + + {*B*}Pressione{*CONTROLLER_VK_A*} para continuar. + {*B*}Pressione{*CONTROLLER_VK_B*} se você já sabe usar a interface do Farol. + + + + Para fazer fogos de artifício coloque pólvora e papel na grade de fabricação 3x3 acima do seu inventário. + + + + Opcionalmente, você pode colotar múltiplas estrelas de fogos de artifício na grade de fabricação, para adicioná-las ao fogo de artifício sendo fabricado. + + + + Encher mais espaços na grade de fabricação com pólvora aumenta a altura na qual as estrelas de fogos de artifício explodem. + + + + Depois você pode remover o fogo de artifício do espaço de resultado, quando quiser criá-lo. + + + + Estrelas de fogo de artifício podem ser feitas colocando pólvora e corante na grade de fabricação. + + + + O corante define a cor da explosão na estrela de fogos de artifício. + + + + A forma da estrela de fogos de artifício é definida ao adicionar uma carga de fogo, barra de ouro, pena or cabeça. + + + + Uma trilha ou brilho pode ser adicionado usando diamantes e pó de glowstone. + + + + Depois da criação de uma estrela de fogos de artifício, você pode ajustar a cor de desvanecimento combinando-a com um corante. + + + + Contido nos baús aqui estão vários itens usados na criação de FOGOS DE ARTIFÃCIO! + + + + {*B*}Pressione{*CONTROLLER_VK_A*} para aprender mais sobre fogos de artifício. + {*B*}Pressione{*CONTROLLER_VK_B*} se você já sabe sobre fogos de artifício. + + + + Fogos de artifício são itens decorativos que podem ser lançados à mão ou de distribuidores. Eles podem ser criados com papel, pólvora e opcionalmente um punhado de estrelas de fogos de artifício. + + + + As cores, desvanecimento, forma, tamanho e efeitos (como trilhas e brilhos) das estrelas de fogos de artifício podem ser customizados usando ingredientes extras na criação. + + + + Tente criar um fogo de artifício na bancada usando um sortimento de ingredientes dos baús. + +  Selecionar Usar @@ -2824,6 +3382,22 @@ No modo de voo, mantenha pressionado {*CONTROLLER_ACTION_JUMP*}para se mover par Carregar jogo salvo para o Xbox One +Montar + +Desmontar + +Baú amarrado + +Lançar + +Rédea + +Soltar + +Amarrar + +Nomear + OK Cancelar @@ -3134,6 +3708,20 @@ Deseja desbloquear a versão integral do jogo? Distribuidor +Cavalo + +Monólito + +Tremonha + +Farol + +Poder Principal + +Poder Secundário + +Carrinho de Minas + Não há ofertas de conteúdo para baixar desse tipo disponíveis para este título no momento. %s entrou no jogo. @@ -3293,10 +3881,14 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? Modo Jogo Criativo +Modo de Jogo: Aventura + Sobrevivência Criativo +Aventura + Criado em Sobrevivência Criado em Criativo @@ -3317,6 +3909,8 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? Superplano +Insira uma semente para gerar novamente o mesmo terreno. Deixe vazio para um mundo aleatório. + Quando habilitado, o jogo será um jogo online. Quando habilitado, apenas jogadores convidados poderão entrar. @@ -3333,7 +3927,7 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? Quando habilitado, o host pode alternar o vôo, desabilitar exaustão e ficar invisível pelo menu do jogo. Desabilita atualizações de conquistas e de placar de líderes. -Quando ativado, o Submundo é recriado. É útil quando se tem um jogo salvo mais antigo em que as Fortalezas do Submundo não estavam presentes. +Ao ativar, recria o Submundo. Útil para mundos criados quando Fortalezas do Submundo ainda não existiam. Quando habilitado, estruturas como Vilas e Fortalezas serão geradas no mundo. @@ -3341,6 +3935,20 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? Quando habilitado, um baú contendo alguns itens úteis será criado perto do ponto de criação do jogador. +Quando desativada, impede que monstros e animais alterem os bloco (por exemplo, as explosões dos Creepers não destroem os blocos e as Ovelhas não removem a Grama) ou peguem itens. + +Quando ativada, os jogadores manterão o inventário ao morrer. + +Quando desativada, as criaturas não aparecerão naturalmente. + +Quando desativada, monstros e animais não deixarão itens (por exemplo, os Creepers não vão deixar cair pólvora). + +Quando desativada, os blocos vão parar de derrubar itens ao serem destruídos (por exemplo, blocos de pedra não derrubarão mais paralelepípedos). + +Quando desativada, os jogadores não regenerarão a saúde naturalmente. + +Quando desativada, a hora do dia não sofrerá alteração. + Pacotes de Capas Temas @@ -3389,7 +3997,49 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? {*PLAYER*} foi esmurrado por {*SOURCE*} -{*PLAYER*} foi morto por {*SOURCE*} +{*PLAYER*} foi morto por {*SOURCE*} usando magia + +{*PLAYER*} caiu da escada + +{*PLAYER*} caiu de algumas videiras + +{*PLAYER*} caiu para fora da água + +{*PLAYER*} caiu de um lugar alto + +{*PLAYER*} foi condenado(a) a cair por {*SOURCE*} + +{*PLAYER*} foi condenado(a) a cair por {*SOURCE*} + +{*PLAYER*} foi condenado(a) a cair por {*SOURCE*} usando {*ITEM*} + +{*PLAYER*} caiu muito longe e foi eliminado(a) por {*SOURCE*} + +{*PLAYER*} caiu muito longe e foi eliminado(a) por {*SOURCE*} usando {*ITEM*} + +{*PLAYER*} andou sobre as chamas enquanto lutava {*SOURCE*} + +{*PLAYER*} virou cinzas enquanto lutava {*SOURCE*} + +{*PLAYER*} tentou nadar na lava para escapar{*SOURCE*} + +{*PLAYER*} afogou-se enquanto tentava escapar{*SOURCE*} + +{*PLAYER*} pisou no cacto enquanto tentava escapar {*SOURCE*} + +{*PLAYER*} foi explodido(a) por {*SOURCE*} + +{*PLAYER*} secou até morrer + +{*PLAYER*} foi assassinado por {*SOURCE*} usando {*ITEM*} + +{*PLAYER*} foi baleado(a) {*SOURCE*} usando {*ITEM*} + +{*PLAYER*} levou uma bola de fogo de {*SOURCE*} usando {*ITEM*} + +{*PLAYER*} foi socado(a) por {*SOURCE*} usando {*ITEM*} + +{*PLAYER*} foi morto(a) por {*SOURCE*} usando {*ITEM*} Neblina Base @@ -3566,6 +4216,8 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? Não é possível usar o ovo spawn no momento. O número máximo de lulas em um mundo foi alcançado. +Não pode usar um Ovo de Criação no momento. O número máximo de Morcegos em um mundo foi alcançado. + Não é possível usar o Ovo de Criação no momento. O número máximo de inimigos no mundo já foi alcançado. Não é possível usar o Ovo de Criação no momento. O número máximo de aldeões no mundo já foi alcançado. @@ -3574,12 +4226,14 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? Você não pode gerar inimigos no Modo Paz. -Este animal não pode entrar no Modo Amor. O número máximo de Porcos, Ovelhas, Vacas e Gatos de criação foi alcançado. +Este animal não pode entrar no Modo do Amor. O número máximo de Porcos, Ovelhas, Vacas e Gatos de criação foi alcançado. Este animal não pode entrar em Modo Amor. O número máximo de lobos foi alcançado. Este animal não pode entrar em Modo Amor. O número máximo de frangos foi alcançado. +Este animal não pode entrar no Modo do Amor. O número máximo de cavalos reprodutores foi alcançado. + Este animal não pode entrar em Modo Amor. O número máximo de vacogumelos foi alcançado. O número máximo de barcos em um mundo foi alcançado. @@ -3607,27 +4261,43 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? Créditos Reinstalar Conteúdo - + Configurações de Depuração - + Fogo Espalha - + TNT Explode - + Jogador x Jogador - + Confiar nos Jogadores - + Privilégios do Host - + Gerar Estruturas - + Mundo Superplano - + Baú de Bônus - + Opções de Mundo - + +Opções de Jogo + +Assédio por criatura + +Manter inventário + +Surgimento de criaturas + +Itens de criaturas + +Itens de Espaços + +Regeneração Natural + +Ciclo da Luz do Dia + Pode Construir e Minerar Pode Usar Portas e Acionadores @@ -3666,7 +4336,7 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? Semente para Criação de Mundo -Deixar em branco para semente aleatória +Deixar livre p/ uma semente aleatória Jogadores @@ -3700,7 +4370,7 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? Tipo de Nível: -JxJ: +JvJ: Confiar Jogadores: @@ -3732,7 +4402,7 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? Restaurar Padrões -Exibir Oscilação +Oscilação da visão Dicas @@ -3754,7 +4424,7 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? Editar mensagem da placa: -Vejam o que fiz no Minecraft: Xbox 360 Edition! +Olha o que eu fiz no Minecraft: Xbox 360 Edition! Texturas, ícones e interface do usuário clássicos do Minecraft! @@ -3814,6 +4484,14 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? Veneno +Wither + +Reforço de Saúde + +Absorção + +Saturação + de Rapidez de Lentidão @@ -3852,6 +4530,14 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? de Veneno +da Decadência + +do Reforço de Saúde + +da Absorção + +da Saturação + II @@ -3948,6 +4634,22 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? Reduz a saúde dos jogadores, animais e monstros afetados com o tempo. +Quando aplicado: + +Força de pulo para o cavalo + +Reforços Zumbis + +Saúde Máxima + +Limite de acomp. pelas criaturas + +Resistência a empurrão + +Velocidade + +Dano de ataque + Nitidez Atacar @@ -4038,7 +4740,7 @@ Deseja instalar o pacote de combinações ou o pacote de texturas agora? Restaura 3{*ICON_SHANK_01*}. Criado ao cozinhar uma batata na fornalha. -Restaura 1{*ICON_SHANK_01*}, ou pode ser cozinhado em uma fornalha. Pode ser plantado na fazenda. Comer isso pode te envenenar. +Restaura 1{*ICON_SHANK_01*} Comer isso pode te envenenar. Restaura 3{*ICON_SHANK_01*}. Criado com uma cenoura e barras de ouro. diff --git a/Minecraft.Client/Common/Media/pt-PT/4J_strings.resx b/Minecraft.Client/Common/Media/pt-PT/4J_strings.resx index a612c335..ab38c1c5 100644 --- a/Minecraft.Client/Common/Media/pt-PT/4J_strings.resx +++ b/Minecraft.Client/Common/Media/pt-PT/4J_strings.resx @@ -73,11 +73,11 @@ Perfil de jogador offline -O jogo tem algumas funcionalidades que requerem um perfil de jogador ativo no Xbox Live, mas de momento estás offline. +O jogo tem algumas funcionalidades que requerem um perfil de jogador ativo no Xbox LIVE, mas de momento estás offline. -Esta funcionalidade requer um perfil de jogador ligado ao Xbox Live. +Esta funcionalidade requer um perfil de jogador ligado ao Xbox LIVE. -Ligar ao Xbox Live +Ligar ao Xbox LIVE Continuar a jogar offline @@ -100,7 +100,7 @@ Desbloquear Jogo Completo Esta é a versão de avaliação do Minecraft. Se tivesses o jogo completo, terias acabado de ganhar um feito! -Desbloqueia o jogo completo para experimentares a diversão do Minecraft e para jogares com os teus amigos em todo o mundo através do Xbox Live. +Desbloqueia o jogo completo para experimentares a diversão do Minecraft e para jogares com os teus amigos em todo o mundo através do Xbox LIVE. Queres desbloquear o jogo completo? Estás a ser reencaminhado para o menu principal devido a um problema de leitura do teu perfil. diff --git a/Minecraft.Client/Common/Media/pt-PT/strings.resx b/Minecraft.Client/Common/Media/pt-PT/strings.resx index 132c30f2..6fee7199 100644 --- a/Minecraft.Client/Common/Media/pt-PT/strings.resx +++ b/Minecraft.Client/Common/Media/pt-PT/strings.resx @@ -156,7 +156,7 @@ Se estiveres a segurar um objeto, usa{*CONTROLLER_ACTION_USE*} para o utilizares {*T3*}INSTRUÇÕES DE JOGO : MOSTRADOR SUPERIOR{*ETW*}{*B*}{*B*} O MOSTRADOR SUPERIOR apresenta informação sobre o teu estado; a tua saúde, o oxigénio que te resta quando estás debaixo de água, o teu nível de fome (tens de comer para reabasteceres) e a armadura, caso estejas a usar alguma. Se perderes saúde, mas tiveres uma barra de comida com 9 ou mais{*ICON_SHANK_01*}, a tua saúde será imediatamente reabastecida. Ao comeres, reabasteces a barra de comida.{*B*} -Aqui também é mostrada a Barra de Experiência, com um valor numérico que mostra o nível de Experiência, e a barra que indica quantos Pontos de Experiência te faltam para subires de nível. Ganhas Pontos de Experiência recolhendo os Orbes de Experiência que os habitantes deixam cair quando morrem, ao escavar certos tipos de blocos, ao criar animais, ao pescar e ao fundir minério na fornalha.{*B*} +Aqui também é mostrada a Barra de Experiência, com um valor numérico que mostra o nível de Experiência, e a barra que indica quantos Pontos de Experiência te faltam para subires de nível. Ganhas Pontos de Experiência recolhendo os Orbes de Experiência que os habitantes deixam cair quando morrem, ao escavar certos tipos de blocos, ao criar animais, ao pescar e ao fundir minério na fornalha.{*B*}{*B*} Também apresenta os objetos disponíveis para usares. Usa{*CONTROLLER_ACTION_LEFT_SCROLL*} e{*CONTROLLER_ACTION_RIGHT_SCROLL*} para mudares o objeto que estás a segurar. {*T3*}INSTRUÇÕES DE JOGO : INVENTÃRIO{*ETW*}{*B*}{*B*} @@ -233,7 +233,7 @@ Quando é colocada uma Espada, Arco, Machado, Picareta, Pá, Armadura ou Livro n Se não tiveres Níveis de Experiência suficientes para usar alguns destes, o custo surgirá a vermelho, caso contrário surgirá a verde.{*B*}{*B*} O feitiço aplicado é selecionado aleatoriamente com base no custo apresentado.{*B*}{*B*} Se a Mesa de Feitiços estiver rodeada de Estantes (até um máximo de 15 Estantes), com um bloco de intervalo entre a Estante e a Mesa de Feitiços, o poder dos feitiços irá aumentar e ver-se-ão glifos misteriosos a sair do livro na Mesa de Feitiços.{*B*}{*B*} -Todos os ingredientes para uma Mesa de Feitiços podem ser encontrados nas aldeias de um mundo, ou escavando ou cultivando no mundo.{*B*} +Todos os ingredientes para uma Mesa de Feitiços podem ser encontrados nas aldeias de um mundo, ou escavando ou cultivando no mundo.{*B*}{*B*} Os Livros de Feitiços são usados na Bigorna para aplicar feitiços a itens. Isto dá-te maior controlo sobre os feitiços que gostarias de ter nos teus itens.{*B*} @@ -282,7 +282,7 @@ No modo de voo, podes manter premido{*CONTROLLER_ACTION_JUMP*} para subires e{*C {*T3*}INSTRUÇÕES DE JOGO : OPÇÕES DE ANFITRIÃO E JOGADOR{*ETW*}{*B*}{*B*} -{*T1*}Opções de jogo{*ETW*}{*B*} +{*T1*}Opções de Jogo{*ETW*}{*B*} Ao carregar ou criar um mundo, prime o botão "Mais Opções" para abrir um menu que te dá maior controlo sobre o teu jogo.{*B*}{*B*} {*T2*}Jogador vs. Jogador{*ETW*}{*B*} @@ -300,6 +300,27 @@ Ao carregar ou criar um mundo, prime o botão "Mais Opções" para abrir um menu {*T2*}Privilégios de Anfitrião{*ETW*}{*B*} Quando ativada, o anfitrião pode ativar a sua capacidade de voar, desativar a exaustão e tornar-se invisível a partir do menu do jogo. {*DISABLES_ACHIEVEMENTS*}{*B*}{*B*} + {*T2*}Ciclo da Luz do Dia{*ETW*}{*B*} + Quando desativada, a hora do dia não muda.{*B*}{*B*} + + {*T2*}Manter Inventário{*ETW*}{*B*} + Quando ativada, os jogadores mantêm o inventário quando morrem.{*B*}{*B*} + + {*T2*}Geração de Criaturas{*ETW*}{*B*} + Quando desativada, as criaturas não se geram naturalmente.{*B*}{*B*} + + {*T2*}Perturbação de Criaturas{*ETW*}{*B*} + Quando desativada, impede que monstros e animais mudem blocos (por exemplo, explosões de Creeper não destroem blocos e as Ovelhas não comem Erva) ou apanhem objetos.{*B*}{*B*} + + {*T2*}Saques de Criaturas{*ETW*}{*B*} + Quando desativada, os monstros e os animais não deixam cair saques (por exemplo, os Creepers não deixam cair pólvora).{*B*}{*B*} + + {*T2*}Queda de Peças{*ETW*}{*B*} + Quando desativada, os blocos não deixam cair objetos quando são destruídos (por exemplo, os blocos de Pedra não deixam cair Pedra Arredondada).{*B*}{*B*} + + {*T2*}Regeneração Natural{*ETW*}{*B*} + Quando desativada, os jogadores não regeneram naturalmente a sua saúde.{*B*}{*B*} + {*T1*}Opções de Criação de Mundos{*ETW*}{*B*} Ao criar um novo mundo, existem opções adicionais.{*B*}{*B*} @@ -343,24 +364,26 @@ Para modificar os privilégios de um jogador, seleciona o nome e prime{*CONTROLL Quando esta opção está ativada, o jogador pode alterar os privilégios dos outros jogadores (exceto o anfitrião) se "Confiar Jogadores" estiver desativada, expulsar jogadores e ativar ou desativar a propagação de fogo e as explosões de TNT.{*B*}{*B*} {*T2*}Expulsar Jogador{*ETW*}{*B*} - Selecionar esta opção faz com que jogadores que não estejam na mesma consola {*PLATFORM_NAME*} que o anfitrião sejam eliminados do jogo. Os jogadores expulsos não poderão voltar a participar no jogo até que este seja reiniciado.{*B*}{*B*} + {*KICK_PLAYER_DESCRIPTION*}{*B*}{*B*} {*T1*}Opções de Jogador Anfitrião{*ETW*}{*B*} Se "Privilégios de Anfitrião" estiver ativada, o jogador anfitrião pode modificar alguns dos seus privilégios. Para modificar os privilégios de um jogador, seleciona o nome e prime{*CONTROLLER_VK_A*} para abrir o menu de privilégios do jogador, onde podes usar as seguintes opções.{*B*}{*B*} {*T2*}Pode Voar{*ETW*}{*B*} Quando esta opção está ativada, o jogador pode voar. Esta opção só é relevante no modo Sobrevivência, uma vez que todos os jogadores podem voar no modo Criativo.{*B*}{*B*} - + {*T2*}Desativar Exaustão{*ETW*}{*B*} Esta opção afeta apenas o modo Sobrevivência. Quando ativada, as atividades físicas (caminhar/correr/saltar, etc.) não diminuem a barra de comida. No entanto, se o jogador for ferido, a barra de comida irá diminuir lentamente enquanto o jogador estiver a recuperar.{*B*}{*B*} - + {*T2*}Invisível{*ETW*}{*B*} Quando esta opção está ativada, o jogador não pode ser visto pelos outros jogadores e é invulnerável.{*B*}{*B*} - - {*T2*}Pode Teletransportar{*ETW*}{*B*} + + {*T2*}Pode Teletransportar{*ETW*}{*B*} Permite que o jogador se transporte ou transporte outros jogadores até si ou até outros jogadores no mundo. +Selecionar esta opção fará com que os jogadores que não estão na mesma consola {*PLATFORM_NAME*} que o anfitrião sejam expulsos do jogo, juntamente com outros jogadores na sua consola {*PLATFORM_NAME*}. Este jogador não poderá voltar ao jogo até este ser reiniciado. + Página Seguinte Página Anterior @@ -383,7 +406,7 @@ Se "Privilégios de Anfitrião" estiver ativada, o jogador anfitrião pode modif Animais de Criação -Preparação de Poções +Poções Feitiço @@ -426,60 +449,92 @@ pelo que facilmente se juntarão a ti. {*T3*}Alterações e Adições{*ETW*}{*B*}{*B*} -- Novos objetos - Esmeralda, Minério de Esmeralda, Bloco de Esmeralda, Baú Ender, Gancho de Armadilha, Maçã Dourada Enfeitiçada, Bigorna, Vaso de Flores, Muros de Pedra Arredondada, Muros de Pedra Arredondada com Musgo, Pintura de Wither, Batata, Batata Cozida, Batata Venenosa, Cenoura, Cenoura Dourada, Cenoura num Pau, -Tarte de Abóbora, Poção de Visão Nocturna, Poção de Invisibilidade, Quartzo do Submundo, Minério de Quartzo do Submundo, Bloco de Quartzo, Placa de Quartzo, Escada de Quartzo, Bloco de Quartzo Esculpido, Bloco Pilar de Quartzo, Livro de Feitiços, Alcatifa.{*B*} -- Novas receitas para Grés Suave e Grés Esculpido.{*B*} -- Novos Habitantes - Aldeões Mortos-Vivos.{*B*} -- Novas funcionalidades de geração de terreno - Templos do Deserto, Aldeias do Deserto, Templos da Selva.{*B*} -- Trocas com aldeões.{*B*} -- Interface Bigorna.{*B*} -- Pode tingir armadura de cabedal.{*B*} -- Pode tingir coleiras de lobo.{*B*} -- Pode montar um porco e controlá-lo com uma Cenoura num Pau.{*B*} -- Conteúdo de Baú Bónus atualizado com mais objetos.{*B*} -- Alterada colocação de meios blocos e outros blocos em meios blocos.{*B*} -- Alterada colocação de placas e escadas invertidas.{*B*} -- Adicionadas profissões de aldeões diferentes.{*B*} -- Aldeões gerados a partir de ovo de geração terão uma profissão aleatória.{*B*} -- Adicionada colocação lateral de tronco.{*B*} -- Fornalhas podem usar ferramentas de madeira como combustível.{*B*} -- Painéis de Gelo e Vidro podem ser recolhidos com ferramentas enfeitiçadas com toque de seda.{*B*} -- Botões de Madeira e Placas de Pressão de Madeira podem ser ativados com Flechas.{*B*} -- Habitantes do Submundo podem ser gerados no Mundo Superior a partir de Portais.{*B*} -- Creepers e Aranhas são agressivos para com o último jogador que os tenha atingido.{*B*} -- Os habitantes no modo Criativo tornam-se novamente neutros após um curto período.{*B*} -- Remover ricochete aquando de afogamento.{*B*} -- As portas partidas por mortos-vivos apresentam danos.{*B*} -- Gelo derrete no Submundo.{*B*} -- Caldeirões enchem-se quando ficam à chuva.{*B*} -- Pistões demoram o dobro do tempo a atualizar.{*B*} -- Porco larga Sela quando é morto (se tiver sela).{*B*} -- Cor do céu alterada no Fim.{*B*} -- Corda pode ser colocada (para Armadilhas).{*B*} -- Chuva escorre das folhas.{*B*} -- Alavancas podem ser colocadas no fundo dos blocos.{*B*} -- TNT causa danos variáveis consoante a definição de dificuldade.{*B*} -- Receita de livro alterada.{*B*} -- Barcos partem Nenúfares, em vez de Nenúfares partirem Barcos.{*B*} -- Porcos largam mais Costeletas.{*B*} -- Slimes reproduzem-se menos em mundos Superplanos.{*B*} -- Dano de Creeper variável consoante a definição de dificuldade, mais ricochete.{*B*} -- Corrigida a não abertura dos maxilares dos Endermen.{*B*} -- Adicionado teletransporte de jogadores (usando o menu BACK do jogo).{*B*} -- Novas Opções Anfitrião para voar, invisibilidade e invulnerabilidade para jogadores remotos.{*B*} -- Novos tutoriais do Mundo Tutorial para novos itens e funcionalidades.{*B*} -- Posições dos Baús de Discos de Música atualizadas no Mundo Tutorial.{*B*} +- Novos objetos adicionados - Barro Endurecido, Barro Manchado, Bloco de Carvão, Fardo de Palha, Carril Ativador, Bloco de Redstone, Sensor de Luz do Dia, Soltador, Funil, Vagoneta com Funil, Vagoneta com TNT, Comparador de Redstone, Placa de Pressão Ponderada, Farol, Baú Preso, Foguete de Fogo de Artifício, Estrela de Fogo de Artifício, Estrela do Submundo, Corda de Conduzir, Armadura de Cavalo, Etiqueta, Ovo de Geração de Cavalo{*B*} +- Novas Criaturas adicionadas - Cérbero, Esqueletos de Cérbero, Bruxas, Morcegos, Cavalos, Burros e Mulas{*B*} +- Novas funcionalidades de geração de terreno - Cabanas de Bruxa.{*B*} +- Adicionada interface de Farol.{*B*} +- Adicionada interface de Cavalo.{*B*} +- Adicionada interface de Funil.{*B*} +- Adicionado Fogo de Artifício - a interface de Fogo de Artifício pode ser acedida a partir da Mesa de Criação quando tens os ingredientes para criar uma Estrela de Fogo de Artifício ou um Foguete de Fogo de Artifício.{*B*} +- Adicionado 'Modo Aventura' - Só podes quebrar blocos com as ferramentas corretas.{*B*} +- Adicionados imensos sons novos.{*B*} +- Habitantes, objetos e projéteis agora passam através de portais.{*B*} +- Os Repetidores podem agora ser trancados alimentando a sua lateral com outro Repetidor.{*B*} +- Mortos-vivos e Esqueletos podem agora gerar-se com diferentes armas e armaduras.{*B*} +- Novas mensagens de morte.{*B*} +- Nomeia as criaturas com uma Etiqueta, e dá novos nomes a contentores para mudar o título quando se abre o menu.{*B*} +- O Pó de Ossos já não faz tudo crescer instantaneamente até ao tamanho máximo, e passa a fazê-lo por fases de forma aleatória.{*B*} +- Um sinal de Redstone que descreve os conteúdos dos Baús, dos Postos de Poções, dos Distribuidores e das Jukeboxes pode ser detetado colocando um Comparador de Redstone diretamente contra eles.{*B*} +- Os Distribuidores podem ficar virados em qualquer direção.{*B*} +- Comer uma Maçã Dourada dá ao jogador uma saúde de "absorção" adicional durante um curto período.{*B*} +- Quanto mais tempo permaneceres numa zona, mais difíceis serão os monstros que se geram nessa zona.{*B*} + +{*ETB*}Bem-vindo de volta! Podes não ter reparado, mas o Minecraft foi atualizado.{*B*}{*B*} +Há muitas funcionalidades novas para explorares com os teus amigos. Aqui ficam algumas. Lê e depois diverte-te!{*B*}{*B*} +{*T1*}Novos Objetos{*ETB*} - Barro Endurecido, Barro Manchado, Bloco de Carvão, Fardo de Palha, Carril Ativador, Bloco de Redstone, Sensor de Luz do Dia, Soltador, Funil, Vagoneta com Funil, Vagoneta com TNT, Comparador de Redstone, Placa de Pressão Ponderada, Farol, Baú Preso, Foguete de Fogo de Artifício, Estrela de Fogo de Artifício, Estrela do Submundo, Corda de Conduzir, Armadura de Cavalo, Etiqueta, Ovo de Geração de Cavalo{*B*}{*B*} +{*T1*}Novas Criaturas{*ETB*} - Cérbero, Esqueletos de Cérbero, Bruxas, Morcegos, Cavalos, Burros e Mulas{*B*}{*B*} +{*T1*}Novas Funcionalidades{*ETB*} - Domestica e cavalga um cavalo, cria fogo de artifício e dá espetáculo, nomeia animais e monstros com uma Etiqueta, cria circuitos de Redstone mais avançados, e novas Opções de Anfitrião para ajudar a controlar aquilo que os convidados podem fazer no teu mundo!{*B*}{*B*} +{*T1*}Novo Mundo Tutorial{*ETB*} – Aprende a usar as funcionalidades antigas e recentes no Mundo Tutorial. Vê se consegues descobrir todos os Discos de Música secretos escondidos no mundo!{*B*}{*B*} -{*ETB*}Bem-vindo de volta! Podes não ter reparado, mas o Minecraft sofreu alterações.{*B*}{*B*} -Há muitas novas funcionalidades para jogares com os teus amigos. Aqui ficam algumas. Lê e depois diverte-te!{*B*}{*B*} -{*T1*}Novos objetos{*ETB*} - Esmeralda, Minério de Esmeralda, Bloco de Esmeralda, Baú Ender, Gancho de Armadilha, Maçã Dourada Enfeitiçada, Bigorna, Vaso de Flores, Muros de Pedra Arredondada, Muros de Pedra Arredondada com Musgo, Pintura de Wither, Batata, Batata Cozida, Batata Venenosa, Cenoura, Cenoura Dourada, Cenoura num Pau, -Tarte de Abóbora, Poção de Visão Nocturna, Poção de Invisibilidade, Quartzo do Submundo, Minério de Quartzo do Submundo, Bloco de Quartzo, Placa de Quartzo, Escada de Quartzo, Bloco de Quartzo Esculpido, Bloco Pilar de Quartzo, Livro de Feitiços, Alcatifa.{*B*}{*B*} - {*T1*}Novos Habitantes{*ETB*} - Aldeões Mortos-Vivos.{*B*}{*B*} -{*T1*}Novas Funcionalidades{*ETB*} - Troca com aldeões, repara ou enfeitiça armas e ferramentas usando a Bigorna, armazena objetos num Baú Ender, controla um porco enquanto o montas usando uma Cenoura num Pau!{*B*}{*B*} -{*T1*}Novos Mini-Tutoriais{*ETB*} – Aprende a usar as novas funcionalidades no Mundo Tutorial!{*B*}{*B*} -{*T1*}Novos 'Easter Eggs'{*ETB*} – Mudámos de sítio todos os Discos de Música secretos no Mundo Tutorial. Vê se consegues voltar a encontrá-los!{*B*}{*B*} - +Cavalos + +{*T3*}INSTRUÇÕES DE JOGO: CAVALOS{*ETW*}{*B*}{*B*} +Os Cavalos e os Burros estão sobretudo nas planícies. As Mulas são descendentes de um Burro e de um Cavalo, mas são inférteis.{*B*} +Todos os Cavalos, Burros e Mulas adultos podem ser montados. Porém, só os Cavalos podem ter armadura, e só as Mulas e os Burros podem ser equipados com alforjes para transportar objetos.{*B*}{*B*} +Os Cavalos, os Burros e as Mulas têm de ser domesticados antes de poderem ser usados. Para domesticar um cavalo, é preciso montá-lo e conseguir ficar em cima dele enquanto ele tenta atirar o jogador para o chão.{*B*} +Quando surgem Corações de Amor à volta do cavalo, ele está domesticado e já não tentará atirar o jogador para o chão. Para guiar um cavalo, é preciso equipá-lo com uma Sela.{*B*}{*B*} +Podes comprar Selas aos aldeões ou encontrá-las dentro de Baús escondidos pelo mundo.{*B*} +Os Burros e Mulas domesticados podem receber alforjes se lhes prenderes um Baú. Poderás depois aceder aos alforjes enquanto montas ou quando te aproximas furtivamente do animal.{*B*}{*B*} +Os Cavalos e os Burros (as Mulas não) podem ser procriados como os outros animais, usando Maçãs Douradas ou Cenouras Douradas.{*B*} +Os potros tornam-se cavalos adultos ao fim de algum tempo, mas podes acelerar o processo alimentando-os com Trigo ou Feno.{*B*} + + +Faróis + +{*T3*}INSTRUÇÕES DE JOGO: FARÓIS{*ETW*}{*B*}{*B*} +Os Faróis Ativos projetam um feixe de luz brilhante para o céu e atribuem poderes a jogadores próximos.{*B*} +São criados a partir de Vidro, Obsidiana e Estrelas do Submundo, que podem ser obtidos derrotando o Cérbero.{*B*}{*B*} +Os Faróis têm de ser colocados de modo a apanhar sol durante o dia. Eles têm de ser colocados em Pirâmides de Ferro, Ouro, Esmeralda ou Diamante.{*B*} +O material do Farol em cima do qual este é colocado não tem qualquer efeito na sua potência.{*B*}{*B*} +No menu do Farol podes selecionar um poder principal para o teu Farol. Quantos mais camadas tiver a tua pirâmide, mais poderes terás à escolha.{*B*} +Um Farol numa pirâmide com pelo menos quatro camadas também te permite escolher entre o poder secundário de Regeneração ou um poder principal mais forte.{*B*}{*B*} +Para definir os poderes do teu Farol tens de sacrificar uma Esmeralda, um Diamante, Lingotes de Ferro ou Ouro na ranhura de pagamento.{*B*} +Uma vez definidos, os poderes irão emanar indefinidamente do Farol.{*B*} + + +Fogo de artifício + +{*T3*}INSTRUÇÕES DE JOGO: FOGO DE ARTIFÃCIO{*ETW*}{*B*}{*B*} +O Fogo de Artifício é um objeto decorativo que pode ser lançado à mão ou a partir de Distribuidores. Pode ser criado usando Papel, Pólvora e, opcionalmente, algumas Estrelas de Fogo de Artifício.{*B*} +As cores, o desaparecimento, a forma, o tamanho e os efeitos (como os rastos e a cintilância) das Estrelas de Fogo de Artifício podem ser personalizados incluindo ingredientes adicionais no momento da criação.{*B*}{*B*} +Para criar um Fogo de Artifício, coloca Pólvora e Papel na grelha de criação de 3x3 que aparece acima do teu inventário.{*B*} +Opcionalmente, podes colocar múltiplas Estrelas de Fogo de Artifício na grelha para as adicionar ao Fogo de Artifício.{*B*} +Preencher mais ranhuras na grelha de criação com Pólvora aumenta a altura a que as Estrelas de Fogo de Artifício vão explodir.{*B*}{*B*} +Podes então retirar o Fogo de Artifício criado da ranhura de saída.{*B*}{*B*} +As Estrelas de Fogo de Artifício podem ser criadas colocando Pólvora e Tinta na grelha de criação.{*B*} + - A Tinta definirá a cor da explosão da Estrela de Fogo de Artifício.{*B*} + - A forma da Estrela de Fogo de Artifício é definida adicionando uma Carga de Fogo, uma Pepita de Ouro, uma Pena ou uma Cabeça de Criatura.{*B*} + - Um rasto ou uma cintilância podem ser adicionados usando Diamantes ou Pó de Glowstone.{*B*}{*B*} +Depois de ser criada uma Estrela de Fogo de Artifício, podes definir a cor de desaparecimento da Estrela de Fogo de Artifício criando-a com Tinta. + + +Funis + +{*T3*}INSTRUÇÕES DE JOGO: FUNIS{*ETW*}{*B*}{*B*} +Os Funis são usados para inserir ou remover objetos de contentores, e para recolher automaticamente objetos atirados a eles.{*B*} +Eles podem afetar Postos de Poções, Baús, Distribuidores, Soltadores, Vagonetas com Baús, Vagonetas com Funis, bem como outros Funis.{*B*}{*B*} +Os Funis vão tentar continuamente sugar objetos de um contentor adequado colocado acima deles. Também vão tentar inserir objetos armazenados num contentor de destino.{*B*} +Se um Funil for alimentado por Redstone tornar-se-á inativo e parará de sugar e de inserir objetos.{*B*}{*B*} +Um Funil aponta na direção em que tenta colocar objetos. Para levar um Funil a apontar para um determinado bloco, coloca-o frente a esse bloco enquanto andas furtivamente.{*B*} + + +Soltadores + +{*T3*}INSTRUÇÕES DE JOGO: SOLTADORES{*ETW*}{*B*}{*B*} +Quando alimentados por Redstone, os Soltadores vão largar no chão um objeto ao acaso que contenham. Usa {*CONTROLLER_ACTION_USE*} para abrir o Soltador e depois podes carregar o Soltador com objetos do teu inventário.{*B*} +Se o Soltador estiver perante um Baú ou outro tipo de Contentor, o objeto será colocado aí e não no chão. Podes criar longas cadeias de Soltadores para transportar objetos ao longo de um caminho. Para que isto funcione, eles terão de ser, alternadamente, ligados e desligados. + Provoca mais danos do que com a mão. @@ -553,7 +608,7 @@ Tarte de Abóbora, Poção de Visão Nocturna, Poção de Invisibilidade, Quartz Utilizado para criar escadas compridas. Duas placas colocadas uma sobre a outra criam um bloco de placa dupla de tamanho normal. -Utilizado como escadas longas. Duas placas colocadas uma sobre a outra irão criar um bloco de placas duplo de tamanho normal. +Utilizado para criar escadas compridas. Duas placas colocadas uma sobre a outra criam um bloco de placa dupla de tamanho normal. Utilizadas para criar luz. As tochas também derretem a neve e o gelo. @@ -606,10 +661,36 @@ As cores da cama são sempre as mesmas, independentemente das cores da lã usada Quando seguras no mapa, poderás ver a imagem de uma área explorada. Pode ser utilizado para descobrir caminhos. +Quando se usa torna-se um mapa da parte do mundo em que estás, e vai-se preenchendo à medida que exploras. + Utilizado para ataques à distância com setas. Utilizadas como munição para os arcos. +Largado pelo Cérbero, usado no fabrico de Faróis. + +Quando ativados, criam explosões coloridas. Cor, efeito, forma e desaparecimento são determinados pela Estrela de Fogo de Artifício usada quando é criado o Fogo de Artifício. + +Usada para determinar cor, efeito e forma de um Fogo de Artifício. + +Usado em circuitos Redstone para manter, comparar ou subtrair a força do sinal, ou para medir determinados estados de blocos. + +É um tipo de Vagoneta que atua como bloco de TNT móvel. + +É um bloco que produz um sinal Redstone com base na luz solar (ou na ausência desta). + +É um tipo de Vagoneta especial que funciona de modo similar a um Funil. Recolhe objetos que estão nos carris e nos contentores acima. + +Um tipo especial de Armadura que pode ser colocada num cavalo. Fornece 5 de Armadura. + +Um tipo especial de Armadura que pode ser colocada num cavalo. Fornece 7 de Armadura. + +Um tipo especial de Armadura que pode ser colocada num cavalo. Fornece 11 de Armadura. + +Usado para atrelar criaturas ao jogador ou a postes de Vedação. + +Utilizada para nomear criaturas no mundo. + Restitui 2,5{*ICON_SHANK_01*}. Restitui 1{*ICON_SHANK_01*}. Podes usar até 6 vezes. @@ -628,7 +709,7 @@ As cores da cama são sempre as mesmas, independentemente das cores da lã usada Restitui 4{*ICON_SHANK_01*}. Cria-se cozinhando bife cru numa fornalha. -Restituem 1,5{*ICON_SHANK_01*} ou podem ser cozinhadas numa fornalha. +Restitui 1,5{*ICON_SHANK_01*} ou pode ser cozinhado numa fornalha. Restituem 4{*ICON_SHANK_01*}. Criadas ao cozinhar costeletas de porco cruas numa fornalha. @@ -646,7 +727,7 @@ As cores da cama são sempre as mesmas, independentemente das cores da lã usada Utilizada para enviar uma descarga elétrica ao ligar e desligar. Fica ligada ou desligada até ser premida novamente. -Envia constantemente uma descarga elétrica ou pode ser utilizada como receptor/transmissor quando ligada ao lado de um bloco. +Envia constantemente uma descarga elétrica ou pode ser utilizada como recetor/transmissor quando ligada ao lado de um bloco. Pode também ser utilizada para iluminação reduzida. Utilizado em circuitos de Redstone como repetidor, retardador e/ou díodo. @@ -661,7 +742,7 @@ Pode também ser utilizada para iluminação reduzida. Quando ativado, acelera as vagonetas que lhe passam por cima. Quando não está ativado, as vagonetas param. -Funciona como uma Placa de Pressão (envia um sinal de Redstone quando ativado), mas só pode ser ativado por uma vagoneta. +Funciona como uma Placa de Pressão (envia um sinal de Redstone quando ativado), mas só pode ser ativado por uma Vagoneta. Utilizada para te transportar a ti, um animal ou um monstro pelos carris. @@ -822,7 +903,7 @@ A tinta pode também ser feita combinando tinta cinza com farinha de ossos, perm Recolhido ao matar um esqueleto. Pode ser usado para criar farinha de ossos e para domesticar lobos. -Recolhido quando um esqueleto mata um Creeper. Pode ser reproduzido numa jukebox. +Recolhido quando um Esqueleto mata um Creeper. Pode ser reproduzido numa jukebox. Extingue incêndios e ajuda as plantações a crescer. Pode ser recolhida num balde. @@ -932,102 +1013,160 @@ A tinta pode também ser feita combinando tinta cinza com farinha de ossos, perm Pode ser colhido para recolher Grãos de Cacau. -As Cabeças de Mob podem ser colocadas como decoração ou usadas como máscara na ranhura de capacete. +As Cabeças de Criatura podem ser colocadas como decoração ou usadas como máscara na ranhura de capacete. +Utilizado para executar ordens. + +Projeta um feixe de luz para o céu e pode fornecer Efeitos de Estado a jogadores próximos. + +Armazena blocos e objetos lá dentro. Coloca dois baús lado a lado para criar um baú maior com o dobro da capacidade. O baú preso também cria uma carga de Redstone quando aberto. + +Fornece uma carga de Redstone. A carga será mais forte se houver mais objetos na placa. + +Fornece uma carga de Redstone. A carga será mais forte se houver mais objetos na placa. Requer mais peso do que a placa leve. + +Usado como fonte de poder de Redstone. Pode voltar a ser transformado em Redstone. + +Usado para apanhar objetos ou para transferi-los para dentro e para fora de contentores. + +Um tipo de carril que pode ativar ou desativar Vagonetas com Funis e despoletar Vagonetas com TNT. + +Usado para agarrar e soltar objetos, ou para empurrar objetos para outro contentor, quando recebe uma carga de Redstone. + +Blocos coloridos criados através da aplicação de tinta em Barro Endurecido. + +Pode ser dado como alimento a Cavalos, Burros ou Mulas para curar até 10 Corações. Acelera o crescimento dos potros. + +Criado através da fundição de Barro numa fornalha. + +Fabricado a partir de vidro e de uma tinta. + +Fabricado a partir de Vidro Manchado. + +Uma forma compacta de armazenar Carvão. Pode ser usado como combustível numa Fornalha. + Lula - + Solta sacos de tinta quando é morta. - + Vaca - + Solta cabedal quando é morta. Pode também ser ordenhada com um balde. - + Ovelha - + Solta lã quando é tosquiada (se ainda não tiver sido tosquiada). Pode ser pintada para que a sua lã ganhe uma cor diferente. - + Galinha - + Solta penas quando é morta e também põe ovos de forma aleatória. - + Porco - + Solta costeletas quando é morto. Pode ser montado utilizando uma sela. - + Lobo - + É dócil, mas, se o atacares, ele contra-ataca. Pode ser domado utilizando ossos, o que faz com que te siga e ataque tudo o que te atacar. - + Creeper - + Explode se te aproximares demasiado! - + Esqueleto - + Dispara setas contra ti. Solta setas quando é morto. - + Aranha - + Ataca-te quando te aproximas. Pode subir paredes. Solta fios quando é morta. - + Morto-vivo - + Ataca-te quando te aproximas. - + Pastor Morto-vivo - + Inicialmente dócil, ataca em grupos se for atacado. - + Medusa - + Dispara bolas flamejantes que explodem quando entram em contacto. - + Slime - + Divide-se em Slimes mais pequenos quando sofre danos. - + Enderman - + Ataca-te se olhares para ele. Consegue movimentar blocos. - + Peixe Prateado - + Atrai os Peixes Prateados escondidos quando atacado. Esconde-se nos blocos de pedra. - + Aranha da Caverna - + A sua mordidela é venenosa. - + Vacogumelos - + Usada com uma tigela para fazer guisado de cogumelos. Produz cogumelos e torna-se uma vaca normal quando tosquiada. - + Golem de Neve - + O Golem de Neve pode ser criado pelos jogadores com blocos de neve e uma abóbora. Enviam bolas de neve aos inimigos dos seus criadores. - + Ender Dragon - + Um grande dragão preto que se encontra no Fim. - + Blaze - + Inimigos que podem ser encontrados no Submundo, principalmente dentro das Fortalezas do Submundo. Produzem Varinhas de Blaze quando são mortos. - + Cubo de Magma - + Podem ser encontrados no Submundo. Semelhantes aos Slimes, dividem-se em versões mais pequenas quando são mortos. - + Aldeão - + Ocelote - + Podem ser encontrados em Selvas. Podem ser domesticados quando alimentados com Peixe Cru. Porém, tens de ser o Ocelote a aproximar-se de ti, pois qualquer movimento brusco vai assustá-lo. - + Golem de Ferro - + Aparece nas Aldeias para as proteger e pode ser criado usando Blocos de Ferro e Abóboras. - + +Morcego + +Estas criaturas voadoras estão em cavernas ou noutros grandes espaços fechados. + +Bruxa + +Estas inimigas estão nos pântanos e atacam-te atirando Poções. Largam Poções quando são mortas. + +Cavalo + +Estes animais podem ser domesticados e depois podem ser montados. + +Burro + +Estes animais podem ser domesticados e depois podem ser montados. Têm um baú preso a eles. + +Mula + +Nascem do cruzamento de um Cavalo com um Burro. Estes animais podem ser domesticados e depois podem ser montados e carregar baús. + +Cavalo Morto-vivo + +Cavalo Esqueleto + +Cérbero + +São criados a partir de Caveiras de Cérbero e Areia Movediça. Atiram caveiras explosivas contra ti. + Explosives Animator Concept Artist @@ -1374,6 +1513,8 @@ A tinta pode também ser feita combinando tinta cinza com farinha de ossos, perm Mapa +Mapa Vazio + Disco Música - "13" Disco Música - "cat" @@ -1434,7 +1575,7 @@ A tinta pode também ser feita combinando tinta cinza com farinha de ossos, perm Olho de Aranha -Olho de Aranha Fermentado +Olho Aranha Ferment. Pó de Blaze @@ -1452,7 +1593,7 @@ A tinta pode também ser feita combinando tinta cinza com farinha de ossos, perm Carga de Fogo -Carga de Fogo (Carvão veg.) +Carga Fogo (Carv. veg.) Carga de Fogo (Carvão) @@ -1476,6 +1617,28 @@ A tinta pode também ser feita combinando tinta cinza com farinha de ossos, perm Cabeça de Creeper +Estrela do Submundo + +Foguete Fogo de Art. + +Estrela Fogo de Art. + +Comparador de Redstone + +Vagoneta com TNT + +Vagoneta com Funil + +Armadura de Cavalo em Ferro + +Armadura de Cavalo em Ouro + +Armadura de Cavalo em Diamante + +Corda de Conduzir + +Etiqueta + Pedra Bloco de Erva @@ -1492,6 +1655,8 @@ A tinta pode também ser feita combinando tinta cinza com farinha de ossos, perm Tábuas Madeira Selva +Placas de Madeira (qualquer) + Rebento Carvalho Jovem @@ -1606,7 +1771,7 @@ A tinta pode também ser feita combinando tinta cinza com farinha de ossos, perm Placa Madeira Carvalho -Placa de Cobblestone +Placa Pedra Arredond. Placa de Tijolo @@ -1828,6 +1993,190 @@ A tinta pode também ser feita combinando tinta cinza com farinha de ossos, perm Caveira +Bloco de Ordens + +Farol + +Baú Preso + +Placa Pressão Pond. (Leve) + +Placa Press. Pond. (Pesada) + +Comparador de Redstone + +Sensor de Luz do Dia + +Bloco de Redstone + +Funil + +Carril Ativador + +Soltador + +Barro Manchado + +Fardo de Palha + +Barro Endurecido + +Bloco de Carvão + +Barro Manchado Preto + +Barro Manchado Vermelho + +Barro Manchado Verde + +Barro Manchado Castanho + +Barro Manchado Azul + +Barro Manchado Roxo + +Barro Manchado Azul Ciano + +Barro Manch. Cinz. Claro + +Barro Manchado Cinzento + +Barro Manchado Rosa + +Barro Manchado Lima + +Barro Manchado Amarelo + +Barro Manch. Azul Claro + +Barro Manchado Magenta + +Barro Manchado Laranja + +Barro Manchado Branco + +Vidro Manchado + +Vidro Manchado Preto + +Vidro Manchado Vermelho + +Vidro Manchado Verde + +Vidro Manchado Castanho + +Vidro Manchado Azul + +Vidro Manchado Roxo + +Vidro Manchado Azul Ciano + +Vidro Manchado Cinzento Claro + +Vidro Manchado Cinzento + +Vidro Manchado Rosa + +Vidro Manchado Lima + +Vidro Manchado Amarelo + +Vidro Manchado Azul Claro + +Vidro Manchado Magenta + +Vidro Manchado Laranja + +Vidro Manchado Branco + +Painel de Vidro Manchado + +Painel de Vidro Manchado Preto + +Painel de Vidro Manchado Vermelho + +Painel de Vidro Manchado Verde + +Painel de Vidro Manchado Castanho + +Painel de Vidro Manchado Azul + +Painel de Vidro Manchado Roxo + +Painel de Vidro Manchado Azul Ciano + +Painel de Vidro Manchado Cinzento Claro + +Painel de Vidro Manchado Cinzento + +Painel de Vidro Manchado Rosa + +Painel de Vidro Manchado Lima + +Painel de Vidro Manchado Amarelo + +Painel de Vidro Manchado Azul Claro + +Painel de Vidro Manchado Magenta + +Painel de Vidro Manchado Laranja + +Painel de Vidro Manchado Branco + +Bola Pequena + +Bola Grande + +Forma de Estrela + +Forma de Creeper + +Explosão + +Forma Desconhecida + +Preto + +Vermelho + +Verde + +Castanho + +Azul + +Roxo + +Azul Ciano + +Cinzento Claro + +Cinzento + +Rosa + +Lima + +Amarelo + +Azul Claro + +Magenta + +Laranja + +Branco + +Personalizado + +Desaparecimento + +Cintilância + +Rasto + +Duração do Voo: +  Controlos Atuais Esquema @@ -2005,8 +2354,7 @@ A tinta pode também ser feita combinando tinta cinza com farinha de ossos, perm Este é o teu inventário. Mostra os objetos disponíveis que tens na mão e todos os objetos que estás a transportar. A tua armadura também é mostrada aqui. - - + {*B*} Prime{*CONTROLLER_VK_A*} para continuar.{*B*} Prime{*CONTROLLER_VK_B*} se já sabes utilizar o inventário. @@ -2027,7 +2375,7 @@ A tinta pode também ser feita combinando tinta cinza com farinha de ossos, perm - Se quiseres saber mais sobre um determinado objeto, coloca o ponteiro sobre o objeto e prime{*CONTROLLER_VK_RT*}. + Se quiseres saber mais sobre um determinado objeto, coloca o ponteiro sobre o objeto e prime{*CONTROLLER_ACTION_MENU_PAGEDOWN*}. @@ -2061,7 +2409,7 @@ A tinta pode também ser feita combinando tinta cinza com farinha de ossos, perm - Se quiseres saber mais sobre um determinado objeto, coloca o ponteiro sobre o objeto e prime{*CONTROLLER_VK_RT*}. + Se quiseres saber mais sobre um determinado objeto, coloca o ponteiro sobre o objeto e prime{*CONTROLLER_ACTION_MENU_PAGEDOWN*}. @@ -2425,7 +2773,7 @@ A tinta pode também ser feita combinando tinta cinza com farinha de ossos, perm - No baú nesta área existem alguns componentes para criar circuitos com pistões. Experimenta usar ou completar os circuitos nesta área ou cria o teu próprio circuito. Existem mais exemplos fora da área do tutorial. + No baú nesta área existem alguns componentes para criar circuitos com pistões. Experimenta usar ou completar os circuitos nesta área ou cria o teu próprio circuito. Há mais exemplos fora da área do tutorial. @@ -2443,7 +2791,7 @@ A tinta pode também ser feita combinando tinta cinza com farinha de ossos, perm - Para ativar um Portal do Submundo, incendeia os blocos de Obsidiana dentro da estrutura com Sílex e Aço. Os Portais podem ser desativados se a sua estrutura se partir, se ocorrer uma explosão nas proximidades ou se escorrer líquido sobre os blocos. + Para ativar um Portal do Submundo, incendeia os blocos de Obsidiana dentro da estrutura com Sílex e Aço. Os Portais podem ser desativados se a sua estrutura se partir, se ocorrer uma explosão nas proximidades ou se escorrer líquido através dos blocos. @@ -2608,6 +2956,211 @@ No modo de voo, podes manter premido{*CONTROLLER_ACTION_JUMP*} para subires e{*C Prime{*CONTROLLER_VK_B*} se já souberes tudo sobre a barra de comida e a alimentação. + + Esta é a interface de inventário do cavalo. + + + + {*B*}Prime {*CONTROLLER_VK_A*} para continuar. + {*B*}Prime {*CONTROLLER_VK_B*} se já souberes como usar o inventário do cavalo. + + + + O inventário do cavalo permite-te equipar ou transferir objetos para o teu Cavalo, Burro ou Mula. + + + + Sela o teu Cavalo colocando-lhe uma Sela na ranhura para selas. Os Cavalos podem receber uma Armadura de Cavalo na ranhura para armaduras. + + + + Neste menu também podes transferir objetos entre o teu inventário e os alforjes presos aos Burros e Mulas. + + +Encontraste um Cavalo. + +Encontraste um Burro. + +Encontraste uma Mula. + + + {*B*}Prime {*CONTROLLER_VK_A*} para saber mais sobre Cavalos, Burros e Mulas. + {*B*}Prime {*CONTROLLER_VK_B*} se já souberes o que precisas sobre Cavalos, Burros e Mulas. + + + + Os Cavalos e os Burros estão sobretudo nas planícies. As Mulas podem ser criadas cruzando um Burro com um Cavalo, mas são inférteis. + + + + Todos os Cavalos, Burros e Mulas adultos podem ser montados. Porém, só os Cavalos podem receber uma armadura, e só as Mulas e os Burros podem ser equipados com alforjes para transportar objetos. + + + + Os Cavalos, os Burros e as Mulas têm de ser domesticados antes de poderem ser usados. Para domesticar um cavalo é preciso tentar montá-lo e conseguir permanecer em cima dele enquanto ele tenta sacudir o jogador para o chão. + + + + Quando ficam domesticados, surgem Corações de Amor à volta deles e deixam de tentar sacudir o jogador. + + + + Experimenta montar este cavalo agora. Usa {*CONTROLLER_ACTION_USE*} sem objetos ou ferramentas na mão para montá-lo. + + + + Para guiar um cavalo, tens de equipá-lo com uma sela, que podes comprar aos aldeões ou encontrar dentro de baús escondidos no mundo. + + + + Burros e Mulas domesticados podem receber alforjes se lhes prenderes um baú. Podes aceder aos alforjes enquanto montas ou quando te aproximas furtivamente do animal. + + + + Os Cavalos e os Burros (as Mulas não) podem ser procriados como os outros animais, usando Maçãs Douradas ou Cenouras Douradas. Os potros tornam-se cavalos adultos ao fim de algum tempo, mas podes acelerar o processo alimentando-os com trigo ou feno. + + + + Podes tentar domesticar Cavalos e Burros aqui, e nos baús que por aqui andam também encontrarás Selas, Armaduras de Cavalo e outros objetos úteis para Cavalos. + + + + Esta é a interface do Farol, que podes usar para escolher os poderes que o teu Farol concede. + + + + {*B*}Prime {*CONTROLLER_VK_A*} para continuar. + {*B*}Prime {*CONTROLLER_VK_B*} se já sabes como usar a interface do Farol. + + + + No menu do Farol podes selecionar 1 poder principal para o teu Farol. Quanto mais camadas tiver a tua pirâmide, mais poderes terás à escolha. + + + + Um Farol numa pirâmide com pelo menos 4 camadas permite-te escolher entre o poder secundário de Regeneração ou um poder principal mais forte. + + + + Para definir os poderes do teu Farol tens de sacrificar uma Esmeralda, um Diamante, Lingotes de Ferro ou Ouro na ranhura de pagamento. Uma vez definidos, os poderes irão emanar indefinidamente do Farol. + + +No topo desta pirâmide há um Farol inativo. + + + {*B*}Prime {*CONTROLLER_VK_A*} para saber mais sobre Faróis. + {*B*}Prime {*CONTROLLER_VK_B*} se já sabes o que precisas sobre Faróis. + + + + Os Faróis Ativos projetam um feixe de luz brilhante para o céu e atribuem poderes a jogadores próximos. São feitos com Vidro, Obsidiana e Estrelas do Submundo, que podem ser obtidas derrotando o Cérbero. + + + + Os Faróis têm de ser colocados de modo a captar a luz solar durante o dia. Os Faróis têm de ser colocados sobre Pirâmides de Ferro, Ouro, Esmeralda ou Diamante. Porém, o tipo de material não tem qualquer efeito na potência do farol. + + + + Experimenta usar o Farol para definir os poderes que ele concede. Podes usar os Lingotes de Ferro disponibilizados como forma de pagamento. + + +Esta divisão contém Funis. + + + {*B*}Prime {*CONTROLLER_VK_A*} para saber mais sobre Funis. + {*B*}Prime {*CONTROLLER_VK_B*} se já sabes o que precisas sobre Funis. + + + + Os Funis são usados para inserir ou remover objetos de contentores, e para recolher automaticamente os objetos que são atirados neles. + + + + Eles podem afetar Postos de Poções, Baús, Distribuidores, Soltadores, Vagonetas com Baús, Vagonetas com Funis, bem como outros Funis. + + + + Os Funis vão tentar sempre sugar objetos dos contentores adequados acima deles. Também vão tentar inserir objetos armazenados num contentor de destino. + + + + Porém, se um Funil for alimentado por Redstone tornar-se-á inativo e parará de sugar e de inserir objetos. + + + + Um Funil aponta na direção em que tenta colocar objetos. Para levar um Funil a apontar para um determinado bloco, coloca-o frente a esse bloco enquanto andas furtivamente. + + + + Há vários modelos de Funil para veres e experimentares nesta divisão. + + + + Esta é a interface do Fogo de Artifício, que podes usar para criar Fogo de Artifício e Estrelas de Fogo de Artifício. + + + + {*B*}Prime {*CONTROLLER_VK_A*} para continuar. + {*B*}Prime {*CONTROLLER_VK_B*} se já sabes como usar a interface do Farol. + + + + Para criar um Fogo de Artifício, coloca Pólvora e Papel na grelha de 3x3 que é apresentada acima do teu inventário. + + + + Opcionalmente, podes colocar várias Estrelas de Fogo de Artifício na grelha e adicioná-las ao Fogo de Artifício. + + + + Preencher mais ranhuras na grelha com Pólvora aumentará a altura a que todas as Estrelas de Fogo de Artifício vão explodir. + + + + Podes então retirar o Fogo de Artifício criado da ranhura de saída. + + + + As Estrelas de Fogo de Artifício podem ser criadas colocando Pólvora e Tinta na grelha. + + + + A tinta definirá a cor da explosão da Estrela de Fogo de Artifício. + + + + A forma da Estrela de Fogo de Artifício é definida adicionando um destes elementos: Carga de Fogo, Pepita de Ouro, Pena ou Cabeça de Criatura. + + + + Podes adicionar um rasto ou uma cintilância usando Diamantes ou Pó de Glowstone. + + + + Depois de criares uma Estrela de Fogo de Artifício, podes definir a cor de desaparecimento da Estrela de Fogo de Artifício criando-a com Tinta. + + + + Dentro dos baús há vários objetos que podem ser usados na criação de FOGO DE ARTIFÃCIO! + + + + {*B*}Prime{*CONTROLLER_VK_A*} para saber mais sobre Fogo de Artifício. + {*B*}Prime{*CONTROLLER_VK_B*} se já sabes o que queres sobre Fogo de Artifício. + + + + O Fogo de Artifício é um objeto decorativo que pode ser lançado à mão ou a partir de Distribuidores. É feito usando Papel, Pólvora e, opcionalmente, uma série de Estrelas de Fogo de Artifício. + + + + As cores, o desaparecimento, a forma, a dimensão e os efeitos (como rastos e cintilâncias) das Estrelas de Fogo de Artifício podem ser personalizados através da inclusão de ingredientes extra aquando da criação. + + + + Experimenta criar um Fogo de Artifício na Mesa de Criação usando um sortido de ingredientes dos baús. + +  Selecionar Usar @@ -2646,25 +3199,25 @@ No modo de voo, podes manter premido{*CONTROLLER_ACTION_JUMP*} para subires e{*C Retirar -Retirar tudo +Retirar Tudo -Retirar metade +Retirar Metade Colocar -Colocar tudo +Colocar Tudo -Colocar um +Colocar Um Largar -Largar tudo +Largar Tudo -Largar um +Largar Um Trocar -Mover rápido +Mover Rápido Limpar Seleção Rápida @@ -2830,6 +3383,22 @@ No modo de voo, podes manter premido{*CONTROLLER_ACTION_JUMP*} para subires e{*C Carregar Gravação para Xbox One +Montar + +Desmontar + +Prender Baú + +Lançar + +Atrelar + +Soltar + +Prender + +Nomear + OK Cancelar @@ -2842,7 +3411,7 @@ No modo de voo, podes manter premido{*CONTROLLER_ACTION_JUMP*} para subires e{*C Guardar Jogo -Sair sem guardar +Sair Sem Guardar Tens a certeza de que queres substituir os jogos guardados anteriormente pela versão atual deste mundo? @@ -3058,7 +3627,7 @@ Queres desbloquear o jogo completo? Vários -Preparação de Poções +Poções Poções @@ -3140,6 +3709,20 @@ Queres desbloquear o jogo completo? Distribuidor +Cavalo + +Soltador + +Funil + +Farol + +Poder Principal + +Poder Secundário + +Vagoneta + De momento, não existem ofertas de conteúdo transferível deste tipo disponíveis para este título. %s juntou-se ao jogo. @@ -3203,7 +3786,7 @@ Queres desbloquear o jogo completo? O jogo no qual pretendes participar encontra-se na tua lista de níveis excluídos. Se quiseres participar neste jogo, o nível será removido da lista de níveis excluídos. -Excluir este nível? +Excluir Este Nível? Tens a certeza de que queres adicionar este nível à lista de níveis excluídos? Se selecionares OK, irás sair do jogo. @@ -3225,7 +3808,7 @@ Não desligues a consola Xbox 360 enquanto este ícone estiver visível. Opacidade da Interface -A preparar gravação automática do nível +A Preparar Gravação Automática do Nível Tamanho HUD @@ -3299,10 +3882,14 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? Modo Criativo +Modo de Jogo: Aventura + Sobrevivência Criativo +Aventura + Criado em Sobrevivência Criado em Criativo @@ -3323,6 +3910,8 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? Superplano +Introduz uma semente para gerar novamente o mesmo terreno. Deixa em branco para um mundo aleatório. + Quando ativado, o jogo ficará online. Quando ativado, só os jogadores convidados podem aderir. @@ -3347,6 +3936,20 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? Quanto ativada, é criado um baú com objetos úteis junto ao ponto de regeneração do jogador. +Quando desativada, impede que monstros e animais mudem blocos (por exemplo, explosões de Creeper não destroem blocos e as Ovelhas não comem Erva) ou apanhem objetos. + +Quando ativado, os jogadores mantêm o inventário quando morrem. + +Quando desativada, as criaturas não se reproduzem naturalmente. + +Quando desativado, os monstros e animais não deixam cair saques (por exemplo, os Creepers não largam pólvora). + +Quando desativada, os blocos não largam objetos quando são destruídos (por exemplo, os blocos de Pedra não deixam cair Pedra Arredondada). + +Quando desativada, os jogadores não regeneram naturalmente a sua saúde. + +Quando desativado, a hora do dia não muda. + Pacotes de Skins Temas @@ -3395,7 +3998,49 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? {*PLAYER*} foi agredido por {*SOURCE*} -{*PLAYER*} foi morto por {*SOURCE*} +{*PLAYER*} foi morto por {*SOURCE*} usando magia + +{*PLAYER*} caiu de uma escada + +{*PLAYER*} caiu de umas videiras + +{*PLAYER*} caiu fora da água + +{*PLAYER*} caiu de um local elevado + +{*PLAYER*} foi condenado a cair por {*SOURCE*} + +{*PLAYER*} foi condenado a cair por {*SOURCE*} + +{*PLAYER*} foi condenado a cair por {*SOURCE*} usando {*ITEM*} + +{*PLAYER*} caiu demasiado longe e foi liquidado por {*SOURCE*} + +{*PLAYER*} caiu demasiado longe e foi liquidado por {*SOURCE*} usando {*ITEM*} + +{*PLAYER*} entrou no fogo enquanto combatia {*SOURCE*} + +{*PLAYER*} ficou esturricado enquanto combatia {*SOURCE*} + +{*PLAYER*} tentou nadar em lava para fugir de {*SOURCE*} + +{*PLAYER*} afogou-se enquanto tentava fugir de {*SOURCE*} + +{*PLAYER*} foi de encontro a um cato enquanto tentava fugir de {*SOURCE*} + +{*PLAYER*} foi rebentado por {*SOURCE*} + +{*PLAYER*} feneceu + +{*PLAYER*} foi assassinado por {*SOURCE*} usando {*ITEM*} + +{*PLAYER*} foi alvejado por {*SOURCE*} usando {*ITEM*} + +{*PLAYER*} foi atingido por uma bola de fogo por {*SOURCE*} usando {*ITEM*} + +{*PLAYER*} foi esmagado por {*SOURCE*} usando {*ITEM*} + +{*PLAYER*} foi morto por {*SOURCE*} usando {*ITEM*} Rochas Enevoadas @@ -3427,9 +4072,9 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? Já não podes usar contentores (tais como baús) -Já não podes atacar habitantes +Já não podes atacar criaturas -Já podes atacar habitantes +Já podes atacar criaturas Já não podes atacar jogadores @@ -3560,9 +4205,9 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? Não Repor Submundo -De momento, não é possível tosquiar este Vacogumelo. Foi alcançado o número máximo de Porcos, Ovelhas, Vacas e Gatos. +De momento, não é possível tosquiar este Vacogumelo. Foi alcançado o número máximo de Porcos, Ovelhas, Vacas, Gatos e Cavalos. -De momento, não é possível usar o Ovo de Geração. O número máximo de Porcos, Ovelhas, Vacas e Gatos foi alcançado. +De momento, não é possível usar o Ovo de Geração. O número máximo de Porcos, Ovelhas, Vacas, Gatos e Cavalos foi alcançado. De momento, não é possível usar o Ovo de Geração. Foi alcançado o número máximo de Vacogumelos. @@ -3572,6 +4217,8 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? De momento, não é possível usar o Ovo de Geração. Foi alcançado o número máximo de Lulas num mundo. +De momento, não é possível usar Ovo de Geração. Foi alcançado o número máximo de Morcegos num mundo. + De momento, não é possível usar o Ovo de Geração. Foi alcançado o número máximo de inimigos num mundo. De momento, não é possível usar o Ovo de Geração. Foi alcançado o número máximo de aldeões num mundo. @@ -3580,17 +4227,19 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? Não podes produzir inimigos no modo Calmo. -Este animal não pode entrar no Modo Amor. O número máximo de Porcos, Ovelhas, Vacas e Gatos de criação foi alcançado. +Este animal não pode entrar no Modo Amor. O número máximo de Porcos, Ovelhas, Vacas, Gatos e Cavalos de criação foi alcançado. Este animal não pode entrar no Modo Amor. Foi alcançado o número máximo de Lobos de criação. Este animal não pode entrar no Modo Amor. Foi alcançado o número máximo de Galinhas de criação. +Este animal não pode entrar no Modo Amor. Foi alcançado o número máximo de cavalos de criação. + Este animal não pode entrar no Modo Amor. Foi alcançado o número máximo de Vacogumelos de criação. Foi alcançado o número máximo de Barcos num mundo. -O número máximo de Cabeças de Mob num mundo foi alcançado. +O número máximo de Cabeças de Criatura num mundo foi alcançado. Inverter @@ -3600,7 +4249,7 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? Regenerar -Conteúdo transferível +Conteúdo Transferível Alterar Skin @@ -3613,27 +4262,43 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? Ficha técnica Reinstalar Conteúdo - + Definições de Depuração - + Fogos Propagados - + Explosões de TNT - + Jogador vs. Jogador - + Confiar nos Jogadores - + Privilégios de Anfitrião - + Gerar Estruturas - + Mundo Superplano - + Baú de Bónus - + Opções de Mundo - + +Opções de Jogo + +Perturbação de Criaturas + +Manter Inventário + +Geração de Criaturas + +Saques de Criaturas + +Queda de Peças + +Regeneração Natural + +Ciclo da Luz do Dia + Pode Construir e Escavar Pode Usar Portas e Interruptores @@ -3672,7 +4337,7 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? Semente para o Gerador de Mundos -Deixar livre para uma semente aleatória +Deixar livre p/ semente aleatória Jogadores @@ -3820,6 +4485,14 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? Veneno +Cérbero + +Aumento de Saúde + +Absorção + +Saturação + de Velocidade de Lentidão @@ -3858,6 +4531,14 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? de Veneno +de Decadência + +de Aumento de Saúde + +de Absorção + +de Saturação + II @@ -3954,6 +4635,22 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? Reduz a saúde dos jogadores, animais e monstros afetados ao longo do tempo. +Quando se Aplica: + +Força de Salto de Cavalo + +Reforços Mortos-vivos + +Saúde Máx. + +Alcance de Seguimento das Criaturas + +Resistência a Ataques + +Velocidade + +Danos de Ataque + Precisão Golpear @@ -4044,7 +4741,7 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? Restitui 3{*ICON_SHANK_01*}. Cria-se cozendo uma batata numa fornalha. -Restitui 1{*ICON_SHANK_01*} ou pode ser cozida numa fornalha. Pode ser plantada na terra. Se comeres isto podes ficar doente. +Restitui 1{*ICON_SHANK_01*}. Se comeres isto podes ficar envenenado. Restitui 3{*ICON_SHANK_01*}. Fabricada a partir de uma cenoura e de pepitas de ouro. @@ -4112,7 +4809,7 @@ Queres instalar o pacote de mistura ou pacote de texturas agora? Bloco de Quartzo -Bloco de Quartzo Esculpido +Bloc. Quartzo Esculpido Bloco Pilar de Quartzo @@ -4442,11 +5139,11 @@ Todos os Baús Ender de um mundo estão ligados. Os objetos colocados num Baú E Xbox 360 -BACK +Anterior Esta opção desativa as atualizações dos feitos e das classificações para este mundo durante o jogo e também ao carregá-lo novamente após guardar com esta opção ativa. -Carregar Gravação para Xbox One +Carregar Grav. Xbox One Carregar Gravação diff --git a/Minecraft.Client/Common/Media/skin.swf b/Minecraft.Client/Common/Media/skin.swf index c4660d59..6206ca47 100644 Binary files a/Minecraft.Client/Common/Media/skin.swf and b/Minecraft.Client/Common/Media/skin.swf differ diff --git a/Minecraft.Client/Common/Media/skinGraphics.swf b/Minecraft.Client/Common/Media/skinGraphics.swf index 8438f11d..f0482ec7 100644 Binary files a/Minecraft.Client/Common/Media/skinGraphics.swf and b/Minecraft.Client/Common/Media/skinGraphics.swf differ diff --git a/Minecraft.Client/Common/Media/skinGraphicsHud.swf b/Minecraft.Client/Common/Media/skinGraphicsHud.swf index 55123e69..7f75f423 100644 Binary files a/Minecraft.Client/Common/Media/skinGraphicsHud.swf and b/Minecraft.Client/Common/Media/skinGraphicsHud.swf differ diff --git a/Minecraft.Client/Common/Media/skinGraphicsInGame.swf b/Minecraft.Client/Common/Media/skinGraphicsInGame.swf index 6612beaf..639f5bda 100644 Binary files a/Minecraft.Client/Common/Media/skinGraphicsInGame.swf and b/Minecraft.Client/Common/Media/skinGraphicsInGame.swf differ diff --git a/Minecraft.Client/Common/Media/skinHD.swf b/Minecraft.Client/Common/Media/skinHD.swf index c80fa406..12d35caf 100644 Binary files a/Minecraft.Client/Common/Media/skinHD.swf and b/Minecraft.Client/Common/Media/skinHD.swf differ diff --git a/Minecraft.Client/Common/Media/skinHDGraphics.swf b/Minecraft.Client/Common/Media/skinHDGraphics.swf index 27e3798a..7ba08bc8 100644 Binary files a/Minecraft.Client/Common/Media/skinHDGraphics.swf and b/Minecraft.Client/Common/Media/skinHDGraphics.swf differ diff --git a/Minecraft.Client/Common/Media/skinHDGraphicsHud.swf b/Minecraft.Client/Common/Media/skinHDGraphicsHud.swf index 2c467474..bb51379e 100644 Binary files a/Minecraft.Client/Common/Media/skinHDGraphicsHud.swf and b/Minecraft.Client/Common/Media/skinHDGraphicsHud.swf differ diff --git a/Minecraft.Client/Common/Media/skinHDGraphicsInGame.swf b/Minecraft.Client/Common/Media/skinHDGraphicsInGame.swf index 7a39b099..d014d317 100644 Binary files a/Minecraft.Client/Common/Media/skinHDGraphicsInGame.swf and b/Minecraft.Client/Common/Media/skinHDGraphicsInGame.swf differ diff --git a/Minecraft.Client/Common/Media/skinHDHud.swf b/Minecraft.Client/Common/Media/skinHDHud.swf index fcdbe396..0e2a9ef2 100644 Binary files a/Minecraft.Client/Common/Media/skinHDHud.swf and b/Minecraft.Client/Common/Media/skinHDHud.swf differ diff --git a/Minecraft.Client/Common/Media/skinHDInGame.swf b/Minecraft.Client/Common/Media/skinHDInGame.swf index cfc91228..b9aaa068 100644 Binary files a/Minecraft.Client/Common/Media/skinHDInGame.swf and b/Minecraft.Client/Common/Media/skinHDInGame.swf differ diff --git a/Minecraft.Client/Common/Media/skinHDLabels.swf b/Minecraft.Client/Common/Media/skinHDLabels.swf index 5ed2b349..dd80d1e7 100644 Binary files a/Minecraft.Client/Common/Media/skinHDLabels.swf and b/Minecraft.Client/Common/Media/skinHDLabels.swf differ diff --git a/Minecraft.Client/Common/Media/skinHud.swf b/Minecraft.Client/Common/Media/skinHud.swf index c98bf708..31b3ff00 100644 Binary files a/Minecraft.Client/Common/Media/skinHud.swf and b/Minecraft.Client/Common/Media/skinHud.swf differ diff --git a/Minecraft.Client/Common/Media/skinInGame.swf b/Minecraft.Client/Common/Media/skinInGame.swf index bee85d33..fd3147b6 100644 Binary files a/Minecraft.Client/Common/Media/skinInGame.swf and b/Minecraft.Client/Common/Media/skinInGame.swf differ diff --git a/Minecraft.Client/Common/Media/skinLabels.swf b/Minecraft.Client/Common/Media/skinLabels.swf index 04a41d33..e562acbe 100644 Binary files a/Minecraft.Client/Common/Media/skinLabels.swf and b/Minecraft.Client/Common/Media/skinLabels.swf differ diff --git a/Minecraft.Client/Common/Media/skin_Minecraft.xui b/Minecraft.Client/Common/Media/skin_Minecraft.xui index 5d4517d2..da03a9ab 100644 --- a/Minecraft.Client/Common/Media/skin_Minecraft.xui +++ b/Minecraft.Client/Common/Media/skin_Minecraft.xui @@ -2,7 +2,7 @@ 1280.000000 720.000000 -[LayerFolders]5|+How To Play|34|+|0|+ControllerIcons|3|+|0|+Creative Inventory|8|+|0|+Crafting Scene|16|+|0|+Scenes, Panels,etc|14|+|0|+Main Menu|4|+|0|+DLC|4|+|0|+Skin Select Scene|15|+|0|+HTML|4|+|0|+HUD|18|+|0|+Inventory Containers Special|34|+|0|+Inventory Containers Shared|22|+|0|+Lists|0|+Leaderboard|4|+|0|+Players|6|+|25|+|0|+Tooltips|20|+|0|+Credits|8|+|0|-Labels and Text|53|+|0|-Other|11|+|0|+ImagePresenters|2|+|0|-Default Controls|18|+|0[/LayerFolders] +[LayerFolders]7|+How To Play|44|+|0|+ControllerIcons|3|+|0|+Creative Inventory|8|+|0|+Crafting Scene|16|+|0|+Scenes, Panels,etc|14|+|0|+Main Menu|4|+|0|+DLC|4|+|0|+Skin Select Scene|15|+|0|+HTML|4|+|0|+HUD|19|+|0|-Inventory Containers Special|41|+|0|+Inventory Containers Shared|24|+|0|+Lists|0|+Leaderboard|4|+|0|+Players|6|+|25|+|0|+Tooltips|22|+|0|+Credits|8|+|0|-Labels and Text|53|+|0|+Other|11|+|0|+ImagePresenters|2|+|0|+Default Controls|18|+|0[/LayerFolders] @@ -12951,6 +12951,406 @@ +RStick_Button +350.000000 +36.000000 + + + +text_ButtonText +300.000000 +36.000000 +61.000000,0.000000,0.000000 +1 +0xffffffff +0xff000000 +16.000000 +20497 + + + + +rs_graphic +58.000000 +48.000000 +0.000000,-5.000000,0.000000 +0.800000 +16 +Graphics\X360ControllerIcons\ButtonRS_TT.png +48 + + + + + +Normal + + + +EndNormal + +stop + + +Focus + + + +FocusLoop + + + +EndFocus + +gotoandplay +FocusLoop + + +NormalDisable + + + +EndNormalDisable + +stop + + +FocusDisable + + + +EndFocusDisable + +stop + + +Press + + + +EndPress + +stop + + +InitFocus + + + +InitFocusLoop + + + +EndInitFocus + +gotoandplay +InitFocusLoop + + +InitFocusDisable + + + +EndInitFocusDisable + +stop + + + +text_ButtonText +TextColor + + +0 +0xffffffff + + + +0 +0xff606060 + + + +0 +0xff606060 + + + +0 +0xffa0a0a0 + + + +0 +0xffffffff + + + +rs_graphic +Opacity +Scale +Position + + +1 +0.800000 +1.000000,1.000000,1.000000 +0.000000,-5.000000,0.000000 + + + +1 +1.000000 +1.000000,1.000000,1.000000 +0.000000,-5.000000,0.000000 + + + +1 +0.300000 +1.000000,1.000000,1.000000 +0.000000,-5.000000,0.000000 + + + +1 +0.500000 +1.000000,1.000000,1.000000 +0.000000,-5.000000,0.000000 + + + +0 +1.000000 +1.000000,1.000000,1.000000 +0.000000,-5.000000,0.000000 + + + +0 +1.000000 +0.900000,0.900000,1.000000 +1.500000,-0.750000,0.000000 + + + +1 +1.000000 +1.000000,1.000000,1.000000 +0.000000,-5.000000,0.000000 + + + +1 +0.500000 +1.000000,1.000000,1.000000 +0.000000,-3.000000,0.000000 + + + + + + +RStick_ButtonSmall +350.000000 +25.000000 + + + +text_ButtonText +300.000000 +25.000000 +43.000000,0.000000,0.000000 +1 +0xffffffff +0xff000000 +11.000000 +20497 + + + + +rb_graphic +40.000000 +34.000000 +0.000000,-3.000000,0.000000 +0.800000 +16 +Graphics\X360ControllerIcons\ButtonRS_TT.png +48 + + + + + +Normal + + + +EndNormal + +stop + + +Focus + + + +FocusLoop + + + +EndFocus + +gotoandplay +FocusLoop + + +NormalDisable + + + +EndNormalDisable + +stop + + +FocusDisable + + + +EndFocusDisable + +stop + + +Press + + + +EndPress + +stop + + +InitFocus + + + +InitFocusLoop + + + +EndInitFocus + +gotoandplay +InitFocusLoop + + +InitFocusDisable + + + +EndInitFocusDisable + +stop + + + +text_ButtonText +TextColor + + +0 +0xffffffff + + + +0 +0xff606060 + + + +0 +0xff606060 + + + +0 +0xffa0a0a0 + + + +0 +0xffffffff + + + +rb_graphic +Opacity +Scale +Position + + +1 +0.800000 +1.000000,1.000000,1.000000 +0.000000,-3.000000,0.000000 + + + +1 +1.000000 +1.000000,1.000000,1.000000 +0.000000,-3.000000,0.000000 + + + +1 +0.300000 +1.000000,1.000000,1.000000 +0.000000,-3.000000,0.000000 + + + +1 +0.500000 +1.000000,1.000000,1.000000 +0.000000,-3.000000,0.000000 + + + +0 +1.000000 +1.000000,1.000000,1.000000 +0.000000,-3.000000,0.000000 + + + +0 +1.000000 +0.900000,0.900000,1.000000 +1.500000,1.250000,0.000000 + + + +1 +1.000000 +1.000000,1.000000,1.000000 +0.000000,-3.000000,0.000000 + + + +1 +0.500000 +1.000000,1.000000,1.000000 +0.000000,-3.000000,0.000000 + + + + + + XuiListTexturePackButtonSmall 40.000000 40.000000 @@ -29314,6 +29714,177 @@ +ItemIconBlankSmall +22.000000 +22.000000 + + + +image +22.000000 +22.000000 +15 +CXuiCtrlMinecraftSlot +XuiVisualImagePresenter + + + + + +Normal + + + +EndNormal + +stop + + +Focus + + + +FocusLoop + + + +EndFocus + +gotoandplay +FocusLoop + + +NormalDisable + + + +EndNormalDisable + +stop + + +FocusDisable + + + +InactiveFocusLoop + + + +EndFocusDisable + +gotoandplay +InactiveFocusLoop + + +Press + + + +EndPress + +stop + + +NormalSel + + + +EndNormalSel + +stop + + + + + + +ItemIconBlank +42.000000 +42.000000 + + + +image +38.000000 +38.000000 +2.000000,2.000000,0.000000 +15 +CXuiCtrlMinecraftSlot +XuiVisualImagePresenter + + + + + +Normal + + + +EndNormal + +stop + + +Focus + + + +FocusLoop + + + +EndFocus + +gotoandplay +FocusLoop + + +NormalDisable + + + +EndNormalDisable + +stop + + +FocusDisable + + + +InactiveFocusLoop + + + +EndFocusDisable + +gotoandplay +InactiveFocusLoop + + +Press + + + +EndPress + +stop + + +NormalSel + + + +EndNormalSel + +stop + + + + + + ItemIcon 64.000000 64.000000 @@ -29345,68 +29916,2150 @@ Normal - - -EndNormal - -stop - - -Focus + + +EndNormal + +stop + + +Focus + + + +FocusLoop + + + +EndFocus + +gotoandplay +FocusLoop + + +NormalDisable + + + +EndNormalDisable + +stop + + +FocusDisable + + + +InactiveFocusLoop + + + +EndFocusDisable + +gotoandplay +InactiveFocusLoop + + +Press + + + +EndPress + +stop + + +NormalSel + + + +EndNormalSel + +stop + + + + + + +BeaconButton +44.000000 +44.000000 +15 + + + +Button +44.000000 +44.000000 +Graphics\Beacon_Button_Normal.png + + + + +Icon +36.000000 +36.000000 +4.000000,4.000000,0.000000 +15 +true + + + +Icon +36.000000 +36.000000 +false +16 +48 + + + + + +Normal + +stop + + +Tick + +stop + + +Cross + +stop + + +Blindness + +stop + + +Fire_Resistance + +stop + + +Haste + +stop + + +Hunger + +stop + + +Invisibility + +stop + + +Jump_Boost + +stop + + +Mining_Fatigue + +stop + + +Nausea + +stop + + +Night_Vision + +stop + + +Poison + +stop + + +Regeneration + +stop + + +Resistance + +stop + + +Slowness + +stop + + +Speed + +stop + + +Strength + +stop + + +Water_Breathing + +stop + + +Weakness + +stop + + +Wither + +stop + + +HealthBoost + +stop + + +Absorption + +stop + + + +Icon +Show +ImagePath + + +0 +false + + + + +0 +true +Graphics\Beacon_Button_Tick.png + + + +0 +true + + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Blindness.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Fire_Resistance.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Haste.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Hunger.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Invisibility.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Jump_Boost.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Mining_Fatigue.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Nausea.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Night_Vision.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Poison.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Regeneration.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Resistance.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Slowness.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Speed.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Strength.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Water_Breathing.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Weakness.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Wither.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_HealthBoost.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_HealthBoost.png + + + + + + + +Normal + +stop + + +Pressed + +stop + + +Disabled + +stop + + +Hover + +stop + + + +Button +ImagePath + + +0 +Graphics\Beacon_Button_Normal.png + + + +0 +Graphics\Beacon_Button_Pressed.png + + + +0 +Graphics\Beacon_Button_Disabled.png + + + +0 +Graphics\Beacon_Button_Hover.png + + + + + + +BeaconButtonSmall +22.000000 +22.000000 +15 + + + +Button +22.000000 +22.000000 +8 +Graphics\Beacon_Button_Normal.png + + + + +Icon +18.000000 +18.000000 +2.000000,2.000000,0.000000 +15 +true + + + +Icon +18.000000 +18.000000 +false +16 +48 + + + + + +Normal + +stop + + +Tick + +stop + + +Cross + +stop + + +Blindness + +stop + + +Fire_Resistance + +stop + + +Haste + +stop + + +Hunger + +stop + + +Invisibility + +stop + + +Jump_Boost + +stop + + +Mining_Fatigue + +stop + + +Nausea + +stop + + +Night_Vision + +stop + + +Poison + +stop + + +Regeneration + +stop + + +Resistance + +stop + + +Slowness + +stop + + +Speed + +stop + + +Strength + +stop + + +Water_Breathing + +stop + + +Weakness + +stop + + +Wither + +stop + + +HealthBoost + +stop + + +Absorption + +stop + + + +Icon +Show +ImagePath + + +0 +false + + + + +0 +true +Graphics\Beacon_Button_Tick.png + + + +0 +true + + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Blindness.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Fire_Resistance.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Haste.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Hunger.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Invisibility.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Jump_Boost.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Mining_Fatigue.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Nausea.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Night_Vision.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Poison.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Regeneration.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Resistance.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Slowness.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Speed.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Strength.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Water_Breathing.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Weakness.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Wither.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_HealthBoost.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_HealthBoost.png + + + + + + + +Normal + +stop + + +Pressed + +stop + + +Disabled + +stop + + +Hover + +stop + + + +Button +ImagePath +SizeMode + + +0 +Graphics\Beacon_Button_Normal.png +8 + + + +0 +Graphics\Beacon_Button_Pressed.png +4 + + + +0 +Graphics\Beacon_Button_Disabled.png +8 + + + +0 +Graphics\Beacon_Button_Hover.png +8 + + + + + + +ItemGridHorseArmor +42.000000 +42.000000 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +CXuiCtrlSlotItemListItem +ItemButtonHorseArmor +22594 +4 + + + + + +KillFocus + + + +Normal + + + +EndNormal + +stop + + +Focus + + + +EndFocus + +stop + + + + + + +ItemButtonHorseArmor +42.000000 +42.000000 + + + +Box +42.000000 +42.000000 +15 +4 +Graphics\IconHolder.png +48 + + + + +Icon +38.000000 +38.000000 +2.000000,2.000000,0.000000 +15 +16 +Graphics\Horse_Armor_Slot.png +48 + + + + +image +38.000000 +38.000000 +2.000000,2.000000,0.000000 +15 +CXuiCtrlMinecraftSlot +XuiVisualImagePresenter + + + + +graphic_Highlight +38.000000 +38.000000 +2.000000,2.000000,0.000000 +0.000000 +15 + + +0xff646464 + + + + +0xb4ebebeb + + +4 +0xff828282 +0xffb4b4b4 +0xffd2d2d2 +0xffebebeb +0.000000 +0.592157 +0.627451 +1.000000 + + +90.000000 + + +true +4,0.000000,0.000000,0.000000,0.000000,242.119705,0.000000,1,242.119705,0.000000,242.119705,0.000000,242.119705,31.004648,1,242.119705,31.004648,242.119705,31.004648,0.000000,31.006342,1,0.000000,31.006342,0.000000,31.006342,0.000000,0.000000,1, + + + + + +Normal + + + +EndNormal + +stop + + +Focus + + + +FocusLoop + + + +EndFocus + +gotoandplay +FocusLoop + + +NormalDisable + + + +EndNormalDisable + +stop + + +FocusDisable + + + +InactiveFocusLoop + + + +EndFocusDisable + +gotoandplay +InactiveFocusLoop + + +Press + + + +EndPress + +stop + + +NormalSel + + + +EndNormalSel + +stop + + + +graphic_Highlight +Fill.Gradient.StopPos +Fill.Gradient.StopColor +Fill.Gradient.StopColor +Fill.Gradient.StopColor +Stroke.StrokeColor +Fill.Gradient.StopColor +Opacity + + +1 +0.627451 +0xff828282 +0xffd2d2d2 +0xffebebeb +0xff646464 +0xffb4b4b4 +0.000000 + + + +0 +0.627451 +0xff828282 +0xffd2d2d2 +0xffebebeb +0xff646464 +0xffb4b4b4 +1.000000 + + + +0 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +1.000000 + + + +0 +0.619608 +0xff829682 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff96c896 +1.000000 + + + +0 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +1.000000 + + + +1 +0.627451 +0xffb4b4b4 +0xffd2d2d2 +0xffebebeb +0xffb4b4b4 +0xffc8c8c8 +0.000000 + + + +0 +0.627451 +0xffb4b4b4 +0xffd2d2d2 +0xffebebeb +0xffb4b4b4 +0xffc8c8c8 +0.000000 + + + +0 +0.619608 +0xff8c968c +0xffbec8be +0xffebebeb +0xff647264 +0xffaaafa0 +0.000000 + + + +0 +0.619608 +0xff8cb48c +0xffc3cdc3 +0xffdaebda +0xff648464 +0xff91b18c +0.000000 + + + +0 +0.619608 +0xff8c968c +0xffbec8be +0xffebebeb +0xff647264 +0xffaaafa0 +0.000000 + + + +2 +0 +0 +50 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +0.000000 + + + +0 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +0.000000 + + + +0 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +0.000000 + + + +0 +0.619608 +0xff8c968c +0xffbec8be +0xffebebeb +0xff649664 +0xffaaafa0 +0.000000 + + + + + + +ItemGridHorseSaddle +42.000000 +42.000000 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +CXuiCtrlSlotItemListItem +ItemButtonHorseSaddle +22594 +4 + + + + + +KillFocus + + + +Normal + + + +EndNormal + +stop + + +Focus + + + +EndFocus + +stop + + + + + + +ItemButtonHorseSaddle +42.000000 +42.000000 + + + +Box +42.000000 +42.000000 +15 +4 +Graphics\IconHolder.png +48 + + + + +Icon +38.000000 +38.000000 +2.000000,2.000000,0.000000 +15 +16 +Graphics\Horse_Saddle_Slot.png +48 + + + + +image +38.000000 +38.000000 +2.000000,2.000000,0.000000 +15 +CXuiCtrlMinecraftSlot +XuiVisualImagePresenter + + + + +graphic_Highlight +38.000000 +38.000000 +2.000000,2.000000,0.000000 +0.000000 +15 + + +0xff646464 + + + + +0xb4ebebeb + + +4 +0xff828282 +0xffb4b4b4 +0xffd2d2d2 +0xffebebeb +0.000000 +0.592157 +0.627451 +1.000000 + + +90.000000 + + +true +4,0.000000,0.000000,0.000000,0.000000,242.119705,0.000000,1,242.119705,0.000000,242.119705,0.000000,242.119705,31.004648,1,242.119705,31.004648,242.119705,31.004648,0.000000,31.006342,1,0.000000,31.006342,0.000000,31.006342,0.000000,0.000000,1, + + + + + +Normal + + + +EndNormal + +stop + + +Focus + + + +FocusLoop + + + +EndFocus + +gotoandplay +FocusLoop + + +NormalDisable + + + +EndNormalDisable + +stop + + +FocusDisable + + + +InactiveFocusLoop + + + +EndFocusDisable + +gotoandplay +InactiveFocusLoop + + +Press + + + +EndPress + +stop + + +NormalSel + + + +EndNormalSel + +stop + + + +graphic_Highlight +Fill.Gradient.StopPos +Fill.Gradient.StopColor +Fill.Gradient.StopColor +Fill.Gradient.StopColor +Stroke.StrokeColor +Fill.Gradient.StopColor +Opacity + + +1 +0.627451 +0xff828282 +0xffd2d2d2 +0xffebebeb +0xff646464 +0xffb4b4b4 +0.000000 + + + +0 +0.627451 +0xff828282 +0xffd2d2d2 +0xffebebeb +0xff646464 +0xffb4b4b4 +1.000000 + + + +0 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +1.000000 + + + +0 +0.619608 +0xff829682 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff96c896 +1.000000 + + + +0 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +1.000000 + + + +1 +0.627451 +0xffb4b4b4 +0xffd2d2d2 +0xffebebeb +0xffb4b4b4 +0xffc8c8c8 +0.000000 + + + +0 +0.627451 +0xffb4b4b4 +0xffd2d2d2 +0xffebebeb +0xffb4b4b4 +0xffc8c8c8 +0.000000 + + + +0 +0.619608 +0xff8c968c +0xffbec8be +0xffebebeb +0xff647264 +0xffaaafa0 +0.000000 + + + +0 +0.619608 +0xff8cb48c +0xffc3cdc3 +0xffdaebda +0xff648464 +0xff91b18c +0.000000 + + + +0 +0.619608 +0xff8c968c +0xffbec8be +0xffebebeb +0xff647264 +0xffaaafa0 +0.000000 + + + +2 +0 +0 +50 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +0.000000 + + + +0 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +0.000000 + + + +0 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +0.000000 + + + +0 +0.619608 +0xff8c968c +0xffbec8be +0xffebebeb +0xff649664 +0xffaaafa0 +0.000000 + + + + + + +HorsePanel +283.000000 +36.000000 + + + +graphic_Middle +282.000000 +35.000000 +15 + + +0xff646464 + + + + +0xff0f0f0f + + +4 +0xff828282 +0xffb4b4b4 +0xffd2d2d2 +0xffebebeb +0.000000 +0.592157 +0.627451 +1.000000 + + +90.000000 + + +true +4,0.000000,0.000000,0.000000,0.000000,242.119705,0.000000,1,242.119705,0.000000,242.119705,0.000000,242.119705,31.004648,1,242.119705,31.004648,242.119705,31.004648,0.000000,31.006342,1,0.000000,31.006342,0.000000,31.006342,0.000000,0.000000,1, + + + + +graphic_BottomEdge +283.000000 +2.000000 +0.000000,34.000000,0.000000 +13 + + +0xffebebeb + + +true +4,0.000000,0.000000,0.000000,0.000000,242.119690,0.000000,0,242.119690,0.000000,242.119690,0.000000,242.119690,2.000000,0,242.119690,2.000000,242.119690,2.000000,0.000000,2.000000,0,0.000000,2.000000,0.000000,2.000000,0.000000,0.000000,0, + + + + +graphic_CapLeft +2.000000 +36.000000 +11 + + +0xff646464 + + + + +0xff373737 + + +true +4 +0xff7d7d7d +0xffb4b4b4 +0xffd2d2d2 +0xffebebeb +0.086275 +0.466667 +0.494118 +0.682353 + + +1 + + +true +4,0.000000,0.000000,0.000000,0.000000,3.000000,0.000000,0,3.000000,0.000000,3.000000,0.000000,3.000000,35.000000,0,3.000000,35.000000,3.000000,35.000000,0.000000,35.000000,0,0.000000,35.000000,0.000000,35.000000,0.000000,0.000000,0, + + + + +graphic_CapRight +2.000000 +35.000000 +281.000000,0.000000,0.000000 +14 + + +0xff646464 + + + + +0xffebebeb + + +true +4 +0xff7d7d7d +0xffb4b4b4 +0xffd2d2d2 +0xffebebeb +0.086275 +0.466667 +0.494118 +0.682353 + + +1 + + +true +4,0.000000,0.000000,0.000000,0.000000,3.000000,0.000000,0,3.000000,0.000000,3.000000,0.000000,3.000000,35.000000,0,3.000000,35.000000,3.000000,35.000000,0.000000,35.000000,0,0.000000,35.000000,0.000000,35.000000,0.000000,0.000000,0, + + + + +graphic_TopEdge +283.000000 +2.000000 +7 + + +0xff373737 + + +true +4,0.000000,0.000000,0.000000,0.000000,242.119720,0.000000,0,242.119720,0.000000,242.119720,0.000000,242.119720,2.000000,0,242.119720,2.000000,242.119720,2.000000,0.000000,2.000000,0,0.000000,2.000000,0.000000,2.000000,0.000000,0.000000,0, + + + + +HorseControl +283.000000 +36.000000 +15 +CXuiCtrlMinecraftHorse + + + + + +Normal + + + +EndNormal + +stop + + +Focus + + + +FocusLoop + + + +EndFocus + +gotoandplay +FocusLoop + + +NormalDisable + + + +EndNormalDisable + +stop + + +FocusDisable + + + +InactiveFocusLoop + + + +EndFocusDisable + +gotoandplay +InactiveFocusLoop + + +Press + + + +EndPress + +stop + + +NormalSel + + + +EndNormalSel + +stop + + + +graphic_Middle +Fill.Gradient.StopPos +Fill.Gradient.StopColor +Fill.Gradient.StopColor +Fill.Gradient.StopColor +Stroke.StrokeColor +Fill.Gradient.StopColor +Fill.Gradient.StopPos + + +1 +0.627451 +0xff828282 +0xffd2d2d2 +0xffebebeb +0xff646464 +0xffb4b4b4 +0.592157 + + + +0 +0.627451 +0xff828282 +0xffd2d2d2 +0xffebebeb +0xff646464 +0xffb4b4b4 +0.592157 + + + +0 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +0.592157 + + + +0 +0.619608 +0xff829682 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff96c896 +0.592157 + + + +0 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +0.592157 + + + +1 +0.627451 +0xffb4b4b4 +0xffd2d2d2 +0xffebebeb +0xffb4b4b4 +0xffc8c8c8 +0.592157 + + + +0 +0.627451 +0xffb4b4b4 +0xffd2d2d2 +0xffebebeb +0xffb4b4b4 +0xffc8c8c8 +0.592157 + + + +0 +0.619608 +0xff8c968c +0xffbec8be +0xffebebeb +0xff647264 +0xffaaafa0 +0.592157 + + + +0 +0.619608 +0xff8cb48c +0xffc3cdc3 +0xffdaebda +0xff648464 +0xff91b18c +0.592157 + + + +0 +0.619608 +0xff8c968c +0xffbec8be +0xffebebeb +0xff647264 +0xffaaafa0 +0.592157 + + + +2 +0 +0 +50 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +0.592157 + + + +1 +0.490196 +0xff8cb48c +0xff8cb48c +0xff8ca08c +0xff649664 +0xff8cb48c +0.376471 + + + +2 +0 +0 +50 +0.490196 +0xff8cb48c +0xff8cb48c +0xff8ca08c +0xff649664 +0xff8cb48c +0.376471 + + + +0 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +0.592157 + + + +0 +0.619608 +0xff648264 +0xffc8d2c8 +0xffc8ebc8 +0xff649664 +0xff78b478 +0.592157 + + + +0 +0.619608 +0xff8c968c +0xffbec8be +0xffebebeb +0xff649664 +0xffaaafa0 +0.592157 + + + +graphic_BottomEdge +Fill.FillColor + + +1 +0xffebebeb + + + +0 +0xff0f0f0f + + + +1 +0xff0f0f0f + + + +0 +0xff0f0f0f + + + +1 +0xffb4b4b4 + + + +0 +0xffebebeb + + + +1 +0xffebebeb + + + +0 +0xffebebeb + + + +1 +0xffebebeb + + + +0 +0xff0f0f0f + + + +0 +0xffebebeb + + + +0 +0xffebebeb + + + +graphic_TopEdge +Fill.FillColor + + +1 +0xff373737 + + + +0 +0xffebebeb + + + +1 +0xffebebeb + + + +0 +0xffebebeb + + + +1 +0xffb4b4b4 + + + +0 +0xff0f0f0f + + + +1 +0xff0f0f0f + + + +0 +0xff0f0f0f + + + +1 +0xff0f0f0f + + + +0 +0xffebebeb + + + +0 +0xff0f0f0f + + + +0 +0xff0f0f0f + + + +graphic_CapLeft +Fill.FillColor + + +1 +0xff373737 + + + +0 +0xffebebeb + + + +1 +0xffebebeb + + + +0 +0xffebebeb + + + +0 +0xff0f0f0f + + + +0 +0xff0f0f0f + + + +0 +0xff0f0f0f + + + +0 +0xff0f0f0f + + + +0 +0xff0f0f0f + + + +0 +0xff0f0f0f + + + +0 +0xff0f0f0f + + + +0 +0xff0f0f0f + + + +graphic_CapRight +Fill.FillColor + + +1 +0xffebebeb + + - - -FocusLoop +0 +0xff0f0f0f + + - - -EndFocus +1 +0xff0f0f0f + + -gotoandplay -FocusLoop - - -NormalDisable +0 +0xff0f0f0f + + - - -EndNormalDisable - -stop - - -FocusDisable +0 +0xffebebeb + + - - -InactiveFocusLoop +0 +0xffebebeb + + - - -EndFocusDisable +0 +0xffebebeb + + -gotoandplay -InactiveFocusLoop - - -Press +0 +0xffebebeb + + - - -EndPress - -stop - - -NormalSel - - - -EndNormalSel - -stop - - +0 +0xffebebeb + + + +0 +0xffebebeb + + + +0 +0xffebebeb + + + +0 +0xffebebeb + + @@ -29912,6 +32565,419 @@ stop + +Wither + +stop + + +HealthBoost + +stop + + +Absorption + +stop + + + +Icon +Show +ImagePath + + +0 +false + + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Blindness.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Fire_Resistance.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Haste.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Hunger.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Invisibility.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Jump_Boost.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Mining_Fatigue.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Nausea.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Night_Vision.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Poison.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Regeneration.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Resistance.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Slowness.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Speed.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Strength.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Water_Breathing.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Weakness.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_Wither.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_HealthBoost.png + + + +0 +true +Graphics\PotionEffect\Potion_Effect_Icon_HealthBoost.png + + + + + + +MobEffect_Small +160.000000 +36.000000 +15 + + + +graphic_groupbackground +160.000000 +36.000000 +15 + + + +Bot_R +8.000000 +8.000000 +152.000000,28.000000,0.000000 +12 +Graphics\PanelsAndTabs\PointerTextPanel_BR.png +48 + + + + +Bot_M +144.000000 +8.000000 +8.000000,28.000000,0.000000 +13 +4 +Graphics\PanelsAndTabs\PointerTextPanel_BM.png +48 + + + + +Bot_L +8.000000 +8.000000 +0.000000,28.000000,0.000000 +9 +Graphics\PanelsAndTabs\PointerTextPanel_BL.png +48 + + + + +Top_R +8.000000 +8.000000 +152.000000,0.000000,0.000000 +6 +Graphics\PanelsAndTabs\PointerTextPanel_TR.png +48 + + + + +Top_M +144.000000 +8.000000 +8.000000,0.000000,0.000000 +7 +4 +Graphics\PanelsAndTabs\PointerTextPanel_TM.png +48 + + + + +Top_L +8.000000 +8.000000 +3 +Graphics\PanelsAndTabs\PointerTextPanel_TL.png +48 + + + + +Mid_R +8.000000 +20.000000 +152.000000,8.000000,0.000000 +14 +4 +Graphics\PanelsAndTabs\PointerTextPanel_MR.png +48 + + + + +Mid_M +144.000000 +20.000000 +8.000000,8.000000,0.000000 +15 +4 +Graphics\PanelsAndTabs\PointerTextPanel_MM.png +48 + + + + +Mid_L +8.000000 +20.000000 +0.000000,8.000000,0.000000 +11 +4 +Graphics\PanelsAndTabs\PointerTextPanel_ML.png +48 + + + + + +Icon +18.000000 +18.000000 +6.000000,8.000000,0.000000 +false +16 +48 + + + + +EffectName +125.000000 +20.000000 +27.000000,1.000000,0.000000 +4 +0xffebebeb +0xff606060 +12.000000 +17 +1 + + + + +EffectDuration +125.000000 +20.000000 +27.000000,15.000000,0.000000 +4 +0xffa0a0a0 +0xff0f0f0f +12.000000 +17 +2 + + + + + +Normal + +stop + + +Blindness + +stop + + +Fire_Resistance + +stop + + +Haste + +stop + + +Hunger + +stop + + +Invisibility + +stop + + +Jump_Boost + +stop + + +Mining_Fatigue + +stop + + +Nausea + +stop + + +Night_Vision + +stop + + +Poison + +stop + + +Regeneration + +stop + + +Resistance + +stop + + +Slowness + +stop + + +Speed + +stop + + +Strength + +stop + + +Water_Breathing + +stop + + +Weakness + +stop + + +Wither + +stop + + +HealthBoost + +stop + + +Absorption + +stop + Icon @@ -30025,370 +33091,23 @@ true Graphics\PotionEffect\Potion_Effect_Icon_Weakness.png - - - - - -MobEffect_Small -160.000000 -36.000000 -15 - - - -graphic_groupbackground -160.000000 -36.000000 -15 - - - -Bot_R -8.000000 -8.000000 -152.000000,28.000000,0.000000 -12 -Graphics\PanelsAndTabs\PointerTextPanel_BR.png -48 - - - - -Bot_M -144.000000 -8.000000 -8.000000,28.000000,0.000000 -13 -4 -Graphics\PanelsAndTabs\PointerTextPanel_BM.png -48 - - - - -Bot_L -8.000000 -8.000000 -0.000000,28.000000,0.000000 -9 -Graphics\PanelsAndTabs\PointerTextPanel_BL.png -48 - - - - -Top_R -8.000000 -8.000000 -152.000000,0.000000,0.000000 -6 -Graphics\PanelsAndTabs\PointerTextPanel_TR.png -48 - - - - -Top_M -144.000000 -8.000000 -8.000000,0.000000,0.000000 -7 -4 -Graphics\PanelsAndTabs\PointerTextPanel_TM.png -48 - - - - -Top_L -8.000000 -8.000000 -3 -Graphics\PanelsAndTabs\PointerTextPanel_TL.png -48 - - - - -Mid_R -8.000000 -20.000000 -152.000000,8.000000,0.000000 -14 -4 -Graphics\PanelsAndTabs\PointerTextPanel_MR.png -48 - - - - -Mid_M -144.000000 -20.000000 -8.000000,8.000000,0.000000 -15 -4 -Graphics\PanelsAndTabs\PointerTextPanel_MM.png -48 - - - - -Mid_L -8.000000 -20.000000 -0.000000,8.000000,0.000000 -11 -4 -Graphics\PanelsAndTabs\PointerTextPanel_ML.png -48 - - - - - -Icon -18.000000 -18.000000 -6.000000,8.000000,0.000000 -false -16 -48 - - - - -EffectName -125.000000 -20.000000 -27.000000,1.000000,0.000000 -4 -0xffebebeb -0xff606060 -12.000000 -17 -1 - - - - -EffectDuration -125.000000 -20.000000 -27.000000,15.000000,0.000000 -4 -0xffa0a0a0 -0xff0f0f0f -12.000000 -17 -2 - - - - - -Normal - -stop - - -Blindness - -stop - - -Fire_Resistance - -stop - - -Haste - -stop - - -Hunger - -stop - - -Invisibility - -stop - - -Jump_Boost - -stop - - -Mining_Fatigue - -stop - - -Nausea - -stop - - -Night_Vision - -stop - - -Poison - -stop - - -Regeneration - -stop - - -Resistance - -stop - - -Slowness - -stop - - -Speed - -stop - - -Strength - -stop - - -Water_Breathing - -stop - - -Weakness - -stop - - - -Icon -Show -ImagePath - - -0 -false - - - - -0 -true -Graphics\PotionEffect\Potion_Effect_Icon_Blindness.png - - - -0 -true -Graphics\PotionEffect\Potion_Effect_Icon_Fire_Resistance.png - - - -0 -true -Graphics\PotionEffect\Potion_Effect_Icon_Haste.png - - - -0 -true -Graphics\PotionEffect\Potion_Effect_Icon_Hunger.png - - - -0 -true -Graphics\PotionEffect\Potion_Effect_Icon_Invisibility.png - - -0 -true -Graphics\PotionEffect\Potion_Effect_Icon_Jump_Boost.png - - - -0 -true -Graphics\PotionEffect\Potion_Effect_Icon_Mining_Fatigue.png - - - -0 -true -Graphics\PotionEffect\Potion_Effect_Icon_Nausea.png - - - -0 -true -Graphics\PotionEffect\Potion_Effect_Icon_Night_Vision.png - - - -0 -true -Graphics\PotionEffect\Potion_Effect_Icon_Poison.png - - - -0 -true -Graphics\PotionEffect\Potion_Effect_Icon_Regeneration.png - - - -0 -true -Graphics\PotionEffect\Potion_Effect_Icon_Resistance.png - - - -0 -true -Graphics\PotionEffect\Potion_Effect_Icon_Slowness.png - - - -0 -true -Graphics\PotionEffect\Potion_Effect_Icon_Speed.png - - - + 0 true -Graphics\PotionEffect\Potion_Effect_Icon_Strength.png +Graphics\PotionEffect\Potion_Effect_Icon_Wither.png - + 0 true -Graphics\PotionEffect\Potion_Effect_Icon_Water_Breathing.png +Graphics\PotionEffect\Potion_Effect_Icon_HealthBoost.png - + 0 true -Graphics\PotionEffect\Potion_Effect_Icon_Weakness.png +Graphics\PotionEffect\Potion_Effect_Icon_HealthBoost.png @@ -34088,6 +36807,121 @@ +HorseJumpProgress +548.000000 +15.000000 + + + +ProgressBody +548.000000 +15.000000 + + + +back +182.000000 +5.000000 +15 +4 +Graphics\HUD\HorseJump_bar_empty.png +48 + + + + +bar +182.000000 +5.000000 +15 +false +true + + + +bar +182.000000 +5.000000 +4 +Graphics\HUD\HorseJump_bar_full.png +48 + + + + + +design_time_display +458.000000 +15.000000 +15 +false +true + + +1.000000 +0xff646464 + + + + +2 +0xffffffff + + +2 +0xffebebeb +0xff7d7d7d +0.000000 +0.000000 + + + + +true +4,0.000000,0.000000,0.000000,0.000000,170.000000,0.000000,0,170.000000,0.000000,170.000000,0.000000,170.000000,19.000000,0,170.000000,19.000000,170.000000,19.000000,0.000000,19.000000,0,0.000000,19.000000,0.000000,19.000000,0.000000,0.000000,0, + + + + +bar +Show +Width + + +0 +false +182.000000 + + + +0 +true +3.330000 + + + +0 +true +182.000000 + + + + + + + +Normal + + + +EndNormal + + + + + + + BossHealthLabel 500.000000 66.000000 @@ -35336,6 +38170,56 @@ stop + +FullWither + +stop + + +FullWitherFlash + +stop + + +HalfWither + +stop + + +HalfWitherFlash + +stop + + +FullAbsorb + +stop + + +HalfAbsorb + +stop + + +Horse_Full + +stop + + +Horse_Full_Flash + +stop + + +Horse_Half + +stop + + +Horse_Half_Flash + +stop + Border @@ -35350,6 +38234,46 @@ 0 Graphics\HUD\Health_Background_Flash.png + + +0 +Graphics\HUD\Health_Background.png + + + +0 +Graphics\HUD\Health_Background_Flash.png + + + +0 +Graphics\HUD\Health_Background.png + + + +0 +Graphics\HUD\Health_Background_Flash.png + + + +0 +Graphics\HUD\Health_Background.png + + + +0 +Graphics\HUD\Health_Background_Flash.png + + + +0 +Graphics\HUD\Health_Background.png + + + +0 +Graphics\HUD\Health_Background_Flash.png + Heart @@ -35415,6 +38339,66 @@ true Graphics\HUD\Health_Full_Poison_Flash.png + + +0 +true +Graphics\HUD\Health_Full_Wither.png + + + +0 +true +Graphics\HUD\Health_Full_Wither_Flash.png + + + +0 +true +Graphics\HUD\Health_Half_Wither.png + + + +0 +true +Graphics\HUD\Health_Half_Wither_Flash.png + + + +0 +true +Graphics\HUD\Health_Full_Absorb.png + + + +0 +true +Graphics\HUD\Health_Half_Absorb.png + + + +0 +true +Graphics\HUD\HorseHealth_Full.png + + + +0 +true +Graphics\HUD\HorseHealth_Full_Flash.png + + + +0 +true +Graphics\HUD\HorseHealth_Half.png + + + +0 +true +Graphics\HUD\HorseHealth_Half_Flash.png + @@ -42205,6 +45189,23 @@ +ImHowToPlayEnderchest +339.000000 +342.000000 + + + +XuiImageBreeding +451.000000 +455.000000 +0.750000,0.750000,0.750000 +1 +Graphics\HowToPlay\HowToPlay_Enderchest.png + + + + + ImHowToPlayBrewing 339.000000 342.000000 @@ -42698,18 +45699,130 @@ -ImHowToPlayEnderchest -339.000000 -342.000000 +ImHowToPlayBeaconSmall +260.000000 +290.000000 -XuiImageBreeding -451.000000 -455.000000 -0.750000,0.750000,0.750000 +Image +336.000000 +290.000000 1 -Graphics\HowToPlay\HowToPlay_Enderchest.png +Graphics\HowToPlay\HowToPlay_Beacon_Small.png + + + + + +ImHowToPlayBeacon +430.000000 +430.000000 + + + +Image +430.000000 +430.000000 +1 +Graphics\HowToPlay\HowToPlay_Beacon.png + + + + + +ImHowToPlayHorsesSmall +248.000000 +146.000000 + + + +Image +248.000000 +146.000000 +1 +Graphics\HowToPlay\HowToPlay_Horses_Small.png +48 + + + + + +ImHowToPlayHorses +525.000000 +308.000000 + + + +Image +516.000000 +302.000000 +1 +Graphics\HowToPlay\HowToPlay_Horses.png + + + + + +ImHowToPlayFireworksSmall +260.000000 +280.000000 + + + +Image +260.000000 +280.000000 +1 +Graphics\HowToPlay\HowToPlay_Fireworks_Small.png + + + + + +ImHowToPlayFireworks +428.000000 +450.000000 + + + +Image +428.000000 +450.000000 +1 +Graphics\HowToPlay\HowToPlay_Fireworks.png + + + + + +ImHowToPlayHopperSmall +260.000000 +220.000000 + + + +Image +260.000000 +220.000000 +1 +Graphics\HowToPlay\HowToPlay_Hopper_Small.png + + + + + +ImHowToPlayHopper +430.000000 +336.000000 + + + +Image +430.000000 +336.000000 +1 +Graphics\HowToPlay\HowToPlay_Hopper.png @@ -42769,4 +45882,76 @@ + + +Beacon_1 +40.000000 +40.000000 + + + +Image +40.000000 +40.000000 +15 +8 +Graphics\Beacon_1.png +48 + + + + + +Beacon_2 +40.000000 +40.000000 + + + +Image +40.000000 +40.000000 +15 +8 +Graphics\Beacon_2.png +48 + + + + + +Beacon_3 +40.000000 +40.000000 + + + +Image +40.000000 +40.000000 +15 +8 +Graphics\Beacon_3.png +48 + + + + + +Beacon_4 +40.000000 +40.000000 + + + +Image +40.000000 +40.000000 +15 +8 +Graphics\Beacon_4.png +48 + + + diff --git a/Minecraft.Client/Common/Media/splashes.txt b/Minecraft.Client/Common/Media/splashes.txt index c12a2f9c..86e38941 100644 --- a/Minecraft.Client/Common/Media/splashes.txt +++ b/Minecraft.Client/Common/Media/splashes.txt @@ -295,7 +295,7 @@ You can't explain that! if not ok then return end §1C§2o§3l§4o§5r§6m§7a§8t§9i§ac §kFUNKY LOL -SOPA means LOSER in Swedish +SOPA means LOSER in Swedish! Big Pointy Teeth! Bekarton guards the gate! Mmmph, mmph! @@ -309,4 +309,6 @@ Pretty scary! I have a suggestion. Now with extra hugs! Almost java 6! -Woah. \ No newline at end of file +Woah. +HURNERJSGER? +What's up, Doc? \ No newline at end of file diff --git a/Minecraft.Client/Common/Media/strings.resx b/Minecraft.Client/Common/Media/strings.resx index 21a7078a..9e824d0f 100644 --- a/Minecraft.Client/Common/Media/strings.resx +++ b/Minecraft.Client/Common/Media/strings.resx @@ -408,6 +408,27 @@ When loading or creating a world, you can press the "More Options" button to ent {*T2*}Host Privileges{*ETW*}{*B*} When enabled, the host can toggle their ability to fly, disable exhaustion, and make themselves invisible from the in-game menu. {*DISABLES_ACHIEVEMENTS*}{*B*}{*B*} + {*T2*}Daylight Cycle{*ETW*}{*B*} + When disabled, the time of day will not change.{*B*}{*B*} + + {*T2*}Keep Inventory{*ETW*}{*B*} + When enabled, players will keep their inventory when they die.{*B*}{*B*} + + {*T2*}Mob Spawning{*ETW*}{*B*} + When disabled, mobs will not spawn naturally.{*B*}{*B*} + + {*T2*}Mob Griefing{*ETW*}{*B*} + When disabled, prevents monsters and animals from changing blocks (for example, Creeper explosions won't destroy blocks and Sheep won't remove Grass) or picking up items.{*B*}{*B*} + + {*T2*}Mob Loot{*ETW*}{*B*} + When disabled, monsters and animals will not drop loot (for example, Creepers won't drop gunpowder).{*B*}{*B*} + + {*T2*}Tile Drops{*ETW*}{*B*} + When disabled, blocks will not drop items when destroyed (for example, Stone blocks won't drop Cobblestone).{*B*}{*B*} + + {*T2*}Natural Regeneration{*ETW*}{*B*} + When disabled, players will not regenerate health naturally.{*B*}{*B*} + {*T1*}World Generation Options{*ETW*}{*B*} When creating a new world there are some additional options.{*B*}{*B*} @@ -451,25 +472,29 @@ To modify the privileges for a player, select their name and press{*CONTROLLER_V When this option is enabled, the player is able to change privileges for other players (except the host) if "Trust Players" is turned off, kick players and they can enable and disable fire spreading and TNT exploding.{*B*}{*B*} {*T2*}Kick Player{*ETW*}{*B*} - For players that are not on the same {*PLATFORM_NAME*} console as the host player, selecting this option will kick the player from the game and any other players on their {*PLATFORM_NAME*} console. This player will not be able to rejoin the game until it is restarted.{*B*}{*B*} + {*KICK_PLAYER_DESCRIPTION*}{*B*}{*B*} {*T1*}Host Player Options{*ETW*}{*B*} If "Host Privileges" is enabled the host player can modify some privileges for themselves. To modify the privileges for a player, select their name and press{*CONTROLLER_VK_A*} to bring up the player privileges menu where you can use the following options.{*B*}{*B*} {*T2*}Can Fly{*ETW*}{*B*} When this option is enabled, the player is able to fly. This option is only relevant to Survival mode, as flying is enabled for all players in Creative mode.{*B*}{*B*} - + {*T2*}Disable Exhaustion{*ETW*}{*B*} This option only affects Survival mode. When enabled, physical activities (walking/sprinting/jumping etc.) do not decrease the food bar. However, if the player becomes injured, the food bar will slowly decrease while the player is healing.{*B*}{*B*} - + {*T2*}Invisible{*ETW*}{*B*} When this option is enabled, the player is not visible to other players and is invulnerable.{*B*}{*B*} - + {*T2*}Can Teleport{*ETW*}{*B*} This allows the player to move players or themselves to other players in the world. + + For players that are not on the same {*PLATFORM_NAME*} console as the host player, selecting this option will kick the player from the game and any other players on their {*PLATFORM_NAME*} console. This player will not be able to rejoin the game until it is restarted. + + Next Page @@ -566,100 +591,148 @@ so they can easily join you. - -{*T3*}Changes and Additions{*ETW*}{*B*}{*B*} -- Added new items - Emerald, Emerald Ore, Block of Emerald, Ender Chest, Tripwire Hook, Enchanted Golden Apple, Anvil, Flower Pot, Cobblestone Walls, Mossy Cobblestone Walls, Wither Painting, Potato, Baked Potato, Poisonous Potato, Carrot, Golden Carrot, Carrot on a Stick, -Pumpkin Pie, Night Vision Potion, Invisibility Potion, Nether Quartz, Nether Quartz Ore, Block of Quartz, Quartz Slab, Quartz Stair, Chiseled Quartz Block, Pillar Quartz Block, Enchanted Book, Carpet.{*B*} -- Added new recipes for Smooth Sandstone and Chiselled Sandstone.{*B*} -- Added new Mobs - Zombie Villagers.{*B*} -- Added new terrain generation features - Desert Temples, Desert Villages, Jungle Temples.{*B*} -- Added Trading with villagers.{*B*} -- Added Anvil interface.{*B*} -- Can dye leather armor.{*B*} -- Can dye wolf collars.{*B*} -- Can control riding a pig with a Carrot on a Stick.{*B*} -- Updated Bonus Chest content with more items.{*B*} -- Changed placement of half blocks and other blocks on half blocks.{*B*} -- Changed placement of upside down stairs and slabs.{*B*} -- Added different villager professions.{*B*} -- Villagers spawned from a spawn egg will have a random profession.{*B*} -- Added sideways log placement.{*B*} -- Furnaces can use wooden tools as a fuel.{*B*} -- Ice and Glass panes can be collected with silk touch enchanted tools.{*B*} -- Wooden Buttons and Wooden Pressure Plates can be activated with Arrows.{*B*} -- Nether mobs can spawn in the Overworld from Portals.{*B*} -- Creepers and Spiders are aggressive towards the last player that hit them.{*B*} -- Mobs in Creative mode become neutral again after a short period.{*B*} -- Remove knockback when drowning.{*B*} -- Doors being broken by zombies show damage.{*B*} -- Ice melts in the nether.{*B*} -- Cauldrons fill up when out in the rain.{*B*} -- Pistons take twice as long to update.{*B*} -- Pig drops Saddle when killed (if has one).{*B*} -- Sky color in The End changed.{*B*} -- String can be placed (for Tripwires).{*B*} -- Rain drips through leaves.{*B*} -- Levers can be placed on the bottom of blocks.{*B*} -- TNT does variable damage depending on difficulty setting.{*B*} -- Book recipe changed.{*B*} -- Boats break Lilypads, instead of Lilypads breaking Boats.{*B*} -- Pigs drop more Porkchops.{*B*} -- Slimes spawn less in Superflat worlds.{*B*} -- Creeper damage variable based on difficulty setting, more knockback.{*B*} -- Fixed Endermen not opening their jaws.{*B*} -- Added teleporting of players (using the {*BACK_BUTTON*} menu in-game).{*B*} -- Added new Host Options for flying, invisibility and invulnerability for remote players.{*B*} -- Added new tutorials to the Tutorial World for new items and features.{*B*} -- Updated the positions of the Music Disc Chests in the Tutorial World.{*B*} + {*T3*}Changes and Additions{*ETW*}{*B*}{*B*} +- Added new items - Hardened Clay, Stained Clay, Block of Coal, Hay Bale, Activator Rail, Block of Redstone, Daylight Sensor, Dropper, Hopper, Minecart with Hopper, Minecart with TNT, Redstone Comparator, Weighted Pressure Plate, Beacon, Trapped Chest, Firework Rocket, Firework Star, Nether Star, Lead, Horse Armor, Name Tag, Horse Spawn Egg{*B*} +- Added new Mobs - Wither, Wither Skeletons, Witches, Bats, Horses, Donkeys and Mules{*B*} +- Added new terrain generation features - Witch Huts.{*B*} +- Added Beacon interface.{*B*} +- Added Horse interface.{*B*} +- Added Hopper interface.{*B*} +- Added Fireworks - Fireworks interface is accessible from the Crafting Table when you have the ingredients to craft a Firework Star or Firework Rocket.{*B*} +- Added 'Adventure Mode' - You can only break blocks with the correct tools.{*B*} +- Added lots of new sounds.{*B*} +- Mobs, items and projectiles can now pass through portals.{*B*} +- Repeaters can now be locked by powering their sides with another Repeater.{*B*} +- Zombies and Skeletons can now spawn with different weapons and armor.{*B*} +- New death messages.{*B*} +- Name mobs with a Name Tag, and rename containers to change the title when the menu is open.{*B*} +- Bonemeal no longer instantly grows everything to full size, and instead randomly grows in stages.{*B*} +- A Redstone signal describing the contents of Chests, Brewing Stands, Dispensers and Jukeboxes can be detected by placing a Redstone Comparator directly against them.{*B*} +- Dispensers can face in any direction.{*B*} +- Eating a Golden Apple gives the player extra "absorption" health for a short period.{*B*} +- The longer you remain in an area the harder the monsters that spawn in that area will be.{*B*} {*ETB*}Welcome back! You may not have noticed but your Minecraft has just been updated.{*B*}{*B*} -There are lots of new features for you and friends to play with so here’s just a few highlights. Have a read and then go and have fun!{*B*}{*B*} -{*T1*}New Items{*ETB*} - Emerald, Emerald Ore, Block of Emerald, Ender Chest, Tripwire Hook, Enchanted Golden Apple, Anvil, Flower Pot, Cobblestone Walls, Mossy Cobblestone Walls, Wither Painting, Potato, Baked Potato, Poisonous Potato, Carrot, Golden Carrot, Carrot on a Stick, -Pumpkin Pie, Night Vision Potion, Invisibility Potion, Nether Quartz, Nether Quartz Ore, Block of Quartz, Quartz Slab, Quartz Stair, Chiseled Quartz Block, Pillar Quartz Block, Enchanted Book, Carpet.{*B*}{*B*} - {*T1*}New Mobs{*ETB*} - Zombie Villagers.{*B*}{*B*} -{*T1*}New Features{*ETB*} - Trade with villagers, repair or enchant weapons and tools with an Anvil, store items in an Ender Chest, control a pig while riding it using a Carrot on a Stick!{*B*}{*B*} -{*T1*}New Mini-Tutorials{*ETB*} – Learn how to use the new features in the Tutorial World!{*B*}{*B*} -{*T1*}New 'Easter Eggs'{*ETB*} – We've moved all the secret Music Discs in the Tutorial World. See if you can find them again!{*B*}{*B*} - +There are lots of new features for you and friends to play with so here’s just a few highlights. Have a read and then go and have fun!{*B*}{*B*} +{*T1*}New Items{*ETB*} - Hardened Clay, Stained Clay, Block of Coal, Hay Bale, Activator Rail, Block of Redstone, Daylight Sensor, Dropper, Hopper, Minecart with Hopper, Minecart with TNT, Redstone Comparator, Weighted Pressure Plate, Beacon, Trapped Chest, Firework Rocket, Firework Star, Nether Star, Lead, Horse Armor, Name Tag, Horse Spawn Egg{*B*}{*B*} +{*T1*}New Mobs{*ETB*} - Wither, Wither Skeletons, Witches, Bats, Horses, Donkeys and Mules{*B*}{*B*} +{*T1*}New Features{*ETB*} - Tame and ride a horse, craft fireworks and put on a show, name animals and monsters with a Name Tag, create more advanced Redstone circuits, and new Host Options to help control what guests to your world can do!{*B*}{*B*} +{*T1*}New Tutorial World{*ETB*} – Learn how to use the old and new features in the Tutorial World. See if you can find all the secret Music Discs hidden in the world!{*B*}{*B*} + + + + + Horses + + + {*T3*}HOW TO PLAY : HORSES{*ETW*}{*B*}{*B*} +Horses and Donkeys are found mainly in open plains. Mules are the offspring of a Donkey and a Horse, but are infertile themselves.{*B*} +All adult Horses, Donkeys and Mules can be ridden. However only Horses can be armored, and only Mules and Donkeys may be equipped with saddlebags for transporting items.{*B*}{*B*} +Horses, Donkeys and Mules must be tamed before they can be used. A horse is tamed by attempting to ride it, and managing to stay on the horse while it attempts to throw the rider off.{*B*} +When Love Hearts appear around the horse, it is tame, and will no longer attempt to throw the player off. To steer a horse, the player must equip the horse with a Saddle.{*B*}{*B*} +Saddles can be bought from villagers or found inside Chests hidden in the world.{*B*} +Tame Donkeys and Mules can be given saddlebags by attaching a Chest. These saddlebags can then be accessed whilst riding or sneaking.{*B*}{*B*} +Horses and Donkeys (but not Mules) can be bred like other animals using Golden Apples or Golden Carrots.{*B*} +Foals will grow into adult horses over time, although feeding them Wheat or Hay will speed this up.{*B*} + + + + + Beacons + + + {*T3*}HOW TO PLAY : BEACONS{*ETW*}{*B*}{*B*} +Active Beacons project a bright beam of light into the sky and grant powers to nearby players.{*B*} +They are crafted with Glass, Obsidian and Nether Stars, which can be obtained by defeating the Wither.{*B*}{*B*} +Beacons must be placed so that they are in sunlight during the day. Beacons must be placed on Pyramids of Iron, Gold, Emerald or Diamond.{*B*} +The material the Beacon is placed on has no effect on the power of the Beacon.{*B*}{*B*} +In the Beacon menu you can select one primary power for your Beacon. The more tiers your pyramid has the more powers you will have to choose from.{*B*} +A Beacon on a pyramid with at least four tiers also gives the option of either the Regeneration secondary power or a stronger primary power.{*B*}{*B*} +To set the powers of your Beacon you must sacrifice an Emerald, Diamond, Gold or Iron Ingot in the payment slot.{*B*} +Once set, the powers will emanate from the Beacon indefinitely.{*B*} + + + + + Fireworks + + + {*T3*}HOW TO PLAY : FIREWORKS{*ETW*}{*B*}{*B*} +Fireworks are decorative items that can be launched by hand or from Dispensers. They are crafted using Paper, Gunpowder and optionally a number of Firework Stars.{*B*} +The colors, fade, shape, size, and effects (such as trails and twinkle) of Firework Stars can be customized by including additional ingredients when crafting.{*B*}{*B*} +To craft a Firework place Gunpowder and Paper in the 3x3 crafting grid that is shown above your inventory.{*B*} +You can optionally place multiple Firework Stars in the crafting grid to add them to the Firework.{*B*} +Filling more slots in the crafting grid with Gunpowder will increase the height at which all the Firework Stars will explode.{*B*}{*B*} +You can then take the crafted Firework out of the output slot.{*B*}{*B*} +Firework Stars can be crafted by placing Gunpowder and Dye into the crafting grid.{*B*} + - The Dye will set the color of the explosion of the Firework Star.{*B*} + - The shape of the Firework Star is set by adding either a Fire Charge, Gold Nugget, Feather or Mob Head.{*B*} + - A trail or a twinkle can be added using Diamonds or Glowstone Dust.{*B*}{*B*} +After a Firework Star has been crafted, you can set the fade color of the Firework Star by crafting it with Dye. + + + + + Hoppers + + + {*T3*}HOW TO PLAY : HOPPERS{*ETW*}{*B*}{*B*} +Hoppers are used to insert or remove items from containers, and to automatically pick up items thrown into them.{*B*} +They can affect Brewing Stands, Chests, Dispensers, Droppers, Minecarts with Chests, Minecarts with Hoppers, as well as other Hoppers.{*B*}{*B*} +Hoppers will continuously attempt to suck items out of a suitable container placed above them. They will also attempt to insert stored items into an output container.{*B*} +If a Hopper is powered by Redstone it will become inactive and stop both sucking and inserting items.{*B*}{*B*} +A Hopper points in the direction it tries to output items. To make a Hopper point to a particular block, place the Hopper against that block whilst sneaking.{*B*} + + + Droppers + + + {*T3*}HOW TO PLAY : DROPPERS{*ETW*}{*B*}{*B*} +When powered by Redstone, Droppers will drop a single random item contained within them onto the ground. Use {*CONTROLLER_ACTION_USE*} to open the Dropper and then you can load the Dropper with items from your inventory.{*B*} +If the Dropper is facing a Chest or another type of Container, the item will be placed into that instead. Long chains of Droppers can be constructed to transport items over a distance, but for this to work they will have to be alternately powered on and off. + + + +  - Deals more damage than by hand. + Deals more damage than by hand. - Used to dig dirt, grass, sand, gravel and snow faster than by hand. Shovels are required to dig snowballs. + Used to dig dirt, grass, sand, gravel and snow faster than by hand. Shovels are required to dig snowballs. - Required to mine stone-related blocks and ore. + Required to mine stone-related blocks and ore. - Used to chop wood-related blocks faster than by hand. + Used to chop wood-related blocks faster than by hand. - Used to till dirt and grass blocks to prepare for crops. + Used to till dirt and grass blocks to prepare for crops. - Wooden doors are activated by using, hitting them or with Redstone. + Wooden doors are activated by using, hitting them or with Redstone. - Iron doors can only be opened by Redstone, buttons or switches. + Iron doors can only be opened by Redstone, buttons or switches. - - NOT USED + + NOT USED - NOT USED + NOT USED - NOT USED + NOT USED - NOT USED + NOT USED @@ -679,807 +752,936 @@ Pumpkin Pie, Night Vision Potion, Invisibility Potion, Nether Quartz, Nether Qua - Gives the user 2 Armor when worn. + Gives the user 2 Armor when worn. - Gives the user 5 Armor when worn. + Gives the user 5 Armor when worn. - Gives the user 4 Armor when worn. + Gives the user 4 Armor when worn. - Gives the user 1 Armor when worn. + Gives the user 1 Armor when worn. - Gives the user 2 Armor when worn. + Gives the user 2 Armor when worn. - Gives the user 6 Armor when worn. + Gives the user 6 Armor when worn. - Gives the user 5 Armor when worn. + Gives the user 5 Armor when worn. - Gives the user 2 Armor when worn. + Gives the user 2 Armor when worn. - Gives the user 2 Armor when worn. + Gives the user 2 Armor when worn. - Gives the user 5 Armor when worn. + Gives the user 5 Armor when worn. - Gives the user 3 Armor when worn. + Gives the user 3 Armor when worn. - Gives the user 1 Armor when worn. + Gives the user 1 Armor when worn. - Gives the user 3 Armor when worn. + Gives the user 3 Armor when worn. - Gives the user 8 Armor when worn. + Gives the user 8 Armor when worn. - Gives the user 6 Armor when worn. + Gives the user 6 Armor when worn. - Gives the user 3 Armor when worn. + Gives the user 3 Armor when worn. - A shiny ingot which can be used to craft tools made from this material. Created by smelting ore in a furnace. + A shiny ingot which can be used to craft tools made from this material. Created by smelting ore in a furnace. - Allows ingots, gems, or dyes to be crafted into placeable blocks. Can be used as an expensive building block or compact storage of the ore. + Allows ingots, gems, or dyes to be crafted into placeable blocks. Can be used as an expensive building block or compact storage of the ore. - Used to send an electrical charge when stepped on by a player, an animal, or a monster. Wooden Pressure Plates can also be activated by dropping something on them. + Used to send an electrical charge when stepped on by a player, an animal, or a monster. Wooden Pressure Plates can also be activated by dropping something on them. - Used for compact staircases. + Used for compact staircases. - Used for making long staircases. Two slabs placed on top of each other will create a normal-sized double slab block. + Used for making long staircases. Two slabs placed on top of each other will create a normal-sized double slab block. - Used for making long staircases. Two slabs placed on top of each other will create a normal-sized double slab block. + Used for making long staircases. Two slabs placed on top of each other will create a normal-sized double slab block. - Used to create light. Torches also melt snow and ice. + Used to create light. Torches also melt snow and ice. - Used as a building material and can be crafted into many things. Can be crafted from any form of wood. + Used as a building material and can be crafted into many things. Can be crafted from any form of wood. - Used as a building material. Is not influenced by gravity like normal Sand. + Used as a building material. Is not influenced by gravity like normal Sand. - Used as a building material. + Used as a building material. - Used to craft torches, arrows, signs, ladders, fences and as handles for tools and weapons. + Used to craft torches, arrows, signs, ladders, fences and as handles for tools and weapons. - Used to forward time from any time at night to morning if all the players in the world are in bed, and changes the spawn point of the player. + Used to forward time from any time at night to morning if all the players in the world are in bed, and changes the spawn point of the player. The colors of the bed are always the same, regardless of the colors of wool used. - Allows you to craft a more varied selection of items than the normal crafting. + Allows you to craft a more varied selection of items than the normal crafting. - Allows you to smelt ore, create charcoal and glass, and cook fish and porkchops. + Allows you to smelt ore, create charcoal and glass, and cook fish and porkchops. - Stores blocks and items inside. Place two chests side by side to create a larger chest with double the capacity. + Stores blocks and items inside. Place two chests side by side to create a larger chest with double the capacity. - Used as a barrier that cannot be jumped over. Counts as 1.5 blocks high for players, animals and monsters, but 1 block high for other blocks. + Used as a barrier that cannot be jumped over. Counts as 1.5 blocks high for players, animals and monsters, but 1 block high for other blocks. - Used to climb vertically. + Used to climb vertically. - Activated by using, hitting them or with redstone. They function as normal doors, but are a one by one block and lay flat on the ground. + Activated by using, hitting them or with redstone. They function as normal doors, but are a one by one block and lay flat on the ground. - Shows text entered by you or other players. + Shows text entered by you or other players. - Used to create brighter light than torches. Melts snow/ice and can be used underwater. + Used to create brighter light than torches. Melts snow/ice and can be used underwater. - Used to cause explosions. Activated after placing by igniting with Flint and Steel item, or with an electrical charge. + Used to cause explosions. Activated after placing by igniting with Flint and Steel item, or with an electrical charge. - Used to hold mushroom stew. You keep the bowl when the stew has been eaten. + Used to hold mushroom stew. You keep the bowl when the stew has been eaten. - Used to hold and transport water, lava and milk. + Used to hold and transport water, lava and milk. - Used to hold and transport water. + Used to hold and transport water. - Used to hold and transport lava. + Used to hold and transport lava. - Used to hold and transport milk. + Used to hold and transport milk. - Used to create fire, ignite TNT, and open a portal once it has been built. + Used to create fire, ignite TNT, and open a portal once it has been built. - Used to catch fish. + Used to catch fish. - Displays positions of the Sun and Moon. + Displays positions of the Sun and Moon. - Points to your start point. + Points to your start point. - Will create an image of an area explored while held. This can be used for path-finding. + Will create an image of an area explored while held. This can be used for path-finding. + + + When used becomes a map of the part of the world that you are in, and gets filled in as you explore. - Allows for ranged attacks by using arrows. + Allows for ranged attacks by using arrows. - Used as ammunition for bows. + Used as ammunition for bows. + + + Dropped by the Wither, used in crafting Beacons. + + + When activated, create colorful explosions. The color, effect, shape and fade are determined by the Firework Star used when the Firework is created. + + + Used to determine the color, effect and shape of a Firework. + + + Used in Redstone circuits to maintain, compare, or subtract signal strength, or to measure certain block states. + + + Is a type of Minecart that acts as a moving TNT block. + + + Is a block that outputs a Redstone signal based on sunlight (or lack of sunlight). + + + Is a special type of Minecart that functions similarly to a Hopper. It will collect items lying on tracks and from containers above it. + + + A special type of Armor that can be equipped to a horse. Provides 5 Armor. + + + A special type of Armor that can be equipped to a horse. Provides 7 Armor. + + + A special type of Armor that can be equipped to a horse. Provides 11 Armor. + + + Used to leash mobs to the player or Fence posts. + + + Used to name mobs in the world. + - Restores 2.5{*ICON_SHANK_01*}. + Restores 2.5{*ICON_SHANK_01*}. - Restores 1{*ICON_SHANK_01*}. Can be used 6 times. + Restores 1{*ICON_SHANK_01*}. Can be used 6 times. - Restores 1{*ICON_SHANK_01*}. + Restores 1{*ICON_SHANK_01*}. - Restores 1{*ICON_SHANK_01*}. + Restores 1{*ICON_SHANK_01*}. - Restores 3{*ICON_SHANK_01*}. + Restores 3{*ICON_SHANK_01*}. - Restores 1{*ICON_SHANK_01*}, or can be cooked in a furnace. Eating this can cause you to be poisoned. + Restores 1{*ICON_SHANK_01*}, or can be cooked in a furnace. Eating this can cause you to be poisoned. - Restores 3{*ICON_SHANK_01*}. Created by cooking raw chicken in a furnace. + Restores 3{*ICON_SHANK_01*}. Created by cooking raw chicken in a furnace. - Restores 1.5{*ICON_SHANK_01*}, or can be cooked in a furnace. + Restores 1.5{*ICON_SHANK_01*}, or can be cooked in a furnace. - Restores 4{*ICON_SHANK_01*}. Created by cooking raw beef in a furnace. + Restores 4{*ICON_SHANK_01*}. Created by cooking raw beef in a furnace. - Restores 1.5{*ICON_SHANK_01*}, or can be cooked in a furnace. + Restores 1.5{*ICON_SHANK_01*}, or can be cooked in a furnace. - Restores 4{*ICON_SHANK_01*}. Created by cooking a raw porkchop in a furnace. + Restores 4{*ICON_SHANK_01*}. Created by cooking a raw porkchop in a furnace. - Restores 1{*ICON_SHANK_01*}, or can be cooked in a furnace. Can be fed to an Ocelot to tame it. + Restores 1{*ICON_SHANK_01*}, or can be cooked in a furnace. Can be fed to an Ocelot to tame it. - Restores 2.5{*ICON_SHANK_01*}. Created by cooking a raw fish in a furnace. + Restores 2.5{*ICON_SHANK_01*}. Created by cooking a raw fish in a furnace. - Restores 2{*ICON_SHANK_01*}, and can be crafted into a golden apple. + Restores 2{*ICON_SHANK_01*}, and can be crafted into a golden apple. - Restores 2{*ICON_SHANK_01*}, and regenerates health for 4 seconds. Crafted from an apple and gold nuggets. + Restores 2{*ICON_SHANK_01*}, and regenerates health for 4 seconds. Crafted from an apple and gold nuggets. - Restores 2{*ICON_SHANK_01*}. Eating this can cause you to be poisoned. + Restores 2{*ICON_SHANK_01*}. Eating this can cause you to be poisoned. - Used in the cake recipe, and as an ingredient for brewing potions. + Used in the cake recipe, and as an ingredient for brewing potions. - Used to send an electrical charge by being turned on or off. Stays in the on or off state until pressed again. + Used to send an electrical charge by being turned on or off. Stays in the on or off state until pressed again. - Constantly sends an electrical charge, or can be used as a receiver/transmitter when connected to the side of a block. + Constantly sends an electrical charge, or can be used as a receiver/transmitter when connected to the side of a block. Can also be used for low-level lighting. - Used in Redstone circuits as repeater, a delayer, and/or a diode. + Used in Redstone circuits as repeater, a delayer, and/or a diode. - Used to send an electrical charge by being pressed. Stays activated for approximately a second before shutting off again. + Used to send an electrical charge by being pressed. Stays activated for approximately a second before shutting off again. - Used to hold and shoot out items in a random order when given a Redstone charge. + Used to hold and shoot out items in a random order when given a Redstone charge. - Plays a note when triggered. Hit it to change the pitch of the note. Placing this on top of different blocks will change the type of instrument. + Plays a note when triggered. Hit it to change the pitch of the note. Placing this on top of different blocks will change the type of instrument. - Used to guide minecarts. + Used to guide minecarts. - When powered, accelerates minecarts that pass over it. When unpowered, causes minecarts to stop on it. + When powered, accelerates minecarts that pass over it. When unpowered, causes minecarts to stop on it. - Functions like a Pressure Plate (sends a Redstone signal when powered) but can only be activated by a minecart. + Functions like a Pressure Plate (sends a Redstone signal when powered) but can only be activated by a Minecart. - Used to transport you, an animal, or a monster along rails. + Used to transport you, an animal, or a monster along rails. - Used to transport goods along rails. + Used to transport goods along rails. - Will move along rails and can push other minecarts when coal is put in it. + Will move along rails and can push other minecarts when coal is put in it. - Used to travel in water more quickly than swimming. + Used to travel in water more quickly than swimming. - Collected from sheep, and can be colored with dyes. + Collected from sheep, and can be colored with dyes. - Used as a building material and can be colored with dyes. This recipe is not recommended because Wool can be easily obtained from Sheep. + Used as a building material and can be colored with dyes. This recipe is not recommended because Wool can be easily obtained from Sheep. - Used as a dye to create black wool. + Used as a dye to create black wool. - Used as a dye to create green wool. + Used as a dye to create green wool. - Used as a dye to create brown wool, as an ingredient in cookies, or to grow Cocoa Pods. + Used as a dye to create brown wool, as an ingredient in cookies, or to grow Cocoa Pods. - Used as a dye to create silver wool. + Used as a dye to create silver wool. - Used as a dye to create yellow wool. + Used as a dye to create yellow wool. - Used as a dye to create red wool. + Used as a dye to create red wool. - Used to instantly grow crops, trees, tall grass, huge mushrooms and flowers, and can be used in dye recipes. + Used to instantly grow crops, trees, tall grass, huge mushrooms and flowers, and can be used in dye recipes. - Used as a dye to create pink wool. + Used as a dye to create pink wool. - Used as a dye to create orange wool. + Used as a dye to create orange wool. - Used as a dye to create lime wool. + Used as a dye to create lime wool. - Used as a dye to create gray wool. + Used as a dye to create gray wool. - Used as a dye to create light gray wool. + Used as a dye to create light gray wool. (Note: light gray dye can also be made by combining gray dye with bone meal, letting you make four light gray dyes from every ink sac instead of three.) - Used as a dye to create light blue wool. + Used as a dye to create light blue wool. - Used as a dye to create cyan wool. + Used as a dye to create cyan wool. - Used as a dye to create purple wool. + Used as a dye to create purple wool. - Used as a dye to create magenta wool. + Used as a dye to create magenta wool. - Used as dye to create Blue Wool. + Used as dye to create Blue Wool. - Plays Music Discs. + Plays Music Discs. - Use these to create very strong tools, weapons or armor. + Use these to create very strong tools, weapons or armor. - Used to create brighter light than torches. Melts snow/ice and can be used underwater. + Used to create brighter light than torches. Melts snow/ice and can be used underwater. - Used to create books and maps. + Used to create books and maps. - Can be used to create a bookshelves or enchanted to make Enchanted Books. + Can be used to create bookshelves or enchanted to make Enchanted Books. - Allows the creation of more powerful enchantments when placed around the Enchantment Table. + Allows the creation of more powerful enchantments when placed around the Enchantment Table. - Used as decoration. + Used as decoration. - Can be mined with an iron pickaxe or better, then smelted in a furnace to produce gold ingots. + Can be mined with an iron pickaxe or better, then smelted in a furnace to produce gold ingots. - Can be mined with a stone pickaxe or better, then smelted in a furnace to produce iron ingots. + Can be mined with a stone pickaxe or better, then smelted in a furnace to produce iron ingots. - Can be mined with a pickaxe to collect coal. + Can be mined with a pickaxe to collect coal. - Can be mined with a stone pickaxe or better to collect lapis lazuli. + Can be mined with a stone pickaxe or better to collect lapis lazuli. - Can be mined with an iron pickaxe or better to collect diamonds. + Can be mined with an iron pickaxe or better to collect diamonds. - Can be mined with an iron pickaxe or better to collect redstone dust. + Can be mined with an iron pickaxe or better to collect redstone dust. - Can be mined with a pickaxe to collect cobblestone. + Can be mined with a pickaxe to collect cobblestone. - Collected using a shovel. Can be used for construction. + Collected using a shovel. Can be used for construction. - Can be planted and it will eventually grow into a tree. + Can be planted and it will eventually grow into a tree. - This cannot be broken. + This cannot be broken. - Sets fire to anything that touches it. Can be collected in a bucket. + Sets fire to anything that touches it. Can be collected in a bucket. - Collected using a shovel. Can be smelted into glass using the furnace. Is affected by gravity if there is no other tile underneath it. + Collected using a shovel. Can be smelted into glass using the furnace. Is affected by gravity if there is no other tile underneath it. - Collected using a shovel. Sometimes produces flint when dug up. Is affected by gravity if there is no other tile underneath it. + Collected using a shovel. Sometimes produces flint when dug up. Is affected by gravity if there is no other tile underneath it. - Chopped using an axe, and can be crafted into planks or used as a fuel. + Chopped using an axe, and can be crafted into planks or used as a fuel. - Created in a furnace by smelting sand. Can be used for construction, but will break if you try to mine it. + Created in a furnace by smelting sand. Can be used for construction, but will break if you try to mine it. - Mined from stone using a pickaxe. Can be used to construct a furnace or stone tools. + Mined from stone using a pickaxe. Can be used to construct a furnace or stone tools. - Baked from clay in a furnace. + Baked from clay in a furnace. - Can be baked into bricks in a furnace. + Can be baked into bricks in a furnace. - When broken drops clay balls which can be baked into bricks in a furnace. + When broken drops clay balls which can be baked into bricks in a furnace. - A compact way to store snowballs. + A compact way to store snowballs. - Can be dug with a shovel to create snowballs. + Can be dug with a shovel to create snowballs. - Sometimes produces wheat seeds when broken. + Sometimes produces wheat seeds when broken. - Can be crafted into a dye. + Can be crafted into a dye. - Can be crafted with a bowl to make stew. + Can be crafted with a bowl to make stew. - Can only be mined with a diamond pickaxe. Is produced by the meeting of water and still lava, and is used to build a portal. + Can only be mined with a diamond pickaxe. Is produced by the meeting of water and still lava, and is used to build a portal. - Spawns monsters into the world. + Spawns monsters into the world. - Is placed on the ground to carry an electrical charge. When brewed with a potion it will increase the duration of the effect. + Is placed on the ground to carry an electrical charge. When brewed with a potion it will increase the duration of the effect. - When fully grown, crops can be harvested to collect wheat. + When fully grown, crops can be harvested to collect wheat. - Ground that has been prepared ready to plant seeds. + Ground that has been prepared ready to plant seeds. - Can be cooked in a furnace to create a green dye. + Can be cooked in a furnace to create a green dye. - Can be crafted to create sugar. + Can be crafted to create sugar. - Can be worn as a helmet or crafted with a torch to create a Jack-O-Lantern. It is also the main ingredient in Pumpkin Pie. + Can be worn as a helmet or crafted with a torch to create a Jack-O-Lantern. It is also the main ingredient in Pumpkin Pie. - Burns forever if set alight. + Burns forever if set alight. - Slows the movement of anything walking over it. + Slows the movement of anything walking over it. - Standing in the portal allows you to pass between the Overworld and the Nether. + Standing in the portal allows you to pass between the Overworld and the Nether. - Used as a fuel in a furnace, or crafted to make a torch. + Used as a fuel in a furnace, or crafted to make a torch. - Collected by killing a spider, and can be crafted into a Bow or Fishing Rod, or placed on the ground to create Tripwire. + Collected by killing a spider, and can be crafted into a Bow or Fishing Rod, or placed on the ground to create Tripwire. - Collected by killing a chicken, and can be crafted into an arrow. + Collected by killing a chicken, and can be crafted into an arrow. - Collected by killing a Creeper, and can be crafted into TNT or used as an ingredient for brewing potions. + Collected by killing a Creeper, and can be crafted into TNT or used as an ingredient for brewing potions. - Can be planted in farmland to grow crops. Make sure there's enough light for the seeds to grow! + Can be planted in farmland to grow crops. Make sure there's enough light for the seeds to grow! - Harvested from crops, and can be used to craft food items. + Harvested from crops, and can be used to craft food items. - Collected by digging gravel, and can be used to craft a flint and steel. + Collected by digging gravel, and can be used to craft a flint and steel. - When used on a pig it allows you to ride the pig. The pig can then be steered using a Carrot on a Stick. + When used on a pig it allows you to ride the pig. The pig can then be steered using a Carrot on a Stick. - Collected by digging snow, and can be thrown. + Collected by digging snow, and can be thrown. - Collected by killing a cow, and can be crafted into armor or used to make Books. + Collected by killing a cow, and can be crafted into armor or used to make Books. - Collected by killing a Slime, and used as an ingredient for brewing potions or crafted to make Sticky Pistons. + Collected by killing a Slime, and used as an ingredient for brewing potions or crafted to make Sticky Pistons. - Dropped randomly by chickens, and can be crafted into food items. + Dropped randomly by chickens, and can be crafted into food items. - Collected by mining Glowstone, and can be crafted to make Glowstone blocks again or brewed with a potion to increase the potency of the effect. + Collected by mining Glowstone, and can be crafted to make Glowstone blocks again or brewed with a potion to increase the potency of the effect. - Collected by killing a Skeleton. Can be crafted into bone meal. Can be fed to a wolf to tame it. + Collected by killing a Skeleton. Can be crafted into bone meal. Can be fed to a wolf to tame it. - Collected by getting a Skeleton to kill a Creeper. Can be played in a jukebox. + Collected by getting a Skeleton to kill a Creeper. Can be played in a jukebox. - Extinguishes fire and helps crops grow. Can be collected in a bucket. + Extinguishes fire and helps crops grow. Can be collected in a bucket. - When broken sometimes drops a sapling which can then be replanted to grow into a tree. + When broken sometimes drops a sapling which can then be replanted to grow into a tree. - Found in dungeons, can be used for construction and decoration. + Found in dungeons, can be used for construction and decoration. - Used to obtain wool from sheep and harvest leaf blocks. + Used to obtain wool from sheep and harvest leaf blocks. - When powered (using a button, a lever, a pressure plate, a redstone torch, or redstone with any one of these), a piston extends if it can and pushes blocks. + When powered (using a button, a lever, a pressure plate, a redstone torch, or redstone with any one of these), a piston extends if it can and pushes blocks. - When powered (using a button, a lever, a pressure plate, a redstone torch, or redstone with any one of these), a piston extends if it can and pushes blocks. When it retracts it pulls back the block touching the extended part of the piston. + When powered (using a button, a lever, a pressure plate, a redstone torch, or redstone with any one of these), a piston extends if it can and pushes blocks. When it retracts it pulls back the block touching the extended part of the piston. - Made from Stone blocks, and commonly found in Strongholds. + Made from Stone blocks, and commonly found in Strongholds. - Used as a barrier, similar to fences. + Used as a barrier, similar to fences. - Similar to a door, but used primarily with fences. + Similar to a door, but used primarily with fences. - Can be crafted from Melon Slices. + Can be crafted from Melon Slices. - Transparent blocks that can be used as an alternative to Glass Blocks. + Transparent blocks that can be used as an alternative to Glass Blocks. - Can be planted to grow pumpkins. + Can be planted to grow pumpkins. - Can be planted to grow melons. + Can be planted to grow melons. - Dropped by Enderman when they die. When thrown, the player will be teleported to the position the Ender Pearl lands at, and will lose some health. + Dropped by Enderman when they die. When thrown, the player will be teleported to the position the Ender Pearl lands at, and will lose some health. - A block of dirt with grass growing on top. Collected using a shovel. Can be used for construction. + A block of dirt with grass growing on top. Collected using a shovel. Can be used for construction. - Can be used for construction and decoration. + Can be used for construction and decoration. - Slows movement when walking through it. Can be destroyed using shears to collect string. + Slows movement when walking through it. Can be destroyed using shears to collect string. - Spawns a Silverfish when destroyed. May also spawn Silverfish if nearby to another Silverfish being attacked. + Spawns a Silverfish when destroyed. May also spawn Silverfish if nearby to another Silverfish being attacked. - Grows over time when placed. Can be collected using shears. Can be climbed like a ladder. + Grows over time when placed. Can be collected using shears. Can be climbed like a ladder. - Slippery when walked on. Turns into water if above another block when destroyed. Melts if close enough to a light source or when placed in The Nether. + Slippery when walked on. Turns into water if above another block when destroyed. Melts if close enough to a light source or when placed in The Nether. - Can be used as decoration. + Can be used as decoration. - Used in potion brewing, and for locating Strongholds. Dropped by Blazes who tend to be found near or in Nether Fortresses. + Used in potion brewing, and for locating Strongholds. Dropped by Blazes who tend to be found near or in Nether Fortresses. - Used in potion brewing. Dropped by Ghasts when they die. + Used in potion brewing. Dropped by Ghasts when they die. - Dropped by Zombie Pigmen when they die. Zombie Pigmen can be found in the Nether. Used as an ingredient for brewing potions. + Dropped by Zombie Pigmen when they die. Zombie Pigmen can be found in the Nether. Used as an ingredient for brewing potions. - Used in potion brewing. This can be found naturally growing in Nether Fortresses. It can also be planted on Soul Sand. + Used in potion brewing. This can be found naturally growing in Nether Fortresses. It can also be planted on Soul Sand. - When used, can have various effects, depending on what it is used on. + When used, can have various effects, depending on what it is used on. - Can be filled with water, and used as the starting ingredient for a potion in the Brewing Stand. + Can be filled with water, and used as the starting ingredient for a potion in the Brewing Stand. - This is a poisonous food and brewing item. Dropped when a Spider or Cave Spider is killed by a player. + This is a poisonous food and brewing item. Dropped when a Spider or Cave Spider is killed by a player. - Used in potion brewing, mainly to create potions with a negative effect. + Used in potion brewing, mainly to create potions with a negative effect. - Used in potion brewing, or crafted with other items to make Eye of Ender or Magma Cream. + Used in potion brewing, or crafted with other items to make Eye of Ender or Magma Cream. - Used in potion brewing. + Used in potion brewing. - Used for making Potions and Splash Potions. + Used for making Potions and Splash Potions. - Filled with water by rain or with a bucket of water, and can then be used to fill Glass Bottles with water. + Filled with water by rain or with a bucket of water, and can then be used to fill Glass Bottles with water. - When thrown, will show the direction to an End Portal. When twelve of these are placed in the End Portal Frames, the End Portal will be activated. + When thrown, will show the direction to an End Portal. When twelve of these are placed in the End Portal Frames, the End Portal will be activated. - Used in potion brewing. + Used in potion brewing. - Similar to Grass Blocks, but very good for growing mushrooms on. + Similar to Grass Blocks, but very good for growing mushrooms on. - Floats on water, and can be walked on. + Floats on water, and can be walked on. - Used to build Nether Fortresses. Immune to Ghast's fireballs. + Used to build Nether Fortresses. Immune to Ghast's fireballs. - Used in Nether Fortresses. + Used in Nether Fortresses. - Found in Nether Fortresses, and will drop Nether Wart when broken. + Found in Nether Fortresses, and will drop Nether Wart when broken. - This allows players to enchant Swords, Pickaxes, Axes, Shovels, Bows and Armor, using the player's Experience Points. + This allows players to enchant Swords, Pickaxes, Axes, Shovels, Bows and Armor, using the player's Experience Points. - This can be activated using twelve Eye of Ender, and will allow the player to travel to The End dimension. + This can be activated using twelve Eye of Ender, and will allow the player to travel to The End dimension. - Used to form an End Portal. + Used to form an End Portal. - A block type found in The End. It has a very high blast resistance, so is useful for building with. + A block type found in The End. It has a very high blast resistance, so is useful for building with. - This block is created by the defeat of the Dragon in The End. + This block is created by the defeat of the Dragon in The End. - When thrown, it drops Experience Orbs which increase your experience points when collected. + When thrown, it drops Experience Orbs which increase your experience points when collected. - Useful for setting things on fire, or for indiscriminately starting fires when fired from a Dispenser. + Useful for setting things on fire, or for indiscriminately starting fires when fired from a Dispenser. - These are similar to a display case, and will display the item or block placed in it. + These are similar to a display case, and will display the item or block placed in it. - When thrown can spawn a creature of the type indicated. + When thrown can spawn a creature of the type indicated. - - Used for making long staircases. Two slabs placed on top of each other will create a normal-sized double slab block. + + Used for making long staircases. Two slabs placed on top of each other will create a normal-sized double slab block. - - Used for making long staircases. Two slabs placed on top of each other will create a normal-sized double slab block. + + Used for making long staircases. Two slabs placed on top of each other will create a normal-sized double slab block. - - Created by smelting Netherrack in a furnace. Can be crafted into Nether Brick blocks. + + Created by smelting Netherrack in a furnace. Can be crafted into Nether Brick blocks. - - When powered they emit light. + + When powered they emit light. - - Can be farmed to collect Cocoa Beans. + + Can be farmed to collect Cocoa Beans. - Mob Heads can be placed as a decoration, or worn as a mask in the helmet slot. - - - Squid - - - Drops ink sacs when killed. - - - Cow - - - Drops leather when killed. Can also be milked with a bucket. - - - Sheep - - - Drops wool when sheared (if it has not already been sheared). Can be dyed to make its wool a different color. - - - Chicken - - - Drops feathers when killed, and also randomly lays eggs. - - - Pig - - - Drops porkchops when killed. Can be ridden by using a saddle. - - - Wolf - - - Docile until attacked, when they will attack you back. Can be tamed using bones which causes the wolf to follow you around and attack anything that attacks you. - - - Creeper - - - Explodes if you get too close! - - - Skeleton - - - Fires arrows at you. Drops arrows when killed. - - - Spider - - - Attacks you when you are close to it. Can climb walls. Drops string when killed. - - - Zombie - - - Attacks you when you are close to it. - - - Zombie Pigman - - - Initially docile, but will attack in groups if you attack one. - - - Ghast - - - Fires flaming balls at you that explode on contact. - - - Slime - - - Split into smaller Slimes when damaged. - - - Enderman - - - Will attack you if you look at it. Can also move blocks around. - - - Silverfish - - - Attracts nearby hidden Silverfish when attacked. Hides in stone blocks. - - - Cave Spider - - - Has a venomous bite. - - - Mooshroom - - - Makes mushroom stew when used with a bowl. Drops mushrooms and becomes a normal cow when sheared. - - - Snow Golem - - - The Snow Golem can be created by players using snow blocks and a pumpkin. They will throw snowballs at their creators enemies. - - - Ender Dragon - - - This is a large black dragon found in The End. - - - Blaze - - - These are enemies found in the Nether, mostly inside Nether Fortresses. They will drop Blaze Rods when killed. - - - Magma Cube - - - These can be found in The Nether. Similar to Slimes, they will break up into smaller versions when killed. - - - Villager + Mob Heads can be placed as a decoration, or worn as a mask in the helmet slot. + + Used to execute commands. + + + Projects a beam of light into the sky and can provide Status Effects to nearby players. + + + Stores blocks and items inside. Place two chest side by side to create a larger chest with double capacity. The trapped chest also creates a Redstone charge when opened. + + + Provides a Redstone charge. The charge will be stronger if more items are on the plate. + + + Provides a Redstone charge. The charge will be stronger if more items are on the plate. Requires more weight than the light plate. + + + Used as a redstone power source. Can be crafted back into Redstone. + + + Used to catch items or to transfer items into and out of containers. + + + A type of rail that can enable or disable Minecarts with Hoppers and trigger Minecarts with TNT. + + + Used to hold and drop items, or push items into another container, when given a Redstone charge. + + + Colorful blocks crafted by dyeing Hardened clay. + + + Can be fed to Horses, Donkeys or Mules to heal up to 10 Hearts. Speeds up the growth of foals. + + + Created by smelting Clay in a furnace. + + + Crafted from glass and a dye. + + + Crafted from Stained Glass + + + A compact way of storing Coal. Can be used as fuel in a Furnace. + + + + Squid + + + Drops ink sacs when killed. + + + Cow + + + Drops leather when killed. Can also be milked with a bucket. + + + Sheep + + + Drops wool when sheared (if it has not already been sheared). Can be dyed to make its wool a different color. + + + Chicken + + + Drops feathers when killed, and also randomly lays eggs. + + + Pig + + + Drops porkchops when killed. Can be ridden by using a saddle. + + + Wolf + + + Docile until attacked, when they will attack you back. Can be tamed using bones which causes the wolf to follow you around and attack anything that attacks you. + + + Creeper + + + Explodes if you get too close! + + + Skeleton + + + Fires arrows at you. Drops arrows when killed. + + + Spider + + + Attacks you when you are close to it. Can climb walls. Drops string when killed. + + + Zombie + + + Attacks you when you are close to it. + + + Zombie Pigman + + + Initially docile, but will attack in groups if you attack one. + + + Ghast + + + Fires flaming balls at you that explode on contact. + + + Slime + + + Split into smaller Slimes when damaged. + + + Enderman + + + Will attack you if you look at it. Can also move blocks around. + + + Silverfish + + + Attracts nearby hidden Silverfish when attacked. Hides in stone blocks. + + + Cave Spider + + + Has a venomous bite. + + + Mooshroom + + + Makes mushroom stew when used with a bowl. Drops mushrooms and becomes a normal cow when sheared. + + + Snow Golem + + + The Snow Golem can be created by players using snow blocks and a pumpkin. They will throw snowballs at their creators enemies. + + + Ender Dragon + + + This is a large black dragon found in The End. + + + Blaze + + + These are enemies found in the Nether, mostly inside Nether Fortresses. They will drop Blaze Rods when killed. + + + Magma Cube + + + These can be found in The Nether. Similar to Slimes, they will break up into smaller versions when killed. + + + Villager + + + + Ocelot + + + These can be found in Jungles. They can be tamed by feeding them Raw Fish. You will need to let the Ocelot approach you though, since any sudden movements will scare it away. + + + Iron Golem + + + Appear in Villages to protect them, and can be created using Iron Blocks and Pumpkins. + - - Ocelot - - - These can be found in Jungles. They can be tamed by feeding them Raw Fish. You will need to let the Ocelot approach you though, since any sudden movements will scare it away. - - - Iron Golem - - - Appear in Villages to protect them, and can be created using Iron Blocks and Pumpkins. - + + Bat + + + These flying creatures are found in caverns or other large enclosed spaces. + + + Witch + + + These enemies can be found in swamps and attack you by throwing Potions. They drop Potions when killed. + + + Horse + + + These animals can be tamed and can then be ridden. + + + Donkey + + + These animals can be tamed and can then be ridden. They can have a chest attached. + + + Mule + + + Born when a Horse and a Donkey breed. These animals can be tamed and can then be ridden and carry chests. + + + Zombie Horse + + + Skeleton Horse + + + Wither + + + These are crafted from Wither Skulls and Soul Sand. They fire exploding skulls at you. +  @@ -2006,6 +2208,9 @@ Can also be used for low-level lighting. Map + + Empty Map + Music Disc - "13" @@ -2159,6 +2364,42 @@ Can also be used for low-level lighting. Creeper Head + + Nether Star + + + Firework Rocket + + + Firework Star + + + Redstone Comparator + + + Minecart with TNT + + + Minecart with Hopper + + + Iron Horse Armor + + + Gold Horse Armor + + + Diamond Horse Armor + + + Lead + + + Name Tag + + + + Stone @@ -2183,6 +2424,9 @@ Can also be used for low-level lighting. Jungle Wood Planks + + Wood Planks (any type) + Sapling @@ -2333,17 +2577,13 @@ Can also be used for low-level lighting. Block of Gold - A compact way of storing Gold. - A compact way of storing Iron. - - - + Block of Iron @@ -2382,7 +2622,6 @@ Can also be used for low-level lighting. Nether Brick Slab - Bricks @@ -2401,7 +2640,6 @@ Can also be used for low-level lighting. Torch - Torch (Coal) @@ -2429,11 +2667,9 @@ Can also be used for low-level lighting. Block of Diamond - A compact way of storing Diamonds. - Crafting Table @@ -2530,11 +2766,9 @@ Can also be used for low-level lighting. Lapis Lazuli Block - A compact way of storing Lapis Lazuli. - Dispenser @@ -2697,86 +2931,370 @@ Can also be used for low-level lighting. Skull - - - Current Controls + + + + Command Block - - Layout + + Beacon - - Move/Sprint + + Trapped Chest - - Look + + Weighted Pressure Plate (Light) - - Pause + + Weighted Pressure Plate (Heavy) - - Jump + + Redstone Comparator - - Jump/Fly Up + + Daylight Sensor - - Inventory + + Block of Redstone - - Cycle Held Item + + Hopper - - Action + + Activator Rail - - Use + + Dropper - - Crafting + + Stained Clay - - Drop + + Hay Bale - - Sneak + + Hardened Clay - - Sneak/Fly Down + + Block of Coal - - Change Camera Mode + + + Black Stained Clay - - Players/Invite + + Red Stained Clay - - Movement (When Flying) + + Green Stained Clay - - Layout 1 + + Brown Stained Clay - - Layout 2 + + Blue Stained Clay - - Layout 3 + + Purple Stained Clay - - ]]> + + Cyan Stained Clay - - ]]> + + Light Gray Stained Clay - - ]]> + + Gray Stained Clay - - ]]> + + Pink Stained Clay - - ]]> + + Lime Stained Clay - + + Yellow Stained Clay + + + Light Blue Stained Clay + + + Magenta Stained Clay + + + Orange Stained Clay + + + White Stained Clay + + + + Stained Glass + + + Black Stained Glass + + + Red Stained Glass + + + Green Stained Glass + + + Brown Stained Glass + + + Blue Stained Glass + + + Purple Stained Glass + + + Cyan Stained Glass + + + Light Gray Stained Glass + + + Gray Stained Glass + + + Pink Stained Glass + + + Lime Stained Glass + + + Yellow Stained Glass + + + Light Blue Stained Glass + + + Magenta Stained Glass + + + Orange Stained Glass + + + White Stained Glass + + + + Stained Glass Pane + + + Black Stained Glass Pane + + + Red Stained Glass Pane + + + Green Stained Glass Pane + + + Brown Stained Glass Pane + + + Blue Stained Glass Pane + + + Purple Stained Glass Pane + + + Cyan Stained Glass Pane + + + Light Gray Stained Glass Pane + + + Gray Stained Glass Pane + + + Pink Stained Glass Pane + + + Lime Stained Glass Pane + + + Yellow Stained Glass Pane + + + Light Blue Stained Glass Pane + + + Magenta Stained Glass Pane + + + Orange Stained Glass Pane + + + White Stained Glass Pane + + + + + Small Ball + + + Large Ball + + + Star-shaped + + + Creeper-shaped + + + Burst + + + Unknown Shape + + + + Black + + + Red + + + Green + + + Brown + + + Blue + + + Purple + + + Cyan + + + Light Gray + + + Gray + + + Pink + + + Lime + + + Yellow + + + Light Blue + + + Magenta + + + Orange + + + White + + + Custom + + + + Fade to + + + Twinkle + + + Trail + + + Flight Duration: +  + + Current Controls + + + Layout + + + Move/Sprint + + + Look + + + Pause + + + Jump + + + Jump/Fly Up + + + Inventory + + + Cycle Held Item + + + Action + + + Use + + + Crafting + + + Drop + + + Sneak + + + Sneak/Fly Down + + + Change Camera Mode + + + Players/Invite + + + Movement (When Flying) + + + Layout 1 + + + Layout 2 + + + Layout 3 + + + ]]> + + + ]]> + + + ]]> + + + ]]> + + + ]]> + + ]]> @@ -2829,7 +3347,7 @@ Can also be used for low-level lighting. {*B*}Press{*CONTROLLER_VK_A*} to start the tutorial.{*B*} - Press{*CONTROLLER_VK_B*} if you think you are ready to play on your own. +Press{*CONTROLLER_VK_B*} if you think you are ready to play on your own. @@ -2859,7 +3377,7 @@ At night monsters come out, make sure to build a shelter before that happens. As you collect and craft more items, your inventory will fill up.{*B*} - Press{*CONTROLLER_ACTION_INVENTORY*} to open the inventory. +Press{*CONTROLLER_ACTION_INVENTORY*} to open the inventory. As you move around, mine and attack, you will deplete your food bar{*ICON_SHANK_01*}. Sprinting and sprint jumping use a lot more food than walking and jumping normally. @@ -2907,19 +3425,13 @@ At night monsters come out, make sure to build a shelter before that happens.Open the container - - Night time can approach quickly, and it is dangerous to be outside unprepared. You can craft armor and weapons, but it is sensible to have a safe shelter. - + Night time can approach quickly, and it is dangerous to be outside unprepared. You can craft armor and weapons, but it is sensible to have a safe shelter. - - Nearby there is an abandoned Miner's shelter that you can complete to be safe overnight. - + Nearby there is an abandoned Miner's shelter that you can complete to be safe overnight. - - You will need to collect the resources to complete the shelter. Walls and roof can be made of any tile type, but you will want to create a door, some windows and lighting. - + You will need to collect the resources to complete the shelter. Walls and roof can be made of any tile type, but you will want to create a door, some windows and lighting. Use your pickaxe to mine some stone blocks. Stone blocks will produce cobblestone when mined. If you collect 8 cobblestone blocks you can build a furnace. You may need to dig through some dirt to reach the stone, so use your shovel for this.{*StoneIcon*} @@ -2946,607 +3458,395 @@ At night monsters come out, make sure to build a shelter before that happens.It can get very dark at night, so you will want some lighting inside your shelter so that you can see. Craft a torch now from sticks and charcoal using the crafting interface.{*TorchIcon*} - - You have completed the first part of the tutorial. - + You have completed the first part of the tutorial. - - {*B*} - Press{*CONTROLLER_VK_A*} to continue with the tutorial.{*B*} - Press{*CONTROLLER_VK_B*} if you think you are ready to play on your own. - + {*B*} +Press{*CONTROLLER_VK_A*} to continue with the tutorial.{*B*} +Press{*CONTROLLER_VK_B*} if you think you are ready to play on your own. - - This is your inventory. It shows items available for use in your hand, and all the other items that you are carrying. Your armor is also shown here. - - + This is your inventory. It shows items available for use in your hand, and all the other items that you are carrying. Your armor is also shown here. {*B*} - Press{*CONTROLLER_VK_A*} to continue.{*B*} - Press{*CONTROLLER_VK_B*} if you already know how to use the inventory. - +Press{*CONTROLLER_VK_A*} to continue.{*B*} +Press{*CONTROLLER_VK_B*} if you already know how to use the inventory. - - Use{*CONTROLLER_MENU_NAVIGATE*} to move the pointer. Use{*CONTROLLER_VK_A*} to pick an item under the pointer. - If there is more than one item here this will pick them all up, or you can use{*CONTROLLER_VK_X*} to pick up just half of them. - + Use{*CONTROLLER_MENU_NAVIGATE*} to move the pointer. Use{*CONTROLLER_VK_A*} to pick an item under the pointer. +If there is more than one item here this will pick them all up, or you can use{*CONTROLLER_VK_X*} to pick up just half of them. - - Move this item with the pointer over another space in the inventory and place it down using{*CONTROLLER_VK_A*}. - With multiple items on the pointer, use{*CONTROLLER_VK_A*} to place them all, or{*CONTROLLER_VK_X*} to place just one. - + Move this item with the pointer over another space in the inventory and place it down using{*CONTROLLER_VK_A*}. +With multiple items on the pointer, use{*CONTROLLER_VK_A*} to place them all, or{*CONTROLLER_VK_X*} to place just one. - - If you move the pointer outside the edge of the interface with an item on the pointer, you can drop the item. - + If you move the pointer outside the edge of the interface with an item on the pointer, you can drop the item. - - If you want more information about an item, move the pointer over the item and press{*CONTROLLER_VK_RT*} . - + If you want more information about an item, move the pointer over the item and press{*CONTROLLER_ACTION_MENU_PAGEDOWN*} . - - Press{*CONTROLLER_VK_B*} now to exit the inventory. - + Press{*CONTROLLER_VK_B*} now to exit the inventory. - - This is the creative mode inventory. It shows items available for use in your hand, and all the other items that you can choose from. - + This is the creative mode inventory. It shows items available for use in your hand, and all the other items that you can choose from. {*B*} - Press{*CONTROLLER_VK_A*} to continue.{*B*} - Press{*CONTROLLER_VK_B*} if you already know how to use the creative mode inventory. - +Press{*CONTROLLER_VK_A*} to continue.{*B*} +Press{*CONTROLLER_VK_B*} if you already know how to use the creative mode inventory. - - Use{*CONTROLLER_MENU_NAVIGATE*} to move the pointer. - When on the item list, use{*CONTROLLER_VK_A*} to pick an item under the pointer, and use{*CONTROLLER_VK_Y*} to pick up a full stack of that item. - + Use{*CONTROLLER_MENU_NAVIGATE*} to move the pointer. +When on the item list, use{*CONTROLLER_VK_A*} to pick an item under the pointer, and use{*CONTROLLER_VK_Y*} to pick up a full stack of that item. - - The pointer will automatically move over a space in the use row. You can place it down using{*CONTROLLER_VK_A*}. Once you have placed the item, the pointer will return to the item list where you can select another item. - + The pointer will automatically move over a space in the use row. You can place it down using{*CONTROLLER_VK_A*}. Once you have placed the item, the pointer will return to the item list where you can select another item. - - If you move the pointer outside the edge of the interface with an item on the pointer, you can drop the item into the world. To clear all items in the quick select bar, press{*CONTROLLER_VK_X*}. - + If you move the pointer outside the edge of the interface with an item on the pointer, you can drop the item into the world. To clear all items in the quick select bar, press{*CONTROLLER_VK_X*}. - - Scroll through the Group Type tabs at the top using{*CONTROLLER_VK_LB*} and{*CONTROLLER_VK_RB*} to select the group type of the item you wish to pickup. - + Scroll through the Group Type tabs at the top using{*CONTROLLER_VK_LB*} and{*CONTROLLER_VK_RB*} to select the group type of the item you wish to pickup. - - If you want more information about an item, move the pointer over the item and press{*CONTROLLER_VK_RT*} . - + If you want more information about an item, move the pointer over the item and press{*CONTROLLER_ACTION_MENU_PAGEDOWN*} . - - Press{*CONTROLLER_VK_B*} now to exit the creative mode inventory. - + Press{*CONTROLLER_VK_B*} now to exit the creative mode inventory. - - This is the crafting interface. This interface allows you to combine the items you've collected to make new items. - + This is the crafting interface. This interface allows you to combine the items you've collected to make new items. - {*B*} - Press{*CONTROLLER_VK_A*} to continue.{*B*} - Press{*CONTROLLER_VK_B*} if you already know how to craft. - + {*B*}Press{*CONTROLLER_VK_A*} to continue.{*B*} +Press{*CONTROLLER_VK_B*} if you already know how to craft. {*B*} - Press{*CONTROLLER_VK_X*} to show the item description. - +Press{*CONTROLLER_VK_X*} to show the item description. {*B*} - Press{*CONTROLLER_VK_X*} to show the ingredients required to make the current item. - +Press{*CONTROLLER_VK_X*} to show the ingredients required to make the current item. {*B*} - Press{*CONTROLLER_VK_X*} to show the inventory again. - +Press{*CONTROLLER_VK_X*} to show the inventory again. - - Scroll through the Group Type tabs at the top using{*CONTROLLER_VK_LB*} and{*CONTROLLER_VK_RB*} to select the group type of the item you wish to craft, then use{*CONTROLLER_MENU_NAVIGATE*} to select the item to craft. - + Scroll through the Group Type tabs at the top using{*CONTROLLER_VK_LB*} and{*CONTROLLER_VK_RB*} to select the group type of the item you wish to craft, then use{*CONTROLLER_MENU_NAVIGATE*} to select the item to craft. - - The crafting area shows the items you require in order to craft the new item. Press{*CONTROLLER_VK_A*} to craft the item and place it in your inventory. - + The crafting area shows the items you require in order to craft the new item. Press{*CONTROLLER_VK_A*} to craft the item and place it in your inventory. - - You can craft a larger selection of items using a crafting table. Crafting on a table works in the same way as basic crafting, but you have a larger crafting area allowing more combinations of ingredients. - + You can craft a larger selection of items using a crafting table. Crafting on a table works in the same way as basic crafting, but you have a larger crafting area allowing more combinations of ingredients. - - The bottom right part of the crafting interface shows your inventory. This area can also show a description of the currently selected item, and the ingredients required to craft it. - + The bottom right part of the crafting interface shows your inventory. This area can also show a description of the currently selected item, and the ingredients required to craft it. - - The description of the currently selected item is now displayed. The description can give you an idea of what the item can be used for. - + The description of the currently selected item is now displayed. The description can give you an idea of what the item can be used for. - - The list of ingredients required to craft the selected item are now displayed. - + The list of ingredients required to craft the selected item are now displayed. The wood that you have collected can be crafted into planks. Select the planks icon and press{*CONTROLLER_VK_A*} to create them.{*PlanksIcon*} - - Now you have built a crafting table you should place it in the world to enable you to build a larger selection of items.{*B*} - Press{*CONTROLLER_VK_B*} now to exit the crafting interface. - + Now you have built a crafting table you should place it in the world to enable you to build a larger selection of items.{*B*} +Press{*CONTROLLER_VK_B*} now to exit the crafting interface. - - Press{*CONTROLLER_VK_LB*} and{*CONTROLLER_VK_RB*} to change to the group type of the items you wish to craft. Select the tools group.{*ToolsIcon*} - + Press{*CONTROLLER_VK_LB*} and{*CONTROLLER_VK_RB*} to change to the group type of the items you wish to craft. Select the tools group.{*ToolsIcon*} - - Press{*CONTROLLER_VK_LB*} and{*CONTROLLER_VK_RB*} to change to the group type of the items you wish to craft. Select the structures group.{*StructuresIcon*} - + Press{*CONTROLLER_VK_LB*} and{*CONTROLLER_VK_RB*} to change to the group type of the items you wish to craft. Select the structures group.{*StructuresIcon*} - - Use{*CONTROLLER_MENU_NAVIGATE*} to change to the item you wish to craft. Some items have multiple versions depending on the materials used. Select the wooden shovel.{*WoodenShovelIcon*} - + Use{*CONTROLLER_MENU_NAVIGATE*} to change to the item you wish to craft. Some items have multiple versions depending on the materials used. Select the wooden shovel.{*WoodenShovelIcon*} - - A lot of crafting can involve multiple steps. Now that you have some planks there are more items that you can craft. Use{*CONTROLLER_MENU_NAVIGATE*} to change to the item you wish to craft. Select the crafting table.{*CraftingTableIcon*} - + A lot of crafting can involve multiple steps. Now that you have some planks there are more items that you can craft. Use{*CONTROLLER_MENU_NAVIGATE*} to change to the item you wish to craft. Select the crafting table.{*CraftingTableIcon*} - - With the tools you have built you are off to a great start, and are able to collect a variety of different materials more efficiently.{*B*} - Press{*CONTROLLER_VK_B*} now to exit the crafting interface. - + With the tools you have built you are off to a great start, and are able to collect a variety of different materials more efficiently.{*B*} +Press{*CONTROLLER_VK_B*} now to exit the crafting interface. - - Some items can not be created using the crafting table, but require a furnace. Craft a furnace now.{*FurnaceIcon*} - + Some items can not be created using the crafting table, but require a furnace. Craft a furnace now.{*FurnaceIcon*} - - Place the furnace you have crafted in the world. You will want to put this inside your shelter.{*B*} - Press{*CONTROLLER_VK_B*} now to exit the crafting interface. - + Place the furnace you have crafted in the world. You will want to put this inside your shelter.{*B*} +Press{*CONTROLLER_VK_B*} now to exit the crafting interface. - - This is the furnace interface. A furnace allows you to change items by firing them. For example, you can turn iron ore into iron ingots in the furnace. - + This is the furnace interface. A furnace allows you to change items by firing them. For example, you can turn iron ore into iron ingots in the furnace. {*B*} - Press{*CONTROLLER_VK_A*} to continue.{*B*} - Press{*CONTROLLER_VK_B*} if you already know how to use a furnace. - +Press{*CONTROLLER_VK_A*} to continue.{*B*} +Press{*CONTROLLER_VK_B*} if you already know how to use a furnace. - - You need to put some fuel into the bottom slot of the furnace, and the item to be changed in the top slot. The furnace will then fire up and start working, putting the result in the right-hand slot. - + You need to put some fuel into the bottom slot of the furnace, and the item to be changed in the top slot. The furnace will then fire up and start working, putting the result in the right-hand slot. - - Many wooden items can be used as fuels, but not everything burns for the same time. You may also discover other items in the world that can be used as a fuel. - + Many wooden items can be used as fuels, but not everything burns for the same time. You may also discover other items in the world that can be used as a fuel. - - When your items have been fired, you can move them from the output area into your inventory. You should experiment with different ingredients to see what you can make. - + When your items have been fired, you can move them from the output area into your inventory. You should experiment with different ingredients to see what you can make. - - If you use wood as the ingredient then you can make charcoal. Put some fuel in the furnace and wood in the ingredient slot. It can take some time for the furnace to create the charcoal, so feel free to do something else and come back to check the progress. - + If you use wood as the ingredient then you can make charcoal. Put some fuel in the furnace and wood in the ingredient slot. It can take some time for the furnace to create the charcoal, so feel free to do something else and come back to check the progress. - - Charcoal can be used as a fuel, as well as being crafted into a torch with a stick. - + Charcoal can be used as a fuel, as well as being crafted into a torch with a stick. - - Placing sand in the ingredient slot allows you to make glass. Create some glass blocks to use as windows in your shelter. - + Placing sand in the ingredient slot allows you to make glass. Create some glass blocks to use as windows in your shelter. - - This is the brewing interface. You can use this to create potions that have a variety of different effects. - + This is the brewing interface. You can use this to create potions that have a variety of different effects. {*B*} - Press{*CONTROLLER_VK_A*} to continue.{*B*} - Press{*CONTROLLER_VK_B*} if you already know how to use the brewing stand. - +Press{*CONTROLLER_VK_A*} to continue.{*B*} +Press{*CONTROLLER_VK_B*} if you already know how to use the brewing stand. - - You brew potions by placing an ingredient in the top slot, and a potion or water bottle in the bottom slots (up to 3 can be brewed at one time). Once a valid combination is entered the brewing process will start and create the potion after a short time. - + You brew potions by placing an ingredient in the top slot, and a potion or water bottle in the bottom slots (up to 3 can be brewed at one time). Once a valid combination is entered the brewing process will start and create the potion after a short time. - - All potions start with a Water Bottle. Most potions are created by first using a Nether Wart to make an Awkward Potion, and will require at least one more ingredient to make the final potion. - + All potions start with a Water Bottle. Most potions are created by first using a Nether Wart to make an Awkward Potion, and will require at least one more ingredient to make the final potion. - - Once you have a potion you can modify its effects. Adding Redstone Dust increases the duration of its effect and adding Glowstone Dust can make its effect more powerful. - + Once you have a potion you can modify its effects. Adding Redstone Dust increases the duration of its effect and adding Glowstone Dust can make its effect more powerful. - - Adding Fermented Spider Eye corrupts the potion and can turn it into a potion with the opposite effect, and adding Gunpowder turns the potion into a Splash Potion which can be thrown to apply its affect to a nearby area. - + Adding Fermented Spider Eye corrupts the potion and can turn it into a potion with the opposite effect, and adding Gunpowder turns the potion into a Splash Potion which can be thrown to apply its affect to a nearby area. - - Create a Potion of Fire Resistance by first adding Nether Wart to a Water Bottle, and then adding Magma Cream. - + Create a Potion of Fire Resistance by first adding Nether Wart to a Water Bottle, and then adding Magma Cream. - - Press{*CONTROLLER_VK_B*} now to exit the brewing interface. - + Press{*CONTROLLER_VK_B*} now to exit the brewing interface. - - In this area there is a Brewing Stand, a Cauldron and a chest full of items for brewing. - + In this area there is a Brewing Stand, a Cauldron and a chest full of items for brewing. {*B*} - Press{*CONTROLLER_VK_A*} to learn more about brewing and potions.{*B*} - Press{*CONTROLLER_VK_B*} if you already know about brewing and potions. - +Press{*CONTROLLER_VK_A*} to learn more about brewing and potions.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about brewing and potions. - - The first step in brewing a potion is to create a Water Bottle. Take a Glass Bottle from the chest. - + The first step in brewing a potion is to create a Water Bottle. Take a Glass Bottle from the chest. - - You can fill a glass bottle from a Cauldron that has water in it, or from a block of water. Fill your glass bottle now by pointing at a water source and pressing{*CONTROLLER_ACTION_USE*}. - + You can fill a glass bottle from a Cauldron that has water in it, or from a block of water. Fill your glass bottle now by pointing at a water source and pressing{*CONTROLLER_ACTION_USE*}. - - If a cauldron becomes empty, you can refill it with a Water Bucket. - + If a cauldron becomes empty, you can refill it with a Water Bucket. - - Use the Brewing Stand to create a Potion of Fire Resistance. You will need a Water Bottle, Nether Wart and Magma Cream. - + Use the Brewing Stand to create a Potion of Fire Resistance. You will need a Water Bottle, Nether Wart and Magma Cream. - - With a potion in your hand, hold{*CONTROLLER_ACTION_USE*} to use it. For a normal potion you will drink it and apply the effect to yourself, and for a Splash potion you will throw it and apply the effect to creatures near where it hits. - Splash potions can be created by adding gunpowder to normal potions. - + With a potion in your hand, hold{*CONTROLLER_ACTION_USE*} to use it. For a normal potion you will drink it and apply the effect to yourself, and for a Splash potion you will throw it and apply the effect to creatures near where it hits. +Splash potions can be created by adding gunpowder to normal potions. - - Use your Potion of Fire Resistance on yourself. - + Use your Potion of Fire Resistance on yourself. - - Now that you are resistant to fire and lava, you should see if there are places you can get to that you couldn't before. - + Now that you are resistant to fire and lava, you should see if there are places you can get to that you couldn't before. - - This is the enchanting interface which you can use to add enchantments to weapons, armor and some tools. - + This is the enchanting interface which you can use to add enchantments to weapons, armor and some tools. {*B*} - Press{*CONTROLLER_VK_A*} to learn more about the enchanting interface.{*B*} - Press{*CONTROLLER_VK_B*} if you already know about the enchanting interface. - +Press{*CONTROLLER_VK_A*} to learn more about the enchanting interface.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about the enchanting interface. - - To enchant an item, first place it in the enchanting slot. Weapons, armor and some tools can be enchanted to add special effects such as improved damage resistance or increasing the number of items produced when mining a block. - + To enchant an item, first place it in the enchanting slot. Weapons, armor and some tools can be enchanted to add special effects such as improved damage resistance or increasing the number of items produced when mining a block. - - When an item is placed in the enchanting slot, the buttons on the right will change to show a selection of random enchantments. - + When an item is placed in the enchanting slot, the buttons on the right will change to show a selection of random enchantments. - - The number on the button represents the cost in experience levels to apply that enchantment to the item. If you do not have a high enough level the button will be disabled. - + The number on the button represents the cost in experience levels to apply that enchantment to the item. If you do not have a high enough level the button will be disabled. - - Select an enchantment and press{*CONTROLLER_VK_A*} to enchant the item. This will decrease your experience level by the cost of the enchantment. - + Select an enchantment and press{*CONTROLLER_VK_A*} to enchant the item. This will decrease your experience level by the cost of the enchantment. - - Although the enchantments are all random, some of the better enchantments are only available when you have a high experience level and have lots of bookcases around the Enchantment Table to increase its power. - + Although the enchantments are all random, some of the better enchantments are only available when you have a high experience level and have lots of bookcases around the Enchantment Table to increase its power. - - In this area there is an Enchantment Table and some other items to help you learn about enchanting. - + In this area there is an Enchantment Table and some other items to help you learn about enchanting. {*B*} - Press{*CONTROLLER_VK_A*} to learn more about enchanting.{*B*} - Press{*CONTROLLER_VK_B*} if you already know about enchanting. - +Press{*CONTROLLER_VK_A*} to learn more about enchanting.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about enchanting. - - Using an Enchantment Table allows you to add special effects such as increasing the number of items produced when mining a block, or improved damage resistance for weapons, armor and some tools. - + Using an Enchantment Table allows you to add special effects such as increasing the number of items produced when mining a block, or improved damage resistance for weapons, armor and some tools. - - Placing bookcases around the Enchantment Table increases its power and allows access to higher level enchantments. - + Placing bookcases around the Enchantment Table increases its power and allows access to higher level enchantments. - - Enchanting items costs Experience Levels, which can be built up by collecting Experience Orbs which are produced by killing monsters and animals, mining ores, breeding animals, fishing and smelting/cooking some things in a furnace. - + Enchanting items costs Experience Levels, which can be built up by collecting Experience Orbs which are produced by killing monsters and animals, mining ores, breeding animals, fishing and smelting/cooking some things in a furnace. - - You can also build experience levels using a Bottle O' Enchanting, which, when thrown, creates Experience Orbs around where it lands. These orbs can then be collected. - + You can also build experience levels using a Bottle O' Enchanting, which, when thrown, creates Experience Orbs around where it lands. These orbs can then be collected. - - In the chests in this area you can find some enchanted items, Bottles O' Enchanting, and some items that have yet to be enchanted for you to experiment with at the Enchantment Table. - + In the chests in this area you can find some enchanted items, Bottles O' Enchanting, and some items that have yet to be enchanted for you to experiment with at the Enchantment Table. - - You are now riding in a minecart. To exit the minecart, point the cursor at it and press{*CONTROLLER_ACTION_USE*} .{*MinecartIcon*} - + You are now riding in a minecart. To exit the minecart, point the cursor at it and press{*CONTROLLER_ACTION_USE*} .{*MinecartIcon*} {*B*} - Press{*CONTROLLER_VK_A*} to learn more about minecarts.{*B*} - Press{*CONTROLLER_VK_B*} if you already know about minecarts. - +Press{*CONTROLLER_VK_A*} to learn more about minecarts.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about minecarts. - - A minecart runs on rails. You can also craft a powered minecart with a furnace and a minecart with a chest in it. - {*RailIcon*} - + A minecart runs on rails. You can also craft a powered minecart with a furnace and a minecart with a chest in it.{*RailIcon*} - - You can also craft powered rails, which take power from redstone torches and circuits to accelerate the cart. These can be connected to switches, levers and pressure plates to make complex systems. - {*PoweredRailIcon*} - + You can also craft powered rails, which take power from redstone torches and circuits to accelerate the cart. These can be connected to switches, levers and pressure plates to make complex systems.{*PoweredRailIcon*} - - You are now sailing a boat. To exit the boat, point the cursor at it and press{*CONTROLLER_ACTION_USE*} .{*BoatIcon*} - + You are now sailing a boat. To exit the boat, point the cursor at it and press{*CONTROLLER_ACTION_USE*} .{*BoatIcon*} - - {*B*} - Press{*CONTROLLER_VK_A*} to learn more about boats.{*B*} - Press{*CONTROLLER_VK_B*} if you already know about boats. - + {*B*} +Press{*CONTROLLER_VK_A*} to learn more about boats.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about boats. - - A boat allows you to travel quicker over water. You can steer it using{*CONTROLLER_ACTION_MOVE*} and{*CONTROLLER_ACTION_LOOK*}. - {*BoatIcon*} - + A boat allows you to travel quicker over water. You can steer it using{*CONTROLLER_ACTION_MOVE*} and{*CONTROLLER_ACTION_LOOK*}.{*BoatIcon*} - - You are now using a fishing rod. Press{*CONTROLLER_ACTION_USE*} to use it.{*FishingRodIcon*} - + You are now using a fishing rod. Press{*CONTROLLER_ACTION_USE*} to use it.{*FishingRodIcon*} - - {*B*} - Press{*CONTROLLER_VK_A*} to learn more about fishing.{*B*} - Press{*CONTROLLER_VK_B*} if you already know about fishing. - + {*B*} +Press{*CONTROLLER_VK_A*} to learn more about fishing.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about fishing. - - Press{*CONTROLLER_ACTION_USE*} to cast your line and start fishing. Press{*CONTROLLER_ACTION_USE*} again to reel in the fishing line. - {*FishingRodIcon*} - + Press{*CONTROLLER_ACTION_USE*} to cast your line and start fishing. Press{*CONTROLLER_ACTION_USE*} again to reel in the fishing line.{*FishingRodIcon*} - - If you wait until the float sinks below the surface of the water before reeling in you can catch a fish. Fish can be eaten raw, or cooked by a furnace, to restore health. - {*FishIcon*} - + If you wait until the float sinks below the surface of the water before reeling in you can catch a fish. Fish can be eaten raw, or cooked by a furnace, to restore health.{*FishIcon*} - - As with many other tools a fishing rod has a fixed number of uses. Those uses are not limited to catching fish though. You should experiment with it to see what else can be caught or activated... - {*FishingRodIcon*} - + As with many other tools a fishing rod has a fixed number of uses. Those uses are not limited to catching fish though. You should experiment with it to see what else can be caught or activated...{*FishingRodIcon*} - - This is a bed. Press{*CONTROLLER_ACTION_USE*} while pointing at it at night to sleep through the night and awake in the morning.{*ICON*}355{*/ICON*} - + This is a bed. Press{*CONTROLLER_ACTION_USE*} while pointing at it at night to sleep through the night and awake in the morning.{*ICON*}355{*/ICON*} - - {*B*} - Press{*CONTROLLER_VK_A*} to learn more about beds.{*B*} - Press{*CONTROLLER_VK_B*} if you already know about beds. - + {*B*} +Press{*CONTROLLER_VK_A*} to learn more about beds.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about beds. - - A bed should be placed in a safe, well-lit place so that monsters do not wake you in the middle of the night. Once you have used a bed, if you die you will respawn at that bed. - {*ICON*}355{*/ICON*} - + A bed should be placed in a safe, well-lit place so that monsters do not wake you in the middle of the night. Once you have used a bed, if you die you will respawn at that bed. +{*ICON*}355{*/ICON*} - - If there are other players in your game, everyone must be in a bed at the same time to be able to sleep. - {*ICON*}355{*/ICON*} - + If there are other players in your game, everyone must be in a bed at the same time to be able to sleep. +{*ICON*}355{*/ICON*} - - In this area there are some simple Redstone and Piston circuits, and a chest with more items to extend these circuits. - + In this area there are some simple Redstone and Piston circuits, and a chest with more items to extend these circuits. - - {*B*} - Press{*CONTROLLER_VK_A*} to learn more about Redstone circuits and Pistons.{*B*} - Press{*CONTROLLER_VK_B*} if you already know about Redstone circuits and Pistons. - + {*B*} +Press{*CONTROLLER_VK_A*} to learn more about Redstone circuits and Pistons.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about Redstone circuits and Pistons. - - Levers, Buttons, Pressure Plates and Redstone Torches can all provide power to circuits, either by directly attaching them to the item you want to activate or by connecting them with Redstone dust. - + Levers, Buttons, Pressure Plates and Redstone Torches can all provide power to circuits, either by directly attaching them to the item you want to activate or by connecting them with Redstone dust. - - The position and direction that you place a power source can change how it affects the surrounding blocks. For example a Redstone torch on the side of a block can be turned off if the block is powered by another source. - + The position and direction that you place a power source can change how it affects the surrounding blocks. For example a Redstone torch on the side of a block can be turned off if the block is powered by another source. - - Redstone dust is collected by mining redstone ore with a pickaxe made of Iron, Diamond or Gold. You can use it to carry power up to 15 blocks, and it can travel up or down one block in height. - {*ICON*}331{*/ICON*} - + Redstone dust is collected by mining redstone ore with a pickaxe made of Iron, Diamond or Gold. You can use it to carry power up to 15 blocks, and it can travel up or down one block in height. +{*ICON*}331{*/ICON*} - - Redstone repeaters can be used to extend the distance that the power is carried, or put a delay in a circuit. - {*ICON*}356{*/ICON*} - + Redstone repeaters can be used to extend the distance that the power is carried, or put a delay in a circuit. +{*ICON*}356{*/ICON*} - - When powered, a Piston will extend, pushing up to 12 blocks. When they retract, Sticky Pistons can pull back one block of most types. - {*ICON*}33{*/ICON*} - + When powered, a Piston will extend, pushing up to 12 blocks. When they retract, Sticky Pistons can pull back one block of most types. +{*ICON*}33{*/ICON*} - - In the chest in this area there are some components for making circuits with pistons. Try using or completing the circuits in this area, or put together your own. There are more examples outside the tutorial area. - + In the chest in this area there are some components for making circuits with pistons. Try using or completing the circuits in this area, or put together your own. There are more examples outside the tutorial area. - - In this area there is a Portal to the Nether! - + In this area there is a Portal to the Nether! - - {*B*} - Press{*CONTROLLER_VK_A*} to learn more about Portals and The Nether.{*B*} - Press{*CONTROLLER_VK_B*} if you already know about Portals and The Nether. - + {*B*} +Press{*CONTROLLER_VK_A*} to learn more about Portals and The Nether.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about Portals and The Nether. - - Portals are created by placing Obsidian blocks into a frame four blocks wide and five blocks tall. The corner blocks are not required. - + Portals are created by placing Obsidian blocks into a frame four blocks wide and five blocks tall. The corner blocks are not required. - - To activate a Nether Portal, set fire to the Obisidian blocks inside the frame with a Flint and Steel. Portals can be deactivated if their frame is broken, an explosion happens nearby or a liquid flows through them. - + To activate a Nether Portal, set fire to the Obsidian blocks inside the frame with a Flint and Steel. Portals can be deactivated if their frame is broken, an explosion happens nearby or a liquid flows through them. - - To use a Nether Portal, stand inside it. Your screen will go purple and a sound will play. After a few seconds you will be transported to another dimension. - + To use a Nether Portal, stand inside it. Your screen will go purple and a sound will play. After a few seconds you will be transported to another dimension. - - The Nether can be a dangerous place, full of lava, but can be useful to collect Netherrack which burns forever when lit, and Glowstone which produces light. - + The Nether can be a dangerous place, full of lava, but can be useful to collect Netherrack which burns forever when lit, and Glowstone which produces light. - - The Nether world can be used to fast-travel in the Overworld - traveling one block distance in the Nether is equivalent to traveling 3 blocks in the Overworld. - + The Nether world can be used to fast-travel in the Overworld - traveling one block distance in the Nether is equivalent to traveling 3 blocks in the Overworld. - - You are now in Creative mode. - + You are now in Creative mode. - - {*B*} - Press{*CONTROLLER_VK_A*} to learn more about Creative mode.{*B*} - Press{*CONTROLLER_VK_B*} if you already know about Creative mode. - + {*B*} +Press{*CONTROLLER_VK_A*} to learn more about Creative mode.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about Creative mode. When in Creative mode you have in infinite number of all available items and blocks, you can destroy blocks with one click without a tool, you are invulnerable and you can fly. @@ -3566,16 +3866,12 @@ When in flying mode, you can hold down{*CONTROLLER_ACTION_JUMP*} to move up and{ - - In this area a farm has been set up. Farming enables you to create a renewable source of food and other items. - + In this area a farm has been set up. Farming enables you to create a renewable source of food and other items. - - {*B*} - Press{*CONTROLLER_VK_A*} to learn more about farming.{*B*} - Press{*CONTROLLER_VK_B*} if you already know about farming. - + {*B*} +Press{*CONTROLLER_VK_A*} to learn more about farming.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about farming. Wheat, Pumpkins and Melons are grown from seeds. Wheat seeds are collected by breaking Tall Grass or harvesting wheat, and Pumpkin and Melon seeds are crafted from Pumpkins and Melons respectively. @@ -3606,16 +3902,12 @@ When in flying mode, you can hold down{*CONTROLLER_ACTION_JUMP*} to move up and{ - - In this area animals have been penned in. You can breed animals to produce baby versions of themselves. - + In this area animals have been penned in. You can breed animals to produce baby versions of themselves. - - {*B*} - Press{*CONTROLLER_VK_A*} to learn more about animals and breeding.{*B*} - Press{*CONTROLLER_VK_B*} if you already know about animals and breeding. - + {*B*} +Press{*CONTROLLER_VK_A*} to learn more about animals and breeding.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about animals and breeding. To get the animals to breed, you will need to feed them with the right food to get them to go into 'Love Mode'. @@ -3634,9 +3926,7 @@ When in flying mode, you can hold down{*CONTROLLER_ACTION_JUMP*} to move up and{ - - Wild wolves can be tamed by giving them bones. Once tamed Love Hearts will appear around them. Tamed wolves will follow the player and defend them if they haven't been commanded to sit. - + Wild wolves can be tamed by giving them bones. Once tamed Love Hearts will appear around them. Tamed wolves will follow the player and defend them if they haven't been commanded to sit. @@ -3644,16 +3934,12 @@ When in flying mode, you can hold down{*CONTROLLER_ACTION_JUMP*} to move up and{ - - In this area are some pumpkins and blocks to make a Snow Golem and an Iron Golem. - + In this area are some pumpkins and blocks to make a Snow Golem and an Iron Golem. - - {*B*} - Press{*CONTROLLER_VK_A*} to learn more about Golems.{*B*} - Press{*CONTROLLER_VK_B*} if you already know about Golems. - + {*B*} +Press{*CONTROLLER_VK_A*} to learn more about Golems.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about Golems. Golems are created by placing a pumpkin on top of a stack of blocks. @@ -3715,9 +4001,7 @@ When in flying mode, you can hold down{*CONTROLLER_ACTION_JUMP*} to move up and{ - - Congratulations, you have completed the tutorial. Time in the game is now passing normally, and you don't have long until night time and the monsters come out! Finish your shelter! - + Congratulations, you have completed the tutorial. Time in the game is now passing normally, and you don't have long until night time and the monsters come out! Finish your shelter! {*EXIT_PICTURE*} When you are ready to explore further, there is a stairway in this area near the Miner's shelter that leads to a small castle. @@ -3736,7 +4020,7 @@ When in flying mode, you can hold down{*CONTROLLER_ACTION_JUMP*} to move up and{ {*B*}Press{*CONTROLLER_VK_A*} to play through the tutorial as normal.{*B*} - Press{*CONTROLLER_VK_B*} to skip the main tutorial. +Press{*CONTROLLER_VK_B*} to skip the main tutorial. In this area you will find areas setup to help you learn about fishing, boats, pistons and redstone. @@ -3746,19 +4030,182 @@ When in flying mode, you can hold down{*CONTROLLER_ACTION_JUMP*} to move up and{ - - Your food bar has depleted to a level where you will no longer heal. - + Your food bar has depleted to a level where you will no longer heal. - - {*B*} - Press{*CONTROLLER_VK_A*} to learn more about the food bar and eating food.{*B*} - Press{*CONTROLLER_VK_B*} if you already know about the food bar and eating food. - + {*B*} +Press{*CONTROLLER_VK_A*} to learn more about the food bar and eating food.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about the food bar and eating food. - + + This is the horse inventory interface. + + + {*B*}Press{*CONTROLLER_VK_A*} to continue. +{*B*}Press{*CONTROLLER_VK_B*} if you already know how to use the horse inventory. + + + The horse inventory allows you to transfer, or equip items to your Horse, Donkey or Mule. + + + Saddle your Horse by placing a Saddle in the saddle slot. Horses can be given armor by placing Horse Armor in the armor slot. + + + You can also transfer items between your own inventory and the saddlebags strapped to Donkeys and Mules in this menu. + + + You have found a Horse. + + + You have found a Donkey. + + + You have found a Mule. + + + {*B*}Press{*CONTROLLER_VK_A*} to learn more about Horses, Donkeys and Mules. +{*B*}Press{*CONTROLLER_VK_B*} if you already know about Horses, Donkeys and Mules. + + + Horses and Donkeys are found mainly in open plains. Mules can be bred from a Donkey and a Horse, but are infertile themselves. + + + All adult Horses, Donkeys and Mules can be ridden. However only Horses can be armored, and only Mules and Donkeys may be equipped with saddlebags for transporting items. + + + Horses, Donkeys and Mules must be tamed before they can be used. A horse is tamed by attempting to ride it, and managing to stay on the horse while it attempts to throw the rider off. + + + When tamed Love Hearts will appear around them and they will no longer buck the player off. + + + Try to ride this horse now. Use {*CONTROLLER_ACTION_USE*} with no items or tools in your hand to mount it. + + + To steer a horse they must then be equipped with a saddle, which can be bought from villagers or found inside chests hidden in the world. + + + Tame Donkeys and Mules can be given saddlebags by attaching a chest. These bags can be accessed whilst riding or when sneaking. + + + Horses and Donkeys (but not Mules) can be bred like other animals using Golden Apples or Golden Carrots. Foals will grow into adult horses over time, although feeding them wheat or hay will speed this up. + + + You can try to tame the Horses and Donkeys here, and there are Saddles, Horse Armor and other useful items for Horses in chests around here too. + + + This is the Beacon interface, which you can use to choose powers for your Beacon to grant. + + + {*B*} +Press{*CONTROLLER_VK_A*} to continue.{*B*} +Press{*CONTROLLER_VK_B*} if you already know how to use the Beacon interface. + + + In the Beacon menu you can select 1 primary power for your Beacon. The more tiers your pyramid has the more powers you will have to choose from. + + + A Beacon on a pyramid with at least 4 tiers grants an additional option of either the Regeneration secondary power or a stronger primary power. + + + To set the powers of your Beacon you must sacrifice an Emerald, Diamond, Gold or Iron Ingot in the payment slot. Once set, the powers will emanate from the Beacon indefinitely. + + + At the top of this pyramid there is an inactivate Beacon. + + + {*B*} +Press{*CONTROLLER_VK_A*} to learn more about Beacons.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about Beacons. + + + Active Beacons project a bright beam of light into the sky and grant powers to nearby players. They are crafted with Glass, Obsidian and Nether Stars, which can be obtained by defeating the Wither. + + + Beacons must be placed so that they are in sunlight during the day. Beacons must be placed on Pyramids of Iron, Gold, Emerald or Diamond. However the choice of material has no effect on the power of the beacon. + + + Try using the Beacon to set the powers it grants. You can use the Iron Ingots provided as the necessary payment. + + + This room contains Hoppers + + + {*B*} +Press{*CONTROLLER_VK_A*} to learn more about Hoppers.{*B*} +Press{*CONTROLLER_VK_B*} if you already know about Hoppers. + + + Hoppers are used to insert or remove items from containers, and to automatically pick-up items thrown into them. + + + They can affect Brewing Stands, Chests, Dispensers, Droppers, Minecarts with Chests, Minecarts with Hoppers, as well as other Hoppers. + + + Hoppers will continuously attempt to suck items out of suitable container placed above them. It will also attempt to insert stored items into an output container. + + + However if a Hopper is powered by Redstone it will become inactive and stop both sucking and inserting items. + + + A Hopper points in the direction it tries to output items. To make a Hopper point to a particular block, place the Hopper against that block whilst sneaking. + + + There are various useful Hopper layouts for you to see and experiment with in this room. + + + This is the Firework interface, which you can use to craft Fireworks and Firework Stars. + + + {*B*} +Press{*CONTROLLER_VK_A*} to continue.{*B*} +Press{*CONTROLLER_VK_B*} if you already know how to use the Firework interface. + + + To craft a Firework, place Gunpowder and Paper in the 3x3 crafting grid that is shown above your inventory. + + + You can optionally place multiple Firework Stars in the crafting grid to add them to the Firework. + + + Filling more slots in the crafting grid with Gunpowder will increase the height at which all the Firework Stars will explode. + + + You can then take the crafted Firework out of the output slot when you wish to craft it. + + + Firework Stars can be crafted by placing Gunpowder and Dye into the crafting grid. + + + The Dye will set the color of the explosion of the Firework Star. + + + The shape of the Firework Star is set by adding either a Fire Charge, Gold Nugget, Feather or Mob Head. + + + A trail or a twinkle can be added using Diamonds or Glowstone Dust. + + + After a Firework Star has been crafted, you can set the fade color of the Firework Star by crafting it with Dye. + + + Contained within the chests here there are various items used in the creation of FIREWORKS! + + + {*B*} +Press{*CONTROLLER_VK_A*} to learn more about Fireworks. {*B*} +Press{*CONTROLLER_VK_B*} if you already know about Fireworks. + + + Fireworks are decorative items that can be launched by hand or from Dispensers. They are crafted using Paper, Gunpowder and optionally a number of Firework Stars. + + + The colors, fade, shape, size, and effects (such as trails and twinkles) of Firework Stars can be customized by including additional ingredients when crafting. + + + Try crafting a Firework at the Crafting Table using an assortment of ingredients from the chests. +  Select @@ -4094,546 +4541,593 @@ When in flying mode, you can hold down{*CONTROLLER_ACTION_JUMP*} to move up and{ Upload Save for Xbox One + + + Mount + + + Dismount + + + Attach Chest + + + Launch + + + Leash + + + Release + + + Attach + + + Name +  - OK + OK - Cancel + Cancel - Minecraft Store + Minecraft Store - Are you sure you want to leave your current game and join the new one? Any unsaved progress will be lost. + Are you sure you want to leave your current game and join the new one? Any unsaved progress will be lost. - Exit Game + Exit Game - Save Game + Save Game - - Exit Without Saving + + Exit Without Saving - - Are you sure you want to overwrite any previous save for this world with the current version of this world? + + Are you sure you want to overwrite any previous save for this world with the current version of this world? - - Are you sure you want to exit without saving? You will lose all progress in this world! + + Are you sure you want to exit without saving? You will lose all progress in this world! - Start Game + Start Game - If you create, load or save a world in Creative Mode, that world will have achievements and leaderboard updates disabled, even if it is then loaded in Survival Mode. Are you sure you want to continue? + If you create, load or save a world in Creative Mode, that world will have achievements and leaderboard updates disabled, even if it is then loaded in Survival Mode. Are you sure you want to continue? - This world has previously been saved in Creative Mode, and it will have achievements and leaderboard updates disabled. Are you sure you want to continue? + This world has previously been saved in Creative Mode, and it will have achievements and leaderboard updates disabled. Are you sure you want to continue? - This world has previously been saved in Creative Mode, and it will have achievements and leaderboard updates disabled. + This world has previously been saved in Creative Mode, and it will have achievements and leaderboard updates disabled. - If you create, load or save a world with Host Privileges enabled, that world will have achievements and leaderboard updates disabled, even if it is then loaded with those options off. Are you sure you want to continue? + If you create, load or save a world with Host Privileges enabled, that world will have achievements and leaderboard updates disabled, even if it is then loaded with those options off. Are you sure you want to continue? - Damaged Save + Damaged Save - - This save is corrupt or damaged. Would you like to delete it? + + This save is corrupt or damaged. Would you like to delete it? - - Are you sure you want to exit to the main menu and disconnect all players from the game? Any unsaved progress will be lost. + + Are you sure you want to exit to the main menu and disconnect all players from the game? Any unsaved progress will be lost. - Exit and save + Exit and save - Exit without saving + Exit without saving - Are you sure you want to exit to the main menu? Any unsaved progress will be lost. + Are you sure you want to exit to the main menu? Any unsaved progress will be lost. - Are you sure you want to exit to the main menu? Your progress will be lost! + Are you sure you want to exit to the main menu? Your progress will be lost! - Create New World + Create New World - Play Tutorial + Play Tutorial - - Tutorial + + Tutorial - Name Your World + Name Your World - Enter a name for your world + Enter a name for your world - Input the seed for your world generation + Input the seed for your world generation - Load Saved World + Load Saved World - Press START to join game + Press START to join game - Exiting the game + Exiting the game - An error occurred. Exiting to the main menu. + An error occurred. Exiting to the main menu. - Connection failed + Connection failed - Connection lost + Connection lost - Connection to the server was lost. Exiting to the main menu. + Connection to the server was lost. Exiting to the main menu. - Connection to Xbox Live was lost. Exiting to the main menu. + Connection to Xbox Live was lost. Exiting to the main menu. - Connection to Xbox Live was lost. + Connection to Xbox Live was lost. - Disconnected by the server + Disconnected by the server - You were kicked from the game + You were kicked from the game - You were kicked from the game for flying + You were kicked from the game for flying - Connection attempt took too long + Connection attempt took too long - The server is full + The server is full - The host has exited the game. + The host has exited the game. - You cannot join this game as you are not friends with anybody in the game. + You cannot join this game as you are not friends with anybody in the game. - You cannot join this game as you have previously been kicked by the host. + You cannot join this game as you have previously been kicked by the host. - You cannot join this game as the player you are trying to join is running an older version of the game. + You cannot join this game as the player you are trying to join is running an older version of the game. - You cannot join this game as the player you are trying to join is running a newer version of the game. + You cannot join this game as the player you are trying to join is running a newer version of the game. - New World + New World - Award Unlocked! + Award Unlocked! - Hurray - you've been awarded a gamerpic featuring Steve from Minecraft! + Hurray - you've been awarded a gamerpic featuring Steve from Minecraft! - Hurray - you've been awarded a gamerpic featuring a Creeper! + Hurray - you've been awarded a gamerpic featuring a Creeper! - Hurray - you've been awarded an avatar item - a Minecraft: Xbox 360 Edition t-shirt! + Hurray - you've been awarded an avatar item - a Minecraft: Xbox 360 Edition t-shirt! Go to the dashboard to put the t-shirt on your avatar. - Hurray - you've been awarded an avatar item - a Minecraft: Xbox 360 Edition watch! + Hurray - you've been awarded an avatar item - a Minecraft: Xbox 360 Edition watch! Go to the dashboard to put the watch on your avatar. - Hurray - you've been awarded an avatar item - a Creeper baseball cap! + Hurray - you've been awarded an avatar item - a Creeper baseball cap! Go to the dashboard to put the cap on your avatar. - Hurray - you've been awarded the Minecraft: Xbox 360 Edition theme! + Hurray - you've been awarded the Minecraft: Xbox 360 Edition theme! Go to the dashboard to select this theme. - Unlock Full Game + Unlock Full Game - You're playing the trial game, but you'll need the full game to be able to save your game. + You're playing the trial game, but you'll need the full game to be able to save your game. Would you like to unlock the full game now? - This is the Minecraft: Xbox 360 Edition trial game. If you had the full game, you would just have earned an achievement! + This is the Minecraft: Xbox 360 Edition trial game. If you had the full game, you would just have earned an achievement! Would you like to unlock the full game? - This is the Minecraft: Xbox 360 Edition trial game. If you had the full game, you would just have earned an avatar award! + This is the Minecraft: Xbox 360 Edition trial game. If you had the full game, you would just have earned an avatar award! Would you like to unlock the full game? - This is the Minecraft: Xbox 360 Edition trial game. If you had the full game, you would just have earned a gamerpic! + This is the Minecraft: Xbox 360 Edition trial game. If you had the full game, you would just have earned a gamerpic! Would you like to unlock the full game? - This is the Minecraft: Xbox 360 Edition trial game. If you had the full game, you would just have earned a theme! + This is the Minecraft: Xbox 360 Edition trial game. If you had the full game, you would just have earned a theme! Would you like to unlock the full game? - This is the Minecraft: Xbox 360 Edition trial game. You need the full game to be able to accept this invite. + This is the Minecraft: Xbox 360 Edition trial game. You need the full game to be able to accept this invite. Would you like to unlock the full game? - Guest players cannot unlock the full game. Please sign in with an Xbox Live user ID. + Guest players cannot unlock the full game. Please sign in with an Xbox Live user ID. - Please wait + Please wait - No results + No results - Filter: + Filter: - Friends + Friends - My Score + My Score - Overall + Overall - Entries: + Entries: - Rank + Rank - Gamertag + Gamertag - Preparing to Save Level + Preparing to Save Level - Preparing Chunks... + Preparing Chunks... - Finalizing... + Finalizing... - Building Terrain + Building Terrain - Simulating world for a bit + Simulating world for a bit - Initializing server + Initializing server - Generating spawn area + Generating spawn area - Loading spawn area + Loading spawn area - Entering The Nether + Entering The Nether - Leaving The Nether + Leaving The Nether - Respawning + Respawning - Generating level + Generating level - Loading level + Loading level - Saving players + Saving players - Connecting to host + Connecting to host - Downloading terrain + Downloading terrain - Switching to offline game + Switching to offline game - Please wait while the host saves the game + Please wait while the host saves the game - Entering The END + Entering The END - Leaving The END + Leaving The END - Finding Seed for the World Generator + Finding Seed for the World Generator - This bed is occupied + This bed is occupied - You can only sleep at night + You can only sleep at night - %s is sleeping in a bed. To skip to dawn, all players need to sleep in beds at the same time. + %s is sleeping in a bed. To skip to dawn, all players need to sleep in beds at the same time. - Your home bed was missing or obstructed + Your home bed was missing or obstructed - You may not rest now, there are monsters nearby + You may not rest now, there are monsters nearby - You are sleeping in a bed. To skip to dawn, all players need to sleep in beds at the same time. + You are sleeping in a bed. To skip to dawn, all players need to sleep in beds at the same time. - Tools and Weapons + Tools and Weapons - Weapons + Weapons - Food + Food - Structures + Structures - Armor + Armor - Mechanisms + Mechanisms - Transport + Transport - Decorations + Decorations - Building Blocks + Building Blocks - Redstone & Transportation + Redstone & Transportation - Miscellaneous + Miscellaneous - Brewing + Brewing - - Brewing + + Brewing - Tools, Weapons & Armor + Tools, Weapons & Armor - Materials + Materials - Signed out + Signed out - You have been returned to the title screen because your gamer profile was signed out + You have been returned to the title screen because your gamer profile was signed out - Difficulty + Difficulty - Music + Music - Sound + Sound - Gamma + Gamma - Game Sensitivity + Game Sensitivity - Interface Sensitivity + Interface Sensitivity - - Peaceful + + Peaceful - Easy + Easy - Normal + Normal - Hard + Hard - In this mode, the player regains health over time, and there are no enemies in the environment. + In this mode, the player regains health over time, and there are no enemies in the environment. - In this mode, enemies spawn in the environment, but will do less damage to the player than in the Normal mode. + In this mode, enemies spawn in the environment, but will do less damage to the player than in the Normal mode. - In this mode, enemies spawn in the environment and will do a standard amount of damage to the player. + In this mode, enemies spawn in the environment and will do a standard amount of damage to the player. - In this mode, enemies will spawn in the environment, and will do a great deal of damage to the player. Watch out for the Creepers too, since they are unlikely to cancel their exploding attack when you move away from them! + In this mode, enemies will spawn in the environment, and will do a great deal of damage to the player. Watch out for the Creepers too, since they are unlikely to cancel their exploding attack when you move away from them! - Trial Timeout + Trial Timeout - You've been playing the Minecraft: Xbox 360 Edition Trial Game for the maximum time allowed! To continue the fun, would you like to unlock the full game? + You've been playing the Minecraft: Xbox 360 Edition Trial Game for the maximum time allowed! To continue the fun, would you like to unlock the full game? - Game full + Game full - Failed to join game as there are no spaces left + Failed to join game as there are no spaces left - Enter Sign Text + Enter Sign Text - Enter a line of text for your sign + Enter a line of text for your sign - Enter Title + Enter Title - Enter a title for your post + Enter a title for your post - Enter Caption + Enter Caption - Enter a caption for your post + Enter a caption for your post - Enter Description + Enter Description - Enter a description for your post + Enter a description for your post - - Inventory + + Inventory - - Ingredients + + Ingredients - - Brewing Stand + + Brewing Stand - - Chest + + Chest - - Enchant + + Enchant - - Furnace + + Furnace - - Ingredient + + Ingredient - - Fuel + + Fuel - - Dispenser + + Dispenser + + + Horse + + + Dropper + + + Hopper + + + Beacon - - There are no downloadable content offers of this type available for this title at the moment. + + Primary Power - - %s has joined the game. + + Secondary Power - - %s has left the game. + + Minecart - - %s was kicked from the game. + + + There are no downloadable content offers of this type available for this title at the moment. + + + %s has joined the game. + + + %s has left the game. + + + %s was kicked from the game. - - Are you sure you want to delete this save game? + + Are you sure you want to delete this save game? - Awaiting approval + Awaiting approval - Censored + Censored - Now playing: + Now playing: - Reset Settings + Reset Settings - Are you sure you would like to reset your settings to their default values? + Are you sure you would like to reset your settings to their default values? - Loading Error + Loading Error - "Minecraft: Xbox 360 Edition" has failed to load, and cannot continue. + "Minecraft: Xbox 360 Edition" has failed to load, and cannot continue. - - %s's Game + + %s's Game - - Unknown host game + + Unknown host game @@ -4642,13 +5136,13 @@ Would you like to unlock the full game? A guest player has signed out causing all guest players to be removed from the game. - + Sign in You are not signed in. In order to play this game, you will need to be signed in. Do you want to sign in now? - + Multiplayer not allowed @@ -4679,7 +5173,7 @@ Would you like to unlock the full game? No Pack: Default Skins - + Favorite Skins @@ -4733,7 +5227,7 @@ Please do not turn off your Xbox 360 console while this icon is on-screen. - Preparing to Autosave Level + Preparing to Autosave Level @@ -4748,128 +5242,134 @@ Please do not turn off your Xbox 360 console while this icon is on-screen. - Unlock Skin Pack + Unlock Skin Pack - To use the skin you have selected, you need to unlock this skin pack. + To use the skin you have selected, you need to unlock this skin pack. Would you like to unlock this skin pack now? - Unlock Texture Pack + Unlock Texture Pack - To use this texture pack for your world, you need to unlock it. + To use this texture pack for your world, you need to unlock it. Would you like to unlock it now? - Trial Texture Pack + Trial Texture Pack - You are using a trial version of the texture pack. You will not be able to save this world unless you unlock the full version. + You are using a trial version of the texture pack. You will not be able to save this world unless you unlock the full version. Would you like to unlock the full version of the texture pack? - Texture Pack Not Present + Texture Pack Not Present - Unlock Full Version + Unlock Full Version - - Download Trial Version + + Download Trial Version - - Download Full Version + + Download Full Version - This world uses a mash-up pack or texture pack you don't have! + This world uses a mash-up pack or texture pack you don't have! Would you like to install the mash-up pack or texture pack now? - Get Trial Version + Get Trial Version - Get Full Version + Get Full Version - Kick player + Kick player - Are you sure you want to kick this player from the game? They will not be able to rejoin until you restart the world. + Are you sure you want to kick this player from the game? They will not be able to rejoin until you restart the world. - Gamerpics Packs + Gamerpics Packs - Themes + Themes - Skins Packs + Skins Packs - Allow friends of friends + Allow friends of friends - You cannot join this game because it has been limited to players who are friends of the host. + You cannot join this game because it has been limited to players who are friends of the host. - Can't Join Game + Can't Join Game - Selected + Selected - Selected skin: + Selected skin: - Corrupt Downloadable Content + Corrupt Downloadable Content - This downloadable content is corrupt and cannot be used. You need to delete it, then re-install it from the Minecraft Store menu. + This downloadable content is corrupt and cannot be used. You need to delete it, then re-install it from the Minecraft Store menu. - Some of your downloadable content is corrupt and cannot be used. You need to delete them, then re-install them from the Minecraft Store menu. + Some of your downloadable content is corrupt and cannot be used. You need to delete them, then re-install them from the Minecraft Store menu. - Your game mode has been changed + Your game mode has been changed - Rename Your World + Rename Your World - Enter the new name for your world + Enter the new name for your world - Game Mode: Survival + Game Mode: Survival - Game Mode: Creative + Game Mode: Creative + + + Game Mode: Adventure - Survival + Survival - Creative + Creative + + + Adventure - Created in Survival Mode + Created in Survival Mode - Created in Creative Mode + Created in Creative Mode - Render Clouds + Render Clouds - What would you like to do with this save game? + What would you like to do with this save game? Rename Save @@ -4890,6 +5390,9 @@ Would you like to install the mash-up pack or texture pack now? Superflat + + Enter a seed to generate the same terrain again. Leave blank for a random world. + When enabled, the game will be an online game. @@ -4926,6 +5429,29 @@ Would you like to install the mash-up pack or texture pack now? When enabled, a chest containing some useful items will be created near the player spawn point. + + + When disabled, prevents monsters and animals from changing blocks (for example, Creeper explosions won't destroy blocks and Sheep won't remove Grass) or picking up items. + + + When enabled, players will keep their inventory when they die. + + + When disabled, mobs will not spawn naturally. + + + When disabled, monsters and animals will not drop loot (for example, Creepers won't drop gunpowder). + + + When disabled, blocks will not drop items when destroyed (for example, Stone blocks won't drop Cobblestone). + + + When disabled, players will not regenerate health naturally. + + + When disabled, the time of day will not change. + + Skin Packs @@ -5001,7 +5527,72 @@ Would you like to install the mash-up pack or texture pack now? {*PLAYER*} was pummeled by {*SOURCE*} - {*PLAYER*} was killed by {*SOURCE*} + {*PLAYER*} was killed by {*SOURCE*} using magic + + + + + {*PLAYER*} fell off a ladder + + + {*PLAYER*} fell off some vines + + + {*PLAYER*} fell out of the water + + + {*PLAYER*} fell from a high place + + + {*PLAYER*} was doomed to fall by {*SOURCE*} + + + {*PLAYER*} was doomed to fall by {*SOURCE*} + + + {*PLAYER*} was doomed to fall by {*SOURCE*} using {*ITEM*} + + + {*PLAYER*} fell too far and was finished by {*SOURCE*} + + + {*PLAYER*} fell too far and was finished by {*SOURCE*} using {*ITEM*} + + + {*PLAYER*} walked into fire whilst fighting {*SOURCE*} + + + {*PLAYER*} was burnt to a crisp whilst fighting {*SOURCE*} + + + {*PLAYER*} tried to swim in lava to escape {*SOURCE*} + + + {*PLAYER*} drowned whilst trying to escape {*SOURCE*} + + + {*PLAYER*} walked into a cactus whilst trying to escape {*SOURCE*} + + + {*PLAYER*} was blown up by {*SOURCE*} + + + {*PLAYER*} withered away + + + {*PLAYER*} was slain by {*SOURCE*} using {*ITEM*} + + + {*PLAYER*} was shot by {*SOURCE*} using {*ITEM*} + + + {*PLAYER*} was fireballed by {*SOURCE*} using {*ITEM*} + + + {*PLAYER*} was pummeled by {*SOURCE*} using {*ITEM*} + + + {*PLAYER*} was killed by {*SOURCE*} using {*ITEM*} @@ -5210,348 +5801,380 @@ Would you like to install the mash-up pack or texture pack now? - Reset Nether + Reset Nether - Are you sure you want to reset the Nether in this savegame to its default state? You will lose anything you have built in the Nether! + Are you sure you want to reset the Nether in this savegame to its default state? You will lose anything you have built in the Nether! - Reset Nether + Reset Nether - Don't Reset Nether + Don't Reset Nether - Can't shear this Mooshroom at the moment. The maximum number of Pigs, Sheep, Cows and Cats has been reached. + Can't shear this Mooshroom at the moment. The maximum number of Pigs, Sheep, Cows, Cats and Horses has been reached. - Can't use Spawn Egg at the moment. The maximum number of Pigs, Sheep, Cows and Cats has been reached. + Can't use Spawn Egg at the moment. The maximum number of Pigs, Sheep, Cows, Cats and Horses has been reached. - Can't use Spawn Egg at the moment. The maximum number of Mooshrooms has been reached. + Can't use Spawn Egg at the moment. The maximum number of Mooshrooms has been reached. - Can't use Spawn Egg at the moment. The maximum number of Wolves in a world has been reached. + Can't use Spawn Egg at the moment. The maximum number of Wolves in a world has been reached. - Can't use Spawn Egg at the moment. The maximum number of Chickens in a world has been reached. + Can't use Spawn Egg at the moment. The maximum number of Chickens in a world has been reached. - Can't use Spawn Egg at the moment. The maximum number of Squid in a world has been reached. + Can't use Spawn Egg at the moment. The maximum number of Squid in a world has been reached. + + + Can't use Spawn Egg at the moment. The maximum number of Bats in a world has been reached. - Can't use Spawn Egg at the moment. The maximum number of enemies in a world has been reached. + Can't use Spawn Egg at the moment. The maximum number of enemies in a world has been reached. - Can't use Spawn Egg at the moment. The maximum number of villagers in a world has been reached. + Can't use Spawn Egg at the moment. The maximum number of villagers in a world has been reached. - The maximum number of Paintings/Item Frames in a world has been reached. + The maximum number of Paintings/Item Frames in a world has been reached. - You can't spawn enemies in Peaceful mode. + You can't spawn enemies in Peaceful mode. - This animal can't enter Love Mode. The maximum number of breeding Pigs, Sheep, Cows and Cats has been reached. + This animal can't enter Love Mode. The maximum number of breeding Pigs, Sheep, Cows, Cats and Horses has been reached. - This animal can't enter Love Mode. The maximum number of breeding Wolves has been reached. + This animal can't enter Love Mode. The maximum number of breeding Wolves has been reached. - This animal can't enter Love Mode. The maximum number of breeding Chickens has been reached. + This animal can't enter Love Mode. The maximum number of breeding Chickens has been reached. + + This animal can't enter Love Mode. The maximum number of breeding horses has been reached. + - This animal can't enter Love Mode. The maximum number of breeding Mooshrooms has been reached. + This animal can't enter Love Mode. The maximum number of breeding Mooshrooms has been reached. - The maximum number of Boats in a world has been reached. + The maximum number of Boats in a world has been reached. - The maximum number of Mob Heads in a world has been reached. + The maximum number of Mob Heads in a world has been reached. - - Invert Look + + Invert Look - - Southpaw + + Southpaw - - You Died! + + You Died! - - Respawn + + Respawn - - Downloadable Content Offers + + Downloadable Content Offers - - Change Skin - - - How To Play - - - Controls + + Change Skin - - Settings + + How To Play - - Credits + + Controls - - Reinstall Content + + Settings - - Debug Settings + + Credits + + Reinstall Content + + + Debug Settings + - - Fire Spreads - - - TNT Explodes - - - Player vs Player - - - Trust Players - - - Host Privileges - - - Generate Structures - - - Superflat World - - - Bonus Chest - - - World Options - + + Fire Spreads + + + TNT Explodes + + + Player vs Player + + + Trust Players + + + Host Privileges + + + Generate Structures + + + Superflat World + + + Bonus Chest + + + + World Options + + + Game Options + + + + Mob Griefing + + + Keep Inventory + + + Mob Spawning + + + Mob Loot + + + Tile Drops + + + Natural Regeneration + + + Daylight Cycle + - - Can Build and Mine + + Can Build and Mine - - Can Use Doors and Switches + + Can Use Doors and Switches - - Can Open Containers + + Can Open Containers - - Can Attack Players + + Can Attack Players - - Can Attack Animals + + Can Attack Animals - - Moderator + + Moderator - - Kick Player + + Kick Player - - Can Fly + + Can Fly - - Disable Exhaustion + + Disable Exhaustion - - Invisible + + Invisible - - Host Options + + Host Options - - Players/Invite + + Players/Invite - - Online Game + + Online Game - - Invite Only + + Invite Only - - More Options + + More Options - - Load + + Load - - New World + + New World - - World Name + + World Name - - Seed for the World Generator + + Seed for the World Generator - - Leave blank for a random seed + + Leave blank for a random seed - - Players + + Players - - Join Game + + Join Game - - Start Game + + Start Game - - No Games Found + + No Games Found - - Play Game + + Play Game - - Leaderboards + + Leaderboards - - Achievements + + Achievements - - Help & Options + + Help & Options - - Unlock Full Game + + Unlock Full Game - - Resume Game + + Resume Game - - Save Game + + Save Game - - Difficulty: + + Difficulty: - - Game Type: + + Game Type: - - Gamertags: + + Gamertags: - - Structures: + + Structures: - - Level Type: + + Level Type: - - PvP: + + PvP: - - Trust Players: + + Trust Players: - - TNT: + + TNT: - - Fire Spreads: + + Fire Spreads: - - Reinstall Theme + + Reinstall Theme - - Reinstall Gamerpic 1 + + Reinstall Gamerpic 1 - - Reinstall Gamerpic 2 + + Reinstall Gamerpic 2 - - Reinstall Avatar Item 1 + + Reinstall Avatar Item 1 - - Reinstall Avatar Item 2 + + Reinstall Avatar Item 2 - - Reinstall Avatar Item 3 + + Reinstall Avatar Item 3 - - Options + + Options - - Audio + + Audio - - Control + + Control - - Graphics + + Graphics - - User Interface + + User Interface - - Reset to Defaults + + Reset to Defaults - - View Bobbing + + View Bobbing - - Hints + + Hints - - In-Game Tooltips + + In-Game Tooltips - - In-Game Gamertags + + In-Game Gamertags - - 2 Player Split-screen Vertical + + 2 Player Split-screen Vertical - - Done + + Done - - Edit sign message: + + Edit sign message: - - Fill in the details to accompany your screenshot + + Fill in the details to accompany your screenshot - - Caption + + Caption - - Screenshot from in-game + + Screenshot from in-game - - Edit sign message: + + Edit sign message: - - Look what I made in Minecraft: Xbox 360 Edition! + + Look what I made in Minecraft: Xbox 360 Edition! - - The classic Minecraft textures, icons and user interface! + + The classic Minecraft textures, icons and user interface! - - Show all Mash-up Worlds + + Show all Mash-up Worlds Select Transfer Save Slot @@ -5635,6 +6258,18 @@ Would you like to install the mash-up pack or texture pack now? Poison + + Wither + + + Health Boost + + + Absorption + + + Saturation + of Swiftness @@ -5693,6 +6328,18 @@ Would you like to install the mash-up pack or texture pack now? of Poison + + of Decay + + + of Health Boost + + + of Absorption + + + of Saturation + @@ -5841,6 +6488,32 @@ Would you like to install the mash-up pack or texture pack now? Reduces health of the affected players, animals and monsters over time. + + + When Applied: + + + + Horse Jump Strength + + + Zombie Reinforcements + + + Max Health + + + Mob Follow Range + + + Knockback Resistance + + + Speed + + + Attack Damage + Sharpness @@ -5983,7 +6656,7 @@ Would you like to install the mash-up pack or texture pack now? Restores 3{*ICON_SHANK_01*}. Created by cooking a potato in a furnace. - Restores 1{*ICON_SHANK_01*}, or can be cooked in a furnace. This can be planted in farmland. Eating this can cause you to be poisoned. + Restores 1{*ICON_SHANK_01*}. Eating this can cause you to become poisoned. Restores 3{*ICON_SHANK_01*}. Crafted from a carrot and gold nuggets. diff --git a/Minecraft.Client/Common/Media/xuiscene_anvil_480.h b/Minecraft.Client/Common/Media/xuiscene_anvil_480.h new file mode 100644 index 00000000..9d59bc38 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_anvil_480.h @@ -0,0 +1,369 @@ +#define IDC_AnvilText L"AnvilText" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Ingredient L"Ingredient" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Ingredient2 L"Ingredient2" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Result L"Result" +#define IDC_AnvilTextInput L"AnvilTextInput" +#define IDC_LabelAffordable L"LabelAffordable" +#define IDC_LabelExpensive L"LabelExpensive" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Inventory L"Inventory" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_UseRow L"UseRow" +#define IDC_InventoryText L"InventoryText" +#define IDC_AnvilHammer L"AnvilHammer" +#define IDC_AnvilPlus L"AnvilPlus" +#define IDC_AnvilArrow L"AnvilArrow" +#define IDC_AnvilCross L"AnvilCross" +#define IDC_Pointer L"Pointer" +#define IDC_Group L"Group" +#define IDC_XuiSceneAnvil L"XuiSceneAnvil" diff --git a/Minecraft.Client/Common/Media/xuiscene_anvil_small.h b/Minecraft.Client/Common/Media/xuiscene_anvil_small.h new file mode 100644 index 00000000..fdedc7b5 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_anvil_small.h @@ -0,0 +1,390 @@ +#define IDC_AnvilText L"AnvilText" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Ingredient L"Ingredient" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Ingredient2 L"Ingredient2" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Result L"Result" +#define IDC_AnvilTextInput L"AnvilTextInput" +#define IDC_LabelAffordable L"LabelAffordable" +#define IDC_LabelExpensive L"LabelExpensive" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Inventory L"Inventory" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_UseRow L"UseRow" +#define IDC_InventoryText L"InventoryText" +#define IDC_AnvilHammer L"AnvilHammer" +#define IDC_AnvilPlus L"AnvilPlus" +#define IDC_AnvilArrow L"AnvilArrow" +#define IDC_AnvilCross L"AnvilCross" +#define IDC_Pointer L"Pointer" +#define IDC_Group L"Group" +#define IDC_XuiSceneAnvil L"XuiSceneAnvil" diff --git a/Minecraft.Client/Common/Media/xuiscene_base.h b/Minecraft.Client/Common/Media/xuiscene_base.h index a4e71ad6..28701d0a 100644 --- a/Minecraft.Client/Common/Media/xuiscene_base.h +++ b/Minecraft.Client/Common/Media/xuiscene_base.h @@ -6,6 +6,7 @@ #define IDC_XuiSceneHudRoot L"XuiSceneHudRoot" #define IDC_XuiSceneChatRoot L"XuiSceneChatRoot" #define IDC_XuiSceneContainer L"XuiSceneContainer" +#define IDC_RStick L"RStick" #define IDC_LStick L"LStick" #define IDC_LBButton L"LBButton" #define IDC_RBButton L"RBButton" @@ -16,6 +17,7 @@ #define IDC_BButton L"BButton" #define IDC_AButton L"AButton" #define IDC_Tooltips L"Tooltips" +#define IDC_RStick L"RStick" #define IDC_LStick L"LStick" #define IDC_LBButton L"LBButton" #define IDC_RBButton L"RBButton" @@ -47,6 +49,7 @@ #define IDC_XuiSceneHudRoot L"XuiSceneHudRoot" #define IDC_XuiSceneChatRoot L"XuiSceneChatRoot" #define IDC_XuiSceneContainer L"XuiSceneContainer" +#define IDC_RStick L"RStick" #define IDC_LStick L"LStick" #define IDC_LBButton L"LBButton" #define IDC_RBButton L"RBButton" @@ -57,6 +60,7 @@ #define IDC_BButton L"BButton" #define IDC_AButton L"AButton" #define IDC_Tooltips L"Tooltips" +#define IDC_RStick L"RStick" #define IDC_LStick L"LStick" #define IDC_LBButton L"LBButton" #define IDC_RBButton L"RBButton" @@ -88,6 +92,7 @@ #define IDC_XuiSceneHudRoot L"XuiSceneHudRoot" #define IDC_XuiSceneChatRoot L"XuiSceneChatRoot" #define IDC_XuiSceneContainer L"XuiSceneContainer" +#define IDC_RStick L"RStick" #define IDC_LStick L"LStick" #define IDC_LBButton L"LBButton" #define IDC_RBButton L"RBButton" @@ -98,6 +103,7 @@ #define IDC_BButton L"BButton" #define IDC_AButton L"AButton" #define IDC_Tooltips L"Tooltips" +#define IDC_RStick L"RStick" #define IDC_LStick L"LStick" #define IDC_LBButton L"LBButton" #define IDC_RBButton L"RBButton" @@ -129,6 +135,7 @@ #define IDC_XuiSceneHudRoot L"XuiSceneHudRoot" #define IDC_XuiSceneChatRoot L"XuiSceneChatRoot" #define IDC_XuiSceneContainer L"XuiSceneContainer" +#define IDC_RStick L"RStick" #define IDC_LStick L"LStick" #define IDC_LBButton L"LBButton" #define IDC_RBButton L"RBButton" @@ -139,6 +146,7 @@ #define IDC_BButton L"BButton" #define IDC_AButton L"AButton" #define IDC_Tooltips L"Tooltips" +#define IDC_RStick L"RStick" #define IDC_LStick L"LStick" #define IDC_LBButton L"LBButton" #define IDC_RBButton L"RBButton" diff --git a/Minecraft.Client/Common/Media/xuiscene_base.xui b/Minecraft.Client/Common/Media/xuiscene_base.xui index fcc7881d..bab72bca 100644 --- a/Minecraft.Client/Common/Media/xuiscene_base.xui +++ b/Minecraft.Client/Common/Media/xuiscene_base.xui @@ -111,6 +111,18 @@ +RStick +200.000000 +40.000000 +15 +false +RStick_Button +true +22532 + + + + LStick 200.000000 40.000000 @@ -227,6 +239,18 @@ +RStick +200.000000 +28.000000 +15 +false +RStick_ButtonSmall +true +22532 + + + + LStick 200.000000 28.000000 @@ -549,6 +573,18 @@ +RStick +200.000000 +40.000000 +15 +false +RStick_Button +true +22532 + + + + LStick 200.000000 40.000000 @@ -665,6 +701,18 @@ +RStick +200.000000 +28.000000 +15 +false +RStick_ButtonSmall +true +22532 + + + + LStick 200.000000 28.000000 @@ -987,6 +1035,18 @@ +RStick +200.000000 +40.000000 +15 +false +RStick_Button +true +22532 + + + + LStick 200.000000 40.000000 @@ -1103,6 +1163,18 @@ +RStick +200.000000 +28.000000 +15 +false +RStick_ButtonSmall +true +22532 + + + + LStick 200.000000 28.000000 @@ -1425,6 +1497,18 @@ +RStick +200.000000 +40.000000 +15 +false +RStick_Button +true +22532 + + + + LStick 200.000000 40.000000 @@ -1541,6 +1625,18 @@ +RStick +200.000000 +28.000000 +15 +false +RStick_ButtonSmall +true +22532 + + + + LStick 200.000000 28.000000 diff --git a/Minecraft.Client/Common/Media/xuiscene_base_480.h b/Minecraft.Client/Common/Media/xuiscene_base_480.h index ae2129db..e17dce13 100644 --- a/Minecraft.Client/Common/Media/xuiscene_base_480.h +++ b/Minecraft.Client/Common/Media/xuiscene_base_480.h @@ -16,6 +16,7 @@ #define IDC_Tooltips L"Tooltips" #define IDC_BottomLeftAnchorPoint L"BottomLeftAnchorPoint" #define IDC_TopLeftAnchorPoint L"TopLeftAnchorPoint" +#define IDC_RStick L"RStick" #define IDC_LStick L"LStick" #define IDC_LBButton L"LBButton" #define IDC_RBButton L"RBButton" @@ -56,6 +57,7 @@ #define IDC_Tooltips L"Tooltips" #define IDC_BottomLeftAnchorPoint L"BottomLeftAnchorPoint" #define IDC_TopLeftAnchorPoint L"TopLeftAnchorPoint" +#define IDC_RStick L"RStick" #define IDC_LStick L"LStick" #define IDC_LBButton L"LBButton" #define IDC_RBButton L"RBButton" @@ -96,6 +98,7 @@ #define IDC_Tooltips L"Tooltips" #define IDC_BottomLeftAnchorPoint L"BottomLeftAnchorPoint" #define IDC_TopLeftAnchorPoint L"TopLeftAnchorPoint" +#define IDC_RStick L"RStick" #define IDC_LStick L"LStick" #define IDC_LBButton L"LBButton" #define IDC_RBButton L"RBButton" @@ -136,6 +139,7 @@ #define IDC_Tooltips L"Tooltips" #define IDC_BottomLeftAnchorPoint L"BottomLeftAnchorPoint" #define IDC_TopLeftAnchorPoint L"TopLeftAnchorPoint" +#define IDC_RStick L"RStick" #define IDC_LStick L"LStick" #define IDC_LBButton L"LBButton" #define IDC_RBButton L"RBButton" diff --git a/Minecraft.Client/Common/Media/xuiscene_base_480.xui b/Minecraft.Client/Common/Media/xuiscene_base_480.xui index 461421bf..6470bea4 100644 --- a/Minecraft.Client/Common/Media/xuiscene_base_480.xui +++ b/Minecraft.Client/Common/Media/xuiscene_base_480.xui @@ -227,6 +227,18 @@ +RStick +200.000000 +28.000000 +15 +false +RStick_ButtonSmall +true +22532 + + + + LStick 200.000000 25.000000 @@ -659,6 +671,18 @@ +RStick +200.000000 +28.000000 +15 +false +RStick_ButtonSmall +true +22532 + + + + LStick 200.000000 25.000000 @@ -1091,6 +1115,18 @@ +RStick +200.000000 +28.000000 +15 +false +RStick_ButtonSmall +true +22532 + + + + LStick 200.000000 25.000000 @@ -1523,6 +1559,18 @@ +RStick +200.000000 +28.000000 +15 +false +RStick_ButtonSmall +true +22532 + + + + LStick 200.000000 25.000000 diff --git a/Minecraft.Client/Common/Media/xuiscene_beacon.h b/Minecraft.Client/Common/Media/xuiscene_beacon.h new file mode 100644 index 00000000..80fcd67f --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_beacon.h @@ -0,0 +1,406 @@ +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_UseRow L"UseRow" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Inventory L"Inventory" +#define IDC_SecondaryPanel L"SecondaryPanel" +#define IDC_PrimaryPanel L"PrimaryPanel" +#define IDC_PrimaryText L"PrimaryText" +#define IDC_SecondaryText L"SecondaryText" +#define IDC_PrimaryTierOneOne L"PrimaryTierOneOne" +#define IDC_PrimaryTierOneTwo L"PrimaryTierOneTwo" +#define IDC_PrimaryTierTwoOne L"PrimaryTierTwoOne" +#define IDC_PrimaryTierTwoTwo L"PrimaryTierTwoTwo" +#define IDC_PrimaryTierThree L"PrimaryTierThree" +#define IDC_SecondaryOne L"SecondaryOne" +#define IDC_SecondaryTwo L"SecondaryTwo" +#define IDC_Confirm L"Confirm" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Payment L"Payment" +#define IDC_Emerald L"Emerald" +#define IDC_Diamond L"Diamond" +#define IDC_Gold L"Gold" +#define IDC_Iron L"Iron" +#define IDC_Beacon_4 L"Beacon_4" +#define IDC_Beacon_3 L"Beacon_3" +#define IDC_Beacon_2 L"Beacon_2" +#define IDC_Beacon_1 L"Beacon_1" +#define IDC_Pointer L"Pointer" +#define IDC_Group L"Group" +#define IDC_BeaconMenu L"BeaconMenu" diff --git a/Minecraft.Client/Common/Media/xuiscene_beacon.xui b/Minecraft.Client/Common/Media/xuiscene_beacon.xui new file mode 100644 index 00000000..5b422935 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_beacon.xui @@ -0,0 +1,6508 @@ + + +1280.000000 +720.000000 + + + +BeaconMenu +1280.000000 +720.000000 +CXuiSceneBeacon +XuiBlankScene +Pointer + + + +Group +520.000000 +510.000000 +380.000031,120.000046,0.000000 +15 +XuiScene +Pointer + + + +UseRow +381.000000 +50.000000 +70.000000,444.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + + +Inventory +378.000000 +150.000000 +70.000000,305.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + + +SecondaryPanel +234.000000 +210.000000 +262.000000,24.000000,0.000000 +PanelRecessed +false + + + + +PrimaryPanel +234.000000 +210.000000 +24.000000,24.000000,0.000000 +PanelRecessed +false + + + + +PrimaryText +230.000000 +32.000000 +26.000000,26.000000,0.000000 +9 +XuiLabelDarkCentredWrap +Primary Power + + + + +SecondaryText +230.000000 +63.000000 +264.000061,26.000008,0.000000 +3 +XuiLabelDarkCentredWrap +Secondary Power + + + + +PrimaryTierOneOne +44.000000 +44.000000 +122.000000,66.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButton +false + + + + +PrimaryTierOneTwo +44.000000 +44.000000 +186.000000,66.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButton +false + + + + +PrimaryTierTwoOne +44.000000 +44.000000 +122.000000,120.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButton +false + + + + +PrimaryTierTwoTwo +44.000000 +44.000000 +186.000000,120.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButton +false + + + + +PrimaryTierThree +44.000000 +44.000000 +154.000000,174.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButton +false + + + + +SecondaryOne +44.000000 +44.000000 +324.000031,148.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButton +false + + + + +SecondaryTwo +44.000000 +44.000000 +388.000092,148.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButton +false + + + + +Confirm +44.000000 +44.000000 +403.000000,246.000031,0.000000 +8 +CXuiCtrlBeaconButton +BeaconButton +false + + + + +Payment +42.000000 +42.000000 +280.000092,248.000046,0.000000 +9 +CXuiCtrlSlotList +ItemGridVertical + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + + +Emerald +42.000000 +42.000000 +70.000046,247.999969,0.000000 +4 +false +7 +CXuiCtrlCraftIngredientSlot +ItemIconBlank + + + + +Diamond +42.000000 +42.000000 +118.000031,248.000000,0.000000 +4 +false +7 +CXuiCtrlCraftIngredientSlot +ItemIconBlank + + + + +Gold +42.000000 +42.000000 +166.000015,248.000000,0.000000 +4 +false +7 +CXuiCtrlCraftIngredientSlot +ItemIconBlank + + + + +Iron +42.000000 +42.000000 +214.000000,248.000000,0.000000 +4 +false +7 +CXuiCtrlCraftIngredientSlot +ItemIconBlank + + + + +Beacon_1 +40.000000 +40.000000 +50.000000,68.000000,0.000000 +2 +Beacon_1 +false + + + + +Beacon_2 +40.000000 +40.000000 +50.000000,122.000000,0.000000 +2 +Beacon_2 +false + + + + +Beacon_3 +40.000000 +40.000000 +50.000000,176.000000,0.000000 +2 +Beacon_3 +false + + + + +Beacon_4 +40.000000 +40.000000 +358.000000,94.000000,0.000000 +2 +Beacon_4 +false + + + + +Pointer +42.000000 +42.000000 +-185.000000,-9.000015,0.000000 +9 +false +CXuiCtrlSlotItem +ItemPointer + + + + + +Normal + + + +EndNormal + + + + + + + + +Normal + + + +EndNormal + +stop + + +MoveLeft + + + +EndMoveLeft + +stop + + +MoveRight + + + +EndMoveRight + +gotoandstop +EndNormal + + + +Group +Position + + +0 +380.000031,120.000046,0.000000 + + + +0 +380.000000,120.000000,0.000000 + + + +2 +100 +-100 +50 +380.000000,120.000000,0.000000 + + + +0 +120.000000,120.000000,0.000000 + + + +2 +100 +-100 +50 +120.000000,120.000000,0.000000 + + + +0 +380.000000,120.000000,0.000000 + + + + + diff --git a/Minecraft.Client/Common/Media/xuiscene_beacon_480.xui b/Minecraft.Client/Common/Media/xuiscene_beacon_480.xui new file mode 100644 index 00000000..9b5c4104 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_beacon_480.xui @@ -0,0 +1,5215 @@ + + +640.000000 +480.000000 + + + +BeaconMenu +640.000000 +480.000000 +CXuiSceneBeacon +XuiBlankScene +Pointer + + + +Group +336.000000 +290.000000 +190.000000,96.000000,0.000000 +15 +GraphicPanel +Pointer + + + +Inventory +234.000000 +78.000000 +51.000000,164.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +UseRow +234.000000 +51.000000,252.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +SecondaryPanel +154.000000 +120.000000 +170.000000,12.000000,0.000000 +PanelRecessed +false + + + + +PrimaryPanel +154.000000 +120.000000 +12.000000,12.000000,0.000000 +PanelRecessed +false + + + + +PrimaryText +150.000000 +36.000000 +14.000000,14.000000,0.000000 +9 +XuiLabelDarkCentredWrapSmall +Primary Power + + + + +SecondaryText +150.000000 +51.000000 +172.000000,14.000000,0.000000 +3 +XuiLabelDarkCentredWrapSmall +Secondary Power + + + + +PrimaryTierOneOne +22.000000 +22.000000 +80.000000,46.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +PrimaryTierOneTwo +22.000000 +22.000000 +111.000000,46.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +PrimaryTierTwoOne +22.000000 +22.000000 +80.000000,74.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +PrimaryTierTwoTwo +22.000000 +22.000000 +111.000000,74.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +PrimaryTierThree +22.000000 +22.000000 +95.073303,104.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +SecondaryOne +22.000000 +22.000000 +220.000000,84.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +SecondaryTwo +22.000000 +22.000000 +254.000000,84.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +Confirm +22.000000 +22.000000 +261.000092,137.000015,0.000000 +8 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +Payment +24.000000 +24.000000 +182.000092,136.000046,0.000000 +9 +CXuiCtrlSlotList +ItemGridVertical24 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + + +Emerald +22.000000 +22.000000 +52.482300,136.999969,0.000000 +4 +false +7 +CXuiCtrlCraftIngredientSlot +ItemIconBlank + + + + +Diamond +22.000000 +22.000000 +79.000031,137.000000,0.000000 +4 +false +7 +CXuiCtrlCraftIngredientSlot +ItemIconBlank + + + + +Gold +22.000000 +22.000000 +105.000015,137.000000,0.000000 +4 +false +7 +CXuiCtrlCraftIngredientSlot +ItemIconBlankSmall + + + + +Iron +22.000000 +22.000000 +131.000000,137.000000,0.000000 +4 +false +7 +CXuiCtrlCraftIngredientSlot +ItemIconBlankSmall + + + + +Beacon_1 +20.000000 +20.000000 +38.000000,46.000000,0.000000 +2 +Beacon_1 +false + + + + +Beacon_2 +20.000000 +20.000000 +38.000000,74.000000,0.000000 +2 +Beacon_2 +false + + + + +Beacon_3 +20.000000 +20.000000 +38.000000,104.000000,0.000000 +2 +Beacon_3 +false + + + + +Beacon_4 +20.000000 +20.000000 +238.000000,58.000000,0.000000 +2 +Beacon_4 +false + + + + +Pointer +26.000000 +26.000000 +-50.000000,-50.000000,0.000000 +9 +false +CXuiCtrlSlotItem +ItemPointerSmall + + + + + + +Normal + + + +EndNormal + +stop + + +MoveLeft + + + +EndMoveLeft + +stop + + +MoveRight + + + +EndMoveRight + +gotoandstop +EndNormal + + + +Group +Position + + +0 +190.000000,96.000000,0.000000 + + + +0 +190.000000,96.000000,0.000000 + + + +2 +100 +-100 +50 +190.000000,96.000000,0.000000 + + + +0 +33.750000,96.000000,0.000000 + + + +2 +100 +-100 +50 +60.000000,96.000000,0.000000 + + + +0 +190.000000,96.000000,0.000000 + + + + + diff --git a/Minecraft.Client/Common/Media/xuiscene_beacon_Small.xui b/Minecraft.Client/Common/Media/xuiscene_beacon_Small.xui new file mode 100644 index 00000000..622aeca9 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_beacon_Small.xui @@ -0,0 +1,5215 @@ + + +640.000000 +360.000000 + + + +BeaconMenu +640.000000 +360.000000 +CXuiSceneBeacon +XuiBlankScene +Pointer + + + +Group +336.000000 +290.000000 +152.000031,2.000000,0.000000 +15 +GraphicPanel +Pointer + + + +Inventory +234.000000 +78.000000 +51.000000,164.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +UseRow +234.000000 +51.000000,252.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +SecondaryPanel +154.000000 +120.000000 +170.000000,12.000000,0.000000 +PanelRecessed +false + + + + +PrimaryPanel +154.000000 +120.000000 +12.000000,12.000000,0.000000 +PanelRecessed +false + + + + +PrimaryText +150.000000 +35.000000 +14.000000,14.000000,0.000000 +9 +XuiLabelDarkCentredWrapSmall +Primary Power + + + + +SecondaryText +150.000000 +40.000000 +172.000000,14.000000,0.000000 +3 +XuiLabelDarkCentredWrapSmall +Secondary Power + + + + +PrimaryTierOneOne +22.000000 +22.000000 +80.000000,46.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +PrimaryTierOneTwo +22.000000 +22.000000 +111.000000,46.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +PrimaryTierTwoOne +22.000000 +22.000000 +80.000000,74.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +PrimaryTierTwoTwo +22.000000 +22.000000 +111.000000,74.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +PrimaryTierThree +22.000000 +22.000000 +95.073303,104.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +SecondaryOne +22.000000 +22.000000 +220.000000,84.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +SecondaryTwo +22.000000 +22.000000 +254.000000,84.000000,0.000000 +2 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +Confirm +22.000000 +22.000000 +261.000092,137.000015,0.000000 +8 +CXuiCtrlBeaconButton +BeaconButtonSmall +false + + + + +Payment +24.000000 +24.000000 +182.000092,136.000046,0.000000 +9 +CXuiCtrlSlotList +ItemGridVertical24 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonEnchant +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + +control_ListItem +24.000000 +24.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton24 +22594 +4 + + + + + +Emerald +22.000000 +22.000000 +52.482300,136.999969,0.000000 +4 +false +7 +CXuiCtrlCraftIngredientSlot +ItemIconBlank + + + + +Diamond +22.000000 +22.000000 +79.000031,137.000000,0.000000 +4 +false +7 +CXuiCtrlCraftIngredientSlot +ItemIconBlank + + + + +Gold +22.000000 +22.000000 +105.000015,137.000000,0.000000 +4 +false +7 +CXuiCtrlCraftIngredientSlot +ItemIconBlankSmall + + + + +Iron +22.000000 +22.000000 +131.000000,137.000000,0.000000 +4 +false +7 +CXuiCtrlCraftIngredientSlot +ItemIconBlankSmall + + + + +Beacon_1 +20.000000 +20.000000 +38.000000,46.000000,0.000000 +2 +Beacon_1 +false + + + + +Beacon_2 +20.000000 +20.000000 +38.000000,74.000000,0.000000 +2 +Beacon_2 +false + + + + +Beacon_3 +20.000000 +20.000000 +38.000000,104.000000,0.000000 +2 +Beacon_3 +false + + + + +Beacon_4 +20.000000 +20.000000 +238.000000,56.000000,0.000000 +2 +Beacon_4 +false + + + + +Pointer +26.000000 +26.000000 +-50.000000,-50.000000,0.000000 +9 +false +CXuiCtrlSlotItem +ItemPointerSmall + + + + + + +Normal + + + +EndNormal + +stop + + +MoveLeft + + + +EndMoveLeft + +stop + + +MoveRight + + + +EndMoveRight + +gotoandstop +EndNormal + + + +Group +Position + + +0 +152.000031,2.000000,0.000000 + + + +0 +152.000031,2.000000,0.000000 + + + +2 +100 +-100 +50 +152.000031,2.000000,0.000000 + + + +0 +50.000000,2.000000,0.000000 + + + +2 +100 +-100 +50 +50.000000,2.000000,0.000000 + + + +0 +152.000031,2.000000,0.000000 + + + + + diff --git a/Minecraft.Client/Common/Media/xuiscene_craftingpanel_3x3.h b/Minecraft.Client/Common/Media/xuiscene_craftingpanel_3x3.h index 9400ba1e..cd3c9870 100644 --- a/Minecraft.Client/Common/Media/xuiscene_craftingpanel_3x3.h +++ b/Minecraft.Client/Common/Media/xuiscene_craftingpanel_3x3.h @@ -130,6 +130,24 @@ #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" #define IDC_Inventory L"Inventory" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" @@ -207,6 +225,24 @@ #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" #define IDC_UseRow L"UseRow" #define IDC_InventoryGrid L"InventoryGrid" #define IDC_Group L"Group" diff --git a/Minecraft.Client/Common/Media/xuiscene_craftingpanel_3x3.xui b/Minecraft.Client/Common/Media/xuiscene_craftingpanel_3x3.xui index b3386eda..1895ecc3 100644 --- a/Minecraft.Client/Common/Media/xuiscene_craftingpanel_3x3.xui +++ b/Minecraft.Client/Common/Media/xuiscene_craftingpanel_3x3.xui @@ -537,7 +537,7 @@ XuiItemName 281.000000 50.000000 --2.000000,-24.000000,0.000000 +-2.000000,-29.000000,0.000000 XuiLabelDarkCentredWrap yyyyyyWWWWWWWWWWWWWWWW yyyyyyWWWWWWWWWWWWWW @@ -1676,6 +1676,258 @@ yyyyyyWWWWWWWWWWWWWW 4 + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + @@ -2749,6 +3001,258 @@ yyyyyyWWWWWWWWWWWWWW 4 + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + + + +control_ListItem +32.000000 +32.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton32 +22594 +4 + + diff --git a/Minecraft.Client/Common/Media/xuiscene_enchant.h b/Minecraft.Client/Common/Media/xuiscene_enchant.h index a074055a..d8a4fdc8 100644 --- a/Minecraft.Client/Common/Media/xuiscene_enchant.h +++ b/Minecraft.Client/Common/Media/xuiscene_enchant.h @@ -8,6 +8,7 @@ #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" #define IDC_Ingredient L"Ingredient" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" @@ -99,6 +100,15 @@ #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" #define IDC_Inventory L"Inventory" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" @@ -190,6 +200,15 @@ #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" #define IDC_UseRow L"UseRow" #define IDC_EnchantText L"EnchantText" #define IDC_InventoryText L"InventoryText" diff --git a/Minecraft.Client/Common/Media/xuiscene_fireworks.h b/Minecraft.Client/Common/Media/xuiscene_fireworks.h new file mode 100644 index 00000000..52c36d88 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_fireworks.h @@ -0,0 +1,166 @@ +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Result L"Result" +#define IDC_Arrow L"Arrow" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Inventory L"Inventory" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_UseRow L"UseRow" +#define IDC_InventoryText L"InventoryText" +#define IDC_FireworksText L"FireworksText" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Ingredients L"Ingredients" +#define IDC_Pointer L"Pointer" +#define IDC_Group L"Group" +#define IDC_FireworksScene L"FireworksScene" diff --git a/Minecraft.Client/Common/Media/xuiscene_fireworks.xui b/Minecraft.Client/Common/Media/xuiscene_fireworks.xui new file mode 100644 index 00000000..9bae3aec --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_fireworks.xui @@ -0,0 +1,2359 @@ + + +1280.000000 +720.000000 + + + +FireworksScene +1280.000000 +720.000000 +CXuiSceneFireworks +XuiBlankScene +Pointer + + + +Group +428.000000 +450.000000 +426.000000,130.000000,0.000000 +15 +XuiScene +Pointer + + + +Result +64.000000 +64.000000 +304.000000,96.000000,0.000000 +CXuiCtrlSlotList +ItemGridVertical64 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +226.000000 +45.000000 +7.000000,22.000000,0.000000 +5 +false +XuiButton +0.000000,10.000000,0.000000 + + + + +control_ListItem +64.000000 +64.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton64 +22594 +4 + + + + +control_ListItem +64.000000 +64.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton64 +22594 +4 + + + + +control_ListItem +64.000000 +64.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton64 +22594 +4 + + + + +control_ListItem +64.000000 +64.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton64 +22594 +4 + + + + +control_ListItem +64.000000 +64.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton64 +22594 +4 + + + + +control_ListItem +64.000000 +64.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton64 +22594 +4 + + + + +control_ListItem +64.000000 +64.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton64 +22594 +4 + + + + + +Arrow +72.000000 +48.000000 +206.000015,104.000000,0.000000 +ArrowProgressState +24 + + + + +Inventory +380.000000 +128.000000 +25.000000,240.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +226.000000 +45.000000 +7.000000,22.000000,0.000000 +5 +false +XuiButton +0.000000,10.000000,0.000000 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + + +UseRow +380.000000 +44.000000 +25.000000,379.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +226.000000 +45.000000 +7.000000,22.000000,0.000000 +5 +false +XuiButton +0.000000,10.000000,0.000000 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + + +InventoryText +378.000000 +34.000000 +26.000000,210.000000,0.000000 +12 +LabelContainerSceneLeft + + + + +FireworksText +380.000000 +34.000000 +26.000000,14.000000,0.000000 +LabelContainerSceneLeft + + + + +Ingredients +128.000000 +128.000000 +59.000065,64.000000,0.000000 +3 +CXuiCtrlSlotList +ItemGridVertical + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +226.000000 +45.000000 +7.000000,22.000000,0.000000 +5 +false +XuiButton +0.000000,10.000000,0.000000 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + + +Pointer +42.000000 +42.000000 +-185.000000,-63.000015,0.000000 +9 +false +CXuiCtrlSlotItem +ItemPointer + + + + + + +Normal + + + +EndNormal + +stop + + +MoveLeft + + + +EndMoveLeft + +stop + + +MoveRight + + + +EndMoveRight + +gotoandstop +EndNormal + + + +Group +Position + + +0 +426.000000,130.000000,0.000000 + + + +0 +426.000000,130.000000,0.000000 + + + +2 +100 +-100 +50 +424.500031,130.000000,0.000000 + + + +0 +160.000000,130.000000,0.000000 + + + +2 +100 +-100 +50 +160.000000,130.000000,0.000000 + + + +0 +426.000000,130.000000,0.000000 + + + + + diff --git a/Minecraft.Client/Common/Media/xuiscene_fireworks_480.xui b/Minecraft.Client/Common/Media/xuiscene_fireworks_480.xui new file mode 100644 index 00000000..820736d6 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_fireworks_480.xui @@ -0,0 +1,1973 @@ + + +640.000000 +480.000000 + + + +DispenserScene +1280.000000 +720.000000 +CXuiSceneFireworks +XuiBlankScene +Pointer + + + +Group +260.000000 +280.000000 +190.000000,100.000000,0.000000 +15 +GraphicPanel +Pointer + + + +Inventory +234.000000 +80.000000 +13.000009,152.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +UseRow +234.000000 +13.000009,240.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +Ingredients +80.000000 +80.000000 +42.000000,38.000000,0.000000 +2 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +InventoryText +232.000000 +22.000000 +12.000000,132.000000,0.000000 +LabelContainerSceneLeftSmall + + + + +FireworksText +240.000000 +25.000000 +12.000000,6.000000,0.000000 +LabelContainerSceneLeftSmall + + + + +Arrow +32.000000 +32.000000 +132.000000,62.000000,0.000000 +ArrowProgressStateSmall +24 + + + + +Result +44.000000 +44.000000 +172.000000,56.000000,0.000000 +CXuiCtrlSlotList +ItemGridVertical + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + + +Pointer +26.000000 +26.000000 +-50.000000,-40.000000,0.000000 +9 +false +CXuiCtrlSlotItem +ItemPointerSmall + + + + + + +Normal + + + +EndNormal + +stop + + +MoveLeft + + + +EndMoveLeft + +stop + + +MoveRight + + + +EndMoveRight + +gotoandstop +EndNormal + + + +Group +Position + + +0 +190.000000,100.000000,0.000000 + + + +0 +190.000000,100.000000,0.000000 + + + +2 +100 +-100 +50 +190.000000,100.000000,0.000000 + + + +0 +33.750000,100.000000,0.000000 + + + +2 +100 +-100 +50 +60.000000,100.000000,0.000000 + + + +0 +190.000000,100.000000,0.000000 + + + + + diff --git a/Minecraft.Client/Common/Media/xuiscene_fireworks_small.xui b/Minecraft.Client/Common/Media/xuiscene_fireworks_small.xui new file mode 100644 index 00000000..d50b5ef7 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_fireworks_small.xui @@ -0,0 +1,1558 @@ + + +640.000000 +360.000000 + + + +DispenserScene +640.000000 +360.000000 +CXuiSceneFireworks +XuiBlankScene +Pointer + + + +Group +260.000000 +280.000000 +190.000000,0.000000,0.000000 +15 +GraphicPanel +Pointer + + + +Inventory +234.000000 +80.000000 +12.000000,151.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +UseRow +234.000000 +12.000000,240.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +Ingredients +80.000000 +80.000000 +42.000000,38.000000,0.000000 +2 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +InventoryText +232.000000 +22.000000 +12.000000,130.000000,0.000000 +LabelContainerSceneLeftSmall + + + + +FireworksText +240.000000 +25.000000 +12.000000,6.000000,0.000000 +LabelContainerSceneLeftSmall + + + + +Arrow +32.000000 +32.000000 +132.000000,62.000000,0.000000 +ArrowProgressStateSmall +24 + + + + +Result +44.000000 +44.000000 +172.000000,56.000000,0.000000 +CXuiCtrlSlotList +ItemGridVertical + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + + +Pointer +26.000000 +26.000000 +-50.000000,-50.000000,0.000000 +9 +false +CXuiCtrlSlotItem +ItemPointerSmall + + + + + + +Normal + + + +EndNormal + +stop + + +MoveLeft + + + +EndMoveLeft + +stop + + +MoveRight + + + +EndMoveRight + +gotoandstop +EndNormal + + + +Group +Position + + +0 +190.000000,0.000000,0.000000 + + + +0 +190.000000,0.000000,0.000000 + + + +2 +100 +-100 +50 +190.000000,0.000000,0.000000 + + + +0 +64.000000,0.000000,0.000000 + + + +2 +100 +-100 +50 +92.000000,0.000000,0.000000 + + + +0 +190.000000,0.000000,0.000000 + + + + + diff --git a/Minecraft.Client/Common/Media/xuiscene_hopper.h b/Minecraft.Client/Common/Media/xuiscene_hopper.h new file mode 100644 index 00000000..ca6d0389 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_hopper.h @@ -0,0 +1,99 @@ +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Inventory L"Inventory" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_UseRow L"UseRow" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Hopper L"Hopper" +#define IDC_InventoryText L"InventoryText" +#define IDC_HopperText L"HopperText" +#define IDC_Pointer L"Pointer" +#define IDC_Group L"Group" +#define IDC_HopperScene L"HopperScene" diff --git a/Minecraft.Client/Common/Media/xuiscene_hopper.xui b/Minecraft.Client/Common/Media/xuiscene_hopper.xui new file mode 100644 index 00000000..762f3f5d --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_hopper.xui @@ -0,0 +1,1436 @@ + + +1280.000000 +720.000000 + + + +HopperScene +1280.000000 +720.000000 +CXuiSceneHopper +XuiBlankScene +Pointer + + + +Group +430.000000 +335.000000 +425.000000,192.500046,0.000000 +15 +XuiScene +Pointer + + + +Inventory +378.000000 +128.000000 +26.000017,138.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + + +UseRow +378.000000 +45.000000 +26.000017,276.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + + +Hopper +210.000000 +45.000000 +110.000015,50.000000,0.000000 +2 +CXuiCtrlSlotList +ItemGridVertical + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + + +InventoryText +374.000000 +26.000000,108.000000,0.000000 +8 +LabelContainerSceneLeft + + + + +HopperText +374.000000 +28.000017,16.000000,0.000000 +2 +LabelContainerSceneCentre + + + + +Pointer +42.000000 +42.000000 +-185.000000,-246.000015,0.000000 +9 +false +CXuiCtrlSlotItem +ItemPointer + + + + + + +Normal + + + +EndNormal + +stop + + +MoveLeft + + + +EndMoveLeft + +stop + + +MoveRight + + + +EndMoveRight + +gotoandstop +EndNormal + + + +Group +Position + + +0 +425.000000,192.500046,0.000000 + + + +0 +425.000000,192.500031,0.000000 + + + +2 +100 +-100 +50 +425.000000,192.500031,0.000000 + + + +0 +160.000000,192.500031,0.000000 + + + +2 +100 +-100 +50 +160.000000,192.500031,0.000000 + + + +0 +425.000000,192.500031,0.000000 + + + + + diff --git a/Minecraft.Client/Common/Media/xuiscene_hopper_480.h b/Minecraft.Client/Common/Media/xuiscene_hopper_480.h new file mode 100644 index 00000000..263aeddf --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_hopper_480.h @@ -0,0 +1,141 @@ +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Inventory L"Inventory" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_UseRow L"UseRow" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Hopper L"Hopper" +#define IDC_InventoryText L"InventoryText" +#define IDC_HopperText L"HopperText" +#define IDC_Pointer L"Pointer" +#define IDC_Group L"Group" +#define IDC_HoperScene L"HoperScene" diff --git a/Minecraft.Client/Common/Media/xuiscene_hopper_480.xui b/Minecraft.Client/Common/Media/xuiscene_hopper_480.xui new file mode 100644 index 00000000..ba4c2cbc --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_hopper_480.xui @@ -0,0 +1,1891 @@ + + +640.000000 +480.000000 + + + +HoperScene +640.000000 +480.000000 +CXuiSceneHopper +XuiBlankScene +Pointer + + + +Group +260.000000 +220.000000 +190.000015,130.000031,0.000000 +GraphicPanel +Pointer + + + +Inventory +234.000000 +80.000000 +13.000001,92.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +UseRow +234.000000 +13.000001,180.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +Hopper +130.000000 +65.000015,36.000000,0.000000 +2 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +InventoryText +232.000000 +22.000000 +13.000000,72.000000,0.000000 +LabelContainerSceneLeftSmall + + + + +HopperText +160.000000 +25.000000 +50.000008,14.000000,0.000000 +LabelContainerSceneCentreSmall + + + + +Pointer +26.000000 +26.000000 +-50.000000,-100.000000,0.000000 +9 +false +CXuiCtrlSlotItem +ItemPointerSmall + + + + + + +Normal + + + +EndNormal + +stop + + +MoveLeft + + + +EndMoveLeft + +stop + + +MoveRight + + + +EndMoveRight + +gotoandstop +EndNormal + + + +Group +Position + + +0 +190.000015,130.000031,0.000000 + + + +0 +190.000000,130.000031,0.000000 + + + +2 +100 +-100 +50 +190.000000,130.000031,0.000000 + + + +0 +33.750000,130.000031,0.000000 + + + +2 +100 +-100 +50 +60.000000,130.000031,0.000000 + + + +0 +190.000000,130.000031,0.000000 + + + + + diff --git a/Minecraft.Client/Common/Media/xuiscene_hopper_small.h b/Minecraft.Client/Common/Media/xuiscene_hopper_small.h new file mode 100644 index 00000000..ca6d0389 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_hopper_small.h @@ -0,0 +1,99 @@ +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Inventory L"Inventory" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_UseRow L"UseRow" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Hopper L"Hopper" +#define IDC_InventoryText L"InventoryText" +#define IDC_HopperText L"HopperText" +#define IDC_Pointer L"Pointer" +#define IDC_Group L"Group" +#define IDC_HopperScene L"HopperScene" diff --git a/Minecraft.Client/Common/Media/xuiscene_hopper_small.xui b/Minecraft.Client/Common/Media/xuiscene_hopper_small.xui new file mode 100644 index 00000000..d6f09756 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_hopper_small.xui @@ -0,0 +1,1348 @@ + + +640.000000 +360.000000 + + + +HopperScene +640.000000 +360.000000 +CXuiSceneHopper +XuiBlankScene +Pointer + + + +Group +260.000000 +220.000000 +190.000000,0.000000,0.000000 +15 +GraphicPanel +Pointer + + + +Inventory +234.000000 +80.000000 +13.000009,91.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +UseRow +234.000000 +13.000009,180.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +Hopper +130.000000 +65.000015,36.000000,0.000000 +2 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +InventoryText +232.000000 +22.000000 +13.000000,70.000000,0.000000 +8 +LabelContainerSceneLeftSmall + + + + +HopperText +162.000000 +25.000000 +49.000008,14.000000,0.000000 +2 +LabelContainerSceneCentreSmall + + + + +Pointer +26.000000 +26.000000 +-50.000000,-110.000000,0.000000 +9 +false +CXuiCtrlSlotItem +ItemPointerSmall + + + + + + +Normal + + + +EndNormal + +stop + + +MoveLeft + + + +EndMoveLeft + +stop + + +MoveRight + + + +EndMoveRight + +gotoandstop +EndNormal + + + +Group +Position + + +0 +190.000000,0.000000,0.000000 + + + +0 +190.000000,0.000000,0.000000 + + + +2 +100 +-100 +50 +190.000000,0.000000,0.000000 + + + +0 +64.000000,0.000000,0.000000 + + + +2 +100 +-100 +50 +92.000000,0.000000,0.000000 + + + +0 +190.000000,0.000000,0.000000 + + + + + diff --git a/Minecraft.Client/Common/Media/xuiscene_horse.h b/Minecraft.Client/Common/Media/xuiscene_horse.h new file mode 100644 index 00000000..c122d1f7 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_horse.h @@ -0,0 +1,160 @@ +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Inventory L"Inventory" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_UseRow L"UseRow" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Chest L"Chest" +#define IDC_InventoryText L"InventoryText" +#define IDC_HorseText L"HorseText" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Saddle L"Saddle" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Armor L"Armor" +#define IDC_Horse L"Horse" +#define IDC_Pointer L"Pointer" +#define IDC_Group L"Group" +#define IDC_HorseScene L"HorseScene" diff --git a/Minecraft.Client/Common/Media/xuiscene_horse.xui b/Minecraft.Client/Common/Media/xuiscene_horse.xui new file mode 100644 index 00000000..193df21a --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_horse.xui @@ -0,0 +1,2281 @@ + + +1280.000000 +720.000000 + + + +HorseScene +1280.000000 +720.000000 +CXuiSceneHorseInventory +XuiBlankScene +Pointer + + + +Group +430.000000 +430.000000 +425.000000,135.000031,0.000000 +15 +XuiScene +Pointer + + + +Inventory +378.000000 +128.000000 +26.000017,234.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + + +UseRow +382.000000 +45.000000 +26.000000,372.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + + +Chest +210.000000 +126.000000 +194.000000,56.000000,0.000000 +2 +CXuiCtrlSlotList +ItemGridVertical + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + + +InventoryText +374.000000 +26.000000,202.000000,0.000000 +8 +LabelContainerSceneLeft + + + + +HorseText +374.000000 +26.000000,16.000000,0.000000 +2 +LabelContainerSceneLeft + + + + +Saddle +45.000000 +45.000000 +26.000000,56.000000,0.000000 +2 +CXuiCtrlSlotList +ItemGridHorseSaddle + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonHorseSaddle +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonHorseSaddle +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonHorseSaddle +22594 +4 + + + + + +Armor +45.000000 +45.000000 +26.000000,102.000000,0.000000 +2 +CXuiCtrlSlotList +ItemGridHorseArmor + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonHorseArmor +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonHorseArmor +22594 +4 + + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButtonHorseArmor +22594 +4 + + + + + +Horse +120.000000 +126.000000 +71.000000,56.000000,0.000000 +3 +HorsePanel +..\Images\img1.png + + + + +Pointer +42.000000 +42.000000 +-185.000000,-151.000015,0.000000 +9 +false +CXuiCtrlSlotItem +ItemPointer + + + + + + +Normal + + + +EndNormal + +stop + + +MoveLeft + + + +EndMoveLeft + +stop + + +MoveRight + + + +EndMoveRight + +gotoandstop +EndNormal + + + +Group +Position + + +0 +425.000000,135.000031,0.000000 + + + +0 +425.000000,135.000046,0.000000 + + + +2 +100 +-100 +50 +425.000000,135.000046,0.000000 + + + +0 +160.000000,135.000046,0.000000 + + + +2 +100 +-100 +50 +160.000000,135.000046,0.000000 + + + +0 +425.000000,135.000000,0.000000 + + + + + diff --git a/Minecraft.Client/Common/Media/xuiscene_horse_480.h b/Minecraft.Client/Common/Media/xuiscene_horse_480.h new file mode 100644 index 00000000..f6375dc6 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_horse_480.h @@ -0,0 +1,209 @@ +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Inventory L"Inventory" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_UseRow L"UseRow" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Chest L"Chest" +#define IDC_InventoryText L"InventoryText" +#define IDC_HopperText L"HopperText" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Saddle L"Saddle" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Armor L"Armor" +#define IDC_Horse L"Horse" +#define IDC_Pointer L"Pointer" +#define IDC_Group L"Group" +#define IDC_HorseScene L"HorseScene" diff --git a/Minecraft.Client/Common/Media/xuiscene_horse_480.xui b/Minecraft.Client/Common/Media/xuiscene_horse_480.xui new file mode 100644 index 00000000..83d3496f --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_horse_480.xui @@ -0,0 +1,2770 @@ + + +640.000000 +480.000000 + + + +HorseScene +640.000000 +480.000000 +CXuiSceneHorseInventory +XuiBlankScene +Pointer + + + +Group +260.000000 +285.000000 +190.000015,98.000000,0.000000 +GraphicPanel +Pointer + + + +Inventory +234.000000 +80.000000 +12.000000,156.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +UseRow +234.000000 +12.000000,244.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +Chest +130.000000 +90.000000 +116.000000,40.000000,0.000000 +2 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +InventoryText +232.000000 +22.000000 +12.000000,132.000000,0.000000 +LabelContainerSceneLeftSmall + + + + +HopperText +160.000000 +25.000000 +12.000000,14.000000,0.000000 +LabelContainerSceneLeftSmall + + + + +Saddle +30.000000 +12.000000,40.000000,0.000000 +2 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +Armor +30.000000 +12.000000,68.000000,0.000000 +2 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +Horse +74.000000 +78.000000 +40.000000,40.000000,0.000000 +3 +HorsePanel +..\Images\img1.png + + + + +Pointer +26.000000 +26.000000 +-50.000000,-35.000000,0.000000 +9 +false +CXuiCtrlSlotItem +ItemPointerSmall + + + + + + +Normal + + + +EndNormal + +stop + + +MoveLeft + + + +EndMoveLeft + +stop + + +MoveRight + + + +EndMoveRight + +gotoandstop +EndNormal + + + +Group +Position + + +0 +190.000015,98.000000,0.000000 + + + +0 +190.000000,98.000000,0.000000 + + + +2 +100 +-100 +50 +190.000000,98.000000,0.000000 + + + +0 +33.750000,98.000000,0.000000 + + + +2 +100 +-100 +50 +60.000000,98.000000,0.000000 + + + +0 +190.000000,98.000000,0.000000 + + + + + diff --git a/Minecraft.Client/Common/Media/xuiscene_horse_small.h b/Minecraft.Client/Common/Media/xuiscene_horse_small.h new file mode 100644 index 00000000..a1311742 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_horse_small.h @@ -0,0 +1,163 @@ +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Inventory L"Inventory" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_UseRow L"UseRow" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Chest L"Chest" +#define IDC_InventoryText L"InventoryText" +#define IDC_HorseText L"HorseText" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Saddle L"Saddle" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Armor L"Armor" +#define IDC_Horse L"Horse" +#define IDC_Pointer L"Pointer" +#define IDC_Group L"Group" +#define IDC_HorseScene L"HorseScene" diff --git a/Minecraft.Client/Common/Media/xuiscene_horse_small.xui b/Minecraft.Client/Common/Media/xuiscene_horse_small.xui new file mode 100644 index 00000000..36d04ba6 --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_horse_small.xui @@ -0,0 +1,2175 @@ + + +640.000000 +360.000000 + + + +HorseScene +640.000000 +360.000000 +CXuiSceneHorseInventory +XuiBlankScene +Pointer + + + +Group +260.000000 +285.000000 +190.000000,0.000000,0.000000 +15 +GraphicPanel +Pointer + + + +Inventory +234.000000 +80.000000 +12.000000,156.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +UseRow +234.000000 +12.000000,244.000000,0.000000 +8 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +Chest +130.000000 +78.000000 +116.000000,40.000000,0.000000 +2 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +InventoryText +232.000000 +22.000000 +12.000000,134.000000,0.000000 +8 +LabelContainerSceneLeftSmall + + + + +HorseText +162.000000 +25.000000 +12.000000,14.000000,0.000000 +2 +LabelContainerSceneLeftSmall + + + + +Saddle +30.000000 +12.000000,40.000004,0.000000 +2 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +Armor +30.000000 +12.000000,68.000000,0.000000 +2 +CXuiCtrlSlotList +ItemGridVertical26 + + + +control_ListItem +42.000000 +42.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + +control_ListItem +26.000000 +26.000000 +7 +false +CXuiCtrlSlotItemListItem +ItemButton26 +22594 +4 + + + + + +Horse +74.000000 +78.000000 +40.000000,40.000000,0.000000 +3 +HorsePanel +..\Images\img1.png + + + + +Pointer +26.000000 +26.000000 +-50.000000,-45.000000,0.000000 +9 +false +CXuiCtrlSlotItem +ItemPointerSmall + + + + + + +Normal + + + +EndNormal + +stop + + +MoveLeft + + + +EndMoveLeft + +stop + + +MoveRight + + + +EndMoveRight + +gotoandstop +EndNormal + + + +Group +Position + + +0 +190.000000,0.000000,0.000000 + + + +0 +190.000000,0.000000,0.000000 + + + +2 +100 +-100 +50 +190.000000,0.000000,0.000000 + + + +0 +64.000000,0.000000,0.000000 + + + +2 +100 +-100 +50 +92.000000,0.000000,0.000000 + + + +0 +190.000000,0.000000,0.000000 + + + + + diff --git a/Minecraft.Client/Common/Media/xuiscene_howtoplay.h b/Minecraft.Client/Common/Media/xuiscene_howtoplay.h index 488aec69..c51696ea 100644 --- a/Minecraft.Client/Common/Media/xuiscene_howtoplay.h +++ b/Minecraft.Client/Common/Media/xuiscene_howtoplay.h @@ -70,4 +70,22 @@ #define IDC_TInventory L"TInventory" #define IDC_XuiHtmlControlEnderchest L"XuiHtmlControlEnderchest" #define IDC_XuiImageEnderchest L"XuiImageEnderchest" +#define IDC_XuiHtmlControlHorses L"XuiHtmlControlHorses" +#define IDC_XuiImageHorses L"XuiImageHorses" +#define IDC_XuiHtmlControlBeacon L"XuiHtmlControlBeacon" +#define IDC_XuiImageBeacon L"XuiImageBeacon" +#define IDC_BeSecond L"BeSecond" +#define IDC_BeFirst L"BeFirst" +#define IDC_XuiImageDropper L"XuiImageDropper" +#define IDC_XuiHtmlControlDropper L"XuiHtmlControlDropper" +#define IDC_DrInventory L"DrInventory" +#define IDC_DrText L"DrText" +#define IDC_XuiImageHopper L"XuiImageHopper" +#define IDC_XuiHtmlControlHopper L"XuiHtmlControlHopper" +#define IDC_HInventory L"HInventory" +#define IDC_HText L"HText" +#define IDC_XuiImageFireworks L"XuiImageFireworks" +#define IDC_XuiHtmlControlFireworks L"XuiHtmlControlFireworks" +#define IDC_FiInventory L"FiInventory" +#define IDC_FiText L"FiText" #define IDC_SceneHowToPlay L"SceneHowToPlay" diff --git a/Minecraft.Client/Common/Media/xuiscene_howtoplay.xui b/Minecraft.Client/Common/Media/xuiscene_howtoplay.xui index 09960371..f169f718 100644 --- a/Minecraft.Client/Common/Media/xuiscene_howtoplay.xui +++ b/Minecraft.Client/Common/Media/xuiscene_howtoplay.xui @@ -8,7 +8,7 @@ SceneHowToPlay 1280.000000 720.000000 -[LayerFolders]0|-Enderchest|2|+|0|-Trading|7|+|0|-Anvil|5|+|0|-Enchantment|4|+|0|+Brewing|4|+|0|+FarmingAnimals|2|+|0|-Breeding|2|+|1|+Creative Mode|3|+|0|+What's New|1|+|1|+SocialMedia|1|+|0|-Multiplayer|1|+|0|+CraftingTable|5|+|0|+Crafting|5|+|0|+Furnace|6|+|0|+Large Chest|4|+|0|+SmallChest|4|+|0|+Inventory|3|+|0|+Basics|1|+|0|+HUD|2|+|0|+Dispenser|4|+|0|+TheEnd|2|+|0|-Nether Portal|2|+|0[/LayerFolders] +[LayerFolders]0|-Fireworks|4|+|0|-Hopper|4|+|0|-Dropper|4|+|0|-Beacon|4|+|0|-Horses|2|+|0|-Enderchest|2|+|0|-Trading|7|+|0|-Anvil|5|+|0|-Enchantment|4|+|0|-Brewing|4|+|0|-FarmingAnimals|2|+|0|-Breeding|2|+|1|-Creative Mode|3|+|0|+What's New|1|+|1|-SocialMedia|1|+|0|-Multiplayer|1|+|0|-CraftingTable|5|+|0|-Crafting|5|+|0|-Furnace|6|+|0|-Large Chest|4|+|0|-SmallChest|4|+|0|-Inventory|3|+|0|-Basics|1|+|0|-HUD|2|+|0|-Dispenser|4|+|0|-TheEnd|2|+|0|-Nether Portal|2|+|0[/LayerFolders] CScene_HowToPlay XuiBlankScene XuiSliderVolume @@ -441,7 +441,7 @@ XuiImageBreeding 339.000000 342.000000 -611.000000,246.000000,0.000000 +612.000000,246.000000,0.000000 ImHowToPlayBreeding @@ -459,7 +459,7 @@ XuiImageFarmingAnimals 339.000000 342.000000 -611.000000,246.000000,0.000000 +612.000000,246.000000,0.000000 ImHowToPlayFarmingAnimals @@ -477,7 +477,7 @@ XuiImageBrewing 339.000000 342.000000 -611.000000,241.000000,0.000000 +612.000000,241.000000,0.000000 ImHowToPlayBrewing @@ -513,7 +513,7 @@ XuiImageEnchantment 339.000000 342.000000 -611.000000,226.000000,0.000000 +612.000000,226.000000,0.000000 ImHowToPlayEnchantment @@ -657,9 +657,173 @@ XuiImageEnderchest 339.000000 342.000000 -611.000000,246.000000,0.000000 +612.000000,246.000000,0.000000 ImHowToPlayEnderchest + + +XuiHtmlControlHorses +380.000000 +331.000000 +176.000076,242.000000,0.000000 +XuiHtmlControl_H2P + + + + +XuiImageHorses +516.000000 +302.000000 +588.000061,266.000000,0.000000 +ImHowToPlayHorses + + + + +XuiHtmlControlBeacon +380.000000 +359.000000 +208.000000,222.000000,0.000000 +XuiHtmlControl_H2P + + + + +XuiImageBeacon +430.000000 +430.000000 +640.000000,198.000000,0.000000 +ImHowToPlayBeacon + + + + +BeSecond +190.000000 +34.000000 +861.125000,218.000000,0.000000 +XuiLabelDarkCentredWrapSmall + + + + + + +BeFirst +190.000000 +34.000000 +659.125061,218.000000,0.000000 +XuiLabelDarkCentredWrapSmall + + + + +XuiImageDropper +453.000000 +431.000000 +632.000000,186.000000,0.000000 +ImHowToPlayDispenser + + + + +XuiHtmlControlDropper +380.000000 +296.000000 +194.000000,252.000000,0.000000 +XuiHtmlControl_H2P + + + + +DrInventory +372.000000 +28.000000 +670.500061,376.000000,0.000000 +LabelContainerSceneLeft + + + + +DrText +260.000000 +32.000000 +794.500061,214.000000,0.000000 +LabelContainerSceneLeft + + + + +XuiImageHopper +430.000000 +336.000000 +620.000000,206.000000,0.000000 +ImHowToPlayHopper + + + + +XuiHtmlControlHopper +380.000000 +296.000000 +206.000000,220.000000,0.000000 +XuiHtmlControl_H2P + + + + +HInventory +372.000000 +28.000000 +648.000000,316.000000,0.000000 +LabelContainerSceneLeft + + + + +HText +392.000000 +32.000000 +640.000000,220.000000,0.000000 +LabelContainerSceneCentre + + + + +XuiImageFireworks +428.000000 +450.000000 +636.000000,176.000000,0.000000 +ImHowToPlayFireworks + + + + +XuiHtmlControlFireworks +380.000000 +400.000000 +214.000000,196.000000,0.000000 +XuiHtmlControl_H2P + + + + +FiInventory +372.000000 +28.000000 +665.500061,382.000000,0.000000 +LabelContainerSceneLeft + + + + +FiText +260.000000 +32.000000 +665.500061,194.000000,0.000000 +LabelContainerSceneLeft + + diff --git a/Minecraft.Client/Common/Media/xuiscene_howtoplay_480.h b/Minecraft.Client/Common/Media/xuiscene_howtoplay_480.h index 8ef840c6..447482ea 100644 --- a/Minecraft.Client/Common/Media/xuiscene_howtoplay_480.h +++ b/Minecraft.Client/Common/Media/xuiscene_howtoplay_480.h @@ -69,4 +69,22 @@ #define IDC_TVillagerOffers L"TVillagerOffers" #define IDC_XuiHtmlControlEnderchest L"XuiHtmlControlEnderchest" #define IDC_XuiImageEnderchest L"XuiImageEnderchest" +#define IDC_XuiHtmlControlHorses L"XuiHtmlControlHorses" +#define IDC_XuiImageHorses L"XuiImageHorses" +#define IDC_XuiHtmlControlBeacon L"XuiHtmlControlBeacon" +#define IDC_XuiImageBeacon L"XuiImageBeacon" +#define IDC_BeSecond L"BeSecond" +#define IDC_BeFirst L"BeFirst" +#define IDC_XuiImageDropper L"XuiImageDropper" +#define IDC_XuiHtmlControlDropper L"XuiHtmlControlDropper" +#define IDC_DrInventory L"DrInventory" +#define IDC_DrText L"DrText" +#define IDC_XuiImageHopper L"XuiImageHopper" +#define IDC_XuiHtmlControlHopper L"XuiHtmlControlHopper" +#define IDC_HInventory L"HInventory" +#define IDC_HText L"HText" +#define IDC_XuiImageFireworks L"XuiImageFireworks" +#define IDC_XuiHtmlControlFireworks L"XuiHtmlControlFireworks" +#define IDC_FiInventory L"FiInventory" +#define IDC_FiText L"FiText" #define IDC_SceneHowToPlay L"SceneHowToPlay" diff --git a/Minecraft.Client/Common/Media/xuiscene_howtoplay_480.xui b/Minecraft.Client/Common/Media/xuiscene_howtoplay_480.xui index f0d5790f..b4612e3e 100644 --- a/Minecraft.Client/Common/Media/xuiscene_howtoplay_480.xui +++ b/Minecraft.Client/Common/Media/xuiscene_howtoplay_480.xui @@ -8,7 +8,7 @@ SceneHowToPlay 640.000000 480.000000 -[LayerFolders]0|-Enderchest|2|+|0|-Trading|6|+|0|-Anvil|5|+|0|+Enchantment|4|+|0|+Brewing|4|+|0|-FarmingAnimals|2|+|0|+Breeding|2|+|1|+Creative Mode|3|+|1|+What's New|1|+|0|+Multiplayer|1|+|0|+SocialMedia|1|+|0|+CraftingTable|5|+|0|+Crafting|5|+|0|-Furnace|6|+|0|+Large Chest|4|+|0|+SmallChest|4|+|0|+Inventory|3|+|0|+Basics|1|+|0|+HUD|2|+|0|+Dispenser|4|+|0|+Nether Portal|2|+|0|-TheEnd|2|+|0[/LayerFolders] +[LayerFolders]0|-Fireworks|4|+|0|-Hopper|4|+|0|-Dropper|4|+|0|-Beacon|4|+|0|-Horses|2|+|0|-Enderchest|2|+|0|-Trading|6|+|0|-Anvil|5|+|0|+Enchantment|4|+|0|+Brewing|4|+|0|-FarmingAnimals|2|+|0|+Breeding|2|+|1|+Creative Mode|3|+|1|+What's New|1|+|0|+Multiplayer|1|+|0|+SocialMedia|1|+|0|+CraftingTable|5|+|0|+Crafting|5|+|0|-Furnace|6|+|0|+Large Chest|4|+|0|+SmallChest|4|+|0|+Inventory|3|+|0|+Basics|1|+|0|+HUD|2|+|0|+Dispenser|4|+|0|+Nether Portal|2|+|0|-TheEnd|2|+|0[/LayerFolders] CScene_HowToPlay XuiBlankScene XuiSliderVolume @@ -664,5 +664,168 @@ ImHowToPlayEnderchestSmall + + +XuiHtmlControlHorses +282.000000 +239.000000 +48.000114,134.000061,0.000000 +XuiHtmlControl_H2P_Small + + + + +XuiImageHorses +248.000000 +146.000000 +346.000092,178.000061,0.000000 +ImHowToPlayHorsesSmall + + + + +XuiHtmlControlBeacon +204.000000 +240.000000 +49.999985,136.000061,0.000000 +XuiHtmlControl_H2P_Small + + + + +XuiImageBeacon +336.000000 +290.000000 +270.000000,124.000053,0.000000 +ImHowToPlayBeaconSmall + + + + +BeSecond +144.000000 +34.000000 +444.000000,138.000061,0.000000 +XuiLabelDarkCentredWrapSmall + + + + +BeFirst +144.000000 +34.000000 +286.000000,138.000061,0.000000 +XuiLabelDarkCentredWrapSmall + + + + +XuiImageDropper +262.000000 +280.000000 +340.000000,132.000061,0.000000 +ImHowToPlayDispenserSmall + + + + +XuiHtmlControlDropper +282.000000 +240.000000 +42.000000,138.000000,0.000000 +XuiHtmlControl_H2P_Small + + + + +DrInventory +230.000000 +24.000000 +354.000000,262.000061,0.000000 +LabelContainerSceneLeftSmall + + + + +DrText +160.000000 +24.000000 +422.000000,142.000061,0.000000 +LabelContainerSceneLeftSmall + + + + +XuiImageHopper +260.000000 +220.000000 +340.000000,162.000000,0.000000 +ImHowToPlayHopperSmall + + + + +XuiHtmlControlHopper +282.000000 +240.000000 +42.000000,140.000000,0.000000 +XuiHtmlControl_H2P_Small + + + + +HInventory +230.000000 +24.000000 +354.000000,236.000061,0.000000 +LabelContainerSceneLeftSmall + + + + +HText +230.000000 +24.000000 +356.000000,170.000061,0.000000 +LabelContainerSceneCentreSmall + + + + +XuiImageFireworks +260.000000 +280.000000 +344.000000,134.000061,0.000000 +ImHowToPlayFireworksSmall + + + + +XuiHtmlControlFireworks +282.000000 +240.000000 +46.000000,140.000000,0.000000 +XuiHtmlControl_H2P_Small +false + + + + +FiInventory +230.000000 +28.000000 +358.000000,266.000061,0.000000 +LabelContainerSceneLeftSmall + + + + +FiText +230.000000 +24.000000 +358.000000,144.000061,0.000000 +LabelContainerSceneLeftSmall + + diff --git a/Minecraft.Client/Common/Media/xuiscene_howtoplay_small.h b/Minecraft.Client/Common/Media/xuiscene_howtoplay_small.h index 29f6a8a2..12377729 100644 --- a/Minecraft.Client/Common/Media/xuiscene_howtoplay_small.h +++ b/Minecraft.Client/Common/Media/xuiscene_howtoplay_small.h @@ -69,4 +69,22 @@ #define IDC_TInventory L"TInventory" #define IDC_XuiImageEnderchest L"XuiImageEnderchest" #define IDC_XuiHtmlControlEnderchest L"XuiHtmlControlEnderchest" +#define IDC_XuiHtmlControlHorses L"XuiHtmlControlHorses" +#define IDC_XuiImageHorses L"XuiImageHorses" +#define IDC_XuiHtmlControlBeacon L"XuiHtmlControlBeacon" +#define IDC_XuiImageBeacon L"XuiImageBeacon" +#define IDC_BeSecond L"BeSecond" +#define IDC_BeFirst L"BeFirst" +#define IDC_XuiImageDropper L"XuiImageDropper" +#define IDC_XuiHtmlControlDropper L"XuiHtmlControlDropper" +#define IDC_DrInventory L"DrInventory" +#define IDC_DrText L"DrText" +#define IDC_XuiImageHopper L"XuiImageHopper" +#define IDC_XuiHtmlControlHopper L"XuiHtmlControlHopper" +#define IDC_HInventory L"HInventory" +#define IDC_HText L"HText" +#define IDC_XuiImageFireworks L"XuiImageFireworks" +#define IDC_XuiHtmlControlFireworks L"XuiHtmlControlFireworks" +#define IDC_FiInventory L"FiInventory" +#define IDC_FiText L"FiText" #define IDC_SceneHowToPlay L"SceneHowToPlay" diff --git a/Minecraft.Client/Common/Media/xuiscene_howtoplay_small.xui b/Minecraft.Client/Common/Media/xuiscene_howtoplay_small.xui index 359860d1..989ab6c0 100644 --- a/Minecraft.Client/Common/Media/xuiscene_howtoplay_small.xui +++ b/Minecraft.Client/Common/Media/xuiscene_howtoplay_small.xui @@ -8,7 +8,7 @@ SceneHowToPlay 640.000000 360.000000 -[LayerFolders]0|-Enderchest|2|+|0|-Trading|6|+|0|+Anvil|5|+|0|-Enchantment|4|+|0|+Brewing|4|+|0|+FarmingAnimals|2|+|0|-Breeding|2|+|1|+Creative Mode|3|+|4|+CraftingTable|5|+|0|+Crafting|5|+|0|-Furnace|6|+|0|+Large Chest|4|+|0|+SmallChest|4|+|0|+Inventory|3|+|0|+Basics|1|+|0|+HUD|2|+|0|+Dispenser|4|+|0|-Nether Portal|2|+|0|+TheEnd|2|+|0[/LayerFolders] +[LayerFolders]0|-Fireworks|4|+|0|-Hopper|4|+|0|-Dropper|4|+|0|-Beacon|4|+|0|-Horses|2|+|0|-Enderchest|2|+|0|-Trading|6|+|0|-Anvil|5|+|0|-Enchantment|4|+|0|+Brewing|4|+|0|+FarmingAnimals|2|+|0|-Breeding|2|+|1|+Creative Mode|3|+|4|+CraftingTable|5|+|0|+Crafting|5|+|0|-Furnace|6|+|0|+Large Chest|4|+|0|+SmallChest|4|+|0|+Inventory|3|+|0|+Basics|1|+|0|+HUD|2|+|0|+Dispenser|4|+|0|-Nether Portal|2|+|0|+TheEnd|2|+|0[/LayerFolders] CScene_HowToPlay XuiBlankScene XuiSliderVolume @@ -665,5 +665,168 @@ XuiHtmlControl_H2P_Small + + +XuiHtmlControlHorses +282.000000 +239.000000 +74.000114,13.000046,0.000000 +XuiHtmlControl_H2P_Small + + + + +XuiImageHorses +248.000000 +146.000000 +372.000092,58.000046,0.000000 +ImHowToPlayHorsesSmall + + + + +XuiHtmlControlBeacon +204.000000 +240.000000 +76.999985,14.000046,0.000000 +XuiHtmlControl_H2P_Small + + + + +XuiImageBeacon +336.000000 +290.000000 +296.000000,2.000048,0.000000 +ImHowToPlayBeaconSmall + + + + +BeSecond +144.000000 +34.000000 +470.000000,16.000046,0.000000 +XuiLabelDarkCentredWrapSmall + + + + +BeFirst +144.000000 +34.000000 +312.000000,16.000046,0.000000 +XuiLabelDarkCentredWrapSmall + + + + +XuiImageDropper +262.000000 +280.000000 +372.000000,8.000046,0.000000 +ImHowToPlayDispenserSmall + + + + +XuiHtmlControlDropper +282.000000 +240.000000 +74.000000,14.000000,0.000000 +XuiHtmlControl_H2P_Small + + + + +DrInventory +230.000000 +24.000000 +386.000000,139.000046,0.000000 +LabelContainerSceneLeftSmall + + + + +DrText +160.000000 +24.000000 +454.000000,18.000048,0.000000 +LabelContainerSceneLeftSmall + + + + +XuiImageHopper +260.000000 +220.000000 +372.000000,36.000000,0.000000 +ImHowToPlayHopperSmall + + + + +XuiHtmlControlHopper +282.000000 +240.000000 +74.000000,14.000000,0.000000 +XuiHtmlControl_H2P_Small + + + + +HInventory +230.000000 +24.000000 +386.000000,110.000046,0.000000 +LabelContainerSceneLeftSmall + + + + +HText +230.000000 +24.000000 +387.000000,44.000046,0.000000 +LabelContainerSceneCentreSmall + + + + +XuiImageFireworks +260.000000 +280.000000 +372.000000,8.000050,0.000000 +ImHowToPlayFireworksSmall + + + + +XuiHtmlControlFireworks +282.000000 +240.000000 +74.000000,14.000000,0.000000 +XuiHtmlControl_H2P_Small +false + + + + +FiInventory +230.000000 +28.000000 +386.000000,140.000046,0.000000 +LabelContainerSceneLeftSmall + + + + +FiText +230.000000 +24.000000 +386.000000,18.000046,0.000000 +LabelContainerSceneLeftSmall + + diff --git a/Minecraft.Client/Common/Media/xuiscene_hud.h b/Minecraft.Client/Common/Media/xuiscene_hud.h index 8bf537f5..1c1fb549 100644 --- a/Minecraft.Client/Common/Media/xuiscene_hud.h +++ b/Minecraft.Client/Common/Media/xuiscene_hud.h @@ -11,17 +11,7 @@ #define IDC_Inventory9 L"Inventory9" #define IDC_Hotbar L"Hotbar" #define IDC_ExperienceProgress L"ExperienceProgress" -#define IDC_Health0 L"Health0" -#define IDC_Health1 L"Health1" -#define IDC_Health2 L"Health2" -#define IDC_Health3 L"Health3" -#define IDC_Health4 L"Health4" -#define IDC_Health5 L"Health5" -#define IDC_Health6 L"Health6" -#define IDC_Health7 L"Health7" -#define IDC_Health8 L"Health8" -#define IDC_Health9 L"Health9" -#define IDC_Health L"Health" +#define IDC_HorseJumpProgress L"HorseJumpProgress" #define IDC_Armour0 L"Armour0" #define IDC_Armour1 L"Armour1" #define IDC_Armour2 L"Armour2" @@ -33,6 +23,49 @@ #define IDC_Armour8 L"Armour8" #define IDC_Armour9 L"Armour9" #define IDC_Armour L"Armour" +#define IDC_Health0 L"Health0" +#define IDC_Health1 L"Health1" +#define IDC_Health2 L"Health2" +#define IDC_Health3 L"Health3" +#define IDC_Health4 L"Health4" +#define IDC_Health5 L"Health5" +#define IDC_Health6 L"Health6" +#define IDC_Health7 L"Health7" +#define IDC_Health8 L"Health8" +#define IDC_Health9 L"Health9" +#define IDC_HealthAbsorb L"HealthAbsorb" +#define IDC_Health0 L"Health0" +#define IDC_Health1 L"Health1" +#define IDC_Health2 L"Health2" +#define IDC_Health3 L"Health3" +#define IDC_Health4 L"Health4" +#define IDC_Health5 L"Health5" +#define IDC_Health6 L"Health6" +#define IDC_Health7 L"Health7" +#define IDC_Health8 L"Health8" +#define IDC_Health9 L"Health9" +#define IDC_Health L"Health" +#define IDC_Health9 L"Health9" +#define IDC_Health8 L"Health8" +#define IDC_Health7 L"Health7" +#define IDC_Health6 L"Health6" +#define IDC_Health5 L"Health5" +#define IDC_Health4 L"Health4" +#define IDC_Health3 L"Health3" +#define IDC_Health2 L"Health2" +#define IDC_Health1 L"Health1" +#define IDC_Health0 L"Health0" +#define IDC_Health19 L"Health19" +#define IDC_Health18 L"Health18" +#define IDC_Health17 L"Health17" +#define IDC_Health16 L"Health16" +#define IDC_Health15 L"Health15" +#define IDC_Health14 L"Health14" +#define IDC_Health13 L"Health13" +#define IDC_Health12 L"Health12" +#define IDC_Health11 L"Health11" +#define IDC_Health10 L"Health10" +#define IDC_HorseHealth L"HorseHealth" #define IDC_Food9 L"Food9" #define IDC_Food8 L"Food8" #define IDC_Food7 L"Food7" diff --git a/Minecraft.Client/Common/Media/xuiscene_hud.xui b/Minecraft.Client/Common/Media/xuiscene_hud.xui index 13986320..7eea76d4 100644 --- a/Minecraft.Client/Common/Media/xuiscene_hud.xui +++ b/Minecraft.Client/Common/Media/xuiscene_hud.xui @@ -160,6 +160,210 @@ 200 + + +HorseJumpProgress +182.000000 +5.000000 +0.000031,20.000031,0.000000 +HorseJumpProgress +200 + + + + +Armour +81.000000 +9.000000 + + + +Armour0 +9.000000 +9.000000 +0.000031,0.000061,0.000000 +HudArmour + + + + +Armour1 +9.000000 +9.000000 +8.000031,0.000061,0.000000 +HudArmour + + + + +Armour2 +9.000000 +9.000000 +16.000029,0.000061,0.000000 +HudArmour + + + + +Armour3 +9.000000 +9.000000 +24.000027,0.000061,0.000000 +HudArmour + + + + +Armour4 +9.000000 +9.000000 +32.000027,0.000061,0.000000 +HudArmour + + + + +Armour5 +9.000000 +9.000000 +40.000027,0.000061,0.000000 +HudArmour + + + + +Armour6 +9.000000 +9.000000 +48.000023,0.000061,0.000000 +HudArmour + + + + +Armour7 +9.000000 +9.000000 +56.000023,0.000061,0.000000 +HudArmour + + + + +Armour8 +9.000000 +9.000000 +64.000023,0.000061,0.000000 +HudArmour + + + + +Armour9 +9.000000 +9.000000 +72.000031,0.000061,0.000000 +HudArmour + + + + + +HealthAbsorb +81.000000 +9.000000 + + + +Health0 +9.000000 +9.000000 +0.000031,0.000061,0.000000 +HudHealth + + + + +Health1 +9.000000 +9.000000 +8.000000,0.000061,0.000000 +HudHealth + + + + +Health2 +9.000000 +9.000000 +16.000000,0.000061,0.000000 +HudHealth + + + + +Health3 +9.000000 +9.000000 +24.000000,0.000061,0.000000 +HudHealth + + + + +Health4 +9.000000 +9.000000 +32.000000,0.000061,0.000000 +HudHealth + + + + +Health5 +9.000000 +9.000000 +40.000000,0.000061,0.000000 +HudHealth + + + + +Health6 +9.000000 +9.000000 +48.000000,0.000061,0.000000 +HudHealth + + + + +Health7 +9.000000 +9.000000 +56.000000,0.000061,0.000000 +HudHealth + + + + +Health8 +9.000000 +9.000000 +64.000000,0.000061,0.000000 +HudHealth + + + + +Health9 +9.000000 +9.000000 +72.000031,0.000061,0.000000 +HudHealth + + + Health @@ -260,98 +464,189 @@ -Armour +HorseHealth 81.000000 +19.000000 +101.000000,0.000000,0.000000 + + + +Health9 +9.000000 9.000000 +0.000031,10.000061,0.000000 +HudHealth + -Armour0 +Health8 +9.000000 +9.000000 +8.000000,10.000061,0.000000 +HudHealth + + + + +Health7 +9.000000 +9.000000 +16.000000,10.000061,0.000000 +HudHealth + + + + +Health6 +9.000000 +9.000000 +24.000000,10.000061,0.000000 +HudHealth + + + + +Health5 +9.000000 +9.000000 +32.000000,10.000061,0.000000 +HudHealth + + + + +Health4 +9.000000 +9.000000 +40.000000,10.000061,0.000000 +HudHealth + + + + +Health3 +9.000000 +9.000000 +48.000000,10.000061,0.000000 +HudHealth + + + + +Health2 +9.000000 +9.000000 +56.000000,10.000061,0.000000 +HudHealth + + + + +Health1 +9.000000 +9.000000 +64.000000,10.000061,0.000000 +HudHealth + + + + +Health0 +9.000000 +9.000000 +72.000031,10.000061,0.000000 +HudHealth + + + + +Health19 9.000000 9.000000 0.000031,0.000061,0.000000 -HudArmour +HudHealth -Armour1 +Health18 9.000000 9.000000 -8.000031,0.000061,0.000000 -HudArmour +8.000000,0.000061,0.000000 +HudHealth -Armour2 +Health17 9.000000 9.000000 -16.000029,0.000061,0.000000 -HudArmour +16.000000,0.000061,0.000000 +HudHealth -Armour3 +Health16 9.000000 9.000000 -24.000027,0.000061,0.000000 -HudArmour +24.000000,0.000061,0.000000 +HudHealth -Armour4 +Health15 9.000000 9.000000 -32.000027,0.000061,0.000000 -HudArmour +32.000000,0.000061,0.000000 +HudHealth -Armour5 +Health14 9.000000 9.000000 -40.000027,0.000061,0.000000 -HudArmour +40.000000,0.000061,0.000000 +HudHealth -Armour6 +Health13 9.000000 9.000000 -48.000023,0.000061,0.000000 -HudArmour +48.000000,0.000061,0.000000 +HudHealth -Armour7 +Health12 9.000000 9.000000 -56.000023,0.000061,0.000000 -HudArmour +56.000000,0.000061,0.000000 +HudHealth -Armour8 +Health11 9.000000 9.000000 -64.000023,0.000061,0.000000 -HudArmour +64.000000,0.000061,0.000000 +HudHealth -Armour9 +Health10 9.000000 9.000000 72.000031,0.000061,0.000000 -HudArmour +HudHealth diff --git a/Minecraft.Client/Common/Media/xuiscene_hud_480.h b/Minecraft.Client/Common/Media/xuiscene_hud_480.h index 8bf537f5..1c1fb549 100644 --- a/Minecraft.Client/Common/Media/xuiscene_hud_480.h +++ b/Minecraft.Client/Common/Media/xuiscene_hud_480.h @@ -11,17 +11,7 @@ #define IDC_Inventory9 L"Inventory9" #define IDC_Hotbar L"Hotbar" #define IDC_ExperienceProgress L"ExperienceProgress" -#define IDC_Health0 L"Health0" -#define IDC_Health1 L"Health1" -#define IDC_Health2 L"Health2" -#define IDC_Health3 L"Health3" -#define IDC_Health4 L"Health4" -#define IDC_Health5 L"Health5" -#define IDC_Health6 L"Health6" -#define IDC_Health7 L"Health7" -#define IDC_Health8 L"Health8" -#define IDC_Health9 L"Health9" -#define IDC_Health L"Health" +#define IDC_HorseJumpProgress L"HorseJumpProgress" #define IDC_Armour0 L"Armour0" #define IDC_Armour1 L"Armour1" #define IDC_Armour2 L"Armour2" @@ -33,6 +23,49 @@ #define IDC_Armour8 L"Armour8" #define IDC_Armour9 L"Armour9" #define IDC_Armour L"Armour" +#define IDC_Health0 L"Health0" +#define IDC_Health1 L"Health1" +#define IDC_Health2 L"Health2" +#define IDC_Health3 L"Health3" +#define IDC_Health4 L"Health4" +#define IDC_Health5 L"Health5" +#define IDC_Health6 L"Health6" +#define IDC_Health7 L"Health7" +#define IDC_Health8 L"Health8" +#define IDC_Health9 L"Health9" +#define IDC_HealthAbsorb L"HealthAbsorb" +#define IDC_Health0 L"Health0" +#define IDC_Health1 L"Health1" +#define IDC_Health2 L"Health2" +#define IDC_Health3 L"Health3" +#define IDC_Health4 L"Health4" +#define IDC_Health5 L"Health5" +#define IDC_Health6 L"Health6" +#define IDC_Health7 L"Health7" +#define IDC_Health8 L"Health8" +#define IDC_Health9 L"Health9" +#define IDC_Health L"Health" +#define IDC_Health9 L"Health9" +#define IDC_Health8 L"Health8" +#define IDC_Health7 L"Health7" +#define IDC_Health6 L"Health6" +#define IDC_Health5 L"Health5" +#define IDC_Health4 L"Health4" +#define IDC_Health3 L"Health3" +#define IDC_Health2 L"Health2" +#define IDC_Health1 L"Health1" +#define IDC_Health0 L"Health0" +#define IDC_Health19 L"Health19" +#define IDC_Health18 L"Health18" +#define IDC_Health17 L"Health17" +#define IDC_Health16 L"Health16" +#define IDC_Health15 L"Health15" +#define IDC_Health14 L"Health14" +#define IDC_Health13 L"Health13" +#define IDC_Health12 L"Health12" +#define IDC_Health11 L"Health11" +#define IDC_Health10 L"Health10" +#define IDC_HorseHealth L"HorseHealth" #define IDC_Food9 L"Food9" #define IDC_Food8 L"Food8" #define IDC_Food7 L"Food7" diff --git a/Minecraft.Client/Common/Media/xuiscene_hud_480.xui b/Minecraft.Client/Common/Media/xuiscene_hud_480.xui index 4364039e..14d62faa 100644 --- a/Minecraft.Client/Common/Media/xuiscene_hud_480.xui +++ b/Minecraft.Client/Common/Media/xuiscene_hud_480.xui @@ -160,6 +160,210 @@ 200 + + +HorseJumpProgress +182.000000 +5.000000 +0.000031,20.000031,0.000000 +HorseJumpProgress +200 + + + + +Armour +81.000000 +9.000000 + + + +Armour0 +9.000000 +9.000000 +0.000031,0.000061,0.000000 +HudArmour + + + + +Armour1 +9.000000 +9.000000 +8.000031,0.000061,0.000000 +HudArmour + + + + +Armour2 +9.000000 +9.000000 +16.000029,0.000061,0.000000 +HudArmour + + + + +Armour3 +9.000000 +9.000000 +24.000027,0.000061,0.000000 +HudArmour + + + + +Armour4 +9.000000 +9.000000 +32.000027,0.000061,0.000000 +HudArmour + + + + +Armour5 +9.000000 +9.000000 +40.000027,0.000061,0.000000 +HudArmour + + + + +Armour6 +9.000000 +9.000000 +48.000023,0.000061,0.000000 +HudArmour + + + + +Armour7 +9.000000 +9.000000 +56.000023,0.000061,0.000000 +HudArmour + + + + +Armour8 +9.000000 +9.000000 +64.000023,0.000061,0.000000 +HudArmour + + + + +Armour9 +9.000000 +9.000000 +72.000031,0.000061,0.000000 +HudArmour + + + + + +HealthAbsorb +81.000000 +9.000000 + + + +Health0 +9.000000 +9.000000 +0.000031,0.000061,0.000000 +HudHealth + + + + +Health1 +9.000000 +9.000000 +8.000000,0.000061,0.000000 +HudHealth + + + + +Health2 +9.000000 +9.000000 +16.000000,0.000061,0.000000 +HudHealth + + + + +Health3 +9.000000 +9.000000 +24.000000,0.000061,0.000000 +HudHealth + + + + +Health4 +9.000000 +9.000000 +32.000000,0.000061,0.000000 +HudHealth + + + + +Health5 +9.000000 +9.000000 +40.000000,0.000061,0.000000 +HudHealth + + + + +Health6 +9.000000 +9.000000 +48.000000,0.000061,0.000000 +HudHealth + + + + +Health7 +9.000000 +9.000000 +56.000000,0.000061,0.000000 +HudHealth + + + + +Health8 +9.000000 +9.000000 +64.000000,0.000061,0.000000 +HudHealth + + + + +Health9 +9.000000 +9.000000 +72.000031,0.000061,0.000000 +HudHealth + + + Health @@ -260,98 +464,189 @@ -Armour +HorseHealth 81.000000 +19.000000 +101.000000,0.000000,0.000000 + + + +Health9 +9.000000 9.000000 +0.000031,10.000061,0.000000 +HudHealth + -Armour0 +Health8 +9.000000 +9.000000 +8.000000,10.000061,0.000000 +HudHealth + + + + +Health7 +9.000000 +9.000000 +16.000000,10.000061,0.000000 +HudHealth + + + + +Health6 +9.000000 +9.000000 +24.000000,10.000061,0.000000 +HudHealth + + + + +Health5 +9.000000 +9.000000 +32.000000,10.000061,0.000000 +HudHealth + + + + +Health4 +9.000000 +9.000000 +40.000000,10.000061,0.000000 +HudHealth + + + + +Health3 +9.000000 +9.000000 +48.000000,10.000061,0.000000 +HudHealth + + + + +Health2 +9.000000 +9.000000 +56.000000,10.000061,0.000000 +HudHealth + + + + +Health1 +9.000000 +9.000000 +64.000000,10.000061,0.000000 +HudHealth + + + + +Health0 +9.000000 +9.000000 +72.000031,10.000061,0.000000 +HudHealth + + + + +Health19 9.000000 9.000000 0.000031,0.000061,0.000000 -HudArmour +HudHealth -Armour1 +Health18 9.000000 9.000000 -8.000031,0.000061,0.000000 -HudArmour +8.000000,0.000061,0.000000 +HudHealth -Armour2 +Health17 9.000000 9.000000 -16.000029,0.000061,0.000000 -HudArmour +16.000000,0.000061,0.000000 +HudHealth -Armour3 +Health16 9.000000 9.000000 -24.000027,0.000061,0.000000 -HudArmour +24.000000,0.000061,0.000000 +HudHealth -Armour4 +Health15 9.000000 9.000000 -32.000027,0.000061,0.000000 -HudArmour +32.000000,0.000061,0.000000 +HudHealth -Armour5 +Health14 9.000000 9.000000 -40.000027,0.000061,0.000000 -HudArmour +40.000000,0.000061,0.000000 +HudHealth -Armour6 +Health13 9.000000 9.000000 -48.000023,0.000061,0.000000 -HudArmour +48.000000,0.000061,0.000000 +HudHealth -Armour7 +Health12 9.000000 9.000000 -56.000023,0.000061,0.000000 -HudArmour +56.000000,0.000061,0.000000 +HudHealth -Armour8 +Health11 9.000000 9.000000 -64.000023,0.000061,0.000000 -HudArmour +64.000000,0.000061,0.000000 +HudHealth -Armour9 +Health10 9.000000 9.000000 72.000031,0.000061,0.000000 -HudArmour +HudHealth diff --git a/Minecraft.Client/Common/Media/xuiscene_hud_small.h b/Minecraft.Client/Common/Media/xuiscene_hud_small.h index 8bf537f5..1c1fb549 100644 --- a/Minecraft.Client/Common/Media/xuiscene_hud_small.h +++ b/Minecraft.Client/Common/Media/xuiscene_hud_small.h @@ -11,17 +11,7 @@ #define IDC_Inventory9 L"Inventory9" #define IDC_Hotbar L"Hotbar" #define IDC_ExperienceProgress L"ExperienceProgress" -#define IDC_Health0 L"Health0" -#define IDC_Health1 L"Health1" -#define IDC_Health2 L"Health2" -#define IDC_Health3 L"Health3" -#define IDC_Health4 L"Health4" -#define IDC_Health5 L"Health5" -#define IDC_Health6 L"Health6" -#define IDC_Health7 L"Health7" -#define IDC_Health8 L"Health8" -#define IDC_Health9 L"Health9" -#define IDC_Health L"Health" +#define IDC_HorseJumpProgress L"HorseJumpProgress" #define IDC_Armour0 L"Armour0" #define IDC_Armour1 L"Armour1" #define IDC_Armour2 L"Armour2" @@ -33,6 +23,49 @@ #define IDC_Armour8 L"Armour8" #define IDC_Armour9 L"Armour9" #define IDC_Armour L"Armour" +#define IDC_Health0 L"Health0" +#define IDC_Health1 L"Health1" +#define IDC_Health2 L"Health2" +#define IDC_Health3 L"Health3" +#define IDC_Health4 L"Health4" +#define IDC_Health5 L"Health5" +#define IDC_Health6 L"Health6" +#define IDC_Health7 L"Health7" +#define IDC_Health8 L"Health8" +#define IDC_Health9 L"Health9" +#define IDC_HealthAbsorb L"HealthAbsorb" +#define IDC_Health0 L"Health0" +#define IDC_Health1 L"Health1" +#define IDC_Health2 L"Health2" +#define IDC_Health3 L"Health3" +#define IDC_Health4 L"Health4" +#define IDC_Health5 L"Health5" +#define IDC_Health6 L"Health6" +#define IDC_Health7 L"Health7" +#define IDC_Health8 L"Health8" +#define IDC_Health9 L"Health9" +#define IDC_Health L"Health" +#define IDC_Health9 L"Health9" +#define IDC_Health8 L"Health8" +#define IDC_Health7 L"Health7" +#define IDC_Health6 L"Health6" +#define IDC_Health5 L"Health5" +#define IDC_Health4 L"Health4" +#define IDC_Health3 L"Health3" +#define IDC_Health2 L"Health2" +#define IDC_Health1 L"Health1" +#define IDC_Health0 L"Health0" +#define IDC_Health19 L"Health19" +#define IDC_Health18 L"Health18" +#define IDC_Health17 L"Health17" +#define IDC_Health16 L"Health16" +#define IDC_Health15 L"Health15" +#define IDC_Health14 L"Health14" +#define IDC_Health13 L"Health13" +#define IDC_Health12 L"Health12" +#define IDC_Health11 L"Health11" +#define IDC_Health10 L"Health10" +#define IDC_HorseHealth L"HorseHealth" #define IDC_Food9 L"Food9" #define IDC_Food8 L"Food8" #define IDC_Food7 L"Food7" diff --git a/Minecraft.Client/Common/Media/xuiscene_hud_small.xui b/Minecraft.Client/Common/Media/xuiscene_hud_small.xui index cea7e2bd..84d5b6df 100644 --- a/Minecraft.Client/Common/Media/xuiscene_hud_small.xui +++ b/Minecraft.Client/Common/Media/xuiscene_hud_small.xui @@ -160,6 +160,210 @@ 200 + + +HorseJumpProgress +182.000000 +5.000000 +0.000031,20.000031,0.000000 +HorseJumpProgress +200 + + + + +Armour +81.000000 +9.000000 + + + +Armour0 +9.000000 +9.000000 +0.000031,0.000061,0.000000 +HudArmour + + + + +Armour1 +9.000000 +9.000000 +8.000031,0.000061,0.000000 +HudArmour + + + + +Armour2 +9.000000 +9.000000 +16.000029,0.000061,0.000000 +HudArmour + + + + +Armour3 +9.000000 +9.000000 +24.000027,0.000061,0.000000 +HudArmour + + + + +Armour4 +9.000000 +9.000000 +32.000027,0.000061,0.000000 +HudArmour + + + + +Armour5 +9.000000 +9.000000 +40.000027,0.000061,0.000000 +HudArmour + + + + +Armour6 +9.000000 +9.000000 +48.000023,0.000061,0.000000 +HudArmour + + + + +Armour7 +9.000000 +9.000000 +56.000023,0.000061,0.000000 +HudArmour + + + + +Armour8 +9.000000 +9.000000 +64.000023,0.000061,0.000000 +HudArmour + + + + +Armour9 +9.000000 +9.000000 +72.000031,0.000061,0.000000 +HudArmour + + + + + +HealthAbsorb +81.000000 +9.000000 + + + +Health0 +9.000000 +9.000000 +0.000031,0.000061,0.000000 +HudHealth + + + + +Health1 +9.000000 +9.000000 +8.000000,0.000061,0.000000 +HudHealth + + + + +Health2 +9.000000 +9.000000 +16.000000,0.000061,0.000000 +HudHealth + + + + +Health3 +9.000000 +9.000000 +24.000000,0.000061,0.000000 +HudHealth + + + + +Health4 +9.000000 +9.000000 +32.000000,0.000061,0.000000 +HudHealth + + + + +Health5 +9.000000 +9.000000 +40.000000,0.000061,0.000000 +HudHealth + + + + +Health6 +9.000000 +9.000000 +48.000000,0.000061,0.000000 +HudHealth + + + + +Health7 +9.000000 +9.000000 +56.000000,0.000061,0.000000 +HudHealth + + + + +Health8 +9.000000 +9.000000 +64.000000,0.000061,0.000000 +HudHealth + + + + +Health9 +9.000000 +9.000000 +72.000031,0.000061,0.000000 +HudHealth + + + Health @@ -260,98 +464,189 @@ -Armour +HorseHealth 81.000000 +19.000000 +101.000000,0.000000,0.000000 + + + +Health9 +9.000000 9.000000 +0.000031,10.000061,0.000000 +HudHealth + -Armour0 +Health8 +9.000000 +9.000000 +8.000000,10.000061,0.000000 +HudHealth + + + + +Health7 +9.000000 +9.000000 +16.000000,10.000061,0.000000 +HudHealth + + + + +Health6 +9.000000 +9.000000 +24.000000,10.000061,0.000000 +HudHealth + + + + +Health5 +9.000000 +9.000000 +32.000000,10.000061,0.000000 +HudHealth + + + + +Health4 +9.000000 +9.000000 +40.000000,10.000061,0.000000 +HudHealth + + + + +Health3 +9.000000 +9.000000 +48.000000,10.000061,0.000000 +HudHealth + + + + +Health2 +9.000000 +9.000000 +56.000000,10.000061,0.000000 +HudHealth + + + + +Health1 +9.000000 +9.000000 +64.000000,10.000061,0.000000 +HudHealth + + + + +Health0 +9.000000 +9.000000 +72.000031,10.000061,0.000000 +HudHealth + + + + +Health19 9.000000 9.000000 0.000031,0.000061,0.000000 -HudArmour +HudHealth -Armour1 +Health18 9.000000 9.000000 -8.000031,0.000061,0.000000 -HudArmour +8.000000,0.000061,0.000000 +HudHealth -Armour2 +Health17 9.000000 9.000000 -16.000029,0.000061,0.000000 -HudArmour +16.000000,0.000061,0.000000 +HudHealth -Armour3 +Health16 9.000000 9.000000 -24.000027,0.000061,0.000000 -HudArmour +24.000000,0.000061,0.000000 +HudHealth -Armour4 +Health15 9.000000 9.000000 -32.000027,0.000061,0.000000 -HudArmour +32.000000,0.000061,0.000000 +HudHealth -Armour5 +Health14 9.000000 9.000000 -40.000027,0.000061,0.000000 -HudArmour +40.000000,0.000061,0.000000 +HudHealth -Armour6 +Health13 9.000000 9.000000 -48.000023,0.000061,0.000000 -HudArmour +48.000000,0.000061,0.000000 +HudHealth -Armour7 +Health12 9.000000 9.000000 -56.000023,0.000061,0.000000 -HudArmour +56.000000,0.000061,0.000000 +HudHealth -Armour8 +Health11 9.000000 9.000000 -64.000023,0.000061,0.000000 -HudArmour +64.000000,0.000061,0.000000 +HudHealth -Armour9 +Health10 9.000000 9.000000 72.000031,0.000061,0.000000 -HudArmour +HudHealth diff --git a/Minecraft.Client/Common/Media/xuiscene_ingame_host_options.h b/Minecraft.Client/Common/Media/xuiscene_ingame_host_options.h index 330eac41..4ba8da05 100644 --- a/Minecraft.Client/Common/Media/xuiscene_ingame_host_options.h +++ b/Minecraft.Client/Common/Media/xuiscene_ingame_host_options.h @@ -1,3 +1,10 @@ +#define IDC_CheckboxNaturalRegen L"CheckboxNaturalRegen" +#define IDC_CheckboxTileDrops L"CheckboxTileDrops" +#define IDC_CheckboxMobLoot L"CheckboxMobLoot" +#define IDC_CheckboxMobGriefing L"CheckboxMobGriefing" +#define IDC_CheckboxMobSpawning L"CheckboxMobSpawning" +#define IDC_CheckboxKeepInventory L"CheckboxKeepInventory" +#define IDC_CheckboxDaylightCycle L"CheckboxDaylightCycle" #define IDC_CheckboxTNT L"CheckboxTNT" #define IDC_CheckboxFireSpreads L"CheckboxFireSpreads" #define IDC_ButtonTeleportToPlayer L"ButtonTeleportToPlayer" diff --git a/Minecraft.Client/Common/Media/xuiscene_ingame_host_options.xui b/Minecraft.Client/Common/Media/xuiscene_ingame_host_options.xui index af2b53ca..decdffab 100644 --- a/Minecraft.Client/Common/Media/xuiscene_ingame_host_options.xui +++ b/Minecraft.Client/Common/Media/xuiscene_ingame_host_options.xui @@ -7,23 +7,109 @@ InGameHostOptions 454.666687 -196.000000 -412.666718,262.000031,0.000000 +435.000000 +412.666718,140.000031,0.000000 CScene_InGameHostOptions XuiScene GameOptions\CheckboxFireSpreads +2 GameOptions 450.000000 -173.000000 -0.000000,18.000000,0.000000 +411.000000 +0.000000,16.000000,0.000000 2 XuiBlankScene +CheckboxNaturalRegen +402.000000 +34.000000 +22.000000,274.000000,0.000000 +2 +XuiCheckbox +CheckboxTileDrops +ButtonTeleportToPlayer +ButtonTeleportToPlayer + + + + +CheckboxTileDrops +402.000000 +34.000000 +22.000000,240.000000,0.000000 +2 +XuiCheckbox +CheckboxMobLoot +CheckboxNaturalRegen + + + + +CheckboxMobLoot +402.000000 +34.000000 +22.000000,204.000000,0.000000 +2 +XuiCheckbox +CheckboxMobGriefing +CheckboxTileDrops + + + + +CheckboxMobGriefing +402.000000 +34.000000 +22.000000,170.000000,0.000000 +2 +XuiCheckbox +CheckboxMobSpawning +CheckboxMobLoot + + + + +CheckboxMobSpawning +402.000000 +34.000000 +22.000000,136.000000,0.000000 +2 +XuiCheckbox +CheckboxKeepInventory +CheckboxMobGriefing + + + + +CheckboxKeepInventory +402.000000 +34.000000 +22.000000,102.000000,0.000000 +2 +XuiCheckbox +CheckboxDaylightCycle +CheckboxMobSpawning + + + + +CheckboxDaylightCycle +402.000000 +34.000000 +22.000000,68.000000,0.000000 +2 +XuiCheckbox +CheckboxTNT +CheckboxKeepInventory + + + + CheckboxTNT 402.000000 34.000000 @@ -31,7 +117,7 @@ 2 XuiCheckbox CheckboxFireSpreads -ButtonTeleportToPlayer +CheckboxDaylightCycle @@ -39,7 +125,7 @@ CheckboxFireSpreads 402.000000 34.000000 -22.000000,0.000000,0.000000 +22.000000,1.000000,0.000000 2 XuiCheckbox CheckboxTNT @@ -50,8 +136,8 @@ ButtonTeleportToPlayer 412.000000 40.000000 -22.000000,72.999985,0.000000 -CheckboxTNT +21.000000,311.000000,0.000000 +CheckboxNaturalRegen ButtonTeleportPlayerToMe @@ -60,7 +146,7 @@ ButtonTeleportPlayerToMe 412.000000 40.000000 -22.000000,119.999985,0.000000 +21.000000,360.000000,0.000000 ButtonTeleportToPlayer diff --git a/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_480.h b/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_480.h index 330eac41..4ba8da05 100644 --- a/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_480.h +++ b/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_480.h @@ -1,3 +1,10 @@ +#define IDC_CheckboxNaturalRegen L"CheckboxNaturalRegen" +#define IDC_CheckboxTileDrops L"CheckboxTileDrops" +#define IDC_CheckboxMobLoot L"CheckboxMobLoot" +#define IDC_CheckboxMobGriefing L"CheckboxMobGriefing" +#define IDC_CheckboxMobSpawning L"CheckboxMobSpawning" +#define IDC_CheckboxKeepInventory L"CheckboxKeepInventory" +#define IDC_CheckboxDaylightCycle L"CheckboxDaylightCycle" #define IDC_CheckboxTNT L"CheckboxTNT" #define IDC_CheckboxFireSpreads L"CheckboxFireSpreads" #define IDC_ButtonTeleportToPlayer L"ButtonTeleportToPlayer" diff --git a/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_480.xui b/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_480.xui index df6888f3..0db33e51 100644 --- a/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_480.xui +++ b/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_480.xui @@ -6,42 +6,125 @@ InGameHostOptions -462.444458 -189.444443 -88.777794,145.277802,0.000000 +440.000000 +330.000000 +100.000038,75.000000,0.000000 CScene_InGameHostOptions -XuiScene +GraphicPanel GameOptions\CheckboxFireSpreads GameOptions -450.000000 -170.999985 -0.000000,18.000000,0.000000 +440.000000 +330.000000 2 XuiBlankScene +CheckboxNaturalRegen +402.000000 +24.000000 +15.000016,206.000000,0.000000 +2 +XuiCheckboxSmall +CheckboxTileDrops +ButtonTeleportToPlayer + + + + +CheckboxTileDrops +402.000000 +24.000000 +15.000016,182.000000,0.000000 +2 +XuiCheckboxSmall +CheckboxMobLoot +CheckboxNaturalRegen + + + + +CheckboxMobLoot +402.000000 +24.000000 +15.000016,158.000000,0.000000 +2 +XuiCheckboxSmall +CheckboxMobGriefing +CheckboxTileDrops + + + + +CheckboxMobGriefing +402.000000 +24.000000 +15.000016,134.000000,0.000000 +2 +XuiCheckboxSmall +CheckboxMobSpawning +CheckboxMobLoot + + + + +CheckboxMobSpawning +402.000000 +24.000000 +15.000016,110.000000,0.000000 +2 +XuiCheckboxSmall +CheckboxKeepInventory +CheckboxMobGriefing + + + + +CheckboxKeepInventory +402.000000 +24.000000 +15.000016,86.000000,0.000000 +2 +XuiCheckboxSmall +CheckboxDaylightCycle +CheckboxMobSpawning + + + + +CheckboxDaylightCycle +402.000000 +24.000000 +15.000016,62.000000,0.000000 +2 +XuiCheckboxSmall +CheckboxTNT +CheckboxKeepInventory + + + + CheckboxTNT 402.000000 -34.000000 -22.000000,34.000000,0.000000 +24.000000 +15.000016,38.000000,0.000000 2 -XuiCheckbox +XuiCheckboxSmall CheckboxFireSpreads -ButtonTeleportToPlayer +CheckboxDaylightCycle CheckboxFireSpreads 402.000000 -34.000000 -22.000000,0.000000,0.000000 +24.000000 +15.000016,14.000000,0.000000 2 -XuiCheckbox +XuiCheckboxSmall CheckboxTNT @@ -50,9 +133,9 @@ ButtonTeleportToPlayer 410.000000 36.000000 -26.000004,72.000015,0.000000 +15.000020,232.000000,0.000000 XuiMainMenuButton_L_Thin -CheckboxTNT +CheckboxNaturalRegen ButtonTeleportPlayerToMe @@ -61,7 +144,7 @@ ButtonTeleportPlayerToMe 410.000000 36.000000 -26.000004,116.000015,0.000000 +15.000020,276.000000,0.000000 XuiMainMenuButton_L_Thin ButtonTeleportToPlayer diff --git a/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_small.h b/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_small.h index 330eac41..4ba8da05 100644 --- a/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_small.h +++ b/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_small.h @@ -1,3 +1,10 @@ +#define IDC_CheckboxNaturalRegen L"CheckboxNaturalRegen" +#define IDC_CheckboxTileDrops L"CheckboxTileDrops" +#define IDC_CheckboxMobLoot L"CheckboxMobLoot" +#define IDC_CheckboxMobGriefing L"CheckboxMobGriefing" +#define IDC_CheckboxMobSpawning L"CheckboxMobSpawning" +#define IDC_CheckboxKeepInventory L"CheckboxKeepInventory" +#define IDC_CheckboxDaylightCycle L"CheckboxDaylightCycle" #define IDC_CheckboxTNT L"CheckboxTNT" #define IDC_CheckboxFireSpreads L"CheckboxFireSpreads" #define IDC_ButtonTeleportToPlayer L"ButtonTeleportToPlayer" diff --git a/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_small.xui b/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_small.xui index 0b759663..9041e773 100644 --- a/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_small.xui +++ b/Minecraft.Client/Common/Media/xuiscene_ingame_host_options_small.xui @@ -6,42 +6,125 @@ InGameHostOptions -462.444458 -189.444443 -88.777809,85.277794,0.000000 +440.000000 +330.000000 +100.000038,0.000000,0.000000 CScene_InGameHostOptions -XuiScene +GraphicPanel GameOptions\CheckboxFireSpreads GameOptions -450.000000 -170.999985 -0.000000,18.000000,0.000000 +440.000000 +330.000000 2 XuiBlankScene +CheckboxNaturalRegen +402.000000 +24.000000 +15.000016,206.000000,0.000000 +2 +XuiCheckboxSmall +CheckboxTileDrops +ButtonTeleportToPlayer + + + + +CheckboxTileDrops +402.000000 +24.000000 +15.000016,182.000000,0.000000 +2 +XuiCheckboxSmall +CheckboxMobLoot +CheckboxNaturalRegen + + + + +CheckboxMobLoot +402.000000 +24.000000 +15.000016,158.000000,0.000000 +2 +XuiCheckboxSmall +CheckboxMobGriefing +CheckboxTileDrops + + + + +CheckboxMobGriefing +402.000000 +24.000000 +15.000016,134.000000,0.000000 +2 +XuiCheckboxSmall +CheckboxMobSpawning +CheckboxMobLoot + + + + +CheckboxMobSpawning +402.000000 +24.000000 +15.000016,110.000000,0.000000 +2 +XuiCheckboxSmall +CheckboxKeepInventory +CheckboxMobGriefing + + + + +CheckboxKeepInventory +402.000000 +24.000000 +15.000016,86.000000,0.000000 +2 +XuiCheckboxSmall +CheckboxDaylightCycle +CheckboxMobSpawning + + + + +CheckboxDaylightCycle +402.000000 +24.000000 +15.000016,62.000000,0.000000 +2 +XuiCheckboxSmall +CheckboxTNT +CheckboxKeepInventory + + + + CheckboxTNT 402.000000 -34.000000 -22.000000,34.000000,0.000000 +24.000000 +15.000016,38.000000,0.000000 2 -XuiCheckbox +XuiCheckboxSmall CheckboxFireSpreads -ButtonTeleportToPlayer +CheckboxDaylightCycle CheckboxFireSpreads 402.000000 -34.000000 -22.000000,0.000000,0.000000 +24.000000 +15.000016,14.000000,0.000000 2 -XuiCheckbox +XuiCheckboxSmall CheckboxTNT @@ -50,9 +133,9 @@ ButtonTeleportToPlayer 410.000000 36.000000 -26.000004,72.000015,0.000000 +15.000020,232.000000,0.000000 XuiMainMenuButton_L_Thin -CheckboxTNT +CheckboxNaturalRegen ButtonTeleportPlayerToMe @@ -61,7 +144,7 @@ ButtonTeleportPlayerToMe 410.000000 36.000000 -26.000004,116.000015,0.000000 +15.000020,276.000000,0.000000 XuiMainMenuButton_L_Thin ButtonTeleportToPlayer diff --git a/Minecraft.Client/Common/Media/xuiscene_inventory_creative.h b/Minecraft.Client/Common/Media/xuiscene_inventory_creative.h index 12dfbaf8..3eff3adc 100644 --- a/Minecraft.Client/Common/Media/xuiscene_inventory_creative.h +++ b/Minecraft.Client/Common/Media/xuiscene_inventory_creative.h @@ -228,6 +228,15 @@ #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" #define IDC_UseRow L"UseRow" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" @@ -490,6 +499,16 @@ #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" #define IDC_Container L"Container" #define IDC_TabImage1 L"TabImage1" #define IDC_TabImage2 L"TabImage2" diff --git a/Minecraft.Client/Common/Media/xuiscene_inventory_creative.xui b/Minecraft.Client/Common/Media/xuiscene_inventory_creative.xui index 0163464d..ca184ee5 100644 --- a/Minecraft.Client/Common/Media/xuiscene_inventory_creative.xui +++ b/Minecraft.Client/Common/Media/xuiscene_inventory_creative.xui @@ -3241,6 +3241,132 @@ 0.000000,10.000000,0.000000 + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + @@ -6901,20 +7027,159 @@ 0.000000,10.000000,0.000000 + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + + + +control_ListItem +54.000000 +54.000000 +7 +0.000000,50.000000,0.000000 +false +CXuiCtrlSlotItemListItem +ItemButton54 +22594 +4 + + Group_Tab_Images -1280.000000 -200.000000 --319.300049,-48.999992,0.000000 +643.000000 +78.000000 TabImage1 83.000000 78.000000 -319.000000,46.000000,0.000000 +0.000000,-2.000000,0.000000 CreativeInventoryTabLeft @@ -6923,7 +7188,7 @@ TabImage2 83.000000 78.000000 -399.000000,46.000000,0.000000 +80.000000,-2.000000,0.000000 CreativeInventoryTabMiddle @@ -6932,7 +7197,7 @@ TabImage3 83.000000 78.000000 -479.000000,46.000000,0.000000 +160.000000,-2.000000,0.000000 CreativeInventoryTabMiddle @@ -6941,7 +7206,7 @@ TabImage4 83.000000 78.000000 -559.000000,46.000000,0.000000 +240.000000,-2.000000,0.000000 CreativeInventoryTabMiddle @@ -6950,7 +7215,7 @@ TabImage5 83.000000 78.000000 -639.000000,46.000000,0.000000 +320.000000,-2.000000,0.000000 CreativeInventoryTabMiddle @@ -6959,7 +7224,7 @@ TabImage6 83.000000 78.000000 -719.000000,46.000000,0.000000 +400.000000,-2.000000,0.000000 CreativeInventoryTabMiddle @@ -6968,7 +7233,7 @@ TabImage7 83.000000 78.000000 -799.000000,46.000000,0.000000 +480.000000,-2.000000,0.000000 CreativeInventoryTabMiddle @@ -6977,7 +7242,7 @@ TabImage8 83.000000 78.000000 -879.000000,46.000000,0.000000 +560.000000,-2.000000,0.000000 CreativeInventoryTabRight diff --git a/Minecraft.Client/Common/Media/xuiscene_load_settings.h b/Minecraft.Client/Common/Media/xuiscene_load_settings.h index fdacf6fd..027a45fb 100644 --- a/Minecraft.Client/Common/Media/xuiscene_load_settings.h +++ b/Minecraft.Client/Common/Media/xuiscene_load_settings.h @@ -6,6 +6,9 @@ #define IDC_Background L"Background" #define IDC_XuiLoadSettings L"XuiLoadSettings" #define IDC_XuiMoreOptions L"XuiMoreOptions" +#define IDC_CheckboxOnline L"CheckboxOnline" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" diff --git a/Minecraft.Client/Common/Media/xuiscene_load_settings.xui b/Minecraft.Client/Common/Media/xuiscene_load_settings.xui index 8cf791a0..781f3da2 100644 --- a/Minecraft.Client/Common/Media/xuiscene_load_settings.xui +++ b/Minecraft.Client/Common/Media/xuiscene_load_settings.xui @@ -17,8 +17,8 @@ TexturePackDetails 334.000000 -432.000000 -260.000000,10.000000,0.000000 +462.000000 +260.000000,14.000000,0.000000 LeaderboardHeaderPanel @@ -26,7 +26,7 @@ ComparisonPic 292.000000 160.000000 -26.000000,256.000000,0.000000 +26.000000,291.000000,0.000000 CXuiCtrl4JIcon XuiVisualImagePresenter @@ -54,9 +54,9 @@ TexturePackDescription 292.000000 -160.000000 +180.000000 26.000000,86.000000,0.000000 -XuiLabelDesc_LftWrp +XuiHtmlControl @@ -64,14 +64,14 @@ MainScene 490.000000 -450.000000 +484.000000 140.000031,0.000000,0.000000 Background 490.000000 -450.000000 +484.000000 15 XuiScene @@ -81,7 +81,7 @@ XuiLoadSettings 440.000000 40.000000 -25.000015,384.000000,0.000000 +25.000015,420.000000,0.000000 XuiMainMenuButton_L XuiMoreOptions @@ -91,13 +91,24 @@ XuiMoreOptions 440.000000 40.000000 -25.000015,334.000000,0.000000 +25.000015,370.000000,0.000000 XuiMainMenuButton_L -TexturePacksList +CheckboxOnline XuiLoadSettings 22528 + + +CheckboxOnline +402.000000 +34.000000 +25.000015,330.000000,0.000000 +XuiCheckbox +TexturePacksList +XuiMoreOptions + + TexturePacksList @@ -107,7 +118,7 @@ CXuiCtrl4JList XuiListTexturePack XuiSliderDifficulty\XuiSlider -XuiMoreOptions +CheckboxOnline true @@ -308,6 +319,28 @@ 1 + + +control_ListItem +60.000000 +34.000000,30.000000,0.000000 +37 +false +XuiListTexturePackButton +1 + + + + +control_ListItem +60.000000 +34.000000,30.000000,0.000000 +37 +false +XuiListTexturePackButton +1 + + @@ -449,27 +482,27 @@ 0 -260.000000,10.000000,0.000000 +260.000000,14.000000,0.000000 0 -260.000000,10.000000,0.000000 +260.000000,14.000000,0.000000 0 -434.000000,10.000000,0.000000 +434.000000,14.000000,0.000000 0 -434.000000,10.000000,0.000000 +434.000000,14.000000,0.000000 0 -260.000000,10.000000,0.000000 +260.000000,14.000000,0.000000 diff --git a/Minecraft.Client/Common/Media/xuiscene_load_settings_480.h b/Minecraft.Client/Common/Media/xuiscene_load_settings_480.h index 9942515e..df3b2198 100644 --- a/Minecraft.Client/Common/Media/xuiscene_load_settings_480.h +++ b/Minecraft.Client/Common/Media/xuiscene_load_settings_480.h @@ -6,6 +6,9 @@ #define IDC_Background L"Background" #define IDC_XuiLoadSettings L"XuiLoadSettings" #define IDC_XuiMoreOptions L"XuiMoreOptions" +#define IDC_CheckboxOnline L"CheckboxOnline" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" diff --git a/Minecraft.Client/Common/Media/xuiscene_load_settings_480.xui b/Minecraft.Client/Common/Media/xuiscene_load_settings_480.xui index fd9eaa91..d39f0940 100644 --- a/Minecraft.Client/Common/Media/xuiscene_load_settings_480.xui +++ b/Minecraft.Client/Common/Media/xuiscene_load_settings_480.xui @@ -17,8 +17,8 @@ TexturePackDetails 230.000000 -358.000000 -183.500015,9.999999,0.000000 +378.000000 +184.000000,2.000000,0.000000 LeaderboardHeaderPanel @@ -26,7 +26,7 @@ ComparisonPic 196.000000 112.000000 -20.000000,234.000000,0.000000 +20.000000,254.000000,0.000000 CXuiCtrl4JIcon XuiVisualImagePresenter @@ -35,9 +35,9 @@ TexturePackDescription 196.000000 -96.000000 +106.000000 20.000010,132.000000,0.000000 -XuiLabelDesc_LftWrp_Small +XuiHtmlControl_Small @@ -64,14 +64,14 @@ MainScene 380.000000 -375.000000 -108.500015,0.000000,0.000000 +401.000000 +108.500015,-12.999970,0.000000 Background 380.000000 -375.000000 +401.000000 15 XuiScene @@ -81,7 +81,7 @@ XuiLoadSettings 344.000000 36.000000 -18.000000,326.000000,0.000000 +18.000000,342.000000,0.000000 XuiMainMenuButton_L_Thin XuiMoreOptions 22528 @@ -92,13 +92,24 @@ XuiMoreOptions 344.000000 36.000000 -18.000000,281.000000,0.000000 +18.000000,297.000000,0.000000 XuiMainMenuButton_L_Thin -TexturePacksList +CheckboxOnline XuiLoadSettings 22528 + + +CheckboxOnline +304.000000 +26.000000 +20.000000,272.000000,0.000000 +XuiCheckboxSmall +TexturePacksList +XuiMoreOptions + + TexturePacksList @@ -108,7 +119,7 @@ CXuiCtrl4JList XuiListTexturePackSmall XuiSliderDifficulty\XuiSlider -XuiMoreOptions +CheckboxOnline true @@ -313,6 +324,30 @@ 1 + + +control_ListItem +40.000000 +40.000000 +35.000000,24.000000,0.000000 +37 +false +XuiListTexturePackButtonSmall +1 + + + + +control_ListItem +40.000000 +40.000000 +35.000000,24.000000,0.000000 +37 +false +XuiListTexturePackButtonSmall +1 + + @@ -424,27 +459,27 @@ 0 -108.500015,0.000000,0.000000 +108.500015,-12.999970,0.000000 0 -108.500008,0.000000,0.000000 +108.500008,-12.999985,0.000000 0 -0.000000,0.000000,0.000000 +0.000000,-12.999985,0.000000 0 -0.000000,0.000000,0.000000 +0.000000,-12.999985,0.000000 0 -108.500015,0.000000,0.000000 +108.500015,-12.999985,0.000000 @@ -453,27 +488,27 @@ 0 -183.500015,9.999999,0.000000 +184.000000,2.000000,0.000000 0 -183.500015,9.999999,0.000000 +184.000000,2.000000,0.000000 0 -366.000000,9.999999,0.000000 +366.000000,2.000000,0.000000 0 -366.000000,9.999999,0.000000 +366.000000,2.000000,0.000000 0 -183.500015,9.999999,0.000000 +183.500015,2.000000,0.000000 diff --git a/Minecraft.Client/Common/Media/xuiscene_multi_create.h b/Minecraft.Client/Common/Media/xuiscene_multi_create.h index 69e78136..56e7204d 100644 --- a/Minecraft.Client/Common/Media/xuiscene_multi_create.h +++ b/Minecraft.Client/Common/Media/xuiscene_multi_create.h @@ -6,6 +6,7 @@ #define IDC_Background L"Background" #define IDC_XuiNewWorld L"XuiNewWorld" #define IDC_XuiMoreOptions L"XuiMoreOptions" +#define IDC_CheckboxOnline L"CheckboxOnline" #define IDC_XuiSlider L"XuiSlider" #define IDC_FocusSink L"FocusSink" #define IDC_XuiSliderDifficulty L"XuiSliderDifficulty" @@ -24,12 +25,12 @@ #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" #define IDC_TexturePacksList L"TexturePacksList" #define IDC_XuiGameModeToggle L"XuiGameModeToggle" -#define IDC_XuiLabelRandomSeed L"XuiLabelRandomSeed" -#define IDC_XuiEditSeed L"XuiEditSeed" #define IDC_XuiEditWorldName L"XuiEditWorldName" #define IDC_XuiLabelWorldName L"XuiLabelWorldName" -#define IDC_XuiLabelSeed L"XuiLabelSeed" #define IDC_MainScene L"MainScene" #define IDC_MultiGameCreate L"MultiGameCreate" diff --git a/Minecraft.Client/Common/Media/xuiscene_multi_create.xui b/Minecraft.Client/Common/Media/xuiscene_multi_create.xui index 81e03066..e96753ab 100644 --- a/Minecraft.Client/Common/Media/xuiscene_multi_create.xui +++ b/Minecraft.Client/Common/Media/xuiscene_multi_create.xui @@ -7,7 +7,7 @@ MultiGameCreate 810.000000 -498.000000 +532.000000 235.000092,110.000000,0.000000 CScene_MultiGameCreate XuiBlankScene @@ -17,8 +17,8 @@ TexturePackDetails 334.000000 -432.000000 -287.000000,48.000000,0.000000 +410.000000 +238.000046,64.000000,0.000000 LeaderboardHeaderPanel @@ -26,7 +26,7 @@ ComparisonPic 292.000000 160.000000 -26.000000,256.000000,0.000000 +26.000000,236.000000,0.000000 CXuiCtrl4JIcon XuiVisualImagePresenter @@ -50,28 +50,29 @@ XuiLabelLight_FRONT_END_Shd_Wrp - + TexturePackDescription 292.000000 -160.000000 +126.000000 26.000000,86.000000,0.000000 -XuiLabelDesc_LftWrp +XuiHtmlControl - + MainScene 490.000000 -498.000000 -159.000000,0.000000,0.000000 +433.000000 +159.000000,49.000000,0.000000 Background 490.000000 -498.000000 +433.000000 +0.833344,0.000000,0.000000 15 XuiScene @@ -81,7 +82,7 @@ XuiNewWorld 440.000000 40.000000 -25.000015,438.000000,0.000000 +25.000015,369.000000,0.000000 XuiMainMenuButton_L XuiMoreOptions 22528 @@ -92,24 +93,35 @@ XuiMoreOptions 440.000000 40.000000 -25.000015,388.000000,0.000000 +25.000015,319.000000,0.000000 XuiMainMenuButton_L -XuiSliderDifficulty\XuiSlider +CheckboxOnline XuiNewWorld 22528 + + +CheckboxOnline +402.000000 +34.000000 +25.000015,285.000000,0.000000 +XuiCheckbox +TexturePacksList +XuiMoreOptions + + XuiSliderDifficulty 446.000000 38.000000 -22.000017,344.000000,0.000000 +22.000017,144.000000,0.000000 5 CXuiCtrlSliderWrapper XuiSliderWrapper -TexturePacksList -XuiMoreOptions +XuiGameModeToggle +TexturePacksList FocusSink @@ -134,11 +146,11 @@ TexturePacksList 428.000000 96.000000 -32.000000,244.000000,0.000000 +32.000000,189.000000,0.000000 CXuiCtrl4JList XuiListTexturePack -XuiGameModeToggle -XuiSliderDifficulty\XuiSlider +XuiSliderDifficulty\XuiSlider +CheckboxOnline true @@ -306,40 +318,52 @@ 1 + + +control_ListItem +60.000000 +34.000000,30.000000,0.000000 +37 +false +XuiListTexturePackButton +1 + + + + +control_ListItem +60.000000 +34.000000,30.000000,0.000000 +37 +false +XuiListTexturePackButton +1 + + + + +control_ListItem +60.000000 +34.000000,30.000000,0.000000 +37 +false +XuiListTexturePackButton +1 + + XuiGameModeToggle 440.000000 40.000000 -25.000015,194.000000,0.000000 +25.000015,96.999992,0.000000 XuiMainMenuButton_L -XuiEditSeed -TexturePacksList +XuiEditWorldName +XuiSliderDifficulty\XuiSlider 22528 - - -XuiLabelRandomSeed -439.000000 -31.000000 -25.000000,162.000000,0.000000 -XuiLabelDarkLeftWrap - - - - -XuiEditSeed -434.000000 -32.000000 -28.000000,124.000000,0.000000 -CXuiCtrl4JEdit -XuiEdit -XuiEditWorldName -XuiGameModeToggle - - XuiEditWorldName @@ -348,8 +372,7 @@ 28.000000,52.000000,0.000000 CXuiCtrl4JEdit XuiEdit -CheckboxAllowFoF -XuiEditSeed +XuiGameModeToggle @@ -361,15 +384,6 @@ XuiLabelDark - - -XuiLabelSeed -440.000000 -26.172791 -25.000000,96.000000,0.000000 -XuiLabelDark - - @@ -403,27 +417,27 @@ 0 -159.000000,0.000000,0.000000 +159.000000,49.000000,0.000000 0 -159.000000,0.000000,0.000000 +159.000000,49.000000,0.000000 0 -0.000000,0.000000,0.000000 +0.000000,49.000000,0.000000 0 -0.000000,0.000000,0.000000 +0.000000,49.000000,0.000000 0 -159.000000,0.000000,0.000000 +159.000000,49.000000,0.000000 @@ -432,27 +446,27 @@ 0 -287.000000,48.000000,0.000000 +238.000046,64.000000,0.000000 0 -287.000000,48.000000,0.000000 +287.000000,65.000000,0.000000 0 -477.000000,48.000000,0.000000 +477.000000,65.000000,0.000000 0 -477.000000,48.000000,0.000000 +477.000000,65.000000,0.000000 0 -287.000000,48.000000,0.000000 +287.000000,65.000000,0.000000 diff --git a/Minecraft.Client/Common/Media/xuiscene_multi_create_480.h b/Minecraft.Client/Common/Media/xuiscene_multi_create_480.h index 41ef7a17..760e559e 100644 --- a/Minecraft.Client/Common/Media/xuiscene_multi_create_480.h +++ b/Minecraft.Client/Common/Media/xuiscene_multi_create_480.h @@ -6,6 +6,7 @@ #define IDC_Background L"Background" #define IDC_XuiNewWorld L"XuiNewWorld" #define IDC_XuiMoreOptions L"XuiMoreOptions" +#define IDC_CheckboxOnline L"CheckboxOnline" #define IDC_XuiSlider L"XuiSlider" #define IDC_FocusSink L"FocusSink" #define IDC_XuiSliderDifficulty L"XuiSliderDifficulty" @@ -27,11 +28,11 @@ #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" #define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" #define IDC_TexturePacksList L"TexturePacksList" #define IDC_XuiGameModeToggle L"XuiGameModeToggle" -#define IDC_XuiLabelRandomSeed L"XuiLabelRandomSeed" -#define IDC_XuiEditSeed L"XuiEditSeed" -#define IDC_XuiLabelSeed L"XuiLabelSeed" #define IDC_XuiEditWorldName L"XuiEditWorldName" #define IDC_XuiLabelWorldName L"XuiLabelWorldName" #define IDC_MainScene L"MainScene" diff --git a/Minecraft.Client/Common/Media/xuiscene_multi_create_480.xui b/Minecraft.Client/Common/Media/xuiscene_multi_create_480.xui index 12efc6e6..ccf74533 100644 --- a/Minecraft.Client/Common/Media/xuiscene_multi_create_480.xui +++ b/Minecraft.Client/Common/Media/xuiscene_multi_create_480.xui @@ -17,8 +17,8 @@ TexturePackDetails 230.000000 -382.000000 -163.500046,7.999999,0.000000 +334.000000 +163.500046,40.000000,0.000000 LeaderboardHeaderPanel @@ -26,26 +26,26 @@ ComparisonPic 196.000000 112.000000 -20.000000,258.000000,0.000000 +20.000000,212.000000,0.000000 CXuiCtrl4JIcon XuiVisualImagePresenter - + TexturePackDescription 196.000000 -122.000000 -20.000010,130.000000,0.000000 -XuiLabelDesc_LftWrp_Small +80.000000 +20.000000,122.000000,0.000000 +XuiHtmlControl - + TexturePackName 196.000000 43.000000 -20.000000,80.000008,0.000000 +20.000000,74.000008,0.000000 XuiLabelLight_FRONT_END_Shd_Wrp_Small @@ -54,7 +54,7 @@ Icon 64.000000 64.000000 -88.000000,10.000000,0.000000 +88.000000,6.000000,0.000000 CXuiCtrl4JIcon XuiVisualImagePresenter @@ -64,14 +64,14 @@ MainScene 340.000000 -400.000000 -108.500015,0.000000,0.000000 +355.000000 +108.500015,27.500019,0.000000 Background 340.000000 -398.000000 +353.000000 15 XuiScene @@ -81,7 +81,7 @@ XuiNewWorld 304.000000 36.000000 -18.000000,344.000000,0.000000 +18.000000,292.000000,0.000000 XuiMainMenuButton_L_Thin XuiMoreOptions 22528 @@ -92,24 +92,35 @@ XuiMoreOptions 304.000000 36.000000 -18.000000,302.000000,0.000000 +18.000000,250.000000,0.000000 XuiMainMenuButton_L_Thin -XuiSliderDifficulty\XuiSlider +CheckboxOnline XuiNewWorld 22528 + + +CheckboxOnline +304.000000 +26.000000 +18.000000,228.000000,0.000000 +XuiCheckboxSmall +TexturePacksList +XuiMoreOptions + + XuiSliderDifficulty 310.000000 38.000000 -15.000000,260.000000,0.000000 +15.000000,112.000000,0.000000 5 CXuiCtrlSliderWrapper XuiSliderWrapper -TexturePacksList -XuiMoreOptions +XuiGameModeToggle +TexturePacksList FocusSink @@ -134,11 +145,11 @@ TexturePacksList 304.000000 74.000000 -18.000000,186.000000,0.000000 +18.000000,150.000000,0.000000 CXuiCtrl4JList XuiListTexturePackSmall -XuiGameModeToggle -XuiSliderDifficulty\XuiSlider +XuiSliderDifficulty\XuiSlider +CheckboxOnline true @@ -345,48 +356,55 @@ 1 + + +control_ListItem +40.000000 +40.000000 +35.000000,24.000000,0.000000 +37 +false +XuiListTexturePackButtonSmall +1 + + + + +control_ListItem +40.000000 +40.000000 +35.000000,24.000000,0.000000 +37 +false +XuiListTexturePackButtonSmall +1 + + + + +control_ListItem +40.000000 +40.000000 +35.000000,24.000000,0.000000 +37 +false +XuiListTexturePackButtonSmall +1 + + XuiGameModeToggle 304.000000 36.000000 -18.000000,144.000000,0.000000 +18.000000,70.000000,0.000000 XuiMainMenuButton_L_Thin -XuiEditSeed -TexturePacksList +XuiEditWorldName +XuiSliderDifficulty\XuiSlider 22528 - - -XuiLabelRandomSeed -304.000000 -21.924896 -18.000000,122.000000,0.000000 -XuiLabelDarkLeftWrapSmall8 - - - - -XuiEditSeed -298.000000 -21.000000,88.000000,0.000000 -CXuiCtrl4JEdit -XuiEdit -XuiEditWorldName -XuiGameModeToggle - - - - -XuiLabelSeed -303.444427 -28.000000 -18.000000,70.000000,0.000000 -XuiLabelDarkLeftWrapSmall10 - - XuiEditWorldName @@ -394,8 +412,7 @@ 21.000000,32.000000,0.000000 CXuiCtrl4JEdit XuiEdit -CheckboxAllowFoF -XuiEditSeed +XuiGameModeToggle @@ -440,27 +457,27 @@ 0 -108.500015,0.000000,0.000000 +108.500015,27.500019,0.000000 0 -108.500015,0.000000,0.000000 +108.500015,27.500019,0.000000 0 -0.000000,0.000000,0.000000 +0.000000,27.500019,0.000000 0 -0.000000,0.000000,0.000000 +0.000000,27.500019,0.000000 0 -108.500015,0.000000,0.000000 +108.500015,27.500019,0.000000 @@ -469,27 +486,27 @@ 0 -163.500046,7.999999,0.000000 +163.500046,40.000000,0.000000 0 -163.500046,8.000000,0.000000 +163.500046,40.000000,0.000000 0 -327.000000,8.000000,0.000000 +327.000000,40.000000,0.000000 0 -327.000000,8.000000,0.000000 +327.000000,40.000000,0.000000 0 -163.500046,8.000000,0.000000 +163.500046,40.000000,0.000000 diff --git a/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options.h b/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options.h index ac9daa38..9a34c335 100644 --- a/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options.h +++ b/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options.h @@ -1,18 +1,34 @@ -#define IDC_CheckboxResetNether L"CheckboxResetNether" +#define IDC_OptionsTab_off L"OptionsTab_off" +#define IDC_GameOptionsDescription L"GameOptionsDescription" +#define IDC_CheckboxNaturalRegeneration L"CheckboxNaturalRegeneration" +#define IDC_CheckboxTileDrops L"CheckboxTileDrops" +#define IDC_CheckboxMobLoot L"CheckboxMobLoot" +#define IDC_CheckboxMobGriefing L"CheckboxMobGriefing" +#define IDC_CheckboxMobSpawning L"CheckboxMobSpawning" +#define IDC_CheckboxKeepInventory L"CheckboxKeepInventory" +#define IDC_CheckboxDayLightCycle L"CheckboxDayLightCycle" #define IDC_CheckboxHostPrivileges L"CheckboxHostPrivileges" -#define IDC_CheckboxTNT L"CheckboxTNT" -#define IDC_CheckboxFireSpreads L"CheckboxFireSpreads" -#define IDC_CheckboxTrustSystem L"CheckboxTrustSystem" #define IDC_CheckboxPVP L"CheckboxPVP" #define IDC_CheckboxAllowFoF L"CheckboxAllowFoF" #define IDC_CheckboxInviteOnly L"CheckboxInviteOnly" #define IDC_CheckboxOnline L"CheckboxOnline" -#define IDC_HostOptions L"HostOptions" +#define IDC_GameOptions L"GameOptions" +#define IDC_GameOptionsGroup L"GameOptionsGroup" +#define IDC_WorldOptionsDescription L"WorldOptionsDescription" +#define IDC_CheckboxFireSpreads L"CheckboxFireSpreads" +#define IDC_CheckboxTNT L"CheckboxTNT" +#define IDC_CheckboxTrustSystem L"CheckboxTrustSystem" +#define IDC_CheckboxResetNether L"CheckboxResetNether" #define IDC_CheckboxBonusChest L"CheckboxBonusChest" #define IDC_CheckboxFlatWorld L"CheckboxFlatWorld" #define IDC_CheckboxStructures L"CheckboxStructures" +#define IDC_XuiLabelRandomSeed L"XuiLabelRandomSeed" +#define IDC_XuiEditSeed L"XuiEditSeed" +#define IDC_XuiLabelSeed L"XuiLabelSeed" #define IDC_WorldOptions L"WorldOptions" -#define IDC_WO_Box L"WO_Box" -#define IDC_GenerationOptions L"GenerationOptions" -#define IDC_Description L"Description" +#define IDC_WorldOptionsGroup L"WorldOptionsGroup" +#define IDC_WorldOptionsTab L"WorldOptionsTab" +#define IDC_GameOptionsTab L"GameOptionsTab" +#define IDC_LabelGameOptions L"LabelGameOptions" +#define IDC_LabelWorldOptions L"LabelWorldOptions" #define IDC_MultiGameLaunchMoreOptions L"MultiGameLaunchMoreOptions" diff --git a/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options.xui b/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options.xui index 339ae0a4..25ee4a1d 100644 --- a/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options.xui +++ b/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options.xui @@ -6,80 +6,144 @@ MultiGameLaunchMoreOptions -450.000000 -486.000000 -415.000031,55.000000,0.000000 +1280.000000 +720.000000 CScene_MultiGameLaunchMoreOptions -XuiScene -HostOptions\CheckboxOnline +XuiBlankScene +WorldOptionsGroup\WorldOptions\XuiEditSeed + + + +OptionsTab_off +244.000000 +58.000000 +534.000000,108.000008,0.000000 +1 +Graphics\PanelsAndTabs\MoreOptionsTabOff.png +48 + + + + +GameOptionsGroup +700.000000 +430.000000 +290.000061,146.000015,0.000000 +false +true + + +GameOptionsDescription +260.000000 +418.000000 +486.000000,14.000000,0.000000 +10 +TipPanel + + -HostOptions -450.000000 -306.000000 -0.000000,10.000000,0.000000 +GameOptions +488.000000 +440.000000 +0.000013,0.000000,0.000000 +10 +XuiScene + + + +CheckboxNaturalRegeneration +402.000000 +34.000000 +24.000015,393.000000,0.000000 2 -XuiBlankScene +XuiCheckbox +CheckboxTileDrops + -CheckboxResetNether +CheckboxTileDrops 402.000000 34.000000 -23.000000,272.000000,0.000000 +24.000015,359.000000,0.000000 2 XuiCheckbox -CheckboxHostPrivileges -..\GenerationOptions\CheckboxStructures +CheckboxMobLoot +CheckboxNaturalRegeneration -CheckboxHostPrivileges +CheckboxMobLoot 402.000000 34.000000 -23.000000,238.000000,0.000000 +24.000015,325.000000,0.000000 2 XuiCheckbox -CheckboxTNT -CheckboxResetNether +CheckboxMobGriefing +CheckboxTileDrops -CheckboxTNT +CheckboxMobGriefing 402.000000 34.000000 -23.000000,204.000000,0.000000 +24.000015,291.000000,0.000000 2 XuiCheckbox -CheckboxFireSpreads -CheckboxHostPrivileges +CheckboxMobSpawning +CheckboxMobLoot -CheckboxFireSpreads +CheckboxMobSpawning 402.000000 34.000000 -23.000000,170.000000,0.000000 +24.000015,257.000000,0.000000 2 XuiCheckbox -CheckboxTrustSystem -CheckboxTNT +CheckboxKeepInventory +CheckboxMobGriefing -CheckboxTrustSystem +CheckboxKeepInventory 402.000000 34.000000 -23.000000,136.000000,0.000000 +24.000015,223.000015,0.000000 +2 +XuiCheckbox +CheckboxDayLightCycle +CheckboxMobSpawning + + + + +CheckboxDayLightCycle +402.000000 +34.000000 +24.000015,189.000015,0.000000 +2 +XuiCheckbox +CheckboxHostPrivileges +CheckboxKeepInventory + + + + +CheckboxHostPrivileges +402.000000 +34.000000 +24.000015,154.166672,0.000000 2 XuiCheckbox CheckboxPVP -CheckboxFireSpreads +CheckboxDayLightCycle @@ -87,11 +151,11 @@ CheckboxPVP 402.000000 34.000000 -23.000000,101.999992,0.000000 +24.000015,121.000008,0.000000 2 XuiCheckbox CheckboxAllowFoF -CheckboxTrustSystem +CheckboxHostPrivileges @@ -99,7 +163,7 @@ CheckboxAllowFoF 402.000000 34.000000 -23.000000,68.000000,0.000000 +24.000015,87.000015,0.000000 XuiCheckbox CheckboxInviteOnly CheckboxPVP @@ -110,7 +174,7 @@ CheckboxInviteOnly 402.000000 34.000000 -23.000000,34.000000,0.000000 +24.000015,53.000015,0.000000 XuiCheckbox CheckboxOnline CheckboxAllowFoF @@ -121,29 +185,92 @@ CheckboxOnline 402.000000 34.000000 -23.000000,0.000000,0.000000 +24.000015,19.000015,0.000000 XuiCheckbox CheckboxInviteOnly + + + +WorldOptionsGroup +700.000000 +369.000000 +290.000031,146.000000,0.000000 +true + + + +WorldOptionsDescription +260.000000 +352.000000 +486.000031,14.000000,0.000000 +10 +TipPanel + + -GenerationOptions -450.000000 -138.000000 -0.000000,334.000000,0.000000 -XuiBlankScene +WorldOptions +488.000000 +370.000000 +0.000029,0.000008,0.000000 +10 +XuiScene + + + +CheckboxFireSpreads +402.000000 +34.000000 +24.000015,318.000000,0.000000 +XuiCheckbox +CheckboxTNT + + + + +CheckboxTNT +402.000000 +34.000000 +24.000015,284.000000,0.000000 +XuiCheckbox +CheckboxTrustSystem +CheckboxFireSpreads + + + +CheckboxTrustSystem +402.000000 +34.000000 +24.000015,250.000000,0.000000 +XuiCheckbox +CheckboxResetNether +CheckboxTNT + + + + +CheckboxResetNether +402.000000 +34.000000 +24.000015,216.000000,0.000000 +XuiCheckbox +CheckboxBonusChest +CheckboxTrustSystem + + CheckboxBonusChest 402.000000 34.000000 -33.000000,98.000000,0.000000 +24.000015,182.000000,0.000000 XuiCheckbox -false CheckboxFlatWorld +CheckboxResetNether @@ -151,9 +278,8 @@ CheckboxFlatWorld 402.000000 34.000000 -33.000000,63.999992,0.000000 +24.000015,148.000000,0.000000 XuiCheckbox -false CheckboxStructures CheckboxBonusChest @@ -163,120 +289,198 @@ CheckboxStructures 402.000000 34.000000 -33.000000,29.999992,0.000000 +24.000015,114.000000,0.000000 XuiCheckbox -false -..\HostOptions\CheckboxResetNether +XuiEditSeed CheckboxFlatWorld -WorldOptions +XuiLabelRandomSeed 402.000000 -26.000000 -23.000000,0.000000,0.000000 -XuiLabelDark +31.000000 +24.000000,82.000000,0.000000 +XuiLabelDarkLeftWrap - + -WO_Box -405.000000 -112.000000 -22.999971,23.999985,0.000000 - - - -2.000000 -112.000000 -401.000031,0.000015,0.000000 - - -0xff000000 - - - - -0xff505050 -1 - - -true -4,0.000000,0.000000,0.000000,0.000000,49.000000,0.000000,0,49.000000,0.000000,49.000000,0.000000,49.000000,70.000000,0,49.000000,70.000000,49.000000,70.000000,0.000000,70.000000,0,0.000000,70.000000,0.000000,70.000000,0.000000,0.000000,0, - - - - -2.000000 -112.000000 -0.000029,0.000015,0.000000 - - -0xff000000 - - - - -0xff505050 -1 - - -true -4,0.000000,0.000000,0.000000,0.000000,49.000000,0.000000,0,49.000000,0.000000,49.000000,0.000000,49.000000,70.000000,0,49.000000,70.000000,49.000000,70.000000,0.000000,70.000000,0,0.000000,70.000000,0.000000,70.000000,0.000000,0.000000,0, +XuiEditSeed +402.000000 +32.000000 +24.000000,44.000000,0.000000 +CXuiCtrl4JEdit +XuiEdit +CheckboxStructures - - + + +XuiLabelSeed 402.000000 -2.000000 -0.000029,0.000015,0.000000 - - -0xff000000 +26.000000 +24.000000,16.000000,0.000000 +XuiLabelDark - - + + + + -0xff505050 -1 - - -true -4,0.000000,0.000000,0.000000,0.000000,49.000000,0.000000,0,49.000000,0.000000,49.000000,0.000000,49.000000,70.000000,0,49.000000,70.000000,49.000000,70.000000,0.000000,70.000000,0,0.000000,70.000000,0.000000,70.000000,0.000000,0.000000,0, +WorldOptionsTab +244.000000 +58.000000 +290.000000,103.000008,0.000000 +1 +Graphics\PanelsAndTabs\WorldOptionsTabOn.png +48 - - + + -402.000000 -2.000000 -0.000029,110.000015,0.000000 - - -0xff000000 +GameOptionsTab +244.000000 +58.000000 +534.000000,103.000008,0.000000 +false +1 +Graphics\PanelsAndTabs\GameOptionsTabOn.png +48 - - + + -0xff505050 -1 - - -true -4,0.000000,0.000000,0.000000,0.000000,49.000000,0.000000,0,49.000000,0.000000,49.000000,0.000000,49.000000,70.000000,0,49.000000,70.000000,49.000000,70.000000,0.000000,70.000000,0,0.000000,70.000000,0.000000,70.000000,0.000000,0.000000,0, +LabelGameOptions +224.000000 +24.000000 +544.000000,122.000000,0.000000 +XuiLabelDarkCentred +Game Options - - - + -Description -450.000000 -140.000000 -0.000015,496.000000,0.000000 -8 -TipPanel +LabelWorldOptions +224.000000 +24.000000 +300.000000,116.000000,0.000000 +XuiLabelDarkCentred +World Options + + + + +WorldOptions + +stop + + +GameOptions + +stop + + + +GameOptionsGroup +Show + + +0 +false + + + +0 +true + + + +WorldOptionsGroup +Show + + +0 +true + + + +0 +false + + + +OptionsTab_off +Position + + +0 +534.000000,108.000008,0.000000 + + + +0 +290.000000,108.000008,0.000000 + + + +WorldOptionsTab +Show + + +0 +true + + + +0 +false + + + +GameOptionsTab +Show + + +0 +false + + + +0 +true + + + +LabelGameOptions +Position + + +0 +544.000000,122.000000,0.000000 + + + +0 +544.000000,116.000000,0.000000 + + + +LabelWorldOptions +Position + + +0 +300.000000,116.000000,0.000000 + + + +0 +300.000000,122.000000,0.000000 + + + diff --git a/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options_480.h b/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options_480.h index b2de27dd..9a34c335 100644 --- a/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options_480.h +++ b/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options_480.h @@ -1,18 +1,34 @@ -#define IDC_CheckboxBonusChest L"CheckboxBonusChest" -#define IDC_CheckboxFlatWorld L"CheckboxFlatWorld" -#define IDC_CheckboxStructures L"CheckboxStructures" -#define IDC_WorldOptions L"WorldOptions" -#define IDC_WO_Box L"WO_Box" -#define IDC_GenerationOptions L"GenerationOptions" -#define IDC_CheckboxResetNether L"CheckboxResetNether" +#define IDC_OptionsTab_off L"OptionsTab_off" +#define IDC_GameOptionsDescription L"GameOptionsDescription" +#define IDC_CheckboxNaturalRegeneration L"CheckboxNaturalRegeneration" +#define IDC_CheckboxTileDrops L"CheckboxTileDrops" +#define IDC_CheckboxMobLoot L"CheckboxMobLoot" +#define IDC_CheckboxMobGriefing L"CheckboxMobGriefing" +#define IDC_CheckboxMobSpawning L"CheckboxMobSpawning" +#define IDC_CheckboxKeepInventory L"CheckboxKeepInventory" +#define IDC_CheckboxDayLightCycle L"CheckboxDayLightCycle" #define IDC_CheckboxHostPrivileges L"CheckboxHostPrivileges" -#define IDC_CheckboxTNT L"CheckboxTNT" -#define IDC_CheckboxFireSpreads L"CheckboxFireSpreads" -#define IDC_CheckboxTrustSystem L"CheckboxTrustSystem" #define IDC_CheckboxPVP L"CheckboxPVP" #define IDC_CheckboxAllowFoF L"CheckboxAllowFoF" #define IDC_CheckboxInviteOnly L"CheckboxInviteOnly" #define IDC_CheckboxOnline L"CheckboxOnline" -#define IDC_HostOptions L"HostOptions" -#define IDC_Description L"Description" +#define IDC_GameOptions L"GameOptions" +#define IDC_GameOptionsGroup L"GameOptionsGroup" +#define IDC_WorldOptionsDescription L"WorldOptionsDescription" +#define IDC_CheckboxFireSpreads L"CheckboxFireSpreads" +#define IDC_CheckboxTNT L"CheckboxTNT" +#define IDC_CheckboxTrustSystem L"CheckboxTrustSystem" +#define IDC_CheckboxResetNether L"CheckboxResetNether" +#define IDC_CheckboxBonusChest L"CheckboxBonusChest" +#define IDC_CheckboxFlatWorld L"CheckboxFlatWorld" +#define IDC_CheckboxStructures L"CheckboxStructures" +#define IDC_XuiLabelRandomSeed L"XuiLabelRandomSeed" +#define IDC_XuiEditSeed L"XuiEditSeed" +#define IDC_XuiLabelSeed L"XuiLabelSeed" +#define IDC_WorldOptions L"WorldOptions" +#define IDC_WorldOptionsGroup L"WorldOptionsGroup" +#define IDC_WorldOptionsTab L"WorldOptionsTab" +#define IDC_GameOptionsTab L"GameOptionsTab" +#define IDC_LabelGameOptions L"LabelGameOptions" +#define IDC_LabelWorldOptions L"LabelWorldOptions" #define IDC_MultiGameLaunchMoreOptions L"MultiGameLaunchMoreOptions" diff --git a/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options_480.xui b/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options_480.xui index 976f9260..20fec429 100644 --- a/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options_480.xui +++ b/Minecraft.Client/Common/Media/xuiscene_multi_launch_more_options_480.xui @@ -6,204 +6,228 @@ MultiGameLaunchMoreOptions -340.000000 -356.000000 -150.000031,8.500015,0.000000 +640.000000 +480.000000 CScene_MultiGameLaunchMoreOptions -XuiScene -HostOptions\CheckboxOnline +XuiBlankScene +WorldOptionsGroup\WorldOptions\XuiEditSeed + + +OptionsTab_off +175.000000 +40.000000 +235.000000,44.000000,0.000000 +1 +Graphics\PanelsAndTabs\MoreOptionsTabOff_Small.png +48 + + + + +GameOptionsGroup +510.000000 +328.000000 +60.000000,76.000015,0.000000 +false +true + + + +GameOptionsDescription +182.000000 +312.000000 +347.000000,10.000000,0.000000 +10 +TipPanel + + -GenerationOptions -340.000000 -104.000000 -0.000000,244.000000,0.000000 -XuiBlankScene +GameOptions +350.000000 +328.000000 +0.000015,0.000002,0.000000 +GraphicPanel -CheckboxBonusChest +CheckboxNaturalRegeneration 304.000000 26.000000 -19.000000,77.000000,0.000000 +16.000000,299.000000,0.000000 XuiCheckboxSmall -false -CheckboxFlatWorld +CheckboxTileDrops -CheckboxFlatWorld +CheckboxTileDrops 304.000000 26.000000 -19.000000,50.999992,0.000000 +16.000000,273.000000,0.000000 XuiCheckboxSmall -false -CheckboxStructures -CheckboxBonusChest +CheckboxMobLoot +CheckboxNaturalRegeneration -CheckboxStructures +CheckboxMobLoot 304.000000 26.000000 -19.000000,24.999992,0.000000 +16.000000,247.000000,0.000000 XuiCheckboxSmall -false -..\HostOptions\CheckboxResetNether -CheckboxFlatWorld +CheckboxMobGriefing +CheckboxTileDrops - + -WorldOptions +CheckboxMobGriefing 304.000000 -19.000000 -16.000000,0.000000,0.000000 -XuiLabelDarkSmall - - - - -WO_Box -307.000000 -85.000000 -15.999971,18.999985,0.000000 - - - -2.000000 -82.000000 -302.000031,0.000015,0.000000 - - -0xff000000 - - - - -0xff505050 -1 - - -true -4,0.000000,0.000000,0.000000,0.000000,49.000000,0.000000,0,49.000000,0.000000,49.000000,0.000000,49.000000,70.000000,0,49.000000,70.000000,49.000000,70.000000,0.000000,70.000000,0,0.000000,70.000000,0.000000,70.000000,0.000000,0.000000,0, - - - - -2.000000 -82.000000 -0.000029,0.000015,0.000000 - - -0xff000000 +26.000000 +16.000000,221.000000,0.000000 +XuiCheckboxSmall +CheckboxMobSpawning +CheckboxMobLoot - - + + -0xff505050 -1 - - -true -4,0.000000,0.000000,0.000000,0.000000,49.000000,0.000000,0,49.000000,0.000000,49.000000,0.000000,49.000000,70.000000,0,49.000000,70.000000,49.000000,70.000000,0.000000,70.000000,0,0.000000,70.000000,0.000000,70.000000,0.000000,0.000000,0, +CheckboxMobSpawning +304.000000 +26.000000 +16.000000,195.000000,0.000000 +XuiCheckboxSmall +CheckboxKeepInventory +CheckboxMobGriefing - - + + +CheckboxKeepInventory 304.000000 -2.000000 -0.000029,0.000015,0.000000 - - -0xff000000 +26.000000 +16.000000,169.000000,0.000000 +XuiCheckboxSmall +CheckboxDayLightCycle +CheckboxMobSpawning - - + + -0xff505050 -1 - - -true -4,0.000000,0.000000,0.000000,0.000000,49.000000,0.000000,0,49.000000,0.000000,49.000000,0.000000,49.000000,70.000000,0,49.000000,70.000000,49.000000,70.000000,0.000000,70.000000,0,0.000000,70.000000,0.000000,70.000000,0.000000,0.000000,0, +CheckboxDayLightCycle +304.000000 +26.000000 +16.000000,143.000000,0.000000 +XuiCheckboxSmall +CheckboxHostPrivileges +CheckboxKeepInventory - - + + +CheckboxHostPrivileges 304.000000 -2.000000 -0.000029,80.000015,0.000000 - - -0xff000000 +26.000000 +16.000000,116.999992,0.000000 +XuiCheckboxSmall +CheckboxPVP +CheckboxDayLightCycle - - + + -0xff505050 -1 - - -true -4,0.000000,0.000000,0.000000,0.000000,49.000000,0.000000,0,49.000000,0.000000,49.000000,0.000000,49.000000,70.000000,0,49.000000,70.000000,49.000000,70.000000,0.000000,70.000000,0,0.000000,70.000000,0.000000,70.000000,0.000000,0.000000,0, +CheckboxPVP +304.000000 +26.000000 +16.000000,90.999992,0.000000 +XuiCheckboxSmall +CheckboxAllowFoF +CheckboxHostPrivileges - - - - + + -HostOptions -340.000000 -233.000000 -0.000000,11.000000,0.000000 -XuiBlankScene +CheckboxAllowFoF +304.000000 +25.000000 +16.000000,66.000000,0.000000 +XuiCheckboxSmall +CheckboxInviteOnly +CheckboxPVP + -CheckboxResetNether +CheckboxInviteOnly 304.000000 26.000000 -16.000000,207.000000,0.000000 +16.000000,39.999992,0.000000 XuiCheckboxSmall -CheckboxHostPrivileges -..\GenerationOptions\CheckboxStructures +CheckboxOnline +CheckboxAllowFoF -CheckboxHostPrivileges +CheckboxOnline 304.000000 26.000000 -16.000000,181.000000,0.000000 +16.000000,13.999992,0.000000 XuiCheckboxSmall -CheckboxTNT -CheckboxResetNether +CheckboxInviteOnly + + + + +WorldOptionsGroup +510.000000 +305.000000 +60.000000,76.000000,0.000000 +true + + + +WorldOptionsDescription +182.000000 +298.000000 +347.000000,10.000000,0.000000 +10 +TipPanel + + + + +WorldOptions +350.000000 +315.000000 +0.000015,0.000000,0.000000 +10 +GraphicPanel + -CheckboxTNT +CheckboxFireSpreads 304.000000 26.000000 -16.000000,155.000000,0.000000 +19.000000,253.000000,0.000000 XuiCheckboxSmall -CheckboxFireSpreads -CheckboxHostPrivileges +CheckboxTNT -CheckboxFireSpreads +CheckboxTNT 304.000000 26.000000 -16.000000,129.000000,0.000000 +19.000000,227.000000,0.000000 XuiCheckboxSmall CheckboxTrustSystem -CheckboxTNT +CheckboxFireSpreads @@ -211,68 +235,247 @@ CheckboxTrustSystem 304.000000 26.000000 -16.000000,102.999992,0.000000 +19.000000,201.000000,0.000000 XuiCheckboxSmall -CheckboxPVP -CheckboxFireSpreads +CheckboxResetNether +CheckboxTNT -CheckboxPVP +CheckboxResetNether 304.000000 26.000000 -16.000000,76.999992,0.000000 +19.000000,175.000000,0.000000 XuiCheckboxSmall -CheckboxAllowFoF +CheckboxBonusChest CheckboxTrustSystem -CheckboxAllowFoF +CheckboxBonusChest 304.000000 -25.000000 -16.000000,52.000000,0.000000 +26.000000 +19.000000,149.000000,0.000000 XuiCheckboxSmall -CheckboxInviteOnly -CheckboxPVP +CheckboxFlatWorld +CheckboxResetNether -CheckboxInviteOnly +CheckboxFlatWorld 304.000000 26.000000 -16.000000,25.999992,0.000000 +19.000000,123.000000,0.000000 XuiCheckboxSmall -CheckboxOnline -CheckboxAllowFoF +CheckboxStructures +CheckboxBonusChest -CheckboxOnline +CheckboxStructures 304.000000 26.000000 -16.000000,-0.000008,0.000000 +19.000000,97.000000,0.000000 XuiCheckboxSmall -CheckboxInviteOnly +XuiEditSeed +CheckboxFlatWorld + + +XuiLabelRandomSeed +304.000000 +21.924896 +18.000000,70.000000,0.000000 +XuiLabelDarkLeftWrapSmall8 + + + + +XuiEditSeed +310.000000 +20.000000,36.000000,0.000000 +CXuiCtrl4JEdit +XuiEdit +CheckboxStructures + + + + +XuiLabelSeed +303.444427 +28.000000 +18.000000,18.000000,0.000000 +XuiLabelDarkLeftWrapSmall10 + + + + + +WorldOptionsTab +175.000000 +40.000000 +60.000000,44.000000,0.000000 +1 +Graphics\PanelsAndTabs\WorldOptionsTabOn_Small.png +48 + + + + +GameOptionsTab +175.000000 +40.000000 +235.000000,44.000000,0.000000 +false +1 +Graphics\PanelsAndTabs\GameOptionsTabOn_Small.png +48 + + -Description -500.000000 -64.000000 --80.000000,358.000000,0.000000 -8 -TipPanel -6666666666666666666666 -666666666666666666666666 -6666666666666666666666666 +LabelGameOptions +160.000000 +24.000000 +242.000000,52.000000,0.000000 +XuiLabelDarkCentredSmall +Game Options + + + + +LabelWorldOptions +160.000000 +24.000000 +68.000000,48.000000,0.000000 +XuiLabelDarkCentredSmall +World Options + + + + +WorldOptions + +stop + + +GameOptions + +stop + + + +GameOptionsGroup +Show +Position + + +0 +false +60.000000,76.000015,0.000000 + + + +0 +true +60.000000,76.000023,0.000000 + + + +WorldOptionsGroup +Show +Height + + +0 +true +305.000000 + + + +0 +false +282.000000 + + + +LabelWorldOptions +Position + + +0 +68.000000,48.000000,0.000000 + + + +0 +68.000000,52.000000,0.000000 + + + +LabelGameOptions +Position + + +0 +242.000000,52.000000,0.000000 + + + +0 +242.000000,48.000000,0.000000 + + + +GameOptionsTab +Show + + +0 +false + + + +0 +true + + + +OptionsTab_off +Position + + +0 +235.000000,44.000000,0.000000 + + + +0 +60.000000,44.000000,0.000000 + + + +WorldOptionsTab +Show + + +0 +true + + + +0 +false + + + diff --git a/Minecraft.Client/Common/Media/xuiscene_trading_480.h b/Minecraft.Client/Common/Media/xuiscene_trading_480.h new file mode 100644 index 00000000..5898253b --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_trading_480.h @@ -0,0 +1,463 @@ +#define IDC_TradingWindow L"TradingWindow" +#define IDC_TradingWindow1 L"TradingWindow1" +#define IDC_RequiredLabel L"RequiredLabel" +#define IDC_VillagerText L"VillagerText" +#define IDC_Offer2Label L"Offer2Label" +#define IDC_Offer1Label L"Offer1Label" +#define IDC_ScrollLeftArrow L"ScrollLeftArrow" +#define IDC_ScrollRightArrow L"ScrollRightArrow" +#define IDC_Request1 L"Request1" +#define IDC_Request2 L"Request2" +#define IDC_TradingBar0 L"TradingBar0" +#define IDC_TradingBar1 L"TradingBar1" +#define IDC_TradingBar2 L"TradingBar2" +#define IDC_TradingBar3 L"TradingBar3" +#define IDC_TradingBar4 L"TradingBar4" +#define IDC_TradingBar5 L"TradingBar5" +#define IDC_TradingBar6 L"TradingBar6" +#define IDC_TradingSelector L"TradingSelector" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Inventory L"Inventory" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_UseRow L"UseRow" +#define IDC_InventoryGrid L"InventoryGrid" +#define IDC_InventoryLabel L"InventoryLabel" +#define IDC_HtmlTextPanel L"HtmlTextPanel" +#define IDC_Group L"Group" +#define IDC_XuiSceneTrading L"XuiSceneTrading" diff --git a/Minecraft.Client/Common/Media/xuiscene_trading_small.h b/Minecraft.Client/Common/Media/xuiscene_trading_small.h new file mode 100644 index 00000000..f2bb799f --- /dev/null +++ b/Minecraft.Client/Common/Media/xuiscene_trading_small.h @@ -0,0 +1,445 @@ +#define IDC_TradingWindow L"TradingWindow" +#define IDC_TradingWindow1 L"TradingWindow1" +#define IDC_RequiredLabel L"RequiredLabel" +#define IDC_VillagerText L"VillagerText" +#define IDC_Offer2Label L"Offer2Label" +#define IDC_Offer1Label L"Offer1Label" +#define IDC_ScrollLeftArrow L"ScrollLeftArrow" +#define IDC_ScrollRightArrow L"ScrollRightArrow" +#define IDC_Request1 L"Request1" +#define IDC_Request2 L"Request2" +#define IDC_TradingBar0 L"TradingBar0" +#define IDC_TradingBar1 L"TradingBar1" +#define IDC_TradingBar2 L"TradingBar2" +#define IDC_TradingBar3 L"TradingBar3" +#define IDC_TradingBar4 L"TradingBar4" +#define IDC_TradingBar5 L"TradingBar5" +#define IDC_TradingBar6 L"TradingBar6" +#define IDC_TradingSelector L"TradingSelector" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_Inventory L"Inventory" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_control_ListItem L"control_ListItem" +#define IDC_UseRow L"UseRow" +#define IDC_InventoryGrid L"InventoryGrid" +#define IDC_InventoryLabel L"InventoryLabel" +#define IDC_HtmlTextPanel L"HtmlTextPanel" +#define IDC_Group L"Group" +#define IDC_XuiSceneTrading L"XuiSceneTrading" diff --git a/Minecraft.Client/Common/Media/zh-CHT/4J_strings.resx b/Minecraft.Client/Common/Media/zh-CHT/4J_strings.resx index 90cddc7f..341189b0 100644 --- a/Minecraft.Client/Common/Media/zh-CHT/4J_strings.resx +++ b/Minecraft.Client/Common/Media/zh-CHT/4J_strings.resx @@ -17,7 +17,7 @@ 沒有å¯ç”¨ç©ºé–“ -å·²é¸å–儲存è£ç½®æ²’有足夠的å¯ç”¨ç©ºé–“ä¾†å»ºç«‹éŠæˆ²å­˜æª”。 +您所é¸å–的儲存è£ç½®æ²’有足夠的å¯ç”¨ç©ºé–“ä¾†å»ºç«‹éŠæˆ²å­˜æª”。 å†é¸å–一次 @@ -27,7 +27,7 @@ è¦è¦†å¯«å­˜æª”嗎? -å·²é¸å–儲存è£ç½®å·²ç¶“有這個存檔,確定è¦è¦†å¯«è©²å­˜æª”嗎? +您所é¸å–的儲存è£ç½®å·²ç¶“有這個存檔,確定è¦è¦†å¯«è©²å­˜æª”嗎? å¦ï¼šä¸è¦è¦†å¯« diff --git a/Minecraft.Client/Common/Media/zh-CHT/strings.resx b/Minecraft.Client/Common/Media/zh-CHT/strings.resx index 7c9861f8..4efef5a7 100644 --- a/Minecraft.Client/Common/Media/zh-CHT/strings.resx +++ b/Minecraft.Client/Common/Media/zh-CHT/strings.resx @@ -287,20 +287,41 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 當載入或建立世界時,您å¯ä»¥æŒ‰ä¸‹ [更多é¸é …] æŒ‰éˆ•ï¼Œä¾†é¸æ“‡æ›´å¤šéŠæˆ²çš„相關設定。{*B*}{*B*} {*T2*}玩家 vs 玩家{*ETW*}{*B*} - 啟用此é¸é …時,玩家å°å…¶ä»–玩家å¯ä»¥é€ æˆå‚·å®³ã€‚æ­¤é¸é …åªåœ¨ç”Ÿå­˜æ¨¡å¼ä¸‹å¯ä½¿ç”¨ã€‚{*B*}{*B*} + 啟用此é¸é …時,玩家å¯ä»¥å°å…¶ä»–玩家造æˆå‚·å®³ã€‚æ­¤é¸é …åªåœ¨ç”Ÿå­˜æ¨¡å¼ä¸‹å¯ä½¿ç”¨ã€‚{*B*}{*B*} {*T2*}信任玩家{*ETW*}{*B*} - åœç”¨æ­¤é¸é …時,會é™åˆ¶åŠ å…¥éŠæˆ²çš„玩家åªèƒ½å¾žäº‹é™å®šçš„æ´»å‹•ã€‚ä»–å€‘ç„¡æ³•é€²è¡Œé–‹æŽ¡æˆ–ä½¿ç”¨é …ç›®ã€æ”¾ç½®æ–¹å¡Šã€ä½¿ç”¨é–€èˆ‡é–‹é—œã€ä½¿ç”¨å®¹å™¨ã€æ”»æ“ŠçŽ©å®¶ï¼Œæˆ–æ”»æ“Šå‹•ç‰©ã€‚æ‚¨å¯ä»¥ä½¿ç”¨éŠæˆ²é¸å–®ç‚ºç‰¹å®šçŽ©å®¶è®Šæ›´ä¸Šè¿°çš„é¸é …。{*B*}{*B*} + åœç”¨æ­¤é¸é …會é™åˆ¶åŠ å…¥éŠæˆ²çš„玩家å¯ä»¥é€²è¡Œçš„æ´»å‹•ã€‚ä»–å€‘ç„¡æ³•é€²è¡Œé–‹æŽ¡æˆ–ä½¿ç”¨é …ç›®ã€æ”¾ç½®æ–¹å¡Šã€ä½¿ç”¨é–€èˆ‡é–‹é—œã€ä½¿ç”¨å®¹å™¨ã€æ”»æ“ŠçŽ©å®¶æˆ–å‹•ç‰©ã€‚æ‚¨å¯ä»¥ä½¿ç”¨éŠæˆ²é¸å–®ç‚ºç‰¹å®šçŽ©å®¶è®Šæ›´ä¸Šè¿°çš„é¸é …。{*B*}{*B*} {*T2*}ç«æœƒè”“å»¶{*ETW*}{*B*} - 啟用此é¸é …æ™‚ï¼Œç«æœƒè”“延到附近易燃的方塊。å¯ä»¥å¾žéŠæˆ²ä¸­è®Šæ›´æ­¤é¸é …。{*B*}{*B*} + 啟用此é¸é …æ™‚ï¼Œç«æœƒè”“延到附近易燃的方塊。您也å¯ä»¥å¾žéŠæˆ²ä¸­è®Šæ›´æ­¤é¸é …。{*B*}{*B*} {*T2*}炸藥會爆炸{*ETW*}{*B*} - 啟用此é¸é …時,引爆炸藥時會爆炸。å¯ä»¥å¾žéŠæˆ²ä¸­è®Šæ›´æ­¤é¸é …。{*B*}{*B*} + 啟用此é¸é …時,引爆炸藥後就會發生爆炸。您也å¯ä»¥å¾žéŠæˆ²ä¸­è®Šæ›´æ­¤é¸é …。{*B*}{*B*} {*T2*}主æŒäººç‰¹æ¬Š{*ETW*}{*B*} 啟用此é¸é …時,主æŒäººå¯ä»¥åœ¨éŠæˆ²ä¸­åˆ‡æ›è‡ªå·±çš„飛翔能力ã€åœç”¨ç–²å‹žåŠŸèƒ½ï¼Œæˆ–æ˜¯è®“è‡ªå·±éš±å½¢ã€‚{*DISABLES_ACHIEVEMENTS*}{*B*}{*B*} + {*T2*}日光循環{*ETW*}{*B*} + åœç”¨æ­¤é¸é …æ™‚ï¼Œä¸€æ—¥ç•¶ä¸­çš„æ™‚é–“ä¸æœƒæ”¹è®Šã€‚{*B*}{*B*} + + {*T2*}ä¿ç•™åº«å­˜{*ETW*}{*B*} + 啟用此é¸é …時,玩家在死時會ä¿ç•™ä»–們的庫存。{*B*}{*B*} + + {*T2*}暴徒產åµ{*ETW*}{*B*} + åœç”¨æ­¤é¸é …會讓暴徒無法自然產åµã€‚{*B*}{*B*} + + {*T2*}暴徒破壞{*ETW*}{*B*} + åœç”¨æ­¤é¸é …時,å¯é˜²æ­¢æ€ªç¸èˆ‡å‹•物變更方塊 (ä¾‹å¦‚ï¼Œçˆ¬è¡Œå‹•ç‰©çˆ†ç‚¸ç„¡æ³•æ‘§æ¯€æ–¹å¡Šï¼Œç¾Šç¾¤ä¹Ÿä¸æœƒæ¸…除牧è‰) ,或拾å–項目。{*B*}{*B*} + + {*T2*}暴徒劫掠{*ETW*}{*B*} + åœç”¨æ­¤é¸é …時,怪ç¸èˆ‡å‹•物無法撒下劫掠物 (例如:Creeper 無法撒下ç«è—¥) 。{*B*}{*B*} + + {*T2*}磚瓦拋è½{*ETW*}{*B*} + åœç”¨æ­¤é¸é …時,方塊無法被摧毀時拋è½é …ç›® (例如:石頭方塊無法拋è½éµåµçŸ³) 。{*B*}{*B*} + + {*T2*}自然å†ç”Ÿ{*ETW*}{*B*} + åœç”¨æ­¤é¸é …時,玩家無法自然回復å¥åº·ã€‚{*B*}{*B*} + {*T1*}產生新世界é¸é …{*ETW*}{*B*} 建立新世界時,有些é¡å¤–çš„é¸é …å¯ä½¿ç”¨ã€‚{*B*}{*B*} @@ -311,56 +332,59 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 啟用此é¸é …時,會在地上世界與地ç„世界中產生完全平å¦çš„世界。{*B*}{*B*} {*T2*}è´ˆå“ç®±{*ETW*}{*B*} - 啟用此é¸é …時,會在玩家å†ç”Ÿé»žé™„近創造內å«ä¸€äº›æœ‰ç”¨é …目的贈å“箱。{*B*}{*B*} + 啟用此é¸é …時,玩家å†ç”Ÿé»žé™„近會出ç¾ä¸€å€‹æ”¾äº†æœ‰ç”¨ç‰©å“的箱å­ã€‚{*B*}{*B*} {*T2*}é‡è¨­åœ°ç„{*ETW*}{*B*} 啟用此é¸é …時,會å†åº¦ç”¢ç”Ÿåœ°ç„。如果您的舊存檔中沒有地ç„è¦å¡žï¼Œé€™å°‡æœƒå¾ˆæœ‰ç”¨ã€‚{*B*}{*B*} - {*T1*}éŠæˆ²ä¸­é¸é …{*ETW*}{*B*} - çŽ©éŠæˆ²æ™‚,按下 BACK éµå¯ä»¥å«å‡ºéŠæˆ²ä¸­åŠŸèƒ½è¡¨ï¼Œå­˜å–æŸäº›é¸é …。{*B*}{*B*} + {*T1*}éŠæˆ²ä¸­é¸é …{*ETW*}{*B*} + çŽ©éŠæˆ²æ™‚,按下 {*BACK_BUTTON*} éµå¯ä»¥å«å‡ºéŠæˆ²ä¸­åŠŸèƒ½è¡¨ï¼Œå­˜å–æŸäº›é¸é …。{*B*}{*B*} {*T2*}主æŒäººé¸é …{*ETW*}{*B*} - 玩家主æŒäººæˆ–設定為管ç†å“¡çš„玩家,å¯ä»¥å­˜å– [主æŒäººé¸é …] 功能表。這些人å¯ä»¥å•Ÿç”¨æˆ–å–æ¶ˆã€Œç«æœƒè”“å»¶ã€åŠã€Œç‚¸è—¥æœƒçˆ†ç‚¸ã€çš„é¸é …。{*B*}{*B*} + 玩家主æŒäººåŠè¨­å®šç‚ºç®¡ç†å“¡çš„玩家,å¯ä»¥å­˜å– [主æŒäººé¸é …] 功能表。這些人å¯ä»¥å•Ÿç”¨æˆ–å–æ¶ˆã€Œç«æœƒè”“å»¶ã€åŠã€Œç‚¸è—¥æœƒçˆ†ç‚¸ã€çš„é¸é …。{*B*}{*B*} {*T1*}玩家é¸é …{*ETW*}{*B*} è‹¥è¦ä¿®æ”¹çŽ©å®¶çš„ç‰¹æ¬Šï¼Œå¯ä»¥é¸å–玩家的å字並按下 {*CONTROLLER_VK_A*},這會å«å‡ºçŽ©å®¶ç‰¹æ¬ŠåŠŸèƒ½è¡¨ï¼Œæ‚¨å¯ä»¥ä½¿ç”¨åˆ—出的é¸é …。{*B*}{*B*} {*T2*}å¯ä»¥å»ºé€ å’Œé–‹æŽ¡{*ETW*}{*B*} - åªæœ‰åœ¨é—œé–‰ä¿¡ä»»çŽ©å®¶æ™‚æ‰å¯ä»¥ä½¿ç”¨æ­¤é¸é …。啟用此é¸é …時,玩家å¯ä»¥åƒæ˜¯åœ¨æ­£å¸¸ç‹€æ³ä¸‹ä¸€æ¨£èˆ‡ä¸–ç•Œäº’å‹•ã€‚å–æ¶ˆä½¿ç”¨æ­¤é¸é …æ™‚ï¼ŒçŽ©å®¶å°‡ç„¡æ³•æ”¾ç½®æˆ–æ‘§æ¯€æ–¹å¡Šï¼Œä¸¦ç„¡æ³•èˆ‡è¨±å¤šé …ç›®åŠæ–¹å¡Šäº’動。{*B*}{*B*} + åªæœ‰åœ¨ã€Œä¿¡ä»»çީ家ã€é¸é …已關閉時æ‰å¯ä»¥ä½¿ç”¨æ­¤é¸é …。啟用此é¸é …時,玩家å¯ä»¥åœ¨æ­£å¸¸ç‹€æ³ä¸‹èˆ‡ä¸–ç•Œäº’å‹•ã€‚åœæ­¢ä½¿ç”¨æ­¤é¸é …å¾Œï¼ŒçŽ©å®¶å°‡ç„¡æ³•æ”¾ç½®æˆ–æ‘§æ¯€æ–¹å¡Šï¼Œä¸¦ç„¡æ³•èˆ‡é …ç›®åŠæ–¹å¡Šäº’動。{*B*}{*B*} {*T2*}å¯ä»¥ä½¿ç”¨é–€èˆ‡é–‹é—œ{*ETW*}{*B*} - åªæœ‰åœ¨é—œé–‰ä¿¡ä»»çŽ©å®¶æ™‚æ‰å¯ä»¥ä½¿ç”¨æ­¤é¸é …。åœç”¨æ­¤é¸é …時,玩家將無法使用門與開關。{*B*}{*B*} + åªæœ‰åœ¨ã€Œä¿¡ä»»çީ家ã€é¸é …已關閉時æ‰å¯ä»¥ä½¿ç”¨æ­¤é¸é …。åœç”¨æ­¤é¸é …時,玩家將無法使用門與開關。{*B*}{*B*} {*T2*}å¯ä»¥æ‰“開容器{*ETW*}{*B*} - åªæœ‰åœ¨é—œé–‰ä¿¡ä»»çŽ©å®¶æ™‚æ‰å¯ä»¥ä½¿ç”¨æ­¤é¸é …。åœç”¨æ­¤é¸é …時,玩家將無法打開箱å­ç­‰å®¹å™¨ã€‚{*B*}{*B*} + åªæœ‰åœ¨ã€Œä¿¡ä»»çީ家ã€é¸é …已關閉時æ‰å¯ä»¥ä½¿ç”¨æ­¤é¸é …。åœç”¨æ­¤é¸é …時,玩家將無法打開箱å­ç­‰å®¹å™¨ã€‚{*B*}{*B*} - {*T2*}å¯ä»¥æ”»æ“Šçީ家{*ETW*}{*B*} - åªæœ‰åœ¨é—œé–‰ä¿¡ä»»çŽ©å®¶æ™‚æ‰å¯ä»¥ä½¿ç”¨æ­¤é¸é …ã€‚å–æ¶ˆä½¿ç”¨æ­¤é¸é …時,玩家將無法å°å…¶ä»–玩家造æˆå‚·å®³ã€‚{*B*}{*B*} + {*T2*}å¯ä»¥æ”»æ“Šçީ家{*ETW*}{*B*} + åªæœ‰åœ¨ã€Œä¿¡ä»»çީ家ã€é¸é …已關閉時æ‰å¯ä»¥ä½¿ç”¨æ­¤é¸é …。åœç”¨æ­¤é¸é …時,玩家將無法傷害其他玩家。{*B*}{*B*} {*T2*}å¯ä»¥æ”»æ“Šå‹•物{*ETW*}{*B*} - åªæœ‰åœ¨é—œé–‰ä¿¡ä»»çŽ©å®¶æ™‚æ‰å¯ä»¥ä½¿ç”¨æ­¤é¸é …。åœç”¨æ­¤é¸é …時,玩家將無法å°å‹•物造æˆå‚·å®³ã€‚{*B*}{*B*} + åªæœ‰åœ¨ã€Œä¿¡ä»»çީ家ã€é¸é …已關閉時æ‰å¯ä»¥ä½¿ç”¨æ­¤é¸é …。åœç”¨æ­¤é¸é …時,玩家將無法傷害動物。{*B*}{*B*} {*T2*}管ç†å“¡{*ETW*}{*B*} - 啟用此é¸é …時,玩家å¯ä»¥ä¿®æ”¹ä¸»æŒäººä»¥å¤–其他玩家的特權 (在「信任玩家ã€é—œé–‰çš„狀態下)ã€è¸¢å‡ºçŽ©å®¶ï¼Œä¸¦å•Ÿç”¨æˆ–åœç”¨ã€Œç«æœƒè”“å»¶ã€åŠã€Œç‚¸è—¥æœƒçˆ†ç‚¸ã€åŠŸèƒ½ã€‚{*B*}{*B*} + 啟用此é¸é …時,玩家å¯ä»¥ä¿®æ”¹ä¸»æŒäººä»¥å¤–其他玩家的特權 (在「信任玩家ã€é¸é …關閉的狀態下)ã€è¸¢å‡ºçŽ©å®¶ï¼Œä¸¦å•Ÿç”¨æˆ–åœç”¨ã€Œç«æœƒè”“å»¶ã€åŠã€Œç‚¸è—¥æœƒçˆ†ç‚¸ã€åŠŸèƒ½ã€‚{*B*}{*B*} {*T2*}踢出玩家{*ETW*}{*B*} - å°ä½¿ç”¨èˆ‡ä¸»æŒäººçީ家ä¸åŒ {*PLATFORM_NAME*} 主機的玩家é¸å–æ­¤é¸é …,會將該玩家或使用其他 {*PLATFORM_NAME*} ä¸»æ©Ÿçš„çŽ©å®¶è¸¢å‡ºéŠæˆ²ã€‚除éžé‡æ–°å•Ÿå‹•,å¦å‰‡è¢«è¸¢å‡ºçš„玩家無法å†åŠ å…¥éŠæˆ²ã€‚{*B*}{*B*} + {*KICK_PLAYER_DESCRIPTION*}主機的玩家é¸å–æ­¤é¸é …,會將該玩家或使用其他 {*PLATFORM_NAME*} ä¸»æ©Ÿçš„çŽ©å®¶è¸¢å‡ºéŠæˆ²ã€‚除éžé‡æ–°å•Ÿå‹•,å¦å‰‡è¢«è¸¢å‡ºçš„玩家無法å†åŠ å…¥éŠæˆ²ã€‚{*B*}{*B*} {*T1*}主æŒäººçީ家é¸é …{*ETW*}{*B*} -如果已經啟用主æŒäººç‰¹æ¬Šï¼Œå‰‡ä¸»æŒäººçީ家å¯ä»¥ä¿®æ”¹è‡ªå·±çš„æŸäº›ç‰¹æ¬Šã€‚è‹¥è¦ä¿®æ”¹çŽ©å®¶çš„ç‰¹æ¬Šï¼Œå¯ä»¥é¸å–玩家的å字並按下 {*CONTROLLER_VK_A*},這會å«å‡ºçŽ©å®¶ç‰¹æ¬ŠåŠŸèƒ½è¡¨ï¼Œæ‚¨å¯ä»¥ä½¿ç”¨åˆ—出的é¸é …。{*B*}{*B*} +如果主æŒäººç‰¹æ¬Šå·²ç¶“啟用,主æŒäººçީ家å¯ä»¥ä¿®æ”¹è‡ªå·±çš„æŸäº›ç‰¹æ¬Šã€‚è‹¥è¦ä¿®æ”¹çŽ©å®¶çš„ç‰¹æ¬Šï¼Œå¯ä»¥é¸å–玩家的å字並按下 {*CONTROLLER_VK_A*},這會å«å‡ºçŽ©å®¶ç‰¹æ¬ŠåŠŸèƒ½è¡¨ï¼Œæ‚¨å¯ä»¥ä½¿ç”¨ä¸‹åˆ—é¸é …。{*B*}{*B*} {*T2*}å¯ä»¥é£›ç¿”{*ETW*}{*B*} - 啟用此é¸é …時,玩家å¯ä»¥æ“有飛翔的能力。åªèƒ½åœ¨ç”Ÿå­˜æ¨¡å¼ä¸­é¸æ“‡æ˜¯å¦ä½¿ç”¨æ­¤é¸é …。在創造模å¼ä¸­ï¼Œæ‰€æœ‰çš„玩家都有飛翔的能力。{*B*}{*B*} + 啟用此é¸é …時,玩家å¯ä»¥æ“有飛翔的能力。您åªèƒ½åœ¨ç”Ÿå­˜æ¨¡å¼ä¸­é¸æ“‡æ˜¯å¦ä½¿ç”¨æ­¤é¸é …,因為在創造模å¼ä¸­ï¼Œæ‰€æœ‰çš„玩家都有飛翔的能力。{*B*}{*B*} {*T2*}åœç”¨ç–²å‹ž{*ETW*}{*B*} - åªèƒ½åœ¨ç”Ÿå­˜æ¨¡å¼ä¸­é¸æ“‡æ˜¯å¦ä½¿ç”¨æ­¤é¸é …。啟用時,消耗體力的活動 (行走/奔跑/è·³èºç­‰ç­‰) 䏿œƒè®“食物列減少。然而,如果玩家å—傷,在玩家回復生命值期間,食物列會緩慢減少。{*B*}{*B*} + åªèƒ½åœ¨ç”Ÿå­˜æ¨¡å¼ä¸­é¸æ“‡æ˜¯å¦ä½¿ç”¨æ­¤é¸é …。啟用時,消耗體力的活動 (行走/奔跑/è·³èºç­‰ç­‰) 䏿œƒè®“食物列減少。然而,如果玩家å—傷,在玩家回復生命值期間,食物列會慢慢減少。{*B*}{*B*} {*T2*}隱形{*ETW*}{*B*} - 啟用此é¸é …時,其他玩家將無法看見玩家,且玩家會變æˆåˆ€æ§ä¸å…¥ã€‚{*B*}{*B*} - {*T2*}å¯ä»¥å‚³é€{*ETW*}{*B*} - 這å¯ä»¥è®“玩家傳é€å…¶ä»–玩家或者他自己到其他玩家身邊。 + 啟用此é¸é …時,其他玩家將無法看見玩家,而且玩家會變æˆåˆ€æ§ä¸å…¥ã€‚{*B*}{*B*} + + {*T2*}å¯ä»¥å‚³é€{*ETW*}{*B*} + 這å¯ä»¥è®“玩家在世界中傳é€å…¶ä»–玩家或者他自己到其他玩家身邊。 +䏿˜¯åŒä¸€å€‹çީ家{*PLATFORM_NAME*}主控å°ç‚ºä¸»æ©Ÿæ’­æ”¾ç¨‹å¼ä¸­ï¼Œé¸å–æ­¤é¸é …å°‡è¸¢å‡ºçŽ©å®¶çš„éŠæˆ²å’Œå…¶ä»–玩家在其{*PLATFORM_NAME*}主控å°ã€‚這ä½çީ家ä¸èƒ½å†åŠ å…¥éŠæˆ²ï¼Œç›´åˆ°é‡æ–°å•Ÿå‹•。 + ä¸‹ä¸€é  ä¸Šä¸€é  @@ -379,7 +403,7 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 發射器 -豢養動物 +飼養動物 ç¹æ®–動物 @@ -425,61 +449,93 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 最新資訊 {*T3*}è®Šæ›´åŠæ–°å¢žåŠŸèƒ½{*ETW*}{*B*}{*B*} -- 新增物å“:翡翠ã€ç¿¡ç¿ åŽŸç¤¦ã€ç¿¡ç¿ æ–¹å¡Šã€çµ‚界箱ã€çµ†ç·šé‰¤ã€é™„魔金蘋果ã€éµç §ã€éµåµçŸ³ç‰†ã€é’è‹”åµçŸ³ç‰†ã€å‡‹é›¶éª·é«çš„ç•«åƒã€é¦¬éˆ´è–¯ã€çƒ¤é¦¬éˆ´è–¯ã€æœ‰æ¯’馬鈴薯ã€é‡‘色胡蘿蔔ã€ã€Œé¡˜è€…上鉤〠-å—瓜派ã€å¤œè¦–藥水ã€éš±å½¢è—¥æ°´ã€ç„石英ã€ç„石英原礦ã€çŸ³è‹±æ–¹å¡Šã€çŸ³è‹±æ¿ã€çŸ³è‹±éšŽæ¢¯ã€é›•刻石英方塊ã€å¸Œè‡˜åœ“柱石英方塊ã€é™„é­”å°å†Šã€å„種地毯。{*B*} -- æ–°å¢žå¹³æ»‘æ²™å²©å’Œé›•åˆ»æ²™å²©çš„é…æ–¹ã€‚{*B*} -- æ–°å¢žæ€ªç‰©ï¼šæ®­å±æ‘民。{*B*} -- 新增生æˆåœ°å½¢ç‰¹è‰²å»ºç¯‰ï¼šæ²™æ¼ ç¥žå»Ÿã€æ²™æ¼ æ‘è½ã€å¢æž—神廟。{*B*} -- æ–°å¢žæ‘æ°‘交易功能。{*B*} -- 新增éµç §ä»‹é¢{*B*} -- å¯ä»¥å°‡çš®ç”²æŸ“色。{*B*} -- å¯ä»¥å°‡ç‹¼é …圈染色。{*B*} -- 在騎乘豬隻時å¯ä»¥ä½¿ç”¨ã€Œé¡˜è€…上鉤ã€ä¾†æŽ§åˆ¶æ–¹å‘。{*B*} -- 在贈å“箱中加入更多物å“。{*B*} -- è®Šæ›´ä¸€èˆ¬æ“ºè¨­åŠæ ¼æ–¹å¡Šä»¥åŠå…©å€‹åŠæ ¼æ–¹å¡Šçš„æ“ºè¨­æ©Ÿåˆ¶ã€‚{*B*} -- 變更樓梯以åŠçŸ³ã€æœ¨æ¿ä¸Šä¸‹é¡›å€’的擺設。{*B*} -- 新增ä¸åŒçš„æ‘æ°‘è·æ¥­ã€‚{*B*} -- è‹¥ä½¿ç”¨è§’è‰²è›‹ç”¢ç”Ÿæ‘æ°‘ï¼Œå…¶è·æ¥­å°‡ç‚ºäº‚數設置。{*B*} -- 新增木頭的橫擺é…置。{*B*} -- å¯åœ¨ç†”çˆä¸­ä½¿ç”¨æœ¨è³ªå·¥å…·ä½œç‚ºç‡ƒæ–™ã€‚{*B*} -- å¯ä»¥ä½¿ç”¨èšå¯¶ç‰¹æ®Šèƒ½åŠ›æ”¶å–冰塊和玻璃片。{*B*} -- 木質按鈕和木質壓æ¿å¯ä»¥é€éŽå°„箭啟動。{*B*} -- 地ç„中的怪物å¯ä»¥ç©¿éŽå‚³é€é–€ä¾†åˆ°åœ°ä¸Šä¸–界。{*B*} -- Creeper 和蜘蛛會攻擊最後一個å°ä»–們出手的玩家。{*B*} -- 創造模å¼ä¸‹çš„æ€ªç‰©çŸ­æ™‚間後會回到中立特性。{*B*} -- 移除溺水時發生的擊退效果。{*B*} -- è¢«æ®­å±æ‰“壞的門會顯示傷害。{*B*} -- 冰塊會在地ç„中èžåŒ–。{*B*} -- 水槽在大雨中會自動補水。{*B*} -- 活塞動作的更新時間延長一å€ã€‚{*B*} -- 殺掉豬後會得到馬éžï¼ˆå¦‚果豬身上è£äº†é¦¬éžï¼‰ã€‚{*B*} -- 變更終界天空的é¡è‰²ã€‚{*B*} -- å¯ä»¥æ“ºç½®çµ²ç·šä½¿æˆç‚ºçµ†ç·šã€‚{*B*} -- é›¨æ»´æœƒç©¿éŽæ¨¹è‘‰äº†ã€‚{*B*} -- 拉桿å¯ä»¥å®‰è£åœ¨æ–¹å¡Šçš„底部。{*B*} -- ç‚¸è—¥çš„å‚·å®³æœƒä¾æ“šéŠæˆ²é›£åº¦æ”¹è®Šã€‚{*B*} -- è®Šæ›´æ›¸æœ¬çš„è£½ä½œé…æ–¹ã€‚{*B*} -- 船撞上ç¡è“®è‘‰ä¸æœƒæå£žäº†ï¼Œè€Œä¸æ˜¯èˆ¹æ’žä¸Šç¡è“®è‘‰å°±è§£é«”。{*B*} -- 殺死豬後會得到更多豬肉。{*B*} -- å²èŠå§†ç¾åœ¨æ¯”è¼ƒä¸æœƒåœ¨éžå¸¸å¹³å¦é¡žåž‹çš„世界中出ç¾ã€‚{*B*} -- Creeper 自爆造æˆçš„傷害會ä¾éŠæˆ²é›£åº¦è€Œè®Šå‹•,擊退è·é›¢ä¹Ÿæœƒæ›´é ã€‚{*B*} -- 修正 Endermen 䏿œƒå¼µé–‹å˜´å·´çš„å•題。{*B*} -- 新增玩家傳é€çš„功能 (è«‹è¦‹éŠæˆ²å…§çš„ BACK éµé¸å–®)。{*B*} -- 新增é ç«¯è¨­å®šçŽ©å®¶é£›è¡Œã€éš±èº«ã€ç„¡æ•µçš„主æŒäººé¸é …功能。{*B*} -- 因應本次更新新增物å“,在教學模å¼ä¸­åŠ å…¥æ–°çš„ç‰©å“與功能教學。{*B*} -- 更新唱片箱å­åœ¨æ•™å­¸æ¨¡å¼ä¸­çš„ä½ç½®ã€‚{*B*} - +- 新增物å“:硬化é»åœŸã€æŸ“色é»åœŸã€ç…¤ç‚­æ–¹å¡Šã€ä¹¾è‰æ†ã€å•Ÿå‹•éµè»Œã€ç´…石方塊ã€é™½å…‰æ„Ÿæ¸¬å™¨ã€æŠ•æ“²å™¨ã€æ¼æ–—ã€æ¼æ–—礦車ã€ç«è—¥ç¤¦è»Šã€ç´…çŸ³æ¯”è¼ƒå™¨ã€æ¸¬é‡å£“力æ¿ã€ç‡ˆå¡”ã€é™·é˜±å„²ç‰©ç®±ã€ç…™ç«ç«ç®­ã€ç…™ç«æ˜Ÿã€å¹½å†¥æ˜Ÿã€ç¹©ç´¢ã€é¦¬éާã€å牌ã€é¦¬é‡ç”Ÿè›‹ã€‚{*B*} +- 新增生物:凋零怪ã€å‡‹é›¶éª·é«ã€å¥³å·«ã€è™è ã€é¦¬ã€é©¢å’Œé¨¾ã€‚{*B*} +- 新增地形生æˆåŠŸèƒ½ï¼šå¥³å·«å±‹ã€‚{*B*} +- 新增燈塔介é¢ã€‚{*B*} +- 新增馬介é¢ã€‚{*B*} +- æ–°å¢žæ¼æ–—介é¢ã€‚{*B*} +- 新增煙ç«ï¼šæ‚¨æ“æœ‰è£½ä½œç…™ç«æ˜Ÿæˆ–ç…™ç«ç«ç®­çš„ææ–™æ™‚,å¯ä»¥å¾žå·¥ä½œå°é€²å…¥ç…™ç«ä»‹é¢ã€‚{*B*} +- 新增「冒險模å¼ã€ï¼šæ‚¨åªèƒ½ç”¨æ­£ç¢ºçš„工具打破方塊。{*B*} +- 新增許多è²éŸ³ã€‚{*B*} +- 生物ã€ç‰©å“和投射物ç¾åœ¨èƒ½é€šéŽå…¥å£ã€‚{*B*} +- ç¾åœ¨åªè¦ç”¨å¦ä¸€å€‹ä¸­ç¹¼å™¨ç‚ºä¸­ç¹¼å™¨ä¾›é›»ï¼Œå°±å¯ä»¥æŠŠå®ƒéŽ–èµ·ä¾†ã€‚{*B*} +- æ®­å±å’Œéª·é«ç¾åœ¨å¯ä»¥ç”¨ä¸åŒçš„æ­¦å™¨å’Œè­·ç”²é‡ç”Ÿã€‚{*B*} +- 新死亡訊æ¯ã€‚{*B*} +- 用命å牌為生物命å,以åŠåœ¨åŠŸèƒ½è¡¨é–‹å•Ÿæ™‚ç‚ºå®¹å™¨é‡æ–°å‘½å來變更標題。{*B*} +- 骨粉ä¸å†è®“æ¯æ¨£æ±è¥¿ç«‹å³å®Œå…¨é•·å¤§ï¼Œè€Œæ˜¯æœƒéš¨æ©Ÿè®“æ¯æ¨£æ±è¥¿æ–¼ä¸åŒçš„階段生長。{*B*} +- 直接æœå„²ç‰©ç®±ã€é‡€é€ å°ã€ç™¼å°„器和唱片機放置紅石比較器,å³å¯åµæ¸¬åˆ°èªªæ˜Žé€™äº›æ±è¥¿è£¡é¢å…§å®¹ç‰©çš„紅石訊號。{*B*} +- 發射器å¯ä»¥æœä»»ä½•æ–¹å‘。{*B*} +- 玩家於åƒä¸‹é‡‘蘋果之後,就能短暫ç²å¾—é¡å¤–çš„ç”Ÿå‘½å€¼åŽ»ã€Œå¸æ”¶ã€å‚·å®³ã€‚{*B*} +- 您在æŸå€‹å€åŸŸåœç•™æ™‚間越久,在該å€åŸŸé‡ç”Ÿçš„æ€ªç‰©è¶Šé›£è¢«æ‰“敗。{*B*} {*ETB*}æ­¡è¿Žå›žä¾†ï¼æˆ–許您還沒有注æ„到,您的 Minecraft 已經更新了。{*B*}{*B*} -æˆ‘å€‘ç‚ºæ‚¨å’Œæ‚¨çš„å¥½å‹æ–°å¢žäº†è¨±å¤šåŠŸèƒ½ï¼Œæˆ‘å€‘åœ¨æ­¤ç‚ºæ‚¨é‡é»žåˆ—èˆ‰å¹¾ï¼Œè¶•å¿«çž­è§£ä¸¦é–‹å§‹éŠæˆ²å§ï¼{*B*}{*B*} -{*T1*}新物å“{*ETB*} - ç¿¡ç¿ ã€ç¿¡ç¿ åŽŸç¤¦ã€ç¿¡ç¿ æ–¹å¡Šã€çµ‚界箱ã€çµ†ç·šé‰¤ã€é™„魔金蘋果ã€éµç §ã€èŠ±ç›†ã€éµåµçŸ³ç‰†ã€é’è‹”åµçŸ³ç‰†ã€å‡‹é›¶éª·é«çš„ç•«åƒã€é¦¬éˆ´è–¯ã€çƒ¤é¦¬éˆ´è–¯ã€æœ‰æ¯’馬鈴薯ã€é‡‘色胡蘿蔔ã€ã€Œé¡˜è€…上鉤ã€ã€ -å—瓜派ã€å¤œè¦–藥水ã€éš±å½¢è—¥æ°´ã€ç„石英ã€ç„石英原礦ã€çŸ³è‹±æ–¹å¡Šã€çŸ³è‹±æ¿ã€çŸ³è‹±éšŽæ¢¯ã€é›•刻石英方塊ã€å¸Œè‡˜åœ“柱石英方塊ã€é™„é­”å°å†Šã€å„種地毯。{*B*}{*B*} -{*T1*}新生物{*ETB*} - æ®­å±æ‘æ°‘.{*B*}{*B*} -{*T1*}新功能{*ETB*} - å’Œæ‘æ°‘交易ã€é€éŽéµç §ä¿®ç†æ­¦å™¨å’Œå·¥å…·ï¼Œæˆ–是增加特殊能力,在終界箱裡儲存物å“ã€åœ¨é¨Žä¹˜å°è±¬çš„æ™‚候使用「願者上鉤ã€ä¾†æŽ§åˆ¶è±¬çš„移動方å‘ï¼{*B*}{*B*} -{*T1*}新的迷你教學課程{*ETB*} – 在教學世界裡學習如何使用新功能ï¼{*B*}{*B*} -{*T1*}新的彩蛋{*ETB*} – 我們已經移動了在教學世界裡的秘密唱片,看看您是å¦èƒ½å†æ¬¡æ‰¾å‡ºå®ƒå€‘ï¼{*B*}{*B*} +æˆ‘å€‘ç‚ºæ‚¨å’Œæ‚¨çš„å¥½å‹æ–°å¢žäº†è¨±å¤šåŠŸèƒ½ï¼Œæˆ‘å€‘åœ¨æ­¤ç‚ºæ‚¨é‡é»žåˆ—èˆ‰å¹¾é …ï¼Œè¶•å¿«çž­è§£ä¸¦é–‹å§‹éŠæˆ²å§ï¼{*B*}{*B*} +{*T1*}新物å“{*ETB*}:硬化é»åœŸã€æŸ“色é»åœŸã€ç…¤ç‚­æ–¹å¡Šã€ä¹¾è‰æ†ã€å•Ÿå‹•éµè»Œã€ç´…石方塊ã€é™½å…‰æ„Ÿæ¸¬å™¨ã€æŠ•æ“²å™¨ã€æ¼æ–—ã€æ¼æ–—礦車ã€ç«è—¥ç¤¦è»Šã€ç´…çŸ³æ¯”è¼ƒå™¨ã€æ¸¬é‡å£“力æ¿ã€ç‡ˆå¡”ã€é™·é˜±å„²ç‰©ç®±ã€ç…™ç«ç«ç®­ã€ç…™ç«æ˜Ÿã€å¹½å†¥æ˜Ÿã€ç¹©ç´¢ã€é¦¬éާã€å牌ã€é¦¬é‡ç”Ÿè›‹ã€‚{*B*}{*B*} +{*T1*}新生物{*ETB*}:凋零怪ã€å‡‹é›¶éª·é«ã€å¥³å·«ã€è™è ã€é¦¬ã€é©¢å’Œé¨¾ã€‚{*B*}{*B*} +{*T1*}新功能{*ETB*}:馴æœé¦¬å¾Œé¨Žä¸Šé¦¬èƒŒã€è£½ä½œç…™ç«åŠæƒ¡æžä¸€ç•ªã€ç”¨å牌為動物和怪物命åã€å»ºç«‹æ›´é€²éšŽçš„紅石電路,還有主æŒäººé¸é …å”助控制世界訪客的能è€ï¼{*B*}{*B*} +{*T1*}新的教學世界{*ETB*}:在教學世界中學習新舊功能的使用方å¼ã€‚çœ‹æ‚¨æ˜¯å¦æœ‰èƒ½è€æŠŠè—在世界中的所有神祕唱片都找出來ï¼{*B*}{*B*} +馬 + +{*T3*}éŠæˆ²æ–¹å¼ï¼šé¦¬{*ETW*}{*B*}{*B*} +馬和驢主è¦å±…ä½åœ¨é–‹é—Šçš„平原。騾是驢和馬的後代,但本身ä¸å…·ç”Ÿæ®–能力。{*B*} +所有æˆå¹´çš„馬ã€é©¢å’Œé¨¾éƒ½å¯ä¾›äººé¨Žä¹˜ï¼Œä½†æ˜¯åªæœ‰é¦¬èƒ½å¤ ç©¿ä¸Šè­·ç”²ï¼Œåªæœ‰é¨¾å’Œé©¢å¯ä»¥è£ä¸Šéžå›ŠåŽ»é‹è¼¸ç‰©å“。{*B*}{*B*} +馬ã€é©¢å’Œé¨¾å¿…é ˆå…ˆé¦´æœæ‰å¯ä»¥ä½¿ç”¨ã€‚馴æœé¦¬çš„æ–¹å¼æ˜¯é¨Žä¸ŠåŽ»ï¼Œç„¶å¾Œé¨Žå£«å¿…é ˆæƒ³è¾¦æ³•ä¸è¢«é¦¬æ‘”下馬背。{*B*} +當愛心出ç¾åœ¨é¦¬çš„å‘¨åœæ™‚,牠已經被馴æœï¼Œå†ä¹Ÿä¸æœƒæŠŠçŽ©å®¶æ‘”ä¸‹é¦¬èƒŒã€‚çŽ©å®¶å¿…é ˆå¹«é¦¬è£ä¸Šé¦¬éžï¼Œæ‰èƒ½æ“縱一匹馬。{*B*}{*B*} +您å¯ä»¥å‘æ‘æ°‘購買,或是從è—在世界中的儲物箱尋找馬éžã€‚{*B*} +è‹¥è¦ç‚ºå·²é¦´æœçš„驢和騾加éžå›Šï¼ŒçŽ©å®¶è¦æŠŠå„²ç‰©ç®±è£åœ¨ç‰ å€‘èº«ä¸Šã€‚ä¹‹å¾Œé¨Žä¹˜æˆ–è¹²ä¼æ™‚玩家就能使用這些éžå›Š.{*B*}{*B*} +使用金蘋果或金蘿蔔餵食馬和驢å³å¯ç¹æ®–牠們,就åƒç¹æ®–其他動物一樣,但是騾就ä¸è¡Œã€‚{*B*} +å°é¦¬ç¶“éŽä¸€æ®µæ™‚é–“å°±æœƒé•·æˆæˆå¹´é¦¬ï¼Œä¸éŽçµ¦ç‰ å€‘餵食å°éº¥æˆ–ä¹¾è‰å°±æœƒåŠ é€Ÿç”Ÿé•·ã€‚{*B*} + + +燈塔 + +{*T3*}éŠæˆ²æ–¹å¼ï¼šç‡ˆå¡”{*ETW*}{*B*}{*B*} +啟動的燈塔會å‘天空投射明亮的光æŸï¼Œè³¦äºˆé™„近的玩家力é‡ã€‚{*B*} +è£½ä½œç‡ˆå¡”çš„ææ–™åŒ…括玻璃ã€é»‘曜石和幽冥星,擊敗凋零怪å³å¯ç²å¾—。{*B*}{*B*} +燈塔必須放置,白天æ‰èƒ½æ²æµ´åœ¨é™½å…‰ä¹‹ä¸‹ã€‚燈塔必須放置於éµã€é»ƒé‡‘ã€ç¿¡ç¿ æˆ–鑽石金字塔上。{*B*} +ç”¨ä¾†æ”¾ç½®ç‡ˆå¡”çš„ææ–™ä¸æœƒå½±éŸ¿ç‡ˆå¡”的力é‡ã€‚{*B*}{*B*} +您å¯ä»¥åœ¨ç‡ˆå¡”é¸å–®ä¸­ï¼Œç‚ºç‡ˆå¡”é¸å–一種主è¦çš„力é‡ã€‚金字塔越多層,å¯ä¾›é¸æ“‡çš„力é‡è¶Šå¤šã€‚{*B*} +è‡³å°‘æœ‰å››å±¤çš„é‡‘å­—å¡”ä¸Šçš„ç‡ˆå¡”ï¼Œé‚„èƒ½å¤ è®“æ‚¨é¸æ“‡å†ç”Ÿæ¬¡è¦åЛ釿ˆ–是更強大的主è¦åŠ›é‡ã€‚{*B*}{*B*} +您必須在付費空格奉上翡翠ã€é‘½çŸ³ã€é»ƒé‡‘或éµå¡Šï¼Œæ‰èƒ½è¨­å®šç‡ˆå¡”的力é‡ã€‚{*B*} +è¨­å®šå¾Œï¼Œç‡ˆå¡”å°±æœƒç„¡é™æœŸç™¼å‡ºåŠ›é‡ã€‚{*B*} + + +ç…™ç« + +{*T3*}éŠæˆ²æ–¹å¼ï¸°ç…™ç«{*ETW*}{*B*}{*B*} +ç…™ç«å±¬æ–¼è£é£¾å“,å¯ä»¥æ‰‹å‹•æˆ–åˆ©ç”¨ç™¼å°„å™¨ç™¼å°„ï¼Œè£½ä½œçš„ææ–™åŒ…括紙ã€ç«è—¥ï¼Œä¹Ÿæœ‰äººæœƒé¸æ“‡åŠ å…¥å¹¾é¡†ç…™ç«æ˜Ÿã€‚{*B*} +ç…™ç«æ˜Ÿçš„é¡è‰²ã€æ·¡åŒ–ã€å½¢ç‹€ã€å¤§å°èˆ‡æ•ˆæžœ (例如尾巴和閃çˆ) å¯è‡ªè¨‚,方法是在製作時加入é¡å¤–ææ–™ã€‚{*B*}{*B*} +è‹¥è¦è£½ä½œç…™ç«ï¼Œè«‹å°‡ç«è—¥å’Œç´™æ”¾åœ¨åº«å­˜ä¸Šæ–¹çš„ 3x3 工作å°ã€‚{*B*} +您å¯ä»¥é¸æ“‡åœ¨å·¥ä½œå°æ”¾ç½®å¤šé¡†ç…™ç«æ˜Ÿï¼ŒåŠ å…¥ç…™ç«ã€‚{*B*} +用ç«è—¥åœ¨å·¥ä½œå°å¡«æ»¿çš„ç©ºæ ¼è¶Šå¤šï¼Œæ‰€æœ‰ç…™ç«æ˜Ÿæœƒçˆ†ç‚¸çš„高度越高。{*B*}{*B*} +然後您便å¯å¾žè¼¸å‡ºç©ºæ ¼å–出製作的煙ç«ã€‚{*B*}{*B*} +å°‡ç«è—¥å’ŒæŸ“料放進工作å°ï¼Œå³å¯è£½ä½œç…™ç«æ˜Ÿã€‚{*B*} + - æŸ“æ–™æœƒæ±ºå®šç…™ç«æ˜Ÿçˆ†ç‚¸çš„é¡è‰²ã€‚{*B*} + - ç…™ç«æ˜Ÿçš„å½¢ç‹€å‰‡æ˜¯å–æ±ºæ–¼åŠ å…¥ç«ç„°å½ˆã€é‡‘塊ã€ç¾½æ¯›æˆ–生物的頭。{*B*} + - 使用鑽石或螢光粉å³å¯æ–°å¢žå°¾å·´æˆ–é–ƒçˆã€‚{*B*}{*B*} +ç…™ç«æ˜Ÿè£½ä½œå®Œæˆå¾Œï¼Œä»¥æŸ“料製作å³å¯æ±ºå®šç…™ç«æ˜Ÿçš„æ·¡å‡ºé¡è‰²ã€‚ + + +æ¼æ–— + +{*T3*}éŠæˆ²æ–¹å¼ï¼šæ¼æ–—{*ETW*}{*B*}{*B*} +您å¯ä»¥ä½¿ç”¨æ¼æ–—å°‡ç‰©å“æ’入容器或是從容器移除物å“,以åŠè‡ªå‹•拾å–丟入容器的物å“。{*B*} +æ¼æ–—能夠影響釀造å°ã€å„²ç‰©ç®±ã€ç™¼å°„å™¨ã€æŠ•æ“²å™¨ã€é‹è¼¸ç¤¦è»Šã€æ¼æ–—礦車åŠå…¶ä»–æ¼æ–—。{*B*}{*B*} +æ¼æ–—會一直嘗試從放在上方的åˆé©å®¹å™¨å¸å–物å“ï¼Œé‚„æœƒå˜—è©¦å°‡å„²å­˜çš„ç‰©å“æ’入輸出容器。{*B*} +å¦‚æžœæ¼æ–—是用紅石發電就會åœç”¨ï¼Œä¸¦ä¸”åœæ­¢å¸å–å’Œæ’入物å“。{*B*}{*B*} +æ¼æ–—會指å‘嘗試輸出物å“的方å‘。若è¦è®“æ¼æ–—指å‘ç‰¹å®šæ–¹å¡Šï¼Œæ·ºè¡Œæ™‚å°‡æ¼æ–—放在背å°è©²æ–¹å¡Šçš„ä½ç½®å³å¯ã€‚{*B*} + + +投擲器 + +{*T3*}éŠæˆ²æ–¹å¼ï¸°æŠ•擲器{*ETW*}{*B*}{*B*} +投擲器由紅石供電時,會隨機掉è½ä¸€ä»¶ç‰©å“至地é¢ã€‚使用 {*CONTROLLER_ACTION_USE*} å³å¯é–‹å•ŸæŠ•擲器,然後å³å¯å°‡åº«å­˜ä¸­çš„物å“è£é€²æŠ•擲器。{*B*} +如果投擲器æœå‘儲物箱或å¦ä¸€ç¨®å®¹å™¨ï¼Œç‰©å“則會放進那裡é¢ã€‚您å¯ä»¥æ‰“造投擲器的長éˆå­é‹è¼¸ç‰©å“ï¼Œä½†æ˜¯å¿…é ˆäº¤æ›¿é–‹å•Ÿé—œé–‰é›»æºæ‰èƒ½ç™¼æ®åŠŸèƒ½ã€‚ + + èƒ½é€ æˆæ¯”ç”¨æ‰‹åŠˆç æ›´å¤§çš„傷害。 用來挖泥土ã€é’è‰ã€æ²™å­ã€ç¤«çŸ³åŠç™½é›ªæ™‚的速度,會比用手挖還è¦å¿«ã€‚您需è¦ç”¨éŸå­æ‰èƒ½æŒ–雪çƒã€‚ @@ -605,10 +661,36 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 用手æ¡ä½æ™‚,會顯示æŸå€‹åœ°å€ä¸­å·²æŽ¢ç´¢å€åŸŸçš„å½±åƒã€‚å¯è®“您用來尋找能å‰å¾€æŸå€‹åœ°é»žçš„路。 +使用後會æˆç‚ºæ‚¨èº«è™•世界的地圖,而且會隨著您的探索腳步填滿。 + å¯å°„出箭來é è·æ”»æ“Šã€‚ å¯èˆ‡å¼“çµ„æˆæ­¦å™¨ã€‚ +凋零怪所扔下,用於製作燈塔。 + +啟動時,建立彩色爆炸。é¡è‰²ã€æ•ˆæžœã€å½¢ç‹€å’Œæ·¡å‡ºå–æ±ºæ–¼å»ºç«‹ç…™ç«æ™‚ä½¿ç”¨çš„ç…™ç«æ˜Ÿã€‚ + +用來決定煙ç«çš„é¡è‰²ã€æ•ˆæžœå’Œå½¢ç‹€ã€‚ + +用於紅石電路,以維æŒã€æ¯”較或除去信號強度,或是測é‡è‹¥å¹²æ–¹å¡Šçš„狀態。 + +屬於一種貨物礦車類型,功能是移動的 TNT 方塊。 + +是根據陽光 (或缺ä¹é™½å…‰) 發出紅石信號的方塊。 + +å±¬æ–¼ç‰¹æ®Šçš„è²¨ç‰©ç¤¦è»Šé¡žåž‹ï¼ŒåŠŸèƒ½é¡žä¼¼æ¼æ–—,會收集軌é“上的物å“以åŠä¸Šæ–¹å®¹å™¨å…§çš„物å“。 + +特殊護甲類型,å¯ä»¥è£åœ¨é¦¬ä¸Šã€‚æä¾› 5 護甲。 + +特殊護甲類型,å¯ä»¥è£åœ¨é¦¬ä¸Šã€‚æä¾› 7 護甲。 + +特殊護甲類型,å¯ä»¥è£åœ¨é¦¬ä¸Šã€‚æä¾› 11 護甲。 + +用來將生物拴在玩家或柵欄柱 + +用來為世界上的生物命å。 + å¯å›žå¾© 2.5 個 {*ICON_SHANK_01*}。 使用 1 次å¯å›žå¾© 1 個 {*ICON_SHANK_01*},總共能使用 6 次。 @@ -933,205 +1015,263 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 生物頭顱å¯ç•¶è£é£¾å“或當åšé¢å…·æˆ´åœ¨é ­ç›”空格中。 +用來執行指令。 + +æœå¤©ç©ºç™¼å°„å…‰æŸï¼Œè€Œä¸”能夠為附近玩家æä¾›ç‹€æ…‹æ•ˆæžœã€‚ + +將方塊和物å“儲存在裡é¢ã€‚將兩個儲物箱並排在一起,å³å¯å»ºç«‹å…©å€å®¹é‡çš„大型儲物箱。陷阱儲物箱還會在開啟時建立紅石彈。 + +æä¾›ç´…石彈,當æ¿ä¸Šçš„物å“越多,彈的力é‡è¶Šå¼·å¤§ã€‚ + +æä¾›ç´…石彈,æ¿ä¸Šç‰©å“越多越強大。相較於輕型æ¿å­ï¼Œéœ€è¦æ›´å¤šé‡é‡ã€‚ + +用來當æˆç´…石能æºã€‚å¯è£½ä½œé‚„原回紅石。 + +用來接ä½ç‰©å“,或是將物å“é€é€²å®¹å™¨æˆ–從容器å–出。 + +這種類型的軌é“能夠啟用或åœç”¨æ¼æ–—礦車,以åŠè§¸ç™¼ TNT 礦車。 + +用來è£ç‰©å“åŠæ‰”下物å“,或是在ç²å¾—ç´…çŸ³å½ˆæ™‚ï¼Œå°‡ç‰©å“æŽ¨å…¥å¦ä¸€å€‹å®¹å™¨ã€‚ + +為硬化é»åœŸæŸ“色,å³å¯è£½ä½œå½©è‰²æ–¹å¡Šã€‚ + +能夠餵食馬ã€é©¢æˆ–騾,最多治癒 10 顆心。加快å°é¦¬å’Œå°é©¢ç”Ÿé•·çš„速度。 + +在熔çˆç†”é»åœŸå³å¯è£½é€ å‡ºä¾†ã€‚ + +用玻璃和染料製作。 + +用彩繪玻璃製作 + +儲存煤的壓縮方法。å¯ä»¥ç•¶åšçˆçš„燃料。 + çƒè³Š - + 被殺死時會掉è½å¢¨å›Šã€‚ - + 乳牛 - + 被殺死時會掉è½çš®é©ã€‚您也å¯ä»¥ç”¨æ¡¶å­ä¾†æ“ ç‰›å¥¶ã€‚ - + 綿羊 - + 被剪羊毛時會掉è½ç¾Šæ¯› (å‰ææ˜¯ç‰ çš„ç¾Šæ¯›é‚„æ²’è¢«å‰ªæŽ‰)ã€‚å¯æŸ“è‰²ä¾†è®“ç¶¿ç¾Šæ“æœ‰ä¸åŒè‰²å½©çš„羊毛。 - + 雞 - + 被殺死時會掉è½ç¾½æ¯›ï¼Œé‚„會隨機生蛋。 - + 豬 - + 被殺死時會掉è½è±¬è‚‰ã€‚您還å¯ä»¥ä½¿ç”¨éžåº§ä¾†é¨Žåœ¨è±¬ä¸Šã€‚ - + 狼 - + 狼是溫馴的動物,但當您攻擊牠時,牠就會攻擊您。您å¯ä»¥ä½¿ç”¨éª¨é ­ä¾†é¦´æœç‹¼ï¼Œé€™æœƒè®“牠跟著您走,並攻擊任何在攻擊您的æ±è¥¿ã€‚ - + Creeper - + 如果您é å¤ªè¿‘å°±æœƒçˆ†ç‚¸ï¼ - + éª·é« - + æœƒå°æ‚¨å°„箭,被殺死時會掉è½ç®­ã€‚ - + 蜘蛛 - + 如果您é è¿‘蜘蛛,牠就會攻擊您。蜘蛛會爬牆,被殺死時會掉è½çµ²ç·šã€‚ - + æ®­å± - + 如果您é è¿‘æ®­å±ï¼Œæ®­å±å°±æœƒæ”»æ“Šæ‚¨ã€‚ - + æ®­å± Pigman - + æ®­å± Pigman æ˜¯æº«é¦´çš„æ€ªç‰©ï¼Œä½†å¦‚æžœæ‚¨æ”»æ“Šæ•´ç¾¤æ®­å± Pigman ä¸­çš„ä¸€å€‹ï¼Œæ•´ç¾¤æ®­å± Pigman 就會開始攻擊您。 - + Ghast - + æœƒå°æ‚¨ç™¼å°„ç«çƒï¼Œè€Œä¸”ç«çƒç¢°åˆ°æ±è¥¿æ™‚會爆炸。 - + å²èŠå§† - + å—å‚·å®³æ™‚æœƒåˆ†è£‚æˆæ•¸å€‹å°å²èŠå§†ã€‚ - + Enderman - + 如果您直視 Enderman,Enderman 就會攻擊您,而且還會到處移動方塊。 - + Silverfish - + ç•¶ Silverfish å—到攻擊時,會引來躲在附近的 Silverfish。牠們會躲在石頭方塊中。 - + 穴蜘蛛 - + æ“æœ‰æ¯’牙。 - + Mooshroom - + 與碗一起使用å¯ç”¨ä¾†ç‡‰è˜‘è‡ï¼Œå‰ªæ¯›å¾ŒæœƒæŽ‰è½è˜‘è‡ï¼Œä¸”æœƒè®Šæˆæ™®é€šçš„乳牛。 - + 雪人 - + 玩家å¯ç”¨ç™½é›ªæ–¹å¡Šå’Œå—瓜製作雪人。雪人會å°è£½ä½œè€…的敵人投擲雪çƒã€‚ - + çµ‚ç•Œé¾ - + 這是出ç¾åœ¨çµ‚界的巨大黑é¾ã€‚ - + Blaze - + Blaze 是地ç„裡的敵人,絕大部分皆分布在地ç„è¦å¡žä¸­ã€‚ç•¶ Blaze è¢«æ®ºæ­»æ™‚æœƒæŽ‰è½ Blaze 棒。 - + 熔岩怪 - + ç†”å²©æ€ªå‡ºç¾æ–¼åœ°ç„,被殺死時會分裂æˆå¾ˆå¤šå°ç†”岩怪,這點跟å²è˜­å§†å¾ˆåƒã€‚ - + æ‘æ°‘ - + 豹貓 - + åˆ†å¸ƒåœ¨ç†±å¸¶å¢æž—中,餵生魚就能馴æœç‰ å€‘ã€‚ä½†å‰ææ˜¯å¿…é ˆè®“è±¹è²“é è¿‘您,畢竟任何一個çªç„¶çš„動作都會嚇跑牠們。 - + éµå‚€å„¡ - + 出ç¾ä¾†ä¿è­·æ‘è½ï¼Œå¯ä»¥ç”¨éµå¡Šè·Ÿå—瓜製作。 - -Explosives Animator + +è™è  + +這些飛行生物居ä½åœ¨æ´žçªŸæˆ–其他大型å°é–‰ç©ºé–“。 + +女巫 + +這些敵人居ä½åœ¨æ²¼æ¾¤ï¼Œå¥¹å€‘會投擲藥水攻擊您。當您殺死她們,藥水就會掉下來。 + +馬 + +這些動物能夠馴æœï¼ŒæŽ¥è‘—便å¯ä¾›é¨Žä¹˜ã€‚ + +é©¢ + +這些動物能夠馴æœï¼ŒæŽ¥è‘—便å¯ä¾›é¨Žä¹˜ï¼Œè€Œä¸”å¯ä»¥è£ä¸Šå„²ç‰©ç®±ã€‚ + +騾 + +馬和驢的後代。這些動物能夠被馴æœï¼ŒæŽ¥è‘—便å¯ä¾›äººé¨Žä¹˜ã€ç©¿æˆ´è­·ç”²ä¸¦æ”œå¸¶å„²ç‰©ç®±ã€‚ + +æ®­å±é¦¬ + +骷é«é¦¬ + +凋零怪 + +製作原料包括凋零骷é«é ­å’Œéˆé­‚æ²™ï¼Œä»–å€‘æœƒæœæ‚¨ç™¼å°„爆炸骷é«é ­ã€‚ + +爆炸動畫繪製者 -Concept Artist +概念è—è¡“å®¶ -Number Crunching and Statistics +數字é‹ç®—與統計數據 -Bully Coordinator +欺負å”調者 -Original Design and Code by +原始設計與編碼者 -Project Manager/Producer +專案經ç†/製作者 -Rest of Mojang Office +其餘 Mojang 辦公室 -Lead Game Programmer Minecraft PC +é ˜å°ŽéŠæˆ²ç¨‹å¼è¨­è¨ˆå¸« Minecraft PC -Ninja Coder +Ninja 程å¼ç·¨ç¢¼è€… -CEO +首席執行長 -White Collar Worker +白領勞工 -Customer Support +å®¢æˆ¶æ”¯æ´ -Office DJ +辦公室 DJ -Designer/Programmer Minecraft - Pocket Edition +設計者/程å¼è¨­è¨ˆå¸« Minecraft - 袖ç版 -Developer +開發者 -Chief Architect +首席建築師 -Art Developer +è—術開發者 -Game Crafter +éŠæˆ²åŠ å·¥è€… -Director of Fun +有趣董事 -Music and Sounds +音樂與è²éŸ³ -Programming +程å¼è¨­è¨ˆ -Art +è—è¡“ QA -Executive Producer +執行製作者 -Lead Producer +主管製作者 -Producer +製作者 -Test Lead +測試主管 -Lead Tester +主管測試員 -Design Team +設計團隊 -Development Team +開發團隊 -Release Management +ç™¼å¸ƒç®¡ç† -Director, XBLA Publishing +董事, XBLA 公佈 -Business Development +業務開發 -Portfolio Director +投資董事 -Product Manager +è£½ä½œç¶“ç† -Marketing +行銷 - Community Manager +ç¤¾ç¾¤ç¶“ç† -Europe Localization Team +æ­æ´²åœ¨åœ°åŒ–團隊 -Redmond Localization Team +Redmond 在地化團隊 -Asia Localization Team +亞洲在地化團隊 -User Research Team +使用者研究團隊 -MGS Central Teams +MGS 中心團隊 -Milestone Acceptance Tester +里程碑驗收測試員 -Special Thanks +ç‰¹åˆ¥æ„Ÿè¬ -Test Manager +æ¸¬è©¦ç¶“ç† -Senior Test Lead +資深測試主管 SDET -Project STE +專案 STE -Additional STE +å…¶ä»– STE -Test Associates +測試相關 Jon Kagstrom -Tobias Mollstam +Tobias Möllstam -Rise Lugo +Risë Lugo æœ¨åŠ @@ -1373,6 +1513,8 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 地圖 +空白地圖 + 唱片:13 唱片:Cat @@ -1475,6 +1617,28 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª Creeper 頭顱 +幽冥星 + +ç…™ç«ç«ç®­ + +ç…™ç«æ˜Ÿ + +紅石比較器 + +TNT 礦車 + +æ¼æ–—礦車 + +éµé¦¬éާ + +黃金馬鎧 + +鑽石馬鎧 + +繩索 + +å牌 + 石頭 é’è‰æ–¹å¡Š @@ -1491,6 +1655,8 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª ç†±å¸¶å¢æž—åŽšæœ¨æ¿ +木æåŽšæœ¨æ¿ (任何類型) + 樹苗 橡樹樹苗 @@ -1827,6 +1993,193 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª éª·é« +指令方塊 + +燈塔 + +陷阱儲物箱 + +測é‡å£“力æ¿ï¼ˆè¼•型) + +測é‡å£“力æ¿ï¼ˆé‡åž‹ï¼‰ + +紅石比較器 + +陽光感測器 + +紅石方塊 + +æ¼æ–— + +啟動éµè»Œ + +投擲器 + +染色é»åœŸå¡Š + +ä¹¾è‰æ† + +硬化é»åœŸ + +煤炭塊 + +黑色染色é»åœŸå¡Š + +紅色染色é»åœŸå¡Š + +綠色染色é»åœŸå¡Š + +棕色染色é»åœŸå¡Š + +è—色染色é»åœŸå¡Š + +紫色染色é»åœŸå¡Š + +é’綠色染色é»åœŸå¡Š + +æ·ºç°è‰²æŸ“色é»åœŸå¡Š + +ç°è‰²æŸ“色é»åœŸå¡Š + +粉紅色染色é»åœŸå¡Š + +淡黃綠色染色é»åœŸå¡Š + +黃色染色é»åœŸå¡Š + +æ·ºè—色染色é»åœŸå¡Š + +洋紅色染色é»åœŸå¡Š + +橘色染色é»åœŸå¡Š + +白色染色é»åœŸå¡Š + +彩繪玻璃 + +黑色彩繪玻璃 + +紅色彩繪玻璃 + +綠色彩繪玻璃 + +棕色彩繪玻璃 + +è—色彩繪玻璃 + +紫色彩繪玻璃 + +é’綠色彩繪玻璃 + +æ·ºç°è‰²å½©ç¹ªçŽ»ç’ƒ + +ç°è‰²å½©ç¹ªçŽ»ç’ƒ + +粉紅色彩繪玻璃 + +淡黃綠色彩繪玻璃 + +黃色彩繪玻璃 + +æ·ºè—色彩繪玻璃 + +洋紅色彩繪玻璃 + +橘色彩繪玻璃 + +白色彩繪玻璃 + +彩繪玻璃窗格 + + +黑色彩繪玻璃窗格 + + +紅色彩繪玻璃窗格 + + +綠色彩繪玻璃窗格 + +棕色彩繪玻璃窗格 + +è—色彩繪玻璃窗格 + +紫色彩繪玻璃窗格 + +é’綠色彩繪玻璃窗格 + +æ·ºç°è‰²å½©ç¹ªçŽ»ç’ƒçª—æ ¼ + +ç°è‰²å½©ç¹ªçŽ»ç’ƒçª—æ ¼ + +粉紅色彩繪玻璃窗格 + +淡黃綠色彩繪玻璃窗格 + +黃色彩繪玻璃窗格 + +æ·ºè—色彩繪玻璃窗格 + +洋紅色彩繪玻璃窗格 + +橘色彩繪玻璃窗格 + +白色彩繪玻璃窗格 + +å°çƒ + +å¤§çƒ + +星型 + +Creeper åž‹ + +爆裂 + +䏿˜Žå½¢ç‹€ + +黑色 + +紅色 + +綠色 + +棕色 + +è—色 + +紫色 + +é’綠色 + +æ·ºç°è‰² + +ç°è‰² + +粉紅色 + +淡黃綠色 + +黃色 + +æ·ºè—色 + +洋紅色 + +橘色 + +白色 + +自訂 + +淡化 + +é–ƒçˆ + +éµè»Œ + +戰鬥æŒçºŒæ™‚間: +  ç›®å‰çš„æŽ§åˆ¶æ–¹å¼ é…ç½® @@ -2004,8 +2357,7 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª é€™æ˜¯æ‚¨çš„ç‰©å“æ¬„。這裡會顯示å¯åœ¨æ‚¨æ‰‹ä¸­ä½¿ç”¨çš„物å“ï¼Œä»¥åŠæ‚¨èº«ä¸Šçš„æ‰€æœ‰å…¶ä»–物å“。您穿戴的護甲也會顯示在這裡。 - - + {*B*} 請按下 {*CONTROLLER_VK_A*} 來繼續。{*B*} å¦‚æžœæ‚¨å·²ç¶“äº†è§£ç‰©å“æ¬„的使用方å¼ï¼Œè«‹æŒ‰ä¸‹ {*CONTROLLER_VK_B*}。 @@ -2026,7 +2378,7 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª - å¦‚æžœæ‚¨æƒ³çŸ¥é“æŸå€‹ç‰©å“的詳細資訊,åªè¦æŠŠæ¸¸æ¨™ç§»å‹•到該物å“上é¢ï¼Œç„¶å¾ŒæŒ‰ä¸‹ {*CONTROLLER_VK_RT*} å³å¯ã€‚ + å¦‚æžœæ‚¨æƒ³çŸ¥é“æŸå€‹ç‰©å“的詳細資訊,åªè¦æŠŠæ¸¸æ¨™ç§»å‹•到該物å“上é¢ï¼Œç„¶å¾ŒæŒ‰ä¸‹{*CONTROLLER_ACTION_MENU_PAGEDOWN*}å³å¯ã€‚ @@ -2060,7 +2412,7 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª - å¦‚æžœæ‚¨æƒ³çŸ¥é“æŸå€‹ç‰©å“的詳細資訊,åªè¦æŠŠæ¸¸æ¨™ç§»å‹•到該物å“上é¢ï¼Œç„¶å¾ŒæŒ‰ä¸‹ {*CONTROLLER_VK_RT*} å³å¯ã€‚ + å¦‚æžœæ‚¨æƒ³çŸ¥é“æŸå€‹ç‰©å“的詳細資訊,åªè¦æŠŠæ¸¸æ¨™ç§»å‹•到該物å“上é¢ï¼Œç„¶å¾ŒæŒ‰ä¸‹{*CONTROLLER_ACTION_MENU_PAGEDOWN*}å³å¯ã€‚ @@ -2606,6 +2958,211 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 如果您已經了解食物列的使用方å¼ï¼Œä»¥åŠåƒæ±è¥¿çš„æ–¹æ³•,請按下 {*CONTROLLER_VK_B*} 。 + + é€™æ˜¯é¦¬çš„ç‰©å“æ¬„介é¢ã€‚ + + + + {*B*}按下{*CONTROLLER_VK_A*} 繼續。 + {*B*}如果您已經知é“å¦‚ä½•ä½¿ç”¨é¦¬ç‰©å“æ¬„,請按下{*CONTROLLER_VK_B*}。 + + + + é¦¬ç‰©å“æ¬„èƒ½è®“æ‚¨å‚³é€æˆ–安è£ç‰©å“至馬ã€é©¢æˆ–騾身上。 + + + + 在馬éžç©ºæ ¼æ”¾ç½®é¦¬éžï¼Œå³å¯ç‚ºé¦¬è£ä¸Šé¦¬éžã€‚在護甲空格放置馬護甲,å³å¯ç‚ºé¦¬è£ä¸Šè­·ç”²ã€‚ + + + + 您還å¯ä»¥åœ¨é€™å€‹é¸å–®ä¸­ï¼Œæ–¼è‡ªå·±çš„ç‰©å“æ¬„與ç¶åœ¨é©¢å’Œé¨¾çš„éžå›Šä¹‹é–“傳é€ç‰©å“。 + + +您發ç¾äº†ä¸€åŒ¹é¦¬ã€‚ + +您發ç¾äº†ä¸€åŒ¹é©¢ã€‚ + +您發ç¾äº†ä¸€åŒ¹é¨¾ã€‚ + + + {*B*}按下{*CONTROLLER_VK_A*} 進一步瞭解馬ã€é©¢å’Œé¨¾ã€‚ + {*B*}如果您已經瞭解馬ã€é©¢å’Œé¨¾ï¼Œè«‹æŒ‰ä¸‹{*CONTROLLER_VK_B*}。 + + + + 馬和驢居ä½åœ¨é–‹é—Šçš„平原。驢和馬交é…å³å¯ç”¢ä¸‹é¨¾ï¼Œä½†æ˜¯æœ¬èº«ä¸å…·ç”Ÿè‚²èƒ½åŠ›ã€‚ + + + + 所有æˆå¹´çš„馬ã€é©¢å’Œé¨¾éƒ½å¯ä¾›é¨Žä¹˜ï¼Œä½†æ˜¯åªæœ‰é¦¬èƒ½å¤ ç©¿ä¸Šè­·ç”²ï¼Œåªæœ‰é¨¾å’Œé©¢å¯ä»¥è£ä¸Šéžå›Šé‹è¼¸ç‰©å“。 + + + + 馬ã€é©¢å’Œé¨¾å¿…é ˆå…ˆé¦´æœæ‰å ªç”¨ã€‚馴æœé¦¬çš„æ–¹å¼æ˜¯é¨Žä¸ŠåŽ»ï¼ŒéŽç¨‹ä¸­é¦¬æœƒæƒ³è¾¦æ³•將騎士摔下馬背,騎士必須想辦法留在馬背上。 + + + + 當愛心出ç¾åœ¨é¦¬çš„å‘¨åœæ™‚,牠已經被馴æœï¼Œå†ä¹Ÿä¸æœƒæŠŠçŽ©å®¶æ‘”ä¸‹é¦¬èƒŒã€‚ + + + + 馬上嘗試騎這匹馬。手上ä¸è¦æ‹¿ç‰©å“或工具,使用 {*CONTROLLER_ACTION_USE*} 騎上馬背。 + + + + 您必須幫馬è£ä¸Šé¦¬éžï¼Œæ‰èƒ½æ“縱馬的方å‘。馬éžå¯ä»¥å‘æ‘æ°‘購買,或是從è—在世界中的儲物箱尋找。 + + + + è£ä¸Šå„²ç‰©ç®±ï¼Œå°±èƒ½ç‚ºé¦´æœçš„驢和騾加éžå›Šã€‚騎乘或潛行時就能使用這些éžå›Šã€‚ + + + + 餵食金蘋果或金蘿蔔å³å¯ç¹æ®–馬和驢,就åƒç¹æ®–其他動物一樣(但是騾ä¸è¡Œï¼‰ã€‚å°é¦¬ç¶“éŽä¸€æ®µæ™‚é–“å°±æœƒé•·æˆæˆå¹´é¦¬ï¼Œä¸éŽå¦‚果餵食å°éº¥æˆ–ä¹¾è‰å°±æœƒåŠ é€Ÿé•·å¤§ã€‚ + + + + 您å¯ä»¥å˜—試在這裡馴æœé¦¬å’Œé©¢ï¼Œé€™è£¡é™„近的儲物箱裡é¢ï¼Œé‚„有馬éžã€é¦¬éާåŠå…¶ä»–實用的馬相關物å“。 + + + + 這是燈塔介é¢ï¼Œå¯ç”¨ä¾†é¸æ“‡ç‡ˆå¡”è¦æŽˆèˆ‡å“ªç¨®åŠ›é‡ã€‚ + + + + {*B*}按下{*CONTROLLER_VK_A*} 繼續。 + {*B*}如果您已經知é“如何使用燈塔介é¢ï¼Œè«‹æŒ‰ä¸‹{*CONTROLLER_VK_B*}。 + + + + 您å¯ä»¥åœ¨ç‡ˆå¡”é¸å–®ä¸­ï¼Œç‚ºç‡ˆå¡”é¸å–一種主è¦çš„力é‡ã€‚金字塔越多層,å¯ä¾›é¸æ“‡çš„力é‡è¶Šå¤šã€‚ + + + + è‡³å°‘æœ‰å››å±¤çš„é‡‘å­—å¡”ä¸Šçš„ç‡ˆå¡”ï¼Œé‚„èƒ½å¤ è®“æ‚¨é¸æ“‡å†ç”Ÿæ¬¡è¦åЛ釿ˆ–是更強大的主è¦åŠ›é‡ã€‚ + + + + 您必須在付費空格奉上翡翠ã€é‘½çŸ³ã€é»ƒé‡‘或éµå¡Šï¼Œæ‰èƒ½è¨­å®šç‡ˆå¡”的力é‡ã€‚è¨­å®šå¾Œï¼Œç‡ˆå¡”å°±æœƒç„¡é™æœŸç™¼å‡ºåŠ›é‡ã€‚ + + +這座金字塔上方有åœç”¨çš„燈塔。 + + + {*B*}按下{*CONTROLLER_VK_A*} 進一步瞭解燈塔。 + {*B*}如果您已經瞭解燈塔,請按下{*CONTROLLER_VK_B*}。 + + + + 啟動的燈塔會å‘天空投射明亮的光æŸï¼Œè³¦äºˆé™„近的玩家力é‡ã€‚è£½ä½œç‡ˆå¡”çš„ææ–™åŒ…括玻璃ã€é»‘曜石和幽冥星,擊敗凋零怪å³å¯ç²å¾—。 + + + + 燈塔必須放置,白天æ‰èƒ½åœ¨æ²æµ´åœ¨é™½å…‰ä¹‹ä¸‹ã€‚燈塔必須放置於éµã€é»ƒé‡‘ã€ç¿¡ç¿ æˆ–鑽石金字塔上,ä¸éŽé¸æ“‡çš„ææ–™ä¸æœƒå½±éŸ¿ç‡ˆå¡”的力é‡ã€‚ + + + + 嘗試用燈塔設定它所賦予的力é‡ï¼Œæ‚¨å¯ä»¥æ‹¿éš¨é™„éµå¡Šæ”¯ä»˜å¿…è¦è²»ç”¨ã€‚ + + +é€™å€‹æˆ¿é–“å…§æœ‰æ¼æ–— + + + {*B*}按下{*CONTROLLER_VK_A*} é€²ä¸€æ­¥çž­è§£æ¼æ–—。 + {*B*}å¦‚æžœæ‚¨å·²ç¶“çž­è§£æ¼æ–—,請按下{*CONTROLLER_VK_B*}。 + + + + 您å¯ä»¥ä½¿ç”¨æ¼æ–—å°‡ç‰©å“æ’入容器或是從容器移除物å“,以åŠè‡ªå‹•拾å–丟入容器的物å“。 + + + + æ¼æ–—能夠影響釀造å°ã€å„²ç‰©ç®±ã€ç™¼å°„å™¨ã€æŠ•æ“²å™¨ã€é‹è¼¸ç¤¦è»Šã€æ¼æ–—礦車åŠå…¶ä»–æ¼æ–—。 + + + + æ¼æ–—會一直嘗試從放在上方的åˆé©å®¹å™¨å¸å–物å“ï¼Œé‚„æœƒå˜—è©¦å°‡å„²å­˜çš„ç‰©å“æ’入輸出容器。 + + + + ç„¶è€Œï¼Œå¦‚æžœæ¼æ–—是用紅石發電就會åœç”¨ï¼Œä¸¦ä¸”åœæ­¢å¸å–å’Œæ’入物å“。 + + + + æ¼æ–—會指å‘嘗試輸出物å“的方å‘。若è¦è®“æ¼æ–—指å‘ç‰¹å®šæ–¹å¡Šï¼Œæ½›è¡Œæ™‚å°‡æ¼æ–—放在背å°è©²æ–¹å¡Šçš„ä½ç½®å³å¯ã€‚ + + + + 在這個房間裡é¢ï¼Œæœ‰å¥½å¹¾ç¨®å¯¦ç”¨çš„æ¼æ–—é…置供您åƒè€ƒèˆ‡å¯¦é©—。 + + + + 這是煙ç«ä»‹é¢ï¼Œå¯ä»¥ç”¨ä¾†è£½ä½œç…™ç«å’Œç…™ç«æ˜Ÿã€‚ + + + + {*B*}按下{*CONTROLLER_VK_A*} 繼續。 + {*B*}如果您已經知é“如何使用燈塔介é¢ï¼Œè«‹æŒ‰ä¸‹{*CONTROLLER_VK_B*}。 + + + + \è‹¥è¦è£½ä½œç…™ç«ï¼Œè«‹å°‡ç«è—¥å’Œç´™æ”¾åœ¨åº«å­˜ä¸Šæ–¹çš„ 3x3 工作å°ã€‚ + + + + \您å¯ä»¥é¸æ“‡åœ¨å·¥ä½œå°æ”¾ç½®å¤šé¡†ç…™ç«æ˜Ÿï¼ŒåŠ å…¥ç…™ç«ã€‚ + + + + 用ç«è—¥åœ¨å·¥ä½œå°å¡«æ»¿çš„ç©ºæ ¼è¶Šå¤šï¼Œæ‰€æœ‰ç…™ç«æ˜Ÿæœƒçˆ†ç‚¸çš„高度越高。 + + + + 然後等您想製作時,便å¯å¾žè¼¸å‡ºç©ºæ ¼å–出製作的煙ç«ã€‚ + + + + å°‡ç«è—¥å’ŒæŸ“料放進工作å°ï¼Œå³å¯è£½ä½œç…™ç«æ˜Ÿã€‚ + + + + æŸ“æ–™æœƒæ±ºå®šç…™ç«æ˜Ÿçˆ†ç‚¸çš„é¡è‰²ã€‚ + + + + ç…™ç«æ˜Ÿçš„å½¢ç‹€å–æ±ºæ–¼åŠ å…¥ç«ç„°å½ˆã€é‡‘塊ã€ç¾½æ¯›æˆ–生物的頭。 + + + + 使用鑽石或螢光粉å³å¯æ–°å¢žå°¾å·´æˆ–é–ƒçˆã€‚ + + + + ç…™ç«æ˜Ÿè£½ä½œå®Œæˆå¾Œï¼Œä»¥æŸ“料製作å³å¯æ±ºå®šç…™ç«æ˜Ÿçš„æ·¡å‡ºé¡è‰²ã€‚ + + + + 此處儲物箱內有製作煙ç«ç”¨çš„å„種物å“ï¼ + + + + {*B*}按下{*CONTROLLER_VK_A*} å³å¯é€²ä¸€æ­¥çž­è§£ç…™ç«ã€‚ + {*B*}如果您已經瞭解煙ç«ï¼Œè«‹æŒ‰ä¸‹{*CONTROLLER_VK_B*}。 + + + + ç…™ç«å±¬æ–¼è£é£¾å“,å¯ä»¥æ‰‹å‹•æˆ–åˆ©ç”¨ç™¼å°„å™¨ç™¼å°„ï¼Œè£½ä½œçš„ææ–™åŒ…括紙ã€ç«è—¥ï¼Œä¹Ÿæœ‰äººæœƒé¸æ“‡åŠ å…¥å¹¾é¡†ç…™ç«æ˜Ÿã€‚ + + + + ç…™ç«æ˜Ÿçš„é¡è‰²ã€æ·¡åŒ–ã€å½¢ç‹€ã€å¤§å°èˆ‡æ•ˆæžœ (例如尾巴和閃çˆ) å¯è‡ªè¨‚,方法是在製作時加入é¡å¤–ææ–™ã€‚ + + + + 嘗試用儲物箱內的å„å¼å„æ¨£ææ–™è£½ä½œç…™ç«ã€‚ + +  é¸å– 使用 @@ -2724,7 +3281,7 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 播放 -騎/æ­ä¹˜ +æ­ä¹˜ 乘船 @@ -2828,6 +3385,22 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 上傳供 Xbox One 使用的存檔 +騎上 + +下馬 + +騎下 + +發射 + +æ “ä½ + +å°„ç®­ + +è£ä¸Š + +命å + 確定 å–æ¶ˆ @@ -3142,6 +3715,20 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 發射器 +馬 + +投擲器 + +æ¼æ–— + +燈塔 + +主è¦åŠ›é‡ + +次è¦åŠ›é‡ + +礦車 + é€™æ¬¾éŠæˆ²ç›®å‰æ²’有此類型的下載內容。 %s å·²ç¶“åŠ å…¥éŠæˆ²ã€‚ @@ -3301,10 +3888,14 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª éŠæˆ²æ¨¡å¼ï¼šå‰µé€  +éŠæˆ²æ¨¡å¼ï¼šå†’險 + 生存 創造 +冒險 + 在生存模å¼ä¸­å»ºç«‹ 在創造模å¼ä¸­å»ºç«‹ @@ -3325,6 +3916,8 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª éžå¸¸å¹³å¦ +輸入種å­ï¼Œå†åº¦ç”¢ç”Ÿç›¸åŒçš„地形。留白會隨機挑é¸ä¸–界。 + å•Ÿç”¨æ™‚ï¼Œæœ¬éŠæˆ²å°‡æˆç‚ºç·šä¸ŠéŠæˆ²ã€‚ 啟用時,åªé™è¢«é‚€è«‹çš„玩家加入。 @@ -3349,6 +3942,20 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 啟用時,玩家的å†ç”Ÿé»žé™„近會有個è£è‘—有用物å“的箱å­ã€‚ +åœç”¨æ™‚,怪物和動物無法變更方塊(例如:Creeper çˆ†ç‚¸ä¸æœƒæ‘§æ¯€æ–¹å¡Šï¼Œç¶¿ç¾Šç„¡æ³•移除è‰ï¼‰æˆ–æ‹¾èµ·ç‰©å“ + +啟用時,玩家死掉時å¯ä»¥ä¿ç•™ç‰©å“欄。 + +åœç”¨æ™‚ï¼Œç”Ÿç‰©ä¸æœƒè‡ªç„¶é‡ç”Ÿã€‚ + +åœç”¨æ™‚ï¼Œæ€ªç‰©å’Œå‹•ç‰©ä¸æœƒè½ä¸‹æˆ°åˆ©å“(例如:Creeper 䏿œƒè½ä¸‹ç«è—¥ï¼‰ã€‚ + +åœç”¨æ™‚ï¼Œæ–¹å¡Šæ‘§æ¯€æ™‚ä¸æœƒè½ä¸‹ç‰©å“ï¼ˆä¾‹å¦‚ï¼ŒçŸ³é ­æ–¹å¡Šä¸æœƒè½ä¸‹éµåµçŸ³ï¼‰ã€‚ + +åœç”¨æ™‚ï¼ŒçŽ©å®¶ä¸æœƒè‡ªç„¶æ¢å¾©ç”Ÿå‘½å€¼ã€‚ + +åœç”¨æ™‚ï¼Œæ™‚é–“ä¸æœƒæ›´æ”¹ã€‚ + 角色外觀套件 主題 @@ -3397,7 +4004,49 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª {*PLAYER*} 被 {*SOURCE*} 的拳頭打死了 -{*PLAYER*} 已被 {*SOURCE*} 殺死。 +{*PLAYER*} 已被 {*SOURCE*} 用魔法殺死 + +{*PLAYER*} 從梯å­è·Œè½ + +{*PLAYER*} å¾žè—¤è”“è·Œè½ + +{*PLAYER*} 從水中掉出來 + +{*PLAYER*} å¾žé«˜è™•è·Œè½ + +{*PLAYER*} å—到 {*SOURCE*} 的跌è½è©›å’’ + +{*PLAYER*} å—到 {*SOURCE*} 的跌è½è©›å’’ + +{*PLAYER*} å—到 {*SOURCE*} 利用 {*ITEM*} 的跌è½è©›å’’ + +{*PLAYER*} è·Œè½è·é›¢å¤ªé ï¼Œé­åˆ° {*SOURCE*} 消滅 + +{*PLAYER*} è·Œè½è·é›¢å¤ªé ï¼Œé­åˆ° {*SOURCE*} 用 {*ITEM*} 消滅 + +{*PLAYER*} 在與 {*SOURCE*} 作戰時走入ç«ä¸­ + +{*PLAYER*} 在與 {*SOURCE*} 作戰時燒æˆç°ç‡¼ + +{*PLAYER*} 嘗試在岩漿中游泳,以逃離 {*SOURCE*} + +{*PLAYER*} 在嘗試逃離 {*SOURCE*} 時溺水 + +{*PLAYER*} 在嘗試逃離 {*SOURCE*} 時走入仙人掌 + +{*PLAYER*} é­ {*SOURCE*} 轟炸 + +{*PLAYER*} 已凋零 + +{*PLAYER*} 已被 {*SOURCE*} 用 {*ITEM*} 屠殺 + +{*PLAYER*} 已被 {*SOURCE*} 用 {*ITEM*} å°„æ­» + +{*PLAYER*} 已被 {*SOURCE*} 用 {*ITEM*} é­ç«çƒæ“Šä¸­ + +{*PLAYER*} 已被 {*SOURCE*} 用 {*ITEM*} æ¥æ‰“ + +{*PLAYER*} 已被 {*SOURCE*} 用 {*ITEM*} 殺死 基岩迷霧 @@ -3574,6 +4223,8 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª ç›®å‰å·²é”åˆ°éŠæˆ²ä¸–界的çƒè³Šæ•¸é‡ä¸Šé™ï¼Œç„¡æ³•使用角色蛋。 +ç›®å‰å·²é”åˆ°éŠæˆ²ä¸–ç•Œçš„æ‘æ°‘數é‡ä¸Šé™ï¼Œç„¡æ³•使用角色蛋。 + ç›®å‰å·²é”åˆ°éŠæˆ²ä¸–界的敵人數é‡ä¸Šé™ï¼Œç„¡æ³•使用角色蛋。 ç›®å‰å·²é”åˆ°éŠæˆ²ä¸–ç•Œçš„æ‘æ°‘數é‡ä¸Šé™ï¼Œç„¡æ³•使用角色蛋。 @@ -3588,6 +4239,8 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 雞已é”åˆ°ç¹æ®–數é‡ä¸Šé™ï¼Œè©²å‹•物無法進入戀愛模å¼ã€‚ +這種動物ä¸èƒ½é€²å…¥æ„›æƒ…模å¼ï¼Œå·²ç¶“é”åˆ°ç¹æ®–馬的數é‡ä¸Šé™ã€‚ + Mooshrooms å·²é”åˆ°ç¹æ®–數é‡ä¸Šé™ï¼Œè©²å‹•物無法進入戀愛模å¼ã€‚ ç›®å‰é€™å€‹ä¸–界的å°èˆ¹å·²é”到數é‡ä¸Šé™ã€‚ @@ -3615,27 +4268,43 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 製作群 釿–°å®‰è£å…§å®¹ - + åµéŒ¯è¨­å®š - + ç«æœƒè”“å»¶ - + 炸藥會爆炸 - + 玩家å°çީ家 - + 信任玩家 - + 主æŒäººç‰¹æ¬Š - + 產生建築 - + éžå¸¸å¹³å¦çš„世界 - + è´ˆå“ç®± - + 世界é¸é … - + +éŠæˆ²é¸é … + +生物惡æ„破壞 + +ä¿ç•™ç‰©å“欄 + +生物é‡ç”Ÿ + +ç”Ÿç‰©æˆ°åˆ©å“ + +ç£šå¡ŠæŽ‰è½ + +自然å†ç”Ÿ + +陽光循環 + å¯ä»¥å»ºé€ å’Œé–‹æŽ¡ å¯ä»¥ä½¿ç”¨é–€èˆ‡é–‹é—œ @@ -3822,6 +4491,14 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 巨毒 +凋零怪 + +生命值加乘 + +叿”¶ + +飽和 + æ•æ· ç·©æ…¢ @@ -3860,6 +4537,14 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 巨毒 +è…æœ½ + +生命值加乘 + +叿”¶ + +飽和 + 2 @@ -3956,6 +4641,22 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª 隨著時間自動減少å—影響玩家ã€å‹•物和怪物的生命值。 +套用時: + +馬跳èºåŠ›é‡ + +æ®­å±æ´è» + +ç”Ÿå‘½å€¼ä¸Šé™ + +ç”Ÿç‰©è·Ÿè¹¤ç¯„åœ + +擊退防禦力 + +速度 + +攻擊殺傷力 + 鋒利 釿“Š @@ -4046,7 +4747,7 @@ Xbox One 主機上的 Minecraft é è¨­ç‚ºå¤šäººéŠæˆ²ã€‚å¦‚æžœæ‚¨é¸æ“‡é«˜ç•«è³ª å¯å›žå¾© 3 點 {*ICON_SHANK_01*}。在熔çˆä¸­çƒ¹ç…®é¦¬éˆ´è–¯å³å¯ç²å¾—。 -å¯å›žå¾© 1 個 {*ICON_SHANK_01*},或å¯åœ¨ç†”çˆä¸­çƒ¹ç…®ã€‚å¯ä»¥æ ½ç¨®åœ¨è¾²åœ°ä¸Šã€‚食用å¯èƒ½æœƒè®“您中毒。 +å¯å›žå¾© 1 個 {*ICON_SHANK_01*}。 åƒé€™å€‹å¯èƒ½æœƒè®“您中毒。 å¯å›žå¾© 3 個 {*ICON_SHANK_01*}。用胡蘿蔔和碎金塊精製而æˆã€‚ diff --git a/Minecraft.Client/Common/Network/GameNetworkManager.cpp b/Minecraft.Client/Common/Network/GameNetworkManager.cpp index 2a80f80a..940a148e 100644 --- a/Minecraft.Client/Common/Network/GameNetworkManager.cpp +++ b/Minecraft.Client/Common/Network/GameNetworkManager.cpp @@ -6,6 +6,7 @@ #include "..\..\..\Minecraft.World\ThreadName.h" #include "..\..\..\Minecraft.World\Entity.h" #include "..\..\..\Minecraft.World\net.minecraft.world.level.tile.h" +#include "..\..\..\Minecraft.World\FireworksRecipe.h" #include "..\..\ClientConnection.h" #include "..\..\Minecraft.h" #include "..\..\User.h" @@ -30,7 +31,7 @@ #ifdef _XBOX #include "Common\XUI\XUI_PauseMenu.h" -#elif !(defined __PSVITA__) +#else #include "Common\UI\UI.h" #include "Common\UI\UIScene_PauseMenu.h" #include "..\..\Xbox\Network\NetworkPlayerXbox.h" @@ -204,7 +205,79 @@ bool CGameNetworkManager::StartNetworkGame(Minecraft *minecraft, LPVOID lpParame } else { - param->seed = seed = app.getLevelGenerationOptions()->getLevelSeed(); + param->seed = seed = app.getLevelGenerationOptions()->getLevelSeed(); + + if(param->levelGen->isTutorial()) + { + // Load the tutorial save data here + if(param->levelGen->requiresBaseSave() && !param->levelGen->getBaseSavePath().empty() ) + { +#ifdef _XBOX +#ifdef _TU_BUILD + wstring fileRoot = L"UPDATE:\\res\\GameRules\\" + param->levelGen->getBaseSavePath(); +#else + wstring fileRoot = L"GAME:\\res\\TitleUpdate\\GameRules\\" + param->levelGen->getBaseSavePath(); +#endif +#else +#ifdef _WINDOWS64 + wstring fileRoot = L"Windows64Media\\Tutorial\\" + param->levelGen->getBaseSavePath(); + File root(fileRoot); + if(!root.exists()) fileRoot = L"Windows64\\Tutorial\\" + param->levelGen->getBaseSavePath(); +#elif defined(__ORBIS__) + wstring fileRoot = L"/app0/orbis/Tutorial/" + param->levelGen->getBaseSavePath(); +#elif defined(__PSVITA__) + wstring fileRoot = L"PSVita/Tutorial/" + param->levelGen->getBaseSavePath(); +#elif defined(__PS3__) + wstring fileRoot = L"PS3/Tutorial/" + param->levelGen->getBaseSavePath(); +#else + wstring fileRoot = L"Tutorial\\" + param->levelGen->getBaseSavePath(); +#endif +#endif + File grf(fileRoot); + if (grf.exists()) + { +#ifdef _UNICODE + wstring path = grf.getPath(); + const WCHAR *pchFilename=path.c_str(); + HANDLE fileHandle = CreateFile( + pchFilename, // file name + GENERIC_READ, // access mode + 0, // share mode // TODO 4J Stu - Will we need to share file? Probably not but... + NULL, // Unused + OPEN_EXISTING , // how to create // TODO 4J Stu - Assuming that the file already exists if we are opening to read from it + FILE_FLAG_SEQUENTIAL_SCAN, // file attributes + NULL // Unsupported + ); +#else + const char *pchFilename=wstringtofilename(grf.getPath()); + HANDLE fileHandle = CreateFile( + pchFilename, // file name + GENERIC_READ, // access mode + 0, // share mode // TODO 4J Stu - Will we need to share file? Probably not but... + NULL, // Unused + OPEN_EXISTING , // how to create // TODO 4J Stu - Assuming that the file already exists if we are opening to read from it + FILE_FLAG_SEQUENTIAL_SCAN, // file attributes + NULL // Unsupported + ); +#endif + + if( fileHandle != INVALID_HANDLE_VALUE ) + { + DWORD bytesRead,dwFileSize = GetFileSize(fileHandle,NULL); + PBYTE pbData = (PBYTE) new BYTE[dwFileSize]; + BOOL bSuccess = ReadFile(fileHandle,pbData,dwFileSize,&bytesRead,NULL); + if(bSuccess==FALSE) + { + app.FatalLoadError(); + } + CloseHandle(fileHandle); + + // 4J-PB - is it possible that we can get here after a read fail and it's not an error? + param->levelGen->setBaseSaveData(pbData, dwFileSize); + } + } + } + } } } } @@ -694,7 +767,7 @@ int CGameNetworkManager::JoinFromInvite_SignInReturned(void *pParam,bool bContin { UINT uiIDA[1]; uiIDA[0] = IDS_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad); return 0; } @@ -738,7 +811,7 @@ int CGameNetworkManager::JoinFromInvite_SignInReturned(void *pParam,bool bContin { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad()); } else { @@ -856,6 +929,16 @@ int CGameNetworkManager::ServerThreadProc( void* lpParameter ) NetworkGameInitData *param = (NetworkGameInitData *)lpParameter; seed = param->seed; app.SetGameHostOption(eGameHostOption_All,param->settings); + + // 4J Stu - If we are loading a DLC save that's separate from the texture pack, load + if( param->levelGen != NULL && (param->texturePackId == 0 || param->levelGen->getRequiredTexturePackId() != param->texturePackId) ) + { + while((Minecraft::GetInstance()->skins->needsUIUpdate() || ui.IsReloadingSkin())) + { + Sleep(1); + } + param->levelGen->loadBaseSaveData(); + } } SetThreadName(-1, "Minecraft Server thread"); @@ -867,6 +950,7 @@ int CGameNetworkManager::ServerThreadProc( void* lpParameter ) Entity::useSmallIds(); Level::enableLightingCache(); Tile::CreateNewThreadStorage(); + FireworksRecipe::CreateNewThreadStorage(); MinecraftServer::main(seed, lpParameter); //saveData, app.GetGameHostOption(eGameHostOption_All)); @@ -889,10 +973,7 @@ int CGameNetworkManager::ExitAndJoinFromInviteThreadProc( void* lpParam ) Compression::UseDefaultThreadStorage(); //app.SetGameStarted(false); - -#ifndef __PSVITA__ UIScene_PauseMenu::_ExitWorld(NULL); -#endif while( g_NetworkManager.IsInSession() ) { @@ -900,7 +981,7 @@ int CGameNetworkManager::ExitAndJoinFromInviteThreadProc( void* lpParam ) } // Xbox should always be online when receiving invites - on PS3 we need to check & ask the user to sign in -#ifndef __PS3__ +#if !defined(__PS3__) && !defined(__PSVITA__) JoinFromInviteData *inviteData = (JoinFromInviteData *)lpParam; app.SetAction(inviteData->dwUserIndex, eAppAction_JoinFromInvite, lpParam); #else @@ -914,7 +995,7 @@ int CGameNetworkManager::ExitAndJoinFromInviteThreadProc( void* lpParam ) UINT uiIDA[2]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CGameNetworkManager::MustSignInReturned_0,lpParam, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CGameNetworkManager::MustSignInReturned_0,lpParam); } #endif @@ -1053,16 +1134,16 @@ int CGameNetworkManager::ChangeSessionTypeThreadProc( void* lpParam ) { if(g_NetworkManager.m_bSignedOutofPSN) { - C4JStorage::EMessageResult result = ui.RequestMessageBox( IDS_PROGRESS_CONVERTING_TO_OFFLINE_GAME, IDS_ERROR_PSN_SIGN_OUT, uiIDA,1,ProfileManager.GetPrimaryPad()); + C4JStorage::EMessageResult result = ui.RequestErrorMessage( IDS_PROGRESS_CONVERTING_TO_OFFLINE_GAME, IDS_ERROR_PSN_SIGN_OUT, uiIDA,1,ProfileManager.GetPrimaryPad()); } else { - C4JStorage::EMessageResult result = ui.RequestMessageBox( IDS_ERROR_NETWORK_TITLE, IDS_PROGRESS_CONVERTING_TO_OFFLINE_GAME, uiIDA,1,ProfileManager.GetPrimaryPad()); + C4JStorage::EMessageResult result = ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_PROGRESS_CONVERTING_TO_OFFLINE_GAME, uiIDA,1,ProfileManager.GetPrimaryPad()); } } else { - C4JStorage::EMessageResult result = ui.RequestMessageBox( IDS_CONNECTION_LOST, g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_LIVE_NO_EXIT), uiIDA,1,ProfileManager.GetPrimaryPad()); + C4JStorage::EMessageResult result = ui.RequestErrorMessage( IDS_CONNECTION_LOST, g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_LIVE_NO_EXIT), uiIDA,1,ProfileManager.GetPrimaryPad()); } // Swap these two messages around as one is too long to display at 480 @@ -1073,7 +1154,7 @@ int CGameNetworkManager::ChangeSessionTypeThreadProc( void* lpParam ) { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - C4JStorage::EMessageResult result = ui.RequestMessageBox( IDS_PROGRESS_CONVERTING_TO_OFFLINE_GAME, IDS_IN_PARTY_SESSION_FULL, uiIDA,1,ProfileManager.GetPrimaryPad()); + C4JStorage::EMessageResult result = ui.RequestErrorMessage( IDS_PROGRESS_CONVERTING_TO_OFFLINE_GAME, IDS_IN_PARTY_SESSION_FULL, uiIDA,1,ProfileManager.GetPrimaryPad()); pMinecraft->progressRenderer->progressStartNoAbort( IDS_PROGRESS_CONVERTING_TO_OFFLINE_GAME ); pMinecraft->progressRenderer->progressStage( -1 ); } @@ -1215,6 +1296,13 @@ int CGameNetworkManager::ChangeSessionTypeThreadProc( void* lpParam ) // Update the network player pMinecraft->m_pendingLocalConnections[index]->getConnection()->getSocket()->setPlayer(g_NetworkManager.GetLocalPlayerByUserIndex(index)); } + else if ( pMinecraft->m_connectionFailed[index] && (pMinecraft->m_connectionFailedReason[index] == DisconnectPacket::eDisconnect_ConnectionCreationFailed) ) + { + pMinecraft->removeLocalPlayerIdx(index); +#ifdef _XBOX_ONE + ProfileManager.RemoveGamepadFromGame(index); +#endif + } } } } @@ -1572,7 +1660,7 @@ void CGameNetworkManager::GameInviteReceived( int userIndex, const INVITE_INFO * // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive if the npAvailability isn't SCE_OK UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPadNotSignedInLive, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPadNotSignedInLive); } else if (ProfileManager.isSignedInPSN(iPadNotSignedInLive)) { @@ -1581,57 +1669,36 @@ void CGameNetworkManager::GameInviteReceived( int userIndex, const INVITE_INFO * UINT uiIDA[1]; uiIDA[0] = IDS_OK; - ui.RequestMessageBox( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPadNotSignedInLive, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPadNotSignedInLive); } else { // Not signed in to PSN UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPadNotSignedInLive, &CGameNetworkManager::MustSignInReturned_1, (void *)pInviteInfo, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPadNotSignedInLive, &CGameNetworkManager::MustSignInReturned_1, (void *)pInviteInfo); } return; } - // 4J-JEV: Check that all players are authorised for PsPlus, present upsell to players that aren't and try again. - for (unsigned int index = 0; index < XUSER_MAX_COUNT; index++) + // if this is the trial game, we'll check and send the user to unlock the game later, in HandleInviteWhenInMenus + if(ProfileManager.IsFullVersion()) { - if ( ProfileManager.IsSignedIn(index) - && !ProfileManager.HasPlayStationPlus(userIndex) ) + // 4J-JEV: Check that all players are authorised for PsPlus, present upsell to players that aren't and try again. + for (unsigned int index = 0; index < XUSER_MAX_COUNT; index++) { - m_pInviteInfo = (INVITE_INFO *) pInviteInfo; - m_iPlayerInvited = userIndex; + if ( ProfileManager.IsSignedIn(index) + && !ProfileManager.HasPlayStationPlus(userIndex) ) + { + m_pInviteInfo = (INVITE_INFO *) pInviteInfo; + m_iPlayerInvited = userIndex; - m_pUpsell = new PsPlusUpsellWrapper(index); - m_pUpsell->displayUpsell(); + m_pUpsell = new PsPlusUpsellWrapper(index); + m_pUpsell->displayUpsell(); - return; - } - } -#endif - -#ifdef __PSVITA__ - // Need to check we're signed in to PSN - bool isSignedInLive = ProfileManager.IsSignedInLive(ProfileManager.GetPrimaryPad()); - if (!isSignedInLive) - { - // Determine why they're not "signed in live" - // MGH - we need to add a new message at some point for connecting when already signed in -// if (ProfileManager.IsSignedInPSN(ProfileManager.GetPrimaryPad())) -// { -// // Signed in to PSN but not connected (no internet access) -// UINT uiIDA[1]; -// uiIDA[0] = IDS_OK; -// ui.RequestMessageBox( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, ProfileManager.GetPrimaryPad(), NULL, NULL, app.GetStringTable()); -// } -// else - { - // Not signed in to PSN - UINT uiIDA[1]; - uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), &CGameNetworkManager::MustSignInReturned_1, (void *)pInviteInfo, app.GetStringTable(), NULL, 0, false); + return; + } } - return; } #endif @@ -1675,17 +1742,22 @@ void CGameNetworkManager::GameInviteReceived( int userIndex, const INVITE_INFO * uiIDA[0]=IDS_CONFIRM_OK; // 4J-PB - it's possible there is no primary pad here, when accepting an invite from the dashboard - ui.RequestMessageBox( IDS_CONNECTION_FAILED, IDS_CONNECTION_FAILED_NO_SD_SPLITSCREEN, uiIDA,1,XUSER_INDEX_ANY,NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_CONNECTION_FAILED, IDS_CONNECTION_FAILED_NO_SD_SPLITSCREEN, uiIDA,1,XUSER_INDEX_ANY); } else #endif if( noUGC ) { +#ifdef __PSVITA__ + // showing the system message for chat restriction here instead now, to fix FQA bug report + ProfileManager.DisplaySystemMessage( SCE_MSG_DIALOG_SYSMSG_TYPE_TRC_PSN_CHAT_RESTRICTION, ProfileManager.GetPrimaryPad() ); +#else int messageText = IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_SINGLE_LOCAL; if(joiningUsers > 1) messageText = IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_ALL_LOCAL; ui.RequestUGCMessageBox(IDS_CONNECTION_FAILED, messageText, XUSER_INDEX_ANY); +#endif } #if defined(__PS3__) || defined __PSVITA__ else if(bContentRestricted) @@ -1703,7 +1775,7 @@ void CGameNetworkManager::GameInviteReceived( int userIndex, const INVITE_INFO * // 4J-PB - it's possible there is no primary pad here, when accepting an invite from the dashboard //StorageManager.RequestMessageBox( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); - ui.RequestMessageBox( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT, uiIDA,1,XUSER_INDEX_ANY,NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT, uiIDA,1,XUSER_INDEX_ANY); } else { @@ -1717,10 +1789,11 @@ void CGameNetworkManager::GameInviteReceived( int userIndex, const INVITE_INFO * #endif if( !g_NetworkManager.IsInSession() ) { -#ifndef __PS3__ - HandleInviteWhenInMenus(userIndex, pInviteInfo); -#else +#if defined (__PS3__) || defined (__PSVITA__) // PS3 is more complicated here - we need to make sure that the player is online. If they are then we can do the same as the xbox, if not we need to try and get them online and then, if they do sign in, go down the same path + + // Determine why they're not "signed in live" + // MGH - On Vita we need to add a new message at some point for connecting when already signed in if(ProfileManager.IsSignedInLive(ProfileManager.GetPrimaryPad())) { HandleInviteWhenInMenus(userIndex, pInviteInfo); @@ -1730,8 +1803,12 @@ void CGameNetworkManager::GameInviteReceived( int userIndex, const INVITE_INFO * UINT uiIDA[2]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CGameNetworkManager::MustSignInReturned_1,(void *)pInviteInfo, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&CGameNetworkManager::MustSignInReturned_1,(void *)pInviteInfo); } + + +#else + HandleInviteWhenInMenus(userIndex, pInviteInfo); #endif } else @@ -1777,7 +1854,9 @@ void CGameNetworkManager::HandleInviteWhenInMenus( int userIndex, const INVITE_I } else { +#ifndef _XBOX_ONE ProfileManager.SetPrimaryPad(userIndex); +#endif // 4J Stu - If we accept an invite from the main menu before going to play game we need to load the DLC // These checks are done within the StartInstallDLCProcess - (!app.DLCInstallProcessCompleted() && !app.DLCInstallPending()) app.StartInstallDLCProcess(dwUserIndex); @@ -1787,7 +1866,11 @@ void CGameNetworkManager::HandleInviteWhenInMenus( int userIndex, const INVITE_I // The locked profile should not be changed if we are in menus as the main player might sign out in the sign-in ui //ProfileManager.SetLockedProfile(-1); +#ifdef _XBOX_ONE + if((!app.IsLocalMultiplayerAvailable())&&InputManager.IsPadLocked(userIndex)) +#else if(!app.IsLocalMultiplayerAvailable()) +#endif { bool noPrivileges=!ProfileManager.AllowedToPlayMultiplayer(userIndex); @@ -1795,7 +1878,7 @@ void CGameNetworkManager::HandleInviteWhenInMenus( int userIndex, const INVITE_I { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad()); } else { diff --git a/Minecraft.Client/Common/Network/GameNetworkManager.h b/Minecraft.Client/Common/Network/GameNetworkManager.h index 1bb532da..01db2724 100644 --- a/Minecraft.Client/Common/Network/GameNetworkManager.h +++ b/Minecraft.Client/Common/Network/GameNetworkManager.h @@ -22,6 +22,7 @@ using namespace std; class ClientConnection; class Minecraft; +const int NON_QNET_SENDDATA_ACK_REQUIRED = 1; // This class implements the game-side interface to the networking system. As such, it is platform independent and may contain bits of game-side code where appropriate. // It shouldn't ever reference any platform specifics of the network implementation (eg QNET), rather it should interface with an implementation of PlatformNetworkManager to diff --git a/Minecraft.Client/Common/Network/NetworkPlayerInterface.h b/Minecraft.Client/Common/Network/NetworkPlayerInterface.h index 501b08ff..d26252da 100644 --- a/Minecraft.Client/Common/Network/NetworkPlayerInterface.h +++ b/Minecraft.Client/Common/Network/NetworkPlayerInterface.h @@ -9,8 +9,9 @@ class INetworkPlayer public: virtual ~INetworkPlayer() {} virtual unsigned char GetSmallId() = 0; - virtual void SendData(INetworkPlayer *player, const void *pvData, int dataSize, bool lowPriority) = 0; + virtual void SendData(INetworkPlayer *player, const void *pvData, int dataSize, bool lowPriority, bool ack) = 0; virtual bool IsSameSystem(INetworkPlayer *player) = 0; + virtual int GetOutstandingAckCount() = 0; virtual int GetSendQueueSizeBytes( INetworkPlayer *player, bool lowPriority ) = 0; virtual int GetSendQueueSizeMessages( INetworkPlayer *player, bool lowPriority ) = 0; virtual int GetCurrentRtt() = 0; @@ -28,4 +29,6 @@ public: virtual const wchar_t *GetOnlineName() = 0; virtual wstring GetDisplayName() = 0; virtual PlayerUID GetUID() = 0; + virtual void SentChunkPacket() = 0; + virtual int GetTimeSinceLastChunkPacket_ms() = 0; }; diff --git a/Minecraft.Client/Common/Network/Sony/NetworkPlayerSony.cpp b/Minecraft.Client/Common/Network/Sony/NetworkPlayerSony.cpp index 9c750e95..a7a4628b 100644 --- a/Minecraft.Client/Common/Network/Sony/NetworkPlayerSony.cpp +++ b/Minecraft.Client/Common/Network/Sony/NetworkPlayerSony.cpp @@ -5,6 +5,7 @@ NetworkPlayerSony::NetworkPlayerSony(SQRNetworkPlayer *qnetPlayer) { m_sqrPlayer = qnetPlayer; m_pSocket = NULL; + m_lastChunkPacketTime = 0; } unsigned char NetworkPlayerSony::GetSmallId() @@ -12,10 +13,10 @@ unsigned char NetworkPlayerSony::GetSmallId() return m_sqrPlayer->GetSmallId(); } -void NetworkPlayerSony::SendData(INetworkPlayer *player, const void *pvData, int dataSize, bool lowPriority) +void NetworkPlayerSony::SendData(INetworkPlayer *player, const void *pvData, int dataSize, bool lowPriority, bool ack) { // TODO - handle priority - m_sqrPlayer->SendData( ((NetworkPlayerSony *)player)->m_sqrPlayer, pvData, dataSize ); + m_sqrPlayer->SendData( ((NetworkPlayerSony *)player)->m_sqrPlayer, pvData, dataSize, ack ); } bool NetworkPlayerSony::IsSameSystem(INetworkPlayer *player) @@ -23,14 +24,19 @@ bool NetworkPlayerSony::IsSameSystem(INetworkPlayer *player) return m_sqrPlayer->IsSameSystem(((NetworkPlayerSony *)player)->m_sqrPlayer); } +int NetworkPlayerSony::GetOutstandingAckCount() +{ + return m_sqrPlayer->GetOutstandingAckCount(); +} + int NetworkPlayerSony::GetSendQueueSizeBytes( INetworkPlayer *player, bool lowPriority ) { - return 0; // TODO + return m_sqrPlayer->GetSendQueueSizeBytes(); } int NetworkPlayerSony::GetSendQueueSizeMessages( INetworkPlayer *player, bool lowPriority ) { - return 0; // TODO + return m_sqrPlayer->GetSendQueueSizeMessages(); } int NetworkPlayerSony::GetCurrentRtt() @@ -112,3 +118,20 @@ void NetworkPlayerSony::SetUID(PlayerUID UID) { m_sqrPlayer->SetUID(UID); } + +void NetworkPlayerSony::SentChunkPacket() +{ + m_lastChunkPacketTime = System::currentTimeMillis(); +} + +int NetworkPlayerSony::GetTimeSinceLastChunkPacket_ms() +{ + // If we haven't ever sent a packet, return maximum + if( m_lastChunkPacketTime == 0 ) + { + return INT_MAX; + } + + __int64 currentTime = System::currentTimeMillis(); + return (int)( currentTime - m_lastChunkPacketTime ); +} diff --git a/Minecraft.Client/Common/Network/Sony/NetworkPlayerSony.h b/Minecraft.Client/Common/Network/Sony/NetworkPlayerSony.h index 5c8605fb..f3415a41 100644 --- a/Minecraft.Client/Common/Network/Sony/NetworkPlayerSony.h +++ b/Minecraft.Client/Common/Network/Sony/NetworkPlayerSony.h @@ -11,8 +11,9 @@ public: // Common player interface NetworkPlayerSony(SQRNetworkPlayer *sqrPlayer); virtual unsigned char GetSmallId(); - virtual void SendData(INetworkPlayer *player, const void *pvData, int dataSize, bool lowPriority); + virtual void SendData(INetworkPlayer *player, const void *pvData, int dataSize, bool lowPriority, bool ack); virtual bool IsSameSystem(INetworkPlayer *player); + virtual int GetOutstandingAckCount(); virtual int GetSendQueueSizeBytes( INetworkPlayer *player, bool lowPriority ); virtual int GetSendQueueSizeMessages( INetworkPlayer *player, bool lowPriority ); virtual int GetCurrentRtt(); @@ -33,7 +34,10 @@ public: void SetUID(PlayerUID UID); + virtual void SentChunkPacket(); + virtual int GetTimeSinceLastChunkPacket_ms(); private: SQRNetworkPlayer *m_sqrPlayer; Socket *m_pSocket; + __int64 m_lastChunkPacketTime; }; diff --git a/Minecraft.Client/Common/Network/Sony/PlatformNetworkManagerSony.cpp b/Minecraft.Client/Common/Network/Sony/PlatformNetworkManagerSony.cpp index 009993cb..67fd058c 100644 --- a/Minecraft.Client/Common/Network/Sony/PlatformNetworkManagerSony.cpp +++ b/Minecraft.Client/Common/Network/Sony/PlatformNetworkManagerSony.cpp @@ -54,10 +54,8 @@ void CPlatformNetworkManagerSony::HandleStateChange(SQRNetworkManager::eSQRNetwo else if( newState == SQRNetworkManager::SNM_STATE_JOINING ) { // 4J Stu - We may be accepting an invite from the DLC menu, so hide the icon -#ifdef __ORBIS__ - sceNpCommerceHidePsStoreIcon(); -#elif defined __PSVITA__ - sceNpCommerce2HidePsStoreIcon(); +#if defined __ORBIS__ || defined __PSVITA__ + app.GetCommerce()->HidePsStoreIcon(); #endif m_bLeavingGame = false; m_bLeaveGameOnTick = false; @@ -459,16 +457,16 @@ int CPlatformNetworkManagerSony::CorrectErrorIDS(int IDS) // Determine if we'd prefer to present errors as a signing out issue, rather than a network issue, based on whether we have a network connection at all or not bool preferSignoutError = false; int state; -#ifdef __PS3__ + +#if defined __PSVITA__ // MGH - to fix devtrack #6258 + if(!ProfileManager.IsSignedInPSN(ProfileManager.GetPrimaryPad())) + preferSignoutError = true; +#elif defined __ORBIS__ + if(!ProfileManager.isSignedInPSN(ProfileManager.GetPrimaryPad())) + preferSignoutError = true; +#elif defined __PS3__ int ret = cellNetCtlGetState( &state ); int IPObtainedState = CELL_NET_CTL_STATE_IPObtained; -#elif defined __ORBIS__ - int ret = sceNetCtlGetState( &state ); - int IPObtainedState = SCE_NET_CTL_STATE_IPOBTAINED; -#elif defined __PSVITA__ - int ret = sceNetCtlInetGetState( &state ); - int IPObtainedState = SCE_NET_CTL_STATE_IPOBTAINED; -#endif if( ret == 0 ) { if( state == IPObtainedState ) @@ -476,6 +474,7 @@ int CPlatformNetworkManagerSony::CorrectErrorIDS(int IDS) preferSignoutError = true; } } +#endif #ifdef __PSVITA__ // If we're in ad-hoc mode this problem definitely wasn't PSN related @@ -1446,7 +1445,8 @@ void CPlatformNetworkManagerSony::startAdhocMatching( ) bool CPlatformNetworkManagerSony::checkValidInviteData(const INVITE_INFO* pInviteInfo) { - if(((SQRNetworkManager_Vita*)m_pSQRNet_Vita)->GetHostUID() == pInviteInfo->hostPlayerUID) + SQRNetworkManager_Vita* pSQR = (SQRNetworkManager_Vita*)m_pSQRNet_Vita; + if(pSQR->IsOnlineGame() && !pSQR->IsHost()&& (pSQR->GetHostUID() == pInviteInfo->hostPlayerUID)) { // we're trying to join a game we're already in, so we just ignore this return false; diff --git a/Minecraft.Client/Common/Network/Sony/SQRNetworkManager.cpp b/Minecraft.Client/Common/Network/Sony/SQRNetworkManager.cpp index 20f2641c..f23a0a63 100644 --- a/Minecraft.Client/Common/Network/Sony/SQRNetworkManager.cpp +++ b/Minecraft.Client/Common/Network/Sony/SQRNetworkManager.cpp @@ -8,3 +8,76 @@ void SQRNetworkManager::SafeToRespondToGameBootInvite() { s_safeToRespondToGameBootInvite = true; } + +int SQRNetworkManager::GetSendQueueSizeBytes() +{ + int queueSize = 0; + int playerCount = GetPlayerCount(); + for(int i = 0; i < playerCount; ++i) + { + SQRNetworkPlayer *player = GetPlayerByIndex( i ); + if( player != NULL ) + { + queueSize += player->GetTotalSendQueueBytes(); + } + } + return queueSize; +} + +int SQRNetworkManager::GetSendQueueSizeMessages() +{ + int queueSize = 0; + int playerCount = GetPlayerCount(); + for(int i = 0; i < playerCount; ++i) + { + SQRNetworkPlayer *player = GetPlayerByIndex( i ); + if( player != NULL ) + { + queueSize += player->GetTotalSendQueueMessages(); + } + } + return queueSize; +} + +int SQRNetworkManager::GetOutstandingAckCount(SQRNetworkPlayer *pSQRPlayer) +{ + int ackCount = 0; + int playerCount = GetPlayerCount(); + for(int i = 0; i < playerCount; ++i) + { + SQRNetworkPlayer *pSQRPlayer2 = GetPlayerByIndex( i ); + if( pSQRPlayer2 ) + { + if( ( pSQRPlayer == pSQRPlayer2 ) || (pSQRPlayer->IsSameSystem(pSQRPlayer2) ) ) + { + ackCount += pSQRPlayer2->m_acksOutstanding; + } + } + } + return ackCount; +} + +void SQRNetworkManager::RequestWriteAck(int smallId) +{ + EnterCriticalSection(&m_csAckQueue); + m_queuedAckRequests.push(smallId); + LeaveCriticalSection(&m_csAckQueue); +} + +void SQRNetworkManager::TickWriteAcks() +{ + EnterCriticalSection(&m_csAckQueue); + while(m_queuedAckRequests.size() > 0) + { + int smallId = m_queuedAckRequests.front(); + m_queuedAckRequests.pop(); + SQRNetworkPlayer *player = GetPlayerBySmallId(smallId); + if( player ) + { + LeaveCriticalSection(&m_csAckQueue); + player->WriteAck(); + EnterCriticalSection(&m_csAckQueue); + } + } + LeaveCriticalSection(&m_csAckQueue); +} \ No newline at end of file diff --git a/Minecraft.Client/Common/Network/Sony/SQRNetworkManager.h b/Minecraft.Client/Common/Network/Sony/SQRNetworkManager.h index c93368d8..e3f15aca 100644 --- a/Minecraft.Client/Common/Network/Sony/SQRNetworkManager.h +++ b/Minecraft.Client/Common/Network/Sony/SQRNetworkManager.h @@ -11,6 +11,9 @@ #include #include +#if defined __PSVITA__ +#include "..\..\Minecraft.Client\PSVita\4JLibs\inc\4J_Profile.h" +#endif class SQRNetworkPlayer; class ISQRNetworkManagerListener; @@ -30,7 +33,9 @@ public: protected: friend class SQRNetworkPlayer; friend class SonyVoiceChat; - +#ifdef __PSVITA__ + friend class HelloSyncInfo; +#endif static const int MAX_FRIENDS = 100; #ifdef __PS3__ @@ -231,6 +236,8 @@ protected: std::queue m_stateChangeQueue; CRITICAL_SECTION m_csStateChangeQueue; CRITICAL_SECTION m_csMatching; + CRITICAL_SECTION m_csAckQueue; + std::queue m_queuedAckRequests; typedef enum { @@ -295,6 +302,13 @@ public: static void SafeToRespondToGameBootInvite(); + int GetOutstandingAckCount(SQRNetworkPlayer *pSonyPlayer); + int GetSendQueueSizeBytes(); + int GetSendQueueSizeMessages(); + void RequestWriteAck(int smallId); + void TickWriteAcks(); + + }; diff --git a/Minecraft.Client/Common/Network/Sony/SQRNetworkPlayer.cpp b/Minecraft.Client/Common/Network/Sony/SQRNetworkPlayer.cpp index e244b34c..a040b28b 100644 --- a/Minecraft.Client/Common/Network/Sony/SQRNetworkPlayer.cpp +++ b/Minecraft.Client/Common/Network/Sony/SQRNetworkPlayer.cpp @@ -16,6 +16,15 @@ #endif +//#define PRINT_ACK_STATS + +#ifdef __PS3__ +static const int sc_wouldBlockFlag = CELL_RUDP_ERROR_WOULDBLOCK; +#else // __ORBIS__ +static const int sc_wouldBlockFlag = SCE_RUDP_ERROR_WOULDBLOCK; +#endif + + static const bool sc_verbose = false; @@ -84,6 +93,8 @@ SQRNetworkPlayer::SQRNetworkPlayer(SQRNetworkManager *manager, eSQRNetworkPlayer m_host = onHost; m_manager = manager; m_customData = 0; + m_acksOutstanding = 0; + m_totalBytesInSendQueue = 0; if( pUID ) { memcpy(&m_ISD.m_UID,pUID,sizeof(PlayerUID)); @@ -102,6 +113,7 @@ SQRNetworkPlayer::SQRNetworkPlayer(SQRNetworkManager *manager, eSQRNetworkPlayer } SetNameFromUID(); InitializeCriticalSection(&m_csQueue); + InitializeCriticalSection(&m_csAcks); #ifdef __ORBIS__ if(IsLocal()) { @@ -109,6 +121,14 @@ SQRNetworkPlayer::SQRNetworkPlayer(SQRNetworkManager *manager, eSQRNetworkPlayer } #endif +#ifndef _CONTENT_PACKAGE + m_minAckTime = INT_MAX; + m_maxAckTime = 0; + m_totalAcks = 0; + m_totalAckTime = 0; + m_averageAckTime = 0; +#endif + } SQRNetworkPlayer::~SQRNetworkPlayer() @@ -190,13 +210,8 @@ bool SQRNetworkPlayer::HasSmallIdConfirmed() // To confirm to the host that we are ready, send a single byte with our small id. void SQRNetworkPlayer::ConfirmReady() { -#ifdef __PS3__ - int ret = cellRudpWrite( m_rudpCtx, &m_ISD, sizeof(InitSendData), CELL_RUDP_MSG_LATENCY_CRITICAL ); -#else //__ORBIS__ - int ret = sceRudpWrite( m_rudpCtx, &m_ISD, sizeof(InitSendData), SCE_RUDP_MSG_LATENCY_CRITICAL ); -#endif - // TODO - error handling here? - assert ( ret == sizeof(InitSendData) ); + SendInternal(&m_ISD, sizeof(InitSendData), e_flag_AckNotRequested); + // Final flag for a local player on the client, as we are now safe to send data on to the host m_host ? app.DebugPrintf(sc_verbose, "host : ") : app.DebugPrintf(sc_verbose, "client:"); app.DebugPrintf(sc_verbose, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Small ID confirmed\n"); @@ -205,8 +220,9 @@ void SQRNetworkPlayer::ConfirmReady() // Attempt to send data, of any size, from this player to that specified by pPlayerTarget. This may not be possible depending on the two players, due to // our star shaped network connectivity. Data may be any size, and is copied so on returning from this method it does not need to be preserved. -void SQRNetworkPlayer::SendData( SQRNetworkPlayer *pPlayerTarget, const void *data, unsigned int dataSize ) +void SQRNetworkPlayer::SendData( SQRNetworkPlayer *pPlayerTarget, const void *data, unsigned int dataSize, bool ack ) { + AckFlags ackFlags = ack ? e_flag_AckRequested : e_flag_AckNotRequested; // Our network is connected as a star. If we are the host, then we can send to any remote player. If we're a client, we can send only to the host. // The host can also send to other local players, but this doesn't need to go through Rudp. if( m_host ) @@ -224,7 +240,7 @@ void SQRNetworkPlayer::SendData( SQRNetworkPlayer *pPlayerTarget, const void *da else if( ( m_type == SNP_TYPE_HOST ) && ( pPlayerTarget->m_type == SNP_TYPE_REMOTE ) ) { // Rudp communication from host to remote player - handled by remote player instance - pPlayerTarget->SendInternal(data,dataSize); + pPlayerTarget->SendInternal(data,dataSize, ackFlags); } else { @@ -237,7 +253,7 @@ void SQRNetworkPlayer::SendData( SQRNetworkPlayer *pPlayerTarget, const void *da if( ( m_type == SNP_TYPE_LOCAL ) && ( pPlayerTarget->m_type == SNP_TYPE_HOST ) ) { // Rudp communication from client to host - handled by this player instace - SendInternal(data, dataSize); + SendInternal(data, dataSize, ackFlags); } else { @@ -250,15 +266,30 @@ void SQRNetworkPlayer::SendData( SQRNetworkPlayer *pPlayerTarget, const void *da // Internal send function - to simplify the number of mechanisms we have for sending data, this method just adds the data to be send to the player's internal queue, // and then calls SendMoreInternal. This method can take any size of data, which it will split up into payload size chunks before sending. All input data is copied // into internal buffers. -void SQRNetworkPlayer::SendInternal(const void *data, unsigned int dataSize) +void SQRNetworkPlayer::SendInternal(const void *data, unsigned int dataSize, AckFlags ackFlags) { EnterCriticalSection(&m_csQueue); - + bool bOutstandingPackets = (m_sendQueue.size() > 0); // check if there are still packets in the queue, we won't be calling SendMoreInternal here if there are QueuedSendBlock sendBlock; unsigned char *dataCurrent = (unsigned char *)data; unsigned int dataRemaining = dataSize; + if(ackFlags == e_flag_AckReturning) + { + // no data, just the flag + assert(dataSize == 0); + assert(data == NULL); + int dataSize = dataRemaining; + if( dataSize > SNP_MAX_PAYLOAD ) dataSize = SNP_MAX_PAYLOAD; + sendBlock.start = NULL; + sendBlock.end = NULL; + sendBlock.current = NULL; + sendBlock.ack = ackFlags; + m_sendQueue.push(sendBlock); + } + else + { while( dataRemaining ) { int dataSize = dataRemaining; @@ -266,19 +297,203 @@ void SQRNetworkPlayer::SendInternal(const void *data, unsigned int dataSize) sendBlock.start = new unsigned char [dataSize]; sendBlock.end = sendBlock.start + dataSize; sendBlock.current = sendBlock.start; + sendBlock.ack = ackFlags; memcpy( sendBlock.start, dataCurrent, dataSize); m_sendQueue.push(sendBlock); dataRemaining -= dataSize; dataCurrent += dataSize; } - // Now try and send as much as we can - SendMoreInternal(); + } + m_totalBytesInSendQueue += dataSize; + + // if the queue had something in it already, then the UDP callback will fire and call SendMoreInternal + // so we don't call it here, to avoid a deadlock + if(!bOutstandingPackets) + { + // Now try and send as much as we can + SendMoreInternal(); + } LeaveCriticalSection(&m_csQueue); } +int SQRNetworkPlayer::WriteDataPacket(const void* data, int dataSize, AckFlags ackFlags) + { + DataPacketHeader header(dataSize, ackFlags); + int headerSize = sizeof(header); + int packetSize = dataSize+headerSize; + unsigned char* packetData = new unsigned char[packetSize]; + *((DataPacketHeader*)packetData) = header; + memcpy(&packetData[headerSize], data, dataSize); + +#ifndef _CONTENT_PACKAGE + if(ackFlags == e_flag_AckRequested) + m_ackStats.push_back(System::currentTimeMillis()); +#endif + +#ifdef __PS3__ + int ret = cellRudpWrite( m_rudpCtx, packetData, packetSize, 0);//CELL_RUDP_MSG_LATENCY_CRITICAL ); +#else // __ORBIS__ && __PSVITA__ + int ret = sceRudpWrite( m_rudpCtx, packetData, packetSize, 0);//SCE_RUDP_MSG_LATENCY_CRITICAL ); +#endif + if(ret == sc_wouldBlockFlag) + { + // nothing was sent! + } + else + { + assert(ret==packetSize || ret > headerSize); // we must make sure we've sent the entire packet or the header and some data at least + ret -= headerSize; + if(ackFlags == e_flag_AckRequested) + { + EnterCriticalSection(&m_csAcks); + m_acksOutstanding++; + LeaveCriticalSection(&m_csAcks); + } + } + delete packetData; + + return ret; +} + +int SQRNetworkPlayer::GetPacketDataSize() +{ + unsigned int ackFlag; + int headerSize = sizeof(ackFlag); +#ifdef __PS3__ + unsigned int packetSize = cellRudpGetSizeReadable(m_rudpCtx); +#else + unsigned int packetSize = sceRudpGetSizeReadable(m_rudpCtx); +#endif + if(packetSize == 0) + return 0; + + unsigned int dataSize = packetSize - headerSize; + assert(dataSize >= 0); + if(dataSize == 0) + { + // header only, must just be an ack returning + ReadAck(); + } + return dataSize; +} + +int SQRNetworkPlayer::ReadDataPacket(void* data, int dataSize) +{ + int headerSize = sizeof(DataPacketHeader); + int packetSize = dataSize+headerSize; + + unsigned char* packetData = new unsigned char[packetSize]; +#ifdef __PS3__ + int bytesRead = cellRudpRead( m_rudpCtx, packetData, packetSize, 0, NULL ); +#else // __ORBIS__ && __PSVITA__ + int bytesRead = sceRudpRead( m_rudpCtx, packetData, packetSize, 0, NULL ); +#endif + if(bytesRead == sc_wouldBlockFlag) + { + delete packetData; + return 0; + } + // check the header, and see if we need to send back an ack + DataPacketHeader header = *((DataPacketHeader*)packetData); + if(header.GetAckFlags() == e_flag_AckRequested) + { + // Don't send the ack back directly from here, as this is called from a rudp event callback, and we end up in a thread lock situation between the lock librudp uses + // internally (which is locked already here since we are being called in the event handler), and our own lock that we do for processing our write queue + m_manager->RequestWriteAck(GetSmallId()); + } + else + { + assert(header.GetAckFlags() == e_flag_AckNotRequested); + } + if(bytesRead > 0) + { + bytesRead -= headerSize; + memcpy(data, &packetData[headerSize], bytesRead); + } + assert(header.GetDataSize() == bytesRead); + + delete packetData; + + return bytesRead; +} + + + +void SQRNetworkPlayer::ReadAck() +{ + DataPacketHeader header; +#ifdef __PS3__ + int bytesRead = cellRudpRead( m_rudpCtx, &header, sizeof(header), 0, NULL ); +#else // __ORBIS__ && __PSVITA__ + int bytesRead = sceRudpRead( m_rudpCtx, &header, sizeof(header), 0, NULL ); +#endif + if(bytesRead == sc_wouldBlockFlag) + { + return; + } + + assert(header.GetAckFlags() == e_flag_AckReturning); + EnterCriticalSection(&m_csAcks); + m_acksOutstanding--; + assert(m_acksOutstanding >=0); + LeaveCriticalSection(&m_csAcks); + +#ifndef _CONTENT_PACKAGE +#ifdef PRINT_ACK_STATS + __int64 timeTaken = System::currentTimeMillis() - m_ackStats[0]; + if(timeTaken < m_minAckTime) + m_minAckTime = timeTaken; + if(timeTaken > m_maxAckTime) + m_maxAckTime = timeTaken; + m_totalAcks++; + m_totalAckTime += timeTaken; + m_averageAckTime = m_totalAckTime / m_totalAcks; + app.DebugPrintf("RUDP ctx : %d : Time taken for ack - %4d ms : min - %4d : max %4d : avg %4d\n", m_rudpCtx, timeTaken, m_minAckTime, m_maxAckTime, m_averageAckTime); + m_ackStats.erase(m_ackStats.begin()); +#endif +#endif +} + +void SQRNetworkPlayer::WriteAck() +{ + SendInternal(NULL, 0, e_flag_AckReturning); +} + +int SQRNetworkPlayer::GetOutstandingAckCount() +{ + return m_manager->GetOutstandingAckCount(this); +} + +int SQRNetworkPlayer::GetTotalOutstandingAckCount() +{ + return m_acksOutstanding; +} + +int SQRNetworkPlayer::GetTotalSendQueueBytes() +{ + return m_totalBytesInSendQueue; +} + +int SQRNetworkPlayer::GetTotalSendQueueMessages() +{ + CriticalSectionScopeLock lock(&m_csQueue); + return m_sendQueue.size(); + +} + +int SQRNetworkPlayer::GetSendQueueSizeBytes() +{ + return m_manager->GetSendQueueSizeBytes(); +} + +int SQRNetworkPlayer::GetSendQueueSizeMessages() +{ + return m_manager->GetSendQueueSizeMessages(); +} + // Internal send function. This attempts to send as many elements in the queue as possible until the write function tells us that we can't send any more. This way, @@ -287,6 +502,8 @@ void SQRNetworkPlayer::SendInternal(const void *data, unsigned int dataSize) void SQRNetworkPlayer::SendMoreInternal() { EnterCriticalSection(&m_csQueue); + assert(m_sendQueue.size() > 0); // this should never be called with an empty queue. + bool keepSending; do { @@ -296,17 +513,12 @@ void SQRNetworkPlayer::SendMoreInternal() // Attempt to send the full data in the first element in our queue unsigned char *data= m_sendQueue.front().current; int dataSize = m_sendQueue.front().end - m_sendQueue.front().current; -#ifdef __PS3__ - int ret = cellRudpWrite( m_rudpCtx, data, dataSize, 0);//CELL_RUDP_MSG_LATENCY_CRITICAL ); - int wouldBlockFlag = CELL_RUDP_ERROR_WOULDBLOCK; + int ret = WriteDataPacket(data, dataSize, m_sendQueue.front().ack); -#else // __ORBIS__ - int ret = sceRudpWrite( m_rudpCtx, data, dataSize, 0);//CELL_RUDP_MSG_LATENCY_CRITICAL ); - int wouldBlockFlag = SCE_RUDP_ERROR_WOULDBLOCK; -#endif if( ret == dataSize ) { // Fully sent, remove from queue - will loop in the while loop to see if there's anything else in the queue we could send + m_totalBytesInSendQueue -= ret; delete [] m_sendQueue.front().start; m_sendQueue.pop(); if( m_sendQueue.size() ) @@ -314,15 +526,15 @@ void SQRNetworkPlayer::SendMoreInternal() keepSending = true; } } - else if( ( ret >= 0 ) || ( ret == wouldBlockFlag ) ) + else if( ( ret >= 0 ) || ( ret == sc_wouldBlockFlag ) ) { - // Things left to send - adjust this element in the queue int remainingBytes; if( ret >= 0 ) { // Only ret bytes sent so far + m_totalBytesInSendQueue -= ret; remainingBytes = dataSize - ret; assert(remainingBytes > 0 ); } diff --git a/Minecraft.Client/Common/Network/Sony/SQRNetworkPlayer.h b/Minecraft.Client/Common/Network/Sony/SQRNetworkPlayer.h index 0cd56e8d..d0efe635 100644 --- a/Minecraft.Client/Common/Network/Sony/SQRNetworkPlayer.h +++ b/Minecraft.Client/Common/Network/Sony/SQRNetworkPlayer.h @@ -48,12 +48,41 @@ class SQRNetworkPlayer SNP_TYPE_REMOTE, // On host - this player's m_rupdCtx can be used to communicate from between the host and this player. On clients - this is a remote player that cannot be communicated with } eSQRNetworkPlayerType; + enum AckFlags + { + e_flag_AckUnknown, + e_flag_AckNotRequested, + e_flag_AckRequested, + e_flag_AckReturning + }; + + class DataPacketHeader + { + unsigned short m_dataSize; + unsigned short m_ackFlags; + public: + DataPacketHeader() : m_dataSize(0), m_ackFlags(e_flag_AckUnknown) {} + DataPacketHeader(int dataSize, AckFlags ackFlags) : m_dataSize(dataSize), m_ackFlags(ackFlags) { } + AckFlags GetAckFlags() { return (AckFlags)m_ackFlags;} + int GetDataSize() { return m_dataSize; } + }; + +#ifndef _CONTENT_PACKAGE + std::vector<__int64> m_ackStats; + int m_minAckTime; + int m_maxAckTime; + int m_totalAcks; + __int64 m_totalAckTime; + int m_averageAckTime; +#endif + class QueuedSendBlock { public: unsigned char *start; unsigned char *end; unsigned char *current; + AckFlags ack; }; class InitSendData @@ -75,11 +104,26 @@ class SQRNetworkPlayer void InitialDataReceived(InitSendData *ISD); // Only for remote players as viewed from the host, this is set when the host has received confirmation that the client has received the small id for this player, ie it is now safe to send data to bool HasSmallIdConfirmed(); - void SendData( SQRNetworkPlayer *pPlayerTarget, const void *data, unsigned int dataSize ); + void SendData( SQRNetworkPlayer *pPlayerTarget, const void *data, unsigned int dataSize, bool ack ); void ConfirmReady(); - void SendInternal(const void *data, unsigned int dataSize); + void SendInternal(const void *data, unsigned int dataSize, AckFlags ackFlags); void SendMoreInternal(); + int GetPacketDataSize(); + int ReadDataPacket(void* data, int dataSize); + int WriteDataPacket(const void* data, int dataSize, AckFlags ackFlags); + void ReadAck(); + void WriteAck(); + + int GetOutstandingAckCount(); + int GetSendQueueSizeBytes(); + int GetSendQueueSizeMessages(); + + int GetTotalOutstandingAckCount(); + int GetTotalSendQueueBytes(); + int GetTotalSendQueueMessages(); + + #ifdef __PSVITA__ void SendInternal_VitaAdhoc(const void *data, unsigned int dataSize, EAdhocDataTag tag = e_dataTag_Normal); void SendMoreInternal_VitaAdhoc(); @@ -99,5 +143,9 @@ class SQRNetworkPlayer wchar_t m_name[21]; uintptr_t m_customData; CRITICAL_SECTION m_csQueue; + CRITICAL_SECTION m_csAcks; std::queue m_sendQueue; + int m_totalBytesInSendQueue; + + int m_acksOutstanding; }; diff --git a/Minecraft.Client/Common/Network/Sony/SonyCommerce.h b/Minecraft.Client/Common/Network/Sony/SonyCommerce.h index 6df04947..ff9423e8 100644 --- a/Minecraft.Client/Common/Network/Sony/SonyCommerce.h +++ b/Minecraft.Client/Common/Network/Sony/SonyCommerce.h @@ -170,4 +170,8 @@ public: virtual void CheckForTrialUpgradeKey() = 0; virtual bool LicenseChecked() = 0; +#if defined __ORBIS__ || defined __PSVITA__ + virtual void ShowPsStoreIcon() = 0; + virtual void HidePsStoreIcon() = 0; +#endif }; diff --git a/Minecraft.Client/Common/Network/Sony/SonyRemoteStorage.cpp b/Minecraft.Client/Common/Network/Sony/SonyRemoteStorage.cpp index ccb1957d..4468d163 100644 --- a/Minecraft.Client/Common/Network/Sony/SonyRemoteStorage.cpp +++ b/Minecraft.Client/Common/Network/Sony/SonyRemoteStorage.cpp @@ -36,6 +36,37 @@ static SceRemoteStorageStatus statParams; +void SonyRemoteStorage::SetRetrievedDescData() +{ + DescriptionData* pDescDataTest = (DescriptionData*)m_remoteFileInfo->fileDescription; + ESavePlatform testPlatform = (ESavePlatform)MAKE_FOURCC(pDescDataTest->m_platform[0], pDescDataTest->m_platform[1], pDescDataTest->m_platform[2], pDescDataTest->m_platform[3]); + if(testPlatform == SAVE_FILE_PLATFORM_NONE) + { + // new version of the descData + DescriptionData_V2* pDescData2 = (DescriptionData_V2*)m_remoteFileInfo->fileDescription; + m_retrievedDescData.m_descDataVersion = GetU32FromHexBytes(pDescData2->m_descDataVersion); + m_retrievedDescData.m_savePlatform = (ESavePlatform)MAKE_FOURCC(pDescData2->m_platform[0], pDescData2->m_platform[1], pDescData2->m_platform[2], pDescData2->m_platform[3]); + m_retrievedDescData.m_seed = GetU64FromHexBytes(pDescData2->m_seed); + m_retrievedDescData.m_hostOptions = GetU32FromHexBytes(pDescData2->m_hostOptions); + m_retrievedDescData.m_texturePack = GetU32FromHexBytes(pDescData2->m_texturePack); + m_retrievedDescData.m_saveVersion = GetU32FromHexBytes(pDescData2->m_saveVersion); + memcpy(m_retrievedDescData.m_saveNameUTF8, pDescData2->m_saveNameUTF8, sizeof(pDescData2->m_saveNameUTF8)); + assert(m_retrievedDescData.m_descDataVersion > 1 && m_retrievedDescData.m_descDataVersion <= sc_CurrentDescDataVersion); + } + else + { + // old version,copy the data across to the new version + DescriptionData* pDescData = (DescriptionData*)m_remoteFileInfo->fileDescription; + m_retrievedDescData.m_descDataVersion = 1; + m_retrievedDescData.m_savePlatform = (ESavePlatform)MAKE_FOURCC(pDescData->m_platform[0], pDescData->m_platform[1], pDescData->m_platform[2], pDescData->m_platform[3]); + m_retrievedDescData.m_seed = GetU64FromHexBytes(pDescData->m_seed); + m_retrievedDescData.m_hostOptions = GetU32FromHexBytes(pDescData->m_hostOptions); + m_retrievedDescData.m_texturePack = GetU32FromHexBytes(pDescData->m_texturePack); + m_retrievedDescData.m_saveVersion = SAVE_FILE_VERSION_COMPRESSED_CHUNK_STORAGE; // the last save version before we added it to this data + memcpy(m_retrievedDescData.m_saveNameUTF8, pDescData->m_saveNameUTF8, sizeof(pDescData->m_saveNameUTF8)); + } + +} @@ -51,8 +82,9 @@ void getSaveInfoReturnCallback(LPVOID lpParam, SonyRemoteStorage::Status s, int if(strcmp(statParams.data[i].fileName, sc_remoteSaveFilename) == 0) { // found the file we need in the cloud - pRemoteStorage->m_getInfoStatus = SonyRemoteStorage::e_infoFound; pRemoteStorage->m_remoteFileInfo = &statParams.data[i]; + pRemoteStorage->SetRetrievedDescData(); + pRemoteStorage->m_getInfoStatus = SonyRemoteStorage::e_infoFound; } } } @@ -104,7 +136,7 @@ void SonyRemoteStorage::getSaveInfo() bool SonyRemoteStorage::getSaveData( const char* localDirname, CallbackFunc cb, LPVOID lpParam ) { m_startTime = System::currentTimeMillis(); - m_dataProgress = 0; + m_dataProgress = -1; return getData(sc_remoteSaveFilename, localDirname, cb, lpParam); } @@ -131,7 +163,9 @@ bool SonyRemoteStorage::setSaveData(PSAVE_INFO info, CallbackFunc cb, void* lpPa m_setDataStatus = e_settingData; m_initCallbackFunc = cb; m_initCallbackParam = lpParam; - m_dataProgress = 0; + m_dataProgress = -1; + m_uploadSaveSize = 0; + m_startTime = System::currentTimeMillis(); bool bOK = init(setSaveDataInitCallback, this); if(!bOK) m_setDataStatus = e_settingDataFailed; @@ -148,16 +182,14 @@ const char* SonyRemoteStorage::getSaveNameUTF8() { if(m_getInfoStatus != e_infoFound) return NULL; - DescriptionData* pDescData = (DescriptionData*)m_remoteFileInfo->fileDescription; - return pDescData->m_saveNameUTF8; + return m_retrievedDescData.m_saveNameUTF8; } ESavePlatform SonyRemoteStorage::getSavePlatform() { if(m_getInfoStatus != e_infoFound) return SAVE_FILE_PLATFORM_NONE; - DescriptionData* pDescData = (DescriptionData*)m_remoteFileInfo->fileDescription; - return (ESavePlatform)MAKE_FOURCC(pDescData->m_platform[0], pDescData->m_platform[1], pDescData->m_platform[2], pDescData->m_platform[3]); + return m_retrievedDescData.m_savePlatform; } @@ -165,51 +197,23 @@ __int64 SonyRemoteStorage::getSaveSeed() { if(m_getInfoStatus != e_infoFound) return 0; - DescriptionData* pDescData = (DescriptionData*)m_remoteFileInfo->fileDescription; - - char seedString[17]; - ZeroMemory(seedString,17); - memcpy(seedString, pDescData->m_seed,16); - __uint64 seed = 0; - std::stringstream ss; - ss << seedString; - ss >> std::hex >> seed; - return seed; + return m_retrievedDescData.m_seed; } unsigned int SonyRemoteStorage::getSaveHostOptions() { if(m_getInfoStatus != e_infoFound) return 0; - DescriptionData* pDescData = (DescriptionData*)m_remoteFileInfo->fileDescription; - - char optionsString[9]; - ZeroMemory(optionsString,9); - memcpy(optionsString, pDescData->m_hostOptions,8); - - unsigned int uiHostOptions = 0; - std::stringstream ss; - ss << optionsString; - ss >> std::hex >> uiHostOptions; - return uiHostOptions; + return m_retrievedDescData.m_hostOptions; } unsigned int SonyRemoteStorage::getSaveTexturePack() { if(m_getInfoStatus != e_infoFound) return 0; - DescriptionData* pDescData = (DescriptionData*)m_remoteFileInfo->fileDescription; - char textureString[9]; - ZeroMemory(textureString,9); - memcpy(textureString, pDescData->m_texturePack,8); - - unsigned int uiTexturePack = 0; - std::stringstream ss; - ss << textureString; - ss >> std::hex >> uiTexturePack; - return uiTexturePack; + return m_retrievedDescData.m_texturePack; } const char* SonyRemoteStorage::getRemoteSaveFilename() @@ -292,14 +296,41 @@ bool SonyRemoteStorage::saveIsAvailable() #endif } +bool SonyRemoteStorage::saveVersionSupported() +{ + return (m_retrievedDescData.m_saveVersion <= SAVE_FILE_VERSION_NUMBER); +} + + + int SonyRemoteStorage::getDataProgress() { + if(m_dataProgress < 0) + return 0; + int chunkSize = 1024*1024; // 1mb chunks when downloading + int totalSize = getSaveFilesize(); + int transferRatePerSec = 300*1024; // a pessimistic download transfer rate + if(getStatus() == e_setDataInProgress) + { + chunkSize = 5 * 1024 * 1024; // 5mb chunks when uploading + totalSize = m_uploadSaveSize; + transferRatePerSec = 20*1024; // a pessimistic upload transfer rate + } + int sizeTransferred = (totalSize * m_dataProgress) / 100; + int nextChunk = ((sizeTransferred + chunkSize) * 100) / totalSize; + + __int64 time = System::currentTimeMillis(); int elapsedSecs = (time - m_startTime) / 1000; - int progVal = m_dataProgress + (elapsedSecs/3); - if(progVal > 95) + float estimatedTransfered = float(elapsedSecs * transferRatePerSec); + int progVal = m_dataProgress + (estimatedTransfered / float(totalSize)) * 100; + if(progVal > nextChunk) + return nextChunk; + if(progVal > 99) { - return m_dataProgress; + if(m_dataProgress > 99) + return m_dataProgress; + return 99; } return progVal; } @@ -338,3 +369,139 @@ void SonyRemoteStorage::waitForStorageManagerIdle() storageState = StorageManager.GetSaveState(); } } +void SonyRemoteStorage::GetDescriptionData(char* descData) +{ + switch(sc_CurrentDescDataVersion) + { + case 1: + { + DescriptionData descData_V1; + GetDescriptionData(descData_V1); + memcpy(descData, &descData_V1, sizeof(descData_V1)); + } + break; + case 2: + { + DescriptionData_V2 descData_V2; + GetDescriptionData(descData_V2); + memcpy(descData, &descData_V2, sizeof(descData_V2)); + } + break; + default: + assert(0); + break; + } +} + +void SonyRemoteStorage::GetDescriptionData( DescriptionData& descData) +{ + ZeroMemory(&descData, sizeof(DescriptionData)); + descData.m_platform[0] = SAVE_FILE_PLATFORM_LOCAL & 0xff; + descData.m_platform[1] = (SAVE_FILE_PLATFORM_LOCAL >> 8) & 0xff; + descData.m_platform[2] = (SAVE_FILE_PLATFORM_LOCAL >> 16) & 0xff; + descData.m_platform[3] = (SAVE_FILE_PLATFORM_LOCAL >> 24)& 0xff; + + if(m_thumbnailData) + { + unsigned int uiHostOptions; + bool bHostOptionsRead; + DWORD uiTexturePack; + char seed[22]; + app.GetImageTextData(m_thumbnailData, m_thumbnailDataSize,(unsigned char *)seed, uiHostOptions, bHostOptionsRead, uiTexturePack); + + __int64 iSeed = strtoll(seed,NULL,10); + SetU64HexBytes(descData.m_seed, iSeed); + // Save the host options that this world was last played with + SetU32HexBytes(descData.m_hostOptions, uiHostOptions); + // Save the texture pack id + SetU32HexBytes(descData.m_texturePack, uiTexturePack); + } + + memcpy(descData.m_saveNameUTF8, m_saveFileDesc, strlen(m_saveFileDesc)); + +} + +void SonyRemoteStorage::GetDescriptionData( DescriptionData_V2& descData) +{ + ZeroMemory(&descData, sizeof(DescriptionData_V2)); + descData.m_platformNone[0] = SAVE_FILE_PLATFORM_NONE & 0xff; + descData.m_platformNone[1] = (SAVE_FILE_PLATFORM_NONE >> 8) & 0xff; + descData.m_platformNone[2] = (SAVE_FILE_PLATFORM_NONE >> 16) & 0xff; + descData.m_platformNone[3] = (SAVE_FILE_PLATFORM_NONE >> 24)& 0xff; + + // Save descData version + char descDataVersion[9]; + sprintf(descDataVersion,"%08x",sc_CurrentDescDataVersion); + memcpy(descData.m_descDataVersion,descDataVersion,8); // Don't copy null + + + descData.m_platform[0] = SAVE_FILE_PLATFORM_LOCAL & 0xff; + descData.m_platform[1] = (SAVE_FILE_PLATFORM_LOCAL >> 8) & 0xff; + descData.m_platform[2] = (SAVE_FILE_PLATFORM_LOCAL >> 16) & 0xff; + descData.m_platform[3] = (SAVE_FILE_PLATFORM_LOCAL >> 24)& 0xff; + + if(m_thumbnailData) + { + unsigned int uiHostOptions; + bool bHostOptionsRead; + DWORD uiTexturePack; + char seed[22]; + app.GetImageTextData(m_thumbnailData, m_thumbnailDataSize,(unsigned char *)seed, uiHostOptions, bHostOptionsRead, uiTexturePack); + + __int64 iSeed = strtoll(seed,NULL,10); + SetU64HexBytes(descData.m_seed, iSeed); + // Save the host options that this world was last played with + SetU32HexBytes(descData.m_hostOptions, uiHostOptions); + // Save the texture pack id + SetU32HexBytes(descData.m_texturePack, uiTexturePack); + // Save the savefile version + SetU32HexBytes(descData.m_saveVersion, SAVE_FILE_VERSION_NUMBER); + // clear out the future data with underscores + memset(descData.m_futureData, '_', sizeof(descData.m_futureData)); + } + + memcpy(descData.m_saveNameUTF8, m_saveFileDesc, strlen(m_saveFileDesc)); + +} + + +uint32_t SonyRemoteStorage::GetU32FromHexBytes(char* hexBytes) +{ + char hexString[9]; + ZeroMemory(hexString,9); + memcpy(hexString, hexBytes,8); + + uint32_t u32Val = 0; + std::stringstream ss; + ss << hexString; + ss >> std::hex >> u32Val; + return u32Val; +} + +uint64_t SonyRemoteStorage::GetU64FromHexBytes(char* hexBytes) +{ + char hexString[17]; + ZeroMemory(hexString,17); + memcpy(hexString, hexBytes,16); + + uint64_t u64Val = 0; + std::stringstream ss; + ss << hexString; + ss >> std::hex >> u64Val; + return u64Val; + +} + +void SonyRemoteStorage::SetU32HexBytes(char* hexBytes, uint32_t u32) +{ + char hexString[9]; + sprintf(hexString,"%08x",u32); + memcpy(hexBytes,hexString,8); // Don't copy null +} + +void SonyRemoteStorage::SetU64HexBytes(char* hexBytes, uint64_t u64) +{ + char hexString[17]; + sprintf(hexString,"%016llx",u64); + memcpy(hexBytes,hexString,16); // Don't copy null +} diff --git a/Minecraft.Client/Common/Network/Sony/SonyRemoteStorage.h b/Minecraft.Client/Common/Network/Sony/SonyRemoteStorage.h index f435848e..d38a06e2 100644 --- a/Minecraft.Client/Common/Network/Sony/SonyRemoteStorage.h +++ b/Minecraft.Client/Common/Network/Sony/SonyRemoteStorage.h @@ -40,6 +40,7 @@ public: PSAVE_INFO m_setSaveDataInfo; SceRemoteStorageData* m_remoteFileInfo; + char m_saveFileDesc[128]; class DescriptionData { @@ -52,6 +53,47 @@ public: char m_saveNameUTF8[128]; }; + class DescriptionData_V2 + { + // this stuff is read from a JSON query, so it all has to be text based, max 256 bytes + public: + char m_platformNone[4]; // set to no platform, to indicate we're using the newer version of the data + char m_descDataVersion[8]; // 4 bytes as hex - version number will be 2 in this case + char m_platform[4]; + char m_seed[16]; // 8 bytes as hex + char m_hostOptions[8]; // 4 bytes as hex + char m_texturePack[8]; // 4 bytes as hex + char m_saveVersion[8]; // 4 bytes as hex + char m_futureData[64]; // some space for future data in case we need to expand this at all + char m_saveNameUTF8[128]; + }; + + class DescriptionDataParsed + { + public: + int m_descDataVersion; + ESavePlatform m_savePlatform; + __int64 m_seed; + uint32_t m_hostOptions; + uint32_t m_texturePack; + uint32_t m_saveVersion; + char m_saveNameUTF8[128]; + }; + + static const int sc_CurrentDescDataVersion = 2; + + void GetDescriptionData(char* descData); + void GetDescriptionData(DescriptionData& descData); + void GetDescriptionData(DescriptionData_V2& descData); + uint32_t GetU32FromHexBytes(char* hexBytes); + uint64_t GetU64FromHexBytes(char* hexBytes); + + void SetU32HexBytes(char* hexBytes, uint32_t u32); + void SetU64HexBytes(char* hexBytes, uint64_t u64); + + DescriptionDataParsed m_retrievedDescData; + void SetRetrievedDescData(); + CallbackFunc m_callbackFunc; void* m_callbackParam; @@ -62,6 +104,7 @@ public: void getSaveInfo(); bool waitingForSaveInfo() { return (m_getInfoStatus == e_gettingInfo); } bool saveIsAvailable(); + bool saveVersionSupported(); int getSaveFilesize(); bool getSaveData(const char* localDirname, CallbackFunc cb, LPVOID lpParam); @@ -115,6 +158,6 @@ protected: bool m_bAborting; bool m_bTransferStarted; - + int m_uploadSaveSize; }; diff --git a/Minecraft.Client/Common/Potion_Macros.h b/Minecraft.Client/Common/Potion_Macros.h index 29f3e03a..d458ac4b 100644 --- a/Minecraft.Client/Common/Potion_Macros.h +++ b/Minecraft.Client/Common/Potion_Macros.h @@ -35,6 +35,8 @@ #define MACRO_POTION_IS_SLOWNESS(aux) ((aux & 0x200F) == MASK_SLOWNESS) #define MACRO_POTION_IS_POISON(aux) ((aux & 0x200F) == MASK_POISON) #define MACRO_POTION_IS_INSTANTDAMAGE(aux) ((aux & 0x200F) == MASK_INSTANTDAMAGE) +#define MACRO_POTION_IS_NIGHTVISION(aux) ((aux & 0x200F) == MASK_NIGHTVISION) +#define MACRO_POTION_IS_INVISIBILITY(aux) ((aux & 0x200F) == MASK_INVISIBILITY) #define MACRO_POTION_IS_SPLASH(aux) ((aux & MASK_SPLASH) == MASK_SPLASH) #define MACRO_POTION_IS_BOTTLE(aux) ((aux & MASK_SPLASH) == 0) diff --git a/Minecraft.Client/Common/Tutorial/DiggerItemHint.cpp b/Minecraft.Client/Common/Tutorial/DiggerItemHint.cpp index 1367f411..86dbe500 100644 --- a/Minecraft.Client/Common/Tutorial/DiggerItemHint.cpp +++ b/Minecraft.Client/Common/Tutorial/DiggerItemHint.cpp @@ -62,7 +62,7 @@ int DiggerItemHint::attack(shared_ptr item, shared_ptr ent if(itemFound) { // It's also possible that we could hit TileEntities (eg falling sand) so don't want to give this hint then - if( dynamic_pointer_cast( entity ) != NULL ) + if( entity->instanceof(eTYPE_MOB) ) { return IDS_TUTORIAL_HINT_ATTACK_WITH_TOOL; } diff --git a/Minecraft.Client/Common/Tutorial/FullTutorial.cpp b/Minecraft.Client/Common/Tutorial/FullTutorial.cpp index 123ab9de..d0fda62e 100644 --- a/Minecraft.Client/Common/Tutorial/FullTutorial.cpp +++ b/Minecraft.Client/Common/Tutorial/FullTutorial.cpp @@ -140,7 +140,7 @@ FullTutorial::FullTutorial(int iPad, bool isTrial /*= false*/) int pickaxeAuxVals[] = {-1,-1,-1,-1,-1}; addTask(e_Tutorial_State_Gameplay, new CraftTask( pickaxeItems, pickaxeAuxVals, 5, 1, this, IDS_TUTORIAL_TASK_CREATE_WOODEN_PICKAXE) ); - addTask(e_Tutorial_State_Gameplay, new PickupTask( Tile::stoneBrick_Id, 8, -1, this, IDS_TUTORIAL_TASK_MINE_STONE ) ); + addTask(e_Tutorial_State_Gameplay, new PickupTask( Tile::cobblestone_Id, 8, -1, this, IDS_TUTORIAL_TASK_MINE_STONE ) ); addTask(e_Tutorial_State_Gameplay, new ProgressFlagTask( &m_progressFlags, FULL_TUTORIAL_PROGRESS_CRAFT_FURNACE, ProgressFlagTask::e_Progress_Set_Flag, this ) ); addTask(e_Tutorial_State_Gameplay, new CraftTask( Tile::furnace_Id, -1, 1, this, IDS_TUTORIAL_TASK_CREATE_FURNACE ) ); @@ -522,8 +522,8 @@ FullTutorial::FullTutorial(int iPad, bool isTrial /*= false*/) AABB *area = app.getGameRuleDefinitions()->getNamedArea(L"tradingArea"); if(area != NULL) { - eTutorial_State enchantingStates[] = {e_Tutorial_State_Gameplay}; - AddGlobalConstraint( new ChangeStateConstraint(this, e_Tutorial_State_Trading, enchantingStates, 1, area->x0,area->y0,area->z0,area->x1,area->y1,area->z1) ); + eTutorial_State tradingStates[] = {e_Tutorial_State_Gameplay}; + AddGlobalConstraint( new ChangeStateConstraint(this, e_Tutorial_State_Trading, tradingStates, 1, area->x0,area->y0,area->z0,area->x1,area->y1,area->z1) ); addTask(e_Tutorial_State_Trading, new ChoiceTask(this, IDS_TUTORIAL_TASK_TRADING_OVERVIEW, IDS_TUTORIAL_PROMPT_TRADING_OVERVIEW, true, ACTION_MENU_A, ACTION_MENU_B, e_Tutorial_Completion_Complete_State_Gameplay_Constraints, eTelemetryTutorial_Trading) ); @@ -535,6 +535,75 @@ FullTutorial::FullTutorial(int iPad, bool isTrial /*= false*/) } } + /* + * + * + * FIREWORKS + * + */ + if(app.getGameRuleDefinitions() != NULL) + { + AABB *area = app.getGameRuleDefinitions()->getNamedArea(L"fireworksArea"); + if(area != NULL) + { + eTutorial_State fireworkStates[] = {e_Tutorial_State_Gameplay}; + AddGlobalConstraint( new ChangeStateConstraint(this, e_Tutorial_State_Fireworks, fireworkStates, 1, area->x0,area->y0,area->z0,area->x1,area->y1,area->z1) ); + + addTask(e_Tutorial_State_Fireworks, new ChoiceTask(this, IDS_TUTORIAL_TASK_FIREWORK_OVERVIEW, IDS_TUTORIAL_PROMPT_FIREWORK_OVERVIEW, true, ACTION_MENU_A, ACTION_MENU_B, e_Tutorial_Completion_Complete_State_Gameplay_Constraints, eTelemetryTutorial_Trading) ); + + addTask(e_Tutorial_State_Fireworks, new InfoTask(this, IDS_TUTORIAL_TASK_FIREWORK_PURPOSE, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Fireworks, new InfoTask(this, IDS_TUTORIAL_TASK_FIREWORK_CUSTOMISE, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); // + addTask(e_Tutorial_State_Fireworks, new InfoTask(this, IDS_TUTORIAL_TASK_FIREWORK_CRAFTING, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + } + } + + /* + * + * + * BEACON + * + */ + if(app.getGameRuleDefinitions() != NULL) + { + AABB *area = app.getGameRuleDefinitions()->getNamedArea(L"beaconArea"); + if(area != NULL) + { + eTutorial_State beaconStates[] = {e_Tutorial_State_Gameplay}; + AddGlobalConstraint( new ChangeStateConstraint(this, e_Tutorial_State_Beacon, beaconStates, 1, area->x0,area->y0,area->z0,area->x1,area->y1,area->z1) ); + + addTask(e_Tutorial_State_Beacon, new ChoiceTask(this, IDS_TUTORIAL_TASK_BEACON_OVERVIEW, IDS_TUTORIAL_PROMPT_BEACON_OVERVIEW, true, ACTION_MENU_A, ACTION_MENU_B, e_Tutorial_Completion_Complete_State_Gameplay_Constraints, eTelemetryTutorial_Beacon) ); + + addTask(e_Tutorial_State_Beacon, new InfoTask(this, IDS_TUTORIAL_TASK_BEACON_PURPOSE, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Beacon, new InfoTask(this, IDS_TUTORIAL_TASK_BEACON_DESIGN, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Beacon, new InfoTask(this, IDS_TUTORIAL_TASK_BEACON_CHOOSING_POWERS, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + } + } + + /* + * + * + * HOPPER + * + */ + if(app.getGameRuleDefinitions() != NULL) + { + AABB *area = app.getGameRuleDefinitions()->getNamedArea(L"hopperArea"); + if(area != NULL) + { + eTutorial_State hopperStates[] = {e_Tutorial_State_Gameplay}; + AddGlobalConstraint( new ChangeStateConstraint(this, e_Tutorial_State_Hopper, hopperStates, 1, area->x0,area->y0,area->z0,area->x1,area->y1,area->z1) ); + + addTask(e_Tutorial_State_Hopper, new ChoiceTask(this, IDS_TUTORIAL_TASK_HOPPER_OVERVIEW, IDS_TUTORIAL_PROMPT_HOPPER_OVERVIEW, true, ACTION_MENU_A, ACTION_MENU_B, e_Tutorial_Completion_Complete_State_Gameplay_Constraints, eTelemetryTutorial_Hopper) ); + + addTask(e_Tutorial_State_Hopper, new InfoTask(this, IDS_TUTORIAL_TASK_HOPPER_PURPOSE, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Hopper, new InfoTask(this, IDS_TUTORIAL_TASK_HOPPER_CONTAINERS, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Hopper, new InfoTask(this, IDS_TUTORIAL_TASK_HOPPER_MECHANICS, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Hopper, new InfoTask(this, IDS_TUTORIAL_TASK_HOPPER_REDSTONE, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Hopper, new InfoTask(this, IDS_TUTORIAL_TASK_HOPPER_OUTPUT, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Hopper, new InfoTask(this, IDS_TUTORIAL_TASK_HOPPER_AREA, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + } + } + /* * * diff --git a/Minecraft.Client/Common/Tutorial/HorseChoiceTask.cpp b/Minecraft.Client/Common/Tutorial/HorseChoiceTask.cpp new file mode 100644 index 00000000..e1d50fbf --- /dev/null +++ b/Minecraft.Client/Common/Tutorial/HorseChoiceTask.cpp @@ -0,0 +1,43 @@ +#include "stdafx.h" + +#include + +#include "Minecraft.h" +#include "Tutorial.h" + +#include "..\Minecraft.World\EntityHorse.h" + +#include "HorseChoiceTask.h" + +HorseChoiceTask::HorseChoiceTask(Tutorial *tutorial, int iDescHorse, int iDescDonkey, int iDescMule, int iPromptId, + bool requiresUserInput, int iConfirmMapping, int iCancelMapping, + eTutorial_CompletionAction cancelAction, ETelemetryChallenges telemetryEvent) + + : ChoiceTask(tutorial, -1, iPromptId, requiresUserInput, iConfirmMapping, iCancelMapping, cancelAction, telemetryEvent) +{ + m_eHorseType = -1; + m_iDescMule = iDescMule; + m_iDescDonkey = iDescDonkey; + m_iDescHorse = iDescHorse; +} + +int HorseChoiceTask::getDescriptionId() +{ + switch (m_eHorseType) + { + case EntityHorse::TYPE_HORSE: return m_iDescHorse; + case EntityHorse::TYPE_DONKEY: return m_iDescDonkey; + case EntityHorse::TYPE_MULE: return m_iDescMule; + default: return -1; + } + return -1; +} + +void HorseChoiceTask::onLookAtEntity(shared_ptr entity) +{ + if ( (m_eHorseType < 0) && entity->instanceof(eTYPE_HORSE) ) + { + shared_ptr horse = dynamic_pointer_cast(entity); + if ( horse->isAdult() ) m_eHorseType = horse->getType(); + } +} \ No newline at end of file diff --git a/Minecraft.Client/Common/Tutorial/HorseChoiceTask.h b/Minecraft.Client/Common/Tutorial/HorseChoiceTask.h new file mode 100644 index 00000000..5130a7c7 --- /dev/null +++ b/Minecraft.Client/Common/Tutorial/HorseChoiceTask.h @@ -0,0 +1,23 @@ +#pragma once +using namespace std; + +#include "ChoiceTask.h" + + +// Same as choice task, but switches description based on horse type. +class HorseChoiceTask : public ChoiceTask +{ +protected: + int m_eHorseType; + + int m_iDescHorse, m_iDescDonkey, m_iDescMule; + +public: + HorseChoiceTask(Tutorial *tutorial, int iDescHorse, int iDescDonkey, int iDescMule, int iPromptId = -1, + bool requiresUserInput = false, int iConfirmMapping = 0, int iCancelMapping = 0, + eTutorial_CompletionAction cancelAction = e_Tutorial_Completion_None, ETelemetryChallenges telemetryEvent = eTelemetryChallenges_Unknown); + + virtual int getDescriptionId(); + + virtual void onLookAtEntity(shared_ptr entity); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/Tutorial/LookAtTileHint.cpp b/Minecraft.Client/Common/Tutorial/LookAtTileHint.cpp index 0a953a7b..c8723a84 100644 --- a/Minecraft.Client/Common/Tutorial/LookAtTileHint.cpp +++ b/Minecraft.Client/Common/Tutorial/LookAtTileHint.cpp @@ -50,15 +50,11 @@ bool LookAtTileHint::onLookAt(int id,int iData) else { message->m_icon = id; - if(m_iDataOverride > -1) - { - message->m_iAuxVal = m_iDataOverride; - } - else - { - message->m_iAuxVal = iData; - } } + + // 4J-JEV: Moved to keep data override even if we're overriding the icon as well. + message->m_iAuxVal = (m_iDataOverride > -1) ? m_iDataOverride : iData; + message->m_messageId = Item::items[id]->getUseDescriptionId(); message->m_titleId = Item::items[id]->getDescriptionId(message->m_iAuxVal); return m_tutorial->setMessage(this, message); diff --git a/Minecraft.Client/Common/Tutorial/RideEntityTask.cpp b/Minecraft.Client/Common/Tutorial/RideEntityTask.cpp new file mode 100644 index 00000000..29fe592d --- /dev/null +++ b/Minecraft.Client/Common/Tutorial/RideEntityTask.cpp @@ -0,0 +1,30 @@ +#include "stdafx.h" + +#include + +#include "Minecraft.h" +#include "Tutorial.h" + +#include "..\Minecraft.World\EntityHorse.h" + +#include "RideEntityTask.h" + +RideEntityTask::RideEntityTask(const int eType, Tutorial *tutorial, int descriptionId, + bool enablePreCompletion, vector *inConstraints, bool bShowMinimumTime, bool bAllowFade, bool bTaskReminders) + : TutorialTask( tutorial, descriptionId, enablePreCompletion, inConstraints, bShowMinimumTime, bAllowFade, bTaskReminders ), + m_eType( eType ) +{ +} + +bool RideEntityTask::isCompleted() +{ + return bIsCompleted; +} + +void RideEntityTask::onRideEntity(shared_ptr entity) +{ + if (entity->instanceof((eINSTANCEOF) m_eType)) + { + bIsCompleted = true; + } +} \ No newline at end of file diff --git a/Minecraft.Client/Common/Tutorial/RideEntityTask.h b/Minecraft.Client/Common/Tutorial/RideEntityTask.h new file mode 100644 index 00000000..d9b6d41e --- /dev/null +++ b/Minecraft.Client/Common/Tutorial/RideEntityTask.h @@ -0,0 +1,22 @@ +#pragma once +using namespace std; + +#include "TutorialTask.h" + +class Level; + +// 4J-JEV: Tasks that involve riding an entity. +class RideEntityTask : public TutorialTask +{ +protected: + const int m_eType; + +public: + RideEntityTask(const int eTYPE, Tutorial *tutorial, int descriptionId, + bool enablePreCompletion = false, vector *inConstraints = NULL, + bool bShowMinimumTime = false, bool bAllowFade = true, bool bTaskReminders = true ); + + virtual bool isCompleted(); + + virtual void onRideEntity(shared_ptr entity); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/Tutorial/Tutorial.cpp b/Minecraft.Client/Common/Tutorial/Tutorial.cpp index b0a0d665..057e2171 100644 --- a/Minecraft.Client/Common/Tutorial/Tutorial.cpp +++ b/Minecraft.Client/Common/Tutorial/Tutorial.cpp @@ -289,9 +289,9 @@ void Tutorial::staticCtor() s_completableTasks.push_back( e_Tutorial_Hint_Potato ); s_completableTasks.push_back( e_Tutorial_Hint_Carrot ); - s_completableTasks.push_back( e_Tutorial_Hint_Item_Unused_18 ); - s_completableTasks.push_back( e_Tutorial_Hint_Item_Unused_19 ); - s_completableTasks.push_back( e_Tutorial_Hint_Item_Unused_20 ); + s_completableTasks.push_back( e_Tutorial_Hint_CommandBlock ); + s_completableTasks.push_back( e_Tutorial_Hint_Beacon ); + s_completableTasks.push_back( e_Tutorial_Hint_Activator_Rail ); s_completableTasks.push_back( eTutorial_Telemetry_TrialStart ); s_completableTasks.push_back( eTutorial_Telemetry_Halfway ); @@ -317,9 +317,31 @@ void Tutorial::staticCtor() s_completableTasks.push_back( e_Tutorial_State_Anvil ); s_completableTasks.push_back( e_Tutorial_State_Anvil_Menu ); s_completableTasks.push_back( e_Tutorial_State_Enderchests ); - - s_completableTasks.push_back( e_Tutorial_State_Unused_9 ); - s_completableTasks.push_back( e_Tutorial_State_Unused_10 ); + s_completableTasks.push_back( e_Tutorial_State_Horse_Menu ); + s_completableTasks.push_back( e_Tutorial_State_Hopper_Menu ); + + s_completableTasks.push_back( e_Tutorial_Hint_Wither ); + s_completableTasks.push_back( e_Tutorial_Hint_Witch ); + s_completableTasks.push_back( e_Tutorial_Hint_Bat ); + s_completableTasks.push_back( e_Tutorial_Hint_Horse ); + + s_completableTasks.push_back( e_Tutorial_Hint_RedstoneBlock ); + s_completableTasks.push_back( e_Tutorial_Hint_DaylightDetector ); + s_completableTasks.push_back( e_Tutorial_Hint_Dropper ); + s_completableTasks.push_back( e_Tutorial_Hint_Hopper ); + s_completableTasks.push_back( e_Tutorial_Hint_Comparator ); + s_completableTasks.push_back( e_Tutorial_Hint_ChestTrap ); + s_completableTasks.push_back( e_Tutorial_Hint_HayBlock ); + s_completableTasks.push_back( e_Tutorial_Hint_ClayHardened ); + s_completableTasks.push_back( e_Tutorial_Hint_ClayHardenedColored ); + s_completableTasks.push_back( e_Tutorial_Hint_CoalBlock ); + + s_completableTasks.push_back( e_Tutorial_State_Beacon_Menu ); + s_completableTasks.push_back( e_Tutorial_State_Fireworks_Menu ); + s_completableTasks.push_back( e_Tutorial_State_Horse ); + s_completableTasks.push_back( e_Tutorial_State_Hopper ); + s_completableTasks.push_back( e_Tutorial_State_Beacon ); + s_completableTasks.push_back( e_Tutorial_State_Fireworks ); if( s_completableTasks.size() > TUTORIAL_PROFILE_STORAGE_BITS ) { @@ -376,10 +398,10 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) /* * TILE HINTS */ - int rockItems[] = {Tile::rock_Id}; + int rockItems[] = {Tile::stone_Id}; if(!isHintCompleted(e_Tutorial_Hint_Rock)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Rock, this, rockItems, 1 ) ); - int stoneItems[] = {Tile::stoneBrick_Id}; + int stoneItems[] = {Tile::cobblestone_Id}; if(!isHintCompleted(e_Tutorial_Hint_Stone)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Stone, this, stoneItems, 1 ) ); int plankItems[] = {Tile::wood_Id}; @@ -438,7 +460,7 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Sandstone, this, sandstoneItems, 1, -1, SandStoneTile::TYPE_SMOOTHSIDE ) ); } - int noteBlockItems[] = {Tile::musicBlock_Id}; + int noteBlockItems[] = {Tile::noteblock_Id}; if(!isHintCompleted(e_Tutorial_Hint_Note_Block)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Note_Block, this, noteBlockItems, 1 ) ); int poweredRailItems[] = {Tile::goldenRail_Id}; @@ -455,13 +477,13 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Tall_Grass, this, tallGrassItems, 1, -1, TallGrass::FERN ) ); } - int woolItems[] = {Tile::cloth_Id}; + int woolItems[] = {Tile::wool_Id}; if(!isHintCompleted(e_Tutorial_Hint_Wool)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Wool, this, woolItems, 1 ) ); int flowerItems[] = {Tile::flower_Id, Tile::rose_Id}; if(!isHintCompleted(e_Tutorial_Hint_Flower)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Flower, this, flowerItems, 2 ) ); - int mushroomItems[] = {Tile::mushroom1_Id, Tile::mushroom2_Id}; + int mushroomItems[] = {Tile::mushroom_brown_Id, Tile::mushroom_red_Id}; if(!isHintCompleted(e_Tutorial_Hint_Mushroom)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Mushroom, this, mushroomItems, 2 ) ); int goldBlockItems[] = {Tile::goldBlock_Id}; @@ -499,7 +521,7 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) int bookshelfItems[] = {Tile::bookshelf_Id}; if(!isHintCompleted(e_Tutorial_Hint_Bookshelf)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Bookshelf, this, bookshelfItems, 1 ) ); - int mossStoneItems[] = {Tile::mossStone_Id}; + int mossStoneItems[] = {Tile::mossyCobblestone_Id}; if(!isHintCompleted(e_Tutorial_Hint_Moss_Stone)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Moss_Stone, this, mossStoneItems, 1 ) ); int obsidianItems[] = {Tile::obsidian_Id}; @@ -526,7 +548,7 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) int craftingTableItems[] = {Tile::workBench_Id}; if(!isHintCompleted(e_Tutorial_Hint_Crafting_Table)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Crafting_Table, this, craftingTableItems, 1 ) ); - int cropsItems[] = {Tile::crops_Id}; + int cropsItems[] = {Tile::wheat_Id}; if(!isHintCompleted(e_Tutorial_Hint_Crops)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Crops, this, cropsItems, 1, -1, -1, 7 ) ); int farmlandItems[] = {Tile::farmland_Id}; @@ -544,7 +566,7 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) int ladderItems[] = {Tile::ladder_Id}; if(!isHintCompleted(e_Tutorial_Hint_Ladder)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Ladder, this, ladderItems, 1 ) ); - int stairsStoneItems[] = {Tile::stairs_stone_Id,Tile::stairs_bricks_Id,Tile::stairs_stoneBrickSmooth_Id,Tile::stairs_wood_Id,Tile::stairs_sprucewood_Id,Tile::stairs_birchwood_Id,Tile::stairs_netherBricks_Id,Tile::stairs_sandstone_Id,Tile::stairs_quartz_Id}; + int stairsStoneItems[] = {Tile::stairs_stone_Id,Tile::stairs_bricks_Id,Tile::stairs_stoneBrick_Id,Tile::stairs_wood_Id,Tile::stairs_sprucewood_Id,Tile::stairs_birchwood_Id,Tile::stairs_netherBricks_Id,Tile::stairs_sandstone_Id,Tile::stairs_quartz_Id}; if(!isHintCompleted(e_Tutorial_Hint_Stairs_Stone)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Stairs_Stone, this, stairsStoneItems, 9 ) ); int railItems[] = {Tile::rail_Id}; @@ -562,7 +584,7 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) int redstoneOreItems[] = {Tile::redStoneOre_Id, Tile::redStoneOre_lit_Id}; if(!isHintCompleted(e_Tutorial_Hint_Redstone_Ore)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Redstone_Ore, this, redstoneOreItems, 2 ) ); - int redstoneTorchItems[] = {Tile::notGate_off_Id, Tile::notGate_on_Id}; + int redstoneTorchItems[] = {Tile::redstoneTorch_off_Id, Tile::redstoneTorch_on_Id}; if(!isHintCompleted(e_Tutorial_Hint_Redstone_Torch)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Redstone_Torch, this, redstoneTorchItems, 2 ) ); int buttonItems[] = {Tile::button_stone_Id, Tile::button_wood_Id}; @@ -583,19 +605,19 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) int sugarCaneItems[] = {Tile::reeds_Id}; if(!isHintCompleted(e_Tutorial_Hint_Sugarcane)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Sugarcane, this, sugarCaneItems, 1 ) ); - int recordPlayerItems[] = {Tile::recordPlayer_Id}; + int recordPlayerItems[] = {Tile::jukebox_Id}; if(!isHintCompleted(e_Tutorial_Hint_Record_Player)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Record_Player, this, recordPlayerItems, 1 ) ); int pumpkinItems[] = {Tile::pumpkin_Id}; if(!isHintCompleted(e_Tutorial_Hint_Pumpkin)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Pumpkin, this, pumpkinItems, 1, -1, -1, 0 ) ); - int hellRockItems[] = {Tile::hellRock_Id}; + int hellRockItems[] = {Tile::netherRack_Id}; if(!isHintCompleted(e_Tutorial_Hint_Hell_Rock)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Hell_Rock, this, hellRockItems, 1 ) ); - int hellSandItems[] = {Tile::hellSand_Id}; + int hellSandItems[] = {Tile::soulsand_Id}; if(!isHintCompleted(e_Tutorial_Hint_Hell_Sand)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Hell_Sand, this, hellSandItems, 1 ) ); - int glowstoneItems[] = {Tile::lightGem_Id}; + int glowstoneItems[] = {Tile::glowstone_Id}; if(!isHintCompleted(e_Tutorial_Hint_Glowstone)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Glowstone, this, glowstoneItems, 1 ) ); int portalItems[] = {Tile::portalTile_Id}; @@ -608,7 +630,7 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) if(!isHintCompleted(e_Tutorial_Hint_Cake)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Cake, this, cakeItems, 1 ) ); int redstoneRepeaterItems[] = {Tile::diode_on_Id, Tile::diode_off_Id}; - if(!isHintCompleted(e_Tutorial_Hint_Redstone_Repeater)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Redstone_Repeater, this, redstoneRepeaterItems, 2, Item::diode_Id ) ); + if(!isHintCompleted(e_Tutorial_Hint_Redstone_Repeater)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Redstone_Repeater, this, redstoneRepeaterItems, 2, Item::repeater_Id ) ); int trapdoorItems[] = {Tile::trapdoor_Id}; if(!isHintCompleted(e_Tutorial_Hint_Trapdoor)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Trapdoor, this, trapdoorItems, 1 ) ); @@ -622,10 +644,10 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) int monsterStoneEggItems[] = {Tile::monsterStoneEgg_Id}; if(!isHintCompleted(e_Tutorial_Hint_Monster_Stone_Egg)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Monster_Stone_Egg, this, monsterStoneEggItems, 1 ) ); - int stoneBrickSmoothItems[] = {Tile::stoneBrickSmooth_Id}; + int stoneBrickSmoothItems[] = {Tile::stoneBrick_Id}; if(!isHintCompleted(e_Tutorial_Hint_Stone_Brick_Smooth)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Stone_Brick_Smooth, this, stoneBrickSmoothItems, 1 ) ); - int hugeMushroomItems[] = {Tile::hugeMushroom1_Id,Tile::hugeMushroom2_Id}; + int hugeMushroomItems[] = {Tile::hugeMushroom_brown_Id,Tile::hugeMushroom_red_Id}; if(!isHintCompleted(e_Tutorial_Hint_Huge_Mushroom)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Huge_Mushroom, this, hugeMushroomItems, 2 ) ); int ironFenceItems[] = {Tile::ironFence_Id}; @@ -673,7 +695,7 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) int endPortalFrameItems[] = {Tile::endPortalFrameTile_Id}; if(!isHintCompleted(e_Tutorial_Hint_End_Portal_Frame)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_End_Portal_Frame, this, endPortalFrameItems, 1 ) ); - int whiteStoneItems[] = {Tile::whiteStone_Id}; + int whiteStoneItems[] = {Tile::endStone_Id}; if(!isHintCompleted(e_Tutorial_Hint_White_Stone)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_White_Stone, this, whiteStoneItems, 1 ) ); int dragonEggItems[] = {Tile::dragonEgg_Id}; @@ -683,7 +705,7 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) if(!isHintCompleted(e_Tutorial_Hint_RedstoneLamp)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_RedstoneLamp, this, redstoneLampItems, 2 ) ); int cocoaItems[] = {Tile::cocoa_Id}; - if(!isHintCompleted(e_Tutorial_Hint_Cocoa)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Cocoa, this, cocoaItems, 1 ) ); + if(!isHintCompleted(e_Tutorial_Hint_Cocoa)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Cocoa, this, cocoaItems, 1, Item::dye_powder_Id, -1, DyePowderItem::BROWN) ); int emeraldOreItems[] = {Tile::emeraldOre_Id}; if(!isHintCompleted(e_Tutorial_Hint_EmeraldOre)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_EmeraldOre, this, emeraldOreItems, 1 ) ); @@ -734,6 +756,45 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) int carrotItems[] = {Tile::carrots_Id}; if(!isHintCompleted(e_Tutorial_Hint_Carrot)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Carrot, this, carrotItems, 1, -1, -1, 7 ) ); + + int commandBlockItems[] = {Tile::commandBlock_Id}; + if(!isHintCompleted(e_Tutorial_Hint_CommandBlock)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_CommandBlock, this, commandBlockItems, 1 ) ); + + int beaconItems[] = {Tile::beacon_Id}; + if(!isHintCompleted(e_Tutorial_Hint_Beacon)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Beacon, this, beaconItems, 1 ) ); + + int activatorRailItems[] = {Tile::activatorRail_Id}; + if(!isHintCompleted(e_Tutorial_Hint_Activator_Rail)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Activator_Rail, this, activatorRailItems, 1 ) ); + + int redstoneBlockItems[] = {Tile::redstoneBlock_Id}; + if(!isHintCompleted(e_Tutorial_Hint_RedstoneBlock)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_RedstoneBlock, this, redstoneBlockItems, 1 ) ); + + int daylightDetectorItems[] = {Tile::daylightDetector_Id}; + if(!isHintCompleted(e_Tutorial_Hint_DaylightDetector)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_DaylightDetector, this, daylightDetectorItems, 1 ) ); + + int dropperItems[] = {Tile::dropper_Id}; + if(!isHintCompleted(e_Tutorial_Hint_Dropper)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Dropper, this, dropperItems, 1 ) ); + + int hopperItems[] = {Tile::hopper_Id}; + if(!isHintCompleted(e_Tutorial_Hint_Hopper)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Hopper, this, hopperItems, 1 ) ); + + int comparatorItems[] = {Tile::comparator_off_Id, Tile::comparator_on_Id}; + if(!isHintCompleted(e_Tutorial_Hint_Comparator)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_Comparator, this, comparatorItems, 2, Item::comparator_Id ) ); + + int trappedChestItems[] = {Tile::chest_trap_Id}; + if(!isHintCompleted(e_Tutorial_Hint_ChestTrap)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_ChestTrap, this, trappedChestItems, 1 ) ); + + int hayBlockItems[] = {Tile::hayBlock_Id}; + if(!isHintCompleted(e_Tutorial_Hint_HayBlock)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_HayBlock, this, hayBlockItems, 1 ) ); + + int clayHardenedItems[] = {Tile::clayHardened_Id}; + if(!isHintCompleted(e_Tutorial_Hint_ClayHardened)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_ClayHardened, this, clayHardenedItems, 1 ) ); + + int clayHardenedColoredItems[] = {Tile::clayHardened_colored_Id}; + if(!isHintCompleted(e_Tutorial_Hint_ClayHardenedColored)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_ClayHardenedColored, this, clayHardenedColoredItems, 1 ) ); + + int coalBlockItems[] = {Tile::coalBlock_Id}; + if(!isHintCompleted(e_Tutorial_Hint_CoalBlock)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_CoalBlock, this, coalBlockItems, 1 ) ); /* * ENTITY HINTS @@ -760,8 +821,12 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) if(!isHintCompleted(e_Tutorial_Hint_EnderDragon)) addHint(e_Tutorial_State_Gameplay, new LookAtEntityHint(e_Tutorial_Hint_EnderDragon, this, IDS_DESC_ENDERDRAGON, IDS_ENDERDRAGON, eTYPE_ENDERDRAGON ) ); if(!isHintCompleted(e_Tutorial_Hint_Blaze)) addHint(e_Tutorial_State_Gameplay, new LookAtEntityHint(e_Tutorial_Hint_Blaze, this, IDS_DESC_BLAZE, IDS_BLAZE, eTYPE_BLAZE ) ); if(!isHintCompleted(e_Tutorial_Hint_Lava_Slime)) addHint(e_Tutorial_State_Gameplay, new LookAtEntityHint(e_Tutorial_Hint_Lava_Slime, this, IDS_DESC_LAVA_SLIME, IDS_LAVA_SLIME, eTYPE_LAVASLIME ) ); - if(!isHintCompleted(e_Tutorial_Hint_Ozelot)) addHint(e_Tutorial_State_Gameplay, new LookAtEntityHint(e_Tutorial_Hint_Ozelot, this, IDS_DESC_OZELOT, IDS_OZELOT, eTYPE_OZELOT ) ); + if(!isHintCompleted(e_Tutorial_Hint_Ozelot)) addHint(e_Tutorial_State_Gameplay, new LookAtEntityHint(e_Tutorial_Hint_Ozelot, this, IDS_DESC_OZELOT, IDS_OZELOT, eTYPE_OCELOT ) ); if(!isHintCompleted(e_Tutorial_Hint_Villager)) addHint(e_Tutorial_State_Gameplay, new LookAtEntityHint(e_Tutorial_Hint_Villager, this, IDS_DESC_VILLAGER, IDS_VILLAGER, eTYPE_VILLAGER) ); + if(!isHintCompleted(e_Tutorial_Hint_Wither)) addHint(e_Tutorial_State_Gameplay, new LookAtEntityHint(e_Tutorial_Hint_Wither, this, IDS_DESC_WITHER, IDS_WITHER, eTYPE_WITHERBOSS) ); + if(!isHintCompleted(e_Tutorial_Hint_Witch)) addHint(e_Tutorial_State_Gameplay, new LookAtEntityHint(e_Tutorial_Hint_Witch, this, IDS_DESC_WITCH, IDS_WITCH, eTYPE_WITCH) ); + if(!isHintCompleted(e_Tutorial_Hint_Bat)) addHint(e_Tutorial_State_Gameplay, new LookAtEntityHint(e_Tutorial_Hint_Bat, this, IDS_DESC_BAT, IDS_BAT, eTYPE_BAT) ); + if(!isHintCompleted(e_Tutorial_Hint_Horse)) addHint(e_Tutorial_State_Gameplay, new LookAtEntityHint(e_Tutorial_Hint_Horse, this, IDS_DESC_HORSE, IDS_HORSE, eTYPE_HORSE) ); /* @@ -929,6 +994,86 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad ) } // Other tasks can be added in the derived classes + /* + * + * + * HORSE ENCOUNTER + * + */ + if(isFullTutorial || !isStateCompleted(e_Tutorial_State_Horse) ) + { + addTask(e_Tutorial_State_Horse, + new HorseChoiceTask(this, IDS_TUTORIAL_TASK_HORSE_OVERVIEW, IDS_TUTORIAL_TASK_DONKEY_OVERVIEW, IDS_TUTORIAL_TASK_MULE_OVERVIEW, IDS_TUTORIAL_PROMPT_HORSE_OVERVIEW, + true, ACTION_MENU_A, ACTION_MENU_B, e_Tutorial_Completion_Complete_State_Gameplay_Constraints, eTelemetryTutorial_Horse) ); + + addTask(e_Tutorial_State_Horse, new InfoTask(this, IDS_TUTORIAL_TASK_HORSE_INTRO, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Horse, new InfoTask(this, IDS_TUTORIAL_TASK_HORSE_PURPOSE, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Horse, new InfoTask(this, IDS_TUTORIAL_TASK_HORSE_TAMING, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Horse, new InfoTask(this, IDS_TUTORIAL_TASK_HORSE_TAMING2, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + + // 4J-JEV: Only force the RideEntityTask if we're on the full-tutorial. + if (isFullTutorial) addTask(e_Tutorial_State_Horse, new RideEntityTask(eTYPE_HORSE, this, IDS_TUTORIAL_TASK_HORSE_RIDE, true, NULL, false, false, false) ); + else addTask(e_Tutorial_State_Horse, new InfoTask(this, IDS_TUTORIAL_TASK_HORSE_RIDE, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + + addTask(e_Tutorial_State_Horse, new InfoTask(this, IDS_TUTORIAL_TASK_HORSE_SADDLES, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Horse, new InfoTask(this, IDS_TUTORIAL_TASK_HORSE_SADDLEBAGS, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Horse, new InfoTask(this, IDS_TUTORIAL_TASK_HORSE_BREEDING, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + } + + /* + * + * + * HORSE MENU + * + */ + if(isFullTutorial || !isStateCompleted( e_Tutorial_State_Horse_Menu ) ) + { + ProcedureCompoundTask *horseMenuTask = new ProcedureCompoundTask( this ); + horseMenuTask->AddTask( new ChoiceTask(this, IDS_TUTORIAL_TASK_HORSE_MENU_OVERVIEW, IDS_TUTORIAL_PROMPT_HORSE_MENU_OVERVIEW, true, ACTION_MENU_A, ACTION_MENU_B, e_Tutorial_Completion_Complete_State, eTelemetryTutorial_HorseMenu) ); + horseMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_HORSE_MENU_LAYOUT, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + horseMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_HORSE_MENU_EQUIPMENT, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + horseMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_HORSE_MENU_SADDLEBAGS, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Horse_Menu, horseMenuTask ); + } + + /* + * + * + * FIREWORKS MENU + * + */ + if(isFullTutorial || !isStateCompleted( e_Tutorial_State_Fireworks_Menu ) ) + { + ProcedureCompoundTask *fireworksMenuTask = new ProcedureCompoundTask( this ); + fireworksMenuTask->AddTask( new ChoiceTask(this, IDS_TUTORIAL_TASK_FIREWORK_MENU_OVERVIEW, IDS_TUTORIAL_PROMPT_FIREWORK_MENU_OVERVIEW, true, ACTION_MENU_A, ACTION_MENU_B, e_Tutorial_Completion_Complete_State, eTelemetryTutorial_FireworksMenu) ); + fireworksMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_FIREWORK_MENU_BASIC_START, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + fireworksMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_FIREWORK_MENU_BASIC_STARS, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + fireworksMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_FIREWORK_MENU_BASIC_HEIGHT, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + fireworksMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_FIREWORK_MENU_BASIC_CRAFT, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + fireworksMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_FIREWORK_MENU_ADV_START, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + fireworksMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_FIREWORK_MENU_ADV_COLOUR, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + fireworksMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_FIREWORK_MENU_ADV_SHAPE, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + fireworksMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_FIREWORK_MENU_ADV_EFFECT, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + fireworksMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_FIREWORK_MENU_ADV_FADE, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Fireworks_Menu, fireworksMenuTask ); + } + + /* + * + * + * BEACON MENU + * + */ + if(isFullTutorial || !isStateCompleted( e_Tutorial_State_Beacon_Menu ) ) + { + ProcedureCompoundTask *beaconMenuTask = new ProcedureCompoundTask( this ); + beaconMenuTask->AddTask( new ChoiceTask(this, IDS_TUTORIAL_TASK_BEACON_MENU_OVERVIEW, IDS_TUTORIAL_PROMPT_BEACON_MENU_OVERVIEW, true, ACTION_MENU_A, ACTION_MENU_B, e_Tutorial_Completion_Complete_State, eTelemetryTutorial_BeaconMenu) ); + beaconMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_BEACON_MENU_PRIMARY_POWERS, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + beaconMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_BEACON_MENU_SECONDARY_POWER, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + beaconMenuTask->AddTask( new InfoTask(this, IDS_TUTORIAL_TASK_BEACON_MENU_ACTIVATION, IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE, true, ACTION_MENU_A) ); + addTask(e_Tutorial_State_Beacon_Menu, beaconMenuTask ); + } + /* * * @@ -1203,27 +1348,15 @@ void Tutorial::tick() // Need to set the time on both levels to stop the flickering as the local level // tries to predict the time MinecraftServer::SetTimeOfDay(m_iTutorialFreezeTimeValue); - pMinecraft->level->setOverrideTimeOfDay(m_iTutorialFreezeTimeValue); // Always daytime + pMinecraft->level->setDayTime(m_iTutorialFreezeTimeValue); // Always daytime + app.SetGameHostOption(eGameHostOption_DoDaylightCycle,0); m_timeFrozen = true; } else if(m_freezeTime && m_timeFrozen && m_fullTutorialComplete) { - __int64 currentTime = pMinecraft->level->getTime(); - int currentDayTime = (currentTime % Level::TICKS_PER_DAY); - int timeToAdd = 0; - if(currentDayTime > m_iTutorialFreezeTimeValue) - { - timeToAdd = (Level::TICKS_PER_DAY - currentDayTime) + m_iTutorialFreezeTimeValue; - } - else - { - timeToAdd = m_iTutorialFreezeTimeValue - currentDayTime; - } - __int64 targetTime = currentTime + timeToAdd; - MinecraftServer::SetTimeOfDay(-1); - MinecraftServer::SetTime(targetTime); - pMinecraft->level->setOverrideTimeOfDay(-1); - pMinecraft->level->setTime(targetTime); + MinecraftServer::SetTimeOfDay(m_iTutorialFreezeTimeValue); + pMinecraft->level->setDayTime(m_iTutorialFreezeTimeValue); + app.SetGameHostOption(eGameHostOption_DoDaylightCycle,1); m_timeFrozen = false; } @@ -1569,10 +1702,22 @@ bool Tutorial::setMessage(PopupMessageDetails *message) { TutorialMessage *messageString = it->second; text = wstring( messageString->getMessageForDisplay() ); + + // 4J Stu - Quick fix for boat tutorial being incorrect + if(message->m_messageId == IDS_TUTORIAL_TASK_BOAT_OVERVIEW) + { + text = replaceAll(text, L"{*CONTROLLER_ACTION_USE*}", L"{*CONTROLLER_ACTION_DISMOUNT*}"); + } } else { text = wstring( app.GetString(message->m_messageId) ); + + // 4J Stu - Quick fix for boat tutorial being incorrect + if(message->m_messageId == IDS_TUTORIAL_TASK_BOAT_OVERVIEW) + { + text = replaceAll(text, L"{*CONTROLLER_ACTION_USE*}", L"{*CONTROLLER_ACTION_DISMOUNT*}"); + } } } @@ -1916,7 +2061,7 @@ void Tutorial::onLookAt(int id, int iData) } } -void Tutorial::onLookAtEntity(eINSTANCEOF type) +void Tutorial::onLookAtEntity(shared_ptr entity) { if( m_hintDisplayed ) return; @@ -1924,12 +2069,39 @@ void Tutorial::onLookAtEntity(eINSTANCEOF type) for(AUTO_VAR(it, hints[m_CurrentState].begin()); it < hints[m_CurrentState].end(); ++it) { TutorialHint *hint = *it; - hintNeeded = hint->onLookAtEntity(type); + hintNeeded = hint->onLookAtEntity(entity->GetType()); if(hintNeeded) { break; } } + + if ( (m_CurrentState == e_Tutorial_State_Gameplay) && entity->instanceof(eTYPE_HORSE) ) + { + changeTutorialState(e_Tutorial_State_Horse); + } + + for (AUTO_VAR(it, activeTasks[m_CurrentState].begin()); it != activeTasks[m_CurrentState].end(); ++it) + { + (*it)->onLookAtEntity(entity); + } +} + +void Tutorial::onRideEntity(shared_ptr entity) +{ + if(m_CurrentState == e_Tutorial_State_Gameplay) + { + switch (entity->GetType()) + { + case eTYPE_MINECART: changeTutorialState(e_Tutorial_State_Riding_Minecart); break; + case eTYPE_BOAT: changeTutorialState(e_Tutorial_State_Riding_Boat); break; + } + } + + for (AUTO_VAR(it, activeTasks[m_CurrentState].begin()); it != activeTasks[m_CurrentState].end(); ++it) + { + (*it)->onRideEntity(entity); + } } void Tutorial::onEffectChanged(MobEffect *effect, bool bRemoved) diff --git a/Minecraft.Client/Common/Tutorial/Tutorial.h b/Minecraft.Client/Common/Tutorial/Tutorial.h index aaaaba0a..169c33e3 100644 --- a/Minecraft.Client/Common/Tutorial/Tutorial.h +++ b/Minecraft.Client/Common/Tutorial/Tutorial.h @@ -165,7 +165,8 @@ public: void onTake(shared_ptr item, unsigned int invItemCountAnyAux, unsigned int invItemCountThisAux); void onSelectedItemChanged(shared_ptr item); void onLookAt(int id, int iData=0); - void onLookAtEntity(eINSTANCEOF type); + void onLookAtEntity(shared_ptr entity); + void onRideEntity(shared_ptr entity); void onEffectChanged(MobEffect *effect, bool bRemoved=false); bool canMoveToPosition(double xo, double yo, double zo, double xt, double yt, double zt); diff --git a/Minecraft.Client/Common/Tutorial/TutorialEnum.h b/Minecraft.Client/Common/Tutorial/TutorialEnum.h index 33f2e67d..1de6bbad 100644 --- a/Minecraft.Client/Common/Tutorial/TutorialEnum.h +++ b/Minecraft.Client/Common/Tutorial/TutorialEnum.h @@ -62,9 +62,14 @@ enum eTutorial_State e_Tutorial_State_Anvil, e_Tutorial_State_Anvil_Menu, e_Tutorial_State_Enderchests, - - e_Tutorial_State_Unused_9, - e_Tutorial_State_Unused_10, + e_Tutorial_State_Horse, + e_Tutorial_State_Horse_Menu, + e_Tutorial_State_Hopper, + e_Tutorial_State_Hopper_Menu, + e_Tutorial_State_Beacon, + e_Tutorial_State_Beacon_Menu, + e_Tutorial_State_Fireworks, + e_Tutorial_State_Fireworks_Menu, e_Tutorial_State_Max }; @@ -201,9 +206,12 @@ enum eTutorial_Hint e_Tutorial_Hint_EnderDragon, e_Tutorial_Hint_Blaze, e_Tutorial_Hint_Lava_Slime, - e_Tutorial_Hint_Ozelot, e_Tutorial_Hint_Villager, + e_Tutorial_Hint_Wither, + e_Tutorial_Hint_Witch, + e_Tutorial_Hint_Bat, + e_Tutorial_Hint_Horse, e_Tutorial_Hint_Item_Shovel, e_Tutorial_Hint_Item_Hatchet, @@ -292,9 +300,19 @@ enum eTutorial_Hint e_Tutorial_Hint_Potato, e_Tutorial_Hint_Carrot, - e_Tutorial_Hint_Item_Unused_18, - e_Tutorial_Hint_Item_Unused_19, - e_Tutorial_Hint_Item_Unused_20, + e_Tutorial_Hint_CommandBlock, + e_Tutorial_Hint_Beacon, + e_Tutorial_Hint_Activator_Rail, + e_Tutorial_Hint_RedstoneBlock, + e_Tutorial_Hint_DaylightDetector, + e_Tutorial_Hint_Dropper, + e_Tutorial_Hint_Hopper, + e_Tutorial_Hint_Comparator, + e_Tutorial_Hint_ChestTrap, + e_Tutorial_Hint_HayBlock, + e_Tutorial_Hint_ClayHardened, + e_Tutorial_Hint_ClayHardenedColored, + e_Tutorial_Hint_CoalBlock, e_Tutorial_Hint_Item_Max, }; diff --git a/Minecraft.Client/Common/Tutorial/TutorialTask.h b/Minecraft.Client/Common/Tutorial/TutorialTask.h index 92cb5999..b589ab27 100644 --- a/Minecraft.Client/Common/Tutorial/TutorialTask.h +++ b/Minecraft.Client/Common/Tutorial/TutorialTask.h @@ -6,6 +6,7 @@ class Level; class Tutorial; class TutorialConstraint; class MobEffect; +class Entity; // A class that represents each individual task in the tutorial. // @@ -33,7 +34,7 @@ protected: vector constraints; bool areConstraintsEnabled; public: - TutorialTask(Tutorial *tutorial, int descriptionId, bool enablePreCompletion, vector *inConstraints, bool bShowMinimumTime=false, bool bAllowFade=true, bool m_bTaskReminders=true ); + TutorialTask(Tutorial *tutorial, int descriptionId, bool enablePreCompletion, vector *inConstraints, bool bShowMinimumTime=false, bool bAllowFade=true, bool bTaskReminders=true ); virtual ~TutorialTask(); virtual int getDescriptionId() { return descriptionId; } @@ -60,4 +61,7 @@ public: virtual void onTake(shared_ptr item, unsigned int invItemCountAnyAux, unsigned int invItemCountThisAux) { } virtual void onStateChange(eTutorial_State newState) { } virtual void onEffectChanged(MobEffect *effect, bool bRemoved=false) { } + + virtual void onLookAtEntity(shared_ptr entity) { } + virtual void onRideEntity(shared_ptr entity) { } }; \ No newline at end of file diff --git a/Minecraft.Client/Common/Tutorial/TutorialTasks.h b/Minecraft.Client/Common/Tutorial/TutorialTasks.h index 591e9564..b3db973f 100644 --- a/Minecraft.Client/Common/Tutorial/TutorialTasks.h +++ b/Minecraft.Client/Common/Tutorial/TutorialTasks.h @@ -9,6 +9,8 @@ #include "XuiCraftingTask.h" #include "StateChangeTask.h" #include "ChoiceTask.h" +#include "HorseChoiceTask.h" +#include "RideEntityTask.h" #include "FullTutorialActiveTask.h" #include "AreaTask.h" #include "ProgressFlagTask.h" diff --git a/Minecraft.Client/Common/Tutorial/UseItemTask.h b/Minecraft.Client/Common/Tutorial/UseItemTask.h index 46d71be4..6c729540 100644 --- a/Minecraft.Client/Common/Tutorial/UseItemTask.h +++ b/Minecraft.Client/Common/Tutorial/UseItemTask.h @@ -10,7 +10,6 @@ class UseItemTask : public TutorialTask { private: const int itemId; - bool completed; public: UseItemTask(const int itemId, Tutorial *tutorial, int descriptionId, diff --git a/Minecraft.Client/Common/UI/IUIController.h b/Minecraft.Client/Common/UI/IUIController.h index 319185d8..3040c2cc 100644 --- a/Minecraft.Client/Common/UI/IUIController.h +++ b/Minecraft.Client/Common/UI/IUIController.h @@ -29,7 +29,7 @@ public: virtual void SetTooltipText( unsigned int iPad, unsigned int tooltip, int iTextID ) = 0; virtual void SetEnableTooltips( unsigned int iPad, BOOL bVal ) = 0; virtual void ShowTooltip( unsigned int iPad, unsigned int tooltip, bool show ) = 0; - virtual void SetTooltips( unsigned int iPad, int iA, int iB=-1, int iX=-1, int iY=-1 , int iLT=-1, int iRT=-1, int iLB=-1, int iRB=-1, int iLS=-1, bool forceUpdate = false) = 0; + virtual void SetTooltips( unsigned int iPad, int iA, int iB=-1, int iX=-1, int iY=-1 , int iLT=-1, int iRT=-1, int iLB=-1, int iRB=-1, int iLS=-1, int iRS=-1, int iBack=-1, bool forceUpdate = false) = 0; virtual void EnableTooltip( unsigned int iPad, unsigned int tooltip, bool enable ) = 0; virtual void RefreshTooltips(unsigned int iPad) = 0; diff --git a/Minecraft.Client/Common/UI/IUIScene_AbstractContainerMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_AbstractContainerMenu.cpp index cc1c1b82..ffe83081 100644 --- a/Minecraft.Client/Common/UI/IUIScene_AbstractContainerMenu.cpp +++ b/Minecraft.Client/Common/UI/IUIScene_AbstractContainerMenu.cpp @@ -104,7 +104,7 @@ int IUIScene_AbstractContainerMenu::GetSectionDimensions( ESceneSection eSection return( ( *piNumRows ) * ( *piNumColumns ) ); } -void IUIScene_AbstractContainerMenu::updateSlotPosition( ESceneSection eSection, ESceneSection newSection, ETapState eTapDirection, int *piTargetX, int *piTargetY, int xOffset ) +void IUIScene_AbstractContainerMenu::updateSlotPosition( ESceneSection eSection, ESceneSection newSection, ETapState eTapDirection, int *piTargetX, int *piTargetY, int xOffset, int yOffset ) { // Update the target slot based on the size of the current section int columns, rows; @@ -124,10 +124,19 @@ void IUIScene_AbstractContainerMenu::updateSlotPosition( ESceneSection eSection, { (*piTargetY) = 0; } - if( (*piTargetY) < 0 ) + int offsetY = (*piTargetY) - yOffset; + if( offsetY < 0 ) { (*piTargetY) = 0; } + else if(offsetY >= rows) + { + (*piTargetY) = rows - 1; + } + else + { + (*piTargetY) = offsetY; + } // Update X int offsetX = (*piTargetX) - xOffset; @@ -340,124 +349,124 @@ void IUIScene_AbstractContainerMenu::onMouseTick() { // reset the touch flag m_bFirstTouchStored[iPad]=false; - + #endif - // If there is any input on sticks, move the pointer. - if ( ( fabs( fInputX ) >= 0.01f ) || ( fabs( fInputY ) >= 0.01f ) ) - { - fInputDirX = ( fInputX > 0.0f ) ? 1.0f : ( fInputX < 0.0f )?-1.0f : 0.0f; - fInputDirY = ( fInputY > 0.0f ) ? 1.0f : ( fInputY < 0.0f )?-1.0f : 0.0f; + // If there is any input on sticks, move the pointer. + if ( ( fabs( fInputX ) >= 0.01f ) || ( fabs( fInputY ) >= 0.01f ) ) + { + fInputDirX = ( fInputX > 0.0f ) ? 1.0f : ( fInputX < 0.0f )?-1.0f : 0.0f; + fInputDirY = ( fInputY > 0.0f ) ? 1.0f : ( fInputY < 0.0f )?-1.0f : 0.0f; #ifdef TAP_DETECTION - // Check for potential tap input to jump slot. - ETapState eNewTapInput = GetTapInputType( fInputX, fInputY ); + // Check for potential tap input to jump slot. + ETapState eNewTapInput = GetTapInputType( fInputX, fInputY ); - switch( m_eCurrTapState ) + switch( m_eCurrTapState ) + { + case eTapStateNoInput: + m_eCurrTapState = eNewTapInput; + break; + + case eTapStateUp: + case eTapStateDown: + case eTapStateLeft: + case eTapStateRight: + if ( ( eNewTapInput != m_eCurrTapState ) && ( eNewTapInput != eTapStateNoInput ) ) { - case eTapStateNoInput: - m_eCurrTapState = eNewTapInput; - break; - - case eTapStateUp: - case eTapStateDown: - case eTapStateLeft: - case eTapStateRight: - if ( ( eNewTapInput != m_eCurrTapState ) && ( eNewTapInput != eTapStateNoInput ) ) - { - // Input is no longer suitable for tap. - m_eCurrTapState = eTapNone; - } - break; - - case eTapNone: - /// Nothing to do, input is not a tap. - break; + // Input is no longer suitable for tap. + m_eCurrTapState = eTapNone; } + break; + + case eTapNone: + /// Nothing to do, input is not a tap. + break; + } #endif // TAP_DETECTION - // Square it so we get more precision for small inputs. - fInputX = fInputX * fInputX * fInputDirX * POINTER_SPEED_FACTOR; - fInputY = fInputY * fInputY * fInputDirY * POINTER_SPEED_FACTOR; - //fInputX = fInputX * POINTER_SPEED_FACTOR; - //fInputY = fInputY * POINTER_SPEED_FACTOR; - float fInputScale = 1.0f; + // Square it so we get more precision for small inputs. + fInputX = fInputX * fInputX * fInputDirX * POINTER_SPEED_FACTOR; + fInputY = fInputY * fInputY * fInputDirY * POINTER_SPEED_FACTOR; + //fInputX = fInputX * POINTER_SPEED_FACTOR; + //fInputY = fInputY * POINTER_SPEED_FACTOR; + float fInputScale = 1.0f; - // Ramp up input from zero when new input is recieved over INPUT_TICKS_FOR_SCALING ticks. This is to try to improve tapping stick to move 1 box. - if ( m_iConsectiveInputTicks < MAX_INPUT_TICKS_FOR_SCALING ) - { - ++m_iConsectiveInputTicks; - fInputScale = ( (float)( m_iConsectiveInputTicks) / (float)(MAX_INPUT_TICKS_FOR_SCALING) ); - } + // Ramp up input from zero when new input is recieved over INPUT_TICKS_FOR_SCALING ticks. This is to try to improve tapping stick to move 1 box. + if ( m_iConsectiveInputTicks < MAX_INPUT_TICKS_FOR_SCALING ) + { + ++m_iConsectiveInputTicks; + fInputScale = ( (float)( m_iConsectiveInputTicks) / (float)(MAX_INPUT_TICKS_FOR_SCALING) ); + } #ifdef TAP_DETECTION - else if ( m_iConsectiveInputTicks < MAX_INPUT_TICKS_FOR_TAPPING ) - { - ++m_iConsectiveInputTicks; - } - else - { - m_eCurrTapState = eTapNone; - } + else if ( m_iConsectiveInputTicks < MAX_INPUT_TICKS_FOR_TAPPING ) + { + ++m_iConsectiveInputTicks; + } + else + { + m_eCurrTapState = eTapNone; + } #endif - // 4J Stu - The cursor moves too fast in SD mode - // The SD/splitscreen scenes are approximately 0.6 times the size of the fullscreen on - if(!RenderManager.IsHiDef() || app.GetLocalPlayerCount() > 1) fInputScale *= 0.6f; + // 4J Stu - The cursor moves too fast in SD mode + // The SD/splitscreen scenes are approximately 0.6 times the size of the fullscreen on + if(!RenderManager.IsHiDef() || app.GetLocalPlayerCount() > 1) fInputScale *= 0.6f; - fInputX *= fInputScale; - fInputY *= fInputScale; - -#ifdef USE_POINTER_ACCEL - m_fPointerAccelX += fInputX / 50.0f; - m_fPointerAccelY += fInputY / 50.0f; - - if ( fabsf( fInputX ) > fabsf( m_fPointerVelX + m_fPointerAccelX ) ) - { - m_fPointerVelX += m_fPointerAccelX; - } - else - { - m_fPointerAccelX = fInputX - m_fPointerVelX; - m_fPointerVelX = fInputX; - } + fInputX *= fInputScale; + fInputY *= fInputScale; - if ( fabsf( fInputY ) > fabsf( m_fPointerVelY + m_fPointerAccelY ) ) - { - m_fPointerVelY += m_fPointerAccelY; - } - else - { - m_fPointerAccelY = fInputY - m_fPointerVelY; - m_fPointerVelY = fInputY; - } - //printf( "IN %.2f VEL %.2f ACC %.2f\n", fInputY, m_fPointerVelY, m_fPointerAccelY ); +#ifdef USE_POINTER_ACCEL + m_fPointerAccelX += fInputX / 50.0f; + m_fPointerAccelY += fInputY / 50.0f; - vPointerPos.x += m_fPointerVelX; - vPointerPos.y -= m_fPointerVelY; -#else - // Add input to pointer position. - vPointerPos.x += fInputX; - vPointerPos.y -= fInputY; -#endif - // Clamp to pointer extents. - if ( vPointerPos.x < m_fPointerMinX ) vPointerPos.x = m_fPointerMinX; - else if ( vPointerPos.x > m_fPointerMaxX ) vPointerPos.x = m_fPointerMaxX; - if ( vPointerPos.y < m_fPointerMinY ) vPointerPos.y = m_fPointerMinY; - else if ( vPointerPos.y > m_fPointerMaxY ) vPointerPos.y = m_fPointerMaxY; + if ( fabsf( fInputX ) > fabsf( m_fPointerVelX + m_fPointerAccelX ) ) + { + m_fPointerVelX += m_fPointerAccelX; + } + else + { + m_fPointerAccelX = fInputX - m_fPointerVelX; + m_fPointerVelX = fInputX; + } - bStickInput = true; + if ( fabsf( fInputY ) > fabsf( m_fPointerVelY + m_fPointerAccelY ) ) + { + m_fPointerVelY += m_fPointerAccelY; } else { - m_iConsectiveInputTicks = 0; -#ifdef USE_POINTER_ACCEL - m_fPointerVelX = 0.0f; - m_fPointerVelY = 0.0f; - m_fPointerAccelX = 0.0f; - m_fPointerAccelY = 0.0f; -#endif + m_fPointerAccelY = fInputY - m_fPointerVelY; + m_fPointerVelY = fInputY; } + //printf( "IN %.2f VEL %.2f ACC %.2f\n", fInputY, m_fPointerVelY, m_fPointerAccelY ); + + vPointerPos.x += m_fPointerVelX; + vPointerPos.y -= m_fPointerVelY; +#else + // Add input to pointer position. + vPointerPos.x += fInputX; + vPointerPos.y -= fInputY; +#endif + // Clamp to pointer extents. + if ( vPointerPos.x < m_fPointerMinX ) vPointerPos.x = m_fPointerMinX; + else if ( vPointerPos.x > m_fPointerMaxX ) vPointerPos.x = m_fPointerMaxX; + if ( vPointerPos.y < m_fPointerMinY ) vPointerPos.y = m_fPointerMinY; + else if ( vPointerPos.y > m_fPointerMaxY ) vPointerPos.y = m_fPointerMaxY; + + bStickInput = true; + } + else + { + m_iConsectiveInputTicks = 0; +#ifdef USE_POINTER_ACCEL + m_fPointerVelX = 0.0f; + m_fPointerVelY = 0.0f; + m_fPointerAccelX = 0.0f; + m_fPointerAccelY = 0.0f; +#endif + } #ifdef __ORBIS__ } @@ -589,6 +598,9 @@ void IUIScene_AbstractContainerMenu::onMouseTick() } } + // 4J - TomK - set to section none if this is a non-visible section + if(!IsVisible(eSectionUnderPointer)) eSectionUnderPointer = eSectionNone; + // If we are not over any slot, set focus elsewhere. if ( eSectionUnderPointer == eSectionNone ) { @@ -768,20 +780,26 @@ void IUIScene_AbstractContainerMenu::onMouseTick() if( bPointerIsOverSlot && bSlotHasItem ) { - vector unformattedStrings; - wstring desc = GetItemDescription( slot, unformattedStrings ); - SetPointerText(desc, unformattedStrings, slot != m_lastPointerLabelSlot); + vector *desc = GetItemDescription(slot); + SetPointerText(desc, slot != m_lastPointerLabelSlot); m_lastPointerLabelSlot = slot; + delete desc; + } + else if (eSectionUnderPointer != eSectionNone && !IsSectionSlotList(eSectionUnderPointer) ) + { + vector *desc = GetSectionHoverText(eSectionUnderPointer); + SetPointerText(desc, false); + m_lastPointerLabelSlot = NULL; + delete desc; } else { - vector unformattedStrings; - SetPointerText(L"", unformattedStrings, false); + SetPointerText(NULL, false); m_lastPointerLabelSlot = NULL; } - EToolTipItem buttonA, buttonX, buttonY, buttonRT; - buttonA = buttonX = buttonY = buttonRT = eToolTipNone; + EToolTipItem buttonA, buttonX, buttonY, buttonRT, buttonBack; + buttonA = buttonX = buttonY = buttonRT = buttonBack = eToolTipNone; if ( bPointerIsOverSlot ) { SetPointerOutsideMenu( false ); @@ -865,13 +883,22 @@ void IUIScene_AbstractContainerMenu::onMouseTick() if ( iSlotCount == 1 ) { buttonA = eToolTipPickUpGeneric; - buttonRT = eToolTipWhatIsThis; } else { // Multiple items in slot. buttonA = eToolTipPickUpAll; buttonX = eToolTipPickUpHalf; + } + +#ifdef __PSVITA__ + if (!InputManager.IsVitaTV()) + { + buttonBack = eToolTipWhatIsThis; + } + else +#endif + { buttonRT = eToolTipWhatIsThis; } } @@ -1051,7 +1078,7 @@ void IUIScene_AbstractContainerMenu::onMouseTick() bool bValidIngredient=false; //bool bValidIngredientBottom=false; - if(Item::items[iId]->hasPotionBrewingFormula() || (iId == Item::netherStalkSeeds_Id)) + if(Item::items[iId]->hasPotionBrewingFormula() || (iId == Item::netherwart_seeds_Id)) { bValidIngredient=true; } @@ -1124,10 +1151,10 @@ void IUIScene_AbstractContainerMenu::onMouseTick() buttonY=eToolTipQuickMoveWeapon; break; - case Item::helmet_cloth_Id: - case Item::chestplate_cloth_Id: - case Item::leggings_cloth_Id: - case Item::boots_cloth_Id: + case Item::helmet_leather_Id: + case Item::chestplate_leather_Id: + case Item::leggings_leather_Id: + case Item::boots_leather_Id: case Item::helmet_chain_Id: case Item::chestplate_chain_Id: @@ -1201,13 +1228,13 @@ void IUIScene_AbstractContainerMenu::onMouseTick() shared_ptr item = nullptr; if(bPointerIsOverSlot && bSlotHasItem) item = getSlotItem(eSectionUnderPointer, iNewSlotIndex); - overrideTooltips(eSectionUnderPointer, item, bIsItemCarried, bSlotHasItem, bCarriedIsSameAsSlot, iSlotStackSizeRemaining, buttonA, buttonX, buttonY, buttonRT); + overrideTooltips(eSectionUnderPointer, item, bIsItemCarried, bSlotHasItem, bCarriedIsSameAsSlot, iSlotStackSizeRemaining, buttonA, buttonX, buttonY, buttonRT, buttonBack); SetToolTip( eToolTipButtonA, buttonA ); SetToolTip( eToolTipButtonX, buttonX ); SetToolTip( eToolTipButtonY, buttonY ); SetToolTip( eToolTipButtonRT, buttonRT ); - + SetToolTip( eToolTipButtonBack, buttonBack ); // Offset back to image top left. vPointerPos.x -= m_fPointerImageOffsetX; @@ -1278,7 +1305,7 @@ bool IUIScene_AbstractContainerMenu::handleKeyDown(int iPad, int iAction, bool b BOOL quickKeyHeld=FALSE; // Represents shift key on PC BOOL validKeyPress = FALSE; - //BOOL itemEditorKeyPress = FALSE; + bool itemEditorKeyPress = false; // Ignore input from other players //if(pMinecraft->player->GetXboxPad()!=pInputData->UserIndex) return S_OK; @@ -1286,11 +1313,9 @@ bool IUIScene_AbstractContainerMenu::handleKeyDown(int iPad, int iAction, bool b switch(iAction) { #ifdef _DEBUG_MENUS_ENABLED -#if TO_BE_IMPLEMENTED - case VK_PAD_RTHUMB_PRESS: + case ACTION_MENU_OTHER_STICK_PRESS: itemEditorKeyPress = TRUE; break; -#endif #endif case ACTION_MENU_A: #ifdef __ORBIS__ @@ -1419,13 +1444,7 @@ bool IUIScene_AbstractContainerMenu::handleKeyDown(int iPad, int iAction, bool b bHandled = true; } break; -#ifdef __PSVITA__ - //CD - Vita uses select for What's this - key 40 - case MINECRAFT_ACTION_GAME_INFO: -#else case ACTION_MENU_PAGEDOWN: -#endif - { if( IsSectionSlotList( m_eCurrSection ) ) { @@ -1491,46 +1510,18 @@ bool IUIScene_AbstractContainerMenu::handleKeyDown(int iPad, int iAction, bool b bHandled = true; } #ifdef _DEBUG_MENUS_ENABLED -#if TO_BE_IMPLEMENTED else if(itemEditorKeyPress == TRUE) { - HXUIOBJ hFocusObject = GetFocus(pInputData->UserIndex); - HXUIOBJ hFocusObjectParent; - XuiElementGetParent( hFocusObject, &hFocusObjectParent ); - - HXUICLASS hClassCXuiCtrlSlotList; - - // TODO Define values for these - hClassCXuiCtrlSlotList = XuiFindClass( L"CXuiCtrlSlotList" ); - - // If the press comes from a SlotList, cast it up then send a clicked call to it's menu - if( XuiIsInstanceOf( hFocusObjectParent, hClassCXuiCtrlSlotList ) ) - { - CXuiCtrlSlotList* slotList; - VOID *pObj; - XuiObjectFromHandle( hFocusObjectParent, &pObj ); - slotList = (CXuiCtrlSlotList *)pObj; - - int currentIndex = slotList->GetCurSel(); - - CXuiCtrlSlotItemListItem* pCXuiCtrlSlotItem; - slotList->GetCXuiCtrlSlotItem( currentIndex, &( pCXuiCtrlSlotItem ) ); - - //Minecraft *pMinecraft = Minecraft::GetInstance(); - - CScene_DebugItemEditor::ItemEditorInput *initData = new CScene_DebugItemEditor::ItemEditorInput(); - initData->iPad = m_iPad; - initData->slot = pCXuiCtrlSlotItem->getSlot( pCXuiCtrlSlotItem->m_hObj ); + if( IsSectionSlotList( m_eCurrSection ) ) + { + ItemEditorInput *initData = new ItemEditorInput(); + initData->iPad = getPad(); + initData->slot = getSlot( m_eCurrSection, getCurrentIndex(m_eCurrSection) ); initData->menu = m_menu; - // Add timer to poll controller stick input at 60Hz - HRESULT timerResult = KillTimer( POINTER_INPUT_TIMER_ID ); - assert( timerResult == S_OK ); - - app.NavigateToScene(m_iPad,eUIScene_DebugItemEditor,(void *)initData,false,TRUE); + ui.NavigateToScene(getPad(),eUIScene_DebugItemEditor,(void *)initData); } } -#endif #endif else { @@ -1552,7 +1543,7 @@ void IUIScene_AbstractContainerMenu::handleOutsideClicked(int iPad, int buttonNu // Drop items. //pMinecraft->localgameModes[m_iPad]->handleInventoryMouseClick(menu->containerId, AbstractContainerMenu::CLICKED_OUTSIDE, buttonNum, quickKeyHeld?true:false, pMinecraft->localplayers[m_iPad] ); - slotClicked(AbstractContainerMenu::CLICKED_OUTSIDE, buttonNum, quickKeyHeld?true:false); + slotClicked(AbstractContainerMenu::SLOT_CLICKED_OUTSIDE, buttonNum, quickKeyHeld?true:false); } void IUIScene_AbstractContainerMenu::handleOtherClicked(int iPad, ESceneSection eSection, int buttonNum, bool quickKey) @@ -1597,8 +1588,7 @@ bool IUIScene_AbstractContainerMenu::IsSameItemAs(shared_ptr itemA { if(itemA == NULL || itemB == NULL) return false; - bool bStackedByData = itemA->isStackedByData(); - return ( ( itemA->id == itemB->id ) && ( (bStackedByData && itemA->getAuxValue() == itemB->getAuxValue()) || !bStackedByData ) ); + return (itemA->id == itemB->id && (!itemB->isStackedByData() || itemB->getAuxValue() == itemA->getAuxValue()) && ItemInstance::tagMatches(itemB, itemA) ); } int IUIScene_AbstractContainerMenu::GetEmptyStackSpace(Slot *slot) @@ -1622,38 +1612,27 @@ int IUIScene_AbstractContainerMenu::GetEmptyStackSpace(Slot *slot) return iResult; } -wstring IUIScene_AbstractContainerMenu::GetItemDescription(Slot *slot, vector &unformattedStrings) +vector *IUIScene_AbstractContainerMenu::GetItemDescription(Slot *slot) { - if(slot == NULL) return L""; + if(slot == NULL) return NULL; + + vector *lines = slot->getItem()->getHoverText(nullptr, false); - wstring desc = L""; - vector *strings = slot->getItem()->getHoverText(nullptr, false, unformattedStrings); - bool firstLine = true; - for(AUTO_VAR(it, strings->begin()); it != strings->end(); ++it) + // Add rarity to first line + if (lines->size() > 0) { - wstring thisString = *it; - if(!firstLine) + lines->at(0).color = slot->getItem()->getRarity()->color; + + if(slot->getItem()->hasCustomHoverName()) { - desc.append( L"
" ); + lines->at(0).color = eTextColor_RenamedItemTitle; } - else - { - firstLine = false; - wchar_t formatted[256]; - eMinecraftColour rarityColour = slot->getItem()->getRarity()->color; - int colour = app.GetHTMLColour(rarityColour); + } - if(slot->getItem()->hasCustomHoverName()) - { - colour = app.GetHTMLColour(eTextColor_RenamedItemTitle); - } + return lines; +} - swprintf(formatted, 256, L"%ls",colour,thisString.c_str()); - thisString = formatted; - } - desc.append( thisString ); - } - strings->clear(); - delete strings; - return desc; +vector *IUIScene_AbstractContainerMenu::GetSectionHoverText(ESceneSection eSection) +{ + return NULL; } diff --git a/Minecraft.Client/Common/UI/IUIScene_AbstractContainerMenu.h b/Minecraft.Client/Common/UI/IUIScene_AbstractContainerMenu.h index bdb8bb4c..7d16f522 100644 --- a/Minecraft.Client/Common/UI/IUIScene_AbstractContainerMenu.h +++ b/Minecraft.Client/Common/UI/IUIScene_AbstractContainerMenu.h @@ -52,7 +52,6 @@ protected: eSectionInventoryCreativeUsing, eSectionInventoryCreativeSelector, -#ifndef _XBOX eSectionInventoryCreativeTab_0, eSectionInventoryCreativeTab_1, eSectionInventoryCreativeTab_2, @@ -62,7 +61,6 @@ protected: eSectionInventoryCreativeTab_6, eSectionInventoryCreativeTab_7, eSectionInventoryCreativeSlider, -#endif eSectionInventoryCreativeMax, eSectionEnchantUsing, @@ -88,6 +86,37 @@ protected: eSectionAnvilResult, eSectionAnvilName, eSectionAnvilMax, + + eSectionBeaconUsing, + eSectionBeaconInventory, + eSectionBeaconItem, + eSectionBeaconPrimaryTierOneOne, + eSectionBeaconPrimaryTierOneTwo, + eSectionBeaconPrimaryTierTwoOne, + eSectionBeaconPrimaryTierTwoTwo, + eSectionBeaconPrimaryTierThree, + eSectionBeaconSecondaryOne, + eSectionBeaconSecondaryTwo, + eSectionBeaconConfirm, + eSectionBeaconMax, + + eSectionHopperUsing, + eSectionHopperInventory, + eSectionHopperContents, + eSectionHopperMax, + + eSectionHorseUsing, + eSectionHorseInventory, + eSectionHorseChest, + eSectionHorseArmor, + eSectionHorseSaddle, + eSectionHorseMax, + + eSectionFireworksUsing, + eSectionFireworksInventory, + eSectionFireworksResult, + eSectionFireworksIngredients, + eSectionFireworksMax, }; AbstractContainerMenu* m_menu; @@ -162,13 +191,14 @@ protected: virtual bool IsSectionSlotList( ESceneSection eSection ) { return eSection != eSectionNone; } virtual bool CanHaveFocus( ESceneSection eSection ) { return true; } + virtual bool IsVisible( ESceneSection eSection ) { return true; } int GetSectionDimensions( ESceneSection eSection, int* piNumColumns, int* piNumRows ); virtual int getSectionColumns(ESceneSection eSection) = 0; virtual int getSectionRows(ESceneSection eSection) = 0; virtual ESceneSection GetSectionAndSlotInDirection( ESceneSection eSection, ETapState eTapDirection, int *piTargetX, int *piTargetY ) = 0; virtual void GetPositionOfSection( ESceneSection eSection, UIVec2D* pPosition ) = 0; virtual void GetItemScreenData( ESceneSection eSection, int iItemIndex, UIVec2D* pPosition, UIVec2D* pSize ) = 0; - void updateSlotPosition( ESceneSection eSection, ESceneSection newSection, ETapState eTapDirection, int *piTargetX, int *piTargetY, int xOffset ); + void updateSlotPosition( ESceneSection eSection, ESceneSection newSection, ETapState eTapDirection, int *piTargetX, int *piTargetY, int xOffset = 0, int yOffset = 0 ); #ifdef TAP_DETECTION ETapState GetTapInputType( float fInputX, float fInputY ); @@ -200,18 +230,32 @@ protected: virtual void setSectionFocus(ESceneSection eSection, int iPad) = 0; virtual void setSectionSelectedSlot(ESceneSection eSection, int x, int y) = 0; virtual void setFocusToPointer(int iPad) = 0; - virtual void SetPointerText(const wstring &description, vector &unformattedStrings, bool newSlot) = 0; + virtual void SetPointerText(vector *description, bool newSlot) = 0; + virtual vector *GetSectionHoverText(ESceneSection eSection); virtual shared_ptr getSlotItem(ESceneSection eSection, int iSlot) = 0; + virtual Slot *getSlot(ESceneSection eSection, int iSlot) = 0; virtual bool isSlotEmpty(ESceneSection eSection, int iSlot) = 0; virtual void adjustPointerForSafeZone() = 0; - virtual bool overrideTooltips(ESceneSection sectionUnderPointer, shared_ptr itemUnderPointer, bool bIsItemCarried, bool bSlotHasItem, bool bCarriedIsSameAsSlot, int iSlotStackSizeRemaining, - EToolTipItem &buttonA, EToolTipItem &buttonX, EToolTipItem &buttonY, EToolTipItem &buttonRT) { return false; } + virtual bool overrideTooltips( + ESceneSection sectionUnderPointer, + shared_ptr itemUnderPointer, + bool bIsItemCarried, + bool bSlotHasItem, + bool bCarriedIsSameAsSlot, + int iSlotStackSizeRemaining, + EToolTipItem &buttonA, + EToolTipItem &buttonX, + EToolTipItem &buttonY, + EToolTipItem &buttonRT, + EToolTipItem &buttonBack + ) { return false; } private: bool IsSameItemAs(shared_ptr itemA, shared_ptr itemB); int GetEmptyStackSpace(Slot *slot); - wstring GetItemDescription(Slot *slot, vector &unformattedStrings); + + vector *GetItemDescription(Slot *slot); protected: diff --git a/Minecraft.Client/Common/UI/IUIScene_AnvilMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_AnvilMenu.cpp index 81451c7a..10d1bcc4 100644 --- a/Minecraft.Client/Common/UI/IUIScene_AnvilMenu.cpp +++ b/Minecraft.Client/Common/UI/IUIScene_AnvilMenu.cpp @@ -206,7 +206,7 @@ void IUIScene_AnvilMenu::handleTick() m_costString = app.GetString(IDS_REPAIR_EXPENSIVE); canAfford = false; } - else if(!m_repairMenu->getSlot(RepairMenu::RESULT_SLOT)->hasItem()) + else if(!m_repairMenu->getSlot(AnvilMenu::RESULT_SLOT)->hasItem()) { // Do nothing } @@ -216,7 +216,7 @@ void IUIScene_AnvilMenu::handleTick() wchar_t temp[256]; swprintf(temp, 256, costString, m_repairMenu->cost); m_costString = temp; - if(!m_repairMenu->getSlot(RepairMenu::RESULT_SLOT)->mayPickup(dynamic_pointer_cast(m_inventory->player->shared_from_this()))) + if(!m_repairMenu->getSlot(AnvilMenu::RESULT_SLOT)->mayPickup(dynamic_pointer_cast(m_inventory->player->shared_from_this()))) { canAfford = false; } @@ -224,13 +224,13 @@ void IUIScene_AnvilMenu::handleTick() } setCostLabel(m_costString, canAfford); - bool crossVisible = (m_repairMenu->getSlot(RepairMenu::INPUT_SLOT)->hasItem() || m_repairMenu->getSlot(RepairMenu::ADDITIONAL_SLOT)->hasItem()) && !m_repairMenu->getSlot(RepairMenu::RESULT_SLOT)->hasItem(); + bool crossVisible = (m_repairMenu->getSlot(AnvilMenu::INPUT_SLOT)->hasItem() || m_repairMenu->getSlot(AnvilMenu::ADDITIONAL_SLOT)->hasItem()) && !m_repairMenu->getSlot(AnvilMenu::RESULT_SLOT)->hasItem(); showCross(crossVisible); } void IUIScene_AnvilMenu::updateItemName() { - Slot *slot = m_repairMenu->getSlot(RepairMenu::INPUT_SLOT); + Slot *slot = m_repairMenu->getSlot(AnvilMenu::INPUT_SLOT); if (slot != NULL && slot->hasItem()) { if (!slot->getItem()->hasCustomHoverName() && m_itemName.compare(slot->getItem()->getHoverName())==0) @@ -250,12 +250,12 @@ void IUIScene_AnvilMenu::updateItemName() void IUIScene_AnvilMenu::refreshContainer(AbstractContainerMenu *container, vector > *items) { - slotChanged(container, RepairMenu::INPUT_SLOT, container->getSlot(0)->getItem()); + slotChanged(container, AnvilMenu::INPUT_SLOT, container->getSlot(0)->getItem()); } void IUIScene_AnvilMenu::slotChanged(AbstractContainerMenu *container, int slotIndex, shared_ptr item) { - if (slotIndex == RepairMenu::INPUT_SLOT) + if (slotIndex == AnvilMenu::INPUT_SLOT) { m_itemName = item == NULL ? L"" : item->getHoverName(); setEditNameValue(m_itemName); diff --git a/Minecraft.Client/Common/UI/IUIScene_AnvilMenu.h b/Minecraft.Client/Common/UI/IUIScene_AnvilMenu.h index 6c4348f2..4e9e3aa7 100644 --- a/Minecraft.Client/Common/UI/IUIScene_AnvilMenu.h +++ b/Minecraft.Client/Common/UI/IUIScene_AnvilMenu.h @@ -11,13 +11,13 @@ #define ANVIL_SCENE_ITEM2_SLOT_DOWN_OFFSET 4 class Inventory; -class RepairMenu; +class AnvilMenu; class IUIScene_AnvilMenu : public virtual IUIScene_AbstractContainerMenu, public net_minecraft_world_inventory::ContainerListener { protected: shared_ptr m_inventory; - RepairMenu *m_repairMenu; + AnvilMenu *m_repairMenu; wstring m_itemName; protected: diff --git a/Minecraft.Client/Common/UI/IUIScene_BeaconMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_BeaconMenu.cpp new file mode 100644 index 00000000..76d21406 --- /dev/null +++ b/Minecraft.Client/Common/UI/IUIScene_BeaconMenu.cpp @@ -0,0 +1,410 @@ +#include "stdafx.h" +#include "..\Minecraft.World\CustomPayloadPacket.h" +#include "..\Minecraft.World\net.minecraft.world.inventory.h" +#include "..\Minecraft.World\net.minecraft.world.level.tile.entity.h" +#include "..\Minecraft.World\net.minecraft.world.effect.h" +#include "..\Minecraft.World\HtmlString.h" +#include "IUIScene_BeaconMenu.h" +#include "Minecraft.h" +#include "MultiPlayerLocalPlayer.h" +#include "ClientConnection.h" + +IUIScene_BeaconMenu::IUIScene_BeaconMenu() +{ + m_beacon = nullptr; + m_initPowerButtons = true; +} + +IUIScene_AbstractContainerMenu::ESceneSection IUIScene_BeaconMenu::GetSectionAndSlotInDirection( ESceneSection eSection, ETapState eTapDirection, int *piTargetX, int *piTargetY ) +{ + ESceneSection newSection = eSection; + + int xOffset = 0; + + // Find the new section if there is one + switch( eSection ) + { + case eSectionBeaconInventory: + if(eTapDirection == eTapStateDown) newSection = eSectionBeaconUsing; + else if(eTapDirection == eTapStateUp) + { + if( *piTargetX < 4 ) + { + newSection = eSectionBeaconPrimaryTierThree; + } + else if ( *piTargetX < 7) + { + newSection = eSectionBeaconItem; + } + else + { + newSection = eSectionBeaconConfirm; + } + } + break; + case eSectionBeaconUsing: + if(eTapDirection == eTapStateDown) + { + if( *piTargetX < 2) + { + newSection = eSectionBeaconPrimaryTierOneOne; + } + else if( *piTargetX < 5) + { + newSection = eSectionBeaconPrimaryTierOneTwo; + } + else if( *piTargetX > 8 && GetPowerButtonId(eSectionBeaconSecondaryTwo) > 0) + { + newSection = eSectionBeaconSecondaryTwo; + } + else + { + newSection = eSectionBeaconSecondaryOne; + } + } + else if(eTapDirection == eTapStateUp) newSection = eSectionBeaconInventory; + break; + case eSectionBeaconItem: + if(eTapDirection == eTapStateDown) + { + newSection = eSectionBeaconInventory; + xOffset = -5; + } + else if(eTapDirection == eTapStateUp) newSection = eSectionBeaconSecondaryOne; + else if(eTapDirection == eTapStateLeft) newSection = eSectionBeaconConfirm; + else if(eTapDirection == eTapStateRight) newSection = eSectionBeaconConfirm; + break; + case eSectionBeaconPrimaryTierOneOne: + if(eTapDirection == eTapStateDown) newSection = eSectionBeaconPrimaryTierTwoOne; + else if(eTapDirection == eTapStateUp) + { + newSection = eSectionBeaconUsing; + xOffset = -1; + } + else if(eTapDirection == eTapStateLeft) newSection = eSectionBeaconPrimaryTierOneTwo; + else if(eTapDirection == eTapStateRight) newSection = eSectionBeaconPrimaryTierOneTwo; + break; + case eSectionBeaconPrimaryTierOneTwo: + if(eTapDirection == eTapStateDown) newSection = eSectionBeaconPrimaryTierTwoTwo; + else if(eTapDirection == eTapStateUp) + { + newSection = eSectionBeaconUsing; + xOffset = -3; + } + else if(eTapDirection == eTapStateLeft) newSection = eSectionBeaconPrimaryTierOneOne; + else if(eTapDirection == eTapStateRight) newSection = eSectionBeaconPrimaryTierOneOne; + break; + case eSectionBeaconPrimaryTierTwoOne: + if(eTapDirection == eTapStateDown) newSection = eSectionBeaconPrimaryTierThree; + else if(eTapDirection == eTapStateUp) newSection = eSectionBeaconPrimaryTierOneOne; + else if(eTapDirection == eTapStateLeft) + { + if(GetPowerButtonId(eSectionBeaconSecondaryTwo) > 0) + { + newSection = eSectionBeaconSecondaryTwo; + } + else + { + newSection = eSectionBeaconSecondaryOne; + } + } + else if(eTapDirection == eTapStateRight) newSection = eSectionBeaconPrimaryTierTwoTwo; + break; + case eSectionBeaconPrimaryTierTwoTwo: + if(eTapDirection == eTapStateDown) newSection = eSectionBeaconPrimaryTierThree; + else if(eTapDirection == eTapStateUp) newSection = eSectionBeaconPrimaryTierOneTwo; + else if(eTapDirection == eTapStateLeft) newSection = eSectionBeaconPrimaryTierTwoOne; + else if(eTapDirection == eTapStateRight) newSection = eSectionBeaconSecondaryOne; + break; + case eSectionBeaconPrimaryTierThree: + if(eTapDirection == eTapStateDown) + { + newSection = eSectionBeaconInventory; + xOffset = -3; + } + else if(eTapDirection == eTapStateUp) newSection = eSectionBeaconPrimaryTierTwoOne; + break; + case eSectionBeaconSecondaryOne: + if(eTapDirection == eTapStateDown) newSection = eSectionBeaconItem; + else if(eTapDirection == eTapStateUp) + { + newSection = eSectionBeaconUsing; + xOffset = -7; + } + else if(eTapDirection == eTapStateLeft) newSection = eSectionBeaconPrimaryTierTwoTwo; + else if(eTapDirection == eTapStateRight) + { + if(GetPowerButtonId(eSectionBeaconSecondaryTwo) > 0) + { + newSection = eSectionBeaconSecondaryTwo; + } + else + { + newSection = eSectionBeaconPrimaryTierTwoOne; + } + } + break; + case eSectionBeaconSecondaryTwo: + if(eTapDirection == eTapStateDown) newSection = eSectionBeaconItem; + else if(eTapDirection == eTapStateUp) + { + newSection = eSectionBeaconUsing; + xOffset = -8; + } + else if(eTapDirection == eTapStateLeft) newSection = eSectionBeaconSecondaryOne; + else if(eTapDirection == eTapStateRight) newSection = eSectionBeaconPrimaryTierTwoOne; + break; + case eSectionBeaconConfirm: + if(eTapDirection == eTapStateDown) + { + newSection = eSectionBeaconInventory; + xOffset = -8; + } + else if(eTapDirection == eTapStateUp) + { + newSection = eSectionBeaconSecondaryOne; + } + else if(eTapDirection == eTapStateLeft) newSection = eSectionBeaconItem; + else if(eTapDirection == eTapStateRight) newSection = eSectionBeaconItem; + break; + default: + assert(false); + break; + } + + updateSlotPosition(eSection, newSection, eTapDirection, piTargetX, piTargetY, xOffset); + + return newSection; +} + +int IUIScene_BeaconMenu::getSectionStartOffset(IUIScene_AbstractContainerMenu::ESceneSection eSection) +{ + int offset = 0; + switch( eSection ) + { + case eSectionBeaconItem: + offset = BeaconMenu::PAYMENT_SLOT; + break; + case eSectionBeaconInventory: + offset = BeaconMenu::INV_SLOT_START; + break; + case eSectionBeaconUsing: + offset = BeaconMenu::USE_ROW_SLOT_START; + break; + default: + assert( false ); + break; + } + return offset; +} + +bool IUIScene_BeaconMenu::IsSectionSlotList( ESceneSection eSection ) +{ + switch( eSection ) + { + case eSectionBeaconItem: + case eSectionBeaconInventory: + case eSectionBeaconUsing: + return true; + } + return false; +} + +void IUIScene_BeaconMenu::handleOtherClicked(int iPad, ESceneSection eSection, int buttonNum, bool quickKey) +{ + switch(eSection) + { + case eSectionBeaconConfirm: + { + if( (m_beacon->getItem(0) == NULL) || (m_beacon->getPrimaryPower() <= 0) ) return; + ByteArrayOutputStream baos; + DataOutputStream dos(&baos); + dos.writeInt(m_beacon->getPrimaryPower()); + dos.writeInt(m_beacon->getSecondaryPower()); + + Minecraft::GetInstance()->localplayers[getPad()]->connection->send(shared_ptr(new CustomPayloadPacket(CustomPayloadPacket::SET_BEACON_PACKET, baos.toByteArray()))); + + if (m_beacon->getPrimaryPower() > 0) + { + int effectId = m_beacon->getPrimaryPower(); + + bool active = true; + bool selected = false; + + int tier = 3; + if (tier >= m_beacon->getLevels()) + { + active = false; + } + else if (effectId == m_beacon->getSecondaryPower()) + { + selected = true; + } + + AddPowerButton(GetId(tier, m_beacon->getPrimaryPower()), MobEffect::effects[m_beacon->getPrimaryPower()]->getIcon(), tier, 1, active, selected); + } + } + break; + case eSectionBeaconPrimaryTierOneOne: + case eSectionBeaconPrimaryTierOneTwo: + case eSectionBeaconPrimaryTierTwoOne: + case eSectionBeaconPrimaryTierTwoTwo: + case eSectionBeaconPrimaryTierThree: + case eSectionBeaconSecondaryOne: + case eSectionBeaconSecondaryTwo: + if(IsPowerButtonSelected(eSection)) + { + return; + } + + int id = GetPowerButtonId(eSection); + int effectId = (id & 0xff); + int tier = (id >> 8); + + if (tier < 3) + { + m_beacon->setPrimaryPower(effectId); + } + else + { + m_beacon->setSecondaryPower(effectId); + } + SetPowerButtonSelected(eSection); + break; + }; +} + +void IUIScene_BeaconMenu::handleTick() +{ + if (m_initPowerButtons && m_beacon->getLevels() >= 0) + { + m_initPowerButtons = false; + for (int tier = 0; tier <= 2; tier++) + { + int count = BeaconTileEntity::BEACON_EFFECTS_EFFECTS;//BEACON_EFFECTS[tier].length; + int totalWidth = count * 22 + (count - 1) * 2; + + for (int c = 0; c < count; c++) + { + if(BeaconTileEntity::BEACON_EFFECTS[tier][c] == NULL) continue; + + int effectId = BeaconTileEntity::BEACON_EFFECTS[tier][c]->id; + int icon = BeaconTileEntity::BEACON_EFFECTS[tier][c]->getIcon(); + + bool active = true; + bool selected = false; + + if (tier >= m_beacon->getLevels()) + { + active = false; + } + else if (effectId == m_beacon->getPrimaryPower()) + { + selected = true; + } + + AddPowerButton(GetId(tier, effectId), icon, tier, c, active, selected); + } + } + + { + int tier = 3; + + int count = BeaconTileEntity::BEACON_EFFECTS_EFFECTS + 1;//BEACON_EFFECTS[tier].length + 1; + int totalWidth = count * 22 + (count - 1) * 2; + + for (int c = 0; c < count - 1; c++) + { + if(BeaconTileEntity::BEACON_EFFECTS[tier][c] == NULL) continue; + + int effectId = BeaconTileEntity::BEACON_EFFECTS[tier][c]->id; + int icon = BeaconTileEntity::BEACON_EFFECTS[tier][c]->getIcon(); + + bool active = true; + bool selected = false; + + if (tier >= m_beacon->getLevels()) + { + active = false; + } + else if (effectId == m_beacon->getSecondaryPower()) + { + selected = true; + } + + AddPowerButton(GetId(tier, effectId), icon, tier, c, active, selected); + } + if (m_beacon->getPrimaryPower() > 0) + { + int effectId = m_beacon->getPrimaryPower(); + + bool active = true; + bool selected = false; + + if (tier >= m_beacon->getLevels()) + { + active = false; + } + else if (effectId == m_beacon->getSecondaryPower()) + { + selected = true; + } + + AddPowerButton(GetId(tier, m_beacon->getPrimaryPower()), MobEffect::effects[m_beacon->getPrimaryPower()]->getIcon(), tier, 1, active, selected); + } + } + } + + SetConfirmButtonEnabled( (m_beacon->getItem(0) != NULL) && (m_beacon->getPrimaryPower() > 0) ); +} + +int IUIScene_BeaconMenu::GetId(int tier, int effectId) +{ + return (tier << 8) | effectId; +} + +vector *IUIScene_BeaconMenu::GetSectionHoverText(ESceneSection eSection) +{ + vector *desc = NULL; + switch(eSection) + { + case eSectionBeaconSecondaryTwo: + if(GetPowerButtonId(eSectionBeaconSecondaryTwo) == 0) + { + // This isn't visible + break; + } + // Fall through otherwise + case eSectionBeaconPrimaryTierOneOne: + case eSectionBeaconPrimaryTierOneTwo: + case eSectionBeaconPrimaryTierTwoOne: + case eSectionBeaconPrimaryTierTwoTwo: + case eSectionBeaconPrimaryTierThree: + case eSectionBeaconSecondaryOne: + { + int id = GetPowerButtonId(eSection); + int effectId = (id & 0xff); + + desc = new vector(); + + HtmlString string( app.GetString(MobEffect::effects[effectId]->getDescriptionId()), eHTMLColor_White ); + desc->push_back( string ); + } + break; + } + return desc; +} + +bool IUIScene_BeaconMenu::IsVisible( ESceneSection eSection ) +{ + switch( eSection ) + { + case eSectionBeaconSecondaryTwo: + if(GetPowerButtonId(eSectionBeaconSecondaryTwo) == 0) + { + // This isn't visible + return false; + } + } + return true; +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/IUIScene_BeaconMenu.h b/Minecraft.Client/Common/UI/IUIScene_BeaconMenu.h new file mode 100644 index 00000000..1f5f7340 --- /dev/null +++ b/Minecraft.Client/Common/UI/IUIScene_BeaconMenu.h @@ -0,0 +1,31 @@ +#pragma once +#include "Common\UI\IUIScene_AbstractContainerMenu.h" + +class BeaconTileEntity; + +class IUIScene_BeaconMenu : public virtual IUIScene_AbstractContainerMenu +{ +public: + IUIScene_BeaconMenu(); + + virtual ESceneSection GetSectionAndSlotInDirection(ESceneSection eSection, ETapState eTapDirection, int *piTargetX, int *piTargetY); + int getSectionStartOffset(ESceneSection eSection); + virtual void handleOtherClicked(int iPad, ESceneSection eSection, int buttonNum, bool quickKey); + virtual bool IsSectionSlotList( ESceneSection eSection ); + virtual vector *GetSectionHoverText(ESceneSection eSection); + bool IsVisible( ESceneSection eSection ); + +protected: + void handleTick(); + int GetId(int tier, int effectId); + + virtual void SetConfirmButtonEnabled(bool enabled) = 0; + virtual void AddPowerButton(int id, int icon, int tier, int count, bool active, bool selected) = 0; + virtual int GetPowerButtonId(ESceneSection eSection) = 0; + virtual bool IsPowerButtonSelected(ESceneSection eSection) = 0; + virtual void SetPowerButtonSelected(ESceneSection eSection) = 0; + + shared_ptr m_beacon; + bool m_initPowerButtons; +}; + diff --git a/Minecraft.Client/Common/UI/IUIScene_CommandBlockMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_CommandBlockMenu.cpp new file mode 100644 index 00000000..4371b4e5 --- /dev/null +++ b/Minecraft.Client/Common/UI/IUIScene_CommandBlockMenu.cpp @@ -0,0 +1,25 @@ +#include "stdafx.h" +#include "../../../Minecraft.World/CustomPayloadPacket.h" +#include "MultiPlayerLocalPlayer.h" +#include "ClientConnection.h" +#include "IUIScene_CommandBlockMenu.h" + +void IUIScene_CommandBlockMenu::Initialise(CommandBlockEntity *commandBlock) +{ + m_commandBlock = commandBlock; + SetCommand(m_commandBlock->getCommand()); +} + +void IUIScene_CommandBlockMenu::ConfirmButtonClicked() +{ + ByteArrayOutputStream baos; + DataOutputStream dos(&baos); + + dos.writeInt(m_commandBlock->x); + dos.writeInt(m_commandBlock->y); + dos.writeInt(m_commandBlock->z); + dos.writeUTF(GetCommand()); + + Minecraft::GetInstance()->localplayers[GetPad()]->connection->send(shared_ptr(new CustomPayloadPacket(CustomPayloadPacket::SET_ADVENTURE_COMMAND_PACKET, baos.toByteArray()))); +} + diff --git a/Minecraft.Client/Common/UI/IUIScene_CommandBlockMenu.h b/Minecraft.Client/Common/UI/IUIScene_CommandBlockMenu.h new file mode 100644 index 00000000..db0aff82 --- /dev/null +++ b/Minecraft.Client/Common/UI/IUIScene_CommandBlockMenu.h @@ -0,0 +1,18 @@ +#pragma once +#include "../Minecraft.World/net.minecraft.world.level.tile.entity.h" + +class IUIScene_CommandBlockMenu +{ +public: + void Initialise(CommandBlockEntity *commandBlock); + +protected: + void ConfirmButtonClicked(); + + virtual wstring GetCommand(); + virtual void SetCommand(wstring command); + virtual int GetPad(); + +private: + CommandBlockEntity *m_commandBlock; +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/IUIScene_CraftingMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_CraftingMenu.cpp index f158b174..05a44202 100644 --- a/Minecraft.Client/Common/UI/IUIScene_CraftingMenu.cpp +++ b/Minecraft.Client/Common/UI/IUIScene_CraftingMenu.cpp @@ -267,65 +267,68 @@ bool IUIScene_CraftingMenu::handleKeyDown(int iPad, int iAction, bool bRepeat) //pMinecraft->soundEngine->playUI( L"random.pop", 1.0f, 1.0f); ui.PlayUISFX(eSFX_Craft); - // and remove those resources from your inventory - for(int i=0;iid != Item::fireworksCharge_Id && pTempItemInst->id != Item::fireworks_Id) { - for(int j=0;j ingItemInst = nullptr; - // do we need to remove a specific aux value? - if(pRecipeIngredientsRequired[iRecipe].iIngAuxValA[i]!=Recipes::ANY_AUX_VALUE) + for(int j=0;jinventory->getResourceItem( pRecipeIngredientsRequired[iRecipe].iIngIDA[i],pRecipeIngredientsRequired[iRecipe].iIngAuxValA[i] ); - m_pPlayer->inventory->removeResource(pRecipeIngredientsRequired[iRecipe].iIngIDA[i],pRecipeIngredientsRequired[iRecipe].iIngAuxValA[i]); - } - else - { - ingItemInst = m_pPlayer->inventory->getResourceItem( pRecipeIngredientsRequired[iRecipe].iIngIDA[i] ); - m_pPlayer->inventory->removeResource(pRecipeIngredientsRequired[iRecipe].iIngIDA[i]); - } - - // 4J Stu - Fix for #13097 - Bug: Milk Buckets are removed when crafting Cake - if (ingItemInst != NULL) - { - if (ingItemInst->getItem()->hasCraftingRemainingItem()) + shared_ptr ingItemInst = nullptr; + // do we need to remove a specific aux value? + if(pRecipeIngredientsRequired[iRecipe].iIngAuxValA[i]!=Recipes::ANY_AUX_VALUE) + { + ingItemInst = m_pPlayer->inventory->getResourceItem( pRecipeIngredientsRequired[iRecipe].iIngIDA[i],pRecipeIngredientsRequired[iRecipe].iIngAuxValA[i] ); + m_pPlayer->inventory->removeResource(pRecipeIngredientsRequired[iRecipe].iIngIDA[i],pRecipeIngredientsRequired[iRecipe].iIngAuxValA[i]); + } + else { - // replace item with remaining result - m_pPlayer->inventory->add( shared_ptr( new ItemInstance(ingItemInst->getItem()->getCraftingRemainingItem()) ) ); + ingItemInst = m_pPlayer->inventory->getResourceItem( pRecipeIngredientsRequired[iRecipe].iIngIDA[i] ); + m_pPlayer->inventory->removeResource(pRecipeIngredientsRequired[iRecipe].iIngIDA[i]); } + // 4J Stu - Fix for #13097 - Bug: Milk Buckets are removed when crafting Cake + if (ingItemInst != NULL) + { + if (ingItemInst->getItem()->hasCraftingRemainingItem()) + { + // replace item with remaining result + m_pPlayer->inventory->add( shared_ptr( new ItemInstance(ingItemInst->getItem()->getCraftingRemainingItem()) ) ); + } + + } } } - } - // 4J Stu - Fix for #13119 - We should add the item after we remove the ingredients - if(m_pPlayer->inventory->add(pTempItemInst)==false ) - { - // no room in inventory, so throw it down - m_pPlayer->drop(pTempItemInst); - } + // 4J Stu - Fix for #13119 - We should add the item after we remove the ingredients + if(m_pPlayer->inventory->add(pTempItemInst)==false ) + { + // no room in inventory, so throw it down + m_pPlayer->drop(pTempItemInst); + } - //4J Gordon: Achievements - switch(pTempItemInst->id ) - { - case Tile::workBench_Id: m_pPlayer->awardStat(GenericStats::buildWorkbench(), GenericStats::param_buildWorkbench()); break; - case Item::pickAxe_wood_Id: m_pPlayer->awardStat(GenericStats::buildPickaxe(), GenericStats::param_buildPickaxe()); break; - case Tile::furnace_Id: m_pPlayer->awardStat(GenericStats::buildFurnace(), GenericStats::param_buildFurnace()); break; - case Item::hoe_wood_Id: m_pPlayer->awardStat(GenericStats::buildHoe(), GenericStats::param_buildHoe()); break; - case Item::bread_Id: m_pPlayer->awardStat(GenericStats::makeBread(), GenericStats::param_makeBread()); break; - case Item::cake_Id: m_pPlayer->awardStat(GenericStats::bakeCake(), GenericStats::param_bakeCake()); break; - case Item::pickAxe_stone_Id: m_pPlayer->awardStat(GenericStats::buildBetterPickaxe(), GenericStats::param_buildBetterPickaxe()); break; - case Item::sword_wood_Id: m_pPlayer->awardStat(GenericStats::buildSword(), GenericStats::param_buildSword()); break; - case Tile::dispenser_Id: m_pPlayer->awardStat(GenericStats::dispenseWithThis(), GenericStats::param_dispenseWithThis()); break; - case Tile::enchantTable_Id: m_pPlayer->awardStat(GenericStats::enchantments(), GenericStats::param_enchantments()); break; - case Tile::bookshelf_Id: m_pPlayer->awardStat(GenericStats::bookcase(), GenericStats::param_bookcase()); break; - } + //4J Gordon: Achievements + switch(pTempItemInst->id ) + { + case Tile::workBench_Id: m_pPlayer->awardStat(GenericStats::buildWorkbench(), GenericStats::param_buildWorkbench()); break; + case Item::pickAxe_wood_Id: m_pPlayer->awardStat(GenericStats::buildPickaxe(), GenericStats::param_buildPickaxe()); break; + case Tile::furnace_Id: m_pPlayer->awardStat(GenericStats::buildFurnace(), GenericStats::param_buildFurnace()); break; + case Item::hoe_wood_Id: m_pPlayer->awardStat(GenericStats::buildHoe(), GenericStats::param_buildHoe()); break; + case Item::bread_Id: m_pPlayer->awardStat(GenericStats::makeBread(), GenericStats::param_makeBread()); break; + case Item::cake_Id: m_pPlayer->awardStat(GenericStats::bakeCake(), GenericStats::param_bakeCake()); break; + case Item::pickAxe_stone_Id: m_pPlayer->awardStat(GenericStats::buildBetterPickaxe(), GenericStats::param_buildBetterPickaxe()); break; + case Item::sword_wood_Id: m_pPlayer->awardStat(GenericStats::buildSword(), GenericStats::param_buildSword()); break; + case Tile::dispenser_Id: m_pPlayer->awardStat(GenericStats::dispenseWithThis(), GenericStats::param_dispenseWithThis()); break; + case Tile::enchantTable_Id: m_pPlayer->awardStat(GenericStats::enchantments(), GenericStats::param_enchantments()); break; + case Tile::bookshelf_Id: m_pPlayer->awardStat(GenericStats::bookcase(), GenericStats::param_bookcase()); break; + } - // We've used some ingredients from our inventory, so update the recipes we can make - CheckRecipesAvailable(); - // don't reset the vertical slots - we want to stay where we are - UpdateVerticalSlots(); - UpdateHighlight(); + // We've used some ingredients from our inventory, so update the recipes we can make + CheckRecipesAvailable(); + // don't reset the vertical slots - we want to stay where we are + UpdateVerticalSlots(); + UpdateHighlight(); + } } else { @@ -1067,35 +1070,43 @@ void IUIScene_CraftingMenu::DisplayIngredients() int id=pRecipeIngredientsRequired[iRecipe].iIngIDA[i]; int iAuxVal=pRecipeIngredientsRequired[iRecipe].iIngAuxValA[i]; Item *item = Item::items[id]; - if( (iAuxVal & 0xFF) == 0xFF) // 4J Stu - If the aux value is set to match any - iAuxVal = 0; - - // 4J Stu - For clocks and compasses we set the aux value to a special one that signals we should use a default texture - // rather than the dynamic one for the player - if( id == Item::clock_Id || id == Item::compass_Id ) - { - iAuxVal = 0xFF; - } shared_ptr itemInst= shared_ptr(new ItemInstance(item,pRecipeIngredientsRequired[iRecipe].iIngValA[i],iAuxVal)); - setIngredientDescriptionItem(getPad(),i,itemInst); - setIngredientDescriptionRedBox(i,false); - // 4J-PB - a very special case - the bed can use any kind of wool, so we can't use the item description // and the same goes for the painting int idescID; - if( ((pTempItemInst->id==Item::bed_Id) &&(id==Tile::cloth_Id)) || - ((pTempItemInst->id==Item::painting_Id) &&(id==Tile::cloth_Id)) ) + if( ((pTempItemInst->id==Item::bed_Id) &&(id==Tile::wool_Id)) || + ((pTempItemInst->id==Item::painting_Id) &&(id==Tile::wool_Id)) ) { idescID=IDS_ANY_WOOL; } + else if((pTempItemInst->id==Item::fireworksCharge_Id) && (id==Item::dye_powder_Id)) + { + idescID=IDS_ITEM_DYE_POWDER; + iAuxVal = 1; + } else { idescID=itemInst->getDescriptionId(); } setIngredientDescriptionText(i,app.GetString(idescID)); + + + if( (iAuxVal & 0xFF) == 0xFF) // 4J Stu - If the aux value is set to match any + iAuxVal = 0; + + // 4J Stu - For clocks and compasses we set the aux value to a special one that signals we should use a default texture + // rather than the dynamic one for the player + if( id == Item::clock_Id || id == Item::compass_Id ) + { + iAuxVal = 0xFF; + } + itemInst->setAuxValue(iAuxVal); + + setIngredientDescriptionItem(getPad(),i,itemInst); + setIngredientDescriptionRedBox(i,false); } // 4J Stu - For clocks and compasses we set the aux value to a special one that signals we should use a default texture @@ -1141,6 +1152,10 @@ void IUIScene_CraftingMenu::DisplayIngredients() { iAuxVal = 0xFF; } + else if( pTempItemInst->id==Item::fireworksCharge_Id && id == Item::dye_powder_Id) + { + iAuxVal = 1; + } shared_ptr itemInst= shared_ptr(new ItemInstance(id,1,iAuxVal)); setIngredientSlotItem(getPad(),index,itemInst); // show the ingredients we don't have if we can't make the recipe @@ -1368,6 +1383,15 @@ void IUIScene_CraftingMenu::UpdateTooltips() }*/ } +void IUIScene_CraftingMenu::HandleInventoryUpdated() +{ + // Check which recipes are available with the resources we have + CheckRecipesAvailable(); + UpdateVerticalSlots(); + UpdateHighlight(); + UpdateTooltips(); +} + bool IUIScene_CraftingMenu::isItemSelected(int itemId) { bool isSelected = false; diff --git a/Minecraft.Client/Common/UI/IUIScene_CraftingMenu.h b/Minecraft.Client/Common/UI/IUIScene_CraftingMenu.h index 05227fff..03a58378 100644 --- a/Minecraft.Client/Common/UI/IUIScene_CraftingMenu.h +++ b/Minecraft.Client/Common/UI/IUIScene_CraftingMenu.h @@ -86,6 +86,7 @@ protected: void DisplayIngredients(); void UpdateTooltips(); void UpdateDescriptionText(bool); + void HandleInventoryUpdated(); public: Recipy::_eGroupType getCurrentGroup() { return m_pGroupA[m_iGroupIndex]; } diff --git a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp index 7ce33234..c3348e58 100644 --- a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp +++ b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp @@ -8,6 +8,9 @@ #include "..\..\..\Minecraft.World\net.minecraft.world.level.tile.entity.h" #include "..\..\..\Minecraft.World\net.minecraft.world.item.h" #include "..\..\..\Minecraft.World\net.minecraft.world.item.enchantment.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.entity.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.entity.animal.h" +#include "..\..\..\Minecraft.World\JavaMath.h" // 4J JEV - Images for each tab. IUIScene_CreativeMenu::TabSpec **IUIScene_CreativeMenu::specs = NULL; @@ -26,14 +29,15 @@ void IUIScene_CreativeMenu::staticCtor() // Building Blocks DEF(eCreativeInventory_BuildingBlocks) - ITEM(Tile::rock_Id) + ITEM(Tile::stone_Id) ITEM(Tile::grass_Id) ITEM(Tile::dirt_Id) - ITEM(Tile::stoneBrick_Id) + ITEM(Tile::cobblestone_Id) ITEM(Tile::sand_Id) ITEM(Tile::sandStone_Id) ITEM_AUX(Tile::sandStone_Id, SandStoneTile::TYPE_SMOOTHSIDE) ITEM_AUX(Tile::sandStone_Id, SandStoneTile::TYPE_HEIROGLYPHS) + ITEM(Tile::coalBlock_Id) ITEM(Tile::goldBlock_Id) ITEM(Tile::ironBlock_Id) ITEM(Tile::lapisBlock_Id) @@ -59,24 +63,29 @@ void IUIScene_CreativeMenu::staticCtor() ITEM_AUX(Tile::treeTrunk_Id, TreeTile::JUNGLE_TRUNK) ITEM(Tile::gravel_Id) ITEM(Tile::redBrick_Id) - ITEM(Tile::mossStone_Id) + ITEM(Tile::mossyCobblestone_Id) ITEM(Tile::obsidian_Id) ITEM(Tile::clay) ITEM(Tile::ice_Id) ITEM(Tile::snow_Id) - ITEM(Tile::hellRock_Id) - ITEM(Tile::hellSand_Id) - ITEM(Tile::lightGem_Id) - ITEM_AUX(Tile::stoneBrickSmooth_Id,SmoothStoneBrickTile::TYPE_DEFAULT) - ITEM_AUX(Tile::stoneBrickSmooth_Id,SmoothStoneBrickTile::TYPE_MOSSY) - ITEM_AUX(Tile::stoneBrickSmooth_Id,SmoothStoneBrickTile::TYPE_CRACKED) - ITEM_AUX(Tile::stoneBrickSmooth_Id,SmoothStoneBrickTile::TYPE_DETAIL) + ITEM(Tile::netherRack_Id) + ITEM(Tile::soulsand_Id) + ITEM(Tile::glowstone_Id) + ITEM(Tile::fence_Id) + ITEM(Tile::netherFence_Id) + ITEM(Tile::ironFence_Id) + ITEM_AUX(Tile::cobbleWall_Id, WallTile::TYPE_NORMAL) + ITEM_AUX(Tile::cobbleWall_Id, WallTile::TYPE_MOSSY) + ITEM_AUX(Tile::stoneBrick_Id,SmoothStoneBrickTile::TYPE_DEFAULT) + ITEM_AUX(Tile::stoneBrick_Id,SmoothStoneBrickTile::TYPE_MOSSY) + ITEM_AUX(Tile::stoneBrick_Id,SmoothStoneBrickTile::TYPE_CRACKED) + ITEM_AUX(Tile::stoneBrick_Id,SmoothStoneBrickTile::TYPE_DETAIL) ITEM_AUX(Tile::monsterStoneEgg_Id,StoneMonsterTile::HOST_ROCK) ITEM_AUX(Tile::monsterStoneEgg_Id,StoneMonsterTile::HOST_COBBLE) ITEM_AUX(Tile::monsterStoneEgg_Id,StoneMonsterTile::HOST_STONEBRICK) ITEM(Tile::mycel_Id) ITEM(Tile::netherBrick_Id) - ITEM(Tile::whiteStone_Id) + ITEM(Tile::endStone_Id) ITEM_AUX(Tile::quartzBlock_Id,QuartzBlockTile::TYPE_CHISELED) ITEM_AUX(Tile::quartzBlock_Id,QuartzBlockTile::TYPE_LINES_Y) ITEM(Tile::trapdoor_Id) @@ -102,11 +111,28 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Tile::stairs_junglewood_Id) ITEM(Tile::stairs_stone_Id) ITEM(Tile::stairs_bricks_Id) - ITEM(Tile::stairs_stoneBrickSmooth_Id) + ITEM(Tile::stairs_stoneBrick_Id) ITEM(Tile::stairs_netherBricks_Id) ITEM(Tile::stairs_sandstone_Id) ITEM(Tile::stairs_quartz_Id) + ITEM(Tile::clayHardened_Id) + ITEM_AUX(Tile::clayHardened_colored_Id,14) // Red + ITEM_AUX(Tile::clayHardened_colored_Id,1) // Orange + ITEM_AUX(Tile::clayHardened_colored_Id,4) // Yellow + ITEM_AUX(Tile::clayHardened_colored_Id,5) // Lime + ITEM_AUX(Tile::clayHardened_colored_Id,3) // Light Blue + ITEM_AUX(Tile::clayHardened_colored_Id,9) // Cyan + ITEM_AUX(Tile::clayHardened_colored_Id,11) // Blue + ITEM_AUX(Tile::clayHardened_colored_Id,10) // Purple + ITEM_AUX(Tile::clayHardened_colored_Id,2) // Magenta + ITEM_AUX(Tile::clayHardened_colored_Id,6) // Pink + ITEM_AUX(Tile::clayHardened_colored_Id,0) // White + ITEM_AUX(Tile::clayHardened_colored_Id,8) // Light Gray + ITEM_AUX(Tile::clayHardened_colored_Id,7) // Gray + ITEM_AUX(Tile::clayHardened_colored_Id,15) // Black + ITEM_AUX(Tile::clayHardened_colored_Id,13) // Green + ITEM_AUX(Tile::clayHardened_colored_Id,12) // Brown // Decoration DEF(eCreativeInventory_Decoration) @@ -136,8 +162,8 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Tile::deadBush_Id) ITEM(Tile::flower_Id) ITEM(Tile::rose_Id) - ITEM(Tile::mushroom1_Id) - ITEM(Tile::mushroom2_Id) + ITEM(Tile::mushroom_brown_Id) + ITEM(Tile::mushroom_red_Id) ITEM(Tile::cactus_Id) ITEM(Tile::topSnow_Id) // 4J-PB - Already got sugar cane in Materials ITEM_11(Tile::reeds_Id) @@ -149,22 +175,23 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Item::sign_Id) ITEM(Tile::bookshelf_Id) ITEM(Item::flowerPot_Id) - ITEM_AUX(Tile::cloth_Id,14) // Red - ITEM_AUX(Tile::cloth_Id,1) // Orange - ITEM_AUX(Tile::cloth_Id,4) // Yellow - ITEM_AUX(Tile::cloth_Id,5) // Lime - ITEM_AUX(Tile::cloth_Id,3) // Light Blue - ITEM_AUX(Tile::cloth_Id,9) // Cyan - ITEM_AUX(Tile::cloth_Id,11) // Blue - ITEM_AUX(Tile::cloth_Id,10) // Purple - ITEM_AUX(Tile::cloth_Id,2) // Magenta - ITEM_AUX(Tile::cloth_Id,6) // Pink - ITEM_AUX(Tile::cloth_Id,0) // White - ITEM_AUX(Tile::cloth_Id,8) // Light Gray - ITEM_AUX(Tile::cloth_Id,7) // Gray - ITEM_AUX(Tile::cloth_Id,15) // Black - ITEM_AUX(Tile::cloth_Id,13) // Green - ITEM_AUX(Tile::cloth_Id,12) // Brown + ITEM(Tile::hayBlock_Id) + ITEM_AUX(Tile::wool_Id,14) // Red + ITEM_AUX(Tile::wool_Id,1) // Orange + ITEM_AUX(Tile::wool_Id,4) // Yellow + ITEM_AUX(Tile::wool_Id,5) // Lime + ITEM_AUX(Tile::wool_Id,3) // Light Blue + ITEM_AUX(Tile::wool_Id,9) // Cyan + ITEM_AUX(Tile::wool_Id,11) // Blue + ITEM_AUX(Tile::wool_Id,10) // Purple + ITEM_AUX(Tile::wool_Id,2) // Magenta + ITEM_AUX(Tile::wool_Id,6) // Pink + ITEM_AUX(Tile::wool_Id,0) // White + ITEM_AUX(Tile::wool_Id,8) // Light Gray + ITEM_AUX(Tile::wool_Id,7) // Gray + ITEM_AUX(Tile::wool_Id,15) // Black + ITEM_AUX(Tile::wool_Id,13) // Green + ITEM_AUX(Tile::wool_Id,12) // Brown ITEM_AUX(Tile::woolCarpet_Id,14) // Red ITEM_AUX(Tile::woolCarpet_Id,1) // Orange @@ -183,11 +210,102 @@ void IUIScene_CreativeMenu::staticCtor() ITEM_AUX(Tile::woolCarpet_Id,13) // Green ITEM_AUX(Tile::woolCarpet_Id,12) // Brown +#if 0 + ITEM_AUX(Tile::stained_glass_Id,14) // Red + ITEM_AUX(Tile::stained_glass_Id,1) // Orange + ITEM_AUX(Tile::stained_glass_Id,4) // Yellow + ITEM_AUX(Tile::stained_glass_Id,5) // Lime + ITEM_AUX(Tile::stained_glass_Id,3) // Light Blue + ITEM_AUX(Tile::stained_glass_Id,9) // Cyan + ITEM_AUX(Tile::stained_glass_Id,11) // Blue + ITEM_AUX(Tile::stained_glass_Id,10) // Purple + ITEM_AUX(Tile::stained_glass_Id,2) // Magenta + ITEM_AUX(Tile::stained_glass_Id,6) // Pink + ITEM_AUX(Tile::stained_glass_Id,0) // White + ITEM_AUX(Tile::stained_glass_Id,8) // Light Gray + ITEM_AUX(Tile::stained_glass_Id,7) // Gray + ITEM_AUX(Tile::stained_glass_Id,15) // Black + ITEM_AUX(Tile::stained_glass_Id,13) // Green + ITEM_AUX(Tile::stained_glass_Id,12) // Brown + + ITEM_AUX(Tile::stained_glass_pane_Id,14) // Red + ITEM_AUX(Tile::stained_glass_pane_Id,1) // Orange + ITEM_AUX(Tile::stained_glass_pane_Id,4) // Yellow + ITEM_AUX(Tile::stained_glass_pane_Id,5) // Lime + ITEM_AUX(Tile::stained_glass_pane_Id,3) // Light Blue + ITEM_AUX(Tile::stained_glass_pane_Id,9) // Cyan + ITEM_AUX(Tile::stained_glass_pane_Id,11) // Blue + ITEM_AUX(Tile::stained_glass_pane_Id,10) // Purple + ITEM_AUX(Tile::stained_glass_pane_Id,2) // Magenta + ITEM_AUX(Tile::stained_glass_pane_Id,6) // Pink + ITEM_AUX(Tile::stained_glass_pane_Id,0) // White + ITEM_AUX(Tile::stained_glass_pane_Id,8) // Light Gray + ITEM_AUX(Tile::stained_glass_pane_Id,7) // Gray + ITEM_AUX(Tile::stained_glass_pane_Id,15) // Black + ITEM_AUX(Tile::stained_glass_pane_Id,13) // Green + ITEM_AUX(Tile::stained_glass_pane_Id,12) // Brown +#endif + +#ifndef _CONTENT_PACKAGE + DEF(eCreativeInventory_ArtToolsDecorations) + if(app.DebugSettingsOn()) + { + for(unsigned int i = 0; i < Painting::LAST_VALUE; ++i) + { + ITEM_AUX(Item::painting_Id, i + 1) + } + + BuildFirework(list, FireworksItem::TYPE_BIG, DyePowderItem::PURPLE, 1, false, false); + + BuildFirework(list, FireworksItem::TYPE_SMALL, DyePowderItem::RED, 1, false, false); + BuildFirework(list, FireworksItem::TYPE_SMALL, DyePowderItem::RED, 2, false, false); + BuildFirework(list, FireworksItem::TYPE_SMALL, DyePowderItem::RED, 3, false, false); + + BuildFirework(list, FireworksItem::TYPE_BURST, DyePowderItem::GREEN, 1, false, true); + BuildFirework(list, FireworksItem::TYPE_CREEPER, DyePowderItem::BLUE, 1, true, false); + BuildFirework(list, FireworksItem::TYPE_STAR, DyePowderItem::YELLOW, 1, false, false); + BuildFirework(list, FireworksItem::TYPE_BIG, DyePowderItem::WHITE, 1, true, true); + + ITEM_AUX(Tile::stained_glass_Id,14) // Red + ITEM_AUX(Tile::stained_glass_Id,1) // Orange + ITEM_AUX(Tile::stained_glass_Id,4) // Yellow + ITEM_AUX(Tile::stained_glass_Id,5) // Lime + ITEM_AUX(Tile::stained_glass_Id,3) // Light Blue + ITEM_AUX(Tile::stained_glass_Id,9) // Cyan + ITEM_AUX(Tile::stained_glass_Id,11) // Blue + ITEM_AUX(Tile::stained_glass_Id,10) // Purple + ITEM_AUX(Tile::stained_glass_Id,2) // Magenta + ITEM_AUX(Tile::stained_glass_Id,6) // Pink + ITEM_AUX(Tile::stained_glass_Id,0) // White + ITEM_AUX(Tile::stained_glass_Id,8) // Light Gray + ITEM_AUX(Tile::stained_glass_Id,7) // Gray + ITEM_AUX(Tile::stained_glass_Id,15) // Black + ITEM_AUX(Tile::stained_glass_Id,13) // Green + ITEM_AUX(Tile::stained_glass_Id,12) // Brown + + ITEM_AUX(Tile::stained_glass_pane_Id,14) // Red + ITEM_AUX(Tile::stained_glass_pane_Id,1) // Orange + ITEM_AUX(Tile::stained_glass_pane_Id,4) // Yellow + ITEM_AUX(Tile::stained_glass_pane_Id,5) // Lime + ITEM_AUX(Tile::stained_glass_pane_Id,3) // Light Blue + ITEM_AUX(Tile::stained_glass_pane_Id,9) // Cyan + ITEM_AUX(Tile::stained_glass_pane_Id,11) // Blue + ITEM_AUX(Tile::stained_glass_pane_Id,10) // Purple + ITEM_AUX(Tile::stained_glass_pane_Id,2) // Magenta + ITEM_AUX(Tile::stained_glass_pane_Id,6) // Pink + ITEM_AUX(Tile::stained_glass_pane_Id,0) // White + ITEM_AUX(Tile::stained_glass_pane_Id,8) // Light Gray + ITEM_AUX(Tile::stained_glass_pane_Id,7) // Gray + ITEM_AUX(Tile::stained_glass_pane_Id,15) // Black + ITEM_AUX(Tile::stained_glass_pane_Id,13) // Green + ITEM_AUX(Tile::stained_glass_pane_Id,12) // Brown + } +#endif // Redstone DEF(eCreativeInventory_Redstone) ITEM(Tile::dispenser_Id) - ITEM(Tile::musicBlock_Id) + ITEM(Tile::noteblock_Id) ITEM(Tile::pistonBase_Id) ITEM(Tile::pistonStickyBase_Id) ITEM(Tile::tnt_Id) @@ -197,20 +315,31 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Tile::pressurePlate_stone_Id) ITEM(Tile::pressurePlate_wood_Id) ITEM(Item::redStone_Id) - ITEM(Tile::notGate_on_Id) - ITEM(Item::diode_Id) + ITEM(Tile::redstoneBlock_Id) + ITEM(Tile::redstoneTorch_on_Id) + ITEM(Item::repeater_Id) ITEM(Tile::redstoneLight_Id) ITEM(Tile::tripWireSource_Id) + ITEM(Tile::daylightDetector_Id) + ITEM(Tile::dropper_Id) + ITEM(Tile::hopper_Id) + ITEM(Item::comparator_Id) + ITEM(Tile::chest_trap_Id) + ITEM(Tile::weightedPlate_heavy_Id) + ITEM(Tile::weightedPlate_light_Id) // Transport DEF(eCreativeInventory_Transport) ITEM(Tile::rail_Id) ITEM(Tile::goldenRail_Id) ITEM(Tile::detectorRail_Id) + ITEM(Tile::activatorRail_Id) ITEM(Tile::ladder_Id) ITEM(Item::minecart_Id) ITEM(Item::minecart_chest_Id) ITEM(Item::minecart_furnace_Id) + ITEM(Item::minecart_hopper_Id) + ITEM(Item::minecart_tnt_Id) ITEM(Item::saddle_Id) ITEM(Item::boat_Id) @@ -222,25 +351,49 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Tile::furnace_Id) ITEM(Item::brewingStand_Id) ITEM(Tile::enchantTable_Id) + ITEM(Tile::beacon_Id) ITEM(Tile::endPortalFrameTile_Id) - ITEM(Tile::recordPlayer_Id) + ITEM(Tile::jukebox_Id) ITEM(Tile::anvil_Id); - ITEM(Tile::fence_Id) - ITEM(Tile::netherFence_Id) - ITEM(Tile::ironFence_Id) - ITEM_AUX(Tile::cobbleWall_Id, WallTile::TYPE_NORMAL) - ITEM_AUX(Tile::cobbleWall_Id, WallTile::TYPE_MOSSY) ITEM(Item::bed_Id) ITEM(Item::bucket_empty_Id) ITEM(Item::bucket_lava_Id) ITEM(Item::bucket_water_Id) - ITEM(Item::milk_Id) + ITEM(Item::bucket_milk_Id) ITEM(Item::cauldron_Id) ITEM(Item::snowBall_Id) ITEM(Item::paper_Id) ITEM(Item::book_Id) ITEM(Item::enderPearl_Id) ITEM(Item::eyeOfEnder_Id) + ITEM(Item::nameTag_Id) + ITEM(Item::netherStar_Id) + ITEM_AUX(Item::spawnEgg_Id, 50); // Creeper + ITEM_AUX(Item::spawnEgg_Id, 51); // Skeleton + ITEM_AUX(Item::spawnEgg_Id, 52); // Spider + ITEM_AUX(Item::spawnEgg_Id, 54); // Zombie + ITEM_AUX(Item::spawnEgg_Id, 55); // Slime + ITEM_AUX(Item::spawnEgg_Id, 56); // Ghast + ITEM_AUX(Item::spawnEgg_Id, 57); // Zombie Pigman + ITEM_AUX(Item::spawnEgg_Id, 58); // Enderman + ITEM_AUX(Item::spawnEgg_Id, 59); // Cave Spider + ITEM_AUX(Item::spawnEgg_Id, 60); // Silverfish + ITEM_AUX(Item::spawnEgg_Id, 61); // Blaze + ITEM_AUX(Item::spawnEgg_Id, 62); // Magma Cube + ITEM_AUX(Item::spawnEgg_Id, 65); // Bat + ITEM_AUX(Item::spawnEgg_Id, 66); // Witch + ITEM_AUX(Item::spawnEgg_Id, 90); // Pig + ITEM_AUX(Item::spawnEgg_Id, 91); // Sheep + ITEM_AUX(Item::spawnEgg_Id, 92); // Cow + ITEM_AUX(Item::spawnEgg_Id, 93); // Chicken + ITEM_AUX(Item::spawnEgg_Id, 94); // Squid + ITEM_AUX(Item::spawnEgg_Id, 95); // Wolf + ITEM_AUX(Item::spawnEgg_Id, 96); // Mooshroom + ITEM_AUX(Item::spawnEgg_Id, 98); // Ozelot + ITEM_AUX(Item::spawnEgg_Id, 100); // Horse + ITEM_AUX(Item::spawnEgg_Id, 100 | ((EntityHorse::TYPE_DONKEY + 1) << 12) ); // Donkey + ITEM_AUX(Item::spawnEgg_Id, 100 | ((EntityHorse::TYPE_MULE + 1) << 12)); // Mule + ITEM_AUX(Item::spawnEgg_Id, 120); // Villager ITEM(Item::record_01_Id) ITEM(Item::record_02_Id) ITEM(Item::record_03_Id) @@ -253,27 +406,26 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Item::record_10_Id) ITEM(Item::record_11_Id) ITEM(Item::record_12_Id) - ITEM_AUX(Item::monsterPlacer_Id, 50); // Creeper - ITEM_AUX(Item::monsterPlacer_Id, 51); // Skeleton - ITEM_AUX(Item::monsterPlacer_Id, 52); // Spider - ITEM_AUX(Item::monsterPlacer_Id, 54); // Zombie - ITEM_AUX(Item::monsterPlacer_Id, 55); // Slime - ITEM_AUX(Item::monsterPlacer_Id, 56); // Ghast - ITEM_AUX(Item::monsterPlacer_Id, 57); // Zombie Pigman - ITEM_AUX(Item::monsterPlacer_Id, 58); // Enderman - ITEM_AUX(Item::monsterPlacer_Id, 59); // Cave Spider - ITEM_AUX(Item::monsterPlacer_Id, 60); // Silverfish - ITEM_AUX(Item::monsterPlacer_Id, 61); // Blaze - ITEM_AUX(Item::monsterPlacer_Id, 62); // Magma Cube - ITEM_AUX(Item::monsterPlacer_Id, 90); // Pig - ITEM_AUX(Item::monsterPlacer_Id, 91); // Sheep - ITEM_AUX(Item::monsterPlacer_Id, 92); // Cow - ITEM_AUX(Item::monsterPlacer_Id, 93); // Chicken - ITEM_AUX(Item::monsterPlacer_Id, 94); // Squid - ITEM_AUX(Item::monsterPlacer_Id, 95); // Wolf - ITEM_AUX(Item::monsterPlacer_Id, 96); // Mooshroom - ITEM_AUX(Item::monsterPlacer_Id, 98); // Ozelot - ITEM_AUX(Item::monsterPlacer_Id, 120); // Villager + + BuildFirework(list, FireworksItem::TYPE_SMALL, DyePowderItem::LIGHT_BLUE, 1, true, false); + BuildFirework(list, FireworksItem::TYPE_CREEPER, DyePowderItem::GREEN, 2, false, false); + BuildFirework(list, FireworksItem::TYPE_MAX, DyePowderItem::RED, 2, false, false, DyePowderItem::ORANGE); + BuildFirework(list, FireworksItem::TYPE_BURST, DyePowderItem::MAGENTA, 3, true, false, DyePowderItem::BLUE); + BuildFirework(list, FireworksItem::TYPE_STAR, DyePowderItem::YELLOW, 2, false, true, DyePowderItem::ORANGE); + +#ifndef _CONTENT_PACKAGE + DEF(eCreativeInventory_ArtToolsMisc) + if(app.DebugSettingsOn()) + { + ITEM_AUX(Item::spawnEgg_Id, 100 | ((EntityHorse::TYPE_SKELETON + 1) << 12)); // Skeleton + ITEM_AUX(Item::spawnEgg_Id, 100 | ((EntityHorse::TYPE_UNDEAD + 1) << 12)); // Zombie + ITEM_AUX(Item::spawnEgg_Id, 98 | ((Ocelot::TYPE_BLACK + 1) << 12)); + ITEM_AUX(Item::spawnEgg_Id, 98 | ((Ocelot::TYPE_RED + 1) << 12)); + ITEM_AUX(Item::spawnEgg_Id, 98 | ((Ocelot::TYPE_SIAMESE + 1) << 12)); + ITEM_AUX(Item::spawnEgg_Id, 52 | (2 << 12)); // Spider-Jockey + ITEM_AUX(Item::spawnEgg_Id, 63); // Enderdragon + } +#endif // Food DEF(eCreativeInventory_Food) @@ -305,17 +457,17 @@ void IUIScene_CreativeMenu::staticCtor() // Tools, Armour and Weapons (Complete) DEF(eCreativeInventory_ToolsArmourWeapons) ITEM(Item::compass_Id) - ITEM(Item::helmet_cloth_Id) - ITEM(Item::chestplate_cloth_Id) - ITEM(Item::leggings_cloth_Id) - ITEM(Item::boots_cloth_Id) + ITEM(Item::helmet_leather_Id) + ITEM(Item::chestplate_leather_Id) + ITEM(Item::leggings_leather_Id) + ITEM(Item::boots_leather_Id) ITEM(Item::sword_wood_Id) ITEM(Item::shovel_wood_Id) ITEM(Item::pickAxe_wood_Id) ITEM(Item::hatchet_wood_Id) ITEM(Item::hoe_wood_Id) - ITEM(Item::map_Id) + ITEM(Item::emptyMap_Id) ITEM(Item::helmet_chain_Id) ITEM(Item::chestplate_chain_Id) ITEM(Item::leggings_chain_Id) @@ -364,6 +516,10 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Item::shears_Id) ITEM(Item::fishingRod_Id) ITEM(Item::carrotOnAStick_Id) + ITEM(Item::lead_Id) + ITEM(Item::horseArmorDiamond_Id) + ITEM(Item::horseArmorGold_Id) + ITEM(Item::horseArmorMetal_Id) for(unsigned int i = 0; i < Enchantment::enchantments.length; ++i) { @@ -372,6 +528,16 @@ void IUIScene_CreativeMenu::staticCtor() list->push_back(Item::enchantedBook->createForEnchantment(new EnchantmentInstance(enchantment, enchantment->getMaxLevel()))); } +#ifndef _CONTENT_PACKAGE + if(app.DebugSettingsOn()) + { + shared_ptr debugSword = shared_ptr(new ItemInstance(Item::sword_diamond_Id, 1, 0)); + debugSword->enchant( Enchantment::damageBonus, 50 ); + debugSword->setHoverName(L"Sword of Debug"); + list->push_back(debugSword); + } +#endif + // Materials DEF(eCreativeInventory_Materials) ITEM(Item::coal_Id) @@ -390,7 +556,7 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Item::feather_Id) ITEM(Item::flint_Id) ITEM(Item::leather_Id) - ITEM(Item::sulphur_Id) + ITEM(Item::gunpowder_Id) ITEM(Item::clay_Id) ITEM(Item::yellowDust_Id) ITEM(Item::seeds_wheat_Id) @@ -403,7 +569,7 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Item::slimeBall_Id) ITEM(Item::blazeRod_Id) ITEM(Item::goldNugget_Id) - ITEM(Item::netherStalkSeeds_Id) + ITEM(Item::netherwart_seeds_Id) ITEM_AUX(Item::dye_powder_Id,1) // Red ITEM_AUX(Item::dye_powder_Id,14) // Orange ITEM_AUX(Item::dye_powder_Id,11) // Yellow @@ -538,22 +704,28 @@ void IUIScene_CreativeMenu::staticCtor() // Top Row ECreative_Inventory_Groups blocksGroup[] = {eCreativeInventory_BuildingBlocks}; - specs[eCreativeInventoryTab_BuildingBlocks] = new TabSpec(L"Structures", IDS_GROUPNAME_BUILDING_BLOCKS, 1, blocksGroup, 0, NULL); - + specs[eCreativeInventoryTab_BuildingBlocks] = new TabSpec(L"Structures", IDS_GROUPNAME_BUILDING_BLOCKS, 1, blocksGroup); + +#ifndef _CONTENT_PACKAGE + ECreative_Inventory_Groups decorationsGroup[] = {eCreativeInventory_Decoration}; + ECreative_Inventory_Groups debugDecorationsGroup[] = {eCreativeInventory_ArtToolsDecorations}; + specs[eCreativeInventoryTab_Decorations] = new TabSpec(L"Decoration", IDS_GROUPNAME_DECORATIONS, 1, decorationsGroup, 0, NULL, 1, debugDecorationsGroup); +#else ECreative_Inventory_Groups decorationsGroup[] = {eCreativeInventory_Decoration}; - specs[eCreativeInventoryTab_Decorations] = new TabSpec(L"Decoration", IDS_GROUPNAME_DECORATIONS, 1, decorationsGroup, 0, NULL); + specs[eCreativeInventoryTab_Decorations] = new TabSpec(L"Decoration", IDS_GROUPNAME_DECORATIONS, 1, decorationsGroup); +#endif ECreative_Inventory_Groups redAndTranGroup[] = {eCreativeInventory_Transport, eCreativeInventory_Redstone}; - specs[eCreativeInventoryTab_RedstoneAndTransport] = new TabSpec(L"RedstoneAndTransport", IDS_GROUPNAME_REDSTONE_AND_TRANSPORT, 2, redAndTranGroup, 0, NULL); + specs[eCreativeInventoryTab_RedstoneAndTransport] = new TabSpec(L"RedstoneAndTransport", IDS_GROUPNAME_REDSTONE_AND_TRANSPORT, 2, redAndTranGroup); ECreative_Inventory_Groups materialsGroup[] = {eCreativeInventory_Materials}; - specs[eCreativeInventoryTab_Materials] = new TabSpec(L"Materials", IDS_GROUPNAME_MATERIALS, 1, materialsGroup, 0, NULL); + specs[eCreativeInventoryTab_Materials] = new TabSpec(L"Materials", IDS_GROUPNAME_MATERIALS, 1, materialsGroup); ECreative_Inventory_Groups foodGroup[] = {eCreativeInventory_Food}; - specs[eCreativeInventoryTab_Food] = new TabSpec(L"Food", IDS_GROUPNAME_FOOD, 1, foodGroup, 0, NULL); + specs[eCreativeInventoryTab_Food] = new TabSpec(L"Food", IDS_GROUPNAME_FOOD, 1, foodGroup); ECreative_Inventory_Groups toolsGroup[] = {eCreativeInventory_ToolsArmourWeapons}; - specs[eCreativeInventoryTab_ToolsWeaponsArmor] = new TabSpec(L"Tools", IDS_GROUPNAME_TOOLS_WEAPONS_ARMOR, 1, toolsGroup, 0, NULL); + specs[eCreativeInventoryTab_ToolsWeaponsArmor] = new TabSpec(L"Tools", IDS_GROUPNAME_TOOLS_WEAPONS_ARMOR, 1, toolsGroup); ECreative_Inventory_Groups brewingGroup[] = {eCreativeInventory_Brewing, eCreativeInventory_Potions_Level2_Extended, eCreativeInventory_Potions_Extended, eCreativeInventory_Potions_Level2, eCreativeInventory_Potions_Basic}; @@ -561,16 +733,21 @@ void IUIScene_CreativeMenu::staticCtor() // In 480p there's not enough room for the LT button, so use text instead //if(!RenderManager.IsHiDef() && !RenderManager.IsWidescreen()) { - specs[eCreativeInventoryTab_Brewing] = new TabSpec(L"Brewing", IDS_GROUPNAME_POTIONS_480, 5, brewingGroup, 0, NULL); + specs[eCreativeInventoryTab_Brewing] = new TabSpec(L"Brewing", IDS_GROUPNAME_POTIONS_480, 5, brewingGroup); } // else // { // specs[eCreativeInventoryTab_Brewing] = new TabSpec(L"icon_brewing.png", IDS_GROUPNAME_POTIONS, 1, brewingGroup, 4, potionsGroup); // } +#ifndef _CONTENT_PACKAGE ECreative_Inventory_Groups miscGroup[] = {eCreativeInventory_Misc}; - specs[eCreativeInventoryTab_Misc] = new TabSpec(L"Misc", IDS_GROUPNAME_MISCELLANEOUS, 1, miscGroup, 0, NULL); - + ECreative_Inventory_Groups debugMiscGroup[] = {eCreativeInventory_ArtToolsMisc}; + specs[eCreativeInventoryTab_Misc] = new TabSpec(L"Misc", IDS_GROUPNAME_MISCELLANEOUS, 1, miscGroup, 0, NULL, 1, debugMiscGroup); +#else + ECreative_Inventory_Groups miscGroup[] = {eCreativeInventory_Misc}; + specs[eCreativeInventoryTab_Misc] = new TabSpec(L"Misc", IDS_GROUPNAME_MISCELLANEOUS, 1, miscGroup); +#endif } IUIScene_CreativeMenu::IUIScene_CreativeMenu() @@ -600,10 +777,33 @@ void IUIScene_CreativeMenu::switchTab(ECreativeInventoryTabs tab) specs[tab]->populateMenu(itemPickerMenu,m_tabDynamicPos[m_curTab], m_tabPage[m_curTab]); } +void IUIScene_CreativeMenu::ScrollBar(UIVec2D pointerPos) +{ + UIVec2D pos; + UIVec2D size; + GetItemScreenData(eSectionInventoryCreativeSlider, 0, &pos, &size); + float fPosition = ((float)pointerPos.y - pos.y) / size.y; + + // clamp + if(fPosition > 1) + fPosition = 1.0f; + else if(fPosition < 0) + fPosition = 0.0f; + + // calculate page position according to page count + int iCurrentPage = Math::round(fPosition * (specs[m_curTab]->getPageCount() - 1)); + + // set tab page + m_tabPage[m_curTab] = iCurrentPage; + + // update tab + switchTab(m_curTab); +} + // 4J JEV - Tab Spec Struct -IUIScene_CreativeMenu::TabSpec::TabSpec(LPCWSTR icon, int descriptionId, int staticGroupsCount, ECreative_Inventory_Groups *staticGroups, int dynamicGroupsCount, ECreative_Inventory_Groups *dynamicGroups) - : m_icon(icon), m_descriptionId(descriptionId), m_staticGroupsCount(staticGroupsCount), m_dynamicGroupsCount(dynamicGroupsCount) +IUIScene_CreativeMenu::TabSpec::TabSpec(LPCWSTR icon, int descriptionId, int staticGroupsCount, ECreative_Inventory_Groups *staticGroups, int dynamicGroupsCount, ECreative_Inventory_Groups *dynamicGroups, int debugGroupsCount /*= 0*/, ECreative_Inventory_Groups *debugGroups /*= NULL*/) + : m_icon(icon), m_descriptionId(descriptionId), m_staticGroupsCount(staticGroupsCount), m_dynamicGroupsCount(dynamicGroupsCount), m_debugGroupsCount(debugGroupsCount) { m_pages = 0; @@ -622,8 +822,20 @@ IUIScene_CreativeMenu::TabSpec::TabSpec(LPCWSTR icon, int descriptionId, int sta } } + m_debugGroupsA = NULL; + m_debugItems = 0; + if(debugGroupsCount > 0) + { + m_debugGroupsA = new ECreative_Inventory_Groups[debugGroupsCount]; + for(int i = 0; i < debugGroupsCount; ++i) + { + m_debugGroupsA[i] = debugGroups[i]; + m_debugItems += categoryGroups[m_debugGroupsA[i]].size(); + } + } + m_dynamicGroupsA = NULL; - if(dynamicGroupsCount > 0) + if(dynamicGroupsCount > 0 && dynamicGroups != NULL) { m_dynamicGroupsA = new ECreative_Inventory_Groups[dynamicGroupsCount]; for(int i = 0; i < dynamicGroupsCount; ++i) @@ -641,6 +853,7 @@ IUIScene_CreativeMenu::TabSpec::~TabSpec() { if(m_staticGroupsA != NULL) delete [] m_staticGroupsA; if(m_dynamicGroupsA != NULL) delete [] m_dynamicGroupsA; + if(m_debugGroupsA != NULL) delete [] m_debugGroupsA; } void IUIScene_CreativeMenu::TabSpec::populateMenu(AbstractContainerMenu *menu, int dynamicIndex, unsigned int page) @@ -659,12 +872,12 @@ void IUIScene_CreativeMenu::TabSpec::populateMenu(AbstractContainerMenu *menu, i // Fill from the static groups unsigned int startIndex = page * m_staticPerPage; - int remainingItems = m_staticItems - startIndex; // Work out the first group with an item the want to display, and which item in that group unsigned int currentIndex = 0; unsigned int currentGroup = 0; unsigned int currentItem = 0; + bool displayStatic = false; for(; currentGroup < m_staticGroupsCount; ++currentGroup) { int size = categoryGroups[m_staticGroupsA[currentGroup]].size(); @@ -673,26 +886,79 @@ void IUIScene_CreativeMenu::TabSpec::populateMenu(AbstractContainerMenu *menu, i currentIndex += size; continue; } + displayStatic = true; currentItem = size - ((currentIndex + size) - startIndex); break; } - for(; lastSlotIndex < MAX_SIZE;) + int lastStaticPageCount = currentIndex; + while(lastStaticPageCount > m_staticPerPage) lastStaticPageCount -= m_staticPerPage; + + if(displayStatic) { - Slot *slot = menu->getSlot(lastSlotIndex++); - slot->set(categoryGroups[m_staticGroupsA[currentGroup]][currentItem]); + for(; lastSlotIndex < MAX_SIZE;) + { + Slot *slot = menu->getSlot(lastSlotIndex++); + slot->set(categoryGroups[m_staticGroupsA[currentGroup]][currentItem]); + + ++currentItem; + if(currentItem >= categoryGroups[m_staticGroupsA[currentGroup]].size()) + { + currentItem = 0; + ++currentGroup; + if(currentGroup >= m_staticGroupsCount) + { + break; + } + } + } + } - ++currentItem; - if(currentItem >= categoryGroups[m_staticGroupsA[currentGroup]].size()) +#ifndef _CONTENT_PACKAGE + if(app.DebugArtToolsOn()) + { + if(m_debugGroupsCount > 0) { + startIndex = 0; + if(lastStaticPageCount != 0) + { + startIndex = m_staticPerPage - lastStaticPageCount; + } + currentIndex = 0; + currentGroup = 0; currentItem = 0; - ++currentGroup; - if(currentGroup >= m_staticGroupsCount) + bool showDebug = false; + for(; currentGroup < m_debugGroupsCount; ++currentGroup) { + int size = categoryGroups[m_debugGroupsA[currentGroup]].size(); + if( currentIndex + size < startIndex) + { + currentIndex += size; + continue; + } + currentItem = size - ((currentIndex + size) - startIndex); break; } + + for(; lastSlotIndex < MAX_SIZE;) + { + Slot *slot = menu->getSlot(lastSlotIndex++); + slot->set(categoryGroups[m_debugGroupsA[currentGroup]][currentItem]); + + ++currentItem; + if(currentItem >= categoryGroups[m_debugGroupsA[currentGroup]].size()) + { + currentItem = 0; + ++currentGroup; + if(currentGroup >= m_debugGroupsCount) + { + break; + } + } + } } } +#endif for(; lastSlotIndex < MAX_SIZE; ++lastSlotIndex) { @@ -703,7 +969,16 @@ void IUIScene_CreativeMenu::TabSpec::populateMenu(AbstractContainerMenu *menu, i unsigned int IUIScene_CreativeMenu::TabSpec::getPageCount() { - return m_pages; +#ifndef _CONTENT_PACKAGE + if(app.DebugArtToolsOn()) + { + return (int)ceil((float)(m_staticItems + m_debugItems) / m_staticPerPage); + } + else +#endif + { + return m_pages; + } } @@ -763,7 +1038,6 @@ IUIScene_AbstractContainerMenu::ESceneSection IUIScene_CreativeMenu::GetSectionA newSection = eSectionInventoryCreativeSelector; } break; -#ifndef _XBOX case eSectionInventoryCreativeTab_0: case eSectionInventoryCreativeTab_1: case eSectionInventoryCreativeTab_2: @@ -775,7 +1049,6 @@ IUIScene_AbstractContainerMenu::ESceneSection IUIScene_CreativeMenu::GetSectionA case eSectionInventoryCreativeSlider: /* do nothing */ break; -#endif default: assert( false ); break; @@ -800,7 +1073,7 @@ bool IUIScene_CreativeMenu::handleValidKeyPress(int iPad, int buttonNum, BOOL qu { m_menu->getSlot(i)->set(nullptr); // call this function to synchronize multiplayer item bar - pMinecraft->localgameModes[iPad]->handleCreativeModeItemAdd(nullptr, i - (int)m_menu->slots->size() + 9 + InventoryMenu::USE_ROW_SLOT_START); + pMinecraft->localgameModes[iPad]->handleCreativeModeItemAdd(nullptr, i - (int)m_menu->slots.size() + 9 + InventoryMenu::USE_ROW_SLOT_START); } } return true; @@ -930,7 +1203,7 @@ void IUIScene_CreativeMenu::handleSlotListClicked(ESceneSection eSection, int bu m_menu->clicked(currentIndex, buttonNum, quickKeyHeld?AbstractContainerMenu::CLICK_QUICK_MOVE:AbstractContainerMenu::CLICK_PICKUP, pMinecraft->localplayers[getPad()]); shared_ptr newItem = m_menu->getSlot(currentIndex)->getItem(); // call this function to synchronize multiplayer item bar - pMinecraft->localgameModes[getPad()]->handleCreativeModeItemAdd(newItem, currentIndex - (int)m_menu->slots->size() + 9 + InventoryMenu::USE_ROW_SLOT_START); + pMinecraft->localgameModes[getPad()]->handleCreativeModeItemAdd(newItem, currentIndex - (int)m_menu->slots.size() + 9 + InventoryMenu::USE_ROW_SLOT_START); if(m_bCarryingCreativeItem) { @@ -978,7 +1251,7 @@ bool IUIScene_CreativeMenu::getEmptyInventorySlot(shared_ptr item, for(unsigned int i = TabSpec::MAX_SIZE; i < TabSpec::MAX_SIZE + 9; ++i) { shared_ptr slotItem = m_menu->getSlot(i)->getItem(); - if( slotItem != NULL && slotItem->sameItem(item) && (slotItem->GetCount() + item->GetCount() <= item->getMaxStackSize() )) + if( slotItem != NULL && slotItem->sameItemWithTags(item) && (slotItem->GetCount() + item->GetCount() <= item->getMaxStackSize() )) { sameItemFound = true; slotX = i - TabSpec::MAX_SIZE; @@ -1021,7 +1294,7 @@ int IUIScene_CreativeMenu::getSectionStartOffset(ESceneSection eSection) } bool IUIScene_CreativeMenu::overrideTooltips(ESceneSection sectionUnderPointer, shared_ptr itemUnderPointer, bool bIsItemCarried, bool bSlotHasItem, bool bCarriedIsSameAsSlot, int iSlotStackSizeRemaining, - EToolTipItem &buttonA, EToolTipItem &buttonX, EToolTipItem &buttonY, EToolTipItem &buttonRT) + EToolTipItem &buttonA, EToolTipItem &buttonX, EToolTipItem &buttonY, EToolTipItem &buttonRT, EToolTipItem &buttonBack) { bool _override = false; @@ -1030,7 +1303,6 @@ bool IUIScene_CreativeMenu::overrideTooltips(ESceneSection sectionUnderPointer, if(bSlotHasItem) { buttonA = eToolTipPickUpGeneric; - buttonRT = eToolTipWhatIsThis; if(itemUnderPointer->isStackable()) { @@ -1051,3 +1323,74 @@ bool IUIScene_CreativeMenu::overrideTooltips(ESceneSection sectionUnderPointer, return _override; } + +void IUIScene_CreativeMenu::BuildFirework(vector > *list, byte type, int color, int sulphur, bool flicker, bool trail, int fadeColor/*= -1*/) +{ + ///////////////////////////////// + // Create firecharge + ///////////////////////////////// + + + CompoundTag *expTag = new CompoundTag(FireworksItem::TAG_EXPLOSION); + + vector colors; + + colors.push_back(DyePowderItem::COLOR_RGB[color]); + + // glowstone dust gives flickering + if (flicker) expTag->putBoolean(FireworksItem::TAG_E_FLICKER, true); + + // diamonds give trails + if (trail) expTag->putBoolean(FireworksItem::TAG_E_TRAIL, true); + + intArray colorArray(colors.size()); + for (int i = 0; i < colorArray.length; i++) + { + colorArray[i] = colors.at(i); + } + expTag->putIntArray(FireworksItem::TAG_E_COLORS, colorArray); + // delete colorArray.data; + + expTag->putByte(FireworksItem::TAG_E_TYPE, type); + + if (fadeColor != -1) + { + //////////////////////////////////// + // Apply fade colors to firecharge + //////////////////////////////////// + + vector colors; + colors.push_back(DyePowderItem::COLOR_RGB[fadeColor]); + + intArray colorArray(colors.size()); + for (int i = 0; i < colorArray.length; i++) + { + colorArray[i] = colors.at(i); + } + expTag->putIntArray(FireworksItem::TAG_E_FADECOLORS, colorArray); + } + + ///////////////////////////////// + // Create fireworks + ///////////////////////////////// + + shared_ptr firework; + + { + firework = shared_ptr( new ItemInstance(Item::fireworks) ); + CompoundTag *itemTag = new CompoundTag(); + CompoundTag *fireTag = new CompoundTag(FireworksItem::TAG_FIREWORKS); + ListTag *expTags = new ListTag(FireworksItem::TAG_EXPLOSIONS); + + expTags->add(expTag); + + fireTag->put(FireworksItem::TAG_EXPLOSIONS, expTags); + fireTag->putByte(FireworksItem::TAG_FLIGHT, (byte) sulphur); + + itemTag->put(FireworksItem::TAG_FIREWORKS, fireTag); + + firework->setTag(itemTag); + } + + list->push_back(firework); +} diff --git a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.h b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.h index 7ab3ff7e..64b78029 100644 --- a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.h +++ b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.h @@ -38,6 +38,8 @@ public: eCreativeInventory_Potions_Extended, eCreativeInventory_Potions_Level2_Extended, eCreativeInventory_Misc, + eCreativeInventory_ArtToolsDecorations, + eCreativeInventory_ArtToolsMisc, eCreativeInventoryGroupsCount }; @@ -57,14 +59,17 @@ public: ECreative_Inventory_Groups *m_staticGroupsA; const int m_dynamicGroupsCount; ECreative_Inventory_Groups *m_dynamicGroupsA; + const int m_debugGroupsCount; + ECreative_Inventory_Groups *m_debugGroupsA; private: unsigned int m_pages; unsigned int m_staticPerPage; unsigned int m_staticItems; + unsigned int m_debugItems; public: - TabSpec( LPCWSTR icon, int descriptionId, int staticGroupsCount, ECreative_Inventory_Groups *staticGroups, int dynamicGroupsCount, ECreative_Inventory_Groups *dynamicGroups ); + TabSpec( LPCWSTR icon, int descriptionId, int staticGroupsCount, ECreative_Inventory_Groups *staticGroups, int dynamicGroupsCount = 0, ECreative_Inventory_Groups *dynamicGroups = NULL, int debugGroupsCount = 0, ECreative_Inventory_Groups *debugGroups = NULL ); ~TabSpec(); void populateMenu(AbstractContainerMenu *menu, int dynamicIndex, unsigned int page); @@ -104,7 +109,8 @@ protected: int m_tabDynamicPos[eCreativeInventoryTab_COUNT]; int m_tabPage[eCreativeInventoryTab_COUNT]; - void switchTab(ECreativeInventoryTabs tab); + void switchTab(ECreativeInventoryTabs tab); + void ScrollBar(UIVec2D pointerPos); virtual void updateTabHighlightAndText(ECreativeInventoryTabs tab) = 0; virtual void updateScrollCurrentPage(int currentPage, int pageCount) = 0; virtual ESceneSection GetSectionAndSlotInDirection( ESceneSection eSection, ETapState eTapDirection, int *piTargetX, int *piTargetY ); @@ -117,6 +123,19 @@ protected: virtual bool IsSectionSlotList( ESceneSection eSection ); virtual bool CanHaveFocus( ESceneSection eSection ); - virtual bool overrideTooltips(ESceneSection sectionUnderPointer, shared_ptr itemUnderPointer, bool bIsItemCarried, bool bSlotHasItem, bool bCarriedIsSameAsSlot, int iSlotStackSizeRemaining, - EToolTipItem &buttonA, EToolTipItem &buttonX, EToolTipItem &buttonY, EToolTipItem &buttonRT); + virtual bool overrideTooltips( + ESceneSection sectionUnderPointer, + shared_ptr itemUnderPointer, + bool bIsItemCarried, + bool bSlotHasItem, + bool bCarriedIsSameAsSlot, + int iSlotStackSizeRemaining, + EToolTipItem &buttonA, + EToolTipItem &buttonX, + EToolTipItem &buttonY, + EToolTipItem &buttonRT, + EToolTipItem &buttonBack + ); + + static void BuildFirework(vector > *list, byte type, int color, int sulphur, bool flicker, bool trail, int fadeColor = -1); }; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/IUIScene_FireworksMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_FireworksMenu.cpp new file mode 100644 index 00000000..7f90fe8f --- /dev/null +++ b/Minecraft.Client/Common/UI/IUIScene_FireworksMenu.cpp @@ -0,0 +1,129 @@ +#include "stdafx.h" + +#include "IUIScene_FireworksMenu.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h" + +IUIScene_AbstractContainerMenu::ESceneSection IUIScene_FireworksMenu::GetSectionAndSlotInDirection( ESceneSection eSection, ETapState eTapDirection, int *piTargetX, int *piTargetY ) +{ + ESceneSection newSection = eSection; + int xOffset = 0; + int yOffset = 0; + + // Find the new section if there is one + switch( eSection ) + { + case eSectionFireworksIngredients: + if(eTapDirection == eTapStateDown) + { + newSection = eSectionFireworksInventory; + xOffset = -1; + } + else if(eTapDirection == eTapStateUp) + { + newSection = eSectionFireworksUsing; + xOffset = -1; + } + else if(eTapDirection == eTapStateLeft) + { + newSection = eSectionFireworksResult; + } + else if(eTapDirection == eTapStateRight) + { + newSection = eSectionFireworksResult; + } + break; + case eSectionFireworksResult: + if(eTapDirection == eTapStateDown) + { + newSection = eSectionFireworksInventory; + xOffset = -7; + } + else if(eTapDirection == eTapStateUp) + { + newSection = eSectionFireworksUsing; + xOffset = -7; + } + else if(eTapDirection == eTapStateLeft) + { + newSection = eSectionFireworksIngredients; + yOffset = -1; + *piTargetX = getSectionColumns(eSectionFireworksIngredients); + } + else if(eTapDirection == eTapStateRight) + { + newSection = eSectionFireworksIngredients; + yOffset = -1; + *piTargetX = 0; + } + break; + case eSectionFireworksInventory: + if(eTapDirection == eTapStateDown) + { + newSection = eSectionFireworksUsing; + } + else if(eTapDirection == eTapStateUp) + { + if(*piTargetX < 6) + { + newSection = eSectionFireworksIngredients; + xOffset = 1; + } + else + { + newSection = eSectionFireworksResult; + } + } + break; + case eSectionFireworksUsing: + if(eTapDirection == eTapStateDown) + { + if(*piTargetX < 6) + { + newSection = eSectionFireworksIngredients; + xOffset = 1; + } + else + { + newSection = eSectionFireworksResult; + } + } + else if(eTapDirection == eTapStateUp) + { + newSection = eSectionFireworksInventory; + } + break; + default: + assert( false ); + break; + } + + updateSlotPosition(eSection, newSection, eTapDirection, piTargetX, piTargetY, xOffset, yOffset); + + return newSection; +} + +int IUIScene_FireworksMenu::getSectionStartOffset(ESceneSection eSection) +{ + int offset = 0; + switch( eSection ) + { + + case eSectionFireworksIngredients: + offset = FireworksMenu::CRAFT_SLOT_START; + break; + + case eSectionFireworksResult: + offset = FireworksMenu::RESULT_SLOT; + break; + case eSectionFireworksInventory: + offset = FireworksMenu::INV_SLOT_START; + break; + case eSectionFireworksUsing: + offset = FireworksMenu::INV_SLOT_START + 27; + break; + default: + assert( false ); + break; + } + return offset; +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/IUIScene_FireworksMenu.h b/Minecraft.Client/Common/UI/IUIScene_FireworksMenu.h new file mode 100644 index 00000000..4764d72c --- /dev/null +++ b/Minecraft.Client/Common/UI/IUIScene_FireworksMenu.h @@ -0,0 +1,9 @@ +#pragma once +#include "IUIScene_AbstractContainerMenu.h" + +class IUIScene_FireworksMenu : public virtual IUIScene_AbstractContainerMenu +{ +protected: + virtual ESceneSection GetSectionAndSlotInDirection( ESceneSection eSection, ETapState eTapDirection, int *piTargetX, int *piTargetY ); + int getSectionStartOffset(ESceneSection eSection); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/IUIScene_HUD.cpp b/Minecraft.Client/Common/UI/IUIScene_HUD.cpp new file mode 100644 index 00000000..03adbd2c --- /dev/null +++ b/Minecraft.Client/Common/UI/IUIScene_HUD.cpp @@ -0,0 +1,264 @@ +#include "stdafx.h" +#include "..\..\Minecraft.h" +#include "..\..\MultiPlayerLocalPlayer.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.effect.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.item.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.entity.ai.attributes.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.entity.monster.h" +#include "IUIScene_HUD.h" + +IUIScene_HUD::IUIScene_HUD() +{ + m_lastActiveSlot = -1; + m_iGuiScale = -1; + m_bToolTipsVisible = true; + m_lastExpProgress = 0.0f; + m_lastExpLevel = 0; + m_iCurrentHealth = 0; + m_lastMaxHealth = 20; + m_lastHealthBlink = false; + m_lastHealthPoison = false; + m_iCurrentFood = -1; + m_lastFoodPoison = false; + m_lastAir = 10; + m_currentExtraAir = 0; + m_lastArmour = 0; + m_showHealth = true; + m_showHorseHealth = true; + m_showFood = true; + m_showAir = true; + m_showArmour = true; + m_showExpBar = true; + m_bRegenEffectEnabled = false; + m_iFoodSaturation = 0; + m_lastDragonHealth = 0.0f; + m_showDragonHealth = false; + m_ticksWithNoBoss = 0; + m_uiSelectedItemOpacityCountDown = 0; + m_displayName = L""; + m_lastShowDisplayName = true; + m_bRidingHorse = true; + m_horseHealth = 1; + m_lastHealthWither = true; + m_iCurrentHealthAbsorb = -1; + m_horseJumpProgress = 1.0f; + m_iHeartOffsetIndex = -1; + m_bHealthAbsorbActive = false; + m_iHorseMaxHealth = -1; + m_bIsJumpable = false; +} + +void IUIScene_HUD::updateFrameTick() +{ + int iPad = getPad(); + Minecraft *pMinecraft = Minecraft::GetInstance(); + + int iGuiScale; + + if(pMinecraft->localplayers[iPad]->m_iScreenSection == C4JRender::VIEWPORT_TYPE_FULLSCREEN) + { + iGuiScale=app.GetGameSettings(iPad,eGameSetting_UISize); + } + else + { + iGuiScale=app.GetGameSettings(iPad,eGameSetting_UISizeSplitscreen); + } + SetHudSize(iGuiScale); + + SetDisplayName(ProfileManager.GetDisplayName(iPad)); + + SetTooltipsEnabled(((ui.GetMenuDisplayed(ProfileManager.GetPrimaryPad())) || (app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_Tooltips) != 0))); + + SetActiveSlot(pMinecraft->localplayers[iPad]->inventory->selected); + + if (pMinecraft->localgameModes[iPad]->canHurtPlayer()) + { + renderPlayerHealth(); + } + else + { + //SetRidingHorse(false, 0); + shared_ptr riding = pMinecraft->localplayers[iPad]->riding; + if(riding == NULL) + { + SetRidingHorse(false, false, 0); + } + else + { + SetRidingHorse(true, pMinecraft->localplayers[iPad]->isRidingJumpable(), 0); + } + ShowHorseHealth(false); + m_horseHealth = 0; + ShowHealth(false); + ShowFood(false); + ShowAir(false); + ShowArmour(false); + ShowExpBar(false); + SetHealthAbsorb(0); + } + + if(pMinecraft->localplayers[iPad]->isRidingJumpable()) + { + SetHorseJumpBarProgress(pMinecraft->localplayers[iPad]->getJumpRidingScale()); + } + else if (pMinecraft->localgameModes[iPad]->hasExperience()) + { + // Update xp progress + ShowExpBar(true); + + SetExpBarProgress(pMinecraft->localplayers[iPad]->experienceProgress, pMinecraft->localplayers[iPad]->getXpNeededForNextLevel()); + + // Update xp level + SetExpLevel(pMinecraft->localplayers[iPad]->experienceLevel); + } + else + { + ShowExpBar(false); + SetExpLevel(0); + } + + if(m_uiSelectedItemOpacityCountDown>0) + { + --m_uiSelectedItemOpacityCountDown; + + // 4J Stu - Timing here is kept the same as on Xbox360, even though we do it differently now and do the fade out in Flash rather than directly setting opacity + if(m_uiSelectedItemOpacityCountDown < (SharedConstants::TICKS_PER_SECOND * 1) ) + { + HideSelectedLabel(); + m_uiSelectedItemOpacityCountDown = 0; + } + } + + unsigned char ucAlpha=app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_InterfaceOpacity); + float fVal; + + if(ucAlpha<80) + { + // if we are in a menu, set the minimum opacity for tooltips to 15% + if(ui.GetMenuDisplayed(iPad) && (ucAlpha<15)) + { + ucAlpha=15; + } + + // check if we have the timer running for the opacity + unsigned int uiOpacityTimer=app.GetOpacityTimer(iPad); + if(uiOpacityTimer!=0) + { + if(uiOpacityTimer<10) + { + float fStep=(80.0f-(float)ucAlpha)/10.0f; + fVal=0.01f*(80.0f-((10.0f-(float)uiOpacityTimer)*fStep)); + } + else + { + fVal=0.01f*80.0f; + } + } + else + { + fVal=0.01f*(float)ucAlpha; + } + } + else + { + // if we are in a menu, set the minimum opacity for tooltips to 15% + if(ui.GetMenuDisplayed(iPad) && (ucAlpha<15)) + { + ucAlpha=15; + } + fVal=0.01f*(float)ucAlpha; + } + SetOpacity(fVal); + + bool bDisplayGui=app.GetGameStarted() && !ui.GetMenuDisplayed(iPad) && !(app.GetXuiAction(iPad)==eAppAction_AutosaveSaveGameCapturedThumbnail) && app.GetGameSettings(iPad,eGameSetting_DisplayHUD)!=0; + if(bDisplayGui && pMinecraft->localplayers[iPad] != NULL) + { + SetVisible(true); + } + else + { + SetVisible(false); + } +} + +void IUIScene_HUD::renderPlayerHealth() +{ + Minecraft *pMinecraft = Minecraft::GetInstance(); + int iPad = getPad(); + + ShowHealth(true); + + SetRegenerationEffect(pMinecraft->localplayers[iPad]->hasEffect(MobEffect::regeneration)); + + // Update health + bool blink = pMinecraft->localplayers[iPad]->invulnerableTime / 3 % 2 == 1; + if (pMinecraft->localplayers[iPad]->invulnerableTime < 10) blink = false; + int currentHealth = pMinecraft->localplayers[iPad]->getHealth(); + int oldHealth = pMinecraft->localplayers[iPad]->lastHealth; + bool bHasPoison = pMinecraft->localplayers[iPad]->hasEffect(MobEffect::poison); + bool bHasWither = pMinecraft->localplayers[iPad]->hasEffect(MobEffect::wither); + AttributeInstance *maxHealthAttribute = pMinecraft->localplayers[iPad]->getAttribute(SharedMonsterAttributes::MAX_HEALTH); + float maxHealth = (float)maxHealthAttribute->getValue(); + float totalAbsorption = pMinecraft->localplayers[iPad]->getAbsorptionAmount(); + + // Update armour + int armor = pMinecraft->localplayers[iPad]->getArmorValue(); + + SetHealth(currentHealth, oldHealth, blink, bHasPoison || bHasWither, bHasWither); + SetHealthAbsorb(totalAbsorption); + + if(armor > 0) + { + ShowArmour(true); + SetArmour(armor); + } + else + { + ShowArmour(false); + } + + shared_ptr riding = pMinecraft->localplayers[iPad]->riding; + + if(riding == NULL || riding && !riding->instanceof(eTYPE_LIVINGENTITY)) + { + SetRidingHorse(false, false, 0); + + ShowFood(true); + ShowHorseHealth(false); + m_horseHealth = 0; + + // Update food + //bool foodBlink = false; + FoodData *foodData = pMinecraft->localplayers[iPad]->getFoodData(); + int food = foodData->getFoodLevel(); + int oldFood = foodData->getLastFoodLevel(); + bool hasHungerEffect = pMinecraft->localplayers[iPad]->hasEffect(MobEffect::hunger); + int saturationLevel = pMinecraft->localplayers[iPad]->getFoodData()->getSaturationLevel(); + + SetFood(food, oldFood, hasHungerEffect); + SetFoodSaturationLevel(saturationLevel); + + // Update air + if (pMinecraft->localplayers[iPad]->isUnderLiquid(Material::water)) + { + ShowAir(true); + int count = (int) ceil((pMinecraft->localplayers[iPad]->getAirSupply() - 2) * 10.0f / Player::TOTAL_AIR_SUPPLY); + int extra = (int) ceil((pMinecraft->localplayers[iPad]->getAirSupply()) * 10.0f / Player::TOTAL_AIR_SUPPLY) - count; + SetAir(count, extra); + } + else + { + ShowAir(false); + } + } + else if(riding->instanceof(eTYPE_LIVINGENTITY) ) + { + shared_ptr living = dynamic_pointer_cast(riding); + int riderCurrentHealth = (int) ceil(living->getHealth()); + float maxRiderHealth = living->getMaxHealth(); + + SetRidingHorse(true, pMinecraft->localplayers[iPad]->isRidingJumpable(), maxRiderHealth); + SetHorseHealth(riderCurrentHealth); + ShowHorseHealth(true); + } +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/IUIScene_HUD.h b/Minecraft.Client/Common/UI/IUIScene_HUD.h new file mode 100644 index 00000000..0f643dd3 --- /dev/null +++ b/Minecraft.Client/Common/UI/IUIScene_HUD.h @@ -0,0 +1,85 @@ +#pragma once + +class IUIScene_HUD +{ +protected: + int m_lastActiveSlot; + int m_iGuiScale; + bool m_bToolTipsVisible; + float m_lastExpProgress; + int m_lastExpLevel; + int m_iCurrentHealth; + int m_lastMaxHealth; + bool m_lastHealthBlink, m_lastHealthPoison, m_lastHealthWither; + int m_iCurrentFood; + bool m_lastFoodPoison; + int m_lastAir, m_currentExtraAir; + int m_lastArmour; + float m_lastDragonHealth; + bool m_showDragonHealth; + int m_ticksWithNoBoss; + bool m_lastShowDisplayName; + int m_horseHealth; + int m_iCurrentHealthAbsorb; + float m_horseJumpProgress; + int m_iHeartOffsetIndex; + bool m_bHealthAbsorbActive; + int m_iHorseMaxHealth; + + bool m_showHealth, m_showHorseHealth, m_showFood, m_showAir, m_showArmour, m_showExpBar, m_bRidingHorse, m_bIsJumpable; + bool m_bRegenEffectEnabled; + int m_iFoodSaturation; + + unsigned int m_uiSelectedItemOpacityCountDown; + + wstring m_displayName; + + IUIScene_HUD(); + + virtual int getPad() = 0; + virtual void SetOpacity(float opacity) = 0; + virtual void SetVisible(bool visible) = 0; + + virtual void SetHudSize(int scale) = 0; + virtual void SetExpBarProgress(float progress, int xpNeededForNextLevel) = 0; + virtual void SetExpLevel(int level) = 0; + virtual void SetActiveSlot(int slot) = 0; + + virtual void SetHealth(int iHealth, int iLastHealth, bool bBlink, bool bPoison, bool bWither) = 0; + virtual void SetFood(int iFood, int iLastFood, bool bPoison) = 0; + virtual void SetAir(int iAir, int extra) = 0; + virtual void SetArmour(int iArmour) = 0; + + virtual void ShowHealth(bool show) = 0; + virtual void ShowHorseHealth(bool show) = 0; + virtual void ShowFood(bool show) = 0; + virtual void ShowAir(bool show) = 0; + virtual void ShowArmour(bool show) = 0; + virtual void ShowExpBar(bool show) = 0; + + virtual void SetRegenerationEffect(bool bEnabled) = 0; + virtual void SetFoodSaturationLevel(int iSaturation) = 0; + + virtual void SetDragonHealth(float health) = 0; + virtual void SetDragonLabel(const wstring &label) = 0; + virtual void ShowDragonHealth(bool show) = 0; + + virtual void HideSelectedLabel() = 0; + + virtual void SetDisplayName(const wstring &displayName) = 0; + + virtual void SetTooltipsEnabled(bool bEnabled) = 0; + + virtual void SetRidingHorse(bool ridingHorse, bool bIsJumpable, int maxHorseHealth) = 0; + virtual void SetHorseHealth(int health, bool blink = false) = 0; + virtual void SetHorseJumpBarProgress(float progress) = 0; + + virtual void SetHealthAbsorb(int healthAbsorb) = 0; + + virtual void SetSelectedLabel(const wstring &label) = 0; + virtual void ShowDisplayName(bool show) = 0; + +public: + void updateFrameTick(); + void renderPlayerHealth(); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/IUIScene_HopperMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_HopperMenu.cpp new file mode 100644 index 00000000..392c12d4 --- /dev/null +++ b/Minecraft.Client/Common/UI/IUIScene_HopperMenu.cpp @@ -0,0 +1,77 @@ +#include "stdafx.h" +#include "IUIScene_HopperMenu.h" +#include "../Minecraft.World/net.minecraft.world.inventory.h" + +IUIScene_AbstractContainerMenu::ESceneSection IUIScene_HopperMenu::GetSectionAndSlotInDirection( ESceneSection eSection, ETapState eTapDirection, int *piTargetX, int *piTargetY ) +{ + ESceneSection newSection = eSection; + + int xOffset = 0; + + // Find the new section if there is one + switch( eSection ) + { + case eSectionHopperContents: + if(eTapDirection == eTapStateDown) + { + newSection = eSectionHopperInventory; + xOffset = -2; + } + else if(eTapDirection == eTapStateUp) + { + xOffset = -2; + newSection = eSectionHopperUsing; + } + break; + case eSectionHopperInventory: + if(eTapDirection == eTapStateDown) + { + newSection = eSectionHopperUsing; + } + else if(eTapDirection == eTapStateUp) + { + xOffset = 2; + newSection = eSectionHopperContents; + } + break; + case eSectionHopperUsing: + if(eTapDirection == eTapStateDown) + { + xOffset = 2; + newSection = eSectionHopperContents; + } + else if(eTapDirection == eTapStateUp) + { + newSection = eSectionHopperInventory; + } + break; + default: + assert(false); + break; + } + + updateSlotPosition(eSection, newSection, eTapDirection, piTargetX, piTargetY, xOffset); + + return newSection; +} + +int IUIScene_HopperMenu::getSectionStartOffset(ESceneSection eSection) +{ + int offset = 0; + switch( eSection ) + { + case eSectionHopperContents: + offset = HopperMenu::CONTENTS_SLOT_START; + break; + case eSectionHopperInventory: + offset = HopperMenu::INV_SLOT_START; + break; + case eSectionHopperUsing: + offset = HopperMenu::USE_ROW_SLOT_START; + break; + default: + assert( false ); + break; + } + return offset; +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/IUIScene_HopperMenu.h b/Minecraft.Client/Common/UI/IUIScene_HopperMenu.h new file mode 100644 index 00000000..ef6d8d25 --- /dev/null +++ b/Minecraft.Client/Common/UI/IUIScene_HopperMenu.h @@ -0,0 +1,12 @@ +#pragma once + +#include "IUIScene_AbstractContainerMenu.h" +#include "../../../Minecraft.World/Container.h" +#include "../../../Minecraft.World/Inventory.h" + +class IUIScene_HopperMenu : public virtual IUIScene_AbstractContainerMenu +{ +public: + virtual ESceneSection GetSectionAndSlotInDirection(ESceneSection eSection, ETapState eTapDirection, int *piTargetX, int *piTargetY); + int getSectionStartOffset(ESceneSection eSection); +}; diff --git a/Minecraft.Client/Common/UI/IUIScene_HorseInventoryMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_HorseInventoryMenu.cpp new file mode 100644 index 00000000..8f1caab8 --- /dev/null +++ b/Minecraft.Client/Common/UI/IUIScene_HorseInventoryMenu.cpp @@ -0,0 +1,251 @@ +#include "stdafx.h" +#include "IUIScene_HorseInventoryMenu.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.entity.animal.h" + +IUIScene_AbstractContainerMenu::ESceneSection IUIScene_HorseInventoryMenu::GetSectionAndSlotInDirection( ESceneSection eSection, ETapState eTapDirection, int *piTargetX, int *piTargetY ) +{ + ESceneSection newSection = eSection; + + int xOffset = 0; + int yOffset = 0; + + // Find the new section if there is one + switch( eSection ) + { + case eSectionHorseUsing: + if(eTapDirection == eTapStateDown) + { + if(m_horse->isChestedHorse() && *piTargetX >= 4) + { + newSection = eSectionHorseChest; + xOffset = 4; + } + else + { + newSection = eSectionHorseSaddle; + } + } + else if(eTapDirection == eTapStateUp) + { + newSection = eSectionHorseInventory; + } + break; + case eSectionHorseInventory: + if(eTapDirection == eTapStateDown) + { + newSection = eSectionHorseUsing; + } + else if(eTapDirection == eTapStateUp) + { + if(m_horse->isChestedHorse() && *piTargetX >= 4) + { + xOffset = 4; + newSection = eSectionHorseChest; + } + else if(m_horse->canWearArmor()) + { + newSection = eSectionHorseArmor; + } + else + { + newSection = eSectionHorseSaddle; + } + } + break; + case eSectionHorseChest: + if(eTapDirection == eTapStateDown) + { + xOffset = -4; + newSection = eSectionHorseInventory; + } + else if(eTapDirection == eTapStateUp) + { + xOffset = -4; + newSection = eSectionHorseUsing; + } + else if(eTapDirection == eTapStateLeft) + { + if(*piTargetX < 0) + { + if(m_horse->canWearArmor() && *piTargetY == 1) + { + newSection = eSectionHorseArmor; + } + else if( *piTargetY == 0) + { + newSection = eSectionHorseSaddle; + } + } + } + else if(eTapDirection == eTapStateRight) + { + if(*piTargetX >= getSectionColumns(eSectionHorseChest)) + { + if(m_horse->canWearArmor() && *piTargetY == 1) + { + newSection = eSectionHorseArmor; + } + else if( *piTargetY == 0) + { + newSection = eSectionHorseSaddle; + } + } + } + break; + case eSectionHorseArmor: + if(eTapDirection == eTapStateDown) + { + if(m_horse->isChestedHorse()) + { + newSection = eSectionHorseChest; + } + else + { + newSection = eSectionHorseInventory; + } + } + else if(eTapDirection == eTapStateUp) + { + newSection = eSectionHorseSaddle; + } + else if(eTapDirection == eTapStateRight) + { + if(m_horse->isChestedHorse()) + { + yOffset = -1; + *piTargetX = 0; + newSection = eSectionHorseChest; + } + } + else if(eTapDirection == eTapStateLeft) + { + if(m_horse->isChestedHorse()) + { + yOffset = -1; + *piTargetX = getSectionColumns(eSectionHorseChest); + newSection = eSectionHorseChest; + } + } + break; + case eSectionHorseSaddle: + if(eTapDirection == eTapStateDown) + { + if(m_horse->canWearArmor()) + { + newSection = eSectionHorseArmor; + } + else + { + newSection = eSectionHorseInventory; + } + } + else if(eTapDirection == eTapStateUp) + { + newSection = eSectionHorseUsing; + } + else if(eTapDirection == eTapStateRight) + { + if(m_horse->isChestedHorse()) + { + *piTargetX = 0; + newSection = eSectionHorseChest; + } + } + else if(eTapDirection == eTapStateLeft) + { + if(m_horse->isChestedHorse()) + { + *piTargetX = getSectionColumns(eSectionHorseChest); + newSection = eSectionHorseChest; + } + } + break; + default: + assert(false); + break; + } + + updateSlotPosition(eSection, newSection, eTapDirection, piTargetX, piTargetY, xOffset, yOffset); + + return newSection; +} + +// TODO: Offset will vary by type of horse, add in once horse menu and horse entity are implemented +int IUIScene_HorseInventoryMenu::getSectionStartOffset(ESceneSection eSection) +{ + int offset = 0; + switch( eSection ) + { + case eSectionHorseSaddle: + offset = EntityHorse::INV_SLOT_SADDLE; + break; + case eSectionHorseArmor: + offset = EntityHorse::INV_SLOT_ARMOR; + break; + case eSectionHorseChest: + offset = EntityHorse::INV_BASE_COUNT; + break; + case eSectionHorseInventory: + offset = EntityHorse::INV_BASE_COUNT; + if(m_horse->isChestedHorse()) + { + offset += EntityHorse::INV_DONKEY_CHEST_COUNT; + } + break; + case eSectionHorseUsing: + offset = EntityHorse::INV_BASE_COUNT + 27; + if(m_horse->isChestedHorse()) + { + offset += EntityHorse::INV_DONKEY_CHEST_COUNT; + } + break; + default: + assert( false ); + break; + } + return offset; +} + +bool IUIScene_HorseInventoryMenu::IsSectionSlotList( ESceneSection eSection ) +{ + switch( eSection ) + { + case eSectionHorseChest: + if(!m_horse->isChestedHorse()) + return false; + else + return true; + case eSectionHorseArmor: + if(!m_horse->canWearArmor()) + return false; + else + return true; + case eSectionHorseSaddle: + case eSectionHorseInventory: + case eSectionHorseUsing: + return true; + } + return false; +} + +bool IUIScene_HorseInventoryMenu::IsVisible( ESceneSection eSection ) +{ + switch( eSection ) + { + case eSectionHorseChest: + if(!m_horse->isChestedHorse()) + return false; + else + return true; + case eSectionHorseArmor: + if(!m_horse->canWearArmor()) + return false; + else + return true; + case eSectionHorseSaddle: + case eSectionHorseInventory: + case eSectionHorseUsing: + return true; + } + return false; +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/IUIScene_HorseInventoryMenu.h b/Minecraft.Client/Common/UI/IUIScene_HorseInventoryMenu.h new file mode 100644 index 00000000..6df2001e --- /dev/null +++ b/Minecraft.Client/Common/UI/IUIScene_HorseInventoryMenu.h @@ -0,0 +1,20 @@ +#pragma once + +#include "IUIScene_AbstractContainerMenu.h" +#include "../../../Minecraft.World/Container.h" +#include "../../../Minecraft.World/Inventory.h" +#include "../../../Minecraft.World/EntityHorse.h" + +class IUIScene_HorseInventoryMenu : public virtual IUIScene_AbstractContainerMenu +{ +protected: + shared_ptr m_inventory; + shared_ptr m_container; + shared_ptr m_horse; + +public: + virtual ESceneSection GetSectionAndSlotInDirection(ESceneSection eSection, ETapState eTapDirection, int *piTargetX, int *piTargetY); + int getSectionStartOffset(ESceneSection eSection); + bool IsSectionSlotList( ESceneSection eSection ); + bool IsVisible( ESceneSection eSection ); +}; diff --git a/Minecraft.Client/Common/UI/IUIScene_PauseMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_PauseMenu.cpp index 79203e7c..ab1767d4 100644 --- a/Minecraft.Client/Common/UI/IUIScene_PauseMenu.cpp +++ b/Minecraft.Client/Common/UI/IUIScene_PauseMenu.cpp @@ -11,15 +11,23 @@ #include "..\..\DLCTexturePack.h" #include "..\..\..\Minecraft.World\StringHelpers.h" +#ifndef _XBOX +#include "UI.h" +#endif + int IUIScene_PauseMenu::ExitGameDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) { - IUIScene_PauseMenu *scene = (IUIScene_PauseMenu *)pParam; +#ifdef _XBOX + IUIScene_PauseMenu *pScene = (IUIScene_PauseMenu *)pParam; +#else + IUIScene_PauseMenu *pScene = dynamic_cast(ui.GetSceneFromCallbackId((size_t)pParam)); +#endif // Results switched for this dialog if(result==C4JStorage::EMessage_ResultDecline) { - scene->SetIgnoreInput(true); + if(pScene) pScene->SetIgnoreInput(true); app.SetAction(iPad,eAppAction_ExitWorld); } return 0; @@ -28,7 +36,11 @@ int IUIScene_PauseMenu::ExitGameDialogReturned(void *pParam,int iPad,C4JStorage: int IUIScene_PauseMenu::ExitGameSaveDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) { - IUIScene_PauseMenu *scene = (IUIScene_PauseMenu *)pParam; +#ifdef _XBOX + IUIScene_PauseMenu *pScene = (IUIScene_PauseMenu *)pParam; +#else + IUIScene_PauseMenu *pScene = dynamic_cast(ui.GetSceneFromCallbackId((size_t)pParam)); +#endif // Exit with or without saving // Decline means save in this dialog @@ -62,7 +74,7 @@ int IUIScene_PauseMenu::ExitGameSaveDialogReturned(void *pParam,int iPad,C4JStor uiIDA[1]=IDS_CONFIRM_CANCEL; // Give the player a warning about the trial version of the texture pack - ui.RequestMessageBox(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_WARNING_DLC_TRIALTEXTUREPACK_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad() , &IUIScene_PauseMenu::WarningTrialTexturePackReturned, scene,app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_WARNING_DLC_TRIALTEXTUREPACK_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad() , &IUIScene_PauseMenu::WarningTrialTexturePackReturned, pParam); return S_OK; } @@ -78,7 +90,7 @@ int IUIScene_PauseMenu::ExitGameSaveDialogReturned(void *pParam,int iPad,C4JStor UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TITLE_SAVE_GAME, IDS_CONFIRM_SAVE_GAME, uiIDA, 2, ProfileManager.GetPrimaryPad(), &IUIScene_PauseMenu::ExitGameAndSaveReturned, scene, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_TITLE_SAVE_GAME, IDS_CONFIRM_SAVE_GAME, uiIDA, 2, ProfileManager.GetPrimaryPad(), &IUIScene_PauseMenu::ExitGameAndSaveReturned, pParam); return 0; } else @@ -95,11 +107,11 @@ int IUIScene_PauseMenu::ExitGameSaveDialogReturned(void *pParam,int iPad,C4JStor UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TITLE_DECLINE_SAVE_GAME, IDS_CONFIRM_DECLINE_SAVE_GAME, uiIDA, 2, ProfileManager.GetPrimaryPad(), &IUIScene_PauseMenu::ExitGameDeclineSaveReturned, scene, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_TITLE_DECLINE_SAVE_GAME, IDS_CONFIRM_DECLINE_SAVE_GAME, uiIDA, 2, ProfileManager.GetPrimaryPad(), &IUIScene_PauseMenu::ExitGameDeclineSaveReturned, pParam); return 0; } - scene->SetIgnoreInput(true); + if(pScene) pScene->SetIgnoreInput(true); app.SetAction(iPad,eAppAction_ExitWorld); } @@ -110,7 +122,11 @@ int IUIScene_PauseMenu::ExitGameSaveDialogReturned(void *pParam,int iPad,C4JStor int IUIScene_PauseMenu::ExitGameAndSaveReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) { // 4J-PB - we won't come in here if we have a trial texture pack - IUIScene_PauseMenu *scene = (IUIScene_PauseMenu *)pParam; +#ifdef _XBOX + IUIScene_PauseMenu *pScene = (IUIScene_PauseMenu *)pParam; +#else + IUIScene_PauseMenu *pScene = dynamic_cast(ui.GetSceneFromCallbackId((size_t)pParam)); +#endif // results switched for this dialog if(result==C4JStorage::EMessage_ResultDecline) @@ -121,7 +137,7 @@ int IUIScene_PauseMenu::ExitGameAndSaveReturned(void *pParam,int iPad,C4JStorage #if defined(_XBOX_ONE) || defined(__ORBIS__) StorageManager.SetSaveDisabled(false); #endif - scene->SetIgnoreInput(true); + if(pScene) pScene->SetIgnoreInput(true); MinecraftServer::getInstance()->setSaveOnExit( true ); // flag a app action of exit game app.SetAction(iPad,eAppAction_ExitWorld); @@ -139,11 +155,11 @@ int IUIScene_PauseMenu::ExitGameAndSaveReturned(void *pParam,int iPad,C4JStorage if(g_NetworkManager.GetPlayerCount()>1) { - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_CONFIRM_DISCONNECT_SAVE, uiIDA, 3, ProfileManager.GetPrimaryPad(), &IUIScene_PauseMenu::ExitGameSaveDialogReturned, scene, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_CONFIRM_DISCONNECT_SAVE, uiIDA, 3, ProfileManager.GetPrimaryPad(), &IUIScene_PauseMenu::ExitGameSaveDialogReturned, pParam); } else { - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 3, ProfileManager.GetPrimaryPad(), &IUIScene_PauseMenu::ExitGameSaveDialogReturned, scene, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 3, ProfileManager.GetPrimaryPad(), &IUIScene_PauseMenu::ExitGameSaveDialogReturned, pParam); } } } @@ -154,7 +170,11 @@ int IUIScene_PauseMenu::ExitGameAndSaveReturned(void *pParam,int iPad,C4JStorage int IUIScene_PauseMenu::ExitGameDeclineSaveReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) { - IUIScene_PauseMenu *scene = (IUIScene_PauseMenu *)pParam; +#ifdef _XBOX + IUIScene_PauseMenu *pScene = (IUIScene_PauseMenu *)pParam; +#else + IUIScene_PauseMenu *pScene = dynamic_cast(ui.GetSceneFromCallbackId((size_t)pParam)); +#endif // results switched for this dialog if(result==C4JStorage::EMessage_ResultDecline) @@ -163,7 +183,7 @@ int IUIScene_PauseMenu::ExitGameDeclineSaveReturned(void *pParam,int iPad,C4JSto // Don't do this here, as it will still try and save some things even though it shouldn't! //StorageManager.SetSaveDisabled(false); #endif - scene->SetIgnoreInput(true); + if(pScene) pScene->SetIgnoreInput(true); MinecraftServer::getInstance()->setSaveOnExit( false ); // flag a app action of exit game app.SetAction(iPad,eAppAction_ExitWorld); @@ -181,11 +201,11 @@ int IUIScene_PauseMenu::ExitGameDeclineSaveReturned(void *pParam,int iPad,C4JSto if(g_NetworkManager.GetPlayerCount()>1) { - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_CONFIRM_DISCONNECT_SAVE, uiIDA, 3, ProfileManager.GetPrimaryPad(),&IUIScene_PauseMenu::ExitGameSaveDialogReturned, scene, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_CONFIRM_DISCONNECT_SAVE, uiIDA, 3, ProfileManager.GetPrimaryPad(),&IUIScene_PauseMenu::ExitGameSaveDialogReturned, pParam); } else { - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 3, ProfileManager.GetPrimaryPad(),&IUIScene_PauseMenu::ExitGameSaveDialogReturned, scene, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 3, ProfileManager.GetPrimaryPad(),&IUIScene_PauseMenu::ExitGameSaveDialogReturned, pParam); } } @@ -214,7 +234,7 @@ int IUIScene_PauseMenu::WarningTrialTexturePackReturned(void *pParam,int iPad,C4 { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad,NULL,&app, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad); } else { @@ -288,7 +308,7 @@ int IUIScene_PauseMenu::WarningTrialTexturePackReturned(void *pParam,int iPad,C4 { // 4J-JEV: Fix for XB1: #165863 - XR-074: Compliance: With no active network connection user is unable to convert from Trial to Full texture pack and is not messaged why. UINT uiIDA[1] = { IDS_CONFIRM_OK }; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad); } } } @@ -498,7 +518,7 @@ void IUIScene_PauseMenu::_ExitWorld(LPVOID lpParameter) uiIDA[0]=IDS_CONFIRM_OK; // 4J Stu - Fix for #48669 - TU5: Code: Compliance: TCR #15: Incorrect/misleading messages after signing out a profile during online game session. // If the primary player is signed out, then that is most likely the cause of the disconnection so don't display a message box. This will allow the message box requested by the libraries to be brought up - if( ProfileManager.IsSignedIn(ProfileManager.GetPrimaryPad())) ui.RequestMessageBox( exitReasonTitleId, exitReasonStringId, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); + if( ProfileManager.IsSignedIn(ProfileManager.GetPrimaryPad())) ui.RequestErrorMessage( exitReasonTitleId, exitReasonStringId, uiIDA,1,ProfileManager.GetPrimaryPad()); exitReasonStringId = -1; // 4J - Force a disconnection, this handles the situation that the server has already disconnected @@ -596,7 +616,7 @@ void IUIScene_PauseMenu::_ExitWorld(LPVOID lpParameter) UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( exitReasonTitleId, exitReasonStringId, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage( exitReasonTitleId, exitReasonStringId, uiIDA,1,ProfileManager.GetPrimaryPad()); exitReasonStringId = -1; } } @@ -644,7 +664,7 @@ int IUIScene_PauseMenu::SaveGameDialogReturned(void *pParam,int iPad,C4JStorage: UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TITLE_ENABLE_AUTOSAVE, IDS_CONFIRM_ENABLE_AUTOSAVE, uiIDA, 2, iPad,&IUIScene_PauseMenu::EnableAutosaveDialogReturned,pParam, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_TITLE_ENABLE_AUTOSAVE, IDS_CONFIRM_ENABLE_AUTOSAVE, uiIDA, 2, iPad,&IUIScene_PauseMenu::EnableAutosaveDialogReturned,pParam); #else // flag a app action of save game app.SetAction(iPad,eAppAction_SaveGame); diff --git a/Minecraft.Client/Common/UI/IUIScene_StartGame.cpp b/Minecraft.Client/Common/UI/IUIScene_StartGame.cpp index be611778..d3a9e8f0 100644 --- a/Minecraft.Client/Common/UI/IUIScene_StartGame.cpp +++ b/Minecraft.Client/Common/UI/IUIScene_StartGame.cpp @@ -239,7 +239,7 @@ void IUIScene_StartGame::UpdateCurrentTexturePack(int iSlot) // Give the player a warning about the texture pack missing - ui.RequestMessageBox(IDS_DLC_TEXTUREPACK_NOT_PRESENT_TITLE, IDS_DLC_TEXTUREPACK_NOT_PRESENT, uiIDA, 3, ProfileManager.GetPrimaryPad(),&:TexturePackDialogReturned,this,app.GetStringTable()); + ui.RequestErrorMessage(IDS_DLC_TEXTUREPACK_NOT_PRESENT_TITLE, IDS_DLC_TEXTUREPACK_NOT_PRESENT, uiIDA, 3, ProfileManager.GetPrimaryPad(),&:TexturePackDialogReturned,this); // do set the texture pack id, and on the user pressing create world, check they have it m_MoreOptionsParams.dwTexturePack = ListItem.iData; @@ -368,7 +368,7 @@ int IUIScene_StartGame::TexturePackDialogReturned(void *pParam,int iPad,C4JStora { // 4J-JEV: Fix for XB1: #165863 - XR-074: Compliance: With no active network connection user is unable to convert from Trial to Full texture pack and is not messaged why. UINT uiIDA[1] = { IDS_CONFIRM_OK }; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad); } } } diff --git a/Minecraft.Client/Common/UI/IUIScene_TradingMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_TradingMenu.cpp index 658bcdfb..8cc04940 100644 --- a/Minecraft.Client/Common/UI/IUIScene_TradingMenu.cpp +++ b/Minecraft.Client/Common/UI/IUIScene_TradingMenu.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "..\..\..\Minecraft.World\net.minecraft.world.item.trading.h" #include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.item.h" #include "..\..\..\Minecraft.World\net.minecraft.network.packet.h" #include "..\..\Minecraft.h" #include "..\..\MultiPlayerLocalPlayer.h" @@ -77,6 +78,9 @@ bool IUIScene_TradingMenu::handleKeyDown(int iPad, int iAction, bool bRepeat) int buyBMatches = player->inventory->countMatches(buyBItem); if( (buyAItem != NULL && buyAMatches >= buyAItem->count) && (buyBItem == NULL || buyBMatches >= buyBItem->count) ) { + // 4J-JEV: Fix for PS4 #7111: [PATCH 1.12] Trading Librarian villagers for multiple ‘Enchanted Books’ will cause the title to crash. + int actualShopItem = m_activeOffers.at(selectedShopItem).second; + m_merchant->notifyTrade(activeRecipe); // Remove the items we are purchasing with @@ -91,7 +95,6 @@ bool IUIScene_TradingMenu::handleKeyDown(int iPad, int iAction, bool bRepeat) } // Send a packet to the server - int actualShopItem = m_activeOffers.at(selectedShopItem).second; player->connection->send( shared_ptr( new TradeItemPacket(m_menu->containerId, actualShopItem) ) ); updateDisplay(); @@ -238,15 +241,14 @@ void IUIScene_TradingMenu::updateDisplay() // 4J-PB - need to get the villager type here wsTemp = app.GetString(IDS_VILLAGER_OFFERS_ITEM); - wsTemp = replaceAll(wsTemp,L"{*VILLAGER_TYPE*}",app.GetString(m_merchant->getDisplayName())); + wsTemp = replaceAll(wsTemp,L"{*VILLAGER_TYPE*}",m_merchant->getDisplayName()); int iPos=wsTemp.find(L"%s"); wsTemp.replace(iPos,2,activeRecipe->getSellItem()->getHoverName()); setTitle(wsTemp.c_str()); - vector unformattedStrings; - wstring offerDescription = GetItemDescription(activeRecipe->getSellItem(), unformattedStrings); - setOfferDescription(offerDescription, unformattedStrings); + vector *offerDescription = GetItemDescription(activeRecipe->getSellItem()); + setOfferDescription(offerDescription); shared_ptr buyAItem = activeRecipe->getBuyAItem(); shared_ptr buyBItem = activeRecipe->getBuyBItem(); @@ -299,13 +301,15 @@ void IUIScene_TradingMenu::updateDisplay() } else { - setTitle(app.GetString(m_merchant->getDisplayName())); + setTitle(m_merchant->getDisplayName()); setRequest1Name(L""); setRequest2Name(L""); setRequest1RedBox(false); setRequest2RedBox(false); setRequest1Item(nullptr); - setRequest2Item(nullptr); + setRequest2Item(nullptr); + vector offerDescription; + setOfferDescription(&offerDescription); } m_bHasUpdatedOnce = true; @@ -361,27 +365,20 @@ void IUIScene_TradingMenu::setTradeItem(int index, shared_ptr item { } -wstring IUIScene_TradingMenu::GetItemDescription(shared_ptr item, vector &unformattedStrings) +vector *IUIScene_TradingMenu::GetItemDescription(shared_ptr item) { - if(item == NULL) return L""; + vector *lines = item->getHoverText(nullptr, false); - wstring desc = L""; - vector *strings = item->getHoverTextOnly(nullptr, false, unformattedStrings); - bool firstLine = true; - for(AUTO_VAR(it, strings->begin()); it != strings->end(); ++it) + // Add rarity to first line + if (lines->size() > 0) { - wstring thisString = *it; - if(!firstLine) - { - desc.append( L"
" ); - } - else - { - firstLine = false; - } - desc.append( thisString ); + lines->at(0).color = item->getRarity()->color; } - strings->clear(); - delete strings; - return desc; + + return lines; } + +void IUIScene_TradingMenu::HandleInventoryUpdated() +{ + updateDisplay(); +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/IUIScene_TradingMenu.h b/Minecraft.Client/Common/UI/IUIScene_TradingMenu.h index c8edda67..726f13c7 100644 --- a/Minecraft.Client/Common/UI/IUIScene_TradingMenu.h +++ b/Minecraft.Client/Common/UI/IUIScene_TradingMenu.h @@ -40,16 +40,19 @@ protected: virtual void setRequest2RedBox(bool show) = 0; virtual void setTradeRedBox(int index, bool show) = 0; - virtual void setOfferDescription(const wstring &name, vector &unformattedStrings) = 0; + virtual void setOfferDescription(vector *description) = 0; virtual void setRequest1Item(shared_ptr item); virtual void setRequest2Item(shared_ptr item); virtual void setTradeItem(int index, shared_ptr item); -private: void updateDisplay(); + void HandleInventoryUpdated(); + +private: bool canMake(MerchantRecipe *recipe); - wstring GetItemDescription(shared_ptr item, vector &unformattedStrings); + + vector *GetItemDescription(shared_ptr item); public: shared_ptr getMerchant(); diff --git a/Minecraft.Client/Common/UI/UI.h b/Minecraft.Client/Common/UI/UI.h index 622ccf84..428b3b90 100644 --- a/Minecraft.Client/Common/UI/UI.h +++ b/Minecraft.Client/Common/UI/UI.h @@ -31,10 +31,12 @@ #include "UIControl_HTMLLabel.h" #include "UIControl_DynamicLabel.h" #include "UIControl_MinecraftPlayer.h" +#include "UIControl_MinecraftHorse.h" #include "UIControl_PlayerSkinPreview.h" #include "UIControl_EnchantmentButton.h" #include "UIControl_EnchantmentBook.h" #include "UIControl_SpaceIndicatorBar.h" +#include "UIControl_BeaconEffectButton.h" #ifdef __PSVITA__ #include "UIControl_Touch.h" @@ -85,6 +87,7 @@ #include "UIScene_SettingsUIMenu.h" #include "UIScene_SkinSelectMenu.h" #include "UIScene_HowToPlayMenu.h" +#include "UIScene_LanguageSelector.h" #include "UIScene_HowToPlay.h" #include "UIScene_ControlsMenu.h" #include "UIScene_Credits.h" @@ -101,6 +104,10 @@ #include "UIScene_CreativeMenu.h" #include "UIScene_TradingMenu.h" #include "UIScene_AnvilMenu.h" +#include "UIScene_HorseInventoryMenu.h" +#include "UIScene_HopperMenu.h" +#include "UIScene_BeaconMenu.h" +#include "UIScene_FireworksMenu.h" #include "UIScene_CraftingMenu.h" #include "UIScene_SignEntryMenu.h" @@ -116,3 +123,4 @@ #include "UIScene_TeleportMenu.h" #include "UIScene_EndPoem.h" #include "UIScene_EULA.h" +#include "UIScene_NewUpdateMessage.h" \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIBitmapFont.cpp b/Minecraft.Client/Common/UI/UIBitmapFont.cpp index ec49eea3..afc2b139 100644 --- a/Minecraft.Client/Common/UI/UIBitmapFont.cpp +++ b/Minecraft.Client/Common/UI/UIBitmapFont.cpp @@ -39,16 +39,16 @@ UIAbstractBitmapFont::UIAbstractBitmapFont(const string &fontname) void UIAbstractBitmapFont::registerFont() { - if(m_registered) + if (!m_registered) { - return; + // 4J-JEV: These only need registering the once when we first use this font in Iggy. + m_bitmapFontProvider->num_glyphs = m_numGlyphs; + IggyFontInstallBitmapUTF8( m_bitmapFontProvider, m_fontname.c_str(), -1, IGGY_FONTFLAG_none ); + m_registered = true; } - m_bitmapFontProvider->num_glyphs = m_numGlyphs; - - IggyFontInstallBitmapUTF8( m_bitmapFontProvider,m_fontname.c_str(),-1,IGGY_FONTFLAG_none ); - IggyFontSetIndirectUTF8( m_fontname.c_str(),-1 ,IGGY_FONTFLAG_all ,m_fontname.c_str() ,-1 ,IGGY_FONTFLAG_none ); - m_registered = true; + // 4J-JEV: Reset the font redirect to these fonts (we must do this everytime in-case we switched away elsewhere). + IggyFontSetIndirectUTF8( m_fontname.c_str(), -1, IGGY_FONTFLAG_all, m_fontname.c_str(), -1, IGGY_FONTFLAG_none ); } IggyFontMetrics * RADLINK UIAbstractBitmapFont::GetFontMetrics_Callback(void *user_context,IggyFontMetrics *metrics) @@ -357,7 +357,7 @@ rrbool UIBitmapFont::GetGlyphBitmap(S32 glyph,F32 pixel_scale,IggyBitmapCharacte } //Callback function type for freeing a bitmap shape returned by GetGlyphBitmap -void RADLINK UIBitmapFont::FreeGlyphBitmap(S32 glyph,F32 pixel_scale,IggyBitmapCharacter *bitmap) +void UIBitmapFont::FreeGlyphBitmap(S32 glyph,F32 pixel_scale,IggyBitmapCharacter *bitmap) { // We don't need to free anything,it just comes from the archive. //app.DebugPrintf("Free bitmap for glyph %d at scale %f\n",glyph,pixel_scale); diff --git a/Minecraft.Client/Common/UI/UIComponent_Panorama.cpp b/Minecraft.Client/Common/UI/UIComponent_Panorama.cpp index a418fcda..cb6443a1 100644 --- a/Minecraft.Client/Common/UI/UIComponent_Panorama.cpp +++ b/Minecraft.Client/Common/UI/UIComponent_Panorama.cpp @@ -51,7 +51,7 @@ void UIComponent_Panorama::tick() // are we in the Nether? - Leave the time as 0 if we are, so we show daylight if(pMinecraft->level->dimension->id==0) { - i64TimeOfDay = pMinecraft->level->getLevelData()->getTime() % 24000; + i64TimeOfDay = pMinecraft->level->getLevelData()->getGameTime() % 24000; } if(i64TimeOfDay>14000) diff --git a/Minecraft.Client/Common/UI/UIComponent_PressStartToPlay.cpp b/Minecraft.Client/Common/UI/UIComponent_PressStartToPlay.cpp index 2feb94c1..9af43df4 100644 --- a/Minecraft.Client/Common/UI/UIComponent_PressStartToPlay.cpp +++ b/Minecraft.Client/Common/UI/UIComponent_PressStartToPlay.cpp @@ -21,18 +21,15 @@ UIComponent_PressStartToPlay::UIComponent_PressStartToPlay(int iPad, void *initD m_labelTrialTimer.init(L""); m_labelTrialTimer.setVisible(false); + // 4J-JEV: This object is persistent, so this string needs to be able to handle language changes. #ifdef __ORBIS__ - wstring text = app.GetString(IDS_PRESS_X_TO_JOIN); - text = replaceAll(text, L"{*CONTROLLER_VK_A*}", app.GetVKReplacement(VK_PAD_A) ); - - m_labelPressStart.init(text.c_str()); + m_labelPressStart.init( (UIString) [] { return replaceAll(app.GetString(IDS_PRESS_X_TO_JOIN), L"{*CONTROLLER_VK_A*}", app.GetVKReplacement(VK_PAD_A) ); }); #elif defined _XBOX_ONE - wstring text = app.GetString(IDS_PRESS_START_TO_JOIN); - text = replaceAll(text, L"{*CONTROLLER_VK_START*}", app.GetVKReplacement(VK_PAD_START) ); - m_labelPressStart.init(text.c_str()); + m_labelPressStart.init( (UIString) [] { return replaceAll(app.GetString(IDS_PRESS_START_TO_JOIN), L"{*CONTROLLER_VK_START*}", app.GetVKReplacement(VK_PAD_START) ); }); #else - m_labelPressStart.init(app.GetString(IDS_PRESS_START_TO_JOIN)); + m_labelPressStart.init(IDS_PRESS_START_TO_JOIN); #endif + m_controlSaveIcon.setVisible(false); m_controlPressStartPanel.setVisible(false); m_playerDisplayName.setVisible(false); diff --git a/Minecraft.Client/Common/UI/UIComponent_Tooltips.cpp b/Minecraft.Client/Common/UI/UIComponent_Tooltips.cpp index 63eba1a5..255740c9 100644 --- a/Minecraft.Client/Common/UI/UIComponent_Tooltips.cpp +++ b/Minecraft.Client/Common/UI/UIComponent_Tooltips.cpp @@ -177,6 +177,18 @@ void UIComponent_Tooltips::tick() fVal=0.01f*(float)ucAlpha; } setOpacity(fVal); + + bool layoutChanges = false; + for (int i = 0; i < eToolTipNumButtons; i++) + { + if ( !ui.IsReloadingSkin() && m_tooltipValues[i].show && m_tooltipValues[i].label.needsUpdating() ) + { + layoutChanges = true; + _SetTooltip(i, m_tooltipValues[i].label, m_tooltipValues[i].show, true); + m_tooltipValues[i].label.setUpdated(); + } + } + if (layoutChanges) _Relayout(); } void UIComponent_Tooltips::render(S32 width, S32 height, C4JRender::eViewportType viewport) @@ -272,7 +284,7 @@ void UIComponent_Tooltips::ShowTooltip( unsigned int tooltip, bool show ) } } -void UIComponent_Tooltips::SetTooltips( int iA, int iB, int iX, int iY , int iLT, int iRT, int iLB, int iRB, int iLS, bool forceUpdate) +void UIComponent_Tooltips::SetTooltips( int iA, int iB, int iX, int iY , int iLT, int iRT, int iLB, int iRB, int iLS, int iRS, int iBack, bool forceUpdate) { bool needsRelayout = false; needsRelayout = _SetTooltip( eToolTipButtonA, iA ) || needsRelayout; @@ -284,8 +296,10 @@ void UIComponent_Tooltips::SetTooltips( int iA, int iB, int iX, int iY , int iLT needsRelayout = _SetTooltip( eToolTipButtonLB, iLB ) || needsRelayout; needsRelayout = _SetTooltip( eToolTipButtonRB, iRB ) || needsRelayout; needsRelayout = _SetTooltip( eToolTipButtonLS, iLS ) || needsRelayout; - - if(needsRelayout)_Relayout(); + needsRelayout = _SetTooltip( eToolTipButtonRS, iRS ) || needsRelayout; + needsRelayout = _SetTooltip( eToolTipButtonRS, iRS ) || needsRelayout; + needsRelayout = _SetTooltip( eToolTipButtonBack, iBack ) || needsRelayout; + if (needsRelayout) _Relayout(); } void UIComponent_Tooltips::EnableTooltip( unsigned int tooltip, bool enable ) @@ -299,20 +313,21 @@ bool UIComponent_Tooltips::_SetTooltip(unsigned int iToolTip, int iTextID) { m_tooltipValues[iToolTip].iString = iTextID; changed = true; - if(iTextID > -1) _SetTooltip(iToolTip, app.GetString(iTextID), true); - else if(iTextID == -2) _SetTooltip(iToolTip, L"", true); - else _SetTooltip(iToolTip, L"", false); + if(iTextID > -1) _SetTooltip(iToolTip, iTextID, true); + else if(iTextID == -2) _SetTooltip(iToolTip, L"", true); + else _SetTooltip(iToolTip, L"", false); } return changed; } -void UIComponent_Tooltips::_SetTooltip(unsigned int iToolTipId, const wstring &label, bool show, bool force) +void UIComponent_Tooltips::_SetTooltip(unsigned int iToolTipId, UIString label, bool show, bool force) { if(!force && !show && !m_tooltipValues[iToolTipId].show) { return; } m_tooltipValues[iToolTipId].show = show; + m_tooltipValues[iToolTipId].label = label; IggyDataValue result; IggyDataValue value[3]; @@ -330,7 +345,7 @@ void UIComponent_Tooltips::_SetTooltip(unsigned int iToolTipId, const wstring &l value[2].boolval = show; IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetTooltip , 3 , value ); - app.DebugPrintf("Actual tooltip update!\n"); + //app.DebugPrintf("Actual tooltip update!\n"); } void UIComponent_Tooltips::_Relayout() @@ -350,6 +365,10 @@ void UIComponent_Tooltips::handleTouchInput(unsigned int iPad, S32 x, S32 y, int //app.DebugPrintf("ToolTip Touch ID = %i\n", iId); bool handled = false; + // 4J - TomK no tooltips no touch! + if((!ui.GetMenuDisplayed(ProfileManager.GetPrimaryPad())) && (app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_Tooltips) == 0)) + return; + // perform action on release if(bReleased) { @@ -357,11 +376,17 @@ void UIComponent_Tooltips::handleTouchInput(unsigned int iPad, S32 x, S32 y, int { case ETouchInput_Touch_A: app.DebugPrintf("ToolTip Map Touch to _PSV_JOY_BUTTON_X\n", iId); - InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_X); + if(InputManager.IsCircleCrossSwapped()) + InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_O); + else + InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_X); break; case ETouchInput_Touch_B: app.DebugPrintf("ToolTip Map Touch to _PSV_JOY_BUTTON_O\n", iId); - InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_O); + if(InputManager.IsCircleCrossSwapped()) + InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_X); + else + InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_O); break; case ETouchInput_Touch_X: app.DebugPrintf("ToolTip Map Touch to _PSV_JOY_BUTTON_SQUARE\n", iId); @@ -376,8 +401,8 @@ void UIComponent_Tooltips::handleTouchInput(unsigned int iPad, S32 x, S32 y, int app.DebugPrintf("ToolTip no action\n", iId); break; case ETouchInput_Touch_RightTrigger: - app.DebugPrintf("ToolTip Map Touch to _PSV_JOY_BUTTON_SELECT\n", iId); - InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_SELECT); + app.DebugPrintf("ToolTip no action\n", iId); + /* no action */ break; case ETouchInput_Touch_LeftBumper: app.DebugPrintf("ToolTip Map Touch to _PSV_JOY_BUTTON_L1\n", iId); @@ -391,6 +416,14 @@ void UIComponent_Tooltips::handleTouchInput(unsigned int iPad, S32 x, S32 y, int app.DebugPrintf("ToolTip no action\n", iId); /* no action */ break; + case ETouchInput_Touch_RightStick: + app.DebugPrintf("ToolTip Map Touch to _PSV_JOY_BUTTON_DPAD_DOWN\n", iId); + InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_DPAD_DOWN); + break; + case ETouchInput_Touch_Select: + app.DebugPrintf("ToolTip Map Touch to _PSV_JOY_BUTTON_SELECT\n", iId); + InputManager.MapTouchInput(iPad, _PSV_JOY_BUTTON_SELECT); + break; } } } @@ -413,14 +446,14 @@ void UIComponent_Tooltips::handleReload() for(unsigned int i = 0; i < eToolTipNumButtons; ++i) { - _SetTooltip(i,app.GetString(m_tooltipValues[i].iString), m_tooltipValues[i].show, true); + _SetTooltip(i, m_tooltipValues[i].iString, m_tooltipValues[i].show, true); } _Relayout(); } void UIComponent_Tooltips::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) { - if(m_overrideSFX[iPad][key]) + if( (0 <= iPad) && (iPad <= 3) && m_overrideSFX[iPad][key] ) { // don't play a sound for this action switch(key) diff --git a/Minecraft.Client/Common/UI/UIComponent_Tooltips.h b/Minecraft.Client/Common/UI/UIComponent_Tooltips.h index 4b4c8268..f8db9439 100644 --- a/Minecraft.Client/Common/UI/UIComponent_Tooltips.h +++ b/Minecraft.Client/Common/UI/UIComponent_Tooltips.h @@ -13,6 +13,8 @@ protected: bool show; int iString; + UIString label; + _TooltipValues() { show = false; @@ -23,7 +25,7 @@ protected: TooltipValues m_tooltipValues[eToolTipNumButtons]; IggyName m_funcSetTooltip, m_funcSetOpacity, m_funcSetABSwap, m_funcUpdateLayout; - + #ifdef __PSVITA__ enum ETouchInput { @@ -36,6 +38,8 @@ protected: ETouchInput_Touch_LeftBumper, ETouchInput_Touch_RightBumper, ETouchInput_Touch_LeftStick, + ETouchInput_Touch_RightStick, + ETouchInput_Touch_Select, ETouchInput_Count, }; @@ -53,6 +57,8 @@ protected: UI_MAP_ELEMENT( m_TouchController[ETouchInput_Touch_LeftBumper], "Touch_LeftBumper") UI_MAP_ELEMENT( m_TouchController[ETouchInput_Touch_RightBumper], "Touch_RightBumper") UI_MAP_ELEMENT( m_TouchController[ETouchInput_Touch_LeftStick], "Touch_LeftStick") + UI_MAP_ELEMENT( m_TouchController[ETouchInput_Touch_RightStick], "Touch_RightStick") + UI_MAP_ELEMENT( m_TouchController[ETouchInput_Touch_Select], "Touch_Select") #endif UI_MAP_NAME( m_funcSetTooltip, L"SetToolTip") UI_MAP_NAME( m_funcSetOpacity, L"SetOpacity") @@ -88,7 +94,7 @@ public: virtual void SetTooltipText( unsigned int tooltip, int iTextID ); virtual void SetEnableTooltips( bool bVal ); virtual void ShowTooltip( unsigned int tooltip, bool show ); - virtual void SetTooltips( int iA, int iB=-1, int iX=-1, int iY=-1 , int iLT=-1, int iRT=-1, int iLB=-1, int iRB=-1, int iLS=-1, bool forceUpdate = false); + virtual void SetTooltips( int iA, int iB=-1, int iX=-1, int iY=-1 , int iLT=-1, int iRT=-1, int iLB=-1, int iRB=-1, int iLS=-1, int iRS=-1, int iBack=-1, bool forceUpdate = false); virtual void EnableTooltip( unsigned int tooltip, bool enable ); virtual void handleReload(); @@ -99,7 +105,7 @@ public: private: bool _SetTooltip(unsigned int iToolTip, int iTextID); - void _SetTooltip(unsigned int iToolTipId, const wstring &label, bool show, bool force = false); + void _SetTooltip(unsigned int iToolTipId, UIString label, bool show, bool force = false); void _Relayout(); bool m_overrideSFX[XUSER_MAX_COUNT][ACTION_MAX_MENU]; diff --git a/Minecraft.Client/Common/UI/UIComponent_TutorialPopup.cpp b/Minecraft.Client/Common/UI/UIComponent_TutorialPopup.cpp index 858a8b43..3b4eb097 100644 --- a/Minecraft.Client/Common/UI/UIComponent_TutorialPopup.cpp +++ b/Minecraft.Client/Common/UI/UIComponent_TutorialPopup.cpp @@ -21,6 +21,7 @@ UIComponent_TutorialPopup::UIComponent_TutorialPopup(int iPad, void *initData, U m_bContainerMenuVisible = false; m_bSplitscreenGamertagVisible = false; + m_iconType = e_ICON_TYPE_IGGY; m_labelDescription.init(L""); } @@ -63,6 +64,8 @@ void UIComponent_TutorialPopup::handleReload() value[0].type = IGGY_DATATYPE_boolean; value[0].boolval = (bool)((app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_DisplaySplitscreenGamertags)!=0) && !m_bContainerMenuVisible); // 4J - TomK - Offset for splitscreen gamertag? IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcAdjustLayout, 1 , value ); + + setupIconHolder(m_iconType); } void UIComponent_TutorialPopup::SetTutorialDescription(TutorialPopupInfo *info) @@ -317,7 +320,7 @@ wstring UIComponent_TutorialPopup::_SetIcon(int icon, int iAuxVal, bool isFoil, } else if(temp.find(L"{*StoneIcon*}")!=wstring::npos) { - m_iconItem = shared_ptr(new ItemInstance(Tile::rock_Id,1,0)); + m_iconItem = shared_ptr(new ItemInstance(Tile::stone_Id,1,0)); } else { @@ -428,6 +431,7 @@ void UIComponent_TutorialPopup::UpdateInteractScenePosition(bool visible) bool bAllowAnim=false; bool isCraftingScene = (m_interactScene->getSceneType() == eUIScene_Crafting2x2Menu) || (m_interactScene->getSceneType() == eUIScene_Crafting3x3Menu); bool isCreativeScene = (m_interactScene->getSceneType() == eUIScene_CreativeMenu); + bool isTradingScene = (m_interactScene->getSceneType() == eUIScene_TradingMenu); switch(Minecraft::GetInstance()->localplayers[m_iPad]->m_iScreenSection) { case C4JRender::VIEWPORT_TYPE_FULLSCREEN: @@ -437,7 +441,7 @@ void UIComponent_TutorialPopup::UpdateInteractScenePosition(bool visible) break; default: // anim allowed for everything except the crafting 2x2 and 3x3, and the creative menu - if(!isCraftingScene && !isCreativeScene) + if(!isCraftingScene && !isCreativeScene && !isTradingScene) { bAllowAnim=true; } @@ -536,4 +540,6 @@ void UIComponent_TutorialPopup::setupIconHolder(EIcons icon) value[0].type = IGGY_DATATYPE_number; value[0].number = (F64)icon; IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetupIconHolder , 1 , value ); + + m_iconType = icon; } diff --git a/Minecraft.Client/Common/UI/UIComponent_TutorialPopup.h b/Minecraft.Client/Common/UI/UIComponent_TutorialPopup.h index 36f78300..4e5f4285 100644 --- a/Minecraft.Client/Common/UI/UIComponent_TutorialPopup.h +++ b/Minecraft.Client/Common/UI/UIComponent_TutorialPopup.h @@ -39,6 +39,8 @@ private: e_ICON_TYPE_TRANSPORT = 11, }; + EIcons m_iconType; + public: UIComponent_TutorialPopup(int iPad, void *initData, UILayer *parentLayer); diff --git a/Minecraft.Client/Common/UI/UIControl.h b/Minecraft.Client/Common/UI/UIControl.h index 3b4ef050..e37f04de 100644 --- a/Minecraft.Client/Common/UI/UIControl.h +++ b/Minecraft.Client/Common/UI/UIControl.h @@ -20,6 +20,7 @@ public: eLabel, eLeaderboardList, eMinecraftPlayer, + eMinecraftHorse, ePlayerList, ePlayerSkinPreview, eProgress, diff --git a/Minecraft.Client/Common/UI/UIControl_Base.cpp b/Minecraft.Client/Common/UI/UIControl_Base.cpp index 18af2f63..7a4a24e5 100644 --- a/Minecraft.Client/Common/UI/UIControl_Base.cpp +++ b/Minecraft.Client/Common/UI/UIControl_Base.cpp @@ -7,7 +7,7 @@ UIControl_Base::UIControl_Base() { m_bLabelChanged = false; - m_label = L""; + m_label; m_id = 0; } @@ -27,7 +27,7 @@ void UIControl_Base::tick() { UIControl::tick(); - if(m_bLabelChanged) + if ( m_label.needsUpdating() || m_bLabelChanged ) { //app.DebugPrintf("Calling SetLabel - '%ls'\n", m_label.c_str()); m_bLabelChanged = false; @@ -37,15 +37,17 @@ void UIControl_Base::tick() value[0].type = IGGY_DATATYPE_string_UTF16; IggyStringUTF16 stringVal; - stringVal.string = (IggyUTF16*)m_label.c_str(); + stringVal.string = (IggyUTF16*) m_label.c_str(); stringVal.length = m_label.length(); value[0].string16 = stringVal; IggyResult out = IggyPlayerCallMethodRS ( m_parentScene->getMovie() , &result, getIggyValuePath() , m_setLabelFunc , 1 , value ); + + m_label.setUpdated(); } } -void UIControl_Base::setLabel(const wstring &label, bool instant, bool force) +void UIControl_Base::setLabel(UIString label, bool instant, bool force) { if( force || ((!m_label.empty() || !label.empty()) && m_label.compare(label) != 0) ) m_bLabelChanged = true; m_label = label; @@ -67,20 +69,14 @@ void UIControl_Base::setLabel(const wstring &label, bool instant, bool force) } } -void UIControl_Base::setLabel(const string &label) -{ - wstring wlabel = convStringToWstring(label); - setLabel(wlabel); -} - const wchar_t* UIControl_Base::getLabel() { IggyDataValue result; - IggyResult out = IggyPlayerCallMethodRS ( m_parentScene->getMovie() , &result, getIggyValuePath() , m_funcGetLabel , 0 , NULL ); + IggyResult out = IggyPlayerCallMethodRS(m_parentScene->getMovie(), &result, getIggyValuePath(), m_funcGetLabel, 0, NULL); if(result.type == IGGY_DATATYPE_string_UTF16) { - m_label = wstring( (wchar_t *)result.string16.string, result.string16.length); + m_label = wstring((wchar_t *)result.string16.string, result.string16.length); } return m_label.c_str(); diff --git a/Minecraft.Client/Common/UI/UIControl_Base.h b/Minecraft.Client/Common/UI/UIControl_Base.h index e70997c3..73ecac5a 100644 --- a/Minecraft.Client/Common/UI/UIControl_Base.h +++ b/Minecraft.Client/Common/UI/UIControl_Base.h @@ -1,6 +1,7 @@ #pragma once #include "UIControl.h" +#include "UIString.h" // This class maps to the FJ_Base class in actionscript class UIControl_Base : public UIControl @@ -12,7 +13,8 @@ protected: IggyName m_funcCheckLabelWidths; bool m_bLabelChanged; - wstring m_label; + UIString m_label; + public: UIControl_Base(); @@ -20,8 +22,9 @@ public: virtual void tick(); - virtual void setLabel(const wstring &label, bool instant = false, bool force = false); - virtual void setLabel(const string &label); + virtual void setLabel(UIString label, bool instant = false, bool force = false); + //virtual void setLabel(wstring label, bool instant = false, bool force = false) { this->setLabel(UIString::CONSTANT(label), instant, force); } + const wchar_t* getLabel(); virtual void setAllPossibleLabels(int labelCount, wchar_t labels[][256]); int getId() { return m_id; } diff --git a/Minecraft.Client/Common/UI/UIControl_BeaconEffectButton.cpp b/Minecraft.Client/Common/UI/UIControl_BeaconEffectButton.cpp new file mode 100644 index 00000000..7ee79307 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIControl_BeaconEffectButton.cpp @@ -0,0 +1,121 @@ +#include "stdafx.h" +#include "UI.h" +#include "UIControl_BeaconEffectButton.h" + +UIControl_BeaconEffectButton::UIControl_BeaconEffectButton() +{ + m_data = 0; + m_icon = 0; + m_selected = false; + m_active = false; + m_focus = false; +} + +bool UIControl_BeaconEffectButton::setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName) +{ + bool success = UIControl::setupControl(scene,parent,controlName); + + m_funcChangeState = registerFastName(L"ChangeState"); + m_funcSetIcon = registerFastName(L"SetIcon"); + + return success; +} + +void UIControl_BeaconEffectButton::SetData(int data, int icon, bool active, bool selected) +{ + m_data = data; + m_active = active; + m_selected = selected; + + SetIcon(icon); + UpdateButtonState(); +} + +int UIControl_BeaconEffectButton::GetData() +{ + return m_data; +} + +void UIControl_BeaconEffectButton::SetButtonSelected(bool selected) +{ + if(selected != m_selected) + { + m_selected = selected; + + UpdateButtonState(); + } +} + +bool UIControl_BeaconEffectButton::IsButtonSelected() +{ + return m_selected; +} + +void UIControl_BeaconEffectButton::SetButtonActive(bool active) +{ + if(m_active != active) + { + m_active = active; + + UpdateButtonState(); + } +} + +void UIControl_BeaconEffectButton::setFocus(bool focus) +{ + if(m_focus != focus) + { + m_focus = focus; + + UpdateButtonState(); + } +} + +void UIControl_BeaconEffectButton::SetIcon(int icon) +{ + if(icon != m_icon) + { + m_icon = icon; + + IggyDataValue result; + IggyDataValue value[1]; + + value[0].type = IGGY_DATATYPE_number; + value[0].number = m_icon; + IggyResult out = IggyPlayerCallMethodRS ( m_parentScene->getMovie() , &result, getIggyValuePath() , m_funcSetIcon , 1 , value ); + } +} + +void UIControl_BeaconEffectButton::UpdateButtonState() +{ + EState state = eState_Disabled; + + if(!m_active) + { + state = eState_Disabled; + } + else if(m_selected) + { + state = eState_Pressed; + } + else if(m_focus) + { + state = eState_Enabled_Selected; + } + else + { + state = eState_Enabled_Unselected; + } + + if(state != m_lastState) + { + IggyDataValue result; + IggyDataValue value[1]; + + value[0].type = IGGY_DATATYPE_number; + value[0].number = state; + IggyResult out = IggyPlayerCallMethodRS ( m_parentScene->getMovie() , &result, getIggyValuePath() , m_funcChangeState , 1 , value ); + + if(out == IGGY_RESULT_SUCCESS) m_lastState = state; + } +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIControl_BeaconEffectButton.h b/Minecraft.Client/Common/UI/UIControl_BeaconEffectButton.h new file mode 100644 index 00000000..788213da --- /dev/null +++ b/Minecraft.Client/Common/UI/UIControl_BeaconEffectButton.h @@ -0,0 +1,49 @@ +#pragma once + +#include "UIControl.h" + +class UIControl_BeaconEffectButton : public UIControl +{ +private: + static const int BUTTON_DISABLED = 0; + static const int BUTTON_ENABLED_UNSELECTED = 1; + static const int BUTTON_ENABLED_SELECTED = 2; + static const int BUTTON_PRESSED = 3; + + enum EState + { + eState_Disabled, + eState_Enabled_Unselected, + eState_Enabled_Selected, + eState_Pressed + }; + EState m_lastState; + + int m_data; + int m_icon; + bool m_selected; + bool m_active; + bool m_focus; + + IggyName m_funcChangeState, m_funcSetIcon; + +public: + UIControl_BeaconEffectButton(); + + virtual bool setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName); + + void SetData(int data, int icon, bool active, bool selected); + int GetData(); + + void SetButtonSelected(bool selected); + bool IsButtonSelected(); + + void SetButtonActive(bool active); + + virtual void setFocus(bool focus); + + void SetIcon(int icon); + +private: + void UpdateButtonState(); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIControl_Button.cpp b/Minecraft.Client/Common/UI/UIControl_Button.cpp index 96ddb8eb..70adb6b1 100644 --- a/Minecraft.Client/Common/UI/UIControl_Button.cpp +++ b/Minecraft.Client/Common/UI/UIControl_Button.cpp @@ -17,7 +17,7 @@ bool UIControl_Button::setupControl(UIScene *scene, IggyValuePath *parent, const return success; } -void UIControl_Button::init(const wstring &label, int id) +void UIControl_Button::init(UIString label, int id) { m_label = label; m_id = id; diff --git a/Minecraft.Client/Common/UI/UIControl_Button.h b/Minecraft.Client/Common/UI/UIControl_Button.h index 367a48d7..7369e8a0 100644 --- a/Minecraft.Client/Common/UI/UIControl_Button.h +++ b/Minecraft.Client/Common/UI/UIControl_Button.h @@ -12,7 +12,9 @@ public: virtual bool setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName); - void init(const wstring &label, int id); + void init(UIString label, int id); + //void init(const wstring &label, int id) { init(UIString::CONSTANT(label), id); } + virtual void ReInit(); void setEnable(bool enable); diff --git a/Minecraft.Client/Common/UI/UIControl_ButtonList.cpp b/Minecraft.Client/Common/UI/UIControl_ButtonList.cpp index 32db4843..68a3d655 100644 --- a/Minecraft.Client/Common/UI/UIControl_ButtonList.cpp +++ b/Minecraft.Client/Common/UI/UIControl_ButtonList.cpp @@ -195,3 +195,47 @@ bool UIControl_ButtonList::CanTouchTrigger(S32 iX, S32 iY) return bCanTouchTrigger; } #endif + + +void UIControl_DynamicButtonList::tick() +{ + UIControl_ButtonList::tick(); + + int buttonIndex = 0; + vector::iterator itr; + for (itr = m_labels.begin(); itr != m_labels.end(); itr++) + { + if ( itr->needsUpdating() ) + { + setButtonLabel(buttonIndex, itr->getString()); + itr->setUpdated(); + } + buttonIndex++; + } +} + +void UIControl_DynamicButtonList::addItem(UIString label, int data) +{ + if (data < 0) data = m_itemCount; + + if (data < m_labels.size()) + { + m_labels[data] = label; + } + else + { + while (data > m_labels.size()) + { + m_labels.push_back(UIString()); + } + m_labels.push_back(label); + } + + UIControl_ButtonList::addItem(label.getString(), data); +} + +void UIControl_DynamicButtonList::removeItem(int index) +{ + m_labels.erase( m_labels.begin() + index ); + UIControl_ButtonList::removeItem(index); +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIControl_ButtonList.h b/Minecraft.Client/Common/UI/UIControl_ButtonList.h index a3c5da3a..44484ac3 100644 --- a/Minecraft.Client/Common/UI/UIControl_ButtonList.h +++ b/Minecraft.Client/Common/UI/UIControl_ButtonList.h @@ -41,4 +41,18 @@ public: void SetTouchFocus(S32 iX, S32 iY, bool bRepeat); bool CanTouchTrigger(S32 iX, S32 iY); #endif + }; + +class UIControl_DynamicButtonList : public UIControl_ButtonList +{ +protected: + vector m_labels; + +public: + virtual void tick(); + + virtual void addItem(UIString label, int data = -1); + + virtual void removeItem(int index); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIControl_CheckBox.cpp b/Minecraft.Client/Common/UI/UIControl_CheckBox.cpp index d3bdf758..1c3e8afe 100644 --- a/Minecraft.Client/Common/UI/UIControl_CheckBox.cpp +++ b/Minecraft.Client/Common/UI/UIControl_CheckBox.cpp @@ -21,7 +21,7 @@ bool UIControl_CheckBox::setupControl(UIScene *scene, IggyValuePath *parent, con return success; } -void UIControl_CheckBox::init(const wstring &label, int id, bool checked) +void UIControl_CheckBox::init(UIString label, int id, bool checked) { m_label = label; m_id = id; diff --git a/Minecraft.Client/Common/UI/UIControl_CheckBox.h b/Minecraft.Client/Common/UI/UIControl_CheckBox.h index 924e9c68..f8c0284b 100644 --- a/Minecraft.Client/Common/UI/UIControl_CheckBox.h +++ b/Minecraft.Client/Common/UI/UIControl_CheckBox.h @@ -14,7 +14,7 @@ public: virtual bool setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName); - void init(const wstring &label, int id, bool checked); + void init(UIString label, int id, bool checked); bool IsChecked(); bool IsEnabled(); diff --git a/Minecraft.Client/Common/UI/UIControl_EnchantmentBook.cpp b/Minecraft.Client/Common/UI/UIControl_EnchantmentBook.cpp index ef7c0e94..9664dbf4 100644 --- a/Minecraft.Client/Common/UI/UIControl_EnchantmentBook.cpp +++ b/Minecraft.Client/Common/UI/UIControl_EnchantmentBook.cpp @@ -34,9 +34,7 @@ void UIControl_EnchantmentBook::render(IggyCustomDrawCallbackRegion *region) glTranslatef(m_width/2, m_height/2, 50.0f); // Add a uniform scale - glScalef(1/ssX, 1/ssX, 1.0f); - - glScalef(50.0f,50.0f,1.0f); + glScalef(-57/ssX, 57/ssX, 360.0f); glRotatef(45 + 90, 0, 1, 0); Lighting::turnOn(); diff --git a/Minecraft.Client/Common/UI/UIControl_EnchantmentButton.cpp b/Minecraft.Client/Common/UI/UIControl_EnchantmentButton.cpp index e1490e0b..37f8fcf6 100644 --- a/Minecraft.Client/Common/UI/UIControl_EnchantmentButton.cpp +++ b/Minecraft.Client/Common/UI/UIControl_EnchantmentButton.cpp @@ -35,6 +35,18 @@ void UIControl_EnchantmentButton::init(int index) m_index = index; } + +void UIControl_EnchantmentButton::ReInit() +{ + UIControl_Button::ReInit(); + + + m_lastState = eState_Inactive; + m_lastCost = 0; + m_bHasFocus = false; + updateState(); +} + void UIControl_EnchantmentButton::tick() { updateState(); diff --git a/Minecraft.Client/Common/UI/UIControl_EnchantmentButton.h b/Minecraft.Client/Common/UI/UIControl_EnchantmentButton.h index 9b8a3c8f..f7a703b3 100644 --- a/Minecraft.Client/Common/UI/UIControl_EnchantmentButton.h +++ b/Minecraft.Client/Common/UI/UIControl_EnchantmentButton.h @@ -46,7 +46,7 @@ public: virtual void tick(); void init(int index); - + virtual void ReInit(); void render(IggyCustomDrawCallbackRegion *region); void updateState(); diff --git a/Minecraft.Client/Common/UI/UIControl_Label.cpp b/Minecraft.Client/Common/UI/UIControl_Label.cpp index 1481fea1..47374d21 100644 --- a/Minecraft.Client/Common/UI/UIControl_Label.cpp +++ b/Minecraft.Client/Common/UI/UIControl_Label.cpp @@ -5,6 +5,7 @@ UIControl_Label::UIControl_Label() { + m_reinitEnabled = true; } bool UIControl_Label::setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName) @@ -17,7 +18,7 @@ bool UIControl_Label::setupControl(UIScene *scene, IggyValuePath *parent, const return success; } -void UIControl_Label::init(const wstring &label) +void UIControl_Label::init(UIString label) { m_label = label; @@ -32,22 +33,13 @@ void UIControl_Label::init(const wstring &label) IggyResult out = IggyPlayerCallMethodRS ( m_parentScene->getMovie() , &result, getIggyValuePath() , m_initFunc , 1 , value ); } -void UIControl_Label::init(const string &label) -{ - m_label = convStringToWstring(label); - IggyDataValue result; - IggyDataValue value[1]; - value[0].type = IGGY_DATATYPE_string_UTF8; - IggyStringUTF8 stringVal; - - stringVal.string = (char *)label.c_str(); - stringVal.length = label.length(); - value[0].string8 = stringVal; - IggyResult out = IggyPlayerCallMethodRS ( m_parentScene->getMovie() , &result, getIggyValuePath() , m_initFunc , 1 , value ); -} - void UIControl_Label::ReInit() { UIControl_Base::ReInit(); - init(m_label); + + // 4J-JEV: This can't be reinitialised. + if (m_reinitEnabled) + { + init(m_label); + } } diff --git a/Minecraft.Client/Common/UI/UIControl_Label.h b/Minecraft.Client/Common/UI/UIControl_Label.h index aa0f3f14..21eb35a6 100644 --- a/Minecraft.Client/Common/UI/UIControl_Label.h +++ b/Minecraft.Client/Common/UI/UIControl_Label.h @@ -4,12 +4,16 @@ class UIControl_Label : public UIControl_Base { +private: + bool m_reinitEnabled; + public: UIControl_Label(); virtual bool setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName); - void init(const wstring &label); - void init(const string &label); + void init(UIString label); virtual void ReInit(); + + void disableReinitialisation() { m_reinitEnabled = false; } }; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIControl_MinecraftHorse.cpp b/Minecraft.Client/Common/UI/UIControl_MinecraftHorse.cpp new file mode 100644 index 00000000..457e2028 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIControl_MinecraftHorse.cpp @@ -0,0 +1,103 @@ +#include "stdafx.h" +#include "..\..\Minecraft.h" +#include "..\..\ScreenSizeCalculator.h" +#include "..\..\EntityRenderDispatcher.h" + +#include "..\..\PlayerRenderer.h" +#include "..\..\HorseRenderer.h" + +#include "..\..\HumanoidModel.h" +#include "..\..\ModelHorse.h" + +#include "..\..\Lighting.h" +#include "..\..\ModelPart.h" +#include "..\..\Options.h" + +#include "..\..\..\Minecraft.World\net.minecraft.world.entity.player.h" +//#include "..\..\..\Minecraft.World\net.minecraft.world.entity.animal.EntityHorse.h" + +#include "..\..\MultiplayerLocalPlayer.h" +#include "UI.h" +#include "UIControl_MinecraftHorse.h" + +UIControl_MinecraftHorse::UIControl_MinecraftHorse() +{ + UIControl::setControlType(UIControl::eMinecraftHorse); + + Minecraft *pMinecraft=Minecraft::GetInstance(); + + ScreenSizeCalculator ssc(pMinecraft->options, pMinecraft->width_phys, pMinecraft->height_phys); + m_fScreenWidth=(float)pMinecraft->width_phys; + m_fRawWidth=(float)ssc.rawWidth; + m_fScreenHeight=(float)pMinecraft->height_phys; + m_fRawHeight=(float)ssc.rawHeight; +} + +void UIControl_MinecraftHorse::render(IggyCustomDrawCallbackRegion *region) +{ + Minecraft *pMinecraft = Minecraft::GetInstance(); + glEnable(GL_RESCALE_NORMAL); + glEnable(GL_COLOR_MATERIAL); + glPushMatrix(); + + float width = region->x1 - region->x0; + float height = region->y1 - region->y0; + float xo = width/2; + float yo = height; + + // dynamic y offset according to region height + glTranslatef(xo, yo - (height / 7.5f), 50.0f); + + //UIScene_InventoryMenu *containerMenu = (UIScene_InventoryMenu *)m_parentScene; + UIScene_HorseInventoryMenu *containerMenu = (UIScene_HorseInventoryMenu *)m_parentScene; + + shared_ptr entityHorse = containerMenu->m_horse; + + // Base scale on height of this control + // Potentially we might want separate x & y scales here + float ss = width / (m_fScreenWidth / m_fScreenHeight) * 0.71f; + + glScalef(-ss, ss, ss); + glRotatef(180, 0, 0, 1); + + float oybr = entityHorse->yBodyRot; + float oyr = entityHorse->yRot; + float oxr = entityHorse->xRot; + float oyhr = entityHorse->yHeadRot; + + //float xd = ( matrix._41 + ( (bwidth*matrix._11)/2) ) - m_pointerPos.x; + float xd = (m_x + m_width/2) - containerMenu->m_pointerPos.x; + + // Need to base Y on head position, not centre of mass + //float yd = ( matrix._42 + ( (bheight*matrix._22) / 2) - 40 ) - m_pointerPos.y; + float yd = (m_y + m_height/2 - 40) - containerMenu->m_pointerPos.y; + + glRotatef(45 + 90, 0, 1, 0); + Lighting::turnOn(); + glRotatef(-45 - 90, 0, 1, 0); + + glRotatef(-(float) atan(yd / 40.0f) * 20, 1, 0, 0); + + entityHorse->yBodyRot = (float) atan(xd / 40.0f) * 20; + entityHorse->yRot = (float) atan(xd / 40.0f) * 40; + entityHorse->xRot = -(float) atan(yd / 40.0f) * 20; + entityHorse->yHeadRot = entityHorse->yRot; + //entityHorse->glow = 1; + glTranslatef(0, entityHorse->heightOffset, 0); + EntityRenderDispatcher::instance->playerRotY = 180; + + // 4J Stu - Turning on hideGui while we do this stops the name rendering in split-screen + bool wasHidingGui = pMinecraft->options->hideGui; + pMinecraft->options->hideGui = true; + EntityRenderDispatcher::instance->render(entityHorse, 0, 0, 0, 0, 1, false, false); + pMinecraft->options->hideGui = wasHidingGui; + //entityHorse->glow = 0; + + entityHorse->yBodyRot = oybr; + entityHorse->yRot = oyr; + entityHorse->xRot = oxr; + entityHorse->yHeadRot = oyhr; + glPopMatrix(); + Lighting::turnOff(); + glDisable(GL_RESCALE_NORMAL); +} diff --git a/Minecraft.Client/Common/UI/UIControl_MinecraftHorse.h b/Minecraft.Client/Common/UI/UIControl_MinecraftHorse.h new file mode 100644 index 00000000..ec355527 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIControl_MinecraftHorse.h @@ -0,0 +1,15 @@ +#pragma once + +#include "UIControl.h" + +class UIControl_MinecraftHorse : public UIControl +{ +private: + float m_fScreenWidth,m_fScreenHeight; + float m_fRawWidth,m_fRawHeight; + +public: + UIControl_MinecraftHorse(); + + void render(IggyCustomDrawCallbackRegion *region); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIControl_MinecraftPlayer.cpp b/Minecraft.Client/Common/UI/UIControl_MinecraftPlayer.cpp index 3a18ed53..d0625bce 100644 --- a/Minecraft.Client/Common/UI/UIControl_MinecraftPlayer.cpp +++ b/Minecraft.Client/Common/UI/UIControl_MinecraftPlayer.cpp @@ -37,7 +37,8 @@ void UIControl_MinecraftPlayer::render(IggyCustomDrawCallbackRegion *region) float xo = width/2; float yo = height; - glTranslatef(xo, yo - 7.0f, 50.0f); + // dynamic y offset according to region height + glTranslatef(xo, yo - (height / 9.0f), 50.0f); float ss; diff --git a/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp b/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp index 544b4da1..2d7c0224 100644 --- a/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp +++ b/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp @@ -217,7 +217,7 @@ void UIControl_PlayerSkinPreview::render(IggyCustomDrawCallbackRegion *region) pMinecraft->options->hideGui = true; //EntityRenderDispatcher::instance->render(pMinecraft->localplayers[0], 0, 0, 0, 0, 1); - EntityRenderer *renderer = EntityRenderDispatcher::instance->getRenderer(eTYPE_PLAYER); + EntityRenderer *renderer = EntityRenderDispatcher::instance->getRenderer(eTYPE_LOCALPLAYER); if (renderer != NULL) { // 4J-PB - any additional parts to turn on for this player (skin dependent) @@ -335,7 +335,12 @@ void UIControl_PlayerSkinPreview::render(EntityRenderer *renderer, double x, dou float s = 15 / 16.0f; glScalef(s, s, s); + // 4J - TomK - pull up character a bit more to make sure extra geo around feet doesn't cause rendering problems on PSVita +#ifdef __PSVITA__ + glTranslatef(0, -24 * _scale - 1.0f / 16.0f, 0); +#else glTranslatef(0, -24 * _scale - 0.125f / 16.0f, 0); +#endif #ifdef SKIN_PREVIEW_WALKING_ANIM m_walkAnimSpeedO = m_walkAnimSpeed; diff --git a/Minecraft.Client/Common/UI/UIControl_Progress.cpp b/Minecraft.Client/Common/UI/UIControl_Progress.cpp index e2ab817d..78e7c1d0 100644 --- a/Minecraft.Client/Common/UI/UIControl_Progress.cpp +++ b/Minecraft.Client/Common/UI/UIControl_Progress.cpp @@ -23,7 +23,7 @@ bool UIControl_Progress::setupControl(UIScene *scene, IggyValuePath *parent, con return success; } -void UIControl_Progress::init(const wstring &label, int id, int min, int max, int current) +void UIControl_Progress::init(UIString label, int id, int min, int max, int current) { m_label = label; m_id = id; diff --git a/Minecraft.Client/Common/UI/UIControl_Progress.h b/Minecraft.Client/Common/UI/UIControl_Progress.h index 8398a188..10601237 100644 --- a/Minecraft.Client/Common/UI/UIControl_Progress.h +++ b/Minecraft.Client/Common/UI/UIControl_Progress.h @@ -17,7 +17,7 @@ public: virtual bool setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName); - void init(const wstring &label, int id, int min, int max, int current); + void init(UIString label, int id, int min, int max, int current); virtual void ReInit(); void setProgress(int current); diff --git a/Minecraft.Client/Common/UI/UIControl_Slider.cpp b/Minecraft.Client/Common/UI/UIControl_Slider.cpp index bd3b1ada..c2168002 100644 --- a/Minecraft.Client/Common/UI/UIControl_Slider.cpp +++ b/Minecraft.Client/Common/UI/UIControl_Slider.cpp @@ -22,7 +22,7 @@ bool UIControl_Slider::setupControl(UIScene *scene, IggyValuePath *parent, const return success; } -void UIControl_Slider::init(const wstring &label, int id, int min, int max, int current) +void UIControl_Slider::init(UIString label, int id, int min, int max, int current) { m_label = label; m_id = id; @@ -104,6 +104,7 @@ S32 UIControl_Slider::GetRealWidth() void UIControl_Slider::setAllPossibleLabels(int labelCount, wchar_t labels[][256]) { + m_allPossibleLabels.clear(); for(unsigned int i = 0; i < labelCount; ++i) { m_allPossibleLabels.push_back(labels[i]); diff --git a/Minecraft.Client/Common/UI/UIControl_Slider.h b/Minecraft.Client/Common/UI/UIControl_Slider.h index 0b57c2f1..505f6dd2 100644 --- a/Minecraft.Client/Common/UI/UIControl_Slider.h +++ b/Minecraft.Client/Common/UI/UIControl_Slider.h @@ -21,7 +21,7 @@ public: virtual bool setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName); - void init(const wstring &label, int id, int min, int max, int current); + void init(UIString label, int id, int min, int max, int current); void handleSliderMove(int newValue); void SetSliderTouchPos(float fTouchPos); diff --git a/Minecraft.Client/Common/UI/UIControl_SlotList.cpp b/Minecraft.Client/Common/UI/UIControl_SlotList.cpp index e2130431..01d7b9e5 100644 --- a/Minecraft.Client/Common/UI/UIControl_SlotList.cpp +++ b/Minecraft.Client/Common/UI/UIControl_SlotList.cpp @@ -22,6 +22,13 @@ bool UIControl_SlotList::setupControl(UIScene *scene, IggyValuePath *parent, con return success; } +void UIControl_SlotList::ReInit() +{ + UIControl_Base::ReInit(); + + m_lastHighlighted = -1; +} + void UIControl_SlotList::addSlot(int id) { IggyDataValue result; diff --git a/Minecraft.Client/Common/UI/UIControl_SlotList.h b/Minecraft.Client/Common/UI/UIControl_SlotList.h index ee741c4d..5bc1dc9a 100644 --- a/Minecraft.Client/Common/UI/UIControl_SlotList.h +++ b/Minecraft.Client/Common/UI/UIControl_SlotList.h @@ -14,6 +14,8 @@ public: UIControl_SlotList(); virtual bool setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName); + + virtual void ReInit(); void addSlot(int id); void addSlots(int iStartValue, int iCount); diff --git a/Minecraft.Client/Common/UI/UIControl_SpaceIndicatorBar.cpp b/Minecraft.Client/Common/UI/UIControl_SpaceIndicatorBar.cpp index dfdea93e..74683a62 100644 --- a/Minecraft.Client/Common/UI/UIControl_SpaceIndicatorBar.cpp +++ b/Minecraft.Client/Common/UI/UIControl_SpaceIndicatorBar.cpp @@ -24,7 +24,7 @@ bool UIControl_SpaceIndicatorBar::setupControl(UIScene *scene, IggyValuePath *pa return success; } -void UIControl_SpaceIndicatorBar::init(const wstring &label, int id, __int64 min, __int64 max) +void UIControl_SpaceIndicatorBar::init(UIString label, int id, __int64 min, __int64 max) { m_label = label; m_id = id; diff --git a/Minecraft.Client/Common/UI/UIControl_SpaceIndicatorBar.h b/Minecraft.Client/Common/UI/UIControl_SpaceIndicatorBar.h index 39f9a746..8eed3944 100644 --- a/Minecraft.Client/Common/UI/UIControl_SpaceIndicatorBar.h +++ b/Minecraft.Client/Common/UI/UIControl_SpaceIndicatorBar.h @@ -18,7 +18,7 @@ public: virtual bool setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName); - void init(const wstring &label, int id, __int64 min, __int64 max); + void init(UIString label, int id, __int64 min, __int64 max); virtual void ReInit(); void reset(); diff --git a/Minecraft.Client/Common/UI/UIControl_TextInput.cpp b/Minecraft.Client/Common/UI/UIControl_TextInput.cpp index 4cb78d50..dc7bc532 100644 --- a/Minecraft.Client/Common/UI/UIControl_TextInput.cpp +++ b/Minecraft.Client/Common/UI/UIControl_TextInput.cpp @@ -20,7 +20,7 @@ bool UIControl_TextInput::setupControl(UIScene *scene, IggyValuePath *parent, co return success; } -void UIControl_TextInput::init(const wstring &label, int id) +void UIControl_TextInput::init(UIString label, int id) { m_label = label; m_id = id; diff --git a/Minecraft.Client/Common/UI/UIControl_TextInput.h b/Minecraft.Client/Common/UI/UIControl_TextInput.h index d4023884..98032d85 100644 --- a/Minecraft.Client/Common/UI/UIControl_TextInput.h +++ b/Minecraft.Client/Common/UI/UIControl_TextInput.h @@ -13,7 +13,7 @@ public: virtual bool setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName); - void init(const wstring &label, int id); + void init(UIString label, int id); void ReInit(); virtual void setFocus(bool focus); diff --git a/Minecraft.Client/Common/UI/UIController.cpp b/Minecraft.Client/Common/UI/UIController.cpp index 87c495d2..8b38bbb3 100644 --- a/Minecraft.Client/Common/UI/UIController.cpp +++ b/Minecraft.Client/Common/UI/UIController.cpp @@ -163,11 +163,17 @@ UIController::UIController() { m_uiDebugConsole = NULL; m_reloadSkinThread = NULL; + m_navigateToHomeOnReload = false; - m_mcTTFFont= NULL; + + m_bCleanupOnReload = false; + m_mcTTFFont = NULL; m_moj7 = NULL; m_moj11 = NULL; + // 4J-JEV: It's important that these remain the same, unless updateCurrentLanguage is going to be called. + m_eCurrentFont = m_eTargetFont = eFont_NotLoaded; + #ifdef ENABLE_IGGY_ALLOCATOR InitializeCriticalSection(&m_Allocatorlock); #endif @@ -211,6 +217,7 @@ UIController::UIController() m_bCustomRenderPosition = false; m_winUserIndex = 0; m_accumulatedTicks = 0; + m_lastUiSfx = 0; InitializeCriticalSection(&m_navigationLock); InitializeCriticalSection(&m_registeredCallbackScenesCS); @@ -303,79 +310,149 @@ void UIController::postInit() NavigateToScene(0, eUIScene_Intro); } -void UIController::SetupFont() -{ - bool bBitmapFont=false; - if(m_mcTTFFont!=NULL) +UIController::EFont UIController::getFontForLanguage(int language) { - delete m_mcTTFFont; + switch(language) + { + case XC_LANGUAGE_JAPANESE: return eFont_Japanese; +#ifdef _DURANGO + case XC_LANGUAGE_SCHINESE: return eFont_SimpChinese; +#endif + case XC_LANGUAGE_TCHINESE: return eFont_TradChinese; + case XC_LANGUAGE_KOREAN: return eFont_Korean; + default: return eFont_Bitmap; } +} - switch(XGetLanguage()) +UITTFFont *UIController::createFont(EFont fontLanguage) + { + switch(fontLanguage) { #if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) - case XC_LANGUAGE_JAPANESE: - m_mcTTFFont = new UITTFFont("Common/Media/font/JPN/DF-DotDotGothic16.ttf", 0x203B); // JPN - break; - case XC_LANGUAGE_SCHINESE: //TODO - case XC_LANGUAGE_TCHINESE: - m_mcTTFFont = new UITTFFont("Common/Media/font/CHT/DFTT_R5.TTC", 0x203B); // CHT - break; - case XC_LANGUAGE_KOREAN: - m_mcTTFFont = new UITTFFont("Common/Media/font/KOR/candadite2.ttf", 0x203B); // KOR - break; - // 4J-JEV, Cyrillic characters have been added to this font now, (4/July/14) - //case XC_LANGUAGE_RUSSIAN: - //case XC_LANGUAGE_GREEK: + case eFont_Japanese: return new UITTFFont("Mojangles_TTF_jaJP", "Common/Media/font/JPN/DF-DotDotGothic16.ttf", 0x203B); // JPN + // case eFont_SimpChinese: Simplified Chinese is unsupported. + case eFont_TradChinese: return new UITTFFont("Mojangles_TTF_cnTD", "Common/Media/font/CHT/DFTT_R5.TTC", 0x203B); // CHT + case eFont_Korean: return new UITTFFont("Mojangles_TTF_koKR", "Common/Media/font/KOR/candadite2.ttf", 0x203B); // KOR #else - case XC_LANGUAGE_JAPANESE: - m_mcTTFFont = new UITTFFont("Common/Media/font/JPN/DFGMaruGothic-Md.ttf", 0x2022); // JPN - break; - case XC_LANGUAGE_SCHINESE: //TODO - case XC_LANGUAGE_TCHINESE: - m_mcTTFFont = new UITTFFont("Common/Media/font/CHT/DFHeiMedium-B5.ttf", 0x2022); // CHT - break; - case XC_LANGUAGE_KOREAN: - m_mcTTFFont = new UITTFFont("Common/Media/font/KOR/BOKMSD.ttf", 0x2022); // KOR - break; + case eFont_Japanese: return new UITTFFont("Mojangles_TTF_jaJP", "Common/Media/font/JPN/DFGMaruGothic-Md.ttf", 0x2022); // JPN +#ifdef _DURANGO + case eFont_SimpChinese: return new UITTFFont("Mojangled_TTF_cnCN", "Common/Media/font/CHS/MSYH.ttf", 0x2022); // CHS #endif - default: - bBitmapFont=true; - // m_mcTTFFont = new UITTFFont("Common/Media/font/Mojangles.ttf", 0x2022); // 4J-JEV: Shouldn't be using this. - break; + case eFont_TradChinese: return new UITTFFont("Mojangles_TTF_cnTD", "Common/Media/font/CHT/DFHeiMedium-B5.ttf", 0x2022); // CHT + case eFont_Korean: return new UITTFFont("Mojangles_TTF_koKR", "Common/Media/font/KOR/BOKMSD.ttf", 0x2022); // KOR +#endif + // 4J-JEV, Cyrillic characters have been added to this font now, (4/July/14) + // XC_LANGUAGE_RUSSIAN and XC_LANGUAGE_GREEK: + default: return NULL; + } +} + +void UIController::SetupFont() +{ + // 4J-JEV: Language hasn't changed or is already changing. + if ( (m_eCurrentFont != m_eTargetFont) || !UIString::setCurrentLanguage() ) return; + + DWORD nextLanguage = UIString::getCurrentLanguage(); + m_eTargetFont = getFontForLanguage(nextLanguage); + + // flag a language change to reload the string tables in the DLC + app.m_dlcManager.LanguageChanged(); + + app.loadStringTable(); // Switch to use new string table, + + if (m_eTargetFont == m_eCurrentFont) + { + // 4J-JEV: If we're ingame, reload the font to update all the text. + if (app.GetGameStarted()) app.SetAction(ProfileManager.GetPrimaryPad(), eAppAction_ReloadFont); + return; + } + + if (m_eCurrentFont != eFont_NotLoaded) app.DebugPrintf("[UIController] Font switch required for language transition to %i.\n", nextLanguage); + else app.DebugPrintf("[UIController] Initialising font for language %i.\n", nextLanguage); + + if (m_mcTTFFont != NULL) + { + delete m_mcTTFFont; + m_mcTTFFont = NULL; } - if(bBitmapFont) + if(m_eTargetFont == eFont_Bitmap) { // these may have been set up by a previous language being chosen - if(m_moj7==NULL) - { - m_moj7 = new UIBitmapFont(SFontData::Mojangles_7); - m_moj7->registerFont(); - } - if(m_moj11==NULL) - { - m_moj11 = new UIBitmapFont(SFontData::Mojangles_11); - m_moj11->registerFont(); - } + if (m_moj7 == NULL) m_moj7 = new UIBitmapFont(SFontData::Mojangles_7); + if (m_moj11 == NULL) m_moj11 = new UIBitmapFont(SFontData::Mojangles_11); + + // 4J-JEV: Ensure we redirect to them correctly, even if the objects were previously initialised. + m_moj7->registerFont(); + m_moj11->registerFont(); + } + else if (m_eTargetFont != eFont_NotLoaded) + { + m_mcTTFFont = createFont(m_eTargetFont); + + app.DebugPrintf("[Iggy] Set font indirect to '%hs'.\n", m_mcTTFFont->getFontName().c_str()); + IggyFontSetIndirectUTF8( "Mojangles7", -1, IGGY_FONTFLAG_all, m_mcTTFFont->getFontName().c_str(), -1, IGGY_FONTFLAG_none ); + IggyFontSetIndirectUTF8( "Mojangles11", -1, IGGY_FONTFLAG_all, m_mcTTFFont->getFontName().c_str(), -1, IGGY_FONTFLAG_none ); } else { - app.DebugPrintf("IggyFontSetIndirectUTF8\n"); - IggyFontSetIndirectUTF8( "Mojangles7", -1, IGGY_FONTFLAG_all, "Mojangles_TTF",-1 ,IGGY_FONTFLAG_none ); - IggyFontSetIndirectUTF8( "Mojangles11", -1, IGGY_FONTFLAG_all, "Mojangles_TTF",-1 ,IGGY_FONTFLAG_none ); + assert(false); + } + + // Reload ui to set new font. + if (m_eCurrentFont != eFont_NotLoaded) + { + app.SetAction(ProfileManager.GetPrimaryPad(), eAppAction_ReloadFont); } + else + { + updateCurrentFont(); + } +} + +bool UIController::PendingFontChange() +{ + return getFontForLanguage( XGetLanguage() ) != m_eCurrentFont; +} + +void UIController::setCleanupOnReload() +{ + m_bCleanupOnReload = true; +} + +void UIController::updateCurrentFont() +{ + m_eCurrentFont = m_eTargetFont; +} + +bool UIController::UsingBitmapFont() +{ + return m_eCurrentFont == eFont_Bitmap; } // TICKING void UIController::tick() { - if(m_navigateToHomeOnReload && !ui.IsReloadingSkin()) + SetupFont(); // If necessary, change font. + + if ( (m_navigateToHomeOnReload || m_bCleanupOnReload) && !ui.IsReloadingSkin() ) { ui.CleanUpSkinReload(); + + if (m_navigateToHomeOnReload || !g_NetworkManager.IsInSession()) + { + ui.NavigateToScene(ProfileManager.GetPrimaryPad(),eUIScene_MainMenu); + } + else + { + ui.CloseAllPlayersScenes(); + } + + updateCurrentFont(); + m_navigateToHomeOnReload = false; - ui.NavigateToScene(ProfileManager.GetPrimaryPad(),eUIScene_MainMenu); + m_bCleanupOnReload = false; } for(unsigned int i = 0; i < eUIGroup_COUNT; ++i) @@ -398,9 +475,6 @@ void UIController::tick() // TODO: May wish to skip ticking other groups here } - // Fix for HUD ticks so that they all tick before this reference is cleared - EnderDragonRenderer::bossInstance = nullptr; - // Clear out the cached movie file data __int64 currentTime = System::currentTimeMillis(); for(AUTO_VAR(it, m_cachedMovieData.begin()); it != m_cachedMovieData.end();) @@ -562,11 +636,12 @@ void UIController::ReloadSkin() // 4J Stu - Don't load on a thread on windows. I haven't investigated this in detail, so a quick fix reloadSkinThreadProc(this); #else - // Navigate to the timer scene so that we can display something while the loading is happening - ui.NavigateToScene(0,eUIScene_Timer,(void *)1,eUILayer_Tooltips,eUIGroup_Fullscreen); m_reloadSkinThread = new C4JThread(reloadSkinThreadProc, (void*)this, "Reload skin thread"); m_reloadSkinThread->SetProcessor(CPU_CORE_UI_SCENE); + + // Navigate to the timer scene so that we can display something while the loading is happening + ui.NavigateToScene(0,eUIScene_Timer,(void *)1,eUILayer_Tooltips,eUIGroup_Fullscreen); //m_reloadSkinThread->Run(); //// Load new skin @@ -620,7 +695,7 @@ bool UIController::IsReloadingSkin() bool UIController::IsExpectingOrReloadingSkin() { - return Minecraft::GetInstance()->skins->getSelected()->isLoadingData() || Minecraft::GetInstance()->skins->needsUIUpdate() || IsReloadingSkin(); + return Minecraft::GetInstance()->skins->getSelected()->isLoadingData() || Minecraft::GetInstance()->skins->needsUIUpdate() || IsReloadingSkin() || PendingFontChange(); } void UIController::CleanUpSkinReload() @@ -1431,6 +1506,15 @@ void UIController::unregisterSubstitutionTexture(const wstring &textureName, boo // NAVIGATION bool UIController::NavigateToScene(int iPad, EUIScene scene, void *initData, EUILayer layer, EUIGroup group) { + static bool bSeenUpdateTextThisSession = false; + // If you're navigating to the multigamejoinload, and the player hasn't seen the updates message yet, display it now + // display this message the first 3 times + if((scene==eUIScene_LoadOrJoinMenu) && (bSeenUpdateTextThisSession==false) && ( app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_DisplayUpdateMessage)!=0)) + { + scene=eUIScene_NewUpdateMessage; + bSeenUpdateTextThisSession=true; + } + // if you're trying to navigate to the inventory,the crafting, pause or game info or any of the trigger scenes and there's already a menu up (because you were pressing a few buttons at the same time) then ignore the navigate if(GetMenuDisplayed(iPad)) { @@ -1451,6 +1535,8 @@ bool UIController::NavigateToScene(int iPad, EUIScene scene, void *initData, EUI case eUIScene_BrewingStandMenu: case eUIScene_AnvilMenu: case eUIScene_TradingMenu: + case eUIScene_BeaconMenu: + case eUIScene_HorseMenu: app.DebugPrintf("IGNORING NAVIGATE - we're trying to navigate to a user selected scene when there's already a scene up: pad:%d, scene:%d\n", iPad, scene); return false; break; @@ -1941,7 +2027,7 @@ void UIController::ShowTooltip( unsigned int iPad, unsigned int tooltip, bool sh if(m_groups[(int)group]->getTooltips()) m_groups[(int)group]->getTooltips()->ShowTooltip(tooltip,show); } -void UIController::SetTooltips( unsigned int iPad, int iA, int iB, int iX, int iY, int iLT, int iRT, int iLB, int iRB, int iLS, bool forceUpdate) +void UIController::SetTooltips( unsigned int iPad, int iA, int iB, int iX, int iY, int iLT, int iRT, int iLB, int iRB, int iLS, int iRS, int iBack, bool forceUpdate) { EUIGroup group; @@ -1967,7 +2053,7 @@ void UIController::SetTooltips( unsigned int iPad, int iA, int iB, int iX, int i { group = eUIGroup_Fullscreen; } - if(m_groups[(int)group]->getTooltips()) m_groups[(int)group]->getTooltips()->SetTooltips(iA, iB, iX, iY, iLT, iRT, iLB, iRB, iLS, forceUpdate); + if(m_groups[(int)group]->getTooltips()) m_groups[(int)group]->getTooltips()->SetTooltips(iA, iB, iX, iY, iLT, iRT, iLB, iRB, iLS, iRS, iBack, forceUpdate); } void UIController::EnableTooltip( unsigned int iPad, unsigned int tooltip, bool enable ) @@ -2033,6 +2119,13 @@ void UIController::OverrideSFX(int iPad, int iAction,bool bVal) void UIController::PlayUISFX(ESoundEffect eSound) { + __uint64 time = System::currentTimeMillis(); + + // Don't play multiple SFX on the same tick + // (prevents horrible sounds when programmatically setting multiple checkboxes) + if (time - m_lastUiSfx < 10) { return; } + m_lastUiSfx = time; + Minecraft::GetInstance()->soundEngine->playUI(eSound,1.0f,1.0f); } @@ -2118,7 +2211,13 @@ void UIController::HandleTMSBanFileRetrieved(int iPad) void UIController::HandleInventoryUpdated(int iPad) { - app.DebugPrintf(app.USER_SR, "UIController::HandleInventoryUpdated not implemented\n"); + EUIGroup group = eUIGroup_Fullscreen; + if( app.GetGameStarted() && ( iPad != 255 ) && ( iPad >= 0 ) ) + { + group = (EUIGroup)(iPad+1); + } + + m_groups[group]->HandleMessage(eUIMessage_InventoryUpdated, NULL); } void UIController::HandleGameTick() @@ -2173,16 +2272,8 @@ void UIController::SetTutorialDescription(int iPad, TutorialPopupInfo *info) void UIController::RemoveInteractSceneReference(int iPad, UIScene *scene) { EUIGroup group; - if( app.GetGameStarted() ) - { - // If the game isn't running treat as user 0, otherwise map index directly from pad - if( ( iPad != 255 ) && ( iPad >= 0 ) ) group = (EUIGroup)(iPad+1); - else group = eUIGroup_Fullscreen; - } - else - { - group = eUIGroup_Fullscreen; - } + if( ( iPad != 255 ) && ( iPad >= 0 ) ) group = (EUIGroup)(iPad+1); + else group = eUIGroup_Fullscreen; if(m_groups[(int)group]->getTutorialPopup()) m_groups[(int)group]->getTutorialPopup()->RemoveInteractSceneReference(scene); } #endif @@ -2438,14 +2529,19 @@ void UIController::ClearPressStart() m_iPressStartQuadrantsMask = 0; } -// 4J Stu - For the different StringTable classes. Should really fix the libraries. -#ifndef __PS3__ -C4JStorage::EMessageResult UIController::RequestMessageBox(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad, - int( *Func)(LPVOID,int,const C4JStorage::EMessageResult),LPVOID lpParam, C4JStringTable *pStringTable, WCHAR *pwchFormatString,DWORD dwFocusButton, bool bIsError) -#else +C4JStorage::EMessageResult UIController::RequestAlertMessage(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult),LPVOID lpParam, WCHAR *pwchFormatString) +{ + return RequestMessageBox(uiTitle, uiText, uiOptionA, uiOptionC, dwPad, Func, lpParam, pwchFormatString, 0, false); +} + +C4JStorage::EMessageResult UIController::RequestErrorMessage(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult),LPVOID lpParam, WCHAR *pwchFormatString) +{ + return RequestMessageBox(uiTitle, uiText, uiOptionA, uiOptionC, dwPad, Func, lpParam, pwchFormatString, 0, true); +} + C4JStorage::EMessageResult UIController::RequestMessageBox(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad, - int( *Func)(LPVOID,int,const C4JStorage::EMessageResult),LPVOID lpParam, StringTable *pStringTable, WCHAR *pwchFormatString,DWORD dwFocusButton, bool bIsError) -#endif + int( *Func)(LPVOID,int,const C4JStorage::EMessageResult),LPVOID lpParam, WCHAR *pwchFormatString,DWORD dwFocusButton, bool bIsError) + { MessageBoxInfo param; param.uiTitle = uiTitle; @@ -2453,7 +2549,7 @@ C4JStorage::EMessageResult UIController::RequestMessageBox(UINT uiTitle, UINT ui param.uiOptionA = uiOptionA; param.uiOptionC = uiOptionC; param.dwPad = dwPad; - param.Func = Func;\ + param.Func = Func; param.lpParam = lpParam; param.pwchFormatString = pwchFormatString; param.dwFocusButton = dwFocusButton; @@ -2512,11 +2608,11 @@ C4JStorage::EMessageResult UIController::RequestUGCMessageBox(UINT title/* = -1 ProfileManager.ShowSystemMessage( SCE_MSG_DIALOG_SYSMSG_TYPE_TRC_PSN_CHAT_RESTRICTION, iPad ); UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - return ui.RequestMessageBox( title, IDS_CHAT_RESTRICTION_UGC, uiIDA, 1, iPad, Func, lpParam, app.GetStringTable(), NULL, 0, false); + return ui.RequestAlertMessage( title, IDS_CHAT_RESTRICTION_UGC, uiIDA, 1, iPad, Func, lpParam); #else UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - return ui.RequestMessageBox( title, message, uiIDA, 1, iPad, Func, lpParam, app.GetStringTable(), NULL, 0, false); + return ui.RequestAlertMessage( title, message, uiIDA, 1, iPad, Func, lpParam); #endif } @@ -2551,7 +2647,7 @@ C4JStorage::EMessageResult UIController::RequestContentRestrictedMessageBox(UINT #else UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - return ui.RequestMessageBox( title, message, uiIDA, 1, iPad, Func, lpParam, app.GetStringTable(), NULL, 0, false); + return ui.RequestAlertMessage( title, message, uiIDA, 1, iPad, Func, lpParam); #endif } @@ -2705,10 +2801,13 @@ void UIController::TouchBoxRebuild(UIScene *pUIScene) control->getControlType() == UIControl::eLeaderboardList || control->getControlType() == UIControl::eTouchControl) { - // 4J-TomK update the control (it might have been moved by flash / AS) - control->UpdateControl(); + if(control->getVisible()) + { + // 4J-TomK update the control (it might have been moved by flash / AS) + control->UpdateControl(); - ui.TouchBoxAdd(control,eUIGroup,eUILayer,eUIscene, pUIScene->GetMainPanel()); + ui.TouchBoxAdd(control,eUIGroup,eUILayer,eUIscene, pUIScene->GetMainPanel()); + } } } } @@ -2960,7 +3059,8 @@ void UIController::HandleTouchInput(unsigned int iPad, unsigned int key, bool bP if(m_HighlightedUIElement && m_ActiveUIElement->pControl == m_HighlightedUIElement->pControl) { UIControl_CheckBox *pCheckbox=(UIControl_CheckBox *)m_ActiveUIElement->pControl; - pCheckbox->TouchSetCheckbox(!pCheckbox->IsChecked()); + if(pCheckbox->IsEnabled()) // only proceed if checkbox is enabled! + pCheckbox->TouchSetCheckbox(!pCheckbox->IsChecked()); } bReleased = false; break; diff --git a/Minecraft.Client/Common/UI/UIController.h b/Minecraft.Client/Common/UI/UIController.h index ef064f80..49c78032 100644 --- a/Minecraft.Client/Common/UI/UIController.h +++ b/Minecraft.Client/Common/UI/UIController.h @@ -38,10 +38,37 @@ private: S32 m_tileOriginX, m_tileOriginY; + enum EFont + { + eFont_NotLoaded = 0, + + eFont_Bitmap, + eFont_Japanese, + eFont_SimpChinese, + eFont_TradChinese, + eFont_Korean, + + }; + + // 4J-JEV: It's important that currentFont == targetFont, unless updateCurrentLanguage is going to be called. + EFont m_eCurrentFont, m_eTargetFont; + + // 4J-JEV: Behaves like navigateToHome when not ingame. When in-game, it closes all player scenes instead. + bool m_bCleanupOnReload; + + EFont getFontForLanguage(int language); + UITTFFont *createFont(EFont fontLanguage); + UIAbstractBitmapFont *m_mcBitmapFont; UITTFFont *m_mcTTFFont; UIBitmapFont *m_moj7, *m_moj11; +public: + void setCleanupOnReload(); + void updateCurrentFont(); + + +private: // 4J-PB - ui element type for PSVita touch control #ifdef __PSVITA__ @@ -136,6 +163,7 @@ private: C4JThread *m_reloadSkinThread; bool m_navigateToHomeOnReload; int m_accumulatedTicks; + __uint64 m_lastUiSfx; // Tracks time (ms) of last UI sound effect D3D11_RECT m_customRenderingClearRect; @@ -182,6 +210,9 @@ protected: public: CRITICAL_SECTION m_Allocatorlock; void SetupFont(); + bool PendingFontChange(); + bool UsingBitmapFont(); + public: // TICKING virtual void tick(); @@ -295,7 +326,7 @@ public: virtual void SetTooltipText( unsigned int iPad, unsigned int tooltip, int iTextID ); virtual void SetEnableTooltips( unsigned int iPad, BOOL bVal ); virtual void ShowTooltip( unsigned int iPad, unsigned int tooltip, bool show ); - virtual void SetTooltips( unsigned int iPad, int iA, int iB=-1, int iX=-1, int iY=-1 , int iLT=-1, int iRT=-1, int iLB=-1, int iRB=-1, int iLS=-1, bool forceUpdate = false); + virtual void SetTooltips( unsigned int iPad, int iA, int iB=-1, int iX=-1, int iY=-1 , int iLT=-1, int iRT=-1, int iLB=-1, int iRB=-1, int iLS=-1, int iRS=-1, int iBack=-1, bool forceUpdate = false); virtual void EnableTooltip( unsigned int iPad, unsigned int tooltip, bool enable ); virtual void RefreshTooltips(unsigned int iPad); @@ -341,15 +372,12 @@ public: virtual void HidePressStart(); void ClearPressStart(); - // 4J Stu - Only because of the different StringTable type, should really fix the libraries -#ifndef __PS3__ - virtual C4JStorage::EMessageResult RequestMessageBox(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad=XUSER_INDEX_ANY, - int( *Func)(LPVOID,int,const C4JStorage::EMessageResult)=NULL,LPVOID lpParam=NULL, C4JStringTable *pStringTable=NULL, WCHAR *pwchFormatString=NULL,DWORD dwFocusButton=0, bool bIsError = true); -#else - virtual C4JStorage::EMessageResult RequestMessageBox(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad=XUSER_INDEX_ANY, - int( *Func)(LPVOID,int,const C4JStorage::EMessageResult)=NULL,LPVOID lpParam=NULL, StringTable *pStringTable=NULL, WCHAR *pwchFormatString=NULL,DWORD dwFocusButton=0, bool bIsError = true); -#endif + virtual C4JStorage::EMessageResult RequestAlertMessage(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad=XUSER_INDEX_ANY, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult)=NULL,LPVOID lpParam=NULL, WCHAR *pwchFormatString=NULL); + virtual C4JStorage::EMessageResult RequestErrorMessage(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad=XUSER_INDEX_ANY, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult)=NULL,LPVOID lpParam=NULL, WCHAR *pwchFormatString=NULL); +private: + virtual C4JStorage::EMessageResult RequestMessageBox(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad,int( *Func)(LPVOID,int,const C4JStorage::EMessageResult),LPVOID lpParam, WCHAR *pwchFormatString,DWORD dwFocusButton, bool bIsError); +public: C4JStorage::EMessageResult RequestUGCMessageBox(UINT title = -1, UINT message = -1, int iPad = -1, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult) = NULL, LPVOID lpParam = NULL); C4JStorage::EMessageResult RequestContentRestrictedMessageBox(UINT title = -1, UINT message = -1, int iPad = -1, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult) = NULL, LPVOID lpParam = NULL); diff --git a/Minecraft.Client/Common/UI/UIEnums.h b/Minecraft.Client/Common/UI/UIEnums.h index c68b6740..45aff87d 100644 --- a/Minecraft.Client/Common/UI/UIEnums.h +++ b/Minecraft.Client/Common/UI/UIEnums.h @@ -54,7 +54,7 @@ enum EUIScene eUIScene_DebugOptions, eUIScene_DebugTips, eUIScene_HelpAndOptionsMenu, - eUIScene_HowToPlay, + eUIScene_HowToPlay, eUIScene_HowToPlayMenu, eUIScene_ControlsMenu, eUIScene_SettingsOptionsMenu, @@ -94,13 +94,23 @@ enum EUIScene eUIScene_TradingMenu, eUIScene_AnvilMenu, eUIScene_TeleportMenu, + eUIScene_HopperMenu, + eUIScene_BeaconMenu, + eUIScene_HorseMenu, + eUIScene_FireworksMenu, #ifdef _XBOX // eUIScene_TransferToXboxOne, #endif + // **************************************** + // **************************************** + // ********** IMPORTANT ****************** + // **************************************** + // **************************************** // When adding new scenes here, you must also update the switches in CConsoleMinecraftApp::NavigateToScene // There are quite a few so you need to check them all + // Also update UILayer::updateFocusState #ifndef _XBOX // Anything non-xbox should be added here. The ordering of scenes above is required for sentient reporting on xbox 360 to continue to be accurate @@ -117,6 +127,7 @@ enum EUIScene eUIScene_Timer, eUIScene_EULA, eUIScene_InGameSaveManagementMenu, + eUIScene_LanguageSelector, #endif // ndef _XBOX #ifdef _DEBUG_MENUS_ENABLED @@ -154,6 +165,8 @@ enum EToolTipButton eToolTipButtonLB, eToolTipButtonRB, eToolTipButtonLS, + eToolTipButtonRS, + eToolTipButtonBack, eToolTipNumButtons }; @@ -209,6 +222,12 @@ enum EHowToPlayPage eHowToPlay_Breeding, eHowToPlay_Trading, + eHowToPlay_Horses, + eHowToPlay_Beacons, + eHowToPlay_Fireworks, + eHowToPlay_Hoppers, + eHowToPlay_Droppers, + eHowToPlay_NetherPortal, eHowToPlay_TheEnd, #ifdef _XBOX @@ -229,6 +248,13 @@ enum ECreditTextTypes eNumTextTypes }; +enum EUIMessage +{ + eUIMessage_InventoryUpdated, + + eUIMessage_COUNT, +}; + #define NO_TRANSLATED_STRING ( -1 ) // String ID used to indicate that we are using non localised string. #define CONNECTING_PROGRESS_CHECK_TIME 500 diff --git a/Minecraft.Client/Common/UI/UIGroup.cpp b/Minecraft.Client/Common/UI/UIGroup.cpp index 1899d05b..e8bb9fe6 100644 --- a/Minecraft.Client/Common/UI/UIGroup.cpp +++ b/Minecraft.Client/Common/UI/UIGroup.cpp @@ -13,6 +13,8 @@ UIGroup::UIGroup(EUIGroup group, int iPad) m_updateFocusStateCountdown = 0; + m_viewportType = C4JRender::VIEWPORT_TYPE_FULLSCREEN; + for(unsigned int i = 0; i < eUILayer_COUNT; ++i) { m_layers[i] = new UILayer(this); @@ -39,8 +41,6 @@ UIGroup::UIGroup(EUIGroup group, int iPad) m_pressStartToPlay = (UIComponent_PressStartToPlay *)m_layers[(int)eUILayer_Tooltips]->addComponent(0, eUIComponent_PressStartToPlay); } - m_viewportType = C4JRender::VIEWPORT_TYPE_FULLSCREEN; - // 4J Stu - Pre-allocate this for cached rendering in scenes. It's horribly slow to do dynamically, but we should only need one // per group as we will only be displaying one of these types of scenes at a time m_commandBufferList = MemoryTracker::genLists(1); @@ -318,6 +318,16 @@ void UIGroup::HandleDLCLicenseChange() } #endif +void UIGroup::HandleMessage(EUIMessage message, void *data) +{ + // Ignore this group if the player isn't signed in + if(m_iPad >= 0 && !ProfileManager.IsSignedIn(m_iPad)) return; + for(unsigned int i = 0; i < eUILayer_COUNT; ++i) + { + m_layers[i]->HandleMessage(message, data); + } +} + bool UIGroup::IsFullscreenGroup() { return m_group == eUIGroup_Fullscreen; diff --git a/Minecraft.Client/Common/UI/UIGroup.h b/Minecraft.Client/Common/UI/UIGroup.h index e20fbb02..0ffee0ca 100644 --- a/Minecraft.Client/Common/UI/UIGroup.h +++ b/Minecraft.Client/Common/UI/UIGroup.h @@ -96,6 +96,8 @@ public: #ifdef _XBOX_ONE virtual void HandleDLCLicenseChange(); #endif + virtual void HandleMessage(EUIMessage message, void *data); + bool IsFullscreenGroup(); void handleUnlockFullVersion(); diff --git a/Minecraft.Client/Common/UI/UILayer.cpp b/Minecraft.Client/Common/UI/UILayer.cpp index 15bde2fa..13b26c84 100644 --- a/Minecraft.Client/Common/UI/UILayer.cpp +++ b/Minecraft.Client/Common/UI/UILayer.cpp @@ -189,7 +189,7 @@ void UILayer::ReloadAll(bool force) int lowestRenderable = 0; for(;lowestRenderable < m_sceneStack.size(); ++lowestRenderable) { - m_sceneStack[lowestRenderable]->reloadMovie(); + m_sceneStack[lowestRenderable]->reloadMovie(force); } } } @@ -253,6 +253,18 @@ bool UILayer::NavigateToScene(int iPad, EUIScene scene, void *initData) case eUIScene_AnvilMenu: newScene = new UIScene_AnvilMenu(iPad, initData, this); break; + case eUIScene_HopperMenu: + newScene = new UIScene_HopperMenu(iPad, initData, this); + break; + case eUIScene_BeaconMenu: + newScene = new UIScene_BeaconMenu(iPad, initData, this); + break; + case eUIScene_HorseMenu: + newScene = new UIScene_HorseInventoryMenu(iPad, initData, this); + break; + case eUIScene_FireworksMenu: + newScene = new UIScene_FireworksMenu(iPad, initData, this); + break; // Help and Options case eUIScene_HelpAndOptionsMenu: @@ -282,6 +294,9 @@ bool UILayer::NavigateToScene(int iPad, EUIScene scene, void *initData) case eUIScene_HowToPlayMenu: newScene = new UIScene_HowToPlayMenu(iPad, initData, this); break; + case eUIScene_LanguageSelector: + newScene = new UIScene_LanguageSelector(iPad, initData, this); + break; case eUIScene_HowToPlay: newScene = new UIScene_HowToPlay(iPad, initData, this); break; @@ -386,6 +401,9 @@ bool UILayer::NavigateToScene(int iPad, EUIScene scene, void *initData) case eUIScene_EULA: newScene = new UIScene_EULA(iPad, initData, this); break; + case eUIScene_NewUpdateMessage: + newScene = new UIScene_NewUpdateMessage(iPad, initData, this); + break; // Other case eUIScene_Keyboard: @@ -700,6 +718,12 @@ bool UILayer::updateFocusState(bool allowedFocus /* = false */) m_scenesToDestroy.push_back(scene); #endif } + + if (scene->getSceneType() == eUIScene_SettingsOptionsMenu) + { + scene->loseFocus(); + m_scenesToDestroy.push_back(scene); + } } /// UPDATE STACK STATES @@ -723,6 +747,12 @@ bool UILayer::updateFocusState(bool allowedFocus /* = false */) case eUIScene_DispenserMenu: case eUIScene_BrewingStandMenu: case eUIScene_EnchantingMenu: + case eUIScene_TradingMenu: + case eUIScene_HopperMenu: + case eUIScene_HorseMenu: + case eUIScene_FireworksMenu: + case eUIScene_BeaconMenu: + case eUIScene_AnvilMenu: m_bContainerMenuDisplayed=true; // Intentional fall-through @@ -786,7 +816,7 @@ void UILayer::handleInput(int iPad, int key, bool repeat, bool pressed, bool rel } // Fix for PS3 #444 - [IN GAME] If the user keeps pressing CROSS while on the 'Save Game' screen the title will crash. - handled = handled || scene->hidesLowerScenes(); + handled = handled || scene->hidesLowerScenes() || scene->blocksInput(); if(handled ) break; } @@ -823,6 +853,15 @@ void UILayer::HandleDLCLicenseChange() } #endif +void UILayer::HandleMessage(EUIMessage message, void *data) +{ + for(AUTO_VAR(it,m_sceneStack.rbegin()); it != m_sceneStack.rend(); ++it) + { + UIScene *topScene = *it; + topScene->HandleMessage(message, data); + } +} + bool UILayer::IsFullscreenGroup() { return m_parentGroup->IsFullscreenGroup(); diff --git a/Minecraft.Client/Common/UI/UILayer.h b/Minecraft.Client/Common/UI/UILayer.h index 2840f23f..47c776ab 100644 --- a/Minecraft.Client/Common/UI/UILayer.h +++ b/Minecraft.Client/Common/UI/UILayer.h @@ -83,6 +83,8 @@ public: #ifdef _XBOX_ONE virtual void HandleDLCLicenseChange(); #endif + virtual void HandleMessage(EUIMessage message, void *data); + void handleUnlockFullVersion(); UIScene *FindScene(EUIScene sceneType); diff --git a/Minecraft.Client/Common/UI/UIScene.cpp b/Minecraft.Client/Common/UI/UIScene.cpp index e7d907ec..ba253643 100644 --- a/Minecraft.Client/Common/UI/UIScene.cpp +++ b/Minecraft.Client/Common/UI/UIScene.cpp @@ -93,6 +93,7 @@ void UIScene::reloadMovie(bool force) (*it)->ReInit(); } + updateComponents(); handleReload(); IggyDataValue result; @@ -740,6 +741,9 @@ void UIScene::_customDrawSlotControl(CustomDrawData *region, int iPad, shared_pt PIXBeginNamedEvent(0,"Render and decorate"); if(m_pItemRenderer == NULL) m_pItemRenderer = new ItemRenderer(); + RenderManager.StateSetBlendEnable(true); + RenderManager.StateSetBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + RenderManager.StateSetBlendFactor(0xffffffff); m_pItemRenderer->renderAndDecorateItem(pMinecraft->font, pMinecraft->textures, item, x, y,scaleX,scaleY,fAlpha,isFoil,false, !usingCommandBuffer); PIXEndNamedEvent(); @@ -827,7 +831,7 @@ void UIScene::gainFocus() app.DebugPrintf("Sent gain focus event to scene\n"); */ bHasFocus = true; - if(app.GetGameStarted() && needsReloaded()) + if(needsReloaded()) { reloadMovie(); } @@ -882,7 +886,8 @@ void UIScene::handleGainFocus(bool navBack) void UIScene::updateTooltips() { - ui.SetTooltips(m_iPad, -1); + if(!ui.IsReloadingSkin()) + ui.SetTooltips(m_iPad, -1); } void UIScene::sendInputToMovie(int key, bool repeat, bool pressed, bool released) @@ -906,6 +911,7 @@ void UIScene::sendInputToMovie(int key, bool repeat, bool pressed, bool released int UIScene::convertGameActionToIggyKeycode(int action) { + // TODO: This action to key mapping should probably use the control mapping int keycode = -1; switch(action) { @@ -946,7 +952,16 @@ int UIScene::convertGameActionToIggyKeycode(int action) keycode = IGGY_KEYCODE_PAGE_UP; break; case ACTION_MENU_PAGEDOWN: - keycode = IGGY_KEYCODE_PAGE_DOWN; +#ifdef __PSVITA__ + if (!InputManager.IsVitaTV()) + { + keycode = IGGY_KEYCODE_F6; + } + else +#endif + { + keycode = IGGY_KEYCODE_PAGE_DOWN; + } break; case ACTION_MENU_RIGHT_SCROLL: keycode = IGGY_KEYCODE_F3; @@ -957,6 +972,7 @@ int UIScene::convertGameActionToIggyKeycode(int action) case ACTION_MENU_STICK_PRESS: break; case ACTION_MENU_OTHER_STICK_PRESS: + keycode = IGGY_KEYCODE_F5; break; case ACTION_MENU_OTHER_STICK_UP: keycode = IGGY_KEYCODE_F11; @@ -1233,6 +1249,10 @@ void UIScene::UpdateSceneControls() } #endif +void UIScene::HandleMessage(EUIMessage message, void *data) +{ +} + size_t UIScene::GetCallbackUniqueId() { if( m_callbackUniqueId == 0) diff --git a/Minecraft.Client/Common/UI/UIScene.h b/Minecraft.Client/Common/UI/UIScene.h index 823c510c..8c20aaae 100644 --- a/Minecraft.Client/Common/UI/UIScene.h +++ b/Minecraft.Client/Common/UI/UIScene.h @@ -169,6 +169,9 @@ public: // Returns true if lower scenes in this scenes layer, or in any layer below this scenes layers should be hidden virtual bool hidesLowerScenes() { return m_hasTickedOnce; } + // Returns true if this scene should block input to lower scenes (works like hidesLowerScenes but doesn't interfere with rendering) + virtual bool blocksInput() { return false; } + // returns main panel if controls are not living in the root virtual UIControl* GetMainPanel(); @@ -251,6 +254,9 @@ public: #ifdef _XBOX_ONE virtual void HandleDLCLicenseChange() {} #endif + + virtual void HandleMessage(EUIMessage message, void *data); + void registerSubstitutionTexture(const wstring &textureName, PBYTE pbData, DWORD dwLength, bool deleteData = false); bool hasRegisteredSubstitutionTexture(const wstring &textureName); @@ -260,6 +266,7 @@ public: protected: + #ifdef _DURANGO virtual long long getDefaultGtcButtons() { return _360_GTC_BACK; } #endif diff --git a/Minecraft.Client/Common/UI/UIScene_AbstractContainerMenu.cpp b/Minecraft.Client/Common/UI/UIScene_AbstractContainerMenu.cpp index 7823fb4e..0ee92eef 100644 --- a/Minecraft.Client/Common/UI/UIScene_AbstractContainerMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_AbstractContainerMenu.cpp @@ -50,7 +50,10 @@ void UIScene_AbstractContainerMenu::handleDestroy() // 4J Stu - Fix for #11302 - TCR 001: Network Connectivity: Host crashed after being killed by the client while accessing a chest during burst packet loss. // We need to make sure that we call closeContainer() anytime this menu is closed, even if it is forced to close by some other reason (like the player dying) - if(pMinecraft->localplayers[m_iPad] != NULL) pMinecraft->localplayers[m_iPad]->closeContainer(); + if(pMinecraft->localplayers[m_iPad] != NULL && pMinecraft->localplayers[m_iPad]->containerMenu->containerId == m_menu->containerId) + { + pMinecraft->localplayers[m_iPad]->closeContainer(); + } ui.OverrideSFX(m_iPad,ACTION_MENU_A,false); ui.OverrideSFX(m_iPad,ACTION_MENU_OK,false); @@ -311,7 +314,7 @@ void UIScene_AbstractContainerMenu::render(S32 width, S32 height, C4JRender::eVi if(m_needsCacheRendered) { - m_expectedCachedSlotCount = 0; + m_expectedCachedSlotCount = GetBaseSlotCount(); unsigned int count = m_menu->getSize(); for(unsigned int i = 0; i < count; ++i) { @@ -333,6 +336,7 @@ void UIScene_AbstractContainerMenu::customDraw(IggyCustomDrawCallbackRegion *reg if(pMinecraft->localplayers[m_iPad] == NULL || pMinecraft->localgameModes[m_iPad] == NULL) return; shared_ptr item = nullptr; + int slotId = -1; if(wcscmp((wchar_t *)region->name,L"pointerIcon")==0) { m_cacheSlotRenders = false; @@ -340,7 +344,6 @@ void UIScene_AbstractContainerMenu::customDraw(IggyCustomDrawCallbackRegion *reg } else { - int slotId = -1; swscanf((wchar_t*)region->name,L"slot_%d",&slotId); if (slotId == -1) { @@ -354,7 +357,7 @@ void UIScene_AbstractContainerMenu::customDraw(IggyCustomDrawCallbackRegion *reg } } - if(item != NULL) customDrawSlotControl(region,m_iPad,item,1.0f,item->isFoil(),true); + if(item != NULL) customDrawSlotControl(region,m_iPad,item,m_menu->isValidIngredient(item, slotId)?1.0f:0.5f,item->isFoil(),true); } void UIScene_AbstractContainerMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) @@ -370,21 +373,24 @@ void UIScene_AbstractContainerMenu::handleInput(int iPad, int key, bool repeat, } } -void UIScene_AbstractContainerMenu::SetPointerText(const wstring &description, vector &unformattedStrings, bool newSlot) +void UIScene_AbstractContainerMenu::SetPointerText(vector *description, bool newSlot) { - //app.DebugPrintf("Setting pointer text\n"); - m_cursorPath.setLabel(description,false,newSlot); + m_cursorPath.setLabel(HtmlString::Compose(description), false, newSlot); } void UIScene_AbstractContainerMenu::setSectionFocus(ESceneSection eSection, int iPad) { + UIControl *newFocus = getSection(eSection); + if(newFocus) newFocus->setFocus(true); + if(m_focusSection != eSectionNone) { UIControl *currentFocus = getSection(m_focusSection); - if(currentFocus) currentFocus->setFocus(false); + // 4J-TomK only set current focus to false if it differs from last (previously this continuously fired iggy functions when they were identical! + if(currentFocus != newFocus) + if(currentFocus) currentFocus->setFocus(false); } - UIControl *newFocus = getSection(eSection); - if(newFocus) newFocus->setFocus(true); + m_focusSection = eSection; } @@ -405,6 +411,13 @@ shared_ptr UIScene_AbstractContainerMenu::getSlotItem(ESceneSectio else return nullptr; } +Slot *UIScene_AbstractContainerMenu::getSlot(ESceneSection eSection, int iSlot) +{ + Slot *slot = m_menu->getSlot( getSectionStartOffset(eSection) + iSlot ); + if(slot) return slot; + else return NULL; +} + bool UIScene_AbstractContainerMenu::isSlotEmpty(ESceneSection eSection, int iSlot) { Slot *slot = m_menu->getSlot( getSectionStartOffset(eSection) + iSlot ); diff --git a/Minecraft.Client/Common/UI/UIScene_AbstractContainerMenu.h b/Minecraft.Client/Common/UI/UIScene_AbstractContainerMenu.h index 26688dc5..8afa44f7 100644 --- a/Minecraft.Client/Common/UI/UIScene_AbstractContainerMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_AbstractContainerMenu.h @@ -48,15 +48,20 @@ protected: virtual bool doesSectionTreeHaveFocus(ESceneSection eSection) { return false; } virtual void setSectionFocus(ESceneSection eSection, int iPad); void setFocusToPointer(int iPad); - void SetPointerText(const wstring &description, vector &unformattedStrings, bool newSlot); + void SetPointerText(vector *description, bool newSlot); virtual shared_ptr getSlotItem(ESceneSection eSection, int iSlot); + virtual Slot *getSlot(ESceneSection eSection, int iSlot); virtual bool isSlotEmpty(ESceneSection eSection, int iSlot); virtual void adjustPointerForSafeZone(); virtual UIControl *getSection(ESceneSection eSection) { return NULL; } + virtual int GetBaseSlotCount() { return 0; } public: virtual void tick(); + + // 4J - TomK If update tooltips is called then make sure the correct parent is invoked! (both UIScene AND IUIScene_AbstractContainerMenu have an instance of said function!) + virtual void updateTooltips() { IUIScene_AbstractContainerMenu::UpdateTooltips(); } virtual void render(S32 width, S32 height, C4JRender::eViewportType viewpBort); virtual void customDraw(IggyCustomDrawCallbackRegion *region); diff --git a/Minecraft.Client/Common/UI/UIScene_AnvilMenu.cpp b/Minecraft.Client/Common/UI/UIScene_AnvilMenu.cpp index 7b9886bc..c810ad45 100644 --- a/Minecraft.Client/Common/UI/UIScene_AnvilMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_AnvilMenu.cpp @@ -27,14 +27,14 @@ UIScene_AnvilMenu::UIScene_AnvilMenu(int iPad, void *_initData, UILayer *parentL gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_Anvil_Menu, this); } - m_repairMenu = new RepairMenu( initData->inventory, initData->level, initData->x, initData->y, initData->z, pMinecraft->localplayers[iPad] ); + m_repairMenu = new AnvilMenu( initData->inventory, initData->level, initData->x, initData->y, initData->z, pMinecraft->localplayers[iPad] ); m_repairMenu->addSlotListener(this); - Initialize( iPad, m_repairMenu, true, RepairMenu::INV_SLOT_START, eSectionAnvilUsing, eSectionAnvilMax ); + Initialize( iPad, m_repairMenu, true, AnvilMenu::INV_SLOT_START, eSectionAnvilUsing, eSectionAnvilMax ); - m_slotListItem1.addSlots(RepairMenu::INPUT_SLOT, 1); - m_slotListItem2.addSlots(RepairMenu::ADDITIONAL_SLOT, 1); - m_slotListResult.addSlots(RepairMenu::RESULT_SLOT, 1); + m_slotListItem1.addSlots(AnvilMenu::INPUT_SLOT, 1); + m_slotListItem2.addSlots(AnvilMenu::ADDITIONAL_SLOT, 1); + m_slotListResult.addSlots(AnvilMenu::RESULT_SLOT, 1); bool expensive = false; wstring m_costString = L""; @@ -46,7 +46,7 @@ UIScene_AnvilMenu::UIScene_AnvilMenu(int iPad, void *_initData, UILayer *parentL m_costString = app.GetString(IDS_REPAIR_EXPENSIVE); expensive = true; } - else if(!m_repairMenu->getSlot(RepairMenu::RESULT_SLOT)->hasItem()) + else if(!m_repairMenu->getSlot(AnvilMenu::RESULT_SLOT)->hasItem()) { // Do nothing } @@ -56,7 +56,7 @@ UIScene_AnvilMenu::UIScene_AnvilMenu(int iPad, void *_initData, UILayer *parentL wchar_t temp[256]; swprintf(temp, 256, costString, m_repairMenu->cost); m_costString = temp; - if(!m_repairMenu->getSlot(RepairMenu::RESULT_SLOT)->mayPickup(dynamic_pointer_cast(m_inventory->player->shared_from_this()))) + if(!m_repairMenu->getSlot(AnvilMenu::RESULT_SLOT)->mayPickup(dynamic_pointer_cast(m_inventory->player->shared_from_this()))) { expensive = true; } @@ -85,11 +85,11 @@ wstring UIScene_AnvilMenu::getMoviePath() void UIScene_AnvilMenu::handleReload() { - Initialize( m_iPad, m_menu, true, RepairMenu::INV_SLOT_START, eSectionAnvilUsing, eSectionAnvilMax ); + Initialize( m_iPad, m_menu, true, AnvilMenu::INV_SLOT_START, eSectionAnvilUsing, eSectionAnvilMax ); - m_slotListItem1.addSlots(RepairMenu::INPUT_SLOT, 1); - m_slotListItem2.addSlots(RepairMenu::ADDITIONAL_SLOT, 1); - m_slotListResult.addSlots(RepairMenu::RESULT_SLOT, 1); + m_slotListItem1.addSlots(AnvilMenu::INPUT_SLOT, 1); + m_slotListItem2.addSlots(AnvilMenu::ADDITIONAL_SLOT, 1); + m_slotListResult.addSlots(AnvilMenu::RESULT_SLOT, 1); } void UIScene_AnvilMenu::tick() diff --git a/Minecraft.Client/Common/UI/UIScene_BeaconMenu.cpp b/Minecraft.Client/Common/UI/UIScene_BeaconMenu.cpp new file mode 100644 index 00000000..e70397d6 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_BeaconMenu.cpp @@ -0,0 +1,519 @@ +#include "stdafx.h" +#include "UI.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.level.tile.entity.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h" +#include "..\..\Minecraft.h" +#include "UIScene_BeaconMenu.h" + +UIScene_BeaconMenu::UIScene_BeaconMenu(int iPad, void *_initData, UILayer *parentLayer) : UIScene_AbstractContainerMenu(iPad, parentLayer) +{ + // Setup all the Iggy references we need for this scene + initialiseMovie(); + + m_labelPrimary.init(IDS_CONTAINER_BEACON_PRIMARY_POWER); + m_labelSecondary.init(IDS_CONTAINER_BEACON_SECONDARY_POWER); + + m_buttonsPowers[eControl_Primary1].setVisible(false); + m_buttonsPowers[eControl_Primary2].setVisible(false); + m_buttonsPowers[eControl_Primary3].setVisible(false); + m_buttonsPowers[eControl_Primary4].setVisible(false); + m_buttonsPowers[eControl_Primary5].setVisible(false); + m_buttonsPowers[eControl_Secondary1].setVisible(false); + m_buttonsPowers[eControl_Secondary2].setVisible(false); + + BeaconScreenInput *initData = (BeaconScreenInput *)_initData; + + Minecraft *pMinecraft = Minecraft::GetInstance(); + if( pMinecraft->localgameModes[initData->iPad] != NULL ) + { + TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[initData->iPad]; + m_previousTutorialState = gameMode->getTutorial()->getCurrentState(); + gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_Beacon_Menu, this); + } + + m_beacon = initData->beacon; + + BeaconMenu *menu = new BeaconMenu(initData->inventory, initData->beacon); + + Initialize( initData->iPad, menu, true, BeaconMenu::INV_SLOT_START, eSectionBeaconUsing, eSectionBeaconMax ); + + m_slotListActivator.addSlots(BeaconMenu::PAYMENT_SLOT, 1); + + m_slotListActivatorIcons.addSlots(m_menu->getSize(),4); + + //app.SetRichPresenceContext(m_iPad,CONTEXT_GAME_STATE_BEACON); + + delete initData; +} + +wstring UIScene_BeaconMenu::getMoviePath() +{ + if(app.GetLocalPlayerCount() > 1) + { + return L"BeaconMenuSplit"; + } + else + { + return L"BeaconMenu"; + } +} + +void UIScene_BeaconMenu::handleReload() +{ + Initialize( m_iPad, m_menu, true, BeaconMenu::INV_SLOT_START, eSectionBeaconUsing, eSectionBeaconMax ); + + m_slotListActivator.addSlots(BeaconMenu::PAYMENT_SLOT, 1); + + m_slotListActivatorIcons.addSlots(m_menu->getSize(),4); +} + +void UIScene_BeaconMenu::tick() +{ + UIScene_AbstractContainerMenu::tick(); + + handleTick(); +} + +int UIScene_BeaconMenu::getSectionColumns(ESceneSection eSection) +{ + int cols = 0; + switch( eSection ) + { + case eSectionBeaconItem: + cols = 1; + break; + case eSectionBeaconInventory: + cols = 9; + break; + case eSectionBeaconUsing: + cols = 9; + break; + default: + assert( false ); + break; + }; + return cols; +} + +int UIScene_BeaconMenu::getSectionRows(ESceneSection eSection) +{ + int rows = 0; + switch( eSection ) + { + case eSectionBeaconItem: + rows = 1; + break; + case eSectionBeaconInventory: + rows = 3; + break; + case eSectionBeaconUsing: + rows = 1; + break; + default: + assert( false ); + break; + }; + return rows; +} + +void UIScene_BeaconMenu::GetPositionOfSection( ESceneSection eSection, UIVec2D* pPosition ) +{ + switch( eSection ) + { + case eSectionBeaconItem: + pPosition->x = m_slotListActivator.getXPos(); + pPosition->y = m_slotListActivator.getYPos(); + break; + case eSectionBeaconInventory: + pPosition->x = m_slotListInventory.getXPos(); + pPosition->y = m_slotListInventory.getYPos(); + break; + case eSectionBeaconUsing: + pPosition->x = m_slotListHotbar.getXPos(); + pPosition->y = m_slotListHotbar.getYPos(); + break; + + case eSectionBeaconPrimaryTierOneOne: + pPosition->x = m_buttonsPowers[eControl_Primary1].getXPos(); + pPosition->y = m_buttonsPowers[eControl_Primary1].getYPos(); + break; + case eSectionBeaconPrimaryTierOneTwo: + pPosition->x = m_buttonsPowers[eControl_Primary2].getXPos(); + pPosition->y = m_buttonsPowers[eControl_Primary2].getYPos(); + break; + case eSectionBeaconPrimaryTierTwoOne: + pPosition->x = m_buttonsPowers[eControl_Primary3].getXPos(); + pPosition->y = m_buttonsPowers[eControl_Primary3].getYPos(); + break; + case eSectionBeaconPrimaryTierTwoTwo: + pPosition->x = m_buttonsPowers[eControl_Primary4].getXPos(); + pPosition->y = m_buttonsPowers[eControl_Primary4].getYPos(); + break; + case eSectionBeaconPrimaryTierThree: + pPosition->x = m_buttonsPowers[eControl_Primary5].getXPos(); + pPosition->y = m_buttonsPowers[eControl_Primary5].getYPos(); + break; + case eSectionBeaconSecondaryOne: + pPosition->x = m_buttonsPowers[eControl_Secondary1].getXPos(); + pPosition->y = m_buttonsPowers[eControl_Secondary1].getYPos(); + break; + case eSectionBeaconSecondaryTwo: + pPosition->x = m_buttonsPowers[eControl_Secondary2].getXPos(); + pPosition->y = m_buttonsPowers[eControl_Secondary2].getYPos(); + break; + case eSectionBeaconConfirm: + pPosition->x = m_buttonConfirm.getXPos(); + pPosition->y = m_buttonConfirm.getYPos(); + break; + default: + assert( false ); + break; + }; +} + +void UIScene_BeaconMenu::GetItemScreenData( ESceneSection eSection, int iItemIndex, UIVec2D* pPosition, UIVec2D* pSize ) +{ + UIVec2D sectionSize; + switch( eSection ) + { + case eSectionBeaconItem: + sectionSize.x = m_slotListActivator.getWidth(); + sectionSize.y = m_slotListActivator.getHeight(); + break; + case eSectionBeaconInventory: + sectionSize.x = m_slotListInventory.getWidth(); + sectionSize.y = m_slotListInventory.getHeight(); + break; + case eSectionBeaconUsing: + sectionSize.x = m_slotListHotbar.getWidth(); + sectionSize.y = m_slotListHotbar.getHeight(); + break; + + case eSectionBeaconPrimaryTierOneOne: + sectionSize.x = m_buttonsPowers[eControl_Primary1].getWidth(); + sectionSize.y = m_buttonsPowers[eControl_Primary1].getHeight(); + break; + case eSectionBeaconPrimaryTierOneTwo: + sectionSize.x = m_buttonsPowers[eControl_Primary2].getWidth(); + sectionSize.y = m_buttonsPowers[eControl_Primary2].getHeight(); + break; + case eSectionBeaconPrimaryTierTwoOne: + sectionSize.x = m_buttonsPowers[eControl_Primary3].getWidth(); + sectionSize.y = m_buttonsPowers[eControl_Primary3].getHeight(); + break; + case eSectionBeaconPrimaryTierTwoTwo: + sectionSize.x = m_buttonsPowers[eControl_Primary4].getWidth(); + sectionSize.y = m_buttonsPowers[eControl_Primary4].getHeight(); + break; + case eSectionBeaconPrimaryTierThree: + sectionSize.x = m_buttonsPowers[eControl_Primary5].getWidth(); + sectionSize.y = m_buttonsPowers[eControl_Primary5].getHeight(); + break; + case eSectionBeaconSecondaryOne: + sectionSize.x = m_buttonsPowers[eControl_Secondary1].getWidth(); + sectionSize.y = m_buttonsPowers[eControl_Secondary1].getHeight(); + break; + case eSectionBeaconSecondaryTwo: + sectionSize.x = m_buttonsPowers[eControl_Secondary2].getWidth(); + sectionSize.y = m_buttonsPowers[eControl_Secondary2].getHeight(); + break; + case eSectionBeaconConfirm: + sectionSize.x = m_buttonConfirm.getWidth(); + sectionSize.y = m_buttonConfirm.getHeight(); + break; + default: + assert( false ); + break; + }; + + if(IsSectionSlotList(eSection)) + { + int rows = getSectionRows(eSection); + int cols = getSectionColumns(eSection); + + pSize->x = sectionSize.x/cols; + pSize->y = sectionSize.y/rows; + + int itemCol = iItemIndex % cols; + int itemRow = iItemIndex/cols; + + pPosition->x = itemCol * pSize->x; + pPosition->y = itemRow * pSize->y; + } + else + { + GetPositionOfSection(eSection, pPosition); + pSize->x = sectionSize.x; + pSize->y = sectionSize.y; + } +} + +void UIScene_BeaconMenu::setSectionSelectedSlot(ESceneSection eSection, int x, int y) +{ + int cols = getSectionColumns(eSection); + + int index = (y * cols) + x; + + UIControl_SlotList *slotList = NULL; + switch( eSection ) + { + case eSectionBeaconItem: + slotList = &m_slotListActivator; + break; + case eSectionBeaconInventory: + slotList = &m_slotListInventory; + break; + case eSectionBeaconUsing: + slotList = &m_slotListHotbar; + break; + default: + assert( false ); + break; + }; + + slotList->setHighlightSlot(index); +} + +UIControl *UIScene_BeaconMenu::getSection(ESceneSection eSection) +{ + UIControl *control = NULL; + switch( eSection ) + { + case eSectionBeaconItem: + control = &m_slotListActivator; + break; + case eSectionBeaconInventory: + control = &m_slotListInventory; + break; + case eSectionBeaconUsing: + control = &m_slotListHotbar; + break; + + case eSectionBeaconPrimaryTierOneOne: + control = &m_buttonsPowers[eControl_Primary1]; + break; + case eSectionBeaconPrimaryTierOneTwo: + control = &m_buttonsPowers[eControl_Primary2]; + break; + case eSectionBeaconPrimaryTierTwoOne: + control = &m_buttonsPowers[eControl_Primary3]; + break; + case eSectionBeaconPrimaryTierTwoTwo: + control = &m_buttonsPowers[eControl_Primary4]; + break; + case eSectionBeaconPrimaryTierThree: + control = &m_buttonsPowers[eControl_Primary5]; + break; + case eSectionBeaconSecondaryOne: + control = &m_buttonsPowers[eControl_Secondary1]; + break; + case eSectionBeaconSecondaryTwo: + control = &m_buttonsPowers[eControl_Secondary2]; + break; + case eSectionBeaconConfirm: + control = &m_buttonConfirm; + break; + + default: + assert( false ); + break; + }; + return control; +} + +void UIScene_BeaconMenu::customDraw(IggyCustomDrawCallbackRegion *region) +{ + Minecraft *pMinecraft = Minecraft::GetInstance(); + if(pMinecraft->localplayers[m_iPad] == NULL || pMinecraft->localgameModes[m_iPad] == NULL) return; + + shared_ptr item = nullptr; + int slotId = -1; + swscanf((wchar_t*)region->name,L"slot_%d",&slotId); + + if(slotId >= 0 && slotId >= m_menu->getSize() ) + { + int icon = slotId - m_menu->getSize(); + switch(icon) + { + case 0: + item = shared_ptr(new ItemInstance(Item::emerald) ); + break; + case 1: + item = shared_ptr(new ItemInstance(Item::diamond) ); + break; + case 2: + item = shared_ptr(new ItemInstance(Item::goldIngot) ); + break; + case 3: + item = shared_ptr(new ItemInstance(Item::ironIngot) ); + break; + default: + assert(false); + break; + }; + if(item != NULL) customDrawSlotControl(region,m_iPad,item,1.0f,item->isFoil(),true); + } + else + { + UIScene_AbstractContainerMenu::customDraw(region); + } +} + +void UIScene_BeaconMenu::SetConfirmButtonEnabled(bool enabled) +{ + m_buttonConfirm.SetButtonActive(enabled); +} + +void UIScene_BeaconMenu::AddPowerButton(int id, int icon, int tier, int count, bool active, bool selected) +{ + switch(tier) + { + case 0: + if(count == 0) + { + m_buttonsPowers[eControl_Primary1].SetData(id, icon,active,selected); + m_buttonsPowers[eControl_Primary1].setVisible(true); + } + else + { + m_buttonsPowers[eControl_Primary2].SetData(id, icon,active,selected); + m_buttonsPowers[eControl_Primary2].setVisible(true); + } + break; + case 1: + if(count == 0) + { + m_buttonsPowers[eControl_Primary3].SetData(id, icon,active,selected); + m_buttonsPowers[eControl_Primary3].setVisible(true); + } + else + { + m_buttonsPowers[eControl_Primary4].SetData(id, icon,active,selected); + m_buttonsPowers[eControl_Primary4].setVisible(true); + } + break; + case 2: + m_buttonsPowers[eControl_Primary5].SetData(id, icon,active,selected); + m_buttonsPowers[eControl_Primary5].setVisible(true); + break; + case 3: + if(count == 0) + { + m_buttonsPowers[eControl_Secondary1].SetData(id, icon,active,selected); + m_buttonsPowers[eControl_Secondary1].setVisible(true); + } + else + { + m_buttonsPowers[eControl_Secondary2].SetData(id, icon,active,selected); + m_buttonsPowers[eControl_Secondary2].setVisible(true); + } + break; + }; +} + +int UIScene_BeaconMenu::GetPowerButtonId(ESceneSection eSection) +{ + switch(eSection) + { + case eSectionBeaconPrimaryTierOneOne: + return m_buttonsPowers[eControl_Primary1].GetData(); + break; + case eSectionBeaconPrimaryTierOneTwo: + return m_buttonsPowers[eControl_Primary2].GetData(); + break; + case eSectionBeaconPrimaryTierTwoOne: + return m_buttonsPowers[eControl_Primary3].GetData(); + break; + case eSectionBeaconPrimaryTierTwoTwo: + return m_buttonsPowers[eControl_Primary4].GetData(); + break; + case eSectionBeaconPrimaryTierThree: + return m_buttonsPowers[eControl_Primary5].GetData(); + break; + case eSectionBeaconSecondaryOne: + return m_buttonsPowers[eControl_Secondary1].GetData(); + break; + case eSectionBeaconSecondaryTwo: + return m_buttonsPowers[eControl_Secondary2].GetData(); + break; + }; + return 0; +} + +bool UIScene_BeaconMenu::IsPowerButtonSelected(ESceneSection eSection) +{ + switch(eSection) + { + case eSectionBeaconPrimaryTierOneOne: + return m_buttonsPowers[eControl_Primary1].IsButtonSelected(); + break; + case eSectionBeaconPrimaryTierOneTwo: + return m_buttonsPowers[eControl_Primary2].IsButtonSelected(); + break; + case eSectionBeaconPrimaryTierTwoOne: + return m_buttonsPowers[eControl_Primary3].IsButtonSelected(); + break; + case eSectionBeaconPrimaryTierTwoTwo: + return m_buttonsPowers[eControl_Primary4].IsButtonSelected(); + break; + case eSectionBeaconPrimaryTierThree: + return m_buttonsPowers[eControl_Primary5].IsButtonSelected(); + break; + case eSectionBeaconSecondaryOne: + return m_buttonsPowers[eControl_Secondary1].IsButtonSelected(); + break; + case eSectionBeaconSecondaryTwo: + return m_buttonsPowers[eControl_Secondary2].IsButtonSelected(); + break; + }; + return false; +} + +void UIScene_BeaconMenu::SetPowerButtonSelected(ESceneSection eSection) +{ + switch(eSection) + { + case eSectionBeaconPrimaryTierOneOne: + case eSectionBeaconPrimaryTierOneTwo: + case eSectionBeaconPrimaryTierTwoOne: + case eSectionBeaconPrimaryTierTwoTwo: + case eSectionBeaconPrimaryTierThree: + m_buttonsPowers[eControl_Primary1].SetButtonSelected(false); + m_buttonsPowers[eControl_Primary2].SetButtonSelected(false); + m_buttonsPowers[eControl_Primary3].SetButtonSelected(false); + m_buttonsPowers[eControl_Primary4].SetButtonSelected(false); + m_buttonsPowers[eControl_Primary5].SetButtonSelected(false); + break; + case eSectionBeaconSecondaryOne: + case eSectionBeaconSecondaryTwo: + m_buttonsPowers[eControl_Secondary1].SetButtonSelected(false); + m_buttonsPowers[eControl_Secondary2].SetButtonSelected(false); + break; + }; + + + switch(eSection) + { + case eSectionBeaconPrimaryTierOneOne: + return m_buttonsPowers[eControl_Primary1].SetButtonSelected(true); + break; + case eSectionBeaconPrimaryTierOneTwo: + return m_buttonsPowers[eControl_Primary2].SetButtonSelected(true); + break; + case eSectionBeaconPrimaryTierTwoOne: + return m_buttonsPowers[eControl_Primary3].SetButtonSelected(true); + break; + case eSectionBeaconPrimaryTierTwoTwo: + return m_buttonsPowers[eControl_Primary4].SetButtonSelected(true); + break; + case eSectionBeaconPrimaryTierThree: + return m_buttonsPowers[eControl_Primary5].SetButtonSelected(true); + break; + case eSectionBeaconSecondaryOne: + return m_buttonsPowers[eControl_Secondary1].SetButtonSelected(true); + break; + case eSectionBeaconSecondaryTwo: + return m_buttonsPowers[eControl_Secondary2].SetButtonSelected(true); + break; + }; +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_BeaconMenu.h b/Minecraft.Client/Common/UI/UIScene_BeaconMenu.h new file mode 100644 index 00000000..ccd9366f --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_BeaconMenu.h @@ -0,0 +1,71 @@ +#pragma once + +#include "UIScene_AbstractContainerMenu.h" +#include "UIControl_SlotList.h" +#include "IUIScene_BeaconMenu.h" + +class UIScene_BeaconMenu : public UIScene_AbstractContainerMenu, public IUIScene_BeaconMenu +{ +private: + enum EControls + { + eControl_Primary1, + eControl_Primary2, + eControl_Primary3, + eControl_Primary4, + eControl_Primary5, + eControl_Secondary1, + eControl_Secondary2, + + eControl_EFFECT_COUNT, + }; +public: + UIScene_BeaconMenu(int iPad, void *initData, UILayer *parentLayer); + + virtual EUIScene getSceneType() { return eUIScene_BeaconMenu;} + +protected: + UIControl_SlotList m_slotListActivator; + UIControl_SlotList m_slotListActivatorIcons; + UIControl_Label m_labelPrimary, m_labelSecondary; + UIControl_BeaconEffectButton m_buttonsPowers[eControl_EFFECT_COUNT]; + UIControl_BeaconEffectButton m_buttonConfirm; + + UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene_AbstractContainerMenu) + UI_BEGIN_MAP_CHILD_ELEMENTS( m_controlMainPanel ) + UI_MAP_ELEMENT( m_slotListActivator, "ActivatorSlot") + UI_MAP_ELEMENT( m_slotListActivatorIcons, "ActivatorList") + UI_MAP_ELEMENT( m_buttonsPowers[eControl_Primary1], "Primary_Slot_01") + UI_MAP_ELEMENT( m_buttonsPowers[eControl_Primary2], "Primary_Slot_02") + UI_MAP_ELEMENT( m_buttonsPowers[eControl_Primary3], "Primary_Slot_03") + UI_MAP_ELEMENT( m_buttonsPowers[eControl_Primary4], "Primary_Slot_04") + UI_MAP_ELEMENT( m_buttonsPowers[eControl_Primary5], "Primary_Slot_05") + UI_MAP_ELEMENT( m_buttonsPowers[eControl_Secondary1], "Secondary_Slot_01") + UI_MAP_ELEMENT( m_buttonsPowers[eControl_Secondary2], "Secondary_Slot_02") + UI_MAP_ELEMENT( m_buttonConfirm, "ConfirmButton") + UI_MAP_ELEMENT( m_labelPrimary, "PrimaryPowerLabel") + UI_MAP_ELEMENT( m_labelSecondary, "SecondaryPowerLabel") + UI_END_MAP_CHILD_ELEMENTS() + UI_END_MAP_ELEMENTS_AND_NAMES() + + virtual wstring getMoviePath(); + virtual void handleReload(); + virtual void tick(); + virtual int GetBaseSlotCount() { return 4; } + + virtual int getSectionColumns(ESceneSection eSection); + virtual int getSectionRows(ESceneSection eSection); + virtual void GetPositionOfSection( ESceneSection eSection, UIVec2D* pPosition ); + virtual void GetItemScreenData( ESceneSection eSection, int iItemIndex, UIVec2D* pPosition, UIVec2D* pSize ); + virtual void handleSectionClick(ESceneSection eSection) {} + virtual void setSectionSelectedSlot(ESceneSection eSection, int x, int y); + + virtual UIControl *getSection(ESceneSection eSection); + virtual void customDraw(IggyCustomDrawCallbackRegion *region); + + virtual void SetConfirmButtonEnabled(bool enabled); + virtual void AddPowerButton(int id, int icon, int tier, int count, bool active, bool selected); + virtual int GetPowerButtonId(ESceneSection eSection); + virtual bool IsPowerButtonSelected(ESceneSection eSection); + virtual void SetPowerButtonSelected(ESceneSection eSection); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_BrewingStandMenu.cpp b/Minecraft.Client/Common/UI/UIScene_BrewingStandMenu.cpp index cd56bd84..8563054c 100644 --- a/Minecraft.Client/Common/UI/UIScene_BrewingStandMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_BrewingStandMenu.cpp @@ -14,11 +14,11 @@ UIScene_BrewingStandMenu::UIScene_BrewingStandMenu(int iPad, void *_initData, UI m_progressBrewingArrow.init(L"",0,0,PotionBrewing::BREWING_TIME_SECONDS * SharedConstants::TICKS_PER_SECOND,0); m_progressBrewingBubbles.init(L"",0,0,30,0); - m_labelBrewingStand.init( app.GetString(IDS_BREWING_STAND) ); - BrewingScreenInput *initData = (BrewingScreenInput *)_initData; m_brewingStand = initData->brewingStand; + m_labelBrewingStand.init( m_brewingStand->getName() ); + Minecraft *pMinecraft = Minecraft::GetInstance(); if( pMinecraft->localgameModes[initData->iPad] != NULL ) { diff --git a/Minecraft.Client/Common/UI/UIScene_ConnectingProgress.cpp b/Minecraft.Client/Common/UI/UIScene_ConnectingProgress.cpp index 0ea99a36..968072a8 100644 --- a/Minecraft.Client/Common/UI/UIScene_ConnectingProgress.cpp +++ b/Minecraft.Client/Common/UI/UIScene_ConnectingProgress.cpp @@ -188,7 +188,7 @@ void UIScene_ConnectingProgress::handleTimerComplete(int id) { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_CONNECTION_FAILED, exitReasonStringId, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_CONNECTION_FAILED, exitReasonStringId, uiIDA,1,ProfileManager.GetPrimaryPad()); exitReasonStringId = -1; //app.NavigateToHomeMenu(); diff --git a/Minecraft.Client/Common/UI/UIScene_ContainerMenu.cpp b/Minecraft.Client/Common/UI/UIScene_ContainerMenu.cpp index a0b25d18..9e48a57b 100644 --- a/Minecraft.Client/Common/UI/UIScene_ContainerMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_ContainerMenu.cpp @@ -19,7 +19,7 @@ UIScene_ContainerMenu::UIScene_ContainerMenu(int iPad, void *_initData, UILayer // Setup all the Iggy references we need for this scene initialiseMovie(); - m_labelChest.init(app.GetString(initData->container->getName())); + m_labelChest.init(initData->container->getName()); ContainerMenu* menu = new ContainerMenu( initData->inventory, initData->container ); diff --git a/Minecraft.Client/Common/UI/UIScene_ControlsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_ControlsMenu.cpp index c05b502e..57567248 100644 --- a/Minecraft.Client/Common/UI/UIScene_ControlsMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_ControlsMenu.cpp @@ -37,7 +37,7 @@ UIScene_ControlsMenu::UIScene_ControlsMenu(int iPad, void *initData, UILayer *pa // 4J-PB - stop the label showing in the in-game controls menu else { - m_labelVersion.init(" "); + m_labelVersion.init(L" "); } m_bCreativeMode = !bNotInGame && Minecraft::GetInstance()->localplayers[m_iPad] && Minecraft::GetInstance()->localplayers[m_iPad]->abilities.mayfly; diff --git a/Minecraft.Client/Common/UI/UIScene_CraftingMenu.cpp b/Minecraft.Client/Common/UI/UIScene_CraftingMenu.cpp index 5b729069..66d8c41e 100644 --- a/Minecraft.Client/Common/UI/UIScene_CraftingMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_CraftingMenu.cpp @@ -197,7 +197,10 @@ void UIScene_CraftingMenu::handleDestroy() } // We need to make sure that we call closeContainer() anytime this menu is closed, even if it is forced to close by some other reason (like the player dying) - if(Minecraft::GetInstance()->localplayers[m_iPad] != NULL) Minecraft::GetInstance()->localplayers[m_iPad]->closeContainer(); + if(Minecraft::GetInstance()->localplayers[m_iPad] != NULL && Minecraft::GetInstance()->localplayers[m_iPad]->containerMenu->containerId == m_menu->containerId) + { + Minecraft::GetInstance()->localplayers[m_iPad]->closeContainer(); + } ui.OverrideSFX(m_iPad,ACTION_MENU_A,false); ui.OverrideSFX(m_iPad,ACTION_MENU_OK,false); @@ -763,6 +766,21 @@ void UIScene_CraftingMenu::updateHighlightAndScrollPositions() } } +void UIScene_CraftingMenu::HandleMessage(EUIMessage message, void *data) +{ + switch(message) + { + case eUIMessage_InventoryUpdated: + handleInventoryUpdated(data); + break; + }; +} + +void UIScene_CraftingMenu::handleInventoryUpdated(LPVOID data) +{ + HandleInventoryUpdated(); +} + void UIScene_CraftingMenu::updateVSlotPositions(int iSlots, int i) { // Not needed diff --git a/Minecraft.Client/Common/UI/UIScene_CraftingMenu.h b/Minecraft.Client/Common/UI/UIScene_CraftingMenu.h index 44a39d61..84c9ba65 100644 --- a/Minecraft.Client/Common/UI/UIScene_CraftingMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_CraftingMenu.h @@ -202,4 +202,10 @@ protected: virtual void updateVSlotPositions(int iSlots, int i); virtual void UpdateMultiPanel(); + + virtual void HandleMessage(EUIMessage message, void *data); + void handleInventoryUpdated(LPVOID data); + + // 4J - TomK If update tooltips is called then make sure the correct parent is invoked! (both UIScene AND IUIScene_CraftingMenu have an instance of said function!) + virtual void updateTooltips() { IUIScene_CraftingMenu::UpdateTooltips(); } }; diff --git a/Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.cpp b/Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.cpp index 6be67bed..f7cca84b 100644 --- a/Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.cpp @@ -45,11 +45,8 @@ UIScene_CreateWorldMenu::UIScene_CreateWorldMenu(int iPad, void *initData, UILay m_iPad=iPad; m_labelWorldName.init(app.GetString(IDS_WORLD_NAME)); - m_labelSeed.init(app.GetString(IDS_CREATE_NEW_WORLD_SEED)); - m_labelRandomSeed.init(app.GetString(IDS_CREATE_NEW_WORLD_RANDOM_SEED)); m_editWorldName.init(m_worldName, eControl_EditWorldName); - m_editSeed.init(L"", eControl_EditSeed); m_buttonGamemode.init(app.GetString(IDS_GAMEMODE_SURVIVAL),eControl_GameModeToggle); m_buttonMoreOptions.init(app.GetString(IDS_MORE_OPTIONS),eControl_MoreOptions); @@ -75,7 +72,16 @@ UIScene_CreateWorldMenu::UIScene_CreateWorldMenu(int iPad, void *initData, UILay m_MoreOptionsParams.bTNT = TRUE; m_MoreOptionsParams.iPad = iPad; - m_bGameModeSurvival=true; + m_MoreOptionsParams.bMobGriefing = true; + m_MoreOptionsParams.bKeepInventory = false; + m_MoreOptionsParams.bDoMobSpawning = true; + m_MoreOptionsParams.bDoMobLoot = true; + m_MoreOptionsParams.bDoTileDrops = true; + m_MoreOptionsParams.bNaturalRegeneration = true; + m_MoreOptionsParams.bDoDaylightCycle = true; + + m_bGameModeCreative = false; + m_iGameModeId = GameType::SURVIVAL->getId(); m_pDLCPack = NULL; m_bRebuildTouchBoxes = false; @@ -121,28 +127,23 @@ UIScene_CreateWorldMenu::UIScene_CreateWorldMenu(int iPad, void *initData, UILay } } -#if defined _XBOX_ONE || defined __ORBIS__ || defined _WINDOWS64 - if(getSceneResolution() == eSceneResolution_1080) - { - // Set up online game checkbox - bool bOnlineGame = m_MoreOptionsParams.bOnlineGame; - m_checkboxOnline.SetEnable(true); - - // 4J-PB - to stop an offline game being able to select the online flag - if(ProfileManager.IsSignedInLive(m_iPad) == false) - { - m_checkboxOnline.SetEnable(false); - } + // Set up online game checkbox + bool bOnlineGame = m_MoreOptionsParams.bOnlineGame; + m_checkboxOnline.SetEnable(true); - if(m_MoreOptionsParams.bOnlineSettingChangedBySystem) - { - m_checkboxOnline.SetEnable(false); - bOnlineGame = false; - } + // 4J-PB - to stop an offline game being able to select the online flag + if(ProfileManager.IsSignedInLive(m_iPad) == false) + { + m_checkboxOnline.SetEnable(false); + } - m_checkboxOnline.init(app.GetString(IDS_ONLINE_GAME), eControl_OnlineGame, bOnlineGame); + if(m_MoreOptionsParams.bOnlineSettingChangedBySystem) + { + m_checkboxOnline.SetEnable(false); + bOnlineGame = false; } -#endif + + m_checkboxOnline.init(app.GetString(IDS_ONLINE_GAME), eControl_OnlineGame, bOnlineGame); addTimer( GAME_CREATE_ONLINE_TIMER_ID,GAME_CREATE_ONLINE_TIMER_TIME ); #if TO_BE_IMPLEMENTED @@ -176,6 +177,7 @@ UIScene_CreateWorldMenu::UIScene_CreateWorldMenu(int iPad, void *initData, UILay swprintf(imageName,64,L"tpack%08x",tp->getId()); registerSubstitutionTexture(imageName, pbImageData, dwImageBytes); m_texturePackList.addPack(i,imageName); + app.DebugPrintf("Adding texture pack %ls at %d\n",imageName,i); } } @@ -323,7 +325,7 @@ void UIScene_CreateWorldMenu::tick() uiIDA[0]=IDS_PRO_NOTONLINE_DECLINE; // Give the player a warning about the texture pack missing - ui.RequestMessageBox(IDS_PLAY_OFFLINE,IDS_NO_PLAYSTATIONPLUS, uiIDA, 1, ProfileManager.GetPrimaryPad(),&UIScene_CreateWorldMenu::ContinueOffline,dynamic_cast(this),app.GetStringTable(), 0, 0, false); + ui.RequestAlertMessage(IDS_PLAY_OFFLINE,IDS_NO_PLAYSTATIONPLUS, uiIDA, 1, ProfileManager.GetPrimaryPad(),&UIScene_CreateWorldMenu::ContinueOffline,dynamic_cast(this)); } } break; @@ -374,7 +376,7 @@ void UIScene_CreateWorldMenu::handleInput(int iPad, int key, bool repeat, bool p if ( pressed && controlHasFocus(m_checkboxOnline.getId()) && !m_checkboxOnline.IsEnabled() ) { UINT uiIDA[1] = { IDS_CONFIRM_OK }; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad); } #endif @@ -386,22 +388,17 @@ void UIScene_CreateWorldMenu::handleInput(int iPad, int key, bool repeat, bool p case ACTION_MENU_OTHER_STICK_DOWN: sendInputToMovie(key, repeat, pressed, released); -#if defined _XBOX_ONE || defined __ORBIS__ || defined _WINDOWS64 - if(getSceneResolution() == eSceneResolution_1080) + bool bOnlineGame = m_checkboxOnline.IsChecked(); + if (m_MoreOptionsParams.bOnlineGame != bOnlineGame) { - bool bOnlineGame = m_checkboxOnline.IsChecked(); - if (m_MoreOptionsParams.bOnlineGame != bOnlineGame) - { - m_MoreOptionsParams.bOnlineGame = bOnlineGame; + m_MoreOptionsParams.bOnlineGame = bOnlineGame; - if (!m_MoreOptionsParams.bOnlineGame) - { - m_MoreOptionsParams.bInviteOnly = false; - m_MoreOptionsParams.bAllowFriendsOfFriends = false; - } + if (!m_MoreOptionsParams.bOnlineGame) + { + m_MoreOptionsParams.bInviteOnly = false; + m_MoreOptionsParams.bAllowFriendsOfFriends = false; } } -#endif handled = true; break; @@ -423,39 +420,20 @@ void UIScene_CreateWorldMenu::handlePress(F64 controlId, F64 childId) InputManager.RequestKeyboard(app.GetString(IDS_CREATE_NEW_WORLD),m_editWorldName.getLabel(),(DWORD)0,25,&UIScene_CreateWorldMenu::KeyboardCompleteWorldNameCallback,this,C_4JInput::EKeyboardMode_Default); } break; - case eControl_EditSeed: - { - m_bIgnoreInput=true; -#ifdef __PS3__ - int language = XGetLanguage(); - switch(language) - { - case XC_LANGUAGE_JAPANESE: - case XC_LANGUAGE_KOREAN: - case XC_LANGUAGE_TCHINESE: - InputManager.RequestKeyboard(app.GetString(IDS_CREATE_NEW_WORLD_SEED),m_editSeed.getLabel(),(DWORD)0,60,&UIScene_CreateWorldMenu::KeyboardCompleteSeedCallback,this,C_4JInput::EKeyboardMode_Default); - break; - default: - // 4J Stu - Use a different keyboard for non-asian languages so we don't have prediction on - InputManager.RequestKeyboard(app.GetString(IDS_CREATE_NEW_WORLD_SEED),m_editSeed.getLabel(),(DWORD)0,60,&UIScene_CreateWorldMenu::KeyboardCompleteSeedCallback,this,C_4JInput::EKeyboardMode_Alphabet_Extended); - break; - } -#else - InputManager.RequestKeyboard(app.GetString(IDS_CREATE_NEW_WORLD_SEED),m_editSeed.getLabel(),(DWORD)0,60,&UIScene_CreateWorldMenu::KeyboardCompleteSeedCallback,this,C_4JInput::EKeyboardMode_Default); -#endif - } - break; case eControl_GameModeToggle: - if(m_bGameModeSurvival) + switch(m_iGameModeId) { + case 0: // Survival m_buttonGamemode.setLabel(app.GetString(IDS_GAMEMODE_CREATIVE)); - m_bGameModeSurvival=false; - } - else - { + m_iGameModeId = GameType::CREATIVE->getId(); + m_bGameModeCreative = true; + break; + case 1: // Creative m_buttonGamemode.setLabel(app.GetString(IDS_GAMEMODE_SURVIVAL)); - m_bGameModeSurvival=true; - } + m_iGameModeId = GameType::SURVIVAL->getId(); + m_bGameModeCreative = false; + break; + }; break; case eControl_MoreOptions: ui.NavigateToScene(m_iPad, eUIScene_LaunchMoreOptionsMenu, &m_MoreOptionsParams); @@ -533,7 +511,7 @@ void UIScene_CreateWorldMenu::StartSharedLaunchFlow() uiIDA[1]=IDS_CONFIRM_CANCEL; // Give the player a warning about the texture pack missing - ui.RequestMessageBox(IDS_DLC_TEXTUREPACK_NOT_PRESENT_TITLE, IDS_DLC_TEXTUREPACK_NOT_PRESENT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&TexturePackDialogReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_DLC_TEXTUREPACK_NOT_PRESENT_TITLE, IDS_DLC_TEXTUREPACK_NOT_PRESENT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&TexturePackDialogReturned,this); return; } } @@ -603,13 +581,13 @@ void UIScene_CreateWorldMenu::StartSharedLaunchFlow() // trial pack warning UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_USING_TRIAL_TEXUREPACK_WARNING, uiIDA, 1, m_iPad,&TrialTexturePackWarningReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_USING_TRIAL_TEXUREPACK_WARNING, uiIDA, 1, m_iPad,&TrialTexturePackWarningReturned,this); #elif defined __PS3__ || defined __ORBIS__ || defined(__PSVITA__) // trial pack warning UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestMessageBox(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_USING_TRIAL_TEXUREPACK_WARNING, uiIDA, 2, m_iPad,&TrialTexturePackWarningReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_USING_TRIAL_TEXUREPACK_WARNING, uiIDA, 2, m_iPad,&TrialTexturePackWarningReturned,this); #endif #if defined _XBOX_ONE || defined __ORBIS__ @@ -684,13 +662,9 @@ void UIScene_CreateWorldMenu::handleTimerComplete(int id) m_MoreOptionsParams.bAllowFriendsOfFriends = FALSE; } -#if defined _XBOX_ONE || defined __ORBIS__ || defined _WINDOWS64 - if(getSceneResolution() == eSceneResolution_1080) - { - m_checkboxOnline.SetEnable(bMultiplayerAllowed); - m_checkboxOnline.setChecked(m_MoreOptionsParams.bOnlineGame); - } -#endif + m_checkboxOnline.SetEnable(bMultiplayerAllowed); + m_checkboxOnline.setChecked(m_MoreOptionsParams.bOnlineGame); + m_bMultiplayerAllowed = bMultiplayerAllowed; } } @@ -742,13 +716,7 @@ void UIScene_CreateWorldMenu::handleGainFocus(bool navBack) { if(navBack) { -#if defined _XBOX_ONE || defined __ORBIS__ || defined _WINDOWS64 - if(getSceneResolution() == eSceneResolution_1080) - { - m_checkboxOnline.setChecked(m_MoreOptionsParams.bOnlineGame); - } - m_editSeed.setLabel(m_MoreOptionsParams.seed); -#endif + m_checkboxOnline.setChecked(m_MoreOptionsParams.bOnlineGame); } } @@ -774,28 +742,6 @@ int UIScene_CreateWorldMenu::KeyboardCompleteWorldNameCallback(LPVOID lpParam,bo return 0; } -int UIScene_CreateWorldMenu::KeyboardCompleteSeedCallback(LPVOID lpParam,bool bRes) -{ - UIScene_CreateWorldMenu *pClass=(UIScene_CreateWorldMenu *)lpParam; - pClass->m_bIgnoreInput=false; - // 4J HEG - No reason to set value if keyboard was cancelled - if (bRes) - { -#ifdef __PSVITA__ - //CD - Changed to 2048 [SCE_IME_MAX_TEXT_LENGTH] - uint16_t pchText[2048]; - ZeroMemory(pchText, 2048 * sizeof(uint16_t) ); -#else - uint16_t pchText[128]; - ZeroMemory(pchText, 128 * sizeof(uint16_t) ); -#endif - InputManager.GetText(pchText); - pClass->m_editSeed.setLabel((wchar_t *)pchText); - pClass->m_MoreOptionsParams.seed = (wchar_t *)pchText; - } - return 0; -} - void UIScene_CreateWorldMenu::checkStateAndStartGame() { int primaryPad = ProfileManager.GetPrimaryPad(); @@ -832,7 +778,7 @@ void UIScene_CreateWorldMenu::checkStateAndStartGame() // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive if the npAvailability isn't SCE_OK UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPadNotSignedInLive, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPadNotSignedInLive); } else { @@ -840,7 +786,7 @@ void UIScene_CreateWorldMenu::checkStateAndStartGame() UINT uiIDA[2]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1] = IDS_CANCEL; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPadNotSignedInLive, &UIScene_CreateWorldMenu::MustSignInReturnedPSN, this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPadNotSignedInLive, &UIScene_CreateWorldMenu::MustSignInReturnedPSN, this); } return; /* 4J-PB - Add this after release @@ -852,21 +798,21 @@ void UIScene_CreateWorldMenu::checkStateAndStartGame() // Signed in to PSN but not connected (no internet access) UINT uiIDA[1]; uiIDA[0] = IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_PRO_CURRENTLY_NOT_ONLINE_TITLE, IDS_PRO_PSNOFFLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_CURRENTLY_NOT_ONLINE_TITLE, IDS_PRO_PSNOFFLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else { // Not signed in to PSN UINT uiIDA[1]; uiIDA[0] = IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad()); return; }*/ #else m_bIgnoreInput=false; UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad()); return; #endif } @@ -894,6 +840,16 @@ void UIScene_CreateWorldMenu::checkStateAndStartGame() { m_bIgnoreInput=false; + if(ProfileManager.RequestingPlaystationPlus(iPadWithNoPlaystationPlus)) + { + // MGH - added this so we don't try and upsell when we don't know if the player has PS Plus yet (if it can't connect to the PS Plus server). + UINT uiIDA[1]; + uiIDA[0]=IDS_OK; + ui.RequestAlertMessage(IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, ProfileManager.GetPrimaryPad(), NULL, NULL); + return; + } + + // 4J-PB - we're not allowed to show the text Playstation Plus - have to call the upsell all the time! // upsell psplus int32_t iResult=sceNpCommerceDialogInitialize(); @@ -915,18 +871,18 @@ void UIScene_CreateWorldMenu::checkStateAndStartGame() } #endif - if(m_bGameModeSurvival != true || m_MoreOptionsParams.bHostPrivileges == TRUE) + if(m_bGameModeCreative == true || m_MoreOptionsParams.bHostPrivileges == TRUE) { UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - if(m_bGameModeSurvival != true) + if(m_bGameModeCreative == true) { - ui.RequestMessageBox(IDS_TITLE_START_GAME, IDS_CONFIRM_START_CREATIVE, uiIDA, 2, m_iPad,&UIScene_CreateWorldMenu::ConfirmCreateReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_TITLE_START_GAME, IDS_CONFIRM_START_CREATIVE, uiIDA, 2, m_iPad,&UIScene_CreateWorldMenu::ConfirmCreateReturned,this); } else { - ui.RequestMessageBox(IDS_TITLE_START_GAME, IDS_CONFIRM_START_HOST_PRIVILEGES, uiIDA, 2, m_iPad,&UIScene_CreateWorldMenu::ConfirmCreateReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_TITLE_START_GAME, IDS_CONFIRM_START_HOST_PRIVILEGES, uiIDA, 2, m_iPad,&UIScene_CreateWorldMenu::ConfirmCreateReturned,this); } } else @@ -973,6 +929,15 @@ void UIScene_CreateWorldMenu::checkStateAndStartGame() { m_bIgnoreInput=false; + if(ProfileManager.RequestingPlaystationPlus(iPadWithNoPlaystationPlus)) + { + // MGH - added this so we don't try and upsell when we don't know if the player has PS Plus yet (if it can't connect to the PS Plus server). + UINT uiIDA[1]; + uiIDA[0]=IDS_OK; + ui.RequestAlertMessage(IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, ProfileManager.GetPrimaryPad(), NULL, NULL); + return; + } + // 4J-PB - we're not allowed to show the text Playstation Plus - have to call the upsell all the time! // upsell psplus int32_t iResult=sceNpCommerceDialogInitialize(); @@ -1024,6 +989,16 @@ void UIScene_CreateWorldMenu::checkStateAndStartGame() else if(isOnlineGame && isSignedInLive && (bPlayStationPlus==false)) { m_bIgnoreInput=false; + if(ProfileManager.RequestingPlaystationPlus(iPadWithNoPlaystationPlus)) + { + // MGH - added this so we don't try and upsell when we don't know if the player has PS Plus yet (if it can't connect to the PS Plus server). + UINT uiIDA[1]; + uiIDA[0]=IDS_OK; + ui.RequestAlertMessage(IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, ProfileManager.GetPrimaryPad(), NULL, NULL); + return; + } + + setVisible( true ); // 4J-PB - we're not allowed to show the text Playstation Plus - have to call the upsell all the time! @@ -1164,7 +1139,7 @@ void UIScene_CreateWorldMenu::CreateGame(UIScene_CreateWorldMenu* pClass, DWORD app.SetGameHostOption(eGameHostOption_BedrockFog,app.GetGameSettings(pClass->m_iPad,eGameSetting_BedrockFog)?1:0); - app.SetGameHostOption(eGameHostOption_GameType,pClass->m_bGameModeSurvival?GameType::SURVIVAL->getId():GameType::CREATIVE->getId() ); + app.SetGameHostOption(eGameHostOption_GameType,pClass->m_iGameModeId ); app.SetGameHostOption(eGameHostOption_LevelType,pClass->m_MoreOptionsParams.bFlatWorld ); app.SetGameHostOption(eGameHostOption_Structures,pClass->m_MoreOptionsParams.bStructures ); app.SetGameHostOption(eGameHostOption_BonusChest,pClass->m_MoreOptionsParams.bBonusChest ); @@ -1176,6 +1151,21 @@ void UIScene_CreateWorldMenu::CreateGame(UIScene_CreateWorldMenu* pClass, DWORD app.SetGameHostOption(eGameHostOption_HostCanFly,pClass->m_MoreOptionsParams.bHostPrivileges); app.SetGameHostOption(eGameHostOption_HostCanChangeHunger,pClass->m_MoreOptionsParams.bHostPrivileges); app.SetGameHostOption(eGameHostOption_HostCanBeInvisible,pClass->m_MoreOptionsParams.bHostPrivileges ); + + app.SetGameHostOption(eGameHostOption_MobGriefing, pClass->m_MoreOptionsParams.bMobGriefing); + app.SetGameHostOption(eGameHostOption_KeepInventory, pClass->m_MoreOptionsParams.bKeepInventory); + app.SetGameHostOption(eGameHostOption_DoMobSpawning, pClass->m_MoreOptionsParams.bDoMobSpawning); + app.SetGameHostOption(eGameHostOption_DoMobLoot, pClass->m_MoreOptionsParams.bDoMobLoot); + app.SetGameHostOption(eGameHostOption_DoTileDrops, pClass->m_MoreOptionsParams.bDoTileDrops); + app.SetGameHostOption(eGameHostOption_NaturalRegeneration, pClass->m_MoreOptionsParams.bNaturalRegeneration); + app.SetGameHostOption(eGameHostOption_DoDaylightCycle, pClass->m_MoreOptionsParams.bDoDaylightCycle); + + app.SetGameHostOption(eGameHostOption_WasntSaveOwner, false); +#ifdef _LARGE_WORLDS + app.SetGameHostOption(eGameHostOption_WorldSize, pClass->m_MoreOptionsParams.worldSize+1 ); // 0 is GAME_HOST_OPTION_WORLDSIZE_UNKNOWN + pClass->m_MoreOptionsParams.currentWorldSize = (EGameHostOptionWorldSize)(pClass->m_MoreOptionsParams.worldSize+1); + pClass->m_MoreOptionsParams.newWorldSize = (EGameHostOptionWorldSize)(pClass->m_MoreOptionsParams.worldSize+1); +#endif g_NetworkManager.HostGame(dwLocalUsersMask,isClientSide,isPrivate,MINECRAFT_NET_MAX_PLAYERS,0); @@ -1186,26 +1176,23 @@ void UIScene_CreateWorldMenu::CreateGame(UIScene_CreateWorldMenu* pClass, DWORD { case 0: // Classic - param->xzSize = 1 * 54; - param->hellScale = 3; + param->xzSize = LEVEL_WIDTH_CLASSIC; + param->hellScale = HELL_LEVEL_SCALE_CLASSIC; // hellsize = 54/3 = 18 break; case 1: // Small - param->xzSize = 1 * 64; - param->hellScale = 3; + param->xzSize = LEVEL_WIDTH_SMALL; + param->hellScale = HELL_LEVEL_SCALE_SMALL; // hellsize = ceil(64/3) = 22 break; case 2: // Medium - param->xzSize = 3 * 64; - param->hellScale = 6; + param->xzSize = LEVEL_WIDTH_MEDIUM; + param->hellScale = HELL_LEVEL_SCALE_MEDIUM; // hellsize= ceil(3*64/6) = 32 break; case 3: - //param->xzSize = 5 * 64; - //param->hellScale = 8; - // Large - param->xzSize = LEVEL_MAX_WIDTH; - param->hellScale = HELL_LEVEL_MAX_SCALE; + param->xzSize = LEVEL_WIDTH_LARGE; + param->hellScale = HELL_LEVEL_SCALE_LARGE; // hellsize = ceil(5*64/8) = 40 break; }; #else @@ -1283,7 +1270,7 @@ int UIScene_CreateWorldMenu::StartGame_SignInReturned(void *pParam,bool bContinu // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive if the npAvailability isn't SCE_OK UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPadNotSignedInLive, NULL, NULL, app.GetStringTable()); + ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPadNotSignedInLive); } else { @@ -1291,14 +1278,14 @@ int UIScene_CreateWorldMenu::StartGame_SignInReturned(void *pParam,bool bContinu UINT uiIDA[2]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1] = IDS_CANCEL; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPadNotSignedInLive, &UIScene_CreateWorldMenu::MustSignInReturnedPSN, pClass, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPadNotSignedInLive, &UIScene_CreateWorldMenu::MustSignInReturnedPSN, pClass); } return 0; #else pClass->m_bIgnoreInput=false; UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad()); return 0; #endif } @@ -1318,14 +1305,14 @@ int UIScene_CreateWorldMenu::StartGame_SignInReturned(void *pParam,bool bContinu pClass->m_bIgnoreInput = false; UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_FAILED_TO_CREATE_GAME_TITLE, IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage( IDS_FAILED_TO_CREATE_GAME_TITLE, IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE, uiIDA,1,ProfileManager.GetPrimaryPad()); } else { pClass->m_bIgnoreInput = false; UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_HOST_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_HOST_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad()); } } else @@ -1389,7 +1376,7 @@ int UIScene_CreateWorldMenu::ConfirmCreateReturned(void *pParam,int iPad,C4JStor pClass->m_bIgnoreInput = false; UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_FAILED_TO_CREATE_GAME_TITLE, IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage( IDS_FAILED_TO_CREATE_GAME_TITLE, IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE, uiIDA,1,ProfileManager.GetPrimaryPad()); } else { diff --git a/Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.h b/Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.h index ebb383e8..d6ae1c04 100644 --- a/Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.h @@ -8,7 +8,6 @@ private: enum EControls { eControl_EditWorldName, - eControl_EditSeed, eControl_TexturePackList, eControl_GameModeToggle, eControl_Difficulty, @@ -24,14 +23,11 @@ private: wstring m_seed; UIControl m_controlMainPanel; - UIControl_Label m_labelWorldName, m_labelSeed, m_labelRandomSeed; + UIControl_Label m_labelWorldName; UIControl_Button m_buttonGamemode, m_buttonMoreOptions, m_buttonCreateWorld; - UIControl_TextInput m_editWorldName, m_editSeed; + UIControl_TextInput m_editWorldName; UIControl_Slider m_sliderDifficulty; - -#if defined _XBOX_ONE || defined __ORBIS__ || defined _WINDOWS64 UIControl_CheckBox m_checkboxOnline; -#endif UIControl_BitmapIcon m_bitmapIcon, m_bitmapComparison; @@ -40,22 +36,17 @@ private: UI_BEGIN_MAP_CHILD_ELEMENTS( m_controlMainPanel ) UI_MAP_ELEMENT( m_labelWorldName, "WorldName") UI_MAP_ELEMENT( m_editWorldName, "EditWorldName") - UI_MAP_ELEMENT( m_labelSeed, "Seed") - UI_MAP_ELEMENT( m_editSeed, "EditSeed") - UI_MAP_ELEMENT( m_labelRandomSeed, "RandomSeed") UI_MAP_ELEMENT( m_texturePackList, "TexturePackSelector") UI_MAP_ELEMENT( m_buttonGamemode, "GameModeToggle") - -#if defined _XBOX_ONE || defined __ORBIS__ || defined _WINDOWS64 UI_MAP_ELEMENT( m_checkboxOnline, "CheckboxOnline") -#endif UI_MAP_ELEMENT( m_buttonMoreOptions, "MoreOptions") UI_MAP_ELEMENT( m_buttonCreateWorld, "NewWorld") UI_MAP_ELEMENT( m_sliderDifficulty, "Difficulty") UI_END_MAP_CHILD_ELEMENTS() UI_END_MAP_ELEMENTS_AND_NAMES() - bool m_bGameModeSurvival; + bool m_bGameModeCreative; + int m_iGameModeId; bool m_bMultiplayerAllowed; DLCPack * m_pDLCPack; bool m_bRebuildTouchBoxes; @@ -97,7 +88,6 @@ private: protected: static int KeyboardCompleteWorldNameCallback(LPVOID lpParam,const bool bRes); - static int KeyboardCompleteSeedCallback(LPVOID lpParam,const bool bRes); void handlePress(F64 controlId, F64 childId); void handleSliderMove(F64 sliderId, F64 currentValue); diff --git a/Minecraft.Client/Common/UI/UIScene_CreativeMenu.cpp b/Minecraft.Client/Common/UI/UIScene_CreativeMenu.cpp index 569cc8ba..0895cdff 100644 --- a/Minecraft.Client/Common/UI/UIScene_CreativeMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_CreativeMenu.cpp @@ -21,7 +21,7 @@ UIScene_CreativeMenu::UIScene_CreativeMenu(int iPad, void *_initData, UILayer *p InventoryScreenInput *initData = (InventoryScreenInput *)_initData; - shared_ptr creativeContainer = shared_ptr(new SimpleContainer( 0, TabSpec::MAX_SIZE )); + shared_ptr creativeContainer = shared_ptr(new SimpleContainer( 0, L"", false, TabSpec::MAX_SIZE )); itemPickerMenu = new ItemPickerMenu(creativeContainer, initData->player->inventory); Initialize( initData->iPad, itemPickerMenu, false, -1, eSectionInventoryCreativeUsing, eSectionInventoryCreativeMax, initData->bNavigateBack); @@ -158,26 +158,6 @@ void UIScene_CreativeMenu::handleOtherClicked(int iPad, ESceneSection eSection, } } -void UIScene_CreativeMenu::ScrollBar(UIVec2D pointerPos) -{ - float fPosition = ((float)pointerPos.y - (float)m_TouchInput[ETouchInput_TouchSlider].getYPos()) / (float)m_TouchInput[ETouchInput_TouchSlider].getHeight(); - - // clamp - if(fPosition > 1) - fPosition = 1.0f; - else if(fPosition < 0) - fPosition = 0.0f; - - // calculate page position according to page count - int iCurrentPage = Math::round(fPosition * (specs[m_curTab]->getPageCount() - 1)); - - // set tab page - m_tabPage[m_curTab] = iCurrentPage; - - // update tab - switchTab(m_curTab); -} - void UIScene_CreativeMenu::handleReload() { Initialize( m_iPad, m_menu, false, -1, eSectionInventoryCreativeUsing, eSectionInventoryCreativeMax, m_bNavigateBack ); @@ -191,6 +171,10 @@ void UIScene_CreativeMenu::handleReload() { m_slotListHotbar.addSlot(i); } + + ECreativeInventoryTabs lastTab = m_curTab; + m_curTab = eCreativeInventoryTab_COUNT; + switchTab(lastTab); } void UIScene_CreativeMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) diff --git a/Minecraft.Client/Common/UI/UIScene_CreativeMenu.h b/Minecraft.Client/Common/UI/UIScene_CreativeMenu.h index 6fbec2ba..530a7512 100644 --- a/Minecraft.Client/Common/UI/UIScene_CreativeMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_CreativeMenu.h @@ -80,7 +80,6 @@ public: virtual void handleTouchBoxRebuild(); virtual void handleTimerComplete(int id); #endif - virtual void ScrollBar(UIVec2D pointerPos); private: // IUIScene_CreativeMenu diff --git a/Minecraft.Client/Common/UI/UIScene_Credits.cpp b/Minecraft.Client/Common/UI/UIScene_Credits.cpp index 11558598..75ddf92f 100644 --- a/Minecraft.Client/Common/UI/UIScene_Credits.cpp +++ b/Minecraft.Client/Common/UI/UIScene_Credits.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "UI.h" +#include "..\Minecraft.World\StringHelpers.h" #include "UIScene_Credits.h" #define CREDIT_ICON -2 @@ -50,7 +51,16 @@ SCreditTextItemDef UIScene_Credits::gs_aCreditDefs[MAX_CREDIT_STRINGS] = { L"Patrick Geuder", NO_TRANSLATED_STRING, NO_TRANSLATED_STRING,eSmallText }, { L"%ls", IDS_CREDITS_MUSICANDSOUNDS, NO_TRANSLATED_STRING,eLargeText }, { L"Daniel Rosenfeld (C418)", NO_TRANSLATED_STRING, NO_TRANSLATED_STRING,eSmallText }, - { L"", NO_TRANSLATED_STRING, NO_TRANSLATED_STRING,eSmallText }, // extra blank line + { L"", NO_TRANSLATED_STRING, NO_TRANSLATED_STRING,eSmallText }, // extra blank line + +// Added credit for horses + { L"Developers of Mo' Creatures:", NO_TRANSLATED_STRING, NO_TRANSLATED_STRING,eExtraLargeText }, + { L"John Olarte (DrZhark)", NO_TRANSLATED_STRING, NO_TRANSLATED_STRING,eSmallText }, + { L"Kent Christian Jensen", NO_TRANSLATED_STRING, NO_TRANSLATED_STRING,eSmallText }, + { L"Dan Roque", NO_TRANSLATED_STRING, NO_TRANSLATED_STRING,eSmallText }, + { L"", NO_TRANSLATED_STRING, NO_TRANSLATED_STRING,eSmallText }, // extra blank line + + { L"4J Studios", NO_TRANSLATED_STRING, NO_TRANSLATED_STRING,eExtraLargeText }, { L"%ls", IDS_CREDITS_PROGRAMMING, NO_TRANSLATED_STRING,eLargeText }, { L"Paddy Burns", NO_TRANSLATED_STRING, NO_TRANSLATED_STRING,eSmallText }, @@ -584,27 +594,38 @@ void UIScene_Credits::tick() // Set up the new text element. if(pDef->m_Text!=NULL) // 4J-PB - think the RAD logo ones aren't set up yet and are coming is as null - { - + { if ( pDef->m_iStringID[0] == CREDIT_ICON ) { addImage((ECreditIcons)pDef->m_iStringID[1]); - } - else if ( pDef->m_iStringID[0] == NO_TRANSLATED_STRING ) - { - setNextLabel(pDef->m_Text,pDef->m_eType); - } + } else // using additional translated string. { + wstring sanitisedString = wstring(pDef->m_Text); + + // 4J-JEV: Some DLC credits contain copyright or registered symbols that are not rendered in some fonts. + if ( !ui.UsingBitmapFont() ) + { + sanitisedString = replaceAll(sanitisedString, L"\u00A9", L"(C)"); + sanitisedString = replaceAll(sanitisedString, L"\u00AE", L"(R)"); + sanitisedString = replaceAll(sanitisedString, L"\u2013", L"-"); + } + LPWSTR creditsString = new wchar_t[ 128 ]; - if(pDef->m_iStringID[1]!=NO_TRANSLATED_STRING) + if (pDef->m_iStringID[0]==NO_TRANSLATED_STRING) + { + ZeroMemory(creditsString, 128); + memcpy( creditsString, sanitisedString.c_str(), sizeof(WCHAR) * sanitisedString.length() ); + } + else if(pDef->m_iStringID[1]!=NO_TRANSLATED_STRING) { - swprintf( creditsString, 128, pDef->m_Text, app.GetString( pDef->m_iStringID[0] ), app.GetString( pDef->m_iStringID[1] ) ); + swprintf( creditsString, 128, sanitisedString.c_str(), app.GetString( pDef->m_iStringID[0] ), app.GetString( pDef->m_iStringID[1] ) ); } else { - swprintf( creditsString, 128, pDef->m_Text, app.GetString( pDef->m_iStringID[0] ) ); + swprintf( creditsString, 128, sanitisedString.c_str(), app.GetString( pDef->m_iStringID[0] ) ); } + setNextLabel(creditsString,pDef->m_eType); delete [] creditsString; } diff --git a/Minecraft.Client/Common/UI/UIScene_Credits.h b/Minecraft.Client/Common/UI/UIScene_Credits.h index 4116628d..ccb62831 100644 --- a/Minecraft.Client/Common/UI/UIScene_Credits.h +++ b/Minecraft.Client/Common/UI/UIScene_Credits.h @@ -2,10 +2,10 @@ #include "UIScene.h" -#define PS3_CREDITS_COUNT 75 -#define PSVITA_CREDITS_COUNT 77 -#define PS4_CREDITS_COUNT 75 -#define XBOXONE_CREDITS_COUNT (75+318) +#define PS3_CREDITS_COUNT 80 +#define PSVITA_CREDITS_COUNT 82 +#define PS4_CREDITS_COUNT 80 +#define XBOXONE_CREDITS_COUNT (80+318) #define MILES_AND_IGGY_CREDITS_COUNT 8 #define DYNAMODE_FONT_CREDITS_COUNT 2 #define PS3_DOLBY_CREDIT 4 @@ -15,7 +15,7 @@ #define MAX_CREDIT_STRINGS (PS3_CREDITS_COUNT + MILES_AND_IGGY_CREDITS_COUNT + DYNAMODE_FONT_CREDITS_COUNT + PS3_DOLBY_CREDIT) #elif defined(__ORBIS__) #define MAX_CREDIT_STRINGS (PS4_CREDITS_COUNT + MILES_AND_IGGY_CREDITS_COUNT + DYNAMODE_FONT_CREDITS_COUNT) -#elif defined(_DURANGO) || defined _WIN64 +#elif defined(_DURANGO) || defined _WINDOWS64 #define MAX_CREDIT_STRINGS (XBOXONE_CREDITS_COUNT + MILES_AND_IGGY_CREDITS_COUNT) #elif defined(__PSVITA__) #define MAX_CREDIT_STRINGS (PSVITA_CREDITS_COUNT + MILES_AND_IGGY_CREDITS_COUNT + DYNAMODE_FONT_CREDITS_COUNT) diff --git a/Minecraft.Client/Common/UI/UIScene_DLCMainMenu.cpp b/Minecraft.Client/Common/UI/UIScene_DLCMainMenu.cpp index 0d36dcdf..77ffdffd 100644 --- a/Minecraft.Client/Common/UI/UIScene_DLCMainMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_DLCMainMenu.cpp @@ -15,7 +15,7 @@ UIScene_DLCMainMenu::UIScene_DLCMainMenu(int iPad, void *initData, UILayer *pare // Alert the app the we want to be informed of ethernet connections app.SetLiveLinkRequired( true ); - m_labelOffers.init(app.GetString(IDS_DOWNLOADABLE_CONTENT_OFFERS)); + m_labelOffers.init(IDS_DOWNLOADABLE_CONTENT_OFFERS); m_buttonListOffers.init(eControl_OffersList); #if defined _XBOX_ONE || defined __ORBIS__ @@ -33,7 +33,7 @@ UIScene_DLCMainMenu::UIScene_DLCMainMenu(int iPad, void *initData, UILayer *pare if(m_loadedResolution == eSceneResolution_1080) { #ifdef _DURANGO - m_labelXboxStore.init( app.GetString(IDS_XBOX_STORE) ); + m_labelXboxStore.init(IDS_XBOX_STORE); #else m_labelXboxStore.init( L"" ); #endif @@ -42,9 +42,9 @@ UIScene_DLCMainMenu::UIScene_DLCMainMenu(int iPad, void *initData, UILayer *pare #if defined(_DURANGO) m_Timer.setVisible(false); - m_buttonListOffers.addItem(app.GetString(IDS_DLC_MENU_SKINPACKS),e_DLC_SkinPack); - m_buttonListOffers.addItem(app.GetString(IDS_DLC_MENU_TEXTUREPACKS),e_DLC_TexturePacks); - m_buttonListOffers.addItem(app.GetString(IDS_DLC_MENU_MASHUPPACKS),e_DLC_MashupPacks); + m_buttonListOffers.addItem(IDS_DLC_MENU_SKINPACKS,e_DLC_SkinPack); + m_buttonListOffers.addItem(IDS_DLC_MENU_TEXTUREPACKS,e_DLC_TexturePacks); + m_buttonListOffers.addItem(IDS_DLC_MENU_MASHUPPACKS,e_DLC_MashupPacks); app.AddDLCRequest(e_Marketplace_Content); // content is skin packs, texture packs and mash-up packs // we also need to mount the local DLC so we can tell what's been purchased @@ -53,10 +53,8 @@ UIScene_DLCMainMenu::UIScene_DLCMainMenu(int iPad, void *initData, UILayer *pare TelemetryManager->RecordMenuShown(iPad, eUIScene_DLCMainMenu, 0); -#ifdef __ORBIS__ - sceNpCommerceShowPsStoreIcon(SCE_NP_COMMERCE_PS_STORE_ICON_RIGHT); -#elif defined __PSVITA__ - sceNpCommerce2ShowPsStoreIcon(SCE_NP_COMMERCE2_ICON_DISP_RIGHT); +#if defined __ORBIS__ || defined __PSVITA__ + app.GetCommerce()->ShowPsStoreIcon(); #endif #if ( defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ ) @@ -71,6 +69,11 @@ UIScene_DLCMainMenu::~UIScene_DLCMainMenu() #if defined _XBOX_ONE || defined __ORBIS__ app.FreeLocalDLCImages(); #endif + +#ifdef _XBOX_ONE + // 4J-JEV: Have to switch back to user preferred languge now. + setLanguageOverride(true); +#endif } wstring UIScene_DLCMainMenu::getMoviePath() @@ -93,10 +96,8 @@ void UIScene_DLCMainMenu::handleInput(int iPad, int key, bool repeat, bool press case ACTION_MENU_CANCEL: if(pressed) { -#ifdef __ORBIS__ - sceNpCommerceHidePsStoreIcon(); -#elif defined __PSVITA__ - sceNpCommerce2HidePsStoreIcon(); +#if defined __ORBIS__ || defined __PSVITA__ + app.GetCommerce()->HidePsStoreIcon(); #endif navigateBack(); } @@ -155,7 +156,7 @@ void UIScene_DLCMainMenu::handleTimerComplete(int id) // If they have, bring up the PSN warning and exit from the leaderboards unsigned int uiIDA[1]; uiIDA[0]=IDS_OK; - C4JStorage::EMessageResult result = ui.RequestMessageBox( IDS_CONNECTION_LOST, g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_LIVE_NO_EXIT), uiIDA,1,ProfileManager.GetPrimaryPad(),UIScene_DLCMainMenu::ExitDLCMainMenu,this, app.GetStringTable()); + C4JStorage::EMessageResult result = ui.RequestErrorMessage( IDS_CONNECTION_LOST, g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_LIVE_NO_EXIT), uiIDA,1,ProfileManager.GetPrimaryPad(),UIScene_DLCMainMenu::ExitDLCMainMenu,this); } #endif break; @@ -167,10 +168,8 @@ int UIScene_DLCMainMenu::ExitDLCMainMenu(void *pParam,int iPad,C4JStorage::EMess { UIScene_DLCMainMenu* pClass = (UIScene_DLCMainMenu*)pParam; -#ifdef __ORBIS__ - sceNpCommerceHidePsStoreIcon(); -#elif defined __PSVITA__ - sceNpCommerce2HidePsStoreIcon(); +#if defined __ORBIS__ || defined __PSVITA__ + app.GetCommerce()->HidePsStoreIcon(); #endif pClass->navigateBack(); diff --git a/Minecraft.Client/Common/UI/UIScene_DLCMainMenu.h b/Minecraft.Client/Common/UI/UIScene_DLCMainMenu.h index 15272fe1..f23ee4b0 100644 --- a/Minecraft.Client/Common/UI/UIScene_DLCMainMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_DLCMainMenu.h @@ -10,7 +10,7 @@ private: eControl_OffersList, }; - UIControl_ButtonList m_buttonListOffers; + UIControl_DynamicButtonList m_buttonListOffers; UIControl_Label m_labelOffers, m_labelXboxStore; UIControl m_Timer; UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) diff --git a/Minecraft.Client/Common/UI/UIScene_DLCOffersMenu.cpp b/Minecraft.Client/Common/UI/UIScene_DLCOffersMenu.cpp index 9dbdc3d4..65c1b6fc 100644 --- a/Minecraft.Client/Common/UI/UIScene_DLCOffersMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_DLCOffersMenu.cpp @@ -34,8 +34,8 @@ UIScene_DLCOffersMenu::UIScene_DLCOffersMenu(int iPad, void *initData, UILayer * m_labelOffers.init(app.GetString(IDS_DOWNLOADABLE_CONTENT_OFFERS)); m_buttonListOffers.init(eControl_OffersList); - m_labelHTMLSellText.init(" "); - m_labelPriceTag.init(" "); + m_labelHTMLSellText.init(L" "); + m_labelPriceTag.init(L" "); TelemetryManager->RecordMenuShown(m_iPad, eUIScene_DLCOffersMenu, 0); m_bHasPurchased = false; @@ -93,7 +93,7 @@ void UIScene_DLCOffersMenu::handleTimerComplete(int id) // If they have, bring up the PSN warning and exit from the DLC menu unsigned int uiIDA[1]; uiIDA[0]=IDS_OK; - C4JStorage::EMessageResult result = ui.RequestMessageBox( IDS_CONNECTION_LOST, g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_LIVE_NO_EXIT), uiIDA,1,ProfileManager.GetPrimaryPad(),UIScene_DLCOffersMenu::ExitDLCOffersMenu,this, app.GetStringTable()); + C4JStorage::EMessageResult result = ui.RequestErrorMessage( IDS_CONNECTION_LOST, g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_LIVE_NO_EXIT), uiIDA,1,ProfileManager.GetPrimaryPad(),UIScene_DLCOffersMenu::ExitDLCOffersMenu,this); } #endif break; @@ -105,10 +105,8 @@ int UIScene_DLCOffersMenu::ExitDLCOffersMenu(void *pParam,int iPad,C4JStorage::E { UIScene_DLCOffersMenu* pClass = (UIScene_DLCOffersMenu*)pParam; -#ifdef __ORBIS__ - sceNpCommerceHidePsStoreIcon(); -#elif defined __PSVITA__ - sceNpCommerce2HidePsStoreIcon(); +#if defined __ORBIS__ || defined __PSVITA__ + app.GetCommerce()->HidePsStoreIcon(); #endif ui.NavigateToHomeMenu();//iPad,eUIScene_MainMenu); @@ -446,7 +444,7 @@ void UIScene_DLCOffersMenu::tick() SONYDLC *pSONYDLCInfo=app.GetSONYDLCInfoFromKeyname(info.productId); // does the DLC info have an image? - if(pSONYDLCInfo->dwImageBytes!=0) + if(pSONYDLCInfo && pSONYDLCInfo->dwImageBytes!=0) { pbImageData=pSONYDLCInfo->pbImageData; iImageDataBytes=pSONYDLCInfo->dwImageBytes; @@ -645,6 +643,16 @@ void UIScene_DLCOffersMenu::tick() int iIndex = getControlChildFocus(); MARKETPLACE_CONTENTOFFER_INFO xOffer = StorageManager.GetOffer(iIndex); + if (!ui.UsingBitmapFont()) // 4J-JEV: Replace characters we don't have. + { + for (int i=0; xOffer.wszCurrencyPrice[i]!=0; i++) + { + WCHAR *c = &xOffer.wszCurrencyPrice[i]; + if (*c == L'\u20A9') *c = L'\uFFE6'; // Korean Won. + else if (*c == L'\u00A5') *c = L'\uFFE5'; // Japanese Yen. + } + } + if(UpdateDisplay(xOffer)) { // image was available diff --git a/Minecraft.Client/Common/UI/UIScene_DeathMenu.cpp b/Minecraft.Client/Common/UI/UIScene_DeathMenu.cpp index 2026bfca..8f0f4c11 100644 --- a/Minecraft.Client/Common/UI/UIScene_DeathMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_DeathMenu.cpp @@ -117,13 +117,13 @@ void UIScene_DeathMenu::handlePress(F64 controlId, F64 childId) uiIDA[1]=IDS_EXIT_GAME_SAVE; uiIDA[2]=IDS_EXIT_GAME_NO_SAVE; - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 3, m_iPad,&IUIScene_PauseMenu::ExitGameSaveDialogReturned,this, app.GetStringTable(), 0, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 3, m_iPad,&IUIScene_PauseMenu::ExitGameSaveDialogReturned,(LPVOID)GetCallbackUniqueId()); } else { uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned,this, app.GetStringTable(), 0, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned,(LPVOID)GetCallbackUniqueId()); } #else @@ -131,7 +131,7 @@ void UIScene_DeathMenu::handlePress(F64 controlId, F64 childId) { uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_PROGRESS_LOST, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned,this, app.GetStringTable(), 0, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_PROGRESS_LOST, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned,(LPVOID)GetCallbackUniqueId()); } else { @@ -141,14 +141,14 @@ void UIScene_DeathMenu::handlePress(F64 controlId, F64 childId) uiIDA[1]=IDS_EXIT_GAME_SAVE; uiIDA[2]=IDS_EXIT_GAME_NO_SAVE; - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 3, m_iPad,&IUIScene_PauseMenu::ExitGameSaveDialogReturned,this, app.GetStringTable(), 0, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 3, m_iPad,&IUIScene_PauseMenu::ExitGameSaveDialogReturned,(LPVOID)GetCallbackUniqueId()); } else { uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned,this, app.GetStringTable(), 0, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned,(LPVOID)GetCallbackUniqueId()); } } #endif @@ -175,7 +175,7 @@ void UIScene_DeathMenu::handlePress(F64 controlId, F64 childId) UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_PROGRESS_LOST, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned,this, app.GetStringTable(), 0, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_PROGRESS_LOST, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned,(LPVOID)GetCallbackUniqueId()); } else { diff --git a/Minecraft.Client/Common/UI/UIScene_DebugOptions.cpp b/Minecraft.Client/Common/UI/UIScene_DebugOptions.cpp index 658a8517..c7db8db9 100644 --- a/Minecraft.Client/Common/UI/UIScene_DebugOptions.cpp +++ b/Minecraft.Client/Common/UI/UIScene_DebugOptions.cpp @@ -14,15 +14,15 @@ LPCWSTR UIScene_DebugOptionsMenu::m_DebugCheckboxTextA[eDebugSetting_Max+1]= L"Craft Anything", L"Use DPad for debug", L"Mobs don't tick", - L"Instant Mine", + L"Art tools", //L"Instant Mine", L"Show UI Console", L"Distributable Save", L"Debug Leaderboards", - L"Height-Water-Biome Maps", + L"Height-Water Maps", L"Superflat Nether", //L"Light/Dark background", L"More lightning when thundering", - L"Go To Nether", + L"Biome override", //L"Go To End", L"Go To Overworld", L"Unlock All DLC", //L"Toggle Font", diff --git a/Minecraft.Client/Common/UI/UIScene_DebugOverlay.cpp b/Minecraft.Client/Common/UI/UIScene_DebugOverlay.cpp index 44a7e6c5..8e45c324 100644 --- a/Minecraft.Client/Common/UI/UIScene_DebugOverlay.cpp +++ b/Minecraft.Client/Common/UI/UIScene_DebugOverlay.cpp @@ -26,7 +26,7 @@ UIScene_DebugOverlay::UIScene_DebugOverlay(int iPad, void *initData, UILayer *pa swprintf( (WCHAR *)TempString, 256, L"Set fov (%d)", (int)pMinecraft->gameRenderer->GetFovVal()); m_sliderFov.init(TempString,eControl_FOV,0,100,(int)pMinecraft->gameRenderer->GetFovVal()); - float currentTime = pMinecraft->level->getLevelData()->getTime() % 24000; + float currentTime = pMinecraft->level->getLevelData()->getGameTime() % 24000; swprintf( (WCHAR *)TempString, 256, L"Set time (unsafe) (%d)", (int)currentTime); m_sliderTime.init(TempString,eControl_Time,0,240,currentTime/100); @@ -242,7 +242,7 @@ void UIScene_DebugOverlay::handleSliderMove(F64 sliderId, F64 currentValue) // tries to predict the time // Only works if we are on the host machine, but shouldn't break if not MinecraftServer::SetTime(currentValue * 100); - pMinecraft->level->getLevelData()->setTime(currentValue * 100); + pMinecraft->level->getLevelData()->setGameTime(currentValue * 100); WCHAR TempString[256]; float currentTime = currentValue * 100; diff --git a/Minecraft.Client/Common/UI/UIScene_DispenserMenu.cpp b/Minecraft.Client/Common/UI/UIScene_DispenserMenu.cpp index 1eda1660..97cf842a 100644 --- a/Minecraft.Client/Common/UI/UIScene_DispenserMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_DispenserMenu.cpp @@ -10,10 +10,10 @@ UIScene_DispenserMenu::UIScene_DispenserMenu(int iPad, void *_initData, UILayer // Setup all the Iggy references we need for this scene initialiseMovie(); - m_labelDispenser.init(app.GetString(IDS_DISPENSER)); - TrapScreenInput *initData = (TrapScreenInput *)_initData; + m_labelDispenser.init(initData->trap->getName()); + Minecraft *pMinecraft = Minecraft::GetInstance(); if( pMinecraft->localgameModes[initData->iPad] != NULL ) { diff --git a/Minecraft.Client/Common/UI/UIScene_EnchantingMenu.cpp b/Minecraft.Client/Common/UI/UIScene_EnchantingMenu.cpp index 8a4f1c6d..27459ccc 100644 --- a/Minecraft.Client/Common/UI/UIScene_EnchantingMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_EnchantingMenu.cpp @@ -10,13 +10,13 @@ UIScene_EnchantingMenu::UIScene_EnchantingMenu(int iPad, void *_initData, UILaye // Setup all the Iggy references we need for this scene initialiseMovie(); - m_labelEnchant.init(app.GetString(IDS_ENCHANT)); - m_enchantButton[0].init(0); m_enchantButton[1].init(1); m_enchantButton[2].init(2); EnchantingScreenInput *initData = (EnchantingScreenInput *)_initData; + + m_labelEnchant.init( initData->name.empty() ? app.GetString(IDS_ENCHANT) : initData->name ); Minecraft *pMinecraft = Minecraft::GetInstance(); if( pMinecraft->localgameModes[initData->iPad] != NULL ) diff --git a/Minecraft.Client/Common/UI/UIScene_EndPoem.cpp b/Minecraft.Client/Common/UI/UIScene_EndPoem.cpp index f825efd0..c5a8e61a 100644 --- a/Minecraft.Client/Common/UI/UIScene_EndPoem.cpp +++ b/Minecraft.Client/Common/UI/UIScene_EndPoem.cpp @@ -219,7 +219,16 @@ void UIScene_EndPoem::updateNoise() replaceString = L""; for(int i = 0; i < length; ++i) { - randomChar = SharedConstants::acceptableLetters[random->nextInt((int)SharedConstants::acceptableLetters.length())]; + if (ui.UsingBitmapFont()) + { + randomChar = SharedConstants::acceptableLetters[random->nextInt((int)SharedConstants::acceptableLetters.length())]; + } + else + { + // 4J-JEV: It'd be nice to avoid null characters when using asian languages. + static wstring acceptableLetters = L"!\"#$%&'()*+,-./0123456789:;<=>?@[\\]^_'|}~"; + randomChar = acceptableLetters[ random->nextInt((int)acceptableLetters.length()) ]; + } wstring randomCharStr = L""; randomCharStr.push_back(randomChar); diff --git a/Minecraft.Client/Common/UI/UIScene_FireworksMenu.cpp b/Minecraft.Client/Common/UI/UIScene_FireworksMenu.cpp new file mode 100644 index 00000000..1d24f989 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_FireworksMenu.cpp @@ -0,0 +1,233 @@ +#include "stdafx.h" +#include "UI.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.level.tile.entity.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h" +#include "..\..\Minecraft.h" +#include "..\..\LocalPlayer.h" +#include "UIScene_FireworksMenu.h" + +UIScene_FireworksMenu::UIScene_FireworksMenu(int iPad, void *_initData, UILayer *parentLayer) : UIScene_AbstractContainerMenu(iPad, parentLayer) +{ + // Setup all the Iggy references we need for this scene + initialiseMovie(); + + FireworksScreenInput *initData = (FireworksScreenInput *)_initData; + + m_labelFireworks.init(app.GetString(IDS_HOW_TO_PLAY_MENU_FIREWORKS)); + + Minecraft *pMinecraft = Minecraft::GetInstance(); + if( pMinecraft->localgameModes[initData->iPad] != NULL ) + { + TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[initData->iPad]; + m_previousTutorialState = gameMode->getTutorial()->getCurrentState(); + gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_Fireworks_Menu, this); + } + + FireworksMenu* menu = new FireworksMenu( initData->player->inventory, initData->player->level, initData->x, initData->y, initData->z ); + + Initialize( initData->iPad, menu, true, FireworksMenu::INV_SLOT_START, eSectionFireworksUsing, eSectionFireworksMax ); + + m_slotListResult.addSlots(FireworksMenu::RESULT_SLOT,1); + m_slotList3x3.addSlots(FireworksMenu::CRAFT_SLOT_START, 9); + ShowLargeCraftingGrid(true); + + delete initData; +} + +wstring UIScene_FireworksMenu::getMoviePath() +{ + if(app.GetLocalPlayerCount() > 1) + { + return L"FireworksMenuSplit"; + } + else + { + return L"FireworksMenu"; + } +} + +void UIScene_FireworksMenu::handleReload() +{ + Initialize( m_iPad, m_menu, true, FireworksMenu::INV_SLOT_START, eSectionFireworksUsing, eSectionFireworksMax ); + + m_slotListResult.addSlots(FireworksMenu::RESULT_SLOT,1); + m_slotList3x3.addSlots(FireworksMenu::CRAFT_SLOT_START, 9); + ShowLargeCraftingGrid(true); +} + +int UIScene_FireworksMenu::getSectionColumns(ESceneSection eSection) +{ + int cols = 0; + switch( eSection ) + { + case eSectionFireworksIngredients: + cols = 3; + break; + case eSectionFireworksResult: + cols = 1; + break; + case eSectionFireworksInventory: + cols = 9; + break; + case eSectionFireworksUsing: + cols = 9; + break; + default: + assert( false ); + break; + } + return cols; +} + +int UIScene_FireworksMenu::getSectionRows(ESceneSection eSection) +{ + int rows = 0; + switch( eSection ) + { + case eSectionFireworksIngredients: + rows = 3; + break; + case eSectionFireworksResult: + rows = 1; + break; + case eSectionFireworksInventory: + rows = 3; + break; + case eSectionFireworksUsing: + rows = 1; + break; + default: + assert( false ); + break; + } + return rows; +} + +void UIScene_FireworksMenu::GetPositionOfSection( ESceneSection eSection, UIVec2D* pPosition ) +{ + switch( eSection ) + { + case eSectionFireworksIngredients: + pPosition->x = m_slotList3x3.getXPos(); + pPosition->y = m_slotList3x3.getYPos(); + break; + case eSectionFireworksResult: + pPosition->x = m_slotListResult.getXPos(); + pPosition->y = m_slotListResult.getYPos(); + break; + case eSectionFireworksInventory: + pPosition->x = m_slotListInventory.getXPos(); + pPosition->y = m_slotListInventory.getYPos(); + break; + case eSectionFireworksUsing: + pPosition->x = m_slotListHotbar.getXPos(); + pPosition->y = m_slotListHotbar.getYPos(); + break; + default: + assert( false ); + break; + } +} + +void UIScene_FireworksMenu::GetItemScreenData( ESceneSection eSection, int iItemIndex, UIVec2D* pPosition, UIVec2D* pSize ) +{ + UIVec2D sectionSize; + switch( eSection ) + { + case eSectionFireworksIngredients: + sectionSize.x = m_slotList3x3.getWidth(); + sectionSize.y = m_slotList3x3.getHeight(); + break; + case eSectionFireworksResult: + sectionSize.x = m_slotListResult.getWidth(); + sectionSize.y = m_slotListResult.getHeight(); + break; + case eSectionFireworksInventory: + sectionSize.x = m_slotListInventory.getWidth(); + sectionSize.y = m_slotListInventory.getHeight(); + break; + case eSectionFireworksUsing: + sectionSize.x = m_slotListHotbar.getWidth(); + sectionSize.y = m_slotListHotbar.getHeight(); + break; + default: + assert( false ); + break; + } + + int rows = getSectionRows(eSection); + int cols = getSectionColumns(eSection); + + pSize->x = sectionSize.x/cols; + pSize->y = sectionSize.y/rows; + + int itemCol = iItemIndex % cols; + int itemRow = iItemIndex/cols; + + pPosition->x = itemCol * pSize->x; + pPosition->y = itemRow * pSize->y; +} + +void UIScene_FireworksMenu::setSectionSelectedSlot(ESceneSection eSection, int x, int y) +{ + int cols = getSectionColumns(eSection); + + int index = (y * cols) + x; + + UIControl_SlotList *slotList = NULL; + switch( eSection ) + { + case eSectionFireworksIngredients: + slotList = &m_slotList3x3; + break; + case eSectionFireworksResult: + slotList = &m_slotListResult; + break; + case eSectionFireworksInventory: + slotList = &m_slotListInventory; + break; + case eSectionFireworksUsing: + slotList = &m_slotListHotbar; + break; + default: + assert( false ); + break; + } + slotList->setHighlightSlot(index); +} + +UIControl *UIScene_FireworksMenu::getSection(ESceneSection eSection) +{ + UIControl *control = NULL; + switch( eSection ) + { + case eSectionFireworksIngredients: + control = &m_slotList3x3; + break; + case eSectionFireworksResult: + control = &m_slotListResult; + break; + case eSectionFireworksInventory: + control = &m_slotListInventory; + break; + case eSectionFireworksUsing: + control = &m_slotListHotbar; + break; + default: + assert( false ); + break; + } + return control; +} + +// bShow == true removes the 2x2 crafting grid and bShow == false removes the 3x3 crafting grid +void UIScene_FireworksMenu::ShowLargeCraftingGrid(boolean bShow) +{ + app.DebugPrintf("ShowLargeCraftingGrid to %d\n", bShow); + + IggyDataValue result; + IggyDataValue value[1]; + value[0].type = IGGY_DATATYPE_boolean; + value[0].boolval = bShow; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcShowLargeCraftingGrid , 1 , value ); +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_FireworksMenu.h b/Minecraft.Client/Common/UI/UIScene_FireworksMenu.h new file mode 100644 index 00000000..b56443b9 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_FireworksMenu.h @@ -0,0 +1,44 @@ +#pragma once + +#include "UIScene_AbstractContainerMenu.h" +#include "IUIScene_FireworksMenu.h" + +class InventoryMenu; + +class UIScene_FireworksMenu : public UIScene_AbstractContainerMenu, public IUIScene_FireworksMenu +{ +public: + UIScene_FireworksMenu(int iPad, void *initData, UILayer *parentLayer); + + virtual EUIScene getSceneType() { return eUIScene_FireworksMenu;} + +protected: + UIControl_SlotList m_slotListResult, m_slotList3x3, m_slotList2x2; + UIControl_Label m_labelFireworks; + IggyName m_funcShowLargeCraftingGrid; + + UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene_AbstractContainerMenu) + UI_BEGIN_MAP_CHILD_ELEMENTS( m_controlMainPanel ) + UI_MAP_ELEMENT( m_slotListResult, "Result") + UI_MAP_ELEMENT( m_slotList3x3, "Fireworks3x3") + UI_MAP_ELEMENT( m_slotList2x2, "Fireworks2x2") + UI_MAP_ELEMENT( m_labelFireworks, "FireworksLabel") + + UI_MAP_NAME( m_funcShowLargeCraftingGrid, L"ShowLargeCraftingGrid") + UI_END_MAP_CHILD_ELEMENTS() + UI_END_MAP_ELEMENTS_AND_NAMES() + + virtual wstring getMoviePath(); + virtual void handleReload(); + + virtual int getSectionColumns(ESceneSection eSection); + virtual int getSectionRows(ESceneSection eSection); + virtual void GetPositionOfSection( ESceneSection eSection, UIVec2D* pPosition ); + virtual void GetItemScreenData( ESceneSection eSection, int iItemIndex, UIVec2D* pPosition, UIVec2D* pSize ); + virtual void handleSectionClick(ESceneSection eSection) {} + virtual void setSectionSelectedSlot(ESceneSection eSection, int x, int y); + + virtual UIControl *getSection(ESceneSection eSection); + + void ShowLargeCraftingGrid(boolean bShow); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_FullscreenProgress.cpp b/Minecraft.Client/Common/UI/UIScene_FullscreenProgress.cpp index ed31cfaf..fb17bda4 100644 --- a/Minecraft.Client/Common/UI/UIScene_FullscreenProgress.cpp +++ b/Minecraft.Client/Common/UI/UIScene_FullscreenProgress.cpp @@ -187,7 +187,7 @@ void UIScene_FullscreenProgress::tick() UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_FAILED), g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_SERVER), uiIDA,1, XUSER_INDEX_ANY,NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage( g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_FAILED), g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_SERVER), uiIDA,1, XUSER_INDEX_ANY); ui.NavigateToHomeMenu(); ui.UpdatePlayerBasePositions(); @@ -199,6 +199,10 @@ void UIScene_FullscreenProgress::tick() { m_threadCompleted = true; m_buttonConfirm.setVisible( true ); + // 4J-TomK - rebuild touch after confirm button made visible again +#ifdef __PSVITA__ + ui.TouchBoxRebuild(this); +#endif updateTooltips(); } else diff --git a/Minecraft.Client/Common/UI/UIScene_FurnaceMenu.cpp b/Minecraft.Client/Common/UI/UIScene_FurnaceMenu.cpp index 1ba4053d..392221a6 100644 --- a/Minecraft.Client/Common/UI/UIScene_FurnaceMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_FurnaceMenu.cpp @@ -10,16 +10,16 @@ UIScene_FurnaceMenu::UIScene_FurnaceMenu(int iPad, void *_initData, UILayer *par // Setup all the Iggy references we need for this scene initialiseMovie(); - m_labelFurnace.init(app.GetString(IDS_FURNACE)); + FurnaceScreenInput *initData = (FurnaceScreenInput *)_initData; + m_furnace = initData->furnace; + + m_labelFurnace.init(m_furnace->getName()); m_labelIngredient.init(app.GetString(IDS_INGREDIENT)); m_labelFuel.init(app.GetString(IDS_FUEL)); m_progressFurnaceFire.init(L"",0,0,12,0); m_progressFurnaceArrow.init(L"",0,0,24,0); - FurnaceScreenInput *initData = (FurnaceScreenInput *)_initData; - m_furnace = initData->furnace; - Minecraft *pMinecraft = Minecraft::GetInstance(); if( pMinecraft->localgameModes[initData->iPad] != NULL ) { diff --git a/Minecraft.Client/Common/UI/UIScene_HUD.cpp b/Minecraft.Client/Common/UI/UIScene_HUD.cpp index 27eeb76b..c3d52cf9 100644 --- a/Minecraft.Client/Common/UI/UIScene_HUD.cpp +++ b/Minecraft.Client/Common/UI/UIScene_HUD.cpp @@ -1,13 +1,12 @@ #include "stdafx.h" #include "UI.h" #include "UIScene_HUD.h" +#include "BossMobGuiInfo.h" #include "..\..\Minecraft.h" #include "..\..\MultiplayerLocalPlayer.h" #include "..\..\..\Minecraft.World\net.minecraft.world.entity.boss.enderdragon.h" #include "..\..\EnderDragonRenderer.h" #include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h" -#include "..\..\..\Minecraft.World\net.minecraft.world.item.h" -#include "..\..\..\Minecraft.World\net.minecraft.world.effect.h" #include "..\..\..\Minecraft.World\StringHelpers.h" UIScene_HUD::UIScene_HUD(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) @@ -17,32 +16,6 @@ UIScene_HUD::UIScene_HUD(int iPad, void *initData, UILayer *parentLayer) : UISce // Setup all the Iggy references we need for this scene initialiseMovie(); - m_lastActiveSlot = 0; - m_lastScale = 1; - m_bToolTipsVisible = true; - m_lastExpProgress = 0.0f; - m_lastExpLevel = 0; - m_lastMaxHealth = 20; - m_lastHealthBlink = false; - m_lastHealthPoison = false; - m_lastMaxFood = 20; - m_lastFoodPoison = false; - m_lastAir = 10; - m_lastArmour = 0; - m_showHealth = true; - m_showFood = true; - m_showAir = true; - m_showArmour = true; - m_showExpBar = true; - m_lastRegenEffect = false; - m_lastSaturation = 0; - m_lastDragonHealth = 0.0f; - m_showDragonHealth = false; - m_ticksWithNoBoss = 0; - m_uiSelectedItemOpacityCountDown = 0; - m_displayName = L""; - m_lastShowDisplayName = true; - SetDragonLabel( app.GetString( IDS_BOSS_ENDERDRAGON_HEALTH ) ); SetSelectedLabel(L""); @@ -146,33 +119,35 @@ void UIScene_HUD::tick() return; } - if(pMinecraft->localplayers[m_iPad]->dimension == 1) + // Is boss present? + bool noBoss = BossMobGuiInfo::name.empty() || BossMobGuiInfo::displayTicks <= 0; + if (noBoss) { - if (EnderDragonRenderer::bossInstance == NULL) + if (m_showDragonHealth) { - if(m_ticksWithNoBoss<=20) + // No boss and health is visible + if(m_ticksWithNoBoss <= 20) { ++m_ticksWithNoBoss; } - if( m_ticksWithNoBoss > 20 ) + else { ShowDragonHealth(false); } } - else - { - shared_ptr boss = EnderDragonRenderer::bossInstance; - // 4J Stu - Don't clear this here as it's wiped for other players - //EnderDragonRenderer::bossInstance = nullptr; - m_ticksWithNoBoss = 0; - - ShowDragonHealth(true); - SetDragonHealth( (float)boss->getSynchedHealth()/boss->getMaxHealth()); - } } else { - ShowDragonHealth(false); + BossMobGuiInfo::displayTicks--; + + m_ticksWithNoBoss = 0; + SetDragonHealth(BossMobGuiInfo::healthProgress); + + if (!m_showDragonHealth) + { + SetDragonLabel(BossMobGuiInfo::name); + ShowDragonHealth(true); + } } } } @@ -229,34 +204,46 @@ void UIScene_HUD::customDraw(IggyCustomDrawCallbackRegion *region) void UIScene_HUD::handleReload() { - m_lastActiveSlot = 0; - m_lastScale = 1; + m_lastActiveSlot = -1; + m_iGuiScale = -1; m_bToolTipsVisible = true; m_lastExpProgress = 0.0f; m_lastExpLevel = 0; + m_iCurrentHealth = 0; m_lastMaxHealth = 20; m_lastHealthBlink = false; m_lastHealthPoison = false; - m_lastMaxFood = 20; + m_iCurrentFood = -1; m_lastFoodPoison = false; m_lastAir = 10; + m_currentExtraAir = 0; m_lastArmour = 0; m_showHealth = true; + m_showHorseHealth = true; m_showFood = true; - m_showAir = true; + m_showAir = false; // get's initialised invisible anyways, by setting it to false we ensure it will remain visible when switching in and out of split screen! m_showArmour = true; m_showExpBar = true; - m_lastRegenEffect = false; - m_lastSaturation = 0; + m_bRegenEffectEnabled = false; + m_iFoodSaturation = 0; m_lastDragonHealth = 0.0f; m_showDragonHealth = false; m_ticksWithNoBoss = 0; m_uiSelectedItemOpacityCountDown = 0; m_displayName = L""; + m_lastShowDisplayName = true; + m_bRidingHorse = true; + m_horseHealth = 1; + m_lastHealthWither = true; + m_iCurrentHealthAbsorb = -1; + m_horseJumpProgress = 1.0f; + m_iHeartOffsetIndex = -1; + m_bHealthAbsorbActive = false; + m_iHorseMaxHealth = -1; m_labelDisplayName.setVisible(m_lastShowDisplayName); - SetDragonLabel( app.GetString( IDS_BOSS_ENDERDRAGON_HEALTH ) ); + SetDragonLabel(BossMobGuiInfo::name); SetSelectedLabel(L""); for(unsigned int i = 0; i < CHAT_LINES_COUNT; ++i) @@ -284,11 +271,26 @@ void UIScene_HUD::handleReload() SetTooltipsEnabled(((ui.GetMenuDisplayed(ProfileManager.GetPrimaryPad())) || (app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_Tooltips) != 0))); } +int UIScene_HUD::getPad() +{ + return m_iPad; +} + +void UIScene_HUD::SetOpacity(float opacity) +{ + setOpacity(opacity); +} + +void UIScene_HUD::SetVisible(bool visible) +{ + setVisible(visible); +} + void UIScene_HUD::SetHudSize(int scale) { - if(scale != m_lastScale) + if(scale != m_iGuiScale) { - m_lastScale = scale; + m_iGuiScale = scale; IggyDataValue result; IggyDataValue value[1]; @@ -298,7 +300,7 @@ void UIScene_HUD::SetHudSize(int scale) } } -void UIScene_HUD::SetExpBarProgress(float progress) +void UIScene_HUD::SetExpBarProgress(float progress, int xpNeededForNextLevel) { if(progress != m_lastExpProgress) { @@ -340,24 +342,27 @@ void UIScene_HUD::SetActiveSlot(int slot) } } -void UIScene_HUD::SetHealth(int iHealth, int iLastHealth, bool bBlink, bool bPoison) +void UIScene_HUD::SetHealth(int iHealth, int iLastHealth, bool bBlink, bool bPoison, bool bWither) { int maxHealth = max(iHealth, iLastHealth); - if(maxHealth != m_lastMaxHealth || bBlink != m_lastHealthBlink || bPoison != m_lastHealthPoison) + if(maxHealth != m_lastMaxHealth || bBlink != m_lastHealthBlink || bPoison != m_lastHealthPoison || bWither != m_lastHealthWither) { m_lastMaxHealth = maxHealth; m_lastHealthBlink = bBlink; m_lastHealthPoison = bPoison; + m_lastHealthWither = bWither; IggyDataValue result; - IggyDataValue value[3]; + IggyDataValue value[4]; value[0].type = IGGY_DATATYPE_number; value[0].number = maxHealth; value[1].type = IGGY_DATATYPE_boolean; value[1].boolval = bBlink; value[2].type = IGGY_DATATYPE_boolean; value[2].boolval = bPoison; - IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetHealth , 3 , value ); + value[3].type = IGGY_DATATYPE_boolean; + value[3].boolval = bWither; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetHealth , 4 , value ); } } @@ -365,9 +370,9 @@ void UIScene_HUD::SetFood(int iFood, int iLastFood, bool bPoison) { // Ignore iLastFood as food doesn't flash int maxFood = iFood; //, iLastFood); - if(maxFood != m_lastMaxFood || bPoison != m_lastFoodPoison) + if(maxFood != m_iCurrentFood || bPoison != m_lastFoodPoison) { - m_lastMaxFood = maxFood; + m_iCurrentFood = maxFood; m_lastFoodPoison = bPoison; IggyDataValue result; @@ -380,7 +385,7 @@ void UIScene_HUD::SetFood(int iFood, int iLastFood, bool bPoison) } } -void UIScene_HUD::SetAir(int iAir) +void UIScene_HUD::SetAir(int iAir, int extra) { if(iAir != m_lastAir) { @@ -425,6 +430,21 @@ void UIScene_HUD::ShowHealth(bool show) } } +void UIScene_HUD::ShowHorseHealth(bool show) +{ + if(show != m_showHorseHealth) + { + app.DebugPrintf("ShowHorseHealth to %s\n", show?"TRUE":"FALSE"); + m_showHorseHealth = show; + + IggyDataValue result; + IggyDataValue value[1]; + value[0].type = IGGY_DATATYPE_boolean; + value[0].boolval = show; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcShowHorseHealth , 1 , value ); + } +} + void UIScene_HUD::ShowFood(bool show) { if(show != m_showFood) @@ -487,10 +507,10 @@ void UIScene_HUD::ShowExpBar(bool show) void UIScene_HUD::SetRegenerationEffect(bool bEnabled) { - if(bEnabled != m_lastRegenEffect) + if(bEnabled != m_bRegenEffectEnabled) { app.DebugPrintf("SetRegenerationEffect to %s\n", bEnabled?"TRUE":"FALSE"); - m_lastRegenEffect = bEnabled; + m_bRegenEffectEnabled = bEnabled; IggyDataValue result; IggyDataValue value[1]; @@ -502,10 +522,10 @@ void UIScene_HUD::SetRegenerationEffect(bool bEnabled) void UIScene_HUD::SetFoodSaturationLevel(int iSaturation) { - if(iSaturation != m_lastSaturation) + if(iSaturation != m_iFoodSaturation) { app.DebugPrintf("Set saturation to %d\n", iSaturation); - m_lastSaturation = iSaturation; + m_iFoodSaturation = iSaturation; IggyDataValue result; IggyDataValue value[1]; @@ -578,6 +598,77 @@ void UIScene_HUD::HideSelectedLabel() IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcHideSelectedLabel , 0 , NULL ); } + +void UIScene_HUD::SetRidingHorse(bool ridingHorse, bool bIsJumpable, int maxHorseHealth) +{ + if(m_bRidingHorse != ridingHorse || maxHorseHealth != m_iHorseMaxHealth) + { + app.DebugPrintf("SetRidingHorse to %s\n", ridingHorse?"TRUE":"FALSE"); + m_bRidingHorse = ridingHorse; + m_bIsJumpable = bIsJumpable; + m_iHorseMaxHealth = maxHorseHealth; + + IggyDataValue result; + IggyDataValue value[3]; + value[0].type = IGGY_DATATYPE_boolean; + value[0].boolval = ridingHorse; + value[1].type = IGGY_DATATYPE_boolean; + value[1].boolval = bIsJumpable; + value[2].type = IGGY_DATATYPE_number; + value[2].number = maxHorseHealth; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetRidingHorse , 3 , value ); + } +} + +void UIScene_HUD::SetHorseHealth(int health, bool blink /*= false*/) +{ + if(m_bRidingHorse && m_horseHealth != health) + { + app.DebugPrintf("SetHorseHealth to %d\n", health); + m_horseHealth = health; + + IggyDataValue result; + IggyDataValue value[2]; + value[0].type = IGGY_DATATYPE_number; + value[0].number = health; + value[1].type = IGGY_DATATYPE_boolean; + value[1].boolval = blink; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetHorseHealth , 2 , value ); + } +} + +void UIScene_HUD::SetHorseJumpBarProgress(float progress) +{ + if(m_bRidingHorse && m_horseJumpProgress != progress) + { + app.DebugPrintf("SetHorseJumpBarProgress to %f\n", progress); + m_horseJumpProgress = progress; + + IggyDataValue result; + IggyDataValue value[1]; + value[0].type = IGGY_DATATYPE_number; + value[0].number = progress; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetHorseJumpBarProgress , 1 , value ); + } +} + +void UIScene_HUD::SetHealthAbsorb(int healthAbsorb) +{ + if(m_iCurrentHealthAbsorb != healthAbsorb) + { + app.DebugPrintf("SetHealthAbsorb to %d\n", healthAbsorb); + m_iCurrentHealthAbsorb = healthAbsorb; + + IggyDataValue result; + IggyDataValue value[2]; + value[0].type = IGGY_DATATYPE_boolean; + value[0].boolval = healthAbsorb > 0; + value[1].type = IGGY_DATATYPE_number; + value[1].number = healthAbsorb; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetHealthAbsorb , 2 , value ); + } +} + void UIScene_HUD::render(S32 width, S32 height, C4JRender::eViewportType viewport) { if(m_bSplitscreen) @@ -775,223 +866,6 @@ void UIScene_HUD::handleGameTick() } m_parentLayer->showComponent(m_iPad, eUIScene_HUD,true); - int iGuiScale; - - if(pMinecraft->localplayers[m_iPad]->m_iScreenSection == C4JRender::VIEWPORT_TYPE_FULLSCREEN) - { - iGuiScale=app.GetGameSettings(m_iPad,eGameSetting_UISize); - } - else - { - iGuiScale=app.GetGameSettings(m_iPad,eGameSetting_UISizeSplitscreen); - } - SetHudSize(iGuiScale); - - SetDisplayName(ProfileManager.GetDisplayName(m_iPad)); - - SetTooltipsEnabled(((ui.GetMenuDisplayed(ProfileManager.GetPrimaryPad())) || (app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_Tooltips) != 0))); - -#if TO_BE_IMPLEMENTED - // Move the whole hud group if we are not in fullscreen - if(pMinecraft->localplayers[m_iPad]->m_iScreenSection != C4JRender::VIEWPORT_TYPE_FULLSCREEN) - { - int iTooltipsYOffset = 0; - // if tooltips are off, set the y offset to zero - if(app.GetGameSettings(m_iPad,eGameSetting_Tooltips)==0) - { - switch(iGuiScale) - { - case 0: - iTooltipsYOffset=28;//screenHeight/10; - break; - case 2: - iTooltipsYOffset=28;//screenHeight/10; - break; - case 1: - default: - iTooltipsYOffset=28;//screenHeight/10; - break; - } - } - - float fHeight, fWidth; - GetBounds(&fWidth, &fHeight); - - int iSafezoneYHalf = 0; - switch(pMinecraft->localplayers[m_iPad]->m_iScreenSection) - { - case C4JRender::VIEWPORT_TYPE_SPLIT_TOP: - break; - case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM: - iSafezoneYHalf = -fHeight/10;// 5% (need to treat the whole screen is 2x this screen) - break; - case C4JRender::VIEWPORT_TYPE_SPLIT_LEFT: - iSafezoneYHalf = (fHeight/2)-(fHeight/10);// 5% (need to treat the whole screen is 2x this screen) - break; - case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT: - iSafezoneYHalf = (fHeight/2)-(fHeight/10);// 5% (need to treat the whole screen is 2x this screen) - break; - case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_LEFT: - break; - case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT: - break; - case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT: - iSafezoneYHalf = -fHeight/10; // 5% (the whole screen is 2x this screen) - break; - case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT: - iSafezoneYHalf = -fHeight/10; // 5% (the whole screen is 2x this screen) - break; - }; - - D3DXVECTOR3 pos; - m_hudGroup.GetPosition(&pos); - pos.y = iTooltipsYOffset + iSafezoneYHalf; - m_hudGroup.SetPosition(&pos); - } -#endif - SetActiveSlot(pMinecraft->localplayers[m_iPad]->inventory->selected); - - // Update xp progress - if (pMinecraft->localgameModes[m_iPad]->canHurtPlayer()) - { - ShowExpBar(true); - int xpNeededForNextLevel = pMinecraft->localplayers[m_iPad]->getXpNeededForNextLevel(); - int progress = (int)(pMinecraft->localplayers[m_iPad]->experienceProgress *xpNeededForNextLevel); - SetExpBarProgress((float)progress/xpNeededForNextLevel); - } - else - { - ShowExpBar(false); - } - - // Update xp level - if (pMinecraft->localgameModes[m_iPad]->hasExperience() && pMinecraft->localplayers[m_iPad]->experienceLevel > 0) - { - SetExpLevel(pMinecraft->localplayers[m_iPad]->experienceLevel); - } - else - { - SetExpLevel(0); - } - - if (pMinecraft->localgameModes[m_iPad]->canHurtPlayer()) - { - ShowHealth(true); - ShowFood(true); - - SetRegenerationEffect(pMinecraft->localplayers[m_iPad]->hasEffect(MobEffect::regeneration)); - - // Update health - bool blink = pMinecraft->localplayers[m_iPad]->invulnerableTime / 3 % 2 == 1; - if (pMinecraft->localplayers[m_iPad]->invulnerableTime < 10) blink = false; - int iHealth = pMinecraft->localplayers[m_iPad]->getHealth(); - int iLastHealth = pMinecraft->localplayers[m_iPad]->lastHealth; - bool bHasPoison = pMinecraft->localplayers[m_iPad]->hasEffect(MobEffect::poison); - SetHealth(iHealth, iLastHealth, blink, bHasPoison); - - // Update food - //bool foodBlink = false; - FoodData *foodData = pMinecraft->localplayers[m_iPad]->getFoodData(); - int food = foodData->getFoodLevel(); - int oldFood = foodData->getLastFoodLevel(); - bool hasHungerEffect = pMinecraft->localplayers[m_iPad]->hasEffect(MobEffect::hunger); - int saturationLevel = pMinecraft->localplayers[m_iPad]->getFoodData()->getSaturationLevel(); - SetFood(food, oldFood, hasHungerEffect); - SetFoodSaturationLevel(saturationLevel); - - // Update armour - int armor = pMinecraft->localplayers[m_iPad]->getArmorValue(); - if(armor > 0) - { - ShowArmour(true); - SetArmour(armor); - } - else - { - ShowArmour(false); - } - - // Update air - if (pMinecraft->localplayers[m_iPad]->isUnderLiquid(Material::water)) - { - ShowAir(true); - int count = (int) ceil((pMinecraft->localplayers[m_iPad]->getAirSupply() - 2) * 10.0f / Player::TOTAL_AIR_SUPPLY); - SetAir(count); - } - else - { - ShowAir(false); - } - } - else - { - ShowHealth(false); - ShowFood(false); - ShowAir(false); - ShowArmour(false); - } - - if(m_uiSelectedItemOpacityCountDown>0) - { - --m_uiSelectedItemOpacityCountDown; - - // 4J Stu - Timing here is kept the same as on Xbox360, even though we do it differently now and do the fade out in Flash rather than directly setting opacity - if(m_uiSelectedItemOpacityCountDown < (SharedConstants::TICKS_PER_SECOND * 1) ) - { - HideSelectedLabel(); - m_uiSelectedItemOpacityCountDown = 0; - } - } - - unsigned char ucAlpha=app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_InterfaceOpacity); - float fVal; - - if(ucAlpha<80) - { - // if we are in a menu, set the minimum opacity for tooltips to 15% - if(ui.GetMenuDisplayed(m_iPad) && (ucAlpha<15)) - { - ucAlpha=15; - } - - // check if we have the timer running for the opacity - unsigned int uiOpacityTimer=app.GetOpacityTimer(m_iPad); - if(uiOpacityTimer!=0) - { - if(uiOpacityTimer<10) - { - float fStep=(80.0f-(float)ucAlpha)/10.0f; - fVal=0.01f*(80.0f-((10.0f-(float)uiOpacityTimer)*fStep)); - } - else - { - fVal=0.01f*80.0f; - } - } - else - { - fVal=0.01f*(float)ucAlpha; - } - } - else - { - // if we are in a menu, set the minimum opacity for tooltips to 15% - if(ui.GetMenuDisplayed(m_iPad) && (ucAlpha<15)) - { - ucAlpha=15; - } - fVal=0.01f*(float)ucAlpha; - } - setOpacity(fVal); - - bool bDisplayGui=app.GetGameStarted() && !ui.GetMenuDisplayed(m_iPad) && !(app.GetXuiAction(m_iPad)==eAppAction_AutosaveSaveGameCapturedThumbnail) && app.GetGameSettings(m_iPad,eGameSetting_DisplayHUD)!=0; - if(bDisplayGui && pMinecraft->localplayers[m_iPad] != NULL) - { - setVisible(true); - } - else - { - setVisible(false); - } + updateFrameTick(); } -} +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_HUD.h b/Minecraft.Client/Common/UI/UIScene_HUD.h index cd0d8806..9d58ba4b 100644 --- a/Minecraft.Client/Common/UI/UIScene_HUD.h +++ b/Minecraft.Client/Common/UI/UIScene_HUD.h @@ -1,38 +1,15 @@ #pragma once #include "UIScene.h" +#include "IUIScene_HUD.h" #define CHAT_LINES_COUNT 10 -class UIScene_HUD : public UIScene +class UIScene_HUD : public UIScene, public IUIScene_HUD { private: bool m_bSplitscreen; - int m_lastActiveSlot; - int m_lastScale; - bool m_bToolTipsVisible; - float m_lastExpProgress; - int m_lastExpLevel; - int m_lastMaxHealth; - bool m_lastHealthBlink, m_lastHealthPoison; - int m_lastMaxFood; - bool m_lastFoodPoison; - int m_lastAir; - int m_lastArmour; - float m_lastDragonHealth; - bool m_showDragonHealth; - int m_ticksWithNoBoss; - bool m_lastShowDisplayName; - - bool m_showHealth, m_showFood, m_showAir, m_showArmour, m_showExpBar; - bool m_lastRegenEffect; - int m_lastSaturation; - - unsigned int m_uiSelectedItemOpacityCountDown; - - wstring m_displayName; - protected: UIControl_Label m_labelChatText[CHAT_LINES_COUNT]; UIControl_Label m_labelJukebox; @@ -41,11 +18,13 @@ protected: IggyName m_funcLoadHud, m_funcSetExpBarProgress, m_funcSetPlayerLevel, m_funcSetActiveSlot; IggyName m_funcSetHealth, m_funcSetFood, m_funcSetAir, m_funcSetArmour; - IggyName m_funcShowHealth, m_funcShowFood, m_funcShowAir, m_funcShowArmour, m_funcShowExpbar; + IggyName m_funcShowHealth, m_funcShowHorseHealth, m_funcShowFood, m_funcShowAir, m_funcShowArmour, m_funcShowExpbar; IggyName m_funcSetRegenerationEffect, m_funcSetFoodSaturationLevel; IggyName m_funcSetDragonHealth, m_funcSetDragonLabel, m_funcShowDragonHealth; IggyName m_funcSetSelectedLabel, m_funcHideSelectedLabel; IggyName m_funcRepositionHud, m_funcSetDisplayName, m_funcSetTooltipsEnabled; + IggyName m_funcSetRidingHorse, m_funcSetHorseHealth, m_funcSetHorseJumpBarProgress; + IggyName m_funcSetHealthAbsorb; UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) UI_MAP_ELEMENT(m_labelChatText[0],"Label1") UI_MAP_ELEMENT(m_labelChatText[1],"Label2") @@ -84,6 +63,7 @@ protected: UI_MAP_NAME(m_funcSetArmour, L"SetArmour") UI_MAP_NAME(m_funcShowHealth, L"ShowHealth") + UI_MAP_NAME(m_funcShowHorseHealth, L"ShowHorseHealth") UI_MAP_NAME(m_funcShowFood, L"ShowFood") UI_MAP_NAME(m_funcShowAir, L"ShowAir") UI_MAP_NAME(m_funcShowArmour, L"ShowArmour") @@ -103,6 +83,12 @@ protected: UI_MAP_NAME(m_funcSetDisplayName, L"SetGamertag") UI_MAP_NAME(m_funcSetTooltipsEnabled, L"SetTooltipsEnabled") + + UI_MAP_NAME(m_funcSetRidingHorse, L"SetRidingHorse") + UI_MAP_NAME(m_funcSetHorseHealth, L"SetHorseHealth") + UI_MAP_NAME(m_funcSetHorseJumpBarProgress, L"SetHorseJumpBarProgress") + + UI_MAP_NAME(m_funcSetHealthAbsorb, L"SetHealthAbsorb") UI_END_MAP_ELEMENTS_AND_NAMES() public: @@ -133,17 +119,22 @@ public: virtual void handleReload(); private: + virtual int getPad(); + virtual void SetOpacity(float opacity); + virtual void SetVisible(bool visible); + void SetHudSize(int scale); - void SetExpBarProgress(float progress); + void SetExpBarProgress(float progress, int xpNeededForNextLevel); void SetExpLevel(int level); void SetActiveSlot(int slot); - void SetHealth(int iHealth, int iLastHealth, bool bBlink, bool bPoison); + void SetHealth(int iHealth, int iLastHealth, bool bBlink, bool bPoison, bool bWither); void SetFood(int iFood, int iLastFood, bool bPoison); - void SetAir(int iAir); + void SetAir(int iAir, int extra); void SetArmour(int iArmour); void ShowHealth(bool show); + void ShowHorseHealth(bool show); void ShowFood(bool show); void ShowAir(bool show); void ShowArmour(bool show); @@ -162,6 +153,12 @@ private: void SetTooltipsEnabled(bool bEnabled); + void SetRidingHorse(bool ridingHorse, bool bIsJumpable, int maxHorseHealth); + void SetHorseHealth(int health, bool blink = false); + void SetHorseJumpBarProgress(float progress); + + void SetHealthAbsorb(int healthAbsorb); + public: void SetSelectedLabel(const wstring &label); void ShowDisplayName(bool show); diff --git a/Minecraft.Client/Common/UI/UIScene_HelpAndOptionsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_HelpAndOptionsMenu.cpp index 3fe03325..a0d63172 100644 --- a/Minecraft.Client/Common/UI/UIScene_HelpAndOptionsMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_HelpAndOptionsMenu.cpp @@ -10,21 +10,19 @@ UIScene_HelpAndOptionsMenu::UIScene_HelpAndOptionsMenu(int iPad, void *initData, m_bNotInGame=(Minecraft::GetInstance()->level==NULL); - m_buttons[BUTTON_HAO_CHANGESKIN].init(app.GetString(IDS_CHANGE_SKIN),BUTTON_HAO_CHANGESKIN); - m_buttons[BUTTON_HAO_HOWTOPLAY].init(app.GetString(IDS_HOW_TO_PLAY),BUTTON_HAO_HOWTOPLAY); - m_buttons[BUTTON_HAO_CONTROLS].init(app.GetString(IDS_CONTROLS),BUTTON_HAO_CONTROLS); - m_buttons[BUTTON_HAO_SETTINGS].init(app.GetString(IDS_SETTINGS),BUTTON_HAO_SETTINGS); - m_buttons[BUTTON_HAO_CREDITS].init(app.GetString(IDS_CREDITS),BUTTON_HAO_CREDITS); + m_buttons[BUTTON_HAO_CHANGESKIN].init(IDS_CHANGE_SKIN,BUTTON_HAO_CHANGESKIN); + m_buttons[BUTTON_HAO_HOWTOPLAY].init(IDS_HOW_TO_PLAY,BUTTON_HAO_HOWTOPLAY); + m_buttons[BUTTON_HAO_CONTROLS].init(IDS_CONTROLS,BUTTON_HAO_CONTROLS); + m_buttons[BUTTON_HAO_SETTINGS].init(IDS_SETTINGS,BUTTON_HAO_SETTINGS); + m_buttons[BUTTON_HAO_CREDITS].init(IDS_CREDITS,BUTTON_HAO_CREDITS); //m_buttons[BUTTON_HAO_REINSTALL].init(app.GetString(IDS_REINSTALL_CONTENT),BUTTON_HAO_REINSTALL); - m_buttons[BUTTON_HAO_DEBUG].init(app.GetString(IDS_DEBUG_SETTINGS),BUTTON_HAO_DEBUG); + m_buttons[BUTTON_HAO_DEBUG].init(IDS_DEBUG_SETTINGS,BUTTON_HAO_DEBUG); /* 4J-TomK - we should never remove a control before the other buttons controls are initialised! (because vita touchboxes are rebuilt on remove since the remaining positions might change) */ // We don't have a reinstall content, so remove the button removeControl( &m_buttons[BUTTON_HAO_REINSTALL], false ); - doHorizontalResizeCheck(); - #ifdef _FINAL_BUILD removeControl( &m_buttons[BUTTON_HAO_DEBUG], false); #else @@ -75,6 +73,9 @@ UIScene_HelpAndOptionsMenu::UIScene_HelpAndOptionsMenu(int iPad, void *initData, removeControl( &m_buttons[BUTTON_HAO_CHANGESKIN], false); } + // 4J-TomK Moved horizontal resize check to the end to prevent horizontal scaling for buttons that might get removed anyways (debug options for example) + doHorizontalResizeCheck(); + //StorageManager.TMSPP_GetUserQuotaInfo(C4JStorage::eGlobalStorage_TitleUser,iPad); //StorageManager.WebServiceRequestGetFriends(iPad); } diff --git a/Minecraft.Client/Common/UI/UIScene_HopperMenu.cpp b/Minecraft.Client/Common/UI/UIScene_HopperMenu.cpp new file mode 100644 index 00000000..f0f6db18 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_HopperMenu.cpp @@ -0,0 +1,197 @@ +#include "stdafx.h" +#include "UI.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.level.tile.entity.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h" +#include "..\..\Minecraft.h" +#include "UIScene_HopperMenu.h" + +UIScene_HopperMenu::UIScene_HopperMenu(int iPad, void *_initData, UILayer *parentLayer) : UIScene_AbstractContainerMenu(iPad, parentLayer) +{ + // Setup all the Iggy references we need for this scene + initialiseMovie(); + + HopperScreenInput *initData = (HopperScreenInput *)_initData; + + m_labelDispenser.init(initData->hopper->getName()); + + Minecraft *pMinecraft = Minecraft::GetInstance(); + if( pMinecraft->localgameModes[initData->iPad] != NULL ) + { + TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[initData->iPad]; + m_previousTutorialState = gameMode->getTutorial()->getCurrentState(); + gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_Hopper_Menu, this); + } + + HopperMenu* menu = new HopperMenu( initData->inventory, initData->hopper ); + + m_containerSize = initData->hopper->getContainerSize(); + Initialize( initData->iPad, menu, true, m_containerSize, eSectionHopperUsing, eSectionHopperMax ); + + m_slotListTrap.addSlots(0, 9); + + delete initData; +} + +wstring UIScene_HopperMenu::getMoviePath() +{ + if(app.GetLocalPlayerCount() > 1) + { + return L"HopperMenuSplit"; + } + else + { + return L"HopperMenu"; + } +} + +void UIScene_HopperMenu::handleReload() +{ + Initialize( m_iPad, m_menu, true, m_containerSize, eSectionHopperUsing, eSectionHopperMax ); + + m_slotListTrap.addSlots(0, 9); +} + +int UIScene_HopperMenu::getSectionColumns(ESceneSection eSection) +{ + int cols = 0; + switch( eSection ) + { + case eSectionHopperContents: + cols = 5; + break; + case eSectionHopperInventory: + cols = 9; + break; + case eSectionHopperUsing: + cols = 9; + break; + default: + assert( false ); + break; + } + return cols; +} + +int UIScene_HopperMenu::getSectionRows(ESceneSection eSection) +{ + int rows = 0; + switch( eSection ) + { + case eSectionHopperContents: + rows = 1; + break; + case eSectionHopperInventory: + rows = 3; + break; + case eSectionHopperUsing: + rows = 1; + break; + default: + assert( false ); + break; + } + return rows; +} + +void UIScene_HopperMenu::GetPositionOfSection( ESceneSection eSection, UIVec2D* pPosition ) +{ + switch( eSection ) + { + case eSectionHopperContents: + pPosition->x = m_slotListTrap.getXPos(); + pPosition->y = m_slotListTrap.getYPos(); + break; + case eSectionHopperInventory: + pPosition->x = m_slotListInventory.getXPos(); + pPosition->y = m_slotListInventory.getYPos(); + break; + case eSectionHopperUsing: + pPosition->x = m_slotListHotbar.getXPos(); + pPosition->y = m_slotListHotbar.getYPos(); + break; + default: + assert( false ); + break; + } +} + +void UIScene_HopperMenu::GetItemScreenData( ESceneSection eSection, int iItemIndex, UIVec2D* pPosition, UIVec2D* pSize ) +{ + UIVec2D sectionSize; + switch( eSection ) + { + case eSectionHopperContents: + sectionSize.x = m_slotListTrap.getWidth(); + sectionSize.y = m_slotListTrap.getHeight(); + break; + case eSectionHopperInventory: + sectionSize.x = m_slotListInventory.getWidth(); + sectionSize.y = m_slotListInventory.getHeight(); + break; + case eSectionHopperUsing: + sectionSize.x = m_slotListHotbar.getWidth(); + sectionSize.y = m_slotListHotbar.getHeight(); + break; + default: + assert( false ); + break; + } + + int rows = getSectionRows(eSection); + int cols = getSectionColumns(eSection); + + pSize->x = sectionSize.x/cols; + pSize->y = sectionSize.y/rows; + + int itemCol = iItemIndex % cols; + int itemRow = iItemIndex/cols; + + pPosition->x = itemCol * pSize->x; + pPosition->y = itemRow * pSize->y; +} + +void UIScene_HopperMenu::setSectionSelectedSlot(ESceneSection eSection, int x, int y) +{ + int cols = getSectionColumns(eSection); + + int index = (y * cols) + x; + + UIControl_SlotList *slotList = NULL; + switch( eSection ) + { + case eSectionHopperContents: + slotList = &m_slotListTrap; + break; + case eSectionHopperInventory: + slotList = &m_slotListInventory; + break; + case eSectionHopperUsing: + slotList = &m_slotListHotbar; + break; + default: + assert( false ); + break; + } + slotList->setHighlightSlot(index); +} + +UIControl *UIScene_HopperMenu::getSection(ESceneSection eSection) +{ + UIControl *control = NULL; + switch( eSection ) + { + case eSectionHopperContents: + control = &m_slotListTrap; + break; + case eSectionHopperInventory: + control = &m_slotListInventory; + break; + case eSectionHopperUsing: + control = &m_slotListHotbar; + break; + default: + assert( false ); + break; + } + return control; +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_HopperMenu.h b/Minecraft.Client/Common/UI/UIScene_HopperMenu.h new file mode 100644 index 00000000..ff058fe8 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_HopperMenu.h @@ -0,0 +1,40 @@ +#pragma once + +#include "UIScene_AbstractContainerMenu.h" +#include "IUIScene_HopperMenu.h" + +class InventoryMenu; + +class UIScene_HopperMenu : public UIScene_AbstractContainerMenu, public IUIScene_HopperMenu +{ +private: + int m_containerSize; + +public: + UIScene_HopperMenu(int iPad, void *initData, UILayer *parentLayer); + + virtual EUIScene getSceneType() { return eUIScene_HopperMenu;} + +protected: + UIControl_SlotList m_slotListTrap; + UIControl_Label m_labelDispenser; + + UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene_AbstractContainerMenu) + UI_BEGIN_MAP_CHILD_ELEMENTS( m_controlMainPanel ) + UI_MAP_ELEMENT( m_slotListTrap, "Trap") + UI_MAP_ELEMENT( m_labelDispenser, "dispenserLabel") + UI_END_MAP_CHILD_ELEMENTS() + UI_END_MAP_ELEMENTS_AND_NAMES() + + virtual wstring getMoviePath(); + virtual void handleReload(); + + virtual int getSectionColumns(ESceneSection eSection); + virtual int getSectionRows(ESceneSection eSection); + virtual void GetPositionOfSection( ESceneSection eSection, UIVec2D* pPosition ); + virtual void GetItemScreenData( ESceneSection eSection, int iItemIndex, UIVec2D* pPosition, UIVec2D* pSize ); + virtual void handleSectionClick(ESceneSection eSection) {} + virtual void setSectionSelectedSlot(ESceneSection eSection, int x, int y); + + virtual UIControl *getSection(ESceneSection eSection); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_HorseInventoryMenu.cpp b/Minecraft.Client/Common/UI/UIScene_HorseInventoryMenu.cpp new file mode 100644 index 00000000..ab98e30f --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_HorseInventoryMenu.cpp @@ -0,0 +1,338 @@ +#include "stdafx.h" +#include "UI.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.entity.animal.h" +#include "MultiPlayerLocalPlayer.h" +#include "..\..\Minecraft.h" +#include "UIScene_HorseInventoryMenu.h" + +UIScene_HorseInventoryMenu::UIScene_HorseInventoryMenu(int iPad, void *_initData, UILayer *parentLayer) : UIScene_AbstractContainerMenu(iPad, parentLayer) +{ + // Setup all the Iggy references we need for this scene + initialiseMovie(); + + HorseScreenInput *initData = (HorseScreenInput *)_initData; + + m_labelHorse.init( initData->container->getName() ); + m_inventory = initData->inventory; + m_horse = initData->horse; + + Minecraft *pMinecraft = Minecraft::GetInstance(); + if( pMinecraft->localgameModes[iPad] != NULL ) + { + TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[iPad]; + m_previousTutorialState = gameMode->getTutorial()->getCurrentState(); + gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_Horse_Menu, this); + } + + HorseInventoryMenu *horseMenu = new HorseInventoryMenu(initData->inventory, initData->container, initData->horse); + + int startSlot = EntityHorse::INV_BASE_COUNT; + if(m_horse->isChestedHorse()) + { + startSlot += EntityHorse::INV_DONKEY_CHEST_COUNT; + } + Initialize( iPad, horseMenu, true, startSlot, eSectionHorseUsing, eSectionHorseMax ); + + m_slotSaddle.addSlots(EntityHorse::INV_SLOT_SADDLE,1); + m_slotArmor.addSlots(EntityHorse::INV_SLOT_ARMOR,1); + + if(m_horse->isChestedHorse()) + { + // also starts at one, because a donkey can't wear armor! + m_slotListChest.addSlots(EntityHorse::INV_BASE_COUNT, EntityHorse::INV_DONKEY_CHEST_COUNT); + } + + // remove horse inventory + if(!m_horse->isChestedHorse()) + SetHasInventory(false); + + // cannot wear armor? remove armor slot! + if(!m_horse->canWearArmor()) + SetIsDonkey(true); + + if(initData) delete initData; + + setIgnoreInput(false); + + //app.SetRichPresenceContext(iPad, CONTEXT_GAME_STATE_HORSE); +} + +wstring UIScene_HorseInventoryMenu::getMoviePath() +{ + if(app.GetLocalPlayerCount() > 1) + { + return L"HorseInventoryMenuSplit"; + } + else + { + return L"HorseInventoryMenu"; + } +} + +void UIScene_HorseInventoryMenu::handleReload() +{ + int startSlot = EntityHorse::INV_BASE_COUNT; + if(m_horse->isChestedHorse()) + { + startSlot += EntityHorse::INV_DONKEY_CHEST_COUNT; + } + Initialize( m_iPad, m_menu, true, startSlot, eSectionHorseUsing, eSectionHorseMax ); + + m_slotSaddle.addSlots(EntityHorse::INV_SLOT_SADDLE,1); + m_slotArmor.addSlots(EntityHorse::INV_SLOT_ARMOR,1); + + if(m_horse->isChestedHorse()) + { + // also starts at one, because a donkey can't wear armor! + m_slotListChest.addSlots(EntityHorse::INV_BASE_COUNT, EntityHorse::INV_DONKEY_CHEST_COUNT); + } + + // remove horse inventory + if(!m_horse->isChestedHorse()) + SetHasInventory(false); + + // cannot wear armor? remove armor slot! + if(!m_horse->canWearArmor()) + SetIsDonkey(true); +} + +int UIScene_HorseInventoryMenu::getSectionColumns(ESceneSection eSection) +{ + int cols = 0; + switch( eSection ) + { + case eSectionHorseArmor: + cols = 1; + break; + case eSectionHorseSaddle: + cols = 1; + break; + case eSectionHorseChest: + cols = 5; + break; + case eSectionHorseInventory: + cols = 9; + break; + case eSectionHorseUsing: + cols = 9; + break; + default: + assert( false ); + break; + } + return cols; +} + +int UIScene_HorseInventoryMenu::getSectionRows(ESceneSection eSection) +{ + int rows = 0; + switch( eSection ) + { + case eSectionHorseArmor: + rows = 1; + break; + case eSectionHorseSaddle: + rows = 1; + break; + case eSectionHorseChest: + rows = 3; + break; + case eSectionHorseInventory: + rows = 3; + break; + case eSectionHorseUsing: + rows = 1; + break; + default: + assert( false ); + break; + } + return rows; +} + +void UIScene_HorseInventoryMenu::GetPositionOfSection( ESceneSection eSection, UIVec2D* pPosition ) +{ + switch( eSection ) + { + case eSectionHorseArmor: + pPosition->x = m_slotArmor.getXPos(); + pPosition->y = m_slotArmor.getYPos(); + break; + case eSectionHorseSaddle: + pPosition->x = m_slotSaddle.getXPos(); + pPosition->y = m_slotSaddle.getYPos(); + break; + case eSectionHorseChest: + pPosition->x = m_slotListChest.getXPos(); + pPosition->y = m_slotListChest.getYPos(); + break; + case eSectionHorseInventory: + pPosition->x = m_slotListInventory.getXPos(); + pPosition->y = m_slotListInventory.getYPos(); + break; + case eSectionHorseUsing: + pPosition->x = m_slotListHotbar.getXPos(); + pPosition->y = m_slotListHotbar.getYPos(); + break; + default: + assert( false ); + break; + } +} + +void UIScene_HorseInventoryMenu::GetItemScreenData( ESceneSection eSection, int iItemIndex, UIVec2D* pPosition, UIVec2D* pSize ) +{ + UIVec2D sectionSize; + + switch( eSection ) + { + case eSectionHorseArmor: + sectionSize.x = m_slotArmor.getWidth(); + sectionSize.y = m_slotArmor.getHeight(); + break; + case eSectionHorseSaddle: + sectionSize.x = m_slotSaddle.getWidth(); + sectionSize.y = m_slotSaddle.getHeight(); + break; + case eSectionHorseChest: + sectionSize.x = m_slotListChest.getWidth(); + sectionSize.y = m_slotListChest.getHeight(); + break; + case eSectionHorseInventory: + sectionSize.x = m_slotListInventory.getWidth(); + sectionSize.y = m_slotListInventory.getHeight(); + break; + case eSectionHorseUsing: + sectionSize.x = m_slotListHotbar.getWidth(); + sectionSize.y = m_slotListHotbar.getHeight(); + break; + default: + assert( false ); + break; + } + + if(IsSectionSlotList(eSection)) + { + int rows = getSectionRows(eSection); + int cols = getSectionColumns(eSection); + + pSize->x = sectionSize.x/cols; + pSize->y = sectionSize.y/rows; + + int itemCol = iItemIndex % cols; + int itemRow = iItemIndex/cols; + + pPosition->x = itemCol * pSize->x; + pPosition->y = itemRow * pSize->y; + } + else + { + GetPositionOfSection(eSection, pPosition); + pSize->x = sectionSize.x; + pSize->y = sectionSize.y; + } +} + +void UIScene_HorseInventoryMenu::setSectionSelectedSlot(ESceneSection eSection, int x, int y) +{ + int cols = getSectionColumns(eSection); + + int index = (y * cols) + x; + + UIControl_SlotList *slotList = NULL; + switch( eSection ) + { + case eSectionHorseArmor: + slotList = &m_slotArmor; + break; + case eSectionHorseSaddle: + slotList = &m_slotSaddle; + break; + case eSectionHorseChest: + slotList = &m_slotListChest; + break; + case eSectionHorseInventory: + slotList = &m_slotListInventory; + break; + case eSectionHorseUsing: + slotList = &m_slotListHotbar; + break; + default: + assert( false ); + break; + } + + slotList->setHighlightSlot(index); +} + +UIControl *UIScene_HorseInventoryMenu::getSection(ESceneSection eSection) +{ + UIControl *control = NULL; + switch( eSection ) + { + case eSectionHorseArmor: + control = &m_slotArmor; + break; + case eSectionHorseSaddle: + control = &m_slotSaddle; + break; + case eSectionHorseChest: + control = &m_slotListChest; + break; + case eSectionHorseInventory: + control = &m_slotListInventory; + break; + case eSectionHorseUsing: + control = &m_slotListHotbar; + break; + default: + assert( false ); + break; + } + return control; +} + +void UIScene_HorseInventoryMenu::customDraw(IggyCustomDrawCallbackRegion *region) +{ + Minecraft *pMinecraft = Minecraft::GetInstance(); + if(pMinecraft->localplayers[m_iPad] == NULL || pMinecraft->localgameModes[m_iPad] == NULL) return; + + if(wcscmp((wchar_t *)region->name,L"horse")==0) + { + // Setup GDraw, normal game render states and matrices + CustomDrawData *customDrawRegion = ui.setupCustomDraw(this,region); + delete customDrawRegion; + + m_horsePreview.render(region); + + // Finish GDraw and anything else that needs to be finalised + ui.endCustomDraw(region); + } + else + { + UIScene_AbstractContainerMenu::customDraw(region); + } +} + +void UIScene_HorseInventoryMenu::SetHasInventory(bool bHasInventory) +{ + app.DebugPrintf("SetHasInventory to %d\n", bHasInventory); + + IggyDataValue result; + IggyDataValue value[1]; + value[0].type = IGGY_DATATYPE_boolean; + value[0].boolval = bHasInventory; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetHasInventory , 1 , value ); +} + +void UIScene_HorseInventoryMenu::SetIsDonkey(bool bSetIsDonkey) +{ + app.DebugPrintf("SetIsDonkey to %d\n", bSetIsDonkey); + + IggyDataValue result; + IggyDataValue value[1]; + value[0].type = IGGY_DATATYPE_boolean; + value[0].boolval = bSetIsDonkey; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetIsDonkey , 1 , value ); +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_HorseInventoryMenu.h b/Minecraft.Client/Common/UI/UIScene_HorseInventoryMenu.h new file mode 100644 index 00000000..063e1128 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_HorseInventoryMenu.h @@ -0,0 +1,54 @@ +#pragma once + +#include "UIScene_AbstractContainerMenu.h" +#include "IUIScene_HorseInventoryMenu.h" + +class InventoryMenu; + +class UIScene_HorseInventoryMenu : public UIScene_AbstractContainerMenu, public IUIScene_HorseInventoryMenu +{ + friend class UIControl_MinecraftHorse; +public: + UIScene_HorseInventoryMenu(int iPad, void *initData, UILayer *parentLayer); + + virtual EUIScene getSceneType() { return eUIScene_HorseMenu;} + +protected: + UIControl_SlotList m_slotSaddle, m_slotArmor, m_slotListChest; + UIControl_Label m_labelHorse; + + IggyName m_funcSetIsDonkey, m_funcSetHasInventory; + + UIControl_MinecraftHorse m_horsePreview; + + UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene_AbstractContainerMenu) + UI_BEGIN_MAP_CHILD_ELEMENTS( m_controlMainPanel ) + UI_MAP_ELEMENT( m_slotSaddle, "SlotSaddle") + UI_MAP_ELEMENT( m_slotArmor, "SlotArmor") + UI_MAP_ELEMENT( m_slotListChest, "DonkeyInventoryList") + UI_MAP_ELEMENT( m_labelHorse, "horseinventoryText") + + UI_MAP_ELEMENT( m_horsePreview, "iggy_horse") + UI_END_MAP_CHILD_ELEMENTS() + + UI_MAP_NAME(m_funcSetIsDonkey, L"SetIsDonkey") + UI_MAP_NAME(m_funcSetHasInventory, L"SetHasInventory") + UI_END_MAP_ELEMENTS_AND_NAMES() + + virtual wstring getMoviePath(); + virtual void handleReload(); + + virtual int getSectionColumns(ESceneSection eSection); + virtual int getSectionRows(ESceneSection eSection); + virtual void GetPositionOfSection( ESceneSection eSection, UIVec2D* pPosition ); + virtual void GetItemScreenData( ESceneSection eSection, int iItemIndex, UIVec2D* pPosition, UIVec2D* pSize ); + virtual void handleSectionClick(ESceneSection eSection) {} + virtual void setSectionSelectedSlot(ESceneSection eSection, int x, int y); + + virtual UIControl *getSection(ESceneSection eSection); + + virtual void customDraw(IggyCustomDrawCallbackRegion *region); + + void SetHasInventory(bool bHasInventory); + void SetIsDonkey(bool bSetIsDonkey); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_HowToPlay.cpp b/Minecraft.Client/Common/UI/UIScene_HowToPlay.cpp index 68c7591f..e33e24fe 100644 --- a/Minecraft.Client/Common/UI/UIScene_HowToPlay.cpp +++ b/Minecraft.Client/Common/UI/UIScene_HowToPlay.cpp @@ -24,6 +24,11 @@ static UIScene_HowToPlay::SHowToPlayPageDef gs_aPageDefs[ eHowToPlay_NumPages ] { IDS_HOW_TO_PLAY_FARMANIMALS, 0, 0}, // eHowToPlay_Breeding { IDS_HOW_TO_PLAY_BREEDANIMALS, 0, 0}, // eHowToPlay_Breeding { IDS_HOW_TO_PLAY_TRADING, UIScene_HowToPlay::eHowToPlay_LabelTrading_Inventory, 5}, // eHowToPlay_Trading + { IDS_HOW_TO_PLAY_HORSES, 0, 0}, // eHowToPlay_Horses + { IDS_HOW_TO_PLAY_BEACONS, 0, 0}, // eHowToPlay_Beacons + { IDS_HOW_TO_PLAY_FIREWORKS, 0, 0}, // eHowToPlay_Fireworks + { IDS_HOW_TO_PLAY_HOPPERS, 0, 0}, // eHowToPlay_Hoppers + { IDS_HOW_TO_PLAY_DROPPERS, 0, 0}, // eHowToPlay_Droppers { IDS_HOW_TO_PLAY_NETHERPORTAL, 0, 0}, // eHowToPlay_NetherPortal { IDS_HOW_TO_PLAY_THEEND, 0, 0}, // eHowToPlay_NetherPortal #ifdef _XBOX @@ -56,6 +61,12 @@ int gs_pageToFlashMapping[eHowToPlay_NumPages] = 15, //eHowToPlay_Breeding, 22, //eHowToPlay_Trading, + 24, //eHowToPlay_Horses + 25, //eHowToPlay_Beacons + 26, //eHowToPlay_Fireworks + 27, //eHowToPlay_Hoppers + 28, //eHowToPlay_Droppers + 16, //eHowToPlay_NetherPortal, 17, //eHowToPlay_TheEnd, #ifdef _XBOX @@ -83,7 +94,7 @@ UIScene_HowToPlay::UIScene_HowToPlay(int iPad, void *initData, UILayer *parentLa m_labels[ eHowToPlay_LabelFChest].init(app.GetString(IDS_FURNACE)); m_labels[ eHowToPlay_LabelLCInventory].init(inventoryString); m_labels[ eHowToPlay_LabelCreativeInventory].init(app.GetString(IDS_GROUPNAME_BUILDING_BLOCKS)); - m_labels[ eHowToPlay_LabelLCChest].init(app.GetString(IDS_CHEST)); + m_labels[ eHowToPlay_LabelLCChest].init(app.GetString(IDS_CHEST_LARGE)); m_labels[ eHowToPlay_LabelSCInventory].init(inventoryString); m_labels[ eHowToPlay_LabelSCChest].init(app.GetString(IDS_CHEST)); m_labels[ eHowToPlay_LabelIInventory].init(inventoryString); @@ -105,6 +116,18 @@ UIScene_HowToPlay::UIScene_HowToPlay(int iPad, void *initData, UILayer *parentLa m_labels[ eHowToPlay_LabelTrading_Offer1].init(app.GetString(IDS_ITEM_EMERALD)); m_labels[ eHowToPlay_LabelTrading_NeededForTrade].init(app.GetString(IDS_REQUIRED_ITEMS_FOR_TRADE)); + m_labels[ eHowToPlay_LabelBeacon_PrimaryPower].init(app.GetString(IDS_CONTAINER_BEACON_PRIMARY_POWER)); + m_labels[ eHowToPlay_LabelBeacon_SecondaryPower].init(app.GetString(IDS_CONTAINER_BEACON_SECONDARY_POWER)); + + m_labels[ eHowToPlay_LabelFireworksText].init(app.GetString(IDS_HOW_TO_PLAY_MENU_FIREWORKS)); + m_labels[ eHowToPlay_LabelFireworksInventory].init(inventoryString.c_str()); + + m_labels[ eHowToPlay_LabelHopperText].init(app.GetString(IDS_TILE_HOPPER)); + m_labels[ eHowToPlay_LabelHopperInventory].init(inventoryString.c_str()); + + m_labels[ eHowToPlay_LabelDropperText].init(app.GetString(IDS_TILE_DROPPER)); + m_labels[ eHowToPlay_LabelDropperInventory].init(inventoryString.c_str()); + wsTemp = app.GetString(IDS_VILLAGER_OFFERS_ITEM); wsTemp = replaceAll(wsTemp,L"{*VILLAGER_TYPE*}",app.GetString(IDS_VILLAGER_PRIEST)); wsTemp.replace(wsTemp.find(L"%s"),2, app.GetString(IDS_TILE_LIGHT_GEM)); @@ -138,13 +161,9 @@ void UIScene_HowToPlay::updateTooltips() int iPage = ( int )( m_eCurrPage ); int firstPage = eHowToPlay_WhatsNew; -#ifdef __PS3__ - // If it's the blu ray, or the first Japanese digital game, there's no What's New until the first patch, which will take this line out - if(StorageManager.GetBootTypeDisc() || (app.GetProductSKU()==e_sku_SCEJ)) - { - ++firstPage; - } -#elif defined(__ORBIS__) || defined(_DURANGO) || defined(__PSVITA__) + + // 4J Stu - Add back for future platforms +#if 0 // No What's New for the first PS4 and Xbox One builds if(true) { @@ -212,18 +231,8 @@ void UIScene_HowToPlay::handleInput(int iPad, int key, bool repeat, bool pressed // Previous page int iPrevPage = ( int )( m_eCurrPage ) - 1; -#ifdef __PS3__ - // If it's the blu ray, or the first Japanese digital game, there's no What's New until the first patch, which will take this line out - if(StorageManager.GetBootTypeDisc() || (app.GetProductSKU()==e_sku_SCEJ)) - { - if ( iPrevPage >= 0 && !((iPrevPage==eHowToPlay_WhatsNew))) - { - StartPage( ( EHowToPlayPage )( iPrevPage ) ); - ui.PlayUISFX(eSFX_Press); - } - } - else -#elif defined(__ORBIS__) || defined(_DURANGO) || defined(__PSVITA__) + // 4J Stu - Add back for future platforms +#if 0 // No What's New for the first PS4 and Xbox One builds if(true) { @@ -266,15 +275,21 @@ void UIScene_HowToPlay::StartPage( EHowToPlayPage ePage ) wstring replacedText = app.FormatHTMLString(m_iPad, app.GetString( pDef->m_iTextStringID )); // 4J-PB - replace the title with the platform specific title, and the platform name // replacedText = replaceAll(replacedText,L"{*TITLE_UPDATE_NAME*}",app.GetString(IDS_TITLE_UPDATE_NAME)); -#ifndef _WINDOWS64 replacedText = replaceAll(replacedText,L"{*KICK_PLAYER_DESCRIPTION*}",app.GetString(IDS_KICK_PLAYER_DESCRIPTION)); -#endif #ifdef _XBOX_ONE replacedText = replaceAll(replacedText,L"{*PLATFORM_NAME*}",app.GetString(IDS_PLATFORM_NAME)); #endif replacedText = replaceAll(replacedText,L"{*BACK_BUTTON*}",app.GetString(IDS_BACK_BUTTON)); replacedText = replaceAll(replacedText,L"{*DISABLES_ACHIEVEMENTS*}",app.GetString(IDS_HOST_OPTION_DISABLES_ACHIEVEMENTS)); + // 4J-JEV: Temporary fix: LOC: Minecraft: XB1: KO: Font: Uncategorized: Squares appear instead of hyphens in FIREWORKS description + if (!ui.UsingBitmapFont()) + { + replacedText = replaceAll(replacedText, L"\u00A9", L"(C)"); + replacedText = replaceAll(replacedText, L"\u00AE", L"(R)"); + replacedText = replaceAll(replacedText, L"\u2013", L"-"); + } + // strip out any tab characters and repeated spaces stripWhitespaceForHtml( replacedText, true ); diff --git a/Minecraft.Client/Common/UI/UIScene_HowToPlay.h b/Minecraft.Client/Common/UI/UIScene_HowToPlay.h index cff07256..fe845896 100644 --- a/Minecraft.Client/Common/UI/UIScene_HowToPlay.h +++ b/Minecraft.Client/Common/UI/UIScene_HowToPlay.h @@ -39,6 +39,14 @@ public: eHowToPlay_LabelTrading_Offer1, eHowToPlay_LabelTrading_NeededForTrade, eHowToPlay_LabelTrading_VillagerOffers, + eHowToPlay_LabelBeacon_PrimaryPower, + eHowToPlay_LabelBeacon_SecondaryPower, + eHowToPlay_LabelFireworksText, + eHowToPlay_LabelFireworksInventory, + eHowToPlay_LabelHopperText, + eHowToPlay_LabelHopperInventory, + eHowToPlay_LabelDropperText, + eHowToPlay_LabelDropperInventory, eHowToPlay_NumLabels }; @@ -99,6 +107,18 @@ private: UI_MAP_ELEMENT( m_labels[ eHowToPlay_LabelAnvil_ARepairAndName ] , "Label1_21" ) UI_MAP_ELEMENT( m_labels[ eHowToPlay_LabelAnvil_Cost ] , "Label2_21" ) UI_MAP_ELEMENT( m_labels[ eHowToPlay_LabelAnvil_Inventory ] , "Label3_21" ) + + UI_MAP_ELEMENT( m_labels[ eHowToPlay_LabelBeacon_PrimaryPower ] , "Label1_25" ) + UI_MAP_ELEMENT( m_labels[ eHowToPlay_LabelBeacon_SecondaryPower ] , "Label2_25" ) + + UI_MAP_ELEMENT( m_labels[ eHowToPlay_LabelFireworksText ] , "Label1_26" ) + UI_MAP_ELEMENT( m_labels[ eHowToPlay_LabelFireworksInventory ] , "Label2_26" ) + + UI_MAP_ELEMENT( m_labels[ eHowToPlay_LabelHopperText ] , "Label1_27" ) + UI_MAP_ELEMENT( m_labels[ eHowToPlay_LabelHopperInventory ] , "Label2_27" ) + + UI_MAP_ELEMENT( m_labels[ eHowToPlay_LabelDropperText ] , "Label1_28" ) + UI_MAP_ELEMENT( m_labels[ eHowToPlay_LabelDropperInventory ] , "Label2_28" ) UI_MAP_NAME(m_funcLoadPage, L"LoadHowToPlayPage") UI_END_MAP_ELEMENTS_AND_NAMES() diff --git a/Minecraft.Client/Common/UI/UIScene_HowToPlayMenu.cpp b/Minecraft.Client/Common/UI/UIScene_HowToPlayMenu.cpp index 5fc6e02b..92e8bdef 100644 --- a/Minecraft.Client/Common/UI/UIScene_HowToPlayMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_HowToPlayMenu.cpp @@ -23,6 +23,12 @@ unsigned int UIScene_HowToPlayMenu::m_uiHTPButtonNameA[]= IDS_HOW_TO_PLAY_MENU_BREEDANIMALS, // eHTPButton_Breeding, IDS_HOW_TO_PLAY_MENU_TRADING, + IDS_HOW_TO_PLAY_MENU_HORSES, + IDS_HOW_TO_PLAY_MENU_BEACONS, + IDS_HOW_TO_PLAY_MENU_FIREWORKS, + IDS_HOW_TO_PLAY_MENU_HOPPERS, + IDS_HOW_TO_PLAY_MENU_DROPPERS, + IDS_HOW_TO_PLAY_MENU_NETHERPORTAL, // eHTPButton_NetherPortal, IDS_HOW_TO_PLAY_MENU_THEEND, // eHTPButton_TheEnd, #ifdef _XBOX @@ -53,6 +59,12 @@ unsigned int UIScene_HowToPlayMenu::m_uiHTPSceneA[]= eHowToPlay_Breeding, eHowToPlay_Trading, + eHowToPlay_Horses, + eHowToPlay_Beacons, + eHowToPlay_Fireworks, + eHowToPlay_Hoppers, + eHowToPlay_Droppers, + eHowToPlay_NetherPortal, eHowToPlay_TheEnd, #ifdef _XBOX @@ -71,18 +83,9 @@ UIScene_HowToPlayMenu::UIScene_HowToPlayMenu(int iPad, void *initData, UILayer * for(unsigned int i = 0; i < eHTPButton_Max; ++i) { -#ifdef __PS3__ - // If it's the blu ray, or the first Japanese digital game, there's no What's New until the first patch, which will take this line out - if(StorageManager.GetBootTypeDisc() || (app.GetProductSKU()==e_sku_SCEJ)) - { - if(!(i==eHTPButton_WhatsNew) ) - { - m_buttonListHowTo.addItem( app.GetString(m_uiHTPButtonNameA[i]) , i);//iCount++); - } - } - else -#elif defined(__ORBIS__) || defined(_DURANGO) || defined(__PSVITA__) - // No What's New for the first PS4 and Xbox One builds + // 4J Stu - Re-add for future platforms +#if 0 + // No What's New if(true) { if(!(i==eHTPButton_WhatsNew) ) @@ -96,6 +99,8 @@ UIScene_HowToPlayMenu::UIScene_HowToPlayMenu(int iPad, void *initData, UILayer * m_buttonListHowTo.addItem( app.GetString(m_uiHTPButtonNameA[i]) , i);//iCount++); } } + + doHorizontalResizeCheck(); } wstring UIScene_HowToPlayMenu::getMoviePath() @@ -136,18 +141,9 @@ void UIScene_HowToPlayMenu::handleReload() { for(unsigned int i = 0; i < eHTPButton_Max; ++i) { -#ifdef __PS3__ - // If it's the blu ray, or the first Japanese digital game, there's no What's New until the first patch, which will take this line out - if(StorageManager.GetBootTypeDisc() || (app.GetProductSKU()==e_sku_SCEJ)) - { - if(!(i==eHTPButton_WhatsNew) ) - { - m_buttonListHowTo.addItem( app.GetString(m_uiHTPButtonNameA[i]) , i); - } - } - else -#elif defined(__ORBIS__) || defined(_DURANGO) || defined(__PSVITA__) - // No What's New for the first PS4 and Xbox One builds + // 4J Stu - Re-add for future platforms +#if 0 + // No What's New if(true) { if(!(i==eHTPButton_WhatsNew) ) @@ -161,6 +157,8 @@ void UIScene_HowToPlayMenu::handleReload() m_buttonListHowTo.addItem( app.GetString(m_uiHTPButtonNameA[i]) , i); } } + + doHorizontalResizeCheck(); } void UIScene_HowToPlayMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) diff --git a/Minecraft.Client/Common/UI/UIScene_HowToPlayMenu.h b/Minecraft.Client/Common/UI/UIScene_HowToPlayMenu.h index 5a60cdd0..1afcec38 100644 --- a/Minecraft.Client/Common/UI/UIScene_HowToPlayMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_HowToPlayMenu.h @@ -28,6 +28,11 @@ private: eHTPButton_FarmingAnimals, eHTPButton_Breeding, eHTPButton_Trading, + eHTPButton_Horses, + eHTPButton_Beacons, + eHTPButton_Fireworks, + eHTPButton_Hoppers, + eHTPButton_Droppers, eHTPButton_NetherPortal, eHTPButton_TheEnd, #ifdef _XBOX diff --git a/Minecraft.Client/Common/UI/UIScene_InGameHostOptionsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_InGameHostOptionsMenu.cpp index de8af0ac..68ac537e 100644 --- a/Minecraft.Client/Common/UI/UIScene_InGameHostOptionsMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_InGameHostOptionsMenu.cpp @@ -15,6 +15,24 @@ UIScene_InGameHostOptionsMenu::UIScene_InGameHostOptionsMenu(int iPad, void *ini m_checkboxFireSpreads.init(app.GetString(IDS_FIRE_SPREADS), eControl_FireSpreads, app.GetGameHostOption(eGameHostOption_FireSpreads)!=0); m_checkboxTNT.init(app.GetString(IDS_TNT_EXPLODES), eControl_TNT, app.GetGameHostOption(eGameHostOption_TNT)!=0); + m_checkboxDoMobLoot.init(app.GetString(IDS_MOB_LOOT), eControl_DoMobLoot, app.GetGameHostOption(eGameHostOption_DoMobLoot)); + m_checkboxDoTileDrops.init(app.GetString(IDS_TILE_DROPS), eControl_DoTileDrops, app.GetGameHostOption(eGameHostOption_DoTileDrops)); + m_checkboxNaturalRegeneration.init(app.GetString(IDS_NATURAL_REGEN), eControl_NaturalRegeneration, app.GetGameHostOption(eGameHostOption_NaturalRegeneration)); + + // If cheats are disabled, remove checkboxes + if (!app.GetGameHostOption(eGameHostOption_CheatsEnabled)) + { + removeControl(&m_checkboxMobGriefing, true); + removeControl(&m_checkboxKeepInventory, true); + removeControl(&m_checkboxDoMobSpawning, true); + removeControl(&m_checkboxDoDaylightCycle, true); + } + + m_checkboxMobGriefing.init(app.GetString(IDS_MOB_GRIEFING), eControl_MobGriefing, app.GetGameHostOption(eGameHostOption_MobGriefing)); + m_checkboxKeepInventory.init(app.GetString(IDS_KEEP_INVENTORY), eControl_KeepInventory, app.GetGameHostOption(eGameHostOption_KeepInventory)); + m_checkboxDoMobSpawning.init(app.GetString(IDS_MOB_SPAWNING), eControl_DoMobSpawning, app.GetGameHostOption(eGameHostOption_DoMobSpawning)); + m_checkboxDoDaylightCycle.init(app.GetString(IDS_DAYLIGHT_CYCLE), eControl_DoDaylightCycle, app.GetGameHostOption(eGameHostOption_DoDaylightCycle)); + INetworkPlayer *localPlayer = g_NetworkManager.GetLocalPlayerByUserIndex( m_iPad ); unsigned int privs = app.GetPlayerPrivileges(localPlayer->GetSmallId()); if(app.GetGameHostOption(eGameHostOption_CheatsEnabled) @@ -48,6 +66,33 @@ void UIScene_InGameHostOptionsMenu::updateTooltips() ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK); } +void UIScene_InGameHostOptionsMenu::handleReload() +{ + UIScene::handleReload(); + + // If cheats are disabled, remove checkboxes + if (!app.GetGameHostOption(eGameHostOption_CheatsEnabled)) + { + removeControl(&m_checkboxMobGriefing, true); + removeControl(&m_checkboxKeepInventory, true); + removeControl(&m_checkboxDoMobSpawning, true); + removeControl(&m_checkboxDoDaylightCycle, true); + } + + INetworkPlayer *localPlayer = g_NetworkManager.GetLocalPlayerByUserIndex( m_iPad ); + unsigned int privs = app.GetPlayerPrivileges(localPlayer->GetSmallId()); + if(app.GetGameHostOption(eGameHostOption_CheatsEnabled) + && Player::getPlayerGamePrivilege(privs,Player::ePlayerGamePrivilege_CanTeleport) + && g_NetworkManager.GetPlayerCount() > 1) + { + } + else + { + removeControl(&m_buttonTeleportToPlayer, true); + removeControl(&m_buttonTeleportToMe, true); + } +} + void UIScene_InGameHostOptionsMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) { //app.DebugPrintf("UIScene_DebugOverlay handling input for pad %d, key %d, down- %s, pressed- %s, released- %s\n", iPad, key, down?"TRUE":"FALSE", pressed?"TRUE":"FALSE", released?"TRUE":"FALSE"); @@ -59,8 +104,20 @@ void UIScene_InGameHostOptionsMenu::handleInput(int iPad, int key, bool repeat, if(pressed) { unsigned int hostOptions = app.GetGameHostOption(eGameHostOption_All); - app.SetGameHostOption(hostOptions,eGameHostOption_FireSpreads,m_checkboxFireSpreads.IsChecked()); - app.SetGameHostOption(hostOptions,eGameHostOption_TNT,m_checkboxTNT.IsChecked()); + app.SetGameHostOption(hostOptions, eGameHostOption_FireSpreads, m_checkboxFireSpreads.IsChecked()); + app.SetGameHostOption(hostOptions, eGameHostOption_TNT, m_checkboxTNT.IsChecked()); + app.SetGameHostOption(hostOptions, eGameHostOption_DoMobLoot, m_checkboxDoMobLoot.IsChecked()); + app.SetGameHostOption(hostOptions, eGameHostOption_DoTileDrops, m_checkboxDoTileDrops.IsChecked()); + app.SetGameHostOption(hostOptions, eGameHostOption_NaturalRegeneration, m_checkboxNaturalRegeneration.IsChecked()); + + // If cheats are enabled, set cheat values + if (app.GetGameHostOption(eGameHostOption_CheatsEnabled)) + { + app.SetGameHostOption(hostOptions, eGameHostOption_MobGriefing, m_checkboxMobGriefing.IsChecked()); + app.SetGameHostOption(hostOptions, eGameHostOption_KeepInventory, m_checkboxKeepInventory.IsChecked()); + app.SetGameHostOption(hostOptions, eGameHostOption_DoMobSpawning, m_checkboxDoMobSpawning.IsChecked()); + app.SetGameHostOption(hostOptions, eGameHostOption_DoDaylightCycle, m_checkboxDoDaylightCycle.IsChecked()); + } // Send update settings packet to server if(hostOptions != app.GetGameHostOption(eGameHostOption_All) ) diff --git a/Minecraft.Client/Common/UI/UIScene_InGameHostOptionsMenu.h b/Minecraft.Client/Common/UI/UIScene_InGameHostOptionsMenu.h index 24711412..b198974f 100644 --- a/Minecraft.Client/Common/UI/UIScene_InGameHostOptionsMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_InGameHostOptionsMenu.h @@ -9,15 +9,29 @@ private: { eControl_FireSpreads, eControl_TNT, + eControl_MobGriefing, + eControl_KeepInventory, + eControl_DoMobSpawning, + eControl_DoMobLoot, + eControl_DoTileDrops, + eControl_NaturalRegeneration, + eControl_DoDaylightCycle, eControl_TeleportToPlayer, eControl_TeleportToMe, }; - UIControl_CheckBox m_checkboxFireSpreads, m_checkboxTNT; + UIControl_CheckBox m_checkboxFireSpreads, m_checkboxTNT, m_checkboxMobGriefing, m_checkboxKeepInventory, m_checkboxDoMobSpawning, m_checkboxDoMobLoot, m_checkboxDoTileDrops, m_checkboxNaturalRegeneration, m_checkboxDoDaylightCycle; UIControl_Button m_buttonTeleportToPlayer, m_buttonTeleportToMe; UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) UI_MAP_ELEMENT( m_checkboxFireSpreads, "CheckboxFireSpreads") UI_MAP_ELEMENT( m_checkboxTNT, "CheckboxTNT") + UI_MAP_ELEMENT( m_checkboxMobGriefing, "CheckboxMobGriefing") + UI_MAP_ELEMENT( m_checkboxKeepInventory, "CheckboxKeepInventory") + UI_MAP_ELEMENT( m_checkboxDoMobSpawning, "CheckboxMobSpawning") + UI_MAP_ELEMENT( m_checkboxDoMobLoot, "CheckboxMobLoot") + UI_MAP_ELEMENT( m_checkboxDoTileDrops, "CheckboxTileDrops") + UI_MAP_ELEMENT( m_checkboxNaturalRegeneration, "CheckboxNaturalRegeneration") + UI_MAP_ELEMENT( m_checkboxDoDaylightCycle, "CheckboxDayLightCycle") UI_MAP_ELEMENT( m_buttonTeleportToPlayer, "TeleportToPlayer") UI_MAP_ELEMENT( m_buttonTeleportToMe, "TeleportPlayerToMe") UI_END_MAP_ELEMENTS_AND_NAMES() @@ -27,6 +41,8 @@ public: virtual EUIScene getSceneType() { return eUIScene_InGameHostOptionsMenu;} virtual void updateTooltips(); + virtual void handleReload(); + protected: // TODO: This should be pure virtual in this class virtual wstring getMoviePath(); diff --git a/Minecraft.Client/Common/UI/UIScene_InGameInfoMenu.cpp b/Minecraft.Client/Common/UI/UIScene_InGameInfoMenu.cpp index 5c3f73f6..57acf345 100644 --- a/Minecraft.Client/Common/UI/UIScene_InGameInfoMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_InGameInfoMenu.cpp @@ -15,59 +15,20 @@ UIScene_InGameInfoMenu::UIScene_InGameInfoMenu(int iPad, void *initData, UILayer m_labelTitle.init(app.GetString(IDS_PLAYERS_INVITE)); m_playerList.init(eControl_GamePlayers); - for(unsigned int i = 0; i < MINECRAFT_NET_MAX_PLAYERS; ++i) - { - m_playerNames[i] = L""; - } + m_players = vector(); DWORD playerCount = g_NetworkManager.GetPlayerCount(); - m_playersCount = 0; for(DWORD i = 0; i < playerCount; ++i) { INetworkPlayer *player = g_NetworkManager.GetPlayerByIndex( i ); if( player != NULL ) { - m_players[i] = player->GetSmallId(); - ++m_playersCount; - - wstring playerName = L""; -#ifndef _CONTENT_PACKAGE - if(app.DebugSettingsOn() && (app.GetGameSettingsDebugMask()&(1L<GetDisplayName(); - } + PlayerInfo *info = BuildPlayerInfo(player); - int voiceStatus = 0; - if(player != NULL && player->HasVoice() ) - { - if( player->IsMutedByLocalUser(m_iPad) ) - { - // Muted image - voiceStatus = 3; - } - else if( player->IsTalking() ) - { - // Talking image - voiceStatus = 2; - } - else - { - // Not talking image - voiceStatus = 1; - } - } - - m_playersVoiceState[i] = voiceStatus; - m_playersColourState[i] = app.GetPlayerColour( m_players[i] ); - m_playerNames[i] = playerName; - m_playerList.addItem( playerName, app.GetPlayerColour( m_players[i] ), voiceStatus); + m_players.push_back(info); + m_playerList.addItem(info->m_name, info->m_colorState, info->m_voiceStatus); } } @@ -98,6 +59,12 @@ UIScene_InGameInfoMenu::UIScene_InGameInfoMenu(int iPad, void *initData, UILayer #endif } +UIScene_InGameInfoMenu::~UIScene_InGameInfoMenu() +{ + // Delete player infos + for (int i = 0; i < m_players.size(); i++) { delete m_players[i]; } +} + wstring UIScene_InGameInfoMenu::getMoviePath() { if(app.GetLocalPlayerCount() > 1) @@ -126,8 +93,7 @@ void UIScene_InGameInfoMenu::updateTooltips() if(CGameNetworkManager::usingAdhocMode()) keyX = -1; #endif - - INetworkPlayer *selectedPlayer = g_NetworkManager.GetPlayerBySmallId( m_players[ m_playerList.getCurrentSelection() ] ); + INetworkPlayer *selectedPlayer = g_NetworkManager.GetPlayerBySmallId(m_players[m_playerList.getCurrentSelection()]->m_smallId); int keyA = -1; Minecraft *pMinecraft = Minecraft::GetInstance(); @@ -198,52 +164,20 @@ void UIScene_InGameInfoMenu::handleReload() { DWORD playerCount = g_NetworkManager.GetPlayerCount(); - m_playersCount = 0; + // Remove all player info + for (int i = 0; i < m_players.size(); i++) { delete m_players[i]; } + m_players.clear(); + for(DWORD i = 0; i < playerCount; ++i) { INetworkPlayer *player = g_NetworkManager.GetPlayerByIndex( i ); if( player != NULL ) { - m_players[i] = player->GetSmallId(); - ++m_playersCount; - - wstring playerName = L""; -#ifndef _CONTENT_PACKAGE - if(app.DebugSettingsOn() && (app.GetGameSettingsDebugMask()&(1L<GetDisplayName(); - } - - int voiceStatus = 0; - if(player != NULL && player->HasVoice() ) - { - if( player->IsMutedByLocalUser(m_iPad) ) - { - // Muted image - voiceStatus = 3; - } - else if( player->IsTalking() ) - { - // Talking image - voiceStatus = 2; - } - else - { - // Not talking image - voiceStatus = 1; - } - } + PlayerInfo *info = BuildPlayerInfo(player); - m_playersVoiceState[i] = voiceStatus; - m_playersColourState[i] = app.GetPlayerColour( m_players[i] ); - m_playerNames[i] = playerName; - m_playerList.addItem( playerName, app.GetPlayerColour( m_players[i] ), voiceStatus); + m_players.push_back(info); + m_playerList.addItem(info->m_name, info->m_colorState, info->m_voiceStatus); } } @@ -270,63 +204,36 @@ void UIScene_InGameInfoMenu::tick() { UIScene::tick(); - for(DWORD i = 0; i < m_playersCount; ++i) + // Update players by index + for(DWORD i = 0; i < m_players.size(); ++i) { INetworkPlayer *player = g_NetworkManager.GetPlayerByIndex( i ); - if( player != NULL ) + if(player != NULL) { - m_players[i] = player->GetSmallId(); - int voiceStatus = 0; - if(player != NULL && player->HasVoice() ) - { - if( player->IsMutedByLocalUser(m_iPad) ) - { - // Muted image - voiceStatus = 3; - } - else if( player->IsTalking() ) - { - // Talking image - voiceStatus = 2; - } - else - { - // Not talking image - voiceStatus = 1; - } - } - - if(voiceStatus != m_playersVoiceState[i]) - { - m_playersVoiceState[i] = voiceStatus; - m_playerList.setVOIPIcon( i, voiceStatus ); - } + PlayerInfo *info = BuildPlayerInfo(player); - short icon = app.GetPlayerColour( m_players[i] ); + m_players[i]->m_smallId = info->m_smallId; - if(icon != m_playersColourState[i]) + if(info->m_voiceStatus != m_players[i]->m_voiceStatus) { - m_playersColourState[i] = icon; - m_playerList.setPlayerIcon( i, (int)app.GetPlayerColour( m_players[i] ) ); + m_players[i]->m_voiceStatus = info->m_voiceStatus; + m_playerList.setVOIPIcon(i, info->m_voiceStatus); } - - wstring playerName = L""; -#ifndef _CONTENT_PACKAGE - if(app.DebugSettingsOn() && (app.GetGameSettingsDebugMask()&(1L<m_colorState != m_players[i]->m_colorState) { - playerName = L"WWWWWWWWWWWWWWWW"; + m_players[i]->m_colorState = info->m_colorState; + m_playerList.setPlayerIcon(i, info->m_colorState); } - else -#endif - { - playerName = player->GetDisplayName(); - } - if(playerName.compare( m_playerNames[i] ) != 0 ) + + if(info->m_name.compare( m_players[i]->m_name ) != 0 ) { - m_playerList.setButtonLabel(i, playerName); - m_playerNames[i] = playerName; + m_playerList.setButtonLabel(i, info->m_name); + m_players[i]->m_name = info->m_name; } + + delete info; } } } @@ -357,7 +264,7 @@ void UIScene_InGameInfoMenu::handleInput(int iPad, int key, bool repeat, bool pr UINT uiIDA[2]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_InGameInfoMenu::MustSignInReturnedPSN,this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_InGameInfoMenu::MustSignInReturnedPSN,this); } else #endif @@ -373,9 +280,9 @@ void UIScene_InGameInfoMenu::handleInput(int iPad, int key, bool repeat, bool pr #else - if(pressed && m_playerList.hasFocus() && (m_playerList.getItemCount() > 0) && (m_playerList.getCurrentSelection() < m_playersCount) ) + if(pressed && m_playerList.hasFocus() && (m_playerList.getItemCount() > 0) && (m_playerList.getCurrentSelection() < m_players.size()) ) { - INetworkPlayer *player = g_NetworkManager.GetPlayerBySmallId(m_players[m_playerList.getCurrentSelection()]); + INetworkPlayer *player = g_NetworkManager.GetPlayerBySmallId(m_players[m_playerList.getCurrentSelection()]->m_smallId); if( player != NULL ) { PlayerUID uid = player->GetUID(); @@ -428,7 +335,7 @@ void UIScene_InGameInfoMenu::handlePress(F64 controlId, F64 childId) break; case eControl_GamePlayers: int currentSelection = (int)childId; - INetworkPlayer *selectedPlayer = g_NetworkManager.GetPlayerBySmallId( m_players[ currentSelection ] ); + INetworkPlayer *selectedPlayer = g_NetworkManager.GetPlayerBySmallId(m_players[currentSelection]->m_smallId); Minecraft *pMinecraft = Minecraft::GetInstance(); shared_ptr localPlayer = pMinecraft->localplayers[m_iPad]; @@ -448,20 +355,20 @@ void UIScene_InGameInfoMenu::handlePress(F64 controlId, F64 childId) { InGamePlayerOptionsInitData *pInitData = new InGamePlayerOptionsInitData(); pInitData->iPad = m_iPad; - pInitData->networkSmallId = m_players[ currentSelection ]; - pInitData->playerPrivileges = app.GetPlayerPrivileges(m_players[ currentSelection ] ); + pInitData->networkSmallId = m_players[currentSelection]->m_smallId; + pInitData->playerPrivileges = app.GetPlayerPrivileges(m_players[currentSelection]->m_smallId); ui.NavigateToScene(m_iPad,eUIScene_InGamePlayerOptionsMenu,pInitData); } else if(selectedPlayer->IsLocal() != TRUE && selectedPlayer->IsSameSystem(g_NetworkManager.GetHostPlayer()) != TRUE) { // Only ops will hit this, can kick anyone not local and not local to the host BYTE *smallId = new BYTE(); - *smallId = m_players[currentSelection]; + *smallId = m_players[currentSelection]->m_smallId; UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestMessageBox(IDS_UNLOCK_KICK_PLAYER_TITLE, IDS_UNLOCK_KICK_PLAYER, uiIDA, 2, m_iPad,&UIScene_InGameInfoMenu::KickPlayerReturned,smallId,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_UNLOCK_KICK_PLAYER_TITLE, IDS_UNLOCK_KICK_PLAYER, uiIDA, 2, m_iPad,&UIScene_InGameInfoMenu::KickPlayerReturned,smallId); } } break; @@ -480,71 +387,53 @@ void UIScene_InGameInfoMenu::handleFocusChange(F64 controlId, F64 childId) void UIScene_InGameInfoMenu::OnPlayerChanged(void *callbackParam, INetworkPlayer *pPlayer, bool leaving) { + app.DebugPrintf(" Player \"%ls\" %s (smallId: %d)\n", pPlayer->GetOnlineName(), leaving ? "leaving" : "joining", pPlayer->GetSmallId()); + UIScene_InGameInfoMenu *scene = (UIScene_InGameInfoMenu *)callbackParam; bool playerFound = false; int foundIndex = 0; - for(int i = 0; i < scene->m_playersCount; ++i) + for(int i = 0; i < scene->m_players.size(); ++i) { - if(!playerFound && scene->m_players[i] == pPlayer->GetSmallId() ) + if(!playerFound && scene->m_players[i]->m_smallId == pPlayer->GetSmallId() ) { if( scene->m_playerList.getCurrentSelection() == scene->m_playerList.getItemCount() - 1 ) { scene->m_playerList.setCurrentSelection( scene->m_playerList.getItemCount() - 2 ); } - // Player removed + + // Player found playerFound = true; foundIndex = i; } } - if( playerFound ) - { - --scene->m_playersCount; - scene->m_playersVoiceState[scene->m_playersCount] = 0; - scene->m_playersColourState[scene->m_playersCount] = 0; - scene->m_playerNames[scene->m_playersCount] = L""; - scene->m_playerList.removeItem(scene->m_playersCount); - } + if (leaving && !playerFound) app.DebugPrintf(" Error: Player \"%ls\" leaving but not found in list\n", pPlayer->GetOnlineName()); + if (!leaving && playerFound) app.DebugPrintf(" Error: Player \"%ls\" joining but already in list\n", pPlayer->GetOnlineName()); - if( !playerFound ) + // If the player was found remove them (even if they're joining, they'll be added again later) + if(playerFound) { - // Player added - scene->m_players[scene->m_playersCount] = pPlayer->GetSmallId(); - ++scene->m_playersCount; + app.DebugPrintf(" Player \"%ls\" found, removing\n", pPlayer->GetOnlineName()); - wstring playerName = L""; -#ifndef _CONTENT_PACKAGE - if(app.DebugSettingsOn() && (app.GetGameSettingsDebugMask()&(1L<GetDisplayName(); - } + // Remove player info + delete scene->m_players[foundIndex]; + scene->m_players.erase(scene->m_players.begin() + foundIndex); - int voiceStatus = 0; - if(pPlayer != NULL && pPlayer->HasVoice() ) - { - if( pPlayer->IsMutedByLocalUser(scene->m_iPad) ) - { - // Muted image - voiceStatus = 3; - } - else if( pPlayer->IsTalking() ) - { - // Talking image - voiceStatus = 2; - } - else - { - // Not talking image - voiceStatus = 1; - } - } + // Remove player from list + scene->m_playerList.removeItem(foundIndex); + } - scene->m_playerList.addItem( playerName, app.GetPlayerColour( scene->m_players[scene->m_playersCount - 1] ), voiceStatus); + // If the player is joining + if(!leaving) + { + app.DebugPrintf(" Player \"%ls\" not found, adding\n", pPlayer->GetOnlineName()); + + PlayerInfo *info = scene->BuildPlayerInfo(pPlayer); + scene->m_players.push_back(info); + + // Note that the tick updates buttons every tick so it's only really important that we + // add the button (not the order or content) + scene->m_playerList.addItem(info->m_name, info->m_colorState, info->m_voiceStatus); } } @@ -566,6 +455,50 @@ int UIScene_InGameInfoMenu::KickPlayerReturned(void *pParam,int iPad,C4JStorage: return 0; } +UIScene_InGameInfoMenu::PlayerInfo *UIScene_InGameInfoMenu::BuildPlayerInfo(INetworkPlayer *player) +{ + PlayerInfo *info = new PlayerInfo(); + info->m_smallId = player->GetSmallId(); + + wstring playerName = L""; +#ifndef _CONTENT_PACKAGE + if(app.DebugSettingsOn() && (app.GetGameSettingsDebugMask()&(1L<GetDisplayName(); + } + + int voiceStatus = 0; + if(player != NULL && player->HasVoice() ) + { + if( player->IsMutedByLocalUser(m_iPad) ) + { + // Muted image + voiceStatus = 3; + } + else if( player->IsTalking() ) + { + // Talking image + voiceStatus = 2; + } + else + { + // Not talking image + voiceStatus = 1; + } + } + + info->m_voiceStatus = voiceStatus; + info->m_colorState = app.GetPlayerColour(info->m_smallId); + info->m_name = playerName; + + return info; +} + #if defined __PS3__ || defined __PSVITA__ int UIScene_InGameInfoMenu::MustSignInReturnedPSN(void *pParam,int iPad,C4JStorage::EMessageResult result) { @@ -596,10 +529,10 @@ int UIScene_InGameInfoMenu::ViewInvites_SignInReturned(void *pParam,bool bContin int ret = sceNpBasicRecvMessageCustom(SCE_NP_BASIC_MESSAGE_MAIN_TYPE_INVITE, SCE_NP_BASIC_RECV_MESSAGE_OPTIONS_INCLUDE_BOOTABLE, SYS_MEMORY_CONTAINER_ID_INVALID); app.DebugPrintf("sceNpBasicRecvMessageCustom return %d ( %08x )\n", ret, ret); #else // __PSVITA__ - PSVITA_STUBBED; + SQRNetworkManager_Vita::RecvInviteGUI(); #endif } } return 0; } -#endif +#endif \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_InGameInfoMenu.h b/Minecraft.Client/Common/UI/UIScene_InGameInfoMenu.h index 94966fa3..464c83a0 100644 --- a/Minecraft.Client/Common/UI/UIScene_InGameInfoMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_InGameInfoMenu.h @@ -10,13 +10,22 @@ private: eControl_GameOptions, eControl_GamePlayers, }; + + typedef struct _PlayerInfo + { + byte m_smallId; + char m_voiceStatus; + short m_colorState; + wstring m_name; + + } PlayerInfo; bool m_isHostPlayer; - int m_playersCount; - BYTE m_players[MINECRAFT_NET_MAX_PLAYERS]; // An array of QNet small-id's - char m_playersVoiceState[MINECRAFT_NET_MAX_PLAYERS]; - short m_playersColourState[MINECRAFT_NET_MAX_PLAYERS]; - wstring m_playerNames[MINECRAFT_NET_MAX_PLAYERS]; + //int m_playersCount; + vector m_players; // A vector of player info structs + //char m_playersVoiceState[MINECRAFT_NET_MAX_PLAYERS]; + //short m_playersColourState[MINECRAFT_NET_MAX_PLAYERS]; + //wstring m_playerNames[MINECRAFT_NET_MAX_PLAYERS]; UIControl_Button m_buttonGameOptions; UIControl_PlayerList m_playerList; @@ -28,6 +37,7 @@ private: UI_END_MAP_ELEMENTS_AND_NAMES() public: UIScene_InGameInfoMenu(int iPad, void *initData, UILayer *parentLayer); + virtual ~UIScene_InGameInfoMenu(); virtual EUIScene getSceneType() { return eUIScene_InGameInfoMenu;} virtual void updateTooltips(); @@ -55,6 +65,8 @@ public: static void OnPlayerChanged(void *callbackParam, INetworkPlayer *pPlayer, bool leaving); private: + PlayerInfo *BuildPlayerInfo(INetworkPlayer *player); + #if defined(__PS3__) || defined (__PSVITA__) || defined(__ORBIS__) static int MustSignInReturnedPSN(void *pParam,int iPad,C4JStorage::EMessageResult result); static int ViewInvites_SignInReturned(void *pParam,bool bContinue, int iPad); diff --git a/Minecraft.Client/Common/UI/UIScene_InGamePlayerOptionsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_InGamePlayerOptionsMenu.cpp index 6eb22b09..d7196849 100644 --- a/Minecraft.Client/Common/UI/UIScene_InGamePlayerOptionsMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_InGamePlayerOptionsMenu.cpp @@ -232,6 +232,92 @@ void UIScene_InGamePlayerOptionsMenu::updateTooltips() ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK); } +void UIScene_InGamePlayerOptionsMenu::handleReload() +{ + UIScene::handleReload(); + + INetworkPlayer *localPlayer = g_NetworkManager.GetLocalPlayerByUserIndex( m_iPad ); + INetworkPlayer *editingPlayer = g_NetworkManager.GetPlayerBySmallId(m_networkSmallId); + + bool trustPlayers = app.GetGameHostOption(eGameHostOption_TrustPlayers) != 0; + bool cheats = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0; + m_editingSelf = (localPlayer != NULL && localPlayer == editingPlayer); + + if( m_editingSelf || trustPlayers || editingPlayer->IsHost()) + { + removeControl( &m_checkboxes[eControl_BuildAndMine], true ); + removeControl( &m_checkboxes[eControl_UseDoorsAndSwitches], true ); + removeControl( &m_checkboxes[eControl_UseContainers], true ); + removeControl( &m_checkboxes[eControl_AttackPlayers], true ); + removeControl( &m_checkboxes[eControl_AttackAnimals], true ); + } + + if(m_editingSelf) + { +#if (defined(_CONTENT_PACKAGE) || defined(_FINAL_BUILD) && !defined(_DEBUG_MENUS_ENABLED)) + removeControl( &m_checkboxes[eControl_Op], true ); +#endif + + removeControl( &m_buttonKick, true ); + removeControl( &m_checkboxes[eControl_CheatTeleport], true ); + + if(cheats) + { + bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0; + if(inCreativeMode) + { + removeControl( &m_checkboxes[eControl_HostFly], true ); + removeControl( &m_checkboxes[eControl_HostHunger], true ); + } + } + else + { + removeControl( &m_checkboxes[eControl_HostInvisible], true ); + removeControl( &m_checkboxes[eControl_HostFly], true ); + removeControl( &m_checkboxes[eControl_HostHunger], true ); + } + } + else + { + if(!localPlayer->IsHost()) + { + removeControl( &m_checkboxes[eControl_Op], true ); + } + + if(localPlayer->IsHost() && cheats ) + { + + bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0; + if(inCreativeMode) + { + removeControl( &m_checkboxes[eControl_HostFly], true ); + removeControl( &m_checkboxes[eControl_HostHunger], true ); + } + } + else + { + removeControl( &m_checkboxes[eControl_HostInvisible], true ); + removeControl( &m_checkboxes[eControl_HostFly], true ); + removeControl( &m_checkboxes[eControl_HostHunger], true ); + removeControl( &m_checkboxes[eControl_CheatTeleport], true ); + } + + + // Can only kick people if they are not local, and not local to the host + if(editingPlayer->IsLocal() == TRUE || editingPlayer->IsSameSystem(g_NetworkManager.GetHostPlayer()) == TRUE) + { + removeControl( &m_buttonKick, true ); + } + } + + short colourIndex = app.GetPlayerColour( m_networkSmallId ); + IggyDataValue result; + IggyDataValue value[1]; + value[0].type = IGGY_DATATYPE_number; + value[0].number = colourIndex; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetPlayerIcon , 1 , value ); +} + void UIScene_InGamePlayerOptionsMenu::tick() { UIScene::tick(); @@ -352,7 +438,7 @@ void UIScene_InGamePlayerOptionsMenu::handlePress(F64 controlId, F64 childId) uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestMessageBox(IDS_UNLOCK_KICK_PLAYER_TITLE, IDS_UNLOCK_KICK_PLAYER, uiIDA, 2, m_iPad,&UIScene_InGamePlayerOptionsMenu::KickPlayerReturned,smallId,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_UNLOCK_KICK_PLAYER_TITLE, IDS_UNLOCK_KICK_PLAYER, uiIDA, 2, m_iPad,&UIScene_InGamePlayerOptionsMenu::KickPlayerReturned,smallId); } break; }; diff --git a/Minecraft.Client/Common/UI/UIScene_InGamePlayerOptionsMenu.h b/Minecraft.Client/Common/UI/UIScene_InGamePlayerOptionsMenu.h index 78e30f6e..e78b6748 100644 --- a/Minecraft.Client/Common/UI/UIScene_InGamePlayerOptionsMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_InGamePlayerOptionsMenu.h @@ -62,6 +62,8 @@ public: virtual EUIScene getSceneType() { return eUIScene_InGamePlayerOptionsMenu;} virtual void updateTooltips(); + virtual void handleReload(); + protected: // TODO: This should be pure virtual in this class virtual wstring getMoviePath(); diff --git a/Minecraft.Client/Common/UI/UIScene_InGameSaveManagementMenu.cpp b/Minecraft.Client/Common/UI/UIScene_InGameSaveManagementMenu.cpp index b0dbc59f..fa2c7e61 100644 --- a/Minecraft.Client/Common/UI/UIScene_InGameSaveManagementMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_InGameSaveManagementMenu.cpp @@ -442,7 +442,7 @@ void UIScene_InGameSaveManagementMenu::handlePress(F64 controlId, F64 childId) UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TOOLTIPS_DELETESAVE, IDS_TEXT_DELETE_SAVE, uiIDA, 2,m_iPad,&UIScene_InGameSaveManagementMenu::DeleteSaveDialogReturned,this, app.GetStringTable(),NULL,0,true); + ui.RequestErrorMessage(IDS_TOOLTIPS_DELETESAVE, IDS_TEXT_DELETE_SAVE, uiIDA, 2,m_iPad,&UIScene_InGameSaveManagementMenu::DeleteSaveDialogReturned,this); ui.PlayUISFX(eSFX_Press); break; diff --git a/Minecraft.Client/Common/UI/UIScene_Intro.cpp b/Minecraft.Client/Common/UI/UIScene_Intro.cpp index 2c50612f..7fc435b2 100644 --- a/Minecraft.Client/Common/UI/UIScene_Intro.cpp +++ b/Minecraft.Client/Common/UI/UIScene_Intro.cpp @@ -11,12 +11,16 @@ UIScene_Intro::UIScene_Intro(int iPad, void *initData, UILayer *parentLayer) : U m_bAnimationEnded = false; bool bSkipESRB = false; + bool bChina = false; #if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) bSkipESRB = app.GetProductSKU() != e_sku_SCEA; #elif defined(_XBOX) || defined(_DURANGO) bSkipESRB = !ProfileManager.LocaleIsUSorCanada(); #endif +#ifdef _DURANGO + bChina = ProfileManager.LocaleIsChina(); +#endif // 4J Stu - These map to values in the Actionscript #ifdef _WINDOWS64 int platformIdx = 0; @@ -33,13 +37,17 @@ UIScene_Intro::UIScene_Intro(int iPad, void *initData, UILayer *parentLayer) : U #endif IggyDataValue result; - IggyDataValue value[2]; + IggyDataValue value[3]; value[0].type = IGGY_DATATYPE_number; value[0].number = platformIdx; value[1].type = IGGY_DATATYPE_boolean; - value[1].boolval = bSkipESRB; - IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetIntroPlatform , 2 , value ); + value[1].boolval = bChina?true:bSkipESRB; + + value[2].type = IGGY_DATATYPE_boolean; + value[2].boolval = bChina; + + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetIntroPlatform , 3 , value ); #ifdef __PSVITA__ // initialise vita touch controls with ids diff --git a/Minecraft.Client/Common/UI/UIScene_JoinMenu.cpp b/Minecraft.Client/Common/UI/UIScene_JoinMenu.cpp index cad86dce..c036f7bf 100644 --- a/Minecraft.Client/Common/UI/UIScene_JoinMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_JoinMenu.cpp @@ -140,6 +140,10 @@ void UIScene_JoinMenu::tick() { m_labelValues[eLabel_GameType].init( app.GetString(IDS_CREATIVE) ); } + else if(option == GameType::ADVENTURE->getId()) + { + m_labelValues[eLabel_GameType].init( app.GetString(IDS_ADVENTURE) ); + } else { m_labelValues[eLabel_GameType].init( app.GetString(IDS_SURVIVAL) ); @@ -209,9 +213,9 @@ void UIScene_JoinMenu::tick() UINT uiIDA[1]; uiIDA[0] = IDS_CONFIRM_OK; #ifdef _XBOX_ONE - ui.RequestMessageBox( IDS_CONNECTION_FAILED, IDS_DISCONNECTED_SERVER_QUIT, uiIDA,1,m_iPad,ErrorDialogReturned,this, app.GetStringTable()); + ui.RequestErrorMessage( IDS_CONNECTION_FAILED, IDS_DISCONNECTED_SERVER_QUIT, uiIDA,1,m_iPad,ErrorDialogReturned,this); #else - ui.RequestMessageBox( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA,1,m_iPad,ErrorDialogReturned,this, app.GetStringTable()); + ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA,1,m_iPad,ErrorDialogReturned,this); #endif } @@ -307,7 +311,7 @@ void UIScene_JoinMenu::handlePress(F64 controlId, F64 childId) ui.PlayUISFX(eSFX_Press); #ifdef _DURANGO - ProfileManager.CheckMultiplayerPrivileges(m_iPad, true, &checkPrivilegeCallback, this); + ProfileManager.CheckMultiplayerPrivileges(m_iPad, true, &checkPrivilegeCallback, (LPVOID)GetCallbackUniqueId()); #else StartSharedLaunchFlow(); #endif @@ -331,15 +335,18 @@ void UIScene_JoinMenu::handleFocusChange(F64 controlId, F64 childId) #ifdef _DURANGO void UIScene_JoinMenu::checkPrivilegeCallback(LPVOID lpParam, bool hasPrivilege, int iPad) { - UIScene_JoinMenu* pClass = (UIScene_JoinMenu*)lpParam; + UIScene_JoinMenu* pClass = (UIScene_JoinMenu*)ui.GetSceneFromCallbackId((size_t)lpParam); - if(hasPrivilege) - { - pClass->StartSharedLaunchFlow(); -} - else + if(pClass) { - pClass->m_bIgnoreInput = false; + if(hasPrivilege) + { + pClass->StartSharedLaunchFlow(); + } + else + { + pClass->m_bIgnoreInput = false; + } } } #endif @@ -355,7 +362,7 @@ void UIScene_JoinMenu::StartSharedLaunchFlow() //ProfileManager.RequestSignInUI(false, false, false, true, false,&UIScene_JoinMenu::StartGame_SignInReturned, this,ProfileManager.GetPrimaryPad()); SignInInfo info; info.Func = &UIScene_JoinMenu::StartGame_SignInReturned; - info.lpParam = this; + info.lpParam = (LPVOID)GetCallbackUniqueId(); info.requireOnline = true; ui.NavigateToScene(ProfileManager.GetPrimaryPad(),eUIScene_QuadrantSignin,&info); } @@ -363,24 +370,27 @@ void UIScene_JoinMenu::StartSharedLaunchFlow() int UIScene_JoinMenu::StartGame_SignInReturned(void *pParam,bool bContinue, int iPad) { - UIScene_JoinMenu* pClass = (UIScene_JoinMenu*)pParam; + UIScene_JoinMenu* pClass = (UIScene_JoinMenu*)ui.GetSceneFromCallbackId((size_t)pParam); - if(bContinue==true) + if(pClass) { - // It's possible that the player has not signed in - they can back out - if(ProfileManager.IsSignedIn(iPad)) + if(bContinue==true) { - JoinGame(pClass); + // It's possible that the player has not signed in - they can back out + if(ProfileManager.IsSignedIn(iPad)) + { + JoinGame(pClass); + } + else + { + pClass->m_bIgnoreInput=false; + } } else { pClass->m_bIgnoreInput=false; } } - else - { - pClass->m_bIgnoreInput=false; - } return 0; } @@ -442,7 +452,7 @@ void UIScene_JoinMenu::JoinGame(UIScene_JoinMenu* pClass) // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive if the npAvailability isn't SCE_OK UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPadNotSignedInLive, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPadNotSignedInLive); } else #endif @@ -450,7 +460,7 @@ void UIScene_JoinMenu::JoinGame(UIScene_JoinMenu* pClass) pClass->m_bIgnoreInput=false; UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad()); } return; } @@ -495,7 +505,7 @@ void UIScene_JoinMenu::JoinGame(UIScene_JoinMenu* pClass) pClass->m_bIgnoreInput=false; UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad()); } else { @@ -530,7 +540,7 @@ void UIScene_JoinMenu::JoinGame(UIScene_JoinMenu* pClass) { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_CONNECTION_FAILED, exitReasonStringId, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_CONNECTION_FAILED, exitReasonStringId, uiIDA,1,ProfileManager.GetPrimaryPad()); exitReasonStringId = -1; ui.NavigateToHomeMenu(); diff --git a/Minecraft.Client/Common/UI/UIScene_LanguageSelector.cpp b/Minecraft.Client/Common/UI/UIScene_LanguageSelector.cpp new file mode 100644 index 00000000..e9dc7eb9 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_LanguageSelector.cpp @@ -0,0 +1,129 @@ +#include "stdafx.h" +#include "UI.h" +#include "UIScene_LanguageSelector.h" + +// strings for buttons in the list +const unsigned int UIScene_LanguageSelector::m_uiHTPButtonNameA[]= +{ + HAS_LANGUAGE_SYSTEM(IDS_LANG_SYSTEM) + HAS_LANGUAGE_EN_US(IDS_LANG_ENGLISH) + HAS_LANGUAGE_DE_DE(IDS_LANG_GERMAN) + HAS_LANGUAGE_ES_ES(IDS_LANG_SPANISH_SPAIN) + HAS_LANGUAGE_ES_MX(IDS_LANG_SPANISH_LATIN_AMERICA) + HAS_LANGUAGE_FR_FR(IDS_LANG_FRENCH) + HAS_LANGUAGE_IT_IT(IDS_LANG_ITALIAN) + HAS_LANGUAGE_PT_PT(IDS_LANG_PORTUGUESE_PORTUGAL) + HAS_LANGUAGE_PT_BR(IDS_LANG_PORTUGUESE_BRAZIL) + HAS_LANGUAGE_JA_JP(IDS_LANG_JAPANESE) + HAS_LANGUAGE_KO_KR(IDS_LANG_KOREAN) + HAS_LANGUAGE_CN_TW(IDS_LANG_CHINESE_TRADITIONAL) + HAS_LANGUAGE_CN_CN(IDS_LANG_CHINESE_SIMPLIFIED) + HAS_LANGUAGE_DA_DK(IDS_LANG_DANISH) + HAS_LANGUAGE_FI_FI(IDS_LANG_FINISH) + HAS_LANGUAGE_NL_NL(IDS_LANG_DUTCH) + HAS_LANGUAGE_PL_PL(IDS_LANG_POLISH) + HAS_LANGUAGE_RU_RU(IDS_LANG_RUSSIAN) + HAS_LANGUAGE_SV_SE(IDS_LANG_SWEDISH) + HAS_LANGUAGE_NB_NO(IDS_LANG_NORWEGIAN) + HAS_LANGUAGE_SK_SK(IDS_LANG_SLOVAK) + HAS_LANGUAGE_CZ_CZ(IDS_LANG_CZECH) + HAS_LANGUAGE_EL_GR(IDS_LANG_GREEK) + HAS_LANGUAGE_TR_TR(IDS_LANG_TURKISH) +}; + + +UIScene_LanguageSelector::UIScene_LanguageSelector(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) +{ + // Setup all the Iggy references we need for this scene + initialiseMovie(); + + m_buttonListHowTo.init(eControl_Buttons); + + for(unsigned int i = 0; i < eLanguageSelector_MAX; ++i) + { + m_buttonListHowTo.addItem( m_uiHTPButtonNameA[i] , i); + } +} + +wstring UIScene_LanguageSelector::getMoviePath() +{ + if (app.GetLocalPlayerCount() > 1) return L"LanguagesMenuSplit"; + else return L"LanguagesMenu"; +} + +void UIScene_LanguageSelector::updateTooltips() +{ + ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT, IDS_TOOLTIPS_BACK); +} + +void UIScene_LanguageSelector::updateComponents() +{ + bool bNotInGame=(Minecraft::GetInstance()->level==NULL); + if(bNotInGame) + { + m_parentLayer->showComponent(m_iPad,eUIComponent_Panorama,true); + m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,true); + } + else + { + m_parentLayer->showComponent(m_iPad,eUIComponent_Panorama,false); + + if( app.GetLocalPlayerCount() == 1 ) m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,true); + else m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,false); + } +} + +void UIScene_LanguageSelector::handleReload() +{ + for (unsigned int i = 0; i < eLanguageSelector_MAX; ++i) + { + m_buttonListHowTo.addItem( m_uiHTPButtonNameA[i], i); + } +} + +void UIScene_LanguageSelector::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) +{ + //app.DebugPrintf("UIScene_DebugOverlay handling input for pad %d, key %d, down- %s, pressed- %s, released- %s\n", iPad, key, down?"TRUE":"FALSE", pressed?"TRUE":"FALSE", released?"TRUE":"FALSE"); + ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released); + + switch(key) + { + case ACTION_MENU_CANCEL: + if(pressed) + { + navigateBack(); + //ui.NavigateToScene(m_iPad, eUIScene_SettingsOptionsMenu); + } + break; + case ACTION_MENU_OK: +#ifdef __ORBIS__ + case ACTION_MENU_TOUCHPAD_PRESS: +#endif + sendInputToMovie(key, repeat, pressed, released); + break; + case ACTION_MENU_UP: + case ACTION_MENU_DOWN: + case ACTION_MENU_PAGEUP: + case ACTION_MENU_PAGEDOWN: + sendInputToMovie(key, repeat, pressed, released); + break; + } +} + +void UIScene_LanguageSelector::handlePress(F64 controlId, F64 childId) +{ + if( (int)controlId == eControl_Buttons ) + { + //CD - Added for audio + ui.PlayUISFX(eSFX_Press); + + int newLanguage, newLocale; + newLanguage = uiLangMap[(int)childId]; + newLocale = uiLocaleMap[(int)childId]; + + app.SetMinecraftLanguage(m_iPad, newLanguage); + app.SetMinecraftLocale(m_iPad, newLocale); + + app.CheckGameSettingsChanged(true, m_iPad); + } +} diff --git a/Minecraft.Client/Common/UI/UIScene_LanguageSelector.h b/Minecraft.Client/Common/UI/UIScene_LanguageSelector.h new file mode 100644 index 00000000..b5c3d4c6 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_LanguageSelector.h @@ -0,0 +1,165 @@ +#pragma once + +#include "UIScene.h" + +#define HAS_LANGUAGE_SYSTEM(exp) exp, + +#define HAS_LANGUAGE_EN_US(exp) exp, +#define HAS_LANGUAGE_DE_DE(exp) exp, +#define HAS_LANGUAGE_ES_ES(exp) exp, +#define HAS_LANGUAGE_ES_MX(exp) exp, +#define HAS_LANGUAGE_FR_FR(exp) exp, +#define HAS_LANGUAGE_IT_IT(exp) exp, +#define HAS_LANGUAGE_PT_PT(exp) exp, +#define HAS_LANGUAGE_PT_BR(exp) exp, +#define HAS_LANGUAGE_JA_JP(exp) exp, +#define HAS_LANGUAGE_KO_KR(exp) exp, +#define HAS_LANGUAGE_CN_TW(exp) exp, + +#ifdef _DURANGO +#define HAS_LANGUAGE_CN_CN(exp) exp, +#define HAS_LANGUAGE_SK_SK(exp) exp, +#define HAS_LANGUAGE_CZ_CZ(exp) exp, +#else +#define HAS_LANGUAGE_CN_CN(exp) +#define HAS_LANGUAGE_SK_SK(exp) +#define HAS_LANGUAGE_CZ_CZ(exp) +#endif + +#define HAS_LANGUAGE_DA_DK(exp) exp, +#define HAS_LANGUAGE_FI_FI(exp) exp, +#define HAS_LANGUAGE_NL_NL(exp) exp, +#define HAS_LANGUAGE_PL_PL(exp) exp, +#define HAS_LANGUAGE_RU_RU(exp) exp, +#define HAS_LANGUAGE_SV_SE(exp) exp, +#define HAS_LANGUAGE_NB_NO(exp) exp, +#define HAS_LANGUAGE_EL_GR(exp) exp, + +#if defined(__ORBIS__) || defined(__PS3__) || defined(__PSVITA__) +#define HAS_LANGUAGE_TR_TR(exp) exp, +#else +#define HAS_LANGUAGE_TR_TR(exp) +#endif + +class UIScene_LanguageSelector : public UIScene +{ +public: + enum ELangButtons + { + eLanguageSelector_LabelNone = -1, + HAS_LANGUAGE_SYSTEM(eLanguageSelector_system) + HAS_LANGUAGE_EN_US(eLanguageSelector_EN_US) + HAS_LANGUAGE_DE_DE(eLanguageSelector_DE_DE) + HAS_LANGUAGE_ES_ES(eLanguageSelector_ES_ES) + HAS_LANGUAGE_ES_MX(eLanguageSelector_ES_MX) + HAS_LANGUAGE_FR_FR(eLanguageSelector_FR_FR) + HAS_LANGUAGE_IT_IT(eLanguageSelector_IT_IT) + HAS_LANGUAGE_PT_PT(eLanguageSelector_PT_PT) + HAS_LANGUAGE_PT_BR(eLanguageSelector_PT_BR) + HAS_LANGUAGE_JA_JP(eLanguageSelector_JA_JP) + HAS_LANGUAGE_KO_KR(eLanguageSelector_KO_KR) + HAS_LANGUAGE_CN_TW(eLanguageSelector_CN_TW) + HAS_LANGUAGE_CN_CN(eLanguageSelector_CN_CN) + HAS_LANGUAGE_DA_DK(eLanguageSelector_DA_DK) + HAS_LANGUAGE_FI_FI(eLanguageSelector_FI_FI) + HAS_LANGUAGE_NL_NL(eLanguageSelector_NL_NL) + HAS_LANGUAGE_PL_PL(eLanguageSelector_PL_PL) + HAS_LANGUAGE_RU_RU(eLanguageSelector_RU_RU) + HAS_LANGUAGE_SV_SE(eLanguageSelector_SV_SE) + HAS_LANGUAGE_NB_NO(eLanguageSelector_NB_NO) + HAS_LANGUAGE_SK_SK(eLanguageSelector_SK_SK) + HAS_LANGUAGE_CZ_CZ(eLanguageSelector_CZ_CZ) + HAS_LANGUAGE_EL_GR(eLanguageSelector_EL_GR) + HAS_LANGUAGE_TR_TR(eLanguageSelector_TR_TR) + eLanguageSelector_MAX + }; + +private: + enum EControls + { + eControl_Buttons, + }; + + static const unsigned int m_uiHTPButtonNameA[eLanguageSelector_MAX]; + + UIControl_DynamicButtonList m_buttonListHowTo; + UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) + UI_MAP_ELEMENT( m_buttonListHowTo, "HowToList") + UI_END_MAP_ELEMENTS_AND_NAMES() + +public: + UIScene_LanguageSelector(int iPad, void *initData, UILayer *parentLayer); + + virtual EUIScene getSceneType() { return eUIScene_LanguageSelector; } + + virtual void updateTooltips(); + virtual void updateComponents(); + + virtual void handleReload(); +protected: + // TODO: This should be pure virtual in this class + virtual wstring getMoviePath(); + +public: + // INPUT + virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled); + +protected: + void handlePress(F64 controlId, F64 childId); +}; + +const int uiLangMap[UIScene_LanguageSelector::eLanguageSelector_MAX] = +{ + HAS_LANGUAGE_SYSTEM(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_EN_US(XC_LANGUAGE_ENGLISH) + HAS_LANGUAGE_DE_DE(XC_LANGUAGE_GERMAN) + HAS_LANGUAGE_ES_ES(XC_LANGUAGE_SPANISH) + HAS_LANGUAGE_ES_MX(XC_LANGUAGE_SPANISH) + HAS_LANGUAGE_FR_FR(XC_LANGUAGE_FRENCH) + HAS_LANGUAGE_IT_IT(XC_LANGUAGE_ITALIAN) + HAS_LANGUAGE_PT_PT(XC_LANGUAGE_PORTUGUESE) + HAS_LANGUAGE_PT_BR(XC_LANGUAGE_PORTUGUESE) + HAS_LANGUAGE_JA_JP(XC_LANGUAGE_JAPANESE) + HAS_LANGUAGE_KO_KR(XC_LANGUAGE_KOREAN) + HAS_LANGUAGE_CN_TW(XC_LANGUAGE_TCHINESE) + HAS_LANGUAGE_CN_CN(XC_LANGUAGE_SCHINESE) + HAS_LANGUAGE_DA_DK(XC_LANGUAGE_DANISH) + HAS_LANGUAGE_FI_FI(XC_LANGUAGE_FINISH) + HAS_LANGUAGE_NL_NL(XC_LANGUAGE_DUTCH) + HAS_LANGUAGE_PL_PL(XC_LANGUAGE_POLISH) + HAS_LANGUAGE_RU_RU(XC_LANGUAGE_RUSSIAN) + HAS_LANGUAGE_SV_SE(XC_LANGUAGE_SWEDISH) + HAS_LANGUAGE_NB_NO(XC_LANGUAGE_BNORWEGIAN) + HAS_LANGUAGE_SK_SK(XC_LANGUAGE_SLOVAK) + HAS_LANGUAGE_CZ_CZ(XC_LANGUAGE_CZECH) + HAS_LANGUAGE_EL_GR(XC_LANGUAGE_GREEK) + HAS_LANGUAGE_TR_TR(XC_LANGUAGE_TURKISH) +}; + +const int uiLocaleMap[UIScene_LanguageSelector::eLanguageSelector_MAX] = +{ + HAS_LANGUAGE_SYSTEM(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_EN_US(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_DE_DE(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_ES_ES(XC_LOCALE_SPAIN) + HAS_LANGUAGE_ES_MX(XC_LOCALE_LATIN_AMERICA) + HAS_LANGUAGE_FR_FR(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_IT_IT(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_PT_PT(XC_LOCALE_PORTUGAL) + HAS_LANGUAGE_PT_BR(XC_LOCALE_BRAZIL) + HAS_LANGUAGE_JA_JP(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_KO_KR(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_CN_TW(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_CN_CN(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_DA_DK(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_FI_FI(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_NL_NL(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_PL_PL(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_RU_RU(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_SV_SE(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_NB_NO(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_SK_SK(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_CZ_CZ(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_EL_GR(MINECRAFT_LANGUAGE_DEFAULT) + HAS_LANGUAGE_TR_TR(MINECRAFT_LANGUAGE_DEFAULT) +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp index 6d472b50..d6f89832 100644 --- a/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp @@ -25,10 +25,28 @@ UIScene_LaunchMoreOptionsMenu::UIScene_LaunchMoreOptionsMenu(int iPad, void *ini m_labelWorldOptions.init(app.GetString(IDS_WORLD_OPTIONS)); IggyDataValue result; + +#ifdef _LARGE_WORLDS + IggyDataValue value[2]; + value[0].type = IGGY_DATATYPE_number; + value[0].number = m_params->bGenerateOptions ? 0 : 1; + value[1].type = IGGY_DATATYPE_boolean; + value[1].boolval = false; + if(m_params->currentWorldSize == e_worldSize_Classic || + m_params->currentWorldSize == e_worldSize_Small || + m_params->currentWorldSize == e_worldSize_Medium ) + { + // don't show the increase world size stuff if we're already large, or the size is unknown. + value[1].boolval = true; + } + + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetMenuType , 2 , value ); +#else IggyDataValue value[1]; value[0].type = IGGY_DATATYPE_number; - value[0].number = m_params->bGenerateOptions?0:1; + value[0].number = m_params->bGenerateOptions ? 0 : 1; IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetMenuType , 1 , value ); +#endif m_bMultiplayerAllowed = ProfileManager.IsSignedInLive( m_params->iPad ) && ProfileManager.AllowedToPlayMultiplayer(m_params->iPad); @@ -54,11 +72,15 @@ UIScene_LaunchMoreOptionsMenu::UIScene_LaunchMoreOptionsMenu(int iPad, void *ini } else if(!m_params->bOnlineGame) { - m_checkboxes[eLaunchCheckbox_InviteOnly].SetEnable(false); m_checkboxes[eLaunchCheckbox_AllowFoF].SetEnable(false); } + // Init cheats + m_bUpdateCheats = false; + // Update cheat checkboxes + UpdateCheats(); + m_checkboxes[eLaunchCheckbox_Online].init(app.GetString(IDS_ONLINE_GAME),eLaunchCheckbox_Online,bOnlineGame); m_checkboxes[eLaunchCheckbox_InviteOnly].init(app.GetString(IDS_INVITE_ONLY),eLaunchCheckbox_InviteOnly,bInviteOnly); m_checkboxes[eLaunchCheckbox_AllowFoF].init(app.GetString(IDS_ALLOWFRIENDSOFFRIENDS),eLaunchCheckbox_AllowFoF,bAllowFriendsOfFriends); @@ -72,19 +94,35 @@ UIScene_LaunchMoreOptionsMenu::UIScene_LaunchMoreOptionsMenu(int iPad, void *ini m_checkboxes[eLaunchCheckbox_FlatWorld].init(app.GetString(IDS_SUPERFLAT_WORLD),eLaunchCheckbox_FlatWorld,m_params->bFlatWorld); m_checkboxes[eLaunchCheckbox_BonusChest].init(app.GetString(IDS_BONUS_CHEST),eLaunchCheckbox_BonusChest,m_params->bBonusChest); - if(m_loadedResolution == eSceneResolution_1080) - { + m_checkboxes[eLaunchCheckbox_KeepInventory].init(app.GetString(IDS_KEEP_INVENTORY), eLaunchCheckbox_KeepInventory, m_params->bKeepInventory); + m_checkboxes[eLaunchCheckbox_MobSpawning].init(app.GetString(IDS_MOB_SPAWNING), eLaunchCheckbox_MobSpawning, m_params->bDoMobSpawning); + m_checkboxes[eLaunchCheckbox_MobLoot].init(app.GetString(IDS_MOB_LOOT), eLaunchCheckbox_MobLoot, m_params->bDoMobLoot); + m_checkboxes[eLaunchCheckbox_MobGriefing].init(app.GetString(IDS_MOB_GRIEFING), eLaunchCheckbox_MobGriefing, m_params->bMobGriefing); + m_checkboxes[eLaunchCheckbox_TileDrops].init(app.GetString(IDS_TILE_DROPS), eLaunchCheckbox_TileDrops, m_params->bDoTileDrops); + m_checkboxes[eLaunchCheckbox_NaturalRegeneration].init(app.GetString(IDS_NATURAL_REGEN), eLaunchCheckbox_NaturalRegeneration, m_params->bNaturalRegeneration); + m_checkboxes[eLaunchCheckbox_DayLightCycle].init(app.GetString(IDS_DAYLIGHT_CYCLE), eLaunchCheckbox_DayLightCycle, m_params->bDoDaylightCycle); + + m_labelGameOptions.init( app.GetString(IDS_GAME_OPTIONS) ); + m_labelSeed.init(app.GetString(IDS_CREATE_NEW_WORLD_SEED)); + m_labelRandomSeed.init(app.GetString(IDS_CREATE_NEW_WORLD_RANDOM_SEED)); + m_editSeed.init(m_params->seed, eControl_EditSeed); + #ifdef _LARGE_WORLDS - m_labelGameOptions.init( app.GetString(IDS_GAME_OPTIONS) ); - m_labelSeed.init(app.GetString(IDS_CREATE_NEW_WORLD_SEED)); - m_labelRandomSeed.init(app.GetString(IDS_CREATE_NEW_WORLD_RANDOM_SEED)); - m_editSeed.init(m_params->seed, eControl_EditSeed); - m_labelWorldSize.init(app.GetString(IDS_WORLD_SIZE)); - m_sliderWorldSize.init(app.GetString(m_iWorldSizeTitleA[m_params->worldSize]),eControl_WorldSize,0,3,m_params->worldSize); - - m_checkboxes[eLaunchCheckbox_DisableSaving].init( app.GetString(IDS_DISABLE_SAVING), eLaunchCheckbox_DisableSaving, m_params->bDisableSaving ); -#endif + m_labelWorldSize.init(app.GetString(IDS_WORLD_SIZE)); + m_sliderWorldSize.init(app.GetString(m_iWorldSizeTitleA[m_params->worldSize]),eControl_WorldSize,0,3,m_params->worldSize); + + m_checkboxes[eLaunchCheckbox_DisableSaving].init( app.GetString(IDS_DISABLE_SAVING), eLaunchCheckbox_DisableSaving, m_params->bDisableSaving ); + + if(m_params->currentWorldSize != e_worldSize_Unknown) + { + m_labelWorldResize.init(app.GetString(IDS_INCREASE_WORLD_SIZE)); + int min= int(m_params->currentWorldSize)-1; + int max=3; + int curr = int(m_params->newWorldSize)-1; + m_sliderWorldResize.init(app.GetString(m_iWorldSizeTitleA[curr]),eControl_WorldResize,min,max,curr); + m_checkboxes[eLaunchCheckbox_WorldResizeType].init(app.GetString(IDS_INCREASE_WORLD_SIZE_OVERWRITE_EDGES),eLaunchCheckbox_WorldResizeType,m_params->newWorldSizeOverwriteEdges); } +#endif // Only the Xbox 360 needs a reset nether // 4J-PB - PS3 needs it now @@ -92,6 +130,8 @@ UIScene_LaunchMoreOptionsMenu::UIScene_LaunchMoreOptionsMenu(int iPad, void *ini // if(!m_params->bGenerateOptions) removeControl( &m_checkboxes[eLaunchCheckbox_ResetNether], false ); // #endif + m_tabIndex = m_params->bGenerateOptions ? TAB_WORLD_OPTIONS : TAB_GAME_OPTIONS; + // set the default text #ifdef _LARGE_WORLDS wstring wsText=L""; @@ -114,36 +154,37 @@ UIScene_LaunchMoreOptionsMenu::UIScene_LaunchMoreOptionsMenu(int iPad, void *ini wchar_t startTags[64]; swprintf(startTags,64,L"",app.GetHTMLColour(eHTMLColor_White)); wsText= startTags + wsText; - m_labelDescription.init(wsText); + if (m_tabIndex == TAB_WORLD_OPTIONS) + m_labelDescription_WorldOptions.setLabel(wsText); + else + m_labelDescription_GameOptions.setLabel(wsText); addTimer(GAME_CREATE_ONLINE_TIMER_ID,GAME_CREATE_ONLINE_TIMER_TIME); #ifdef __PSVITA__ + // initialise vita tab controls with ids + m_TouchTabWorld.init(ETouchInput_TabWorld); + m_TouchTabGame.init(ETouchInput_TabGame); + ui.TouchBoxRebuild(this); #endif m_bIgnoreInput = false; - m_tabIndex = 0; } void UIScene_LaunchMoreOptionsMenu::updateTooltips() { int changeTabTooltip = -1; -#ifdef _LARGE_WORLDS - if (m_loadedResolution == eSceneResolution_1080 && m_params->bGenerateOptions) + // Set tooltip for change tab (only two tabs) + if (m_tabIndex == TAB_GAME_OPTIONS) { - // Set tooltip for change tab (only two tabs) - if (m_tabIndex == 0) - { - changeTabTooltip = IDS_GAME_OPTIONS; - } - else - { - changeTabTooltip = IDS_WORLD_OPTIONS; - } + changeTabTooltip = IDS_WORLD_OPTIONS; + } + else + { + changeTabTooltip = IDS_GAME_OPTIONS; } -#endif // If there's a change tab tooltip, left bumper symbol should show but not the text (-2) int lb = changeTabTooltip == -1 ? -1 : -2; @@ -154,11 +195,11 @@ void UIScene_LaunchMoreOptionsMenu::updateTooltips() void UIScene_LaunchMoreOptionsMenu::updateComponents() { m_parentLayer->showComponent(m_iPad,eUIComponent_Panorama,true); -#ifdef _LARGE_WORLDS - m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,true); -#else +//#ifdef _LARGE_WORLDS +// m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,true); +//#else m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,false); -#endif +//#endif } wstring UIScene_LaunchMoreOptionsMenu::getMoviePath() @@ -186,6 +227,19 @@ void UIScene_LaunchMoreOptionsMenu::tick() m_bMultiplayerAllowed = bMultiplayerAllowed; } + + // Check cheats + if (m_bUpdateCheats) + { + UpdateCheats(); + m_bUpdateCheats = false; + } + // check online + if(m_bUpdateOnline) + { + UpdateOnline(); + m_bUpdateOnline = false; + } } void UIScene_LaunchMoreOptionsMenu::handleDestroy() @@ -227,7 +281,7 @@ void UIScene_LaunchMoreOptionsMenu::handleInput(int iPad, int key, bool repeat, if ( pressed && controlHasFocus( checkboxOnline->getId()) && !checkboxOnline->IsEnabled() ) { UINT uiIDA[1] = { IDS_CONFIRM_OK }; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad); } } #endif @@ -245,7 +299,7 @@ void UIScene_LaunchMoreOptionsMenu::handleInput(int iPad, int key, bool repeat, break; case ACTION_MENU_LEFT_SCROLL: case ACTION_MENU_RIGHT_SCROLL: - if(pressed && m_loadedResolution == eSceneResolution_1080) + if(pressed) { // Toggle tab index m_tabIndex = m_tabIndex == 0 ? 1 : 0; @@ -257,6 +311,39 @@ void UIScene_LaunchMoreOptionsMenu::handleInput(int iPad, int key, bool repeat, } } +#ifdef __PSVITA__ +void UIScene_LaunchMoreOptionsMenu::handleTouchInput(unsigned int iPad, S32 x, S32 y, int iId, bool bPressed, bool bRepeat, bool bReleased) +{ + if(bPressed) + { + switch(iId) + { + case ETouchInput_TabWorld: + case ETouchInput_TabGame: + // Toggle tab index + int iNewTabIndex = (iId == ETouchInput_TabWorld) ? 0 : 1; + if(m_tabIndex != iNewTabIndex) + { + m_tabIndex = iNewTabIndex; + updateTooltips(); + IggyDataValue result; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcChangeTab , 0 , NULL ); + } + ui.TouchBoxRebuild(this); + break; + } + } +} + +UIControl* UIScene_LaunchMoreOptionsMenu::GetMainPanel() +{ + if(m_tabIndex == 0) + return &m_worldOptions; + else + return &m_gameOptions; +} +#endif + void UIScene_LaunchMoreOptionsMenu::handleCheckboxToggled(F64 controlId, bool selected) { //CD - Added for audio @@ -266,6 +353,7 @@ void UIScene_LaunchMoreOptionsMenu::handleCheckboxToggled(F64 controlId, bool se { case eLaunchCheckbox_Online: m_params->bOnlineGame = selected; + m_bUpdateOnline = true; break; case eLaunchCheckbox_InviteOnly: m_params->bInviteOnly = selected; @@ -287,6 +375,7 @@ void UIScene_LaunchMoreOptionsMenu::handleCheckboxToggled(F64 controlId, bool se break; case eLaunchCheckbox_HostPrivileges: m_params->bHostPrivileges = selected; + m_bUpdateCheats = true; break; case eLaunchCheckbox_ResetNether: m_params->bResetNether = selected; @@ -300,9 +389,34 @@ void UIScene_LaunchMoreOptionsMenu::handleCheckboxToggled(F64 controlId, bool se case eLaunchCheckbox_BonusChest: m_params->bBonusChest = selected; break; +#ifdef _LARGE_WORLDS case eLaunchCheckbox_DisableSaving: m_params->bDisableSaving = selected; break; + case eLaunchCheckbox_WorldResizeType: + m_params->newWorldSizeOverwriteEdges = selected; + break; +#endif + case eLaunchCheckbox_KeepInventory: + m_params->bKeepInventory = selected; + break; + case eLaunchCheckbox_MobSpawning: + m_params->bDoMobSpawning = selected; + break; + case eLaunchCheckbox_MobLoot: + m_params->bDoMobLoot = selected; + case eLaunchCheckbox_MobGriefing: + m_params->bMobGriefing = selected; + break; + case eLaunchCheckbox_TileDrops: + m_params->bDoTileDrops = selected; + break; + case eLaunchCheckbox_NaturalRegeneration: + m_params->bNaturalRegeneration = selected; + break; + case eLaunchCheckbox_DayLightCycle: + m_params->bDoDaylightCycle = selected; + break; }; } @@ -347,16 +461,43 @@ void UIScene_LaunchMoreOptionsMenu::handleFocusChange(F64 controlId, F64 childId case eLaunchCheckbox_BonusChest: stringId = IDS_GAMEOPTION_BONUS_CHEST; break; -#ifdef _LARGE_WORLDS + case eLaunchCheckbox_KeepInventory: + stringId = IDS_GAMEOPTION_KEEP_INVENTORY; + break; + case eLaunchCheckbox_MobSpawning: + stringId = IDS_GAMEOPTION_MOB_SPAWNING; + break; + case eLaunchCheckbox_MobLoot: + stringId = IDS_GAMEOPTION_MOB_LOOT; // PLACEHOLDER + break; + case eLaunchCheckbox_MobGriefing: + stringId = IDS_GAMEOPTION_MOB_GRIEFING; // PLACEHOLDER + break; + case eLaunchCheckbox_TileDrops: + stringId = IDS_GAMEOPTION_TILE_DROPS; + break; + case eLaunchCheckbox_NaturalRegeneration: + stringId = IDS_GAMEOPTION_NATURAL_REGEN; + break; + case eLaunchCheckbox_DayLightCycle: + stringId = IDS_GAMEOPTION_DAYLIGHT_CYCLE; + break; case eControl_EditSeed: stringId = IDS_GAMEOPTION_SEED; break; +#ifdef _LARGE_WORLDS case eControl_WorldSize: stringId = IDS_GAMEOPTION_WORLD_SIZE; break; + case eControl_WorldResize: + stringId = IDS_GAMEOPTION_INCREASE_WORLD_SIZE; + break; case eLaunchCheckbox_DisableSaving: stringId = IDS_GAMEOPTION_DISABLE_SAVING; break; + case eLaunchCheckbox_WorldResizeType: + stringId = IDS_GAMEOPTION_INCREASE_WORLD_SIZE_OVERWRITE_EDGES; + break; #endif }; @@ -368,9 +509,12 @@ void UIScene_LaunchMoreOptionsMenu::handleFocusChange(F64 controlId, F64 childId } wchar_t startTags[64]; swprintf(startTags,64,L"",app.GetHTMLColour(eHTMLColor_White)); - wsText= startTags + wsText; + wsText = startTags + wsText; - m_labelDescription.setLabel(wsText); + if (m_tabIndex == TAB_WORLD_OPTIONS) + m_labelDescription_WorldOptions.setLabel(wsText); + else + m_labelDescription_GameOptions.setLabel(wsText); } void UIScene_LaunchMoreOptionsMenu::handleTimerComplete(int id) @@ -405,8 +549,14 @@ int UIScene_LaunchMoreOptionsMenu::KeyboardCompleteSeedCallback(LPVOID lpParam,b // 4J HEG - No reason to set value if keyboard was cancelled if (bRes) { +#ifdef __PSVITA__ + //CD - Changed to 2048 [SCE_IME_MAX_TEXT_LENGTH] + uint16_t pchText[2048]; + ZeroMemory(pchText, 2048 * sizeof(uint16_t) ); +#else uint16_t pchText[128]; ZeroMemory(pchText, 128 * sizeof(uint16_t) ); +#endif InputManager.GetText(pchText); pClass->m_editSeed.setLabel((wchar_t *)pchText); pClass->m_params->seed = (wchar_t *)pchText; @@ -456,7 +606,50 @@ void UIScene_LaunchMoreOptionsMenu::handleSliderMove(F64 sliderId, F64 currentVa m_sliderWorldSize.handleSliderMove(value); m_params->worldSize = value; m_sliderWorldSize.setLabel(app.GetString(m_iWorldSizeTitleA[value])); +#endif + break; + case eControl_WorldResize: +#ifdef _LARGE_WORLDS + EGameHostOptionWorldSize changedSize = EGameHostOptionWorldSize(value+1); + if(changedSize >= m_params->currentWorldSize) + { + m_sliderWorldResize.handleSliderMove(value); + m_params->newWorldSize = EGameHostOptionWorldSize(value+1); + m_sliderWorldResize.setLabel(app.GetString(m_iWorldSizeTitleA[value])); + } #endif break; } } + +void UIScene_LaunchMoreOptionsMenu::UpdateCheats() +{ + bool cheatsOn = m_params->bHostPrivileges; + + m_checkboxes[eLaunchCheckbox_KeepInventory].SetEnable(cheatsOn); + m_checkboxes[eLaunchCheckbox_MobSpawning].SetEnable(cheatsOn); + m_checkboxes[eLaunchCheckbox_MobGriefing].SetEnable(cheatsOn); + m_checkboxes[eLaunchCheckbox_DayLightCycle].SetEnable(cheatsOn); + + if (!cheatsOn) + { + // Set defaults + m_params->bMobGriefing = true; + m_params->bKeepInventory = false; + m_params->bDoMobSpawning = true; + m_params->bDoDaylightCycle = true; + + m_checkboxes[eLaunchCheckbox_KeepInventory].setChecked(m_params->bKeepInventory); + m_checkboxes[eLaunchCheckbox_MobSpawning].setChecked(m_params->bDoMobSpawning); + m_checkboxes[eLaunchCheckbox_MobGriefing].setChecked(m_params->bMobGriefing); + m_checkboxes[eLaunchCheckbox_DayLightCycle].setChecked(m_params->bDoDaylightCycle); + } +} + +void UIScene_LaunchMoreOptionsMenu::UpdateOnline() +{ + bool bOnline = m_params->bOnlineGame; + + m_checkboxes[eLaunchCheckbox_InviteOnly].SetEnable(bOnline); + m_checkboxes[eLaunchCheckbox_AllowFoF].SetEnable(bOnline); +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.h b/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.h index 62d75115..367db10d 100644 --- a/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.h @@ -5,6 +5,9 @@ class UIScene_LaunchMoreOptionsMenu : public UIScene { private: + static const int TAB_WORLD_OPTIONS = 0; + static const int TAB_GAME_OPTIONS = 1; + enum EControls { // Add all checkboxes at the start as they also index into a checkboxes array @@ -21,81 +24,106 @@ private: eLaunchCheckbox_FlatWorld, eLaunchCheckbox_BonusChest, eLaunchCheckbox_DisableSaving, + eLaunchCheckbox_WorldResizeType, + eLaunchCheckbox_KeepInventory, + eLaunchCheckbox_MobSpawning, + eLaunchCheckbox_MobLoot, + eLaunchCheckbox_MobGriefing, + eLaunchCheckbox_TileDrops, + eLaunchCheckbox_NaturalRegeneration, + eLaunchCheckbox_DayLightCycle, eLaunchCheckboxes_Count, eControl_EditSeed, eControl_WorldSize, + eControl_WorldResize, + + eControl_Count }; +#ifdef __PSVITA__ + enum ETouchInput + { + ETouchInput_TabWorld = eControl_Count, + ETouchInput_TabGame, + + ETouchInput_Count + }; + UIControl_Touch m_TouchTabWorld, m_TouchTabGame; + UIControl m_controlWorldPanel, m_controlGamePanel; +#endif UIControl m_gameOptions, m_worldOptions; UIControl_CheckBox m_checkboxes[eLaunchCheckboxes_Count]; UIControl_Label m_labelWorldOptions, m_labelGameOptions, m_labelDescription; - UIControl_Label m_labelSeed, m_labelRandomSeed, m_labelWorldSize; + UIControl_HTMLLabel m_labelDescription_GameOptions, m_labelDescription_WorldOptions; + UIControl_Label m_labelSeed, m_labelRandomSeed, m_labelWorldSize, m_labelWorldResize; UIControl_TextInput m_editSeed; UIControl_Slider m_sliderWorldSize; - IggyName m_funcSetMenuType, m_funcChangeTab; + UIControl_Slider m_sliderWorldResize; + IggyName m_funcSetMenuType, m_funcChangeTab, m_funcSetDescription; UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) - if(m_loadedResolution == eSceneResolution_1080) - { - UI_MAP_ELEMENT( m_labelGameOptions, "LabelGame") - UI_MAP_ELEMENT( m_labelWorldOptions, "LabelWorld") - - UI_MAP_ELEMENT( m_gameOptions, "GameOptions") - UI_BEGIN_MAP_CHILD_ELEMENTS(m_gameOptions) - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_Online], "CheckboxOnline") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_InviteOnly], "CheckboxInviteOnly") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_AllowFoF], "CheckboxAllowFoF") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_PVP], "CheckboxPVP") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_TrustSystem], "CheckboxTrustSystem") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_FireSpreads], "CheckboxFireSpreads") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_TNT], "CheckboxTNT") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_HostPrivileges], "CheckboxHostPrivileges") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_ResetNether], "CheckboxResetNether") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_DisableSaving], "CheckboxDisableSaving") - UI_END_MAP_CHILD_ELEMENTS() - - UI_MAP_ELEMENT(m_worldOptions, "WorldOptions") - UI_BEGIN_MAP_CHILD_ELEMENTS(m_worldOptions) - UI_MAP_ELEMENT( m_labelSeed, "Seed") - UI_MAP_ELEMENT( m_editSeed, "EditSeed") - UI_MAP_ELEMENT( m_labelRandomSeed, "RandomSeed") - UI_MAP_ELEMENT( m_labelWorldSize, "WorldSize") - UI_MAP_ELEMENT( m_sliderWorldSize, "WorldSizeSlider") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_Structures], "CheckboxStructures") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_BonusChest], "CheckboxBonusChest") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_FlatWorld], "CheckboxFlatWorld") - UI_END_MAP_CHILD_ELEMENTS() - - UI_MAP_NAME( m_funcChangeTab, L"ChangeTab") - } - else - { + UI_MAP_ELEMENT( m_labelGameOptions, "LabelGame") + UI_MAP_ELEMENT( m_labelWorldOptions, "LabelWorld") + + UI_MAP_ELEMENT( m_gameOptions, "GameOptions") + UI_BEGIN_MAP_CHILD_ELEMENTS(m_gameOptions) +#ifdef __PSVITA__ + UI_MAP_ELEMENT( m_TouchTabGame, "TouchTabGame" ) +#endif + UI_MAP_ELEMENT( m_labelDescription_GameOptions, "Description_GameOptions") + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_Online], "CheckboxOnline") UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_InviteOnly], "CheckboxInviteOnly") UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_AllowFoF], "CheckboxAllowFoF") UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_PVP], "CheckboxPVP") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_TrustSystem], "CheckboxTrustSystem") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_FireSpreads], "CheckboxFireSpreads") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_TNT], "CheckboxTNT") UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_HostPrivileges], "CheckboxHostPrivileges") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_ResetNether], "CheckboxResetNether") + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_DayLightCycle], "CheckboxDayLightCycle") + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_KeepInventory], "CheckboxKeepInventory") + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_MobSpawning], "CheckboxMobSpawning") + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_MobGriefing], "CheckboxMobGriefing") + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_MobLoot], "CheckboxMobLoot") + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_TileDrops], "CheckboxTileDrops") + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_NaturalRegeneration], "CheckboxNaturalRegeneration") + UI_END_MAP_CHILD_ELEMENTS() + + UI_MAP_ELEMENT(m_worldOptions, "WorldOptions") + UI_BEGIN_MAP_CHILD_ELEMENTS(m_worldOptions) +#ifdef __PSVITA__ + UI_MAP_ELEMENT( m_TouchTabWorld, "TouchTabWorld" ) +#endif + UI_MAP_ELEMENT( m_labelDescription_WorldOptions, "Description_WorldOptions") + + UI_MAP_ELEMENT( m_labelSeed, "Seed") + UI_MAP_ELEMENT( m_editSeed, "EditSeed") + UI_MAP_ELEMENT( m_labelRandomSeed, "RandomSeed") + UI_MAP_ELEMENT( m_labelWorldSize, "WorldSize") + UI_MAP_ELEMENT( m_sliderWorldSize, "WorldSizeSlider") - UI_MAP_ELEMENT( m_labelWorldOptions, "WorldOptions") UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_Structures], "CheckboxStructures") - UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_FlatWorld], "CheckboxFlatWorld") UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_BonusChest], "CheckboxBonusChest") - } + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_FlatWorld], "CheckboxFlatWorld") + + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_ResetNether], "CheckboxResetNether") + + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_DisableSaving], "CheckboxDisableSaving") + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_TrustSystem], "CheckboxTrustSystem") + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_FireSpreads], "CheckboxFireSpreads") + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_TNT], "CheckboxTNT") - UI_MAP_ELEMENT( m_labelDescription, "Description") + UI_MAP_ELEMENT( m_labelWorldResize, "ResizeLabel") + UI_MAP_ELEMENT( m_sliderWorldResize, "ChangeWorldSizeSlider") + UI_MAP_ELEMENT( m_checkboxes[eLaunchCheckbox_WorldResizeType], "CheckboxResizeType") + UI_END_MAP_CHILD_ELEMENTS() + UI_MAP_NAME( m_funcChangeTab, L"ChangeTab") UI_MAP_NAME( m_funcSetMenuType, L"SetMenuType") UI_END_MAP_ELEMENTS_AND_NAMES() LaunchMoreOptionsMenuInitData *m_params; bool m_bMultiplayerAllowed; bool m_bIgnoreInput; - bool m_tabIndex; + int m_tabIndex; public: UIScene_LaunchMoreOptionsMenu(int iPad, void *initData, UILayer *parentLayer); @@ -122,4 +150,16 @@ public: protected: void handleCheckboxToggled(F64 controlId, bool selected); + +private: + bool m_bUpdateCheats; // If true, update cheats on next tick + void UpdateCheats(); + + bool m_bUpdateOnline; // If true, update online settings on next tick + void UpdateOnline(); + +#ifdef __PSVITA__ + virtual void handleTouchInput(unsigned int iPad, S32 x, S32 y, int iId, bool bPressed, bool bRepeat, bool bReleased); + virtual UIControl* GetMainPanel(); +#endif //__PSVITA__ }; diff --git a/Minecraft.Client/Common/UI/UIScene_LeaderboardsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_LeaderboardsMenu.cpp index 80db57f8..12b21905 100644 --- a/Minecraft.Client/Common/UI/UIScene_LeaderboardsMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_LeaderboardsMenu.cpp @@ -12,8 +12,8 @@ const int UIScene_LeaderboardsMenu::TitleIcons[UIScene_LeaderboardsMenu::NUM_LEADERBOARDS][7] = { { UIControl_LeaderboardList::e_ICON_TYPE_WALKED, UIControl_LeaderboardList::e_ICON_TYPE_FALLEN, Item::minecart_Id, Item::boat_Id, NULL }, - { Tile::dirt_Id, Tile::stoneBrick_Id, Tile::sand_Id, Tile::rock_Id, Tile::gravel_Id, Tile::clay_Id, Tile::obsidian_Id }, - { Item::egg_Id, Item::wheat_Id, Tile::mushroom1_Id, Tile::reeds_Id, Item::milk_Id, Tile::pumpkin_Id, NULL }, + { Tile::dirt_Id, Tile::cobblestone_Id, Tile::sand_Id, Tile::stone_Id, Tile::gravel_Id, Tile::clay_Id, Tile::obsidian_Id }, + { Item::egg_Id, Item::wheat_Id, Tile::mushroom_brown_Id, Tile::reeds_Id, Item::bucket_milk_Id, Tile::pumpkin_Id, NULL }, { UIControl_LeaderboardList::e_ICON_TYPE_ZOMBIE, UIControl_LeaderboardList::e_ICON_TYPE_SKELETON, UIControl_LeaderboardList::e_ICON_TYPE_CREEPER, UIControl_LeaderboardList::e_ICON_TYPE_SPIDER, UIControl_LeaderboardList::e_ICON_TYPE_SPIDERJOKEY, UIControl_LeaderboardList::e_ICON_TYPE_ZOMBIEPIGMAN, UIControl_LeaderboardList::e_ICON_TYPE_SLIME }, }; const UIScene_LeaderboardsMenu::LeaderboardDescriptor UIScene_LeaderboardsMenu::LEADERBOARD_DESCRIPTORS[UIScene_LeaderboardsMenu::NUM_LEADERBOARDS][4] = { @@ -43,7 +43,8 @@ const UIScene_LeaderboardsMenu::LeaderboardDescriptor UIScene_LeaderboardsMenu:: }, }; -UIScene_LeaderboardsMenu::UIScene_LeaderboardsMenu(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) +UIScene_LeaderboardsMenu::UIScene_LeaderboardsMenu(int iPad, void *initData, UILayer *parentLayer) + : UIScene(iPad, parentLayer), m_interface(LeaderboardManager::Instance()) { // Setup all the Iggy references we need for this scene initialiseMovie(); @@ -60,8 +61,6 @@ UIScene_LeaderboardsMenu::UIScene_LeaderboardsMenu(int iPad, void *initData, UIL // Alert the app the we want to be informed of ethernet connections app.SetLiveLinkRequired( true ); - LeaderboardManager::Instance()->OpenSession(); - //GetFriends(); m_currentLeaderboard = 0; @@ -86,9 +85,6 @@ UIScene_LeaderboardsMenu::UIScene_LeaderboardsMenu(int iPad, void *initData, UIL UIScene_LeaderboardsMenu::~UIScene_LeaderboardsMenu() { - LeaderboardManager::Instance()->CancelOperation(); - LeaderboardManager::Instance()->CloseSession(); - // Alert the app the we no longer want to be informed of ethernet connections app.SetLiveLinkRequired( false ); } @@ -159,6 +155,12 @@ wstring UIScene_LeaderboardsMenu::getMoviePath() return L"LeaderboardMenu"; } +void UIScene_LeaderboardsMenu::tick() +{ + UIScene::tick(); + m_interface.tick(); +} + void UIScene_LeaderboardsMenu::handleReload() { // We don't allow this in splitscreen, so just go back @@ -457,16 +459,19 @@ void UIScene_LeaderboardsMenu::ReadStats(int startIndex) switch (filtermode) { case LeaderboardManager::eFM_TopRank: - LeaderboardManager::Instance()->ReadStats_TopRank( this, - m_currentDifficulty, (LeaderboardManager::EStatsType) m_currentLeaderboard, - m_newEntryIndex, m_newReadSize - ); + { + m_interface.ReadStats_TopRank( + this, + m_currentDifficulty, (LeaderboardManager::EStatsType) m_currentLeaderboard, + m_newEntryIndex, m_newReadSize + ); + } break; case LeaderboardManager::eFM_MyScore: { PlayerUID uid; ProfileManager.GetXUID(ProfileManager.GetPrimaryPad(),&uid, true); - LeaderboardManager::Instance()->ReadStats_MyScore( this, + m_interface.ReadStats_MyScore( this, m_currentDifficulty, (LeaderboardManager::EStatsType) m_currentLeaderboard, uid /*ignored on PS3*/, m_newReadSize @@ -477,7 +482,7 @@ void UIScene_LeaderboardsMenu::ReadStats(int startIndex) { PlayerUID uid; ProfileManager.GetXUID(ProfileManager.GetPrimaryPad(),&uid, true); - LeaderboardManager::Instance()->ReadStats_Friends( this, + m_interface.ReadStats_Friends( this, m_currentDifficulty, (LeaderboardManager::EStatsType) m_currentLeaderboard, uid /*ignored on PS3*/, m_newEntryIndex, m_newReadSize @@ -501,14 +506,11 @@ bool UIScene_LeaderboardsMenu::OnStatsReadComplete(LeaderboardManager::eStatsRet bool ret; //app.DebugPrintf("Leaderboards read %d stats\n", numResults); - if (retIn == LeaderboardManager::eStatsReturn_Success) - { - m_numStats = numResults; - m_stats = results; - ret = RetrieveStats(); - } - else ret = true; - + + m_numStats = numResults; + m_stats = results; + ret = RetrieveStats(); + //else LeaderboardManager::Instance()->SetStatsRetrieved(false); PopulateLeaderboard(retIn); @@ -632,7 +634,7 @@ bool UIScene_LeaderboardsMenu::RetrieveStats() } break; } - } + } } // If not set, default to start index @@ -1021,7 +1023,7 @@ void UIScene_LeaderboardsMenu::handleTimerComplete(int id) // If they have, bring up the PSN warning and exit from the leaderboards unsigned int uiIDA[1]; uiIDA[0]=IDS_OK; - C4JStorage::EMessageResult result = ui.RequestMessageBox( IDS_CONNECTION_LOST, g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_LIVE_NO_EXIT), uiIDA,1,ProfileManager.GetPrimaryPad(),UIScene_LeaderboardsMenu::ExitLeaderboards,this, app.GetStringTable()); + C4JStorage::EMessageResult result = ui.RequestErrorMessage( IDS_CONNECTION_LOST, g_NetworkManager.CorrectErrorIDS(IDS_CONNECTION_LOST_LIVE_NO_EXIT), uiIDA,1,ProfileManager.GetPrimaryPad(),UIScene_LeaderboardsMenu::ExitLeaderboards,this); } #endif break; diff --git a/Minecraft.Client/Common/UI/UIScene_LeaderboardsMenu.h b/Minecraft.Client/Common/UI/UIScene_LeaderboardsMenu.h index 20bf0002..bcd4fe87 100644 --- a/Minecraft.Client/Common/UI/UIScene_LeaderboardsMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_LeaderboardsMenu.h @@ -1,7 +1,8 @@ #pragma once #include "UIScene.h" -#include "..\Leaderboards\LeaderboardManager.h" +// #include "..\Leaderboards\LeaderboardManager.h" +#include "..\Leaderboards\LeaderboardInterface.h" class UIScene_LeaderboardsMenu : public UIScene, public LeaderboardReadListener { @@ -72,6 +73,8 @@ private: bool m_bPopulatedOnce; bool m_bReady; + LeaderboardInterface m_interface; + UIControl_LeaderboardList m_listEntries; UIControl_Label m_labelFilter, m_labelLeaderboard, m_labelEntries, m_labelInfo; UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) @@ -105,7 +108,8 @@ protected: virtual wstring getMoviePath(); public: - void handleReload(); + virtual void tick(); + virtual void handleReload(); // INPUT virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled); diff --git a/Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp b/Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp index 1c07e540..d4d83228 100644 --- a/Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp @@ -33,24 +33,27 @@ int UIScene_LoadMenu::m_iDifficultyTitleSettingA[4]= int UIScene_LoadMenu::LoadSaveDataThumbnailReturned(LPVOID lpParam,PBYTE pbThumbnail,DWORD dwThumbnailBytes) { - UIScene_LoadMenu *pClass= (UIScene_LoadMenu *)lpParam; + UIScene_LoadMenu *pClass= (UIScene_LoadMenu *)ui.GetSceneFromCallbackId((size_t)lpParam); - app.DebugPrintf("Received data for a thumbnail\n"); - - if(pbThumbnail && dwThumbnailBytes) + if(pClass) { - pClass->registerSubstitutionTexture(pClass->m_thumbnailName,pbThumbnail,dwThumbnailBytes); + app.DebugPrintf("Received data for a thumbnail\n"); - pClass->m_pbThumbnailData = pbThumbnail; - pClass->m_uiThumbnailSize = dwThumbnailBytes; - pClass->m_bSaveThumbnailReady = true; - } - else - { - app.DebugPrintf("Thumbnail data is NULL, or has size 0\n"); - pClass->m_bThumbnailGetFailed = true; + if(pbThumbnail && dwThumbnailBytes) + { + pClass->registerSubstitutionTexture(pClass->m_thumbnailName,pbThumbnail,dwThumbnailBytes); + + pClass->m_pbThumbnailData = pbThumbnail; + pClass->m_uiThumbnailSize = dwThumbnailBytes; + pClass->m_bSaveThumbnailReady = true; + } + else + { + app.DebugPrintf("Thumbnail data is NULL, or has size 0\n"); + pClass->m_bThumbnailGetFailed = true; + } + pClass->m_bRetrievingSaveThumbnail = false; } - pClass->m_bRetrievingSaveThumbnail = false; return 0; } @@ -90,8 +93,10 @@ UIScene_LoadMenu::UIScene_LoadMenu(int iPad, void *initData, UILayer *parentLaye m_iSaveGameInfoIndex=params->iSaveGameInfoIndex; m_levelGen = params->levelGen; - m_bGameModeSurvival=true; + m_bGameModeCreative = false; + m_iGameModeId = GameType::SURVIVAL->getId(); m_bHasBeenInCreative = false; + m_bIsSaveOwner = true; m_bSaveThumbnailReady = false; m_bRetrievingSaveThumbnail = true; @@ -103,6 +108,7 @@ UIScene_LoadMenu::UIScene_LoadMenu(int iPad, void *initData, UILayer *parentLaye m_bRebuildTouchBoxes = false; m_bThumbnailGetFailed = false; m_seed = 0; + m_bIsCorrupt = false; m_bMultiplayerAllowed = ProfileManager.IsSignedInLive( m_iPad ) && ProfileManager.AllowedToPlayMultiplayer(m_iPad); // 4J-PB - read the settings for the online flag. We'll only save this setting if the user changed it. @@ -136,29 +142,23 @@ UIScene_LoadMenu::UIScene_LoadMenu(int iPad, void *initData, UILayer *parentLaye } } - -#if defined _XBOX_ONE || defined __ORBIS__ || defined _WINDOWS64 - if(getSceneResolution() == eSceneResolution_1080) - { - // Set up online game checkbox - bool bOnlineGame = m_MoreOptionsParams.bOnlineGame; - m_checkboxOnline.SetEnable(true); + // Set up online game checkbox + bool bOnlineGame = m_MoreOptionsParams.bOnlineGame; + m_checkboxOnline.SetEnable(true); - // 4J-PB - to stop an offline game being able to select the online flag - if(ProfileManager.IsSignedInLive(m_iPad) == false) - { - m_checkboxOnline.SetEnable(false); - } - - if(m_MoreOptionsParams.bOnlineSettingChangedBySystem) - { - m_checkboxOnline.SetEnable(false); - bOnlineGame = false; - } + // 4J-PB - to stop an offline game being able to select the online flag + if(ProfileManager.IsSignedInLive(m_iPad) == false) + { + m_checkboxOnline.SetEnable(false); + } - m_checkboxOnline.init(app.GetString(IDS_ONLINE_GAME), eControl_OnlineGame, bOnlineGame); + if(m_MoreOptionsParams.bOnlineSettingChangedBySystem) + { + m_checkboxOnline.SetEnable(false); + bOnlineGame = false; } -#endif + + m_checkboxOnline.init(app.GetString(IDS_ONLINE_GAME), eControl_OnlineGame, bOnlineGame); // Level gen if(m_levelGen) @@ -185,8 +185,15 @@ UIScene_LoadMenu::UIScene_LoadMenu(int iPad, void *initData, UILayer *parentLaye } } // Set this level as created in creative mode, so that people can't use the themed worlds as an easy way to get achievements - m_bHasBeenInCreative = true; - m_labelCreatedMode.setLabel( app.GetString(IDS_CREATED_IN_CREATIVE) ); + m_bHasBeenInCreative = m_levelGen->getLevelHasBeenInCreative(); + if(m_bHasBeenInCreative) + { + m_labelCreatedMode.setLabel( app.GetString(IDS_CREATED_IN_CREATIVE) ); + } + else + { + m_labelCreatedMode.setLabel( app.GetString(IDS_CREATED_IN_SURVIVAL) ); + } } else { @@ -225,17 +232,19 @@ UIScene_LoadMenu::UIScene_LoadMenu(int iPad, void *initData, UILayer *parentLaye #ifdef _DURANGO // On Durango, we have an extra flag possible with LoadSaveDataThumbnail, which if true will force the loading of this thumbnail even if the save data isn't sync'd from // the cloud at this stage. This could mean that there could be a pretty large delay before the callback happens, in this case. - C4JStorage::ESaveGameState eLoadStatus=StorageManager.LoadSaveDataThumbnail(&pSaveDetails->SaveInfoA[(int)m_iSaveGameInfoIndex],&LoadSaveDataThumbnailReturned,this,true); + C4JStorage::ESaveGameState eLoadStatus=StorageManager.LoadSaveDataThumbnail(&pSaveDetails->SaveInfoA[(int)m_iSaveGameInfoIndex],&LoadSaveDataThumbnailReturned,(LPVOID)GetCallbackUniqueId(),true); #else - C4JStorage::ESaveGameState eLoadStatus=StorageManager.LoadSaveDataThumbnail(&pSaveDetails->SaveInfoA[(int)m_iSaveGameInfoIndex],&LoadSaveDataThumbnailReturned,this); + C4JStorage::ESaveGameState eLoadStatus=StorageManager.LoadSaveDataThumbnail(&pSaveDetails->SaveInfoA[(int)m_iSaveGameInfoIndex],&LoadSaveDataThumbnailReturned,(LPVOID)GetCallbackUniqueId()); #endif m_bShowTimer = true; } #if defined(_DURANGO) m_labelGameName.init(params->saveDetails->UTF16SaveName); #else - - m_labelGameName.init(params->saveDetails->UTF8SaveName); + wchar_t wSaveName[128]; + ZeroMemory(wSaveName, 128 * sizeof(wchar_t) ); + mbstowcs(wSaveName, params->saveDetails->UTF8SaveName, strlen(params->saveDetails->UTF8SaveName)+1); // plus null + m_labelGameName.init(wSaveName); #endif #endif } @@ -457,6 +466,26 @@ void UIScene_LoadMenu::tick() m_MoreOptionsParams.bTNT = app.GetGameHostOption(uiHostOptions,eGameHostOption_TNT)>0?TRUE:FALSE; m_MoreOptionsParams.bHostPrivileges = app.GetGameHostOption(uiHostOptions,eGameHostOption_CheatsEnabled)>0?TRUE:FALSE; m_MoreOptionsParams.bDisableSaving = app.GetGameHostOption(uiHostOptions,eGameHostOption_DisableSaving)>0?TRUE:FALSE; + m_MoreOptionsParams.currentWorldSize = (EGameHostOptionWorldSize)app.GetGameHostOption(uiHostOptions,eGameHostOption_WorldSize); + m_MoreOptionsParams.newWorldSize = m_MoreOptionsParams.currentWorldSize; + + m_MoreOptionsParams.bMobGriefing = app.GetGameHostOption(uiHostOptions, eGameHostOption_MobGriefing); + m_MoreOptionsParams.bKeepInventory = app.GetGameHostOption(uiHostOptions, eGameHostOption_KeepInventory); + m_MoreOptionsParams.bDoMobSpawning = app.GetGameHostOption(uiHostOptions, eGameHostOption_DoMobSpawning); + m_MoreOptionsParams.bDoMobLoot = app.GetGameHostOption(uiHostOptions, eGameHostOption_DoMobLoot); + m_MoreOptionsParams.bDoTileDrops = app.GetGameHostOption(uiHostOptions, eGameHostOption_DoTileDrops); + m_MoreOptionsParams.bNaturalRegeneration = app.GetGameHostOption(uiHostOptions, eGameHostOption_NaturalRegeneration); + m_MoreOptionsParams.bDoDaylightCycle = app.GetGameHostOption(uiHostOptions, eGameHostOption_DoDaylightCycle); + + bool cheatsOn = m_MoreOptionsParams.bHostPrivileges; + if (!cheatsOn) + { + // Set defaults + m_MoreOptionsParams.bMobGriefing = true; + m_MoreOptionsParams.bKeepInventory = false; + m_MoreOptionsParams.bDoMobSpawning = true; + m_MoreOptionsParams.bDoDaylightCycle = true; + } // turn off creative mode on the save // #ifdef _DEBUG @@ -464,6 +493,11 @@ void UIScene_LoadMenu::tick() // app.SetGameHostOption(eGameHostOption_HasBeenInCreative, 0); // #endif + if(app.GetGameHostOption(uiHostOptions,eGameHostOption_WasntSaveOwner)>0) + { + m_bIsSaveOwner = false; + } + m_bHasBeenInCreative = app.GetGameHostOption(uiHostOptions,eGameHostOption_HasBeenInCreative)>0; if(app.GetGameHostOption(uiHostOptions,eGameHostOption_HasBeenInCreative)>0) { @@ -474,11 +508,27 @@ void UIScene_LoadMenu::tick() m_labelCreatedMode.setLabel( app.GetString(IDS_CREATED_IN_SURVIVAL) ); } - if(app.GetGameHostOption(uiHostOptions,eGameHostOption_GameType)>0) - { + switch(app.GetGameHostOption(uiHostOptions,eGameHostOption_GameType)) + { + case 1: // Creative m_buttonGamemode.setLabel(app.GetString(IDS_GAMEMODE_CREATIVE)); - m_bGameModeSurvival=false; - } + m_bGameModeCreative=true; + m_iGameModeId = GameType::CREATIVE->getId(); + break; +#ifdef _ADVENTURE_MODE_ENABLED + case 2: // Adventure + m_buttonGamemode.setLabel(app.GetString(IDS_GAMEMODE_ADVENTURE)); + m_bGameModeCreative=false; + m_iGameModeId = GameType::ADVENTURE->getId(); + break; +#endif + case 0: // Survival + default: + m_buttonGamemode.setLabel(app.GetString(IDS_GAMEMODE_SURVIVAL)); + m_bGameModeCreative=false; + m_iGameModeId = GameType::SURVIVAL->getId(); + break; + }; bool bGameSetting_Online=(app.GetGameSettings(m_iPad,eGameSetting_Online)!=0); if(app.GetGameHostOption(uiHostOptions,eGameHostOption_FriendsOfFriends) && !(m_bMultiplayerAllowed && bGameSetting_Online)) @@ -545,7 +595,7 @@ void UIScene_LoadMenu::tick() uiIDA[0]=IDS_PRO_NOTONLINE_DECLINE; // Give the player a warning about the texture pack missing - ui.RequestMessageBox(IDS_PLAY_OFFLINE,IDS_NO_PLAYSTATIONPLUS, uiIDA, 1, ProfileManager.GetPrimaryPad(),&UIScene_LoadMenu::ContinueOffline,this,app.GetStringTable(), 0, 0, false); + ui.RequestAlertMessage(IDS_PLAY_OFFLINE,IDS_NO_PLAYSTATIONPLUS, uiIDA, 1, ProfileManager.GetPrimaryPad(),&UIScene_LoadMenu::ContinueOffline,this); } } break; @@ -599,7 +649,7 @@ void UIScene_LoadMenu::handleInput(int iPad, int key, bool repeat, bool pressed, if ( pressed && controlHasFocus(m_checkboxOnline.getId()) && !m_checkboxOnline.IsEnabled() ) { UINT uiIDA[1] = { IDS_CONFIRM_OK }; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad); } #endif @@ -610,23 +660,19 @@ void UIScene_LoadMenu::handleInput(int iPad, int key, bool repeat, bool pressed, case ACTION_MENU_OTHER_STICK_UP: case ACTION_MENU_OTHER_STICK_DOWN: sendInputToMovie(key, repeat, pressed, released); - -#if defined _XBOX_ONE || defined __ORBIS__ || defined _WINDOWS64 - if(getSceneResolution() == eSceneResolution_1080) + + bool bOnlineGame = m_checkboxOnline.IsChecked(); + if (m_MoreOptionsParams.bOnlineGame != bOnlineGame) { - bool bOnlineGame = m_checkboxOnline.IsChecked(); - if (m_MoreOptionsParams.bOnlineGame != bOnlineGame) - { - m_MoreOptionsParams.bOnlineGame = bOnlineGame; + m_MoreOptionsParams.bOnlineGame = bOnlineGame; - if (!m_MoreOptionsParams.bOnlineGame) - { - m_MoreOptionsParams.bInviteOnly = false; - m_MoreOptionsParams.bAllowFriendsOfFriends = false; - } + if (!m_MoreOptionsParams.bOnlineGame) + { + m_MoreOptionsParams.bInviteOnly = false; + m_MoreOptionsParams.bAllowFriendsOfFriends = false; } } -#endif + handled = true; break; } @@ -642,16 +688,26 @@ void UIScene_LoadMenu::handlePress(F64 controlId, F64 childId) switch((int)controlId) { case eControl_GameMode: - if(m_bGameModeSurvival) + switch(m_iGameModeId) { + case 0: // Survival m_buttonGamemode.setLabel(app.GetString(IDS_GAMEMODE_CREATIVE)); - m_bGameModeSurvival=false; - } - else - { + m_iGameModeId = GameType::CREATIVE->getId(); + m_bGameModeCreative = true; + break; + case 1: // Creative +#ifdef _ADVENTURE_MODE_ENABLED + m_buttonGamemode.setLabel(app.GetString(IDS_GAMEMODE_ADVENTURE)); + m_iGameModeId = GameType::ADVENTURE->getId(); + m_bGameModeCreative = false; + break; + case 2: // Adventure +#endif m_buttonGamemode.setLabel(app.GetString(IDS_GAMEMODE_SURVIVAL)); - m_bGameModeSurvival=true; - } + m_iGameModeId = GameType::SURVIVAL->getId(); + m_bGameModeCreative = false; + break; + }; break; case eControl_MoreOptions: ui.NavigateToScene(m_iPad, eUIScene_LaunchMoreOptionsMenu, &m_MoreOptionsParams); @@ -729,7 +785,7 @@ void UIScene_LoadMenu::StartSharedLaunchFlow() uiIDA[1]=IDS_CONFIRM_CANCEL; // Give the player a warning about the texture pack missing - ui.RequestMessageBox(IDS_DLC_TEXTUREPACK_NOT_PRESENT_TITLE, IDS_DLC_TEXTUREPACK_NOT_PRESENT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&TexturePackDialogReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_DLC_TEXTUREPACK_NOT_PRESENT_TITLE, IDS_DLC_TEXTUREPACK_NOT_PRESENT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&TexturePackDialogReturned,this); return; } } @@ -799,13 +855,13 @@ void UIScene_LoadMenu::StartSharedLaunchFlow() // trial pack warning UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_USING_TRIAL_TEXUREPACK_WARNING, uiIDA, 1, m_iPad,&TrialTexturePackWarningReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_USING_TRIAL_TEXUREPACK_WARNING, uiIDA, 1, m_iPad,&TrialTexturePackWarningReturned,this); #elif defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) // trial pack warning UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestMessageBox(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_USING_TRIAL_TEXUREPACK_WARNING, uiIDA, 2, m_iPad,&TrialTexturePackWarningReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_USING_TRIAL_TEXUREPACK_WARNING, uiIDA, 2, m_iPad,&TrialTexturePackWarningReturned,this); #endif #if defined _XBOX_ONE || defined __ORBIS__ @@ -815,11 +871,45 @@ void UIScene_LoadMenu::StartSharedLaunchFlow() } } } + app.SetGameHostOption(eGameHostOption_WasntSaveOwner, (!m_bIsSaveOwner)); #if defined _XBOX_ONE || defined __ORBIS__ app.SetGameHostOption(eGameHostOption_DisableSaving, m_MoreOptionsParams.bDisableSaving?1:0); - StorageManager.SetSaveDisabled(m_MoreOptionsParams.bDisableSaving); + + int newWorldSize = 0; + int newHellScale = 0; + switch(m_MoreOptionsParams.newWorldSize) + { + case e_worldSize_Unknown: + newWorldSize = 0; + newHellScale = 0; + break; + case e_worldSize_Classic: + newWorldSize = LEVEL_WIDTH_CLASSIC; + newHellScale = HELL_LEVEL_SCALE_CLASSIC; + break; + case e_worldSize_Small: + newWorldSize = LEVEL_WIDTH_SMALL; + newHellScale = HELL_LEVEL_SCALE_SMALL; + break; + case e_worldSize_Medium: + newWorldSize = LEVEL_WIDTH_MEDIUM; + newHellScale = HELL_LEVEL_SCALE_MEDIUM; + break; + case e_worldSize_Large: + newWorldSize = LEVEL_WIDTH_LARGE; + newHellScale = HELL_LEVEL_SCALE_LARGE; + break; + default: + assert(0); + break; + } + bool bUseMoat = !m_MoreOptionsParams.newWorldSizeOverwriteEdges; + app.SetGameNewWorldSize(newWorldSize, bUseMoat); + app.SetGameNewHellScale(newHellScale); + app.SetGameHostOption(eGameHostOption_WorldSize, m_MoreOptionsParams.newWorldSize); + #endif #if TO_BE_IMPLEMENTED @@ -834,7 +924,7 @@ void UIScene_LoadMenu::StartSharedLaunchFlow() uiIDA[0]=IDS_DONT_RESET_NETHER; uiIDA[1]=IDS_RESET_NETHER; - ui.RequestMessageBox(IDS_RESETNETHER_TITLE, IDS_RESETNETHER_TEXT, uiIDA, 2, m_iPad,&UIScene_LoadMenu::CheckResetNetherReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_RESETNETHER_TITLE, IDS_RESETNETHER_TEXT, uiIDA, 2, m_iPad,&UIScene_LoadMenu::CheckResetNetherReturned,this); } else { @@ -905,13 +995,9 @@ void UIScene_LoadMenu::handleTimerComplete(int id) m_MoreOptionsParams.bInviteOnly = FALSE; m_MoreOptionsParams.bAllowFriendsOfFriends = FALSE; } -#if defined _XBOX_ONE || defined __ORBIS__ || defined _WINDOWS64 - if(getSceneResolution() == eSceneResolution_1080) - { - m_checkboxOnline.SetEnable(bMultiplayerAllowed); - m_checkboxOnline.setChecked(m_MoreOptionsParams.bOnlineGame); - } -#endif + + m_checkboxOnline.SetEnable(bMultiplayerAllowed); + m_checkboxOnline.setChecked(m_MoreOptionsParams.bOnlineGame); m_bMultiplayerAllowed = bMultiplayerAllowed; } @@ -988,17 +1074,17 @@ void UIScene_LoadMenu::LaunchGame(void) killTimer(CHECKFORAVAILABLETEXTUREPACKS_TIMER_ID); #endif - if( (m_bGameModeSurvival != true || m_bHasBeenInCreative) || m_MoreOptionsParams.bHostPrivileges == TRUE) + if( (m_bGameModeCreative == true || m_bHasBeenInCreative) || m_MoreOptionsParams.bHostPrivileges == TRUE) { UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - if(m_bGameModeSurvival != true || m_bHasBeenInCreative) + if(m_bGameModeCreative == true || m_bHasBeenInCreative) { // 4J-PB - Need different text for Survival mode with a level that has been saved in Creative - if(m_bGameModeSurvival) + if(!m_bGameModeCreative) { - ui.RequestMessageBox(IDS_TITLE_START_GAME, IDS_CONFIRM_START_SAVEDINCREATIVE, uiIDA, 2, m_iPad,&UIScene_LoadMenu::ConfirmLoadReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_TITLE_START_GAME, IDS_CONFIRM_START_SAVEDINCREATIVE, uiIDA, 2, m_iPad,&UIScene_LoadMenu::ConfirmLoadReturned,this); } else // it's creative mode { @@ -1012,7 +1098,8 @@ void UIScene_LoadMenu::LaunchGame(void) if(m_levelGen != NULL) { - LoadLevelGen(m_levelGen); + m_bIsCorrupt = false; + LoadDataComplete(this); } else { @@ -1032,7 +1119,7 @@ void UIScene_LoadMenu::LaunchGame(void) StorageManager.SetSaveDeviceSelected(m_iPad,false); UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_STORAGEDEVICEPROBLEM_TITLE, IDS_FAILED_TO_LOADSAVE_TEXT, uiIDA, 1, m_iPad,&CScene_LoadGameSettings::DeviceRemovedDialogReturned,this); + ui.RequestErrorMessage(IDS_STORAGEDEVICEPROBLEM_TITLE, IDS_FAILED_TO_LOADSAVE_TEXT, uiIDA, 1, m_iPad,&CScene_LoadGameSettings::DeviceRemovedDialogReturned,this); } #endif @@ -1041,20 +1128,21 @@ void UIScene_LoadMenu::LaunchGame(void) else { // ask if they're sure they want to turn this into a creative map - ui.RequestMessageBox(IDS_TITLE_START_GAME, IDS_CONFIRM_START_CREATIVE, uiIDA, 2, m_iPad,&UIScene_LoadMenu::ConfirmLoadReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_TITLE_START_GAME, IDS_CONFIRM_START_CREATIVE, uiIDA, 2, m_iPad,&UIScene_LoadMenu::ConfirmLoadReturned,this); } } } else { - ui.RequestMessageBox(IDS_TITLE_START_GAME, IDS_CONFIRM_START_HOST_PRIVILEGES, uiIDA, 2, m_iPad,&UIScene_LoadMenu::ConfirmLoadReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_TITLE_START_GAME, IDS_CONFIRM_START_HOST_PRIVILEGES, uiIDA, 2, m_iPad,&UIScene_LoadMenu::ConfirmLoadReturned,this); } } else { if(m_levelGen != NULL) { - LoadLevelGen(m_levelGen); + m_bIsCorrupt = false; + LoadDataComplete(this); } else { @@ -1073,7 +1161,7 @@ void UIScene_LoadMenu::LaunchGame(void) StorageManager.SetSaveDeviceSelected(m_iPad,false); UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_STORAGEDEVICEPROBLEM_TITLE, IDS_FAILED_TO_LOADSAVE_TEXT, uiIDA, 1, m_iPad,&CScene_LoadGameSettings::DeviceRemovedDialogReturned,this); + ui.RequestErrorMessage(IDS_STORAGEDEVICEPROBLEM_TITLE, IDS_FAILED_TO_LOADSAVE_TEXT, uiIDA, 1, m_iPad,&CScene_LoadGameSettings::DeviceRemovedDialogReturned,this); } #endif } @@ -1113,7 +1201,8 @@ int UIScene_LoadMenu::ConfirmLoadReturned(void *pParam,int iPad,C4JStorage::EMes { if(pClass->m_levelGen != NULL) { - pClass->LoadLevelGen(pClass->m_levelGen); + pClass->m_bIsCorrupt = false; + pClass->LoadDataComplete(pClass); } else { @@ -1132,9 +1221,9 @@ int UIScene_LoadMenu::ConfirmLoadReturned(void *pParam,int iPad,C4JStorage::EMes StorageManager.SetSaveDeviceSelected(m_iPad,false); UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_STORAGEDEVICEPROBLEM_TITLE, IDS_FAILED_TO_LOADSAVE_TEXT, uiIDA, 1, m_iPad,&CScene_LoadGameSettings::DeviceRemovedDialogReturned,this); + ui.RequestErrorMessage(IDS_STORAGEDEVICEPROBLEM_TITLE, IDS_FAILED_TO_LOADSAVE_TEXT, uiIDA, 1, m_iPad,&CScene_LoadGameSettings::DeviceRemovedDialogReturned,this); } -#endif +#endif } } else @@ -1183,7 +1272,7 @@ int UIScene_LoadMenu::LoadDataComplete(void *pParam) // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive if the npAvailability isn't SCE_OK UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPadNotSignedInLive, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPadNotSignedInLive); } else { @@ -1191,14 +1280,14 @@ int UIScene_LoadMenu::LoadDataComplete(void *pParam) UINT uiIDA[2]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1] = IDS_CANCEL; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPadNotSignedInLive, &UIScene_LoadMenu::MustSignInReturnedPSN, pClass, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPadNotSignedInLive, &UIScene_LoadMenu::MustSignInReturnedPSN, pClass); } return 0; #else pClass->m_bIgnoreInput=false; UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad()); return 0; #endif } @@ -1257,6 +1346,15 @@ int UIScene_LoadMenu::LoadDataComplete(void *pParam) pClass->setVisible( true ); pClass->m_bIgnoreInput=false; + if(ProfileManager.RequestingPlaystationPlus(iPadWithNoPlaystationPlus)) + { + // MGH - added this so we don't try and upsell when we don't know if the player has PS Plus yet (if it can't connect to the PS Plus server). + UINT uiIDA[1]; + uiIDA[0]=IDS_OK; + ui.RequestAlertMessage(IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, ProfileManager.GetPrimaryPad(), NULL, NULL); + return 0; + } + // 4J-PB - we're not allowed to show the text Playstation Plus - have to call the upsell all the time! // upsell psplus int32_t iResult=sceNpCommerceDialogInitialize(); @@ -1317,6 +1415,15 @@ int UIScene_LoadMenu::LoadDataComplete(void *pParam) pClass->setVisible( true ); pClass->m_bIgnoreInput=false; + if(ProfileManager.RequestingPlaystationPlus(iPadWithNoPlaystationPlus)) + { + // MGH - added this so we don't try and upsell when we don't know if the player has PS Plus yet (if it can't connect to the PS Plus server). + UINT uiIDA[1]; + uiIDA[0]=IDS_OK; + ui.RequestAlertMessage(IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, ProfileManager.GetPrimaryPad(), NULL, NULL); + return 0; + } + // 4J-PB - we're not allowed to show the text Playstation Plus - have to call the upsell all the time! // upsell psplus int32_t iResult=sceNpCommerceDialogInitialize(); @@ -1357,7 +1464,7 @@ int UIScene_LoadMenu::LoadDataComplete(void *pParam) UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_CORRUPT_OR_DAMAGED_SAVE_TITLE, IDS_CORRUPT_OR_DAMAGED_SAVE_TEXT, uiIDA, 2, pClass->m_iPad,&UIScene_LoadMenu::DeleteSaveDialogReturned,pClass, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_CORRUPT_OR_DAMAGED_SAVE_TITLE, IDS_CORRUPT_OR_DAMAGED_SAVE_TEXT, uiIDA, 2, pClass->m_iPad,&UIScene_LoadMenu::DeleteSaveDialogReturned,pClass); } @@ -1369,6 +1476,14 @@ int UIScene_LoadMenu::LoadSaveDataReturned(void *pParam,bool bIsCorrupt, bool bI UIScene_LoadMenu* pClass = (UIScene_LoadMenu*)pParam; pClass->m_bIsCorrupt=bIsCorrupt; + +#if defined(__PS3__) || defined(__ORBIS__) || defined (__PSVITA__) + if(app.GetGameHostOption(eGameHostOption_WasntSaveOwner)) + { + bIsOwner = false; + } +#endif + if(bIsOwner) { LoadDataComplete(pClass); @@ -1382,8 +1497,9 @@ int UIScene_LoadMenu::LoadSaveDataReturned(void *pParam,bool bIsCorrupt, bool bI // show the message that trophies are disabled UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_SAVEDATA_COPIED_TITLE, IDS_SAVEDATA_COPIED_TEXT, uiIDA, 1, - pClass->m_iPad,&UIScene_LoadMenu::TrophyDialogReturned,pClass, app.GetStringTable()); + ui.RequestErrorMessage(IDS_SAVEDATA_COPIED_TITLE, IDS_SAVEDATA_COPIED_TEXT, uiIDA, 1, + pClass->m_iPad,&UIScene_LoadMenu::TrophyDialogReturned,pClass); + app.SetGameHostOption(eGameHostOption_WasntSaveOwner, true); #endif } @@ -1427,9 +1543,18 @@ int UIScene_LoadMenu::DeleteSaveDataReturned(void *pParam,bool bSuccess) // 4J Stu - Shared functionality that is the same whether we needed a quadrant sign-in or not void UIScene_LoadMenu::StartGameFromSave(UIScene_LoadMenu* pClass, DWORD dwLocalUsersMask) { - INT saveOrCheckpointId = 0; - bool validSave = StorageManager.GetSaveUniqueNumber(&saveOrCheckpointId); - TelemetryManager->RecordLevelResume(pClass->m_iPad, eSen_FriendOrMatch_Playing_With_Invited_Friends, eSen_CompeteOrCoop_Coop_and_Competitive, app.GetGameSettings(pClass->m_iPad,eGameSetting_Difficulty), app.GetLocalPlayerCount(), g_NetworkManager.GetOnlinePlayerCount(), saveOrCheckpointId); + if(pClass->m_levelGen == NULL) + { + INT saveOrCheckpointId = 0; + bool validSave = StorageManager.GetSaveUniqueNumber(&saveOrCheckpointId); + TelemetryManager->RecordLevelResume(pClass->m_iPad, eSen_FriendOrMatch_Playing_With_Invited_Friends, eSen_CompeteOrCoop_Coop_and_Competitive, app.GetGameSettings(pClass->m_iPad,eGameSetting_Difficulty), app.GetLocalPlayerCount(), g_NetworkManager.GetOnlinePlayerCount(), saveOrCheckpointId); + } + else + { + StorageManager.ResetSaveData(); + // Make our next save default to the name of the level + StorageManager.SetSaveTitle(pClass->m_levelGen->getDefaultSaveName().c_str()); + } bool isClientSide = ProfileManager.IsSignedInLive(ProfileManager.GetPrimaryPad()) && pClass->m_MoreOptionsParams.bOnlineGame; #ifdef __PSVITA__ @@ -1446,7 +1571,8 @@ void UIScene_LoadMenu::StartGameFromSave(UIScene_LoadMenu* pClass, DWORD dwLocal NetworkGameInitData *param = new NetworkGameInitData(); param->seed = pClass->m_seed; - param->saveData = NULL; + param->saveData = NULL; + param->levelGen = pClass->m_levelGen; param->texturePackId = pClass->m_MoreOptionsParams.dwTexturePack; Minecraft *pMinecraft = Minecraft::GetInstance(); @@ -1467,12 +1593,26 @@ void UIScene_LoadMenu::StartGameFromSave(UIScene_LoadMenu* pClass, DWORD dwLocal app.SetGameHostOption(eGameHostOption_HostCanChangeHunger,pClass->m_MoreOptionsParams.bHostPrivileges); app.SetGameHostOption(eGameHostOption_HostCanBeInvisible,pClass->m_MoreOptionsParams.bHostPrivileges ); + app.SetGameHostOption(eGameHostOption_MobGriefing, pClass->m_MoreOptionsParams.bMobGriefing); + app.SetGameHostOption(eGameHostOption_KeepInventory, pClass->m_MoreOptionsParams.bKeepInventory); + app.SetGameHostOption(eGameHostOption_DoMobSpawning, pClass->m_MoreOptionsParams.bDoMobSpawning); + app.SetGameHostOption(eGameHostOption_DoMobLoot, pClass->m_MoreOptionsParams.bDoMobLoot); + app.SetGameHostOption(eGameHostOption_DoTileDrops, pClass->m_MoreOptionsParams.bDoTileDrops); + app.SetGameHostOption(eGameHostOption_NaturalRegeneration, pClass->m_MoreOptionsParams.bNaturalRegeneration); + app.SetGameHostOption(eGameHostOption_DoDaylightCycle, pClass->m_MoreOptionsParams.bDoDaylightCycle); + +#ifdef _LARGE_WORLDS + app.SetGameHostOption(eGameHostOption_WorldSize, pClass->m_MoreOptionsParams.worldSize+1 ); // 0 is GAME_HOST_OPTION_WORLDSIZE_UNKNOWN +#endif +// app.SetGameNewWorldSize(64, true ); +// app.SetGameNewWorldSize(0, false ); + // flag if the user wants to reset the Nether to force a Fortress with netherwart etc. app.SetResetNether((pClass->m_MoreOptionsParams.bResetNether==TRUE)?true:false); // clear out the app's terrain features list app.ClearTerrainFeaturePosition(); - app.SetGameHostOption(eGameHostOption_GameType,pClass->m_bGameModeSurvival?GameType::SURVIVAL->getId():GameType::CREATIVE->getId() ); + app.SetGameHostOption(eGameHostOption_GameType,pClass->m_iGameModeId ); g_NetworkManager.HostGame(dwLocalUsersMask,isClientSide,isPrivate,MINECRAFT_NET_MAX_PLAYERS,0); @@ -1508,7 +1648,7 @@ void UIScene_LoadMenu::checkStateAndStartGame() uiIDA[0]=IDS_DONT_RESET_NETHER; uiIDA[1]=IDS_RESET_NETHER; - ui.RequestMessageBox(IDS_RESETNETHER_TITLE, IDS_RESETNETHER_TEXT, uiIDA, 2, m_iPad,&UIScene_LoadMenu::CheckResetNetherReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_RESETNETHER_TITLE, IDS_RESETNETHER_TEXT, uiIDA, 2, m_iPad,&UIScene_LoadMenu::CheckResetNetherReturned,this); } else { @@ -1516,113 +1656,6 @@ void UIScene_LoadMenu::checkStateAndStartGame() } } -void UIScene_LoadMenu::LoadLevelGen(LevelGenerationOptions *levelGen) -{ - bool isClientSide = ProfileManager.IsSignedInLive(ProfileManager.GetPrimaryPad()) && m_MoreOptionsParams.bOnlineGame; - - // 4J Stu - If we only have one controller connected, then don't show the sign-in UI again - DWORD connectedControllers = 0; - for(unsigned int i = 0; i < XUSER_MAX_COUNT; ++i) - { - if( InputManager.IsPadConnected(i) || ProfileManager.IsSignedIn(i) ) ++connectedControllers; - } - - if(!isClientSide || connectedControllers == 1 || !RenderManager.IsHiDef()) - { - - // Check if user-created content is allowed, as we cannot play multiplayer if it's not - bool noUGC = false; - BOOL pccAllowed = TRUE; - BOOL pccFriendsAllowed = TRUE; - - ProfileManager.AllowedPlayerCreatedContent(ProfileManager.GetPrimaryPad(),false,&pccAllowed,&pccFriendsAllowed); - if(!pccAllowed && !pccFriendsAllowed) noUGC = true; - - if(isClientSide && noUGC ) - { - m_bIgnoreInput=false; - UINT uiIDA[1]; - uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_FAILED_TO_CREATE_GAME_TITLE, IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable(),NULL,0,false); - return; - } - - } - - DWORD dwLocalUsersMask = 0; - - dwLocalUsersMask |= CGameNetworkManager::GetLocalPlayerMask(ProfileManager.GetPrimaryPad()); - // Load data from disc - //File saveFile( L"Tutorial\\Tutorial" ); - //LoadSaveFromDisk(&saveFile); - - StorageManager.ResetSaveData(); - // Make our next save default to the name of the level - StorageManager.SetSaveTitle(levelGen->getDefaultSaveName().c_str()); - - bool isPrivate = (app.GetGameSettings(m_iPad,eGameSetting_InviteOnly)>0)?true:false; - - g_NetworkManager.HostGame(dwLocalUsersMask,isClientSide,isPrivate,MINECRAFT_NET_MAX_PLAYERS,0); - - NetworkGameInitData *param = new NetworkGameInitData(); - param->seed = 0; - param->saveData = NULL; - param->levelGen = levelGen; - - if(levelGen->requiresTexturePack()) - { - param->texturePackId = levelGen->getRequiredTexturePackId(); - - Minecraft *pMinecraft = Minecraft::GetInstance(); - pMinecraft->skins->selectTexturePackById(param->texturePackId); - //pMinecraft->skins->updateUI(); - } - - - app.SetGameHostOption(eGameHostOption_Difficulty,Minecraft::GetInstance()->options->difficulty); - app.SetGameHostOption(eGameHostOption_FriendsOfFriends,app.GetGameSettings(m_iPad,eGameSetting_FriendsOfFriends)); - app.SetGameHostOption(eGameHostOption_Gamertags,app.GetGameSettings(m_iPad,eGameSetting_GamertagsVisible)); - - app.SetGameHostOption(eGameHostOption_BedrockFog,app.GetGameSettings(m_iPad,eGameSetting_BedrockFog)?1:0); - - app.SetGameHostOption(eGameHostOption_PvP,m_MoreOptionsParams.bPVP); - app.SetGameHostOption(eGameHostOption_TrustPlayers,m_MoreOptionsParams.bTrust ); - app.SetGameHostOption(eGameHostOption_FireSpreads,m_MoreOptionsParams.bFireSpreads ); - app.SetGameHostOption(eGameHostOption_TNT,m_MoreOptionsParams.bTNT ); - app.SetGameHostOption(eGameHostOption_HostCanFly,m_MoreOptionsParams.bHostPrivileges); - app.SetGameHostOption(eGameHostOption_HostCanChangeHunger,m_MoreOptionsParams.bHostPrivileges); - app.SetGameHostOption(eGameHostOption_HostCanBeInvisible,m_MoreOptionsParams.bHostPrivileges ); - - // flag if the user wants to reset the Nether to force a Fortress with netherwart etc. - app.SetResetNether((m_MoreOptionsParams.bResetNether==TRUE)?true:false); - // clear out the app's terrain features list - app.ClearTerrainFeaturePosition(); - - app.SetGameHostOption(eGameHostOption_GameType,m_bGameModeSurvival?GameType::SURVIVAL->getId():GameType::CREATIVE->getId() ); - - param->settings = app.GetGameHostOption( eGameHostOption_All ); - -#ifndef _XBOX - g_NetworkManager.FakeLocalPlayerJoined(); -#endif - - LoadingInputParams *loadingParams = new LoadingInputParams(); - loadingParams->func = &CGameNetworkManager::RunNetworkGameThreadProc; - loadingParams->lpParam = (LPVOID)param; - - // Reset the autosave time - app.SetAutosaveTimerTime(); - - UIFullscreenProgressCompletionData *completionData = new UIFullscreenProgressCompletionData(); - completionData->bShowBackground=TRUE; - completionData->bShowLogo=TRUE; - completionData->type = e_ProgressCompletion_CloseAllPlayersUIScenes; - completionData->iPad = DEFAULT_XUI_MENU_USER; - loadingParams->completionData = completionData; - - ui.NavigateToScene(ProfileManager.GetPrimaryPad(),eUIScene_FullscreenProgress, loadingParams); -} - int UIScene_LoadMenu::StartGame_SignInReturned(void *pParam,bool bContinue, int iPad) { UIScene_LoadMenu* pClass = (UIScene_LoadMenu*)pParam; @@ -1670,7 +1703,7 @@ int UIScene_LoadMenu::StartGame_SignInReturned(void *pParam,bool bContinue, int // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive if the npAvailability isn't SCE_OK UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPadNotSignedInLive, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPadNotSignedInLive); } else { @@ -1678,14 +1711,14 @@ int UIScene_LoadMenu::StartGame_SignInReturned(void *pParam,bool bContinue, int UINT uiIDA[2]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1] = IDS_CANCEL; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPadNotSignedInLive, &UIScene_LoadMenu::MustSignInReturnedPSN, pClass, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPadNotSignedInLive, &UIScene_LoadMenu::MustSignInReturnedPSN, pClass); } return 0; #else pClass->m_bIgnoreInput=false; UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad()); return 0; #endif } @@ -1706,7 +1739,7 @@ int UIScene_LoadMenu::StartGame_SignInReturned(void *pParam,bool bContinue, int pClass->setVisible( true ); UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_FAILED_TO_CREATE_GAME_TITLE, IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage( IDS_FAILED_TO_CREATE_GAME_TITLE, IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE, uiIDA,1,ProfileManager.GetPrimaryPad()); } else { @@ -1714,7 +1747,7 @@ int UIScene_LoadMenu::StartGame_SignInReturned(void *pParam,bool bContinue, int pClass->setVisible( true ); UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_HOST_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_HOST_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad()); } } else @@ -1754,13 +1787,7 @@ void UIScene_LoadMenu::handleGainFocus(bool navBack) { if(navBack) { - -#if defined _XBOX_ONE || defined __ORBIS__ || defined _WINDOWS64 - if(getSceneResolution() == eSceneResolution_1080) - { - m_checkboxOnline.setChecked(m_MoreOptionsParams.bOnlineGame == TRUE); - } -#endif + m_checkboxOnline.setChecked(m_MoreOptionsParams.bOnlineGame == TRUE); } } diff --git a/Minecraft.Client/Common/UI/UIScene_LoadMenu.h b/Minecraft.Client/Common/UI/UIScene_LoadMenu.h index e45fa09c..12955151 100644 --- a/Minecraft.Client/Common/UI/UIScene_LoadMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_LoadMenu.h @@ -22,10 +22,8 @@ private: UIControl_Button m_buttonGamemode, m_buttonMoreOptions, m_buttonLoadWorld; UIControl_Slider m_sliderDifficulty; UIControl_BitmapIcon m_bitmapIcon; - -#if defined _XBOX_ONE || defined __ORBIS__ || defined _WINDOWS64 + UIControl_CheckBox m_checkboxOnline; -#endif UI_BEGIN_MAP_ELEMENTS_AND_NAMES(IUIScene_StartGame) UI_MAP_ELEMENT( m_controlMainPanel, "MainPanel" ) @@ -35,10 +33,7 @@ private: UI_MAP_ELEMENT( m_labelSeed, "Seed") UI_MAP_ELEMENT( m_texturePackList, "TexturePackSelector") UI_MAP_ELEMENT( m_buttonGamemode, "GameModeToggle") - -#if defined _XBOX_ONE || defined __ORBIS__ || defined _WINDOWS64 UI_MAP_ELEMENT( m_checkboxOnline, "CheckboxOnline") -#endif UI_MAP_ELEMENT( m_buttonMoreOptions, "MoreOptions") UI_MAP_ELEMENT( m_buttonLoadWorld, "LoadSettings") UI_MAP_ELEMENT( m_sliderDifficulty, "Difficulty") @@ -51,8 +46,10 @@ private: int m_iSaveGameInfoIndex; int m_CurrentDifficulty; - bool m_bGameModeSurvival; + bool m_bGameModeCreative; + int m_iGameModeId; bool m_bHasBeenInCreative; + bool m_bIsSaveOwner; bool m_bRetrievingSaveThumbnail; bool m_bSaveThumbnailReady; bool m_bMultiplayerAllowed; @@ -104,7 +101,6 @@ protected: private: void StartSharedLaunchFlow(); virtual void checkStateAndStartGame(); - void LoadLevelGen(LevelGenerationOptions *levelGen); void LaunchGame(void); #ifdef _DURANGO diff --git a/Minecraft.Client/Common/UI/UIScene_LoadOrJoinMenu.cpp b/Minecraft.Client/Common/UI/UIScene_LoadOrJoinMenu.cpp index 1d90da77..4e48e395 100644 --- a/Minecraft.Client/Common/UI/UIScene_LoadOrJoinMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_LoadOrJoinMenu.cpp @@ -8,7 +8,6 @@ #include "..\..\..\Minecraft.World\net.minecraft.world.level.chunk.storage.h" #include "..\..\..\Minecraft.World\ConsoleSaveFile.h" #include "..\..\..\Minecraft.World\ConsoleSaveFileOriginal.h" -#include "..\..\..\Minecraft.World\ConsoleSaveFileSplit.h" #include "..\..\ProgressRenderer.h" #include "..\..\MinecraftServer.h" #include "..\..\TexturePackRepository.h" @@ -17,6 +16,7 @@ #if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) #include "Common\Network\Sony\SonyHttp.h" #include "Common\Network\Sony\SonyRemoteStorage.h" +#include "DLCTexturePack.h" #endif #if defined(__ORBIS__) || defined(__PSVITA__) #include @@ -29,6 +29,7 @@ #ifdef SONY_REMOTE_STORAGE_DOWNLOAD unsigned long UIScene_LoadOrJoinMenu::m_ulFileSize=0L; wstring UIScene_LoadOrJoinMenu::m_wstrStageText=L""; +bool UIScene_LoadOrJoinMenu::m_bSaveTransferRunning = false; #endif @@ -103,9 +104,9 @@ UIScene_LoadOrJoinMenu::UIScene_LoadOrJoinMenu(int iPad, void *initData, UILayer m_buttonListSaves.init(eControl_SavesList); m_buttonListGames.init(eControl_GamesList); - m_labelSavesListTitle.init( app.GetString(IDS_START_GAME) ); - m_labelJoinListTitle.init( app.GetString(IDS_JOIN_GAME) ); - m_labelNoGames.init( app.GetString(IDS_NO_GAMES_FOUND) ); + m_labelSavesListTitle.init( IDS_START_GAME ); + m_labelJoinListTitle.init( IDS_JOIN_GAME ); + m_labelNoGames.init( IDS_NO_GAMES_FOUND ); m_labelNoGames.setVisible( false ); m_controlSavesTimer.setVisible( true ); m_controlJoinTimer.setVisible( true ); @@ -308,6 +309,14 @@ UIScene_LoadOrJoinMenu::~UIScene_LoadOrJoinMenu() void UIScene_LoadOrJoinMenu::updateTooltips() { +#if defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ + if(m_eSaveTransferState!=eSaveTransfer_Idle) + { + // we're in a full screen progress for the save download here, so don't change the tooltips + return; + } +#endif + // update the tooltips // if the saves list has focus, then we should show the Delete Save tooltip // if the games list has focus, then we should the the View Gamercard tooltip @@ -548,6 +557,8 @@ void UIScene_LoadOrJoinMenu::tick() { UIScene::tick(); + + #if (defined __PS3__ || defined __ORBIS__ || defined _DURANGO || defined _WINDOWS64 || defined __PSVITA__) if(m_bExitScene) // navigate forward or back { @@ -560,6 +571,11 @@ void UIScene_LoadOrJoinMenu::tick() // Stop loading thumbnails if we navigate forwards if(hasFocus(m_iPad)) { +#ifdef SONY_REMOTE_STORAGE_DOWNLOAD + // if the loadOrJoin menu has focus again, we can clear the saveTransfer flag now. Added so we can delay the ehternet disconnect till it's cleaned up + if(m_eSaveTransferState == eSaveTransfer_Idle) + m_bSaveTransferRunning = false; +#endif #if defined(_XBOX_ONE) || defined(__ORBIS__) if(m_bUpdateSaveSize) { @@ -775,7 +791,7 @@ void UIScene_LoadOrJoinMenu::tick() { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_CONNECTION_FAILED, IDS_IN_PARTY_SESSION_FULL, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_CONNECTION_FAILED, IDS_IN_PARTY_SESSION_FULL, uiIDA,1,ProfileManager.GetPrimaryPad()); } #endif @@ -896,7 +912,7 @@ void UIScene_LoadOrJoinMenu::AddDefaultButtons() m_iMashUpButtonsC=0; m_generators.clear(); - m_buttonListSaves.addItem(app.GetString(IDS_CREATE_NEW_WORLD)); + m_buttonListSaves.addItem(app.GetString(IDS_CREATE_NEW_WORLD)); m_iDefaultButtonsC++; int i = 0; @@ -919,8 +935,10 @@ void UIScene_LoadOrJoinMenu::AddDefaultButtons() } } + // 4J-JEV: For debug. Ignore worlds with no name. + LPCWSTR wstr = levelGen->getWorldName(); + m_buttonListSaves.addItem( wstr ); m_generators.push_back(levelGen); - m_buttonListSaves.addItem(levelGen->getWorldName()); if(uiTexturePackID!=0) { @@ -1005,7 +1023,7 @@ void UIScene_LoadOrJoinMenu::handleInput(int iPad, int key, bool repeat, bool pr { UINT uiIDA[1]; uiIDA[0] = IDS_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad); break; } @@ -1018,7 +1036,7 @@ void UIScene_LoadOrJoinMenu::handleInput(int iPad, int key, bool repeat, bool pr UINT uiIDA[2]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(), &UIScene_LoadOrJoinMenu::MustSignInReturnedPSN, this, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(), &UIScene_LoadOrJoinMenu::MustSignInReturnedPSN, this); } else { @@ -1061,7 +1079,7 @@ void UIScene_LoadOrJoinMenu::handleInput(int iPad, int key, bool repeat, bool pr UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TOOLTIPS_DELETESAVE, IDS_TEXT_DELETE_SAVE, uiIDA, 2, iPad,&UIScene_LoadOrJoinMenu::DeleteSaveDialogReturned,this, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_TOOLTIPS_DELETESAVE, IDS_TEXT_DELETE_SAVE, uiIDA, 2, iPad,&UIScene_LoadOrJoinMenu::DeleteSaveDialogReturned,this); } else { @@ -1083,7 +1101,7 @@ void UIScene_LoadOrJoinMenu::handleInput(int iPad, int key, bool repeat, bool pr numOptions = 4; uiIDA[3]=IDS_COPYSAVE; #endif - ui.RequestMessageBox(IDS_TOOLTIPS_SAVEOPTIONS, IDS_TEXT_SAVEOPTIONS, uiIDA, numOptions, iPad,&UIScene_LoadOrJoinMenu::SaveOptionsDialogReturned,this, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_TOOLTIPS_SAVEOPTIONS, IDS_TEXT_SAVEOPTIONS, uiIDA, numOptions, iPad,&UIScene_LoadOrJoinMenu::SaveOptionsDialogReturned,this); } else { @@ -1092,7 +1110,7 @@ void UIScene_LoadOrJoinMenu::handleInput(int iPad, int key, bool repeat, bool pr UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TOOLTIPS_DELETESAVE, IDS_TEXT_DELETE_SAVE, uiIDA, 2,iPad,&UIScene_LoadOrJoinMenu::DeleteSaveDialogReturned,this, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_TOOLTIPS_DELETESAVE, IDS_TEXT_DELETE_SAVE, uiIDA, 2,iPad,&UIScene_LoadOrJoinMenu::DeleteSaveDialogReturned,this); } } ui.PlayUISFX(eSFX_Press); @@ -1293,7 +1311,7 @@ void UIScene_LoadOrJoinMenu::handlePress(F64 controlId, F64 childId) UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_CORRUPT_OR_DAMAGED_SAVE_TITLE, IDS_CORRUPT_OR_DAMAGED_SAVE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_LoadOrJoinMenu::DeleteSaveDialogReturned,this, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_CORRUPT_OR_DAMAGED_SAVE_TITLE, IDS_CORRUPT_OR_DAMAGED_SAVE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_LoadOrJoinMenu::DeleteSaveDialogReturned,this); } else @@ -1324,7 +1342,7 @@ void UIScene_LoadOrJoinMenu::handlePress(F64 controlId, F64 childId) uiIDA[1]=IDS_CONFIRM_CANCEL; m_loadMenuInitData = params; - ui.RequestMessageBox(IDS_LOAD_SAVED_WORLD, IDS_CONFIRM_SYNC_REQUIRED, uiIDA, 2, ProfileManager.GetPrimaryPad(),&NeedSyncMessageReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_LOAD_SAVED_WORLD, IDS_CONFIRM_SYNC_REQUIRED, uiIDA, 2, ProfileManager.GetPrimaryPad(),&NeedSyncMessageReturned,this); } else #endif @@ -1411,7 +1429,7 @@ void UIScene_LoadOrJoinMenu::CheckAndJoinGame(int gameIndex) UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; // Not allowed to play online - ui.RequestMessageBox(IDS_ONLINE_GAME, IDS_CHAT_RESTRICTION_UGC, uiIDA, 1, m_iPad,NULL,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_ONLINE_GAME, IDS_CHAT_RESTRICTION_UGC, uiIDA, 1, m_iPad,NULL,this); #else // Not allowed to play online ProfileManager.ShowSystemMessage( SCE_MSG_DIALOG_SYSMSG_TYPE_TRC_PSN_CHAT_RESTRICTION, 0 ); @@ -1440,16 +1458,26 @@ void UIScene_LoadOrJoinMenu::CheckAndJoinGame(int gameIndex) { m_bIgnoreInput = false; // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive if the npAvailability isn't SCE_OK - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPadNotSignedInLive, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPadNotSignedInLive); } else { - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA,1,iPadNotSignedInLive, &UIScene_LoadOrJoinMenu::MustSignInReturnedPSN, this, app.GetStringTable()); + ui.RequestErrorMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA,1,iPadNotSignedInLive, &UIScene_LoadOrJoinMenu::MustSignInReturnedPSN, this); } return; } else if(bPlayStationPlus==false) { + + if(ProfileManager.RequestingPlaystationPlus(iPadWithNoPlaystationPlus)) + { + // MGH - added this so we don't try and upsell when we don't know if the player has PS Plus yet (if it can't connect to the PS Plus server). + UINT uiIDA[1]; + uiIDA[0]=IDS_OK; + ui.RequestAlertMessage(IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, ProfileManager.GetPrimaryPad(), NULL, NULL); + return; + } + // PS Plus upsell // 4J-PB - we're not allowed to show the text Playstation Plus - have to call the upsell all the time! // upsell psplus @@ -1514,10 +1542,19 @@ void UIScene_LoadOrJoinMenu::CheckAndJoinGame(int gameIndex) // Give the player a warning about the texture pack missing - ui.RequestMessageBox(IDS_DLC_TEXTUREPACK_NOT_PRESENT_TITLE, IDS_DLC_TEXTUREPACK_NOT_PRESENT, uiIDA, 2, m_iPad,&UIScene_LoadOrJoinMenu::TexturePackDialogReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_DLC_TEXTUREPACK_NOT_PRESENT_TITLE, IDS_DLC_TEXTUREPACK_NOT_PRESENT, uiIDA, 2, m_iPad,&UIScene_LoadOrJoinMenu::TexturePackDialogReturned,this); return; } + +#ifdef __PSVITA__ + if(CGameNetworkManager::usingAdhocMode() && !SQRNetworkManager_AdHoc_Vita::GetAdhocStatus()) + { + // not connected to adhoc anymore, must have connected back to PSN to buy texture pack so sign in again + SQRNetworkManager_AdHoc_Vita::AttemptAdhocSignIn(&UIScene_LoadOrJoinMenu::SignInAdhocReturned, this); + return; + } +#endif } m_controlJoinTimer.setVisible( false ); @@ -2125,7 +2162,7 @@ int UIScene_LoadOrJoinMenu::SaveOptionsDialogReturned(void *pParam,int iPad,C4JS UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TOOLTIPS_DELETESAVE, IDS_TEXT_DELETE_SAVE, uiIDA, 2, iPad,&UIScene_LoadOrJoinMenu::DeleteSaveDialogReturned,pClass, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_TOOLTIPS_DELETESAVE, IDS_TEXT_DELETE_SAVE, uiIDA, 2, iPad,&UIScene_LoadOrJoinMenu::DeleteSaveDialogReturned,pClass); } break; @@ -2136,7 +2173,7 @@ int UIScene_LoadOrJoinMenu::SaveOptionsDialogReturned(void *pParam,int iPad,C4JS uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestMessageBox(IDS_TOOLTIPS_SAVETRANSFER_UPLOAD, IDS_SAVE_TRANSFER_TEXT, uiIDA, 2, iPad,&UIScene_LoadOrJoinMenu::SaveTransferDialogReturned,pClass, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_TOOLTIPS_SAVETRANSFER_UPLOAD, IDS_SAVE_TRANSFER_TEXT, uiIDA, 2, iPad,&UIScene_LoadOrJoinMenu::SaveTransferDialogReturned,pClass); } break; #endif // SONY_REMOTE_STORAGE_UPLOAD @@ -2147,7 +2184,7 @@ int UIScene_LoadOrJoinMenu::SaveOptionsDialogReturned(void *pParam,int iPad,C4JS uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestMessageBox(IDS_COPYSAVE, IDS_TEXT_COPY_SAVE, uiIDA, 2, iPad,&UIScene_LoadOrJoinMenu::CopySaveDialogReturned,pClass, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_COPYSAVE, IDS_TEXT_COPY_SAVE, uiIDA, 2, iPad,&UIScene_LoadOrJoinMenu::CopySaveDialogReturned,pClass); } break; #endif @@ -2164,6 +2201,91 @@ int UIScene_LoadOrJoinMenu::SaveOptionsDialogReturned(void *pParam,int iPad,C4JS return 0; } + +#if defined (__PSVITA__) + +int UIScene_LoadOrJoinMenu::SignInAdhocReturned(void *pParam,bool bContinue, int iPad) +{ + UIScene_LoadOrJoinMenu* pClass = (UIScene_LoadOrJoinMenu*)pParam; + pClass->m_bIgnoreInput = false; + return 0; + +} + + + +int UIScene_LoadOrJoinMenu::MustSignInTexturePack(void *pParam,int iPad,C4JStorage::EMessageResult result) +{ + UIScene_LoadOrJoinMenu* pClass = (UIScene_LoadOrJoinMenu*)pParam; + + if(result==C4JStorage::EMessage_ResultAccept) + { + SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_LoadOrJoinMenu::MustSignInReturnedTexturePack, pClass); + } + else + { + pClass->m_bIgnoreInput = false; + } + + return 0; +} + + +int UIScene_LoadOrJoinMenu::MustSignInReturnedTexturePack(void *pParam,bool bContinue, int iPad) +{ + UIScene_LoadOrJoinMenu* pClass = (UIScene_LoadOrJoinMenu*)pParam; + + int commerceState = app.GetCommerceState(); + while( commerceState != CConsoleMinecraftApp::eCommerce_State_Offline && + commerceState != CConsoleMinecraftApp::eCommerce_State_Online && + commerceState != CConsoleMinecraftApp::eCommerce_State_Error) + { + Sleep(10); + commerceState = app.GetCommerceState(); + } + + if(bContinue==true) + { + SONYDLC *pSONYDLCInfo=app.GetSONYDLCInfo(pClass->m_initData->selectedSession->data.texturePackParentId); + if(pSONYDLCInfo!=NULL) + { + char chName[42]; + char chKeyName[20]; + char chSkuID[SCE_NP_COMMERCE2_SKU_ID_LEN]; + + memset(chSkuID,0,SCE_NP_COMMERCE2_SKU_ID_LEN); + // we have to retrieve the skuid from the store info, it can't be hardcoded since Sony may change it. + // So we assume the first sku for the product is the one we want + // MGH - keyname in the DLC file is 16 chars long, but there's no space for a NULL terminating char + memset(chKeyName, 0, sizeof(chKeyName)); + strncpy(chKeyName, pSONYDLCInfo->chDLCKeyname, 16); + +#ifdef __ORBIS__ + strcpy(chName, chKeyName); +#else + sprintf(chName,"%s-%s",app.GetCommerceCategory(),chKeyName); +#endif + app.GetDLCSkuIDFromProductList(chName,chSkuID); + // 4J-PB - need to check for an empty store + if(app.CheckForEmptyStore(iPad)==false) + { + if(app.DLCAlreadyPurchased(chSkuID)) + { + app.DownloadAlreadyPurchased(chSkuID); + } + else + { + app.Checkout(chSkuID); + } + } + } + } + pClass->m_bIgnoreInput = false; + return 0; +} + +#endif + int UIScene_LoadOrJoinMenu::TexturePackDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) { UIScene_LoadOrJoinMenu *pClass = (UIScene_LoadOrJoinMenu *)pParam; @@ -2173,24 +2295,53 @@ int UIScene_LoadOrJoinMenu::TexturePackDialogReturned(void *pParam,int iPad,C4JS { // we need to enable background downloading for the DLC XBackgroundDownloadSetMode(XBACKGROUND_DOWNLOAD_MODE_ALWAYS_ALLOW); -#if TO_BE_IMPLEMENTED - ULONGLONG ullOfferID_Full; - ULONGLONG ullIndexA[1]; - app.GetDLCFullOfferIDForPackID(pClass->m_initData->selectedSession->data.texturePackParentId,&ullOfferID_Full); +#if defined __PSVITA__ || defined __PS3__ || defined __ORBIS__ +#ifdef __PSVITA__ + if(!ProfileManager.IsSignedInLive(ProfileManager.GetPrimaryPad()) && CGameNetworkManager::usingAdhocMode()) + { + // get them to sign in to online + UINT uiIDA[2]; + uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; + uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; + ui.RequestAlertMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_LoadOrJoinMenu::MustSignInTexturePack,pClass); + return; + } +#endif - if( result==C4JStorage::EMessage_ResultAccept ) // Full version - { - ullIndexA[0]=ullOfferID_Full; - StorageManager.InstallOffer(1,ullIndexA,NULL,NULL); + SONYDLC *pSONYDLCInfo=app.GetSONYDLCInfo(pClass->m_initData->selectedSession->data.texturePackParentId); + if(pSONYDLCInfo!=NULL) + { + char chName[42]; + char chKeyName[20]; + char chSkuID[SCE_NP_COMMERCE2_SKU_ID_LEN]; - } - else // trial version - { - DLC_INFO *pDLCInfo=app.GetDLCInfoForFullOfferID(ullOfferID_Full); - ullIndexA[0]=pDLCInfo->ullOfferID_Trial; - StorageManager.InstallOffer(1,ullIndexA,NULL,NULL); - } + memset(chSkuID,0,SCE_NP_COMMERCE2_SKU_ID_LEN); + // we have to retrieve the skuid from the store info, it can't be hardcoded since Sony may change it. + // So we assume the first sku for the product is the one we want + // MGH - keyname in the DLC file is 16 chars long, but there's no space for a NULL terminating char + memset(chKeyName, 0, sizeof(chKeyName)); + strncpy(chKeyName, pSONYDLCInfo->chDLCKeyname, 16); + +#ifdef __ORBIS__ + strcpy(chName, chKeyName); +#else + sprintf(chName,"%s-%s",app.GetCommerceCategory(),chKeyName); +#endif + app.GetDLCSkuIDFromProductList(chName,chSkuID); + // 4J-PB - need to check for an empty store + if(app.CheckForEmptyStore(iPad)==false) + { + if(app.DLCAlreadyPurchased(chSkuID)) + { + app.DownloadAlreadyPurchased(chSkuID); + } + else + { + app.Checkout(chSkuID); + } + } + } #endif @@ -2208,7 +2359,7 @@ int UIScene_LoadOrJoinMenu::TexturePackDialogReturned(void *pParam,int iPad,C4JS { // 4J-JEV: Fix for XB1: #165863 - XR-074: Compliance: With no active network connection user is unable to convert from Trial to Full texture pack and is not messaged why. UINT uiIDA[1] = { IDS_CONFIRM_OK }; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad); } } #endif @@ -2256,8 +2407,7 @@ int UIScene_LoadOrJoinMenu::PSN_SignInReturned(void *pParam,bool bContinue, int int ret = sceNpBasicRecvMessageCustom(SCE_NP_BASIC_MESSAGE_MAIN_TYPE_INVITE, SCE_NP_BASIC_RECV_MESSAGE_OPTIONS_INCLUDE_BOOTABLE, SYS_MEMORY_CONTAINER_ID_INVALID); app.DebugPrintf("sceNpBasicRecvMessageCustom return %d ( %08x )\n", ret, ret); #elif defined __PSVITA__ - // TO BE IMPLEMENTED FOR VITA - PSVITA_STUBBED; + SQRNetworkManager_Vita::RecvInviteGUI(); #else SQRNetworkManager_Orbis::RecvInviteGUI(); #endif @@ -2377,9 +2527,14 @@ bool g_bForceVitaSaveWipe = false; int UIScene_LoadOrJoinMenu::DownloadSonyCrossSaveThreadProc( LPVOID lpParameter ) { + m_bSaveTransferRunning = true; +#ifdef __PS3__ + StorageManager.SetSaveTransferInProgress(true); +#endif Compression::UseDefaultThreadStorage(); UIScene_LoadOrJoinMenu* pClass = (UIScene_LoadOrJoinMenu *) lpParameter; pClass->m_saveTransferDownloadCancelled = false; + m_bSaveTransferRunning = true; bool bAbortCalled = false; Minecraft *pMinecraft=Minecraft::GetInstance(); bool bSaveFileCreated = false; @@ -2416,14 +2571,24 @@ int UIScene_LoadOrJoinMenu::DownloadSonyCrossSaveThreadProc( LPVOID lpParameter { if(app.getRemoteStorage()->saveIsAvailable()) { - pClass->m_eSaveTransferState = eSaveTransfer_CreateDummyFile; + if(app.getRemoteStorage()->saveVersionSupported()) + { + pClass->m_eSaveTransferState = eSaveTransfer_CreateDummyFile; + } + else + { + // must be a newer version of the save in the cloud that we don't support yet + UINT uiIDA[1]; + uiIDA[0]=IDS_CONFIRM_OK; + ui.RequestAlertMessage(IDS_TOOLTIPS_SAVETRANSFER_DOWNLOAD, IDS_SAVE_TRANSFER_WRONG_VERSION, uiIDA, 1, ProfileManager.GetPrimaryPad(),RemoteSaveNotFoundCallback,pClass); + } } - else + else { // no save available, inform the user about the functionality UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TOOLTIPS_SAVETRANSFER_DOWNLOAD, IDS_SAVE_TRANSFER_NOT_AVAILABLE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(),RemoteSaveNotFoundCallback,pClass, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_TOOLTIPS_SAVETRANSFER_DOWNLOAD, IDS_SAVE_TRANSFER_NOT_AVAILABLE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(),RemoteSaveNotFoundCallback,pClass); } } break; @@ -2446,7 +2611,11 @@ int UIScene_LoadOrJoinMenu::DownloadSonyCrossSaveThreadProc( LPVOID lpParameter BYTE bTextMetadata[88]; ZeroMemory(bTextMetadata,88); - int iTextMetadataBytes = app.CreateImageTextData(bTextMetadata, app.getRemoteStorage()->getSaveSeed(), true, app.getRemoteStorage()->getSaveHostOptions(), app.getRemoteStorage()->getSaveTexturePack() ); + unsigned int hostOptions = app.getRemoteStorage()->getSaveHostOptions(); +#ifdef __ORBIS__ + app.SetGameHostOption(hostOptions, eGameHostOption_WorldSize, e_worldSize_Classic); // force the classic world size on, otherwise it's unknown and we can't expand +#endif + int iTextMetadataBytes = app.CreateImageTextData(bTextMetadata, app.getRemoteStorage()->getSaveSeed(), true, hostOptions, app.getRemoteStorage()->getSaveTexturePack() ); // set the icon and save image StorageManager.SetSaveImages(pbThumbnailData,dwThumbnailDataSize,pbDataSaveImage,dwDataSizeSaveImage,bTextMetadata,iTextMetadataBytes); @@ -2606,7 +2775,9 @@ int UIScene_LoadOrJoinMenu::DownloadSonyCrossSaveThreadProc( LPVOID lpParameter BYTE bTextMetadata[88]; ZeroMemory(bTextMetadata,88); - int iTextMetadataBytes = app.CreateImageTextData(bTextMetadata, app.getRemoteStorage()->getSaveSeed(), true, app.getRemoteStorage()->getSaveHostOptions(), app.getRemoteStorage()->getSaveTexturePack() ); + unsigned int remoteHostOptions = app.getRemoteStorage()->getSaveHostOptions(); + app.SetGameHostOption(eGameHostOption_All, remoteHostOptions ); + int iTextMetadataBytes = app.CreateImageTextData(bTextMetadata, app.getRemoteStorage()->getSaveSeed(), true, remoteHostOptions, app.getRemoteStorage()->getSaveTexturePack() ); // set the icon and save image StorageManager.SetSaveImages(pbThumbnailData,dwThumbnailDataSize,pbDataSaveImage,dwDataSizeSaveImage,bTextMetadata,iTextMetadataBytes); @@ -2668,7 +2839,7 @@ int UIScene_LoadOrJoinMenu::DownloadSonyCrossSaveThreadProc( LPVOID lpParameter UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; app.getRemoteStorage()->waitForStorageManagerIdle(); // wait for everything to complete before we hand control back to the player - ui.RequestMessageBox( IDS_TOOLTIPS_SAVETRANSFER_DOWNLOAD, IDS_SAVE_TRANSFER_DOWNLOADCOMPLETE, uiIDA,1,ProfileManager.GetPrimaryPad(),CrossSaveFinishedCallback,pClass, app.GetStringTable()); + ui.RequestErrorMessage( IDS_TOOLTIPS_SAVETRANSFER_DOWNLOAD, IDS_SAVE_TRANSFER_DOWNLOADCOMPLETE, uiIDA,1,ProfileManager.GetPrimaryPad(),CrossSaveFinishedCallback,pClass); pClass->m_eSaveTransferState = eSaveTransfer_Finished; } break; @@ -2709,20 +2880,20 @@ int UIScene_LoadOrJoinMenu::DownloadSonyCrossSaveThreadProc( LPVOID lpParameter } else { - // delete the save file - app.getRemoteStorage()->waitForStorageManagerIdle(); - C4JStorage::ESaveGameState eDeleteStatus = StorageManager.DeleteSaveData(&pSaveDetails->SaveInfoA[saveInfoIndex],UIScene_LoadOrJoinMenu::CrossSaveDeleteOnErrorReturned,pClass); - if(eDeleteStatus == C4JStorage::ESaveGame_Delete) - { - pClass->m_eSaveTransferState = eSaveTransfer_ErrorDeletingSave; - } - else - { - app.DebugPrintf("StorageManager.DeleteSaveData failed!!\n"); - pClass->m_eSaveTransferState = eSaveTransfer_ErrorMesssage; + // delete the save file + app.getRemoteStorage()->waitForStorageManagerIdle(); + C4JStorage::ESaveGameState eDeleteStatus = StorageManager.DeleteSaveData(&pSaveDetails->SaveInfoA[saveInfoIndex],UIScene_LoadOrJoinMenu::CrossSaveDeleteOnErrorReturned,pClass); + if(eDeleteStatus == C4JStorage::ESaveGame_Delete) + { + pClass->m_eSaveTransferState = eSaveTransfer_ErrorDeletingSave; + } + else + { + app.DebugPrintf("StorageManager.DeleteSaveData failed!!\n"); + pClass->m_eSaveTransferState = eSaveTransfer_ErrorMesssage; + } } } - } else { pClass->m_eSaveTransferState = eSaveTransfer_ErrorMesssage; @@ -2743,7 +2914,25 @@ int UIScene_LoadOrJoinMenu::DownloadSonyCrossSaveThreadProc( LPVOID lpParameter { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_TOOLTIPS_SAVETRANSFER_DOWNLOAD, IDS_SAVE_TRANSFER_DOWNLOADFAILED, uiIDA,1,ProfileManager.GetPrimaryPad(),CrossSaveFinishedCallback,pClass, app.GetStringTable()); + UINT errorMessage = IDS_SAVE_TRANSFER_DOWNLOADFAILED; + if(!ProfileManager.IsSignedInLive(ProfileManager.GetPrimaryPad())) + { + errorMessage = IDS_ERROR_NETWORK; // show "A network error has occurred." +#ifdef __ORBIS__ + if(!ProfileManager.isSignedInPSN(ProfileManager.GetPrimaryPad())) + { + errorMessage = IDS_PRO_NOTONLINE_TEXT; // show "not signed into PSN" + } +#endif +#ifdef __VITA__ + if(!ProfileManager.IsSignedInPSN(ProfileManager.GetPrimaryPad())) + { + errorMessage = IDS_PRO_NOTONLINE_TEXT; // show "not signed into PSN" + } +#endif + + } + ui.RequestErrorMessage( IDS_TOOLTIPS_SAVETRANSFER_DOWNLOAD, errorMessage, uiIDA,1,ProfileManager.GetPrimaryPad(),CrossSaveFinishedCallback,pClass); pClass->m_eSaveTransferState = eSaveTransfer_Finished; } if(bSaveFileCreated) // save file has been created, then deleted. @@ -2755,14 +2944,16 @@ int UIScene_LoadOrJoinMenu::DownloadSonyCrossSaveThreadProc( LPVOID lpParameter break; case eSaveTransfer_Finished: { - } // waiting to dismiss the dialog break; } Sleep(50); } - + m_bSaveTransferRunning = false; +#ifdef __PS3__ + StorageManager.SetSaveTransferInProgress(false); +#endif return 0; } @@ -2887,7 +3078,7 @@ int UIScene_LoadOrJoinMenu::UploadSonyCrossSaveThreadProc( LPVOID lpParameter ) { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_TOOLTIPS_SAVETRANSFER_UPLOAD, IDS_SAVE_TRANSFER_UPLOADCOMPLETE, uiIDA,1,ProfileManager.GetPrimaryPad(),CrossSaveUploadFinishedCallback,pClass, app.GetStringTable()); + ui.RequestErrorMessage( IDS_TOOLTIPS_SAVETRANSFER_UPLOAD, IDS_SAVE_TRANSFER_UPLOADCOMPLETE, uiIDA,1,ProfileManager.GetPrimaryPad(),CrossSaveUploadFinishedCallback,pClass); pClass->m_eSaveUploadState = esaveUpload_Finished; } break; @@ -2904,7 +3095,7 @@ int UIScene_LoadOrJoinMenu::UploadSonyCrossSaveThreadProc( LPVOID lpParameter ) { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_TOOLTIPS_SAVETRANSFER_UPLOAD, IDS_SAVE_TRANSFER_UPLOADFAILED, uiIDA,1,ProfileManager.GetPrimaryPad(),CrossSaveUploadFinishedCallback,pClass, app.GetStringTable()); + ui.RequestErrorMessage( IDS_TOOLTIPS_SAVETRANSFER_UPLOAD, IDS_SAVE_TRANSFER_UPLOADFAILED, uiIDA,1,ProfileManager.GetPrimaryPad(),CrossSaveUploadFinishedCallback,pClass); pClass->m_eSaveUploadState = esaveUpload_Finished; } } @@ -2927,7 +3118,7 @@ void UIScene_LoadOrJoinMenu::SaveUploadReturned(LPVOID lpParam, SonyRemoteStorag if(pClass->m_saveTransferUploadCancelled) { UINT uiIDA[1] = { IDS_CONFIRM_OK }; - ui.RequestMessageBox( IDS_CANCEL_UPLOAD_TITLE, IDS_CANCEL_UPLOAD_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), CrossSaveUploadFinishedCallback, pClass, app.GetStringTable() ); + ui.RequestErrorMessage( IDS_CANCEL_UPLOAD_TITLE, IDS_CANCEL_UPLOAD_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), CrossSaveUploadFinishedCallback, pClass ); pClass->m_eSaveUploadState=esaveUpload_Finished; } else @@ -3054,8 +3245,18 @@ int UIScene_LoadOrJoinMenu::DownloadXbox360SaveThreadProc( LPVOID lpParameter ) switch(UIScene_LoadOrJoinMenu::s_eSaveTransferFile) { case eSaveTransferFile_Marker: - UIScene_LoadOrJoinMenu::s_eSaveTransferFile = eSaveTransferFile_Metadata; - RequestFileSize( pStateContainer, L"metadata" ); + // MGH - the marker file now contains the save file version number + // if the version is higher than we handle, cancel the download. + if(UIScene_LoadOrJoinMenu::s_transferData[0] > SAVE_FILE_VERSION_NUMBER) + { + pMinecraft->progressRenderer->progressStage(IDS_SAVETRANSFER_NONE_FOUND); + pStateContainer->m_eSaveTransferState=C4JStorage::eSaveTransfer_Idle; + } + else + { + UIScene_LoadOrJoinMenu::s_eSaveTransferFile = eSaveTransferFile_Metadata; + RequestFileSize( pStateContainer, L"metadata" ); + } break; case eSaveTransferFile_Metadata: { @@ -3078,7 +3279,28 @@ int UIScene_LoadOrJoinMenu::DownloadXbox360SaveThreadProc( LPVOID lpParameter ) byteArray ba(thumbnailSize); dis.readFully(ba); - StorageManager.SetSaveImages(ba.data, ba.length, NULL, 0, NULL, 0); + + + // retrieve the seed value from the image metadata, we need to change to host options, then set it back again + bool bHostOptionsRead = false; + unsigned int uiHostOptions = 0; + DWORD dwTexturePack; + __int64 seedVal; + + char szSeed[50]; + ZeroMemory(szSeed,50); + app.GetImageTextData(ba.data,ba.length,(unsigned char *)&szSeed,uiHostOptions,bHostOptionsRead,dwTexturePack); + sscanf_s(szSeed, "%I64d", &seedVal); + + app.SetGameHostOption(uiHostOptions, eGameHostOption_WorldSize, e_worldSize_Classic); // force the classic world size on, otherwise it's unknown and we can't expand + + + BYTE bTextMetadata[88]; + ZeroMemory(bTextMetadata,88); + + int iTextMetadataBytes = app.CreateImageTextData(bTextMetadata, seedVal, true, uiHostOptions, dwTexturePack); + // set the icon and save image + StorageManager.SetSaveImages(ba.data, ba.length, NULL, 0, bTextMetadata, iTextMetadataBytes); delete ba.data; } @@ -3468,12 +3690,12 @@ int UIScene_LoadOrJoinMenu::CopySaveDataReturned(LPVOID lpParam, bool success, C if( stat == C4JStorage::ESaveGame_CopyCompleteFailLocalStorage ) { ui.LeaveCallbackIdCriticalSection(); - ui.RequestMessageBox(IDS_COPYSAVE_FAILED_TITLE, IDS_COPYSAVE_FAILED_LOCAL, uiIDA, 1, ProfileManager.GetPrimaryPad(), CopySaveErrorDialogFinishedCallback, lpParam, app.GetStringTable()); + ui.RequestErrorMessage(IDS_COPYSAVE_FAILED_TITLE, IDS_COPYSAVE_FAILED_LOCAL, uiIDA, 1, ProfileManager.GetPrimaryPad(), CopySaveErrorDialogFinishedCallback, lpParam); } else if( stat == C4JStorage::ESaveGame_CopyCompleteFailQuota ) { ui.LeaveCallbackIdCriticalSection(); - ui.RequestMessageBox(IDS_COPYSAVE_FAILED_TITLE, IDS_COPYSAVE_FAILED_QUOTA, uiIDA, 1, ProfileManager.GetPrimaryPad(), CopySaveErrorDialogFinishedCallback, lpParam, app.GetStringTable()); + ui.RequestErrorMessage(IDS_COPYSAVE_FAILED_TITLE, IDS_COPYSAVE_FAILED_QUOTA, uiIDA, 1, ProfileManager.GetPrimaryPad(), CopySaveErrorDialogFinishedCallback, lpParam); } else { diff --git a/Minecraft.Client/Common/UI/UIScene_LoadOrJoinMenu.h b/Minecraft.Client/Common/UI/UIScene_LoadOrJoinMenu.h index 01d94b05..3599aa37 100644 --- a/Minecraft.Client/Common/UI/UIScene_LoadOrJoinMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_LoadOrJoinMenu.h @@ -153,6 +153,12 @@ public: static int DeleteSaveDataReturned(LPVOID lpParam,bool bRes); static int RenameSaveDataReturned(LPVOID lpParam,bool bRes); static int KeyboardCompleteWorldNameCallback(LPVOID lpParam,bool bRes); +#ifdef __PSVITA__ + static int MustSignInTexturePack(void *pParam,int iPad,C4JStorage::EMessageResult result); + static int MustSignInReturnedTexturePack(void *pParam,bool bContinue, int iPad); + static int SignInAdhocReturned(void *pParam,bool bContinue, int iPad); +#endif + protected: void handlePress(F64 controlId, F64 childId); void LoadLevelGen(LevelGenerationOptions *levelGen); @@ -250,6 +256,7 @@ private: eSaveTransferState m_eSaveTransferState; static unsigned long m_ulFileSize; static wstring m_wstrStageText; + static bool m_bSaveTransferRunning; int m_iProgress; char m_downloadedUniqueFilename[64];//SCE_SAVE_DATA_DIRNAME_DATA_MAXSIZE]; bool m_saveTransferDownloadCancelled; @@ -265,6 +272,9 @@ private: static ConsoleSaveFile* SonyCrossSaveConvert(); static void CancelSaveTransferCallback(LPVOID lpParam); +public: + static bool isSaveTransferRunning() { return m_bSaveTransferRunning; } +private: #endif #ifdef SONY_REMOTE_STORAGE_UPLOAD diff --git a/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp b/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp index e05b6df8..fe743adc 100644 --- a/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp @@ -12,6 +12,8 @@ Random *UIScene_MainMenu::random = new Random(); +EUIScene UIScene_MainMenu::eNavigateWhenReady = (EUIScene) -1; + UIScene_MainMenu::UIScene_MainMenu(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) { #ifdef __ORBIS @@ -31,31 +33,31 @@ UIScene_MainMenu::UIScene_MainMenu(int iPad, void *initData, UILayer *parentLaye m_bIgnorePress=false; - m_buttons[(int)eControl_PlayGame].init(app.GetString(IDS_PLAY_GAME),eControl_PlayGame); + m_buttons[(int)eControl_PlayGame].init(IDS_PLAY_GAME,eControl_PlayGame); #ifdef _XBOX_ONE - if(!ProfileManager.IsFullVersion()) m_buttons[(int)eControl_PlayGame].setLabel(app.GetString(IDS_PLAY_TRIAL_GAME)); + if(!ProfileManager.IsFullVersion()) m_buttons[(int)eControl_PlayGame].setLabel(IDS_PLAY_TRIAL_GAME); app.SetReachedMainMenu(); #endif - m_buttons[(int)eControl_Leaderboards].init(app.GetString(IDS_LEADERBOARDS),eControl_Leaderboards); - m_buttons[(int)eControl_Achievements].init(app.GetString(IDS_ACHIEVEMENTS),eControl_Achievements); - m_buttons[(int)eControl_HelpAndOptions].init(app.GetString(IDS_HELP_AND_OPTIONS),eControl_HelpAndOptions); + m_buttons[(int)eControl_Leaderboards].init(IDS_LEADERBOARDS,eControl_Leaderboards); + m_buttons[(int)eControl_Achievements].init( (UIString)IDS_ACHIEVEMENTS,eControl_Achievements); + m_buttons[(int)eControl_HelpAndOptions].init(IDS_HELP_AND_OPTIONS,eControl_HelpAndOptions); if(ProfileManager.IsFullVersion()) { m_bTrialVersion=false; - m_buttons[(int)eControl_UnlockOrDLC].init(app.GetString(IDS_DOWNLOADABLECONTENT),eControl_UnlockOrDLC); + m_buttons[(int)eControl_UnlockOrDLC].init(IDS_DOWNLOADABLECONTENT,eControl_UnlockOrDLC); } else { m_bTrialVersion=true; - m_buttons[(int)eControl_UnlockOrDLC].init(app.GetString(IDS_UNLOCK_FULL_GAME),eControl_UnlockOrDLC); + m_buttons[(int)eControl_UnlockOrDLC].init(IDS_UNLOCK_FULL_GAME,eControl_UnlockOrDLC); } #ifndef _DURANGO m_buttons[(int)eControl_Exit].init(app.GetString(IDS_EXIT_GAME),eControl_Exit); #else - m_buttons[(int)eControl_XboxHelp].init(app.GetString(IDS_XBOX_HELP_APP), eControl_XboxHelp); + m_buttons[(int)eControl_XboxHelp].init(IDS_XBOX_HELP_APP, eControl_XboxHelp); #endif #if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) @@ -151,6 +153,11 @@ void UIScene_MainMenu::handleGainFocus(bool navBack) ui.ShowPlayerDisplayname(false); m_bIgnorePress=false; + if (eNavigateWhenReady >= 0) + { + return; + } + // 4J-JEV: This needs to come before SetLockedProfile(-1) as it wipes the XbLive contexts. if (!navBack) { @@ -175,7 +182,7 @@ void UIScene_MainMenu::handleGainFocus(bool navBack) if(navBack && ProfileManager.IsFullVersion()) { // Replace the Unlock Full Game with Downloadable Content - m_buttons[(int)eControl_UnlockOrDLC].setLabel(app.GetString(IDS_DOWNLOADABLECONTENT)); + m_buttons[(int)eControl_UnlockOrDLC].setLabel(IDS_DOWNLOADABLECONTENT); } #if TO_BE_IMPLEMENTED @@ -223,11 +230,25 @@ wstring UIScene_MainMenu::getMoviePath() return L"MainMenu"; } +void UIScene_MainMenu::handleReload() +{ +#if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) + // Not allowed to exit from a PS3 game from the game - have to use the PS button + removeControl( &m_buttons[(int)eControl_Exit], false ); + // We don't have a way to display trophies/achievements, so remove the button + removeControl( &m_buttons[(int)eControl_Achievements], false ); +#endif +#ifdef _DURANGO + // Allowed to not have achievements in the menu + removeControl( &m_buttons[(int)eControl_Achievements], false ); +#endif +} + void UIScene_MainMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) { //app.DebugPrintf("UIScene_DebugOverlay handling input for pad %d, key %d, down- %s, pressed- %s, released- %s\n", iPad, key, down?"TRUE":"FALSE", pressed?"TRUE":"FALSE", released?"TRUE":"FALSE"); - if(m_bIgnorePress) return; + if ( m_bIgnorePress || (eNavigateWhenReady >= 0) ) return; #if defined (__ORBIS__) || defined (__PSVITA__) // ignore all players except player 0 - it's their profile that is currently being used @@ -265,7 +286,7 @@ void UIScene_MainMenu::handleInput(int iPad, int key, bool repeat, bool pressed, UINT uiIDA[2]; uiIDA[0]=IDS__NETWORK_PSN; uiIDA[1]=IDS_NETWORK_ADHOC; - ui.RequestMessageBox(IDS_SELECT_NETWORK_MODE_TITLE, IDS_SELECT_NETWORK_MODE_TEXT, uiIDA, 2, XUSER_INDEX_ANY, &UIScene_MainMenu::SelectNetworkModeReturned,this); + ui.RequestErrorMessage(IDS_SELECT_NETWORK_MODE_TITLE, IDS_SELECT_NETWORK_MODE_TEXT, uiIDA, 2, XUSER_INDEX_ANY, &UIScene_MainMenu::SelectNetworkModeReturned,this); } break; #endif @@ -281,7 +302,11 @@ void UIScene_MainMenu::handlePress(F64 controlId, F64 childId) { int primaryPad = ProfileManager.GetPrimaryPad(); +#ifdef _XBOX_ONE + int (*signInReturnedFunc) (LPVOID,const bool, const int iPad, const int iController) = NULL; +#else int (*signInReturnedFunc) (LPVOID,const bool, const int iPad) = NULL; +#endif switch((int)controlId) { @@ -343,7 +368,7 @@ void UIScene_MainMenu::handlePress(F64 controlId, F64 childId) UINT uiIDA[2]; uiIDA[0]=IDS_CANCEL; uiIDA[1]=IDS_OK; - ui.RequestMessageBox(IDS_WARNING_ARCADE_TITLE, IDS_WARNING_ARCADE_TEXT, uiIDA, 2, XUSER_INDEX_ANY,&UIScene_MainMenu::ExitGameReturned,this); + ui.RequestErrorMessage(IDS_WARNING_ARCADE_TITLE, IDS_WARNING_ARCADE_TEXT, uiIDA, 2, XUSER_INDEX_ANY,&UIScene_MainMenu::ExitGameReturned,this); } else { @@ -390,7 +415,7 @@ void UIScene_MainMenu::handlePress(F64 controlId, F64 childId) UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestMessageBox(IDS_MUST_SIGN_IN_TITLE, IDS_MUST_SIGN_IN_TEXT, uiIDA, 2, primaryPad, &UIScene_MainMenu::MustSignInReturned, this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_MUST_SIGN_IN_TITLE, IDS_MUST_SIGN_IN_TEXT, uiIDA, 2, primaryPad, &UIScene_MainMenu::MustSignInReturned, this); } } } @@ -557,7 +582,15 @@ int UIScene_MainMenu::MustSignInReturnedPSN(void *pParam,int iPad,C4JStorage::EM SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_MainMenu::Leaderboards_SignInReturned, pClass); break; case eAction_RunGamePSN: - SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_MainMenu::CreateLoad_SignInReturned, pClass); + if(CGameNetworkManager::usingAdhocMode()) + { + SQRNetworkManager_AdHoc_Vita::AttemptAdhocSignIn(&UIScene_MainMenu::CreateLoad_SignInReturned, pClass); + } + else + { + SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_MainMenu::CreateLoad_SignInReturned, pClass); + + } break; case eAction_RunUnlockOrDLCPSN: //CD - Must force Ad-Hoc off if they want commerce PSN sign-in @@ -604,7 +637,11 @@ int UIScene_MainMenu::MustSignInReturnedPSN(void *pParam,int iPad,C4JStorage::EM } #endif +#ifdef _XBOX_ONE +int UIScene_MainMenu::HelpAndOptions_SignInReturned(void *pParam,bool bContinue,int iPad, int iController) +#else int UIScene_MainMenu::HelpAndOptions_SignInReturned(void *pParam,bool bContinue,int iPad) +#endif { UIScene_MainMenu *pClass = (UIScene_MainMenu *)pParam; @@ -621,7 +658,7 @@ int UIScene_MainMenu::HelpAndOptions_SignInReturned(void *pParam,bool bContinue, #ifdef _XBOX_ONE ui.ShowPlayerDisplayname(true); #endif - ui.NavigateToScene(iPad,eUIScene_HelpAndOptionsMenu); + proceedToScene(iPad, eUIScene_HelpAndOptionsMenu); } #if TO_BE_IMPLEMENTED else @@ -662,16 +699,20 @@ int UIScene_MainMenu::HelpAndOptions_SignInReturned(void *pParam,bool bContinue, } #ifdef _XBOX_ONE -int UIScene_MainMenu::ChooseUser_SignInReturned(void *pParam, bool bContinue, int iPad) +int UIScene_MainMenu::ChooseUser_SignInReturned(void *pParam, bool bContinue, int iPad, int iController) { UIScene_MainMenu* pClass = (UIScene_MainMenu*)pParam; pClass->m_bIgnorePress = false; - + pClass->updateTooltips(); return 0; } #endif +#ifdef _XBOX_ONE +int UIScene_MainMenu::CreateLoad_SignInReturned(void *pParam, bool bContinue, int iPad, int iController) +#else int UIScene_MainMenu::CreateLoad_SignInReturned(void *pParam, bool bContinue, int iPad) +#endif { UIScene_MainMenu* pClass = (UIScene_MainMenu*)pParam; @@ -685,7 +726,7 @@ int UIScene_MainMenu::CreateLoad_SignInReturned(void *pParam, bool bContinue, in if(ProfileManager.IsGuest(ProfileManager.GetPrimaryPad())) { pClass->m_bIgnorePress=false; - ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); } else { @@ -723,7 +764,7 @@ int UIScene_MainMenu::CreateLoad_SignInReturned(void *pParam, bool bContinue, in if(ProfileManager.IsGuest(iPad)) { pClass->m_bIgnorePress=false; - ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); } else { @@ -741,7 +782,7 @@ int UIScene_MainMenu::CreateLoad_SignInReturned(void *pParam, bool bContinue, in #ifdef _XBOX_ONE ui.ShowPlayerDisplayname(true); #endif - ui.NavigateToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadOrJoinMenu); + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadOrJoinMenu); } else { @@ -804,7 +845,7 @@ int UIScene_MainMenu::CreateLoad_SignInReturned(void *pParam, bool bContinue, in #ifdef _XBOX_ONE ui.ShowPlayerDisplayname(true); #endif - ui.NavigateToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadOrJoinMenu); + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadOrJoinMenu); #endif } } @@ -818,7 +859,7 @@ int UIScene_MainMenu::CreateLoad_SignInReturned(void *pParam, bool bContinue, in #ifdef _XBOX_ONE ui.ShowPlayerDisplayname(true); #endif - ui.NavigateToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadOrJoinMenu); + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadOrJoinMenu); #endif } } @@ -869,7 +910,11 @@ int UIScene_MainMenu::CreateLoad_SignInReturned(void *pParam, bool bContinue, in return 0; } +#ifdef _XBOX_ONE +int UIScene_MainMenu::Leaderboards_SignInReturned(void *pParam,bool bContinue,int iPad,int iController) +#else int UIScene_MainMenu::Leaderboards_SignInReturned(void *pParam,bool bContinue,int iPad) +#endif { UIScene_MainMenu *pClass = (UIScene_MainMenu *)pParam; @@ -884,12 +929,12 @@ int UIScene_MainMenu::Leaderboards_SignInReturned(void *pParam,bool bContinue,in if(ProfileManager.IsGuest(ProfileManager.GetPrimaryPad())) { pClass->m_bIgnorePress=false; - ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); } else if(!ProfileManager.IsSignedInLive(ProfileManager.GetPrimaryPad())) { pClass->m_bIgnorePress=false; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1); } else { @@ -900,11 +945,11 @@ int UIScene_MainMenu::Leaderboards_SignInReturned(void *pParam,bool bContinue,in if(bContentRestricted) { pClass->m_bIgnorePress=false; -#if !(defined(_XBOX) || defined(_WIN64)) // 4J Stu - Temp to get the win build running, but so we check this for other platforms +#if !(defined(_XBOX) || defined(_WINDOWS64) || defined(_XBOX_ONE) ) // 4J Stu - Temp to get the win build running, but so we check this for other platforms // you can't see leaderboards UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); #endif } else @@ -913,7 +958,7 @@ int UIScene_MainMenu::Leaderboards_SignInReturned(void *pParam,bool bContinue,in #ifdef _XBOX_ONE ui.ShowPlayerDisplayname(true); #endif - ui.NavigateToScene(ProfileManager.GetPrimaryPad(),eUIScene_LeaderboardsMenu); + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LeaderboardsMenu); } } } @@ -935,7 +980,11 @@ int UIScene_MainMenu::Leaderboards_SignInReturned(void *pParam,bool bContinue,in return 0; } +#ifdef _XBOX_ONE +int UIScene_MainMenu::Achievements_SignInReturned(void *pParam,bool bContinue,int iPad,int iController) +#else int UIScene_MainMenu::Achievements_SignInReturned(void *pParam,bool bContinue,int iPad) +#endif { UIScene_MainMenu *pClass = (UIScene_MainMenu *)pParam; @@ -965,7 +1014,11 @@ int UIScene_MainMenu::Achievements_SignInReturned(void *pParam,bool bContinue,in return 0; } +#ifdef _XBOX_ONE +int UIScene_MainMenu::UnlockFullGame_SignInReturned(void *pParam,bool bContinue,int iPad,int iController) +#else int UIScene_MainMenu::UnlockFullGame_SignInReturned(void *pParam,bool bContinue,int iPad) +#endif { UIScene_MainMenu* pClass = (UIScene_MainMenu*)pParam; @@ -995,8 +1048,8 @@ int UIScene_MainMenu::UnlockFullGame_SignInReturned(void *pParam,bool bContinue, return 0; } -#ifdef _DURANGO -int UIScene_MainMenu::XboxHelp_SignInReturned(void *pParam, bool bContinue, int iPad) +#ifdef _XBOX_ONE +int UIScene_MainMenu::XboxHelp_SignInReturned(void *pParam, bool bContinue, int iPad, int iController) { UIScene_MainMenu* pClass = (UIScene_MainMenu*)pParam; @@ -1096,7 +1149,7 @@ void UIScene_MainMenu::RefreshChatAndContentRestrictionsReturned_PlayGame(void * { UINT uiIDA[1]; uiIDA[0]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::PlayOfflineReturned, pClass, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::PlayOfflineReturned, pClass); return; } @@ -1123,7 +1176,7 @@ void UIScene_MainMenu::RefreshChatAndContentRestrictionsReturned_PlayGame(void * UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestMessageBox(IDS_MUST_SIGN_IN_TITLE, IDS_MUST_SIGN_IN_TEXT, uiIDA, 2, primaryPad, &UIScene_MainMenu::MustSignInReturned, pClass, app.GetStringTable()); + ui.RequestErrorMessage(IDS_MUST_SIGN_IN_TITLE, IDS_MUST_SIGN_IN_TEXT, uiIDA, 2, primaryPad, &UIScene_MainMenu::MustSignInReturned, pClass); } } } @@ -1188,7 +1241,7 @@ void UIScene_MainMenu::RefreshChatAndContentRestrictionsReturned_Leaderboards(vo { UINT uiIDA[1]; uiIDA[0] = IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(), nullptr, pClass, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(), nullptr, pClass); return; } @@ -1213,7 +1266,7 @@ void UIScene_MainMenu::RefreshChatAndContentRestrictionsReturned_Leaderboards(vo UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestMessageBox(IDS_MUST_SIGN_IN_TITLE, IDS_MUST_SIGN_IN_TEXT, uiIDA, 2, primaryPad, &UIScene_MainMenu::MustSignInReturned, pClass, app.GetStringTable()); + ui.RequestErrorMessage(IDS_MUST_SIGN_IN_TITLE, IDS_MUST_SIGN_IN_TEXT, uiIDA, 2, primaryPad, &UIScene_MainMenu::MustSignInReturned, pClass); } } } @@ -1257,7 +1310,7 @@ void UIScene_MainMenu::RunPlayGame(int iPad) uiIDA[0]=IDS_OK; m_bIgnorePress=false; - ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); } else { @@ -1308,7 +1361,7 @@ void UIScene_MainMenu::RunPlayGame(int iPad) { uiIDA[0]=IDS_NETWORK_ADHOC; // this should be "Connect to adhoc network" - ui.RequestMessageBox(IDS_PRO_NOTADHOCONLINE_TITLE, IDS_PRO_NOTADHOCONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_MainMenu::MustSignInReturnedPSN,this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTADHOCONLINE_TITLE, IDS_PRO_NOTADHOCONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_MainMenu::MustSignInReturnedPSN,this); } else { @@ -1330,12 +1383,12 @@ void UIScene_MainMenu::RunPlayGame(int iPad) ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPad, &UIScene_MainMenu::MustSignInReturnedPSN, this, app.GetStringTable()); return; } */ - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_MainMenu::MustSignInReturnedPSN,this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_MainMenu::MustSignInReturnedPSN,this); } #else - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPad, &UIScene_MainMenu::MustSignInReturnedPSN, this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPad, &UIScene_MainMenu::MustSignInReturnedPSN, this); #endif #elif defined __ORBIS__ @@ -1349,7 +1402,7 @@ void UIScene_MainMenu::RunPlayGame(int iPad) UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad, UIScene_MainMenu::PlayOfflineReturned, this, app.GetStringTable()); + ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad, UIScene_MainMenu::PlayOfflineReturned, this); } else { @@ -1358,7 +1411,7 @@ void UIScene_MainMenu::RunPlayGame(int iPad) UINT uiIDA[2]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1] = IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPad, &UIScene_MainMenu::MustSignInReturnedPSN, this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPad, &UIScene_MainMenu::MustSignInReturnedPSN, this); return; } #else @@ -1366,7 +1419,7 @@ void UIScene_MainMenu::RunPlayGame(int iPad) #ifdef _XBOX_ONE ui.ShowPlayerDisplayname(true); #endif - ui.NavigateToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadOrJoinMenu); + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadOrJoinMenu); #endif } else @@ -1438,7 +1491,7 @@ void UIScene_MainMenu::RunPlayGame(int iPad) #ifdef _XBOX_ONE ui.ShowPlayerDisplayname(true); #endif - ui.NavigateToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadOrJoinMenu); + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadOrJoinMenu); #endif } } @@ -1482,7 +1535,7 @@ void UIScene_MainMenu::RunLeaderboards(int iPad) // guests can't look at leaderboards if(ProfileManager.IsGuest(iPad)) { - ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); } else if(!ProfileManager.IsSignedInLive(iPad)) { @@ -1491,7 +1544,7 @@ void UIScene_MainMenu::RunLeaderboards(int iPad) // get them to sign in to online UINT uiIDA[1]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(),&UIScene_MainMenu::MustSignInReturnedPSN,this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(),&UIScene_MainMenu::MustSignInReturnedPSN,this); /* 4J-PB - Add this after release #elif defined __PSVITA__ @@ -1522,18 +1575,18 @@ void UIScene_MainMenu::RunLeaderboards(int iPad) UINT uiIDA[1]; uiIDA[0] = IDS_OK; - ui.RequestMessageBox( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad); } else { // Not signed in to PSN UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::MustSignInReturnedPSN, this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::MustSignInReturnedPSN, this); return; } #else - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1); #endif } else @@ -1551,11 +1604,11 @@ void UIScene_MainMenu::RunLeaderboards(int iPad) #endif if(bContentRestricted) { -#if !(defined(_XBOX) || defined(_WIN64)) // 4J Stu - Temp to get the win build running, but so we check this for other platforms +#if !(defined(_XBOX) || defined(_WINDOWS64) || defined(_XBOX_ONE)) // 4J Stu - Temp to get the win build running, but so we check this for other platforms // you can't see leaderboards UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,this); #endif } else @@ -1567,7 +1620,7 @@ void UIScene_MainMenu::RunLeaderboards(int iPad) #ifdef _XBOX_ONE ui.ShowPlayerDisplayname(true); #endif - ui.NavigateToScene(iPad, eUIScene_LeaderboardsMenu); + proceedToScene(iPad, eUIScene_LeaderboardsMenu); } } } @@ -1626,7 +1679,7 @@ void UIScene_MainMenu::RunUnlockOrDLC(int iPad) m_bIgnorePress=false; UINT uiIDA[1]; uiIDA[0] = IDS_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(), nullptr, this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(), nullptr, this); return; } @@ -1637,7 +1690,7 @@ void UIScene_MainMenu::RunUnlockOrDLC(int iPad) if(ProfileManager.IsGuest(iPad)) { m_bIgnorePress=false; - ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); } else { @@ -1656,11 +1709,11 @@ void UIScene_MainMenu::RunUnlockOrDLC(int iPad) if(bContentRestricted) { m_bIgnorePress=false; -#if !(defined(_XBOX) || defined(_WIN64)) // 4J Stu - Temp to get the win build running, but so we check this for other platforms +#if !(defined(_XBOX) || defined(_WINDOWS64) || defined(_XBOX_ONE)) // 4J Stu - Temp to get the win build running, but so we check this for other platforms // you can't see the store UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,this); #endif } else @@ -1669,7 +1722,7 @@ void UIScene_MainMenu::RunUnlockOrDLC(int iPad) #ifdef _XBOX_ONE ui.ShowPlayerDisplayname(true); #endif - ui.NavigateToScene(ProfileManager.GetPrimaryPad(),eUIScene_DLCMainMenu); + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_DLCMainMenu); } } #if defined _XBOX_ONE @@ -1710,7 +1763,7 @@ void UIScene_MainMenu::RunUnlockOrDLC(int iPad) UINT uiIDA[1]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; //uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(),&UIScene_MainMenu::MustSignInReturnedPSN,this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(),&UIScene_MainMenu::MustSignInReturnedPSN,this); #elif defined __ORBIS__ m_eAction=eAction_RunUnlockOrDLCPSN; // Determine why they're not "signed in live" @@ -1722,20 +1775,20 @@ void UIScene_MainMenu::RunUnlockOrDLC(int iPad) UINT uiIDA[1]; uiIDA[0] = IDS_OK; - ui.RequestMessageBox( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad); } else { // Not signed in to PSN UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::MustSignInReturnedPSN, this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::MustSignInReturnedPSN, this); return; } #else UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1); #endif } } @@ -1745,7 +1798,7 @@ void UIScene_MainMenu::RunUnlockOrDLC(int iPad) if(ProfileManager.IsGuest(iPad)) { m_bIgnorePress=false; - ui.RequestMessageBox(IDS_UNLOCK_TITLE, IDS_UNLOCK_GUEST_TEXT, uiIDA, 1,iPad); + ui.RequestErrorMessage(IDS_UNLOCK_TITLE, IDS_UNLOCK_GUEST_TEXT, uiIDA, 1,iPad); } else if(!ProfileManager.IsSignedInLive(iPad)) { @@ -1754,7 +1807,7 @@ void UIScene_MainMenu::RunUnlockOrDLC(int iPad) // get them to sign in to online UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(),&UIScene_MainMenu::MustSignInReturnedPSN,this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(),&UIScene_MainMenu::MustSignInReturnedPSN,this); #elif defined __ORBIS__ m_eAction=eAction_RunUnlockOrDLCPSN; // Determine why they're not "signed in live" @@ -1766,20 +1819,20 @@ void UIScene_MainMenu::RunUnlockOrDLC(int iPad) UINT uiIDA[1]; uiIDA[0] = IDS_OK; - ui.RequestMessageBox( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad); } else { // Not signed in to PSN UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::MustSignInReturnedPSN, this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::MustSignInReturnedPSN, this); return; } #else UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1); #endif } @@ -1805,6 +1858,60 @@ void UIScene_MainMenu::tick() { UIScene::tick(); + if ( (eNavigateWhenReady >= 0) ) + { + + int lockedProfile = ProfileManager.GetLockedProfile(); + +#ifdef _DURANGO + // 4J-JEV: DLC menu contains text localised to system language which we can't change. + // We need to switch to this language in-case it uses a different font. + if (eNavigateWhenReady == eUIScene_DLCMainMenu) setLanguageOverride(false); + + bool isSignedIn; + C4JStorage::eOptionsCallback status; + bool pendingFontChange; + if (lockedProfile >= 0) + { + isSignedIn = ProfileManager.IsSignedIn(lockedProfile); + status = app.GetOptionsCallbackStatus(lockedProfile); + pendingFontChange = ui.PendingFontChange(); + + if(status == C4JStorage::eOptions_Callback_Idle) + { + // make sure the TMS banned list data is ditched - the player may have gone in to help & options, backed out, and signed out + app.InvalidateBannedList(lockedProfile); + + // need to ditch any DLCOffers info + StorageManager.ClearDLCOffers(); + app.ClearAndResetDLCDownloadQueue(); + app.ClearDLCInstalled(); + } + } + + if ( (lockedProfile >= 0) + && isSignedIn + && ((status == C4JStorage::eOptions_Callback_Read)||(status == C4JStorage::eOptions_Callback_Write)) + && !pendingFontChange + ) +#endif + { + app.DebugPrintf("[MainMenu] Navigating away from MainMenu.\n"); + ui.NavigateToScene(lockedProfile, eNavigateWhenReady); + eNavigateWhenReady = (EUIScene) -1; + } +#ifdef _DURANGO + else + { + app.DebugPrintf("[MainMenu] Delaying navigation: lockedProfile=%i, %s, status=%ls, %s.\n", + lockedProfile, + isSignedIn ? "SignedIn" : "SignedOut", + app.toStringOptionsStatus(status).c_str(), + pendingFontChange ? "Pending font change" : "font OK"); + } +#endif + } + #if defined(__PS3__) || defined (__ORBIS__) || defined(__PSVITA__) if(m_bLaunchFullVersionPurchase) { @@ -1823,7 +1930,7 @@ void UIScene_MainMenu::tick() { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else { @@ -1851,7 +1958,7 @@ void UIScene_MainMenu::tick() { m_bWaitingForDLCInfo=false; ProfileManager.SetLockedProfile(m_iPad); - ui.NavigateToScene(ProfileManager.GetPrimaryPad(),eUIScene_DLCMainMenu); + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_DLCMainMenu); } } @@ -1859,7 +1966,7 @@ void UIScene_MainMenu::tick() { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox( IDS_CONNECTION_FAILED, IDS_IN_PARTY_SESSION_FULL, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_CONNECTION_FAILED, IDS_IN_PARTY_SESSION_FULL, uiIDA,1,ProfileManager.GetPrimaryPad()); } #endif @@ -1882,7 +1989,7 @@ void UIScene_MainMenu::tick() // give the option of continuing offline UINT uiIDA[1]; uiIDA[0]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION_PATCH_AVAILABLE, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::PlayOfflineReturned, this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION_PATCH_AVAILABLE, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::PlayOfflineReturned, this); } m_bErrorDialogRunning=false; @@ -1907,7 +2014,7 @@ void UIScene_MainMenu::RunAchievements(int iPad) // guests can't look at achievements if(ProfileManager.IsGuest(iPad)) { - ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); } else { @@ -1922,7 +2029,7 @@ void UIScene_MainMenu::RunHelpAndOptions(int iPad) { UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); } else { @@ -1938,7 +2045,7 @@ void UIScene_MainMenu::RunHelpAndOptions(int iPad) #ifdef _XBOX_ONE ui.ShowPlayerDisplayname(true); #endif - ui.NavigateToScene(iPad,eUIScene_HelpAndOptionsMenu); + proceedToScene(iPad, eUIScene_HelpAndOptionsMenu); } #if TO_BE_IMPLEMENTED else @@ -1976,6 +2083,7 @@ void UIScene_MainMenu::LoadTrial(void) // No saving in the trial StorageManager.SetSaveDisabled(true); + app.SetGameHostOption(eGameHostOption_WasntSaveOwner, false); // Set the global flag, so that we don't disable saving again once the save is complete app.SetGameHostOption(eGameHostOption_DisableSaving, 1); @@ -2021,7 +2129,7 @@ void UIScene_MainMenu::LoadTrial(void) void UIScene_MainMenu::handleUnlockFullVersion() { - m_buttons[(int)eControl_UnlockOrDLC].setLabel(app.GetString(IDS_DOWNLOADABLECONTENT),true); + m_buttons[(int)eControl_UnlockOrDLC].setLabel(IDS_DOWNLOADABLECONTENT,true); } diff --git a/Minecraft.Client/Common/UI/UIScene_MainMenu.h b/Minecraft.Client/Common/UI/UIScene_MainMenu.h index f1b358da..2b49a44b 100644 --- a/Minecraft.Client/Common/UI/UIScene_MainMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_MainMenu.h @@ -90,10 +90,20 @@ private: }; eActions m_eAction; + +private: + // 4J-JEV: Delay navigation until font changes. + static EUIScene eNavigateWhenReady; + + static void proceedToScene(int iPad, EUIScene eScene) + { + eNavigateWhenReady = eScene; + } + public: UIScene_MainMenu(int iPad, void *initData, UILayer *parentLayer); virtual ~UIScene_MainMenu(); - + // Returns true if this scene has focus for the pad passed in #ifndef __PS3__ virtual bool hasFocus(int iPad) { return bHasFocus; } @@ -113,6 +123,7 @@ protected: public: virtual void tick(); + virtual void handleReload(); // INPUT virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled); @@ -137,8 +148,20 @@ private: static void LoadTrial(); #ifdef _XBOX_ONE - static int ChooseUser_SignInReturned(void *pParam,bool bContinue, int iPad); -#endif + static int ChooseUser_SignInReturned(void *pParam,bool bContinue, int iPad, int iController); + static int CreateLoad_SignInReturned(void *pParam,bool bContinue, int iPad, int iController); + static int HelpAndOptions_SignInReturned(void *pParam,bool bContinue,int iPad, int iController); + static int Achievements_SignInReturned(void *pParam,bool bContinue,int iPad, int iController); + static int MustSignInReturned(void *pParam,int iPad,C4JStorage::EMessageResult result); + + static int Leaderboards_SignInReturned(void* pParam, bool bContinue, int iPad, int iController); + static int UnlockFullGame_SignInReturned(void *pParam,bool bContinue,int iPad, int iController); + static int ExitGameReturned(void *pParam,int iPad,C4JStorage::EMessageResult result); + + + static int XboxHelp_SignInReturned(void *pParam, bool bContinue, int iPad, int iController); +#else + static int CreateLoad_SignInReturned(void *pParam,bool bContinue, int iPad); static int HelpAndOptions_SignInReturned(void *pParam,bool bContinue,int iPad); static int Achievements_SignInReturned(void *pParam,bool bContinue,int iPad); @@ -157,9 +180,6 @@ private: static int PlayOfflineReturned(void *pParam, int iPad, C4JStorage::EMessageResult result); #endif - -#ifdef _DURANGO - static int XboxHelp_SignInReturned(void *pParam, bool bContinue, int iPad); #endif #ifdef __PSVITA__ diff --git a/Minecraft.Client/Common/UI/UIScene_MessageBox.h b/Minecraft.Client/Common/UI/UIScene_MessageBox.h index 3c349dea..c10f6ab8 100644 --- a/Minecraft.Client/Common/UI/UIScene_MessageBox.h +++ b/Minecraft.Client/Common/UI/UIScene_MessageBox.h @@ -41,7 +41,8 @@ public: virtual EUIScene getSceneType() { return eUIScene_MessageBox;} // Returns true if lower scenes in this scenes layer, or in any layer below this scenes layers should be hidden - virtual bool hidesLowerScenes() { return false; } + virtual bool hidesLowerScenes() { return false; } + virtual bool blocksInput() { return true; } protected: // TODO: This should be pure virtual in this class diff --git a/Minecraft.Client/Common/UI/UIScene_NewUpdateMessage.cpp b/Minecraft.Client/Common/UI/UIScene_NewUpdateMessage.cpp new file mode 100644 index 00000000..998679ca --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_NewUpdateMessage.cpp @@ -0,0 +1,121 @@ +#include "stdafx.h" +#include "UI.h" +#include "UIScene_NewUpdateMessage.h" +#include "..\..\..\Minecraft.World\StringHelpers.h" + +UIScene_NewUpdateMessage::UIScene_NewUpdateMessage(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) +{ + // Setup all the Iggy references we need for this scene + initialiseMovie(); + + parentLayer->addComponent(iPad,eUIComponent_Panorama); + parentLayer->addComponent(iPad,eUIComponent_Logo); + + m_buttonConfirm.init(app.GetString(IDS_TOOLTIPS_ACCEPT),eControl_Confirm); + + wstring message = app.GetString(IDS_TITLEUPDATE); + message.append(L"\r\n"); + + message=app.FormatHTMLString(m_iPad,message); + + vector paragraphs; + int lastIndex = 0; + for ( int index = message.find(L"\r\n", lastIndex, 2); + index != wstring::npos; + index = message.find(L"\r\n", lastIndex, 2) + ) + { + paragraphs.push_back( message.substr(lastIndex, index-lastIndex) + L" " ); + lastIndex = index + 2; + } + paragraphs.push_back( message.substr( lastIndex, message.length() - lastIndex ) ); + + for(unsigned int i = 0; i < paragraphs.size(); ++i) + { + m_labelDescription.addText(paragraphs[i],i == (paragraphs.size() - 1) ); + } + + m_bIgnoreInput=false; + +#ifdef __PSVITA__ + ui.TouchBoxRebuild(this); +#endif +} + +UIScene_NewUpdateMessage::~UIScene_NewUpdateMessage() +{ + m_parentLayer->removeComponent(eUIComponent_Panorama); + m_parentLayer->removeComponent(eUIComponent_Logo); +} + +wstring UIScene_NewUpdateMessage::getMoviePath() +{ + return L"EULA"; +} + +void UIScene_NewUpdateMessage::updateTooltips() +{ + ui.SetTooltips( DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT ); +} + +void UIScene_NewUpdateMessage::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) +{ + if(m_bIgnoreInput) return; + +#ifdef __ORBIS__ + // ignore all players except player 0 - it's their profile that is currently being used + if(iPad!=0) return; +#endif + + ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released); + + switch(key) + { + case ACTION_MENU_B: + { + int iVal=app.GetGameSettings(m_iPad,eGameSetting_DisplayUpdateMessage); + if(iVal>0) iVal--; + + // set the update text as seen, by clearing the flag + app.SetGameSettings(m_iPad,eGameSetting_DisplayUpdateMessage,iVal); + // force a profile write + app.CheckGameSettingsChanged(true,m_iPad); + ui.NavigateBack(m_iPad); + } + break; +#ifdef __ORBIS__ + case ACTION_MENU_TOUCHPAD_PRESS: +#endif + case ACTION_MENU_OK: + case ACTION_MENU_DOWN: + case ACTION_MENU_UP: + case ACTION_MENU_PAGEUP: + case ACTION_MENU_PAGEDOWN: + case ACTION_MENU_OTHER_STICK_DOWN: + case ACTION_MENU_OTHER_STICK_UP: + sendInputToMovie(key, repeat, pressed, released); + break; + } +} + +void UIScene_NewUpdateMessage::handlePress(F64 controlId, F64 childId) +{ + switch((int)controlId) + { + case eControl_Confirm: + { + //CD - Added for audio + ui.PlayUISFX(eSFX_Press); + + int iVal=app.GetGameSettings(m_iPad,eGameSetting_DisplayUpdateMessage); + if(iVal>0) iVal--; + + // set the update text as seen, by clearing the flag + app.SetGameSettings(m_iPad,eGameSetting_DisplayUpdateMessage,iVal); + // force a profile write + app.CheckGameSettingsChanged(true,m_iPad); + ui.NavigateBack(m_iPad); + } + break; + }; +} diff --git a/Minecraft.Client/Common/UI/UIScene_NewUpdateMessage.h b/Minecraft.Client/Common/UI/UIScene_NewUpdateMessage.h new file mode 100644 index 00000000..1529187f --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_NewUpdateMessage.h @@ -0,0 +1,45 @@ +#pragma once + +#include "UIScene.h" + +class UIScene_NewUpdateMessage : public UIScene +{ +private: + enum EControls + { + eControl_Confirm, + }; + + bool m_bIgnoreInput; + + UIControl_Button m_buttonConfirm; + UIControl_DynamicLabel m_labelDescription; + UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) + UI_MAP_ELEMENT(m_buttonConfirm, "AcceptButton") + UI_MAP_ELEMENT(m_labelDescription, "EULAtext") + UI_END_MAP_ELEMENTS_AND_NAMES() + +public: + UIScene_NewUpdateMessage(int iPad, void *initData, UILayer *parentLayer); + ~UIScene_NewUpdateMessage(); + + virtual EUIScene getSceneType() { return eUIScene_EULA;} + + // Returns true if this scene has focus for the pad passed in +#ifndef __PS3__ + virtual bool hasFocus(int iPad) { return bHasFocus; } +#endif + virtual void updateTooltips(); + +protected: + virtual wstring getMoviePath(); + +public: + // INPUT + virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled); + +protected: + void handlePress(F64 controlId, F64 childId); + + virtual long long getDefaultGtcButtons() { return 0; } +}; diff --git a/Minecraft.Client/Common/UI/UIScene_PauseMenu.cpp b/Minecraft.Client/Common/UI/UIScene_PauseMenu.cpp index d9569cc9..6f502db8 100644 --- a/Minecraft.Client/Common/UI/UIScene_PauseMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_PauseMenu.cpp @@ -428,7 +428,7 @@ void UIScene_PauseMenu::handleInput(int iPad, int key, bool repeat, bool pressed // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive is the npAvailability isn't SCE_OK UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad); } else // Determine why they're not "signed in live" @@ -439,20 +439,20 @@ void UIScene_PauseMenu::handleInput(int iPad, int key, bool repeat, bool pressed UINT uiIDA[1]; uiIDA[0] = IDS_OK; - ui.RequestMessageBox( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad); } else { // Not signed in to PSN UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, (LPVOID)GetCallbackUniqueId() ); } #else // __PS3__ // get them to sign in to online UINT uiIDA[1]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, (LPVOID)GetCallbackUniqueId() ); #endif } else @@ -493,7 +493,7 @@ void UIScene_PauseMenu::handleInput(int iPad, int key, bool repeat, bool pressed UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ACTION_BAN_LEVEL_TITLE, IDS_ACTION_BAN_LEVEL_DESCRIPTION, uiIDA, 2, iPad,&UIScene_PauseMenu::BanGameDialogReturned,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_ACTION_BAN_LEVEL_TITLE, IDS_ACTION_BAN_LEVEL_DESCRIPTION, uiIDA, 2, iPad,&UIScene_PauseMenu::BanGameDialogReturned,(LPVOID)GetCallbackUniqueId() ); //rfHandled = TRUE; } @@ -524,7 +524,7 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId) // guests can't look at leaderboards if(ProfileManager.IsGuest(m_iPad)) { - ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else if(!ProfileManager.IsSignedInLive(m_iPad)) { @@ -541,7 +541,7 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId) { UINT uiIDA[1]; uiIDA[0] = IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, m_iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, m_iPad); break;; } @@ -553,7 +553,7 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId) m_eAction=eAction_ViewLeaderboardsPSN; UINT uiIDA[1]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, ProfileManager.GetPrimaryPad(),&UIScene_PauseMenu::MustSignInReturnedPSN,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, ProfileManager.GetPrimaryPad(),&UIScene_PauseMenu::MustSignInReturnedPSN,(LPVOID)GetCallbackUniqueId() ); #elif defined(__ORBIS__) m_eAction=eAction_ViewLeaderboardsPSN; int npAvailability = ProfileManager.getNPAvailability(m_iPad); @@ -562,7 +562,7 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId) // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive is the npAvailability isn't SCE_OK UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, m_iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, m_iPad); } else // Determine why they're not "signed in live" @@ -575,18 +575,18 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId) UINT uiIDA[1]; uiIDA[0] = IDS_OK; - ui.RequestMessageBox( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, m_iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, m_iPad); } else { // Not signed in to PSN UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, m_iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, m_iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, (LPVOID)GetCallbackUniqueId() ); } #else UINT uiIDA[1] = { IDS_OK }; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, m_iPad); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, m_iPad); #endif } else @@ -597,11 +597,11 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId) #endif if(bContentRestricted) { -#if !(defined(_XBOX) || defined(_WIN64)) // 4J Stu - Temp to get the win build running, but so we check this for other platforms +#if !(defined(_XBOX) || defined(_WINDOWS64) || defined(_XBOX_ONE)) // 4J Stu - Temp to get the win build running, but so we check this for other platforms // you can't see leaderboards UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, m_iPad,NULL,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, m_iPad); #endif } else @@ -627,7 +627,7 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId) { UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else { @@ -671,27 +671,27 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId) if(g_NetworkManager.GetPlayerCount()>1) { - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_CONFIRM_DISCONNECT_SAVE, uiIDA, 3, m_iPad,&UIScene_PauseMenu::ExitGameSaveDialogReturned,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_CONFIRM_DISCONNECT_SAVE, uiIDA, 3, m_iPad,&UIScene_PauseMenu::ExitGameSaveDialogReturned, (LPVOID)GetCallbackUniqueId()); } else { - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 3, m_iPad,&UIScene_PauseMenu::ExitGameSaveDialogReturned,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 3, m_iPad,&UIScene_PauseMenu::ExitGameSaveDialogReturned, (LPVOID)GetCallbackUniqueId()); } } else if(g_NetworkManager.IsHost() && g_NetworkManager.GetPlayerCount()>1) { - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_CONFIRM_DISCONNECT, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned, dynamic_cast(this), app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_CONFIRM_DISCONNECT, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned, (LPVOID)GetCallbackUniqueId()); } else { - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned, dynamic_cast(this), app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned, (LPVOID)GetCallbackUniqueId()); } #else if(StorageManager.GetSaveDisabled()) { uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_PROGRESS_LOST, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_PROGRESS_LOST, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned, (LPVOID)GetCallbackUniqueId()); } else { @@ -703,11 +703,11 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId) if(g_NetworkManager.GetPlayerCount()>1) { - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_CONFIRM_DISCONNECT_SAVE, uiIDA, 3, m_iPad,&UIScene_PauseMenu::ExitGameSaveDialogReturned,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_CONFIRM_DISCONNECT_SAVE, uiIDA, 3, m_iPad,&UIScene_PauseMenu::ExitGameSaveDialogReturned, (LPVOID)GetCallbackUniqueId()); } else { - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 3, m_iPad,&UIScene_PauseMenu::ExitGameSaveDialogReturned,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 3, m_iPad,&UIScene_PauseMenu::ExitGameSaveDialogReturned, (LPVOID)GetCallbackUniqueId()); } } else @@ -715,7 +715,7 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId) uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned, (LPVOID)GetCallbackUniqueId()); } } #endif @@ -753,7 +753,7 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId) UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_PROGRESS_LOST, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned, dynamic_cast(this), app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_PROGRESS_LOST, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned, (LPVOID)GetCallbackUniqueId()); } else @@ -788,12 +788,12 @@ void UIScene_PauseMenu::PerformActionSaveGame() // Unlock the full version? if(!ProfileManager.IsSignedInLive(m_iPad)) { -#if defined(__PS3__) +#if defined(__PS3__) || defined (__PSVITA__) m_eAction=eAction_SaveGamePSN; UINT uiIDA[2]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_PauseMenu::MustSignInReturnedPSN,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_PauseMenu::MustSignInReturnedPSN,(LPVOID)GetCallbackUniqueId()); #elif defined(__ORBIS__) m_eAction=eAction_SaveGamePSN; int npAvailability = ProfileManager.getNPAvailability(m_iPad); @@ -802,7 +802,7 @@ void UIScene_PauseMenu::PerformActionSaveGame() // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive is the npAvailability isn't SCE_OK UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, m_iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, m_iPad); } else // Determine why they're not "signed in live" @@ -813,14 +813,14 @@ void UIScene_PauseMenu::PerformActionSaveGame() UINT uiIDA[1]; uiIDA[0] = IDS_OK; - ui.RequestMessageBox( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, m_iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, m_iPad); } else { // Not signed in to PSN UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, m_iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, m_iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, (LPVOID)GetCallbackUniqueId()); } #endif } @@ -829,7 +829,7 @@ void UIScene_PauseMenu::PerformActionSaveGame() UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestMessageBox(IDS_UNLOCK_TITLE, IDS_UNLOCK_TOSAVE_TEXT, uiIDA, 2,m_iPad,&UIScene_PauseMenu::UnlockFullSaveReturned,this,app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_UNLOCK_TITLE, IDS_UNLOCK_TOSAVE_TEXT, uiIDA, 2,m_iPad,&UIScene_PauseMenu::UnlockFullSaveReturned,(LPVOID)GetCallbackUniqueId()); } return; @@ -865,7 +865,7 @@ void UIScene_PauseMenu::PerformActionSaveGame() if(app.DLCInstallProcessCompleted() && !SonyCommerce_Vita::getDLCUpgradePending()) // MGH - devtrack #5861 On vita it can take a bit after the install has finished to register the purchase, so make sure we don't end up asking to purchase again #endif { - ui.RequestMessageBox(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_WARNING_DLC_TRIALTEXTUREPACK_TEXT, uiIDA, 2, m_iPad,&UIScene_PauseMenu::WarningTrialTexturePackReturned,this,app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_WARNING_DLC_TRIALTEXTUREPACK_TEXT, uiIDA, 2, m_iPad,&UIScene_PauseMenu::WarningTrialTexturePackReturned,(LPVOID)GetCallbackUniqueId()); } return; @@ -888,7 +888,7 @@ void UIScene_PauseMenu::PerformActionSaveGame() uiIDA[0]=IDS_SELECTANEWDEVICE; uiIDA[1]=IDS_NODEVICE_DECLINE; - ui.RequestMessageBox(IDS_STORAGEDEVICEPROBLEM_TITLE, IDS_FAILED_TO_LOADSAVE_TEXT, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::DeviceRemovedDialogReturned,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_STORAGEDEVICEPROBLEM_TITLE, IDS_FAILED_TO_LOADSAVE_TEXT, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::DeviceRemovedDialogReturned,(LPVOID)GetCallbackUniqueId()); } else #endif @@ -899,7 +899,7 @@ void UIScene_PauseMenu::PerformActionSaveGame() UINT uiIDA[2]; uiIDA[0]=IDS_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TITLE_DISABLE_AUTOSAVE, IDS_CONFIRM_DISABLE_AUTOSAVE, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::DisableAutosaveDialogReturned,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_TITLE_DISABLE_AUTOSAVE, IDS_CONFIRM_DISABLE_AUTOSAVE, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::DisableAutosaveDialogReturned,(LPVOID)GetCallbackUniqueId()); } else #endif @@ -909,7 +909,7 @@ void UIScene_PauseMenu::PerformActionSaveGame() UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TITLE_SAVE_GAME, IDS_CONFIRM_SAVE_GAME, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::SaveGameDialogReturned,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_TITLE_SAVE_GAME, IDS_CONFIRM_SAVE_GAME, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::SaveGameDialogReturned,(LPVOID)GetCallbackUniqueId()); } else { @@ -917,7 +917,7 @@ void UIScene_PauseMenu::PerformActionSaveGame() UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TITLE_ENABLE_AUTOSAVE, IDS_CONFIRM_ENABLE_AUTOSAVE, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::EnableAutosaveDialogReturned,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_TITLE_ENABLE_AUTOSAVE, IDS_CONFIRM_ENABLE_AUTOSAVE, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::EnableAutosaveDialogReturned,(LPVOID)GetCallbackUniqueId()); #else // flag a app action of save game app.SetAction(m_iPad,eAppAction_SaveGame); @@ -970,7 +970,6 @@ void UIScene_PauseMenu::HandleDLCMountingComplete() int UIScene_PauseMenu::UnlockFullSaveReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) { - UIScene_PauseMenu* pClass = (UIScene_PauseMenu*)pParam; Minecraft *pMinecraft=Minecraft::GetInstance(); if(result==C4JStorage::EMessage_ResultAccept) @@ -985,7 +984,7 @@ int UIScene_PauseMenu::UnlockFullSaveReturned(void *pParam,int iPad,C4JStorage:: { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,pClass, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else #endif @@ -1004,11 +1003,12 @@ int UIScene_PauseMenu::UnlockFullSaveReturned(void *pParam,int iPad,C4JStorage:: int UIScene_PauseMenu::SaveGame_SignInReturned(void *pParam,bool bContinue, int iPad) { - UIScene_PauseMenu* pClass = (UIScene_PauseMenu*)pParam; + UIScene_PauseMenu* pClass = (UIScene_PauseMenu*)ui.GetSceneFromCallbackId((size_t)pParam); + if(pClass) pClass->SetIgnoreInput(false); if(bContinue==true) { - pClass->PerformActionSaveGame(); + if(pClass) pClass->PerformActionSaveGame(); } return 0; @@ -1029,24 +1029,23 @@ int UIScene_PauseMenu::BanGameDialogReturned(void *pParam,int iPad,C4JStorage::E #if defined(__PS3__) || defined (__PSVITA__) || defined(__ORBIS__) int UIScene_PauseMenu::MustSignInReturnedPSN(void *pParam,int iPad,C4JStorage::EMessageResult result) { - UIScene_PauseMenu* pClass = (UIScene_PauseMenu*)pParam; - - if(result==C4JStorage::EMessage_ResultAccept) + UIScene_PauseMenu* pClass = (UIScene_PauseMenu*)ui.GetSceneFromCallbackId((size_t)pParam); + if(result==C4JStorage::EMessage_ResultAccept && pClass) { #ifdef __PS3__ switch(pClass->m_eAction) { case eAction_ViewLeaderboardsPSN: - SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_PauseMenu::ViewLeaderboards_SignInReturned, pClass); + SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_PauseMenu::ViewLeaderboards_SignInReturned, pParam); break; case eAction_ViewInvitesPSN: - SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_PauseMenu::ViewInvites_SignInReturned, pClass); + SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_PauseMenu::ViewInvites_SignInReturned, pParam); break; case eAction_SaveGamePSN: - SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_PauseMenu::SaveGame_SignInReturned, pClass); + SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_PauseMenu::SaveGame_SignInReturned, pParam); break; case eAction_BuyTexturePackPSN: - SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_PauseMenu::BuyTexturePack_SignInReturned, pClass); + SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_PauseMenu::BuyTexturePack_SignInReturned, pParam); break; } #elif defined __PSVITA__ @@ -1059,16 +1058,17 @@ int UIScene_PauseMenu::MustSignInReturnedPSN(void *pParam,int iPad,C4JStorage::E //Force off CGameNetworkManager::setAdhocMode(false); //Now Sign-in - SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_PauseMenu::ViewLeaderboards_SignInReturned, pClass); + SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_PauseMenu::ViewLeaderboards_SignInReturned, pParam); break; case eAction_ViewInvitesPSN: - SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_PauseMenu::ViewInvites_SignInReturned, pClass); + SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_PauseMenu::ViewInvites_SignInReturned, pParam); break; case eAction_SaveGamePSN: - SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_PauseMenu::SaveGame_SignInReturned, pClass); + pClass->SetIgnoreInput(true); + SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_PauseMenu::SaveGame_SignInReturned, pParam, true); break; case eAction_BuyTexturePackPSN: - SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_PauseMenu::BuyTexturePack_SignInReturned, pClass); + SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_PauseMenu::BuyTexturePack_SignInReturned, pParam); break; } #else @@ -1095,7 +1095,8 @@ int UIScene_PauseMenu::MustSignInReturnedPSN(void *pParam,int iPad,C4JStorage::E int UIScene_PauseMenu::ViewLeaderboards_SignInReturned(void *pParam,bool bContinue, int iPad) { - UIScene_PauseMenu* pClass = (UIScene_PauseMenu*)pParam; + UIScene_PauseMenu* pClass = (UIScene_PauseMenu*)ui.GetSceneFromCallbackId((size_t)pParam); + if(!pClass) return 0; if(bContinue==true) { @@ -1105,7 +1106,7 @@ int UIScene_PauseMenu::ViewLeaderboards_SignInReturned(void *pParam,bool bContin // guests can't look at leaderboards if(ProfileManager.IsGuest(pClass->m_iPad)) { - ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else if(ProfileManager.IsSignedInLive(iPad)) { @@ -1115,7 +1116,7 @@ int UIScene_PauseMenu::ViewLeaderboards_SignInReturned(void *pParam,bool bContin if(bContentRestricted) { // you can't see leaderboards - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,pClass, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else #endif @@ -1130,11 +1131,11 @@ int UIScene_PauseMenu::ViewLeaderboards_SignInReturned(void *pParam,bool bContin int UIScene_PauseMenu::WarningTrialTexturePackReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) { - UIScene_PauseMenu* pClass = (UIScene_PauseMenu*)pParam; + UIScene_PauseMenu* pClass = (UIScene_PauseMenu*)ui.GetSceneFromCallbackId((size_t)pParam); #ifdef __ORBIS__ // If a patch is available, can't proceed - if (pClass->CheckForPatch()) return 0; + if (!pClass || pClass->CheckForPatch()) return 0; #endif #if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) @@ -1142,7 +1143,7 @@ int UIScene_PauseMenu::WarningTrialTexturePackReturned(void *pParam,int iPad,C4J { if(!ProfileManager.IsSignedInLive(iPad)) { - pClass->m_eAction=eAction_SaveGamePSN; + if(pClass) pClass->m_eAction=eAction_SaveGamePSN; #ifdef __ORBIS__// Check if PSN is unavailable because of age restriction int npAvailability = ProfileManager.getNPAvailability(iPad); if (npAvailability == SCE_NP_ERROR_AGE_RESTRICTION) @@ -1150,7 +1151,7 @@ int UIScene_PauseMenu::WarningTrialTexturePackReturned(void *pParam,int iPad,C4J // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive is the npAvailability isn't SCE_OK UINT uiIDA[1]; uiIDA[0]=IDS_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad); } else // Determine why they're not "signed in live" @@ -1161,20 +1162,20 @@ int UIScene_PauseMenu::WarningTrialTexturePackReturned(void *pParam,int iPad,C4J UINT uiIDA[1]; uiIDA[0] = IDS_OK; - ui.RequestMessageBox( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); + ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad); } else { UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, pClass, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, pParam); } #else // __PS3__ // You're not signed in to PSN! UINT uiIDA[2]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 2, iPad,&UIScene_PauseMenu::MustSignInReturnedPSN,pClass, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 2, iPad,&UIScene_PauseMenu::MustSignInReturnedPSN,pParam); #endif } else @@ -1187,7 +1188,7 @@ int UIScene_PauseMenu::WarningTrialTexturePackReturned(void *pParam,int iPad,C4J { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad,NULL,pClass, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad); } else #endif @@ -1249,8 +1250,6 @@ int UIScene_PauseMenu::WarningTrialTexturePackReturned(void *pParam,int iPad,C4J int UIScene_PauseMenu::BuyTexturePack_SignInReturned(void *pParam,bool bContinue, int iPad) { - UIScene_PauseMenu* pClass = (UIScene_PauseMenu*)pParam; - if(bContinue==true) { // Check if we're signed in to LIVE @@ -1266,7 +1265,7 @@ int UIScene_PauseMenu::BuyTexturePack_SignInReturned(void *pParam,bool bContinue { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad,NULL,pClass, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad); } else #endif @@ -1350,7 +1349,6 @@ int UIScene_PauseMenu::ViewInvites_SignInReturned(void *pParam,bool bContinue, i int UIScene_PauseMenu::ExitGameSaveDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) { - UIScene_PauseMenu *pClass = (UIScene_PauseMenu *)pParam; // Exit with or without saving // Decline means save in this dialog if(result==C4JStorage::EMessage_ResultDecline || result==C4JStorage::EMessage_ResultThirdOption) @@ -1383,7 +1381,7 @@ int UIScene_PauseMenu::ExitGameSaveDialogReturned(void *pParam,int iPad,C4JStora uiIDA[1]=IDS_CONFIRM_CANCEL; // Give the player a warning about the trial version of the texture pack - ui.RequestMessageBox(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_WARNING_DLC_TRIALTEXTUREPACK_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad() ,&UIScene_PauseMenu::WarningTrialTexturePackReturned, dynamic_cast(pClass),app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_WARNING_DLC_TRIALTEXTUREPACK_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad() ,&UIScene_PauseMenu::WarningTrialTexturePackReturned, pParam); return S_OK; } @@ -1399,7 +1397,7 @@ int UIScene_PauseMenu::ExitGameSaveDialogReturned(void *pParam,int iPad,C4JStora UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TITLE_SAVE_GAME, IDS_CONFIRM_SAVE_GAME, uiIDA, 2, ProfileManager.GetPrimaryPad(),&IUIScene_PauseMenu::ExitGameAndSaveReturned, dynamic_cast(pClass), app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_TITLE_SAVE_GAME, IDS_CONFIRM_SAVE_GAME, uiIDA, 2, ProfileManager.GetPrimaryPad(),&IUIScene_PauseMenu::ExitGameAndSaveReturned, pParam); return 0; } else @@ -1416,7 +1414,7 @@ int UIScene_PauseMenu::ExitGameSaveDialogReturned(void *pParam,int iPad,C4JStora UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_TITLE_DECLINE_SAVE_GAME, IDS_CONFIRM_DECLINE_SAVE_GAME, uiIDA, 2, ProfileManager.GetPrimaryPad(),&IUIScene_PauseMenu::ExitGameDeclineSaveReturned, dynamic_cast(pClass), app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_TITLE_DECLINE_SAVE_GAME, IDS_CONFIRM_DECLINE_SAVE_GAME, uiIDA, 2, ProfileManager.GetPrimaryPad(),&IUIScene_PauseMenu::ExitGameDeclineSaveReturned, pParam); return 0; } diff --git a/Minecraft.Client/Common/UI/UIScene_QuadrantSignin.cpp b/Minecraft.Client/Common/UI/UIScene_QuadrantSignin.cpp index 4f1b9742..0cb6cf2b 100644 --- a/Minecraft.Client/Common/UI/UIScene_QuadrantSignin.cpp +++ b/Minecraft.Client/Common/UI/UIScene_QuadrantSignin.cpp @@ -16,41 +16,8 @@ UIScene_QuadrantSignin::UIScene_QuadrantSignin(int iPad, void *_initData, UILaye m_bIgnoreInput = false; m_lastRequestedAvatar = -1; - for(unsigned int i = 0; i < XUSER_MAX_COUNT; ++i) - { - m_iconRequested[i] = false; - - m_labelPressToJoin[i].init(app.GetString(IDS_MUST_SIGN_IN_TITLE)); - m_labelConnectController[i].init(L""); - m_labelAccountType[i].init(L""); - - //wchar_t num[2]; - //swprintf(num,2,L"%d",i+1); - //m_labelPlayerNumber[i].init(num); - - m_controllerStatus[i] = eControllerStatus_ConnectController; - - if(ProfileManager.IsSignedIn(i)) - { - app.DebugPrintf("Index %d is signed in\n", i); - - setControllerState(i, eControllerStatus_PlayerDetails); - m_labelDisplayName[i].init(ProfileManager.GetDisplayName(i)); - } - else if(InputManager.IsPadConnected(i)) - { - app.DebugPrintf("Index %d is not signed in\n", i); - - setControllerState(i, eControllerStatus_PressToJoin); - m_labelDisplayName[i].init(L""); - } - else - { - app.DebugPrintf("Index %d is not connected\n", i); - - setControllerState(i, eControllerStatus_ConnectController); - } - } + + _initQuadrants(); #if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) if(InputManager.IsCircleCrossSwapped()) @@ -96,6 +63,8 @@ bool UIScene_QuadrantSignin::hidesLowerScenes() void UIScene_QuadrantSignin::tick() { + if(!getMovie()) return; + UIScene::tick(); updateState(); @@ -115,7 +84,7 @@ void UIScene_QuadrantSignin::handleInput(int iPad, int key, bool repeat, bool pr { if(pressed) { -#ifdef _DURANGO +#ifdef _XBOX_ONE if(InputManager.IsPadLocked(iPad)) { if(iPad != ProfileManager.GetPrimaryPad()) @@ -132,7 +101,7 @@ void UIScene_QuadrantSignin::handleInput(int iPad, int key, bool repeat, bool pr navigateBack(); } } -#ifdef _DURANGO +#ifdef _XBOX_ONE } #endif } @@ -144,12 +113,16 @@ void UIScene_QuadrantSignin::handleInput(int iPad, int key, bool repeat, bool pr if(pressed) { m_bIgnoreInput = true; +#ifdef _XBOX_ONE + if(ProfileManager.IsSignedIn(iPad)&&InputManager.IsPadLocked(iPad)) +#else if(ProfileManager.IsSignedIn(iPad)) +#endif { app.DebugPrintf("Signed in pad pressed\n"); ProfileManager.CancelProfileAvatarRequest(); -#ifdef _DURANGO +#ifdef _XBOX_ONE // On Durango, if we don't navigate forward here, then when we are on the main menu, it (re)gains focus & that causes our users to get cleared ui.NavigateToScene(m_iPad, eUIScene_Timer); #endif @@ -158,8 +131,18 @@ void UIScene_QuadrantSignin::handleInput(int iPad, int key, bool repeat, bool pr } else { - app.DebugPrintf("Non-signed in pad pressed\n"); - ProfileManager.RequestSignInUI(false, false, false, true, true,&UIScene_QuadrantSignin::SignInReturned, this, iPad); +#ifdef _XBOX_ONE + if(ProfileManager.IsSignedIn(0)&&!InputManager.IsPadLocked(0)) + { + app.DebugPrintf("Signed in pad with no controller bound pressed\n"); + ProfileManager.RequestSignInUI(false, false, false, true, false,&UIScene_QuadrantSignin::SignInReturned, this, iPad); + } + else +#endif + { + app.DebugPrintf("Non-signed in pad pressed\n"); + ProfileManager.RequestSignInUI(false, false, false, true, true,&UIScene_QuadrantSignin::SignInReturned, this, iPad); + } } } break; @@ -176,15 +159,23 @@ void UIScene_QuadrantSignin::handleInput(int iPad, int key, bool repeat, bool pr handled = true; } +#ifdef _XBOX_ONE +int UIScene_QuadrantSignin::SignInReturned(void *pParam,bool bContinue, int iPad, int iController) +#else int UIScene_QuadrantSignin::SignInReturned(void *pParam,bool bContinue, int iPad) +#endif { app.DebugPrintf("SignInReturned for pad %d\n", iPad); UIScene_QuadrantSignin *pClass = (UIScene_QuadrantSignin *)pParam; -#ifdef _DURANGO +#ifdef _XBOX_ONE if(bContinue && pClass->m_signInInfo.requireOnline && ProfileManager.IsSignedIn(iPad)) { + if( !InputManager.IsPadLocked(iPad) ) + { + ProfileManager.ForcePrimaryPadController(iController); + } ProfileManager.CheckMultiplayerPrivileges(iPad, true, &checkAllPrivilegesCallback, pClass); } else @@ -197,7 +188,7 @@ int UIScene_QuadrantSignin::SignInReturned(void *pParam,bool bContinue, int iPad return 0; } -#ifdef _DURANGO +#ifdef _XBOX_ONE void UIScene_QuadrantSignin::checkAllPrivilegesCallback(LPVOID lpParam, bool hasPrivileges, int iPad) { UIScene_QuadrantSignin* pClass = (UIScene_QuadrantSignin*)lpParam; @@ -219,7 +210,17 @@ void UIScene_QuadrantSignin::updateState() { //app.DebugPrintf("Index %d is signed in, display name - '%s'\n", i, ProfileManager.GetDisplayName(i).data()); - setControllerState(i, eControllerStatus_PlayerDetails); +#ifdef _XBOX_ONE + if(!InputManager.IsPadLocked(i)) + { + setControllerState(i, eControllerStatus_PressToJoin_LoggedIn); + } + else +#endif + { + setControllerState(i, eControllerStatus_PlayerDetails); + } + m_labelDisplayName[i].setLabel(ProfileManager.GetDisplayName(i)); //m_buttonControllers[i].setLabel(app.GetString(IDS_TOOLTIPS_CONTINUE),i); @@ -289,3 +290,53 @@ int UIScene_QuadrantSignin::AvatarReturned(LPVOID lpParam,PBYTE pbThumbnail,DWOR return 0; } + +void UIScene_QuadrantSignin::_initQuadrants() +{ + for(unsigned int i = 0; i < XUSER_MAX_COUNT; ++i) + { + m_iconRequested[i] = false; + + m_labelPressToJoin[i].init(IDS_MUST_SIGN_IN_TITLE); + m_labelConnectController[i].init(L""); + m_labelAccountType[i].init(L""); + + m_controllerStatus[i] = eControllerStatus_ConnectController; + + if(ProfileManager.IsSignedIn(i)) + { + app.DebugPrintf("Index %d is signed in\n", i); + +#ifdef _XBOX_ONE + if(!InputManager.IsPadLocked(i)) + { + setControllerState(i, eControllerStatus_PressToJoin_LoggedIn); + } + else +#endif + { + setControllerState(i, eControllerStatus_PlayerDetails); + } + + m_labelDisplayName[i].init(ProfileManager.GetDisplayName(i)); + } + else if(InputManager.IsPadConnected(i)) + { + app.DebugPrintf("Index %d is not signed in\n", i); + + setControllerState(i, eControllerStatus_PressToJoin); + m_labelDisplayName[i].init(L""); + } + else + { + app.DebugPrintf("Index %d is not connected\n", i); + + setControllerState(i, eControllerStatus_ConnectController); + } + } +} + +void UIScene_QuadrantSignin::handleReload() +{ + _initQuadrants(); +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_QuadrantSignin.h b/Minecraft.Client/Common/UI/UIScene_QuadrantSignin.h index b500fcc3..691bb199 100644 --- a/Minecraft.Client/Common/UI/UIScene_QuadrantSignin.h +++ b/Minecraft.Client/Common/UI/UIScene_QuadrantSignin.h @@ -9,7 +9,9 @@ private: { eControllerStatus_ConnectController, eControllerStatus_PressToJoin, - eControllerStatus_PlayerDetails + eControllerStatus_PlayerDetails, + eControllerStatus_PressToJoin_LoggedIn, + eControllerStatus_PressToJoin_NoController, }; bool m_bIgnoreInput; @@ -98,7 +100,11 @@ public: virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled); private: +#ifdef _XBOX_ONE + static int SignInReturned(void *pParam,bool bContinue, int iPad, int iController); +#else static int SignInReturned(void *pParam,bool bContinue, int iPad); +#endif static int AvatarReturned(LPVOID lpParam,PBYTE pbThumbnail,DWORD dwThumbnailBytes); void updateState(); @@ -107,4 +113,9 @@ private: #ifdef _DURANGO static void checkAllPrivilegesCallback(LPVOID lpParam, bool hasPrivileges, int iPad); #endif + +protected: + void _initQuadrants(); + + virtual void handleReload(); }; diff --git a/Minecraft.Client/Common/UI/UIScene_SaveMessage.cpp b/Minecraft.Client/Common/UI/UIScene_SaveMessage.cpp index a91d5aa8..b58f86fd 100644 --- a/Minecraft.Client/Common/UI/UIScene_SaveMessage.cpp +++ b/Minecraft.Client/Common/UI/UIScene_SaveMessage.cpp @@ -156,10 +156,10 @@ void UIScene_SaveMessage::handleTimerComplete(int id) app.SetOptionsCallbackStatus(0,C4JStorage::eOptions_Callback_Read_CorruptDeletePending); m_bIgnoreInput=false; // give the option to delete the save - UINT uiIDA[1]; - uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_CORRUPT_FILE, IDS_CORRUPT_OPTIONS, uiIDA, 1, - 0,&UIScene_SaveMessage::DeleteOptionsDialogReturned,this, app.GetStringTable()); + UINT uiIDA[2]; + uiIDA[0]=IDS_CORRUPT_OPTIONS_RETRY; + uiIDA[1]=IDS_CORRUPT_OPTIONS_DELETE; + ui.RequestErrorMessage(IDS_CORRUPT_FILE, IDS_CORRUPT_OPTIONS, uiIDA, 2, 0,&UIScene_SaveMessage::DeleteOptionsDialogReturned,this); break; } #endif @@ -173,10 +173,16 @@ void UIScene_SaveMessage::handleTimerComplete(int id) int UIScene_SaveMessage::DeleteOptionsDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) { //UIScene_SaveMessage* pClass = (UIScene_SaveMessage*)pParam; - - // kick off the delete - StorageManager.DeleteOptionsData(iPad); - + if(result == C4JStorage::EMessage_ResultAccept) + { + // retry loading the options file + StorageManager.ReadFromProfile(iPad); + } + else // result == EMessage_ResultDecline + { + // kick off the delete + StorageManager.DeleteOptionsData(iPad); + } return 0; } #endif diff --git a/Minecraft.Client/Common/UI/UIScene_SettingsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_SettingsMenu.cpp index 4ef7eb5d..39a0b7c6 100644 --- a/Minecraft.Client/Common/UI/UIScene_SettingsMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_SettingsMenu.cpp @@ -10,17 +10,17 @@ UIScene_SettingsMenu::UIScene_SettingsMenu(int iPad, void *initData, UILayer *pa bool bNotInGame=(Minecraft::GetInstance()->level==NULL); - m_buttons[BUTTON_ALL_OPTIONS].init(app.GetString(IDS_OPTIONS),BUTTON_ALL_OPTIONS); - m_buttons[BUTTON_ALL_AUDIO].init(app.GetString(IDS_AUDIO),BUTTON_ALL_AUDIO); - m_buttons[BUTTON_ALL_CONTROL].init(app.GetString(IDS_CONTROL),BUTTON_ALL_CONTROL); - m_buttons[BUTTON_ALL_GRAPHICS].init(app.GetString(IDS_GRAPHICS),BUTTON_ALL_GRAPHICS); - m_buttons[BUTTON_ALL_UI].init(app.GetString(IDS_USER_INTERFACE),BUTTON_ALL_UI); - m_buttons[BUTTON_ALL_RESETTODEFAULTS].init(app.GetString(IDS_RESET_TO_DEFAULTS),BUTTON_ALL_RESETTODEFAULTS); + m_buttons[BUTTON_ALL_OPTIONS].init(IDS_OPTIONS,BUTTON_ALL_OPTIONS); + m_buttons[BUTTON_ALL_AUDIO].init(IDS_AUDIO,BUTTON_ALL_AUDIO); + m_buttons[BUTTON_ALL_CONTROL].init(IDS_CONTROL,BUTTON_ALL_CONTROL); + m_buttons[BUTTON_ALL_GRAPHICS].init(IDS_GRAPHICS,BUTTON_ALL_GRAPHICS); + m_buttons[BUTTON_ALL_UI].init(IDS_USER_INTERFACE,BUTTON_ALL_UI); + m_buttons[BUTTON_ALL_RESETTODEFAULTS].init(IDS_RESET_TO_DEFAULTS,BUTTON_ALL_RESETTODEFAULTS); if(ProfileManager.GetPrimaryPad()!=m_iPad) { - removeControl( &m_buttons[BUTTON_ALL_AUDIO], true); - removeControl( &m_buttons[BUTTON_ALL_GRAPHICS], true); + removeControl( &m_buttons[BUTTON_ALL_AUDIO], bNotInGame); + removeControl( &m_buttons[BUTTON_ALL_GRAPHICS], bNotInGame); } doHorizontalResizeCheck(); @@ -51,10 +51,11 @@ wstring UIScene_SettingsMenu::getMoviePath() void UIScene_SettingsMenu::handleReload() { + bool bNotInGame=(Minecraft::GetInstance()->level==NULL); if(ProfileManager.GetPrimaryPad()!=m_iPad) { - removeControl( &m_buttons[BUTTON_ALL_AUDIO], true); - removeControl( &m_buttons[BUTTON_ALL_GRAPHICS], true); + removeControl( &m_buttons[BUTTON_ALL_AUDIO], bNotInGame); + removeControl( &m_buttons[BUTTON_ALL_GRAPHICS], bNotInGame); } doHorizontalResizeCheck(); @@ -142,7 +143,7 @@ void UIScene_SettingsMenu::handlePress(F64 controlId, F64 childId) uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_DEFAULTS_TITLE, IDS_DEFAULTS_TEXT, uiIDA, 2, m_iPad,&UIScene_SettingsMenu::ResetDefaultsDialogReturned,this, app.GetStringTable(), NULL, 0, false); + ui.RequestAlertMessage(IDS_DEFAULTS_TITLE, IDS_DEFAULTS_TEXT, uiIDA, 2, m_iPad,&UIScene_SettingsMenu::ResetDefaultsDialogReturned,this); } break; } diff --git a/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.cpp index 72576ded..6898d489 100644 --- a/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.cpp @@ -2,6 +2,10 @@ #include "UI.h" #include "UIScene_SettingsOptionsMenu.h" +#if defined(_XBOX_ONE) +#define _ENABLE_LANGUAGE_SELECT +#endif + int UIScene_SettingsOptionsMenu::m_iDifficultySettingA[4]= { IDS_DIFFICULTY_PEACEFUL, @@ -20,22 +24,24 @@ int UIScene_SettingsOptionsMenu::m_iDifficultyTitleSettingA[4]= UIScene_SettingsOptionsMenu::UIScene_SettingsOptionsMenu(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) { + m_bNavigateToLanguageSelector = false; + // Setup all the Iggy references we need for this scene initialiseMovie(); m_bNotInGame=(Minecraft::GetInstance()->level==NULL); - m_checkboxViewBob.init(app.GetString(IDS_VIEW_BOBBING),eControl_ViewBob,(app.GetGameSettings(m_iPad,eGameSetting_ViewBob)!=0)); - m_checkboxShowHints.init(app.GetString(IDS_HINTS),eControl_ShowHints,(app.GetGameSettings(m_iPad,eGameSetting_Hints)!=0)); - m_checkboxShowTooltips.init(app.GetString(IDS_IN_GAME_TOOLTIPS),eControl_ShowTooltips,(app.GetGameSettings(m_iPad,eGameSetting_Tooltips)!=0)); - m_checkboxInGameGamertags.init(app.GetString(IDS_IN_GAME_GAMERTAGS),eControl_InGameGamertags,(app.GetGameSettings(m_iPad,eGameSetting_GamertagsVisible)!=0)); + m_checkboxViewBob.init(IDS_VIEW_BOBBING,eControl_ViewBob,(app.GetGameSettings(m_iPad,eGameSetting_ViewBob)!=0)); + m_checkboxShowHints.init(IDS_HINTS,eControl_ShowHints,(app.GetGameSettings(m_iPad,eGameSetting_Hints)!=0)); + m_checkboxShowTooltips.init(IDS_IN_GAME_TOOLTIPS,eControl_ShowTooltips,(app.GetGameSettings(m_iPad,eGameSetting_Tooltips)!=0)); + m_checkboxInGameGamertags.init(IDS_IN_GAME_GAMERTAGS,eControl_InGameGamertags,(app.GetGameSettings(m_iPad,eGameSetting_GamertagsVisible)!=0)); // check if we should display the mash-up option if(m_bNotInGame && app.GetMashupPackWorlds(m_iPad)!=0xFFFFFFFF) { // the mash-up option is needed m_bMashUpWorldsUnhideOption=true; - m_checkboxMashupWorlds.init(app.GetString(IDS_UNHIDE_MASHUP_WORLDS),eControl_ShowMashUpWorlds,false); + m_checkboxMashupWorlds.init(IDS_UNHIDE_MASHUP_WORLDS,eControl_ShowMashUpWorlds,false); } else { @@ -92,7 +98,6 @@ UIScene_SettingsOptionsMenu::UIScene_SettingsOptionsMenu(int iPad, void *initDat bool bRemoveDifficulty=false; bool bRemoveAutosave=false; bool bRemoveInGameGamertags=false; - float fRemoveHeight=0.0f,fWidth,fHeight; bool bNotInGame=(Minecraft::GetInstance()->level==NULL); bool bPrimaryPlayer = ProfileManager.GetPrimaryPad()==m_iPad; @@ -128,6 +133,22 @@ UIScene_SettingsOptionsMenu::UIScene_SettingsOptionsMenu(int iPad, void *initDat removeControl(&m_checkboxInGameGamertags, true); } + // 4J-JEV: Changing languages in-game will produce many a bug. + // MGH - disabled the language select for the patch build, we'll re-enable afterwards + // 4J Stu - Removed it with a preprocessor def as we turn this off in various places +#ifdef _ENABLE_LANGUAGE_SELECT + if (app.GetGameStarted()) + { + removeControl( &m_buttonLanguageSelect, false ); + } + else + { + m_buttonLanguageSelect.init(IDS_LANGUAGE_SELECTOR, eControl_Languages); + } +#else + removeControl( &m_buttonLanguageSelect, false ); +#endif + doHorizontalResizeCheck(); if(app.GetLocalPlayerCount()>1) @@ -136,12 +157,26 @@ UIScene_SettingsOptionsMenu::UIScene_SettingsOptionsMenu(int iPad, void *initDat app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad); #endif } + + m_labelDifficultyText.disableReinitialisation(); } UIScene_SettingsOptionsMenu::~UIScene_SettingsOptionsMenu() { } +void UIScene_SettingsOptionsMenu::tick() +{ + UIScene::tick(); + + if (m_bNavigateToLanguageSelector) + { + m_bNavigateToLanguageSelector = false; + setGameSettings(); + ui.NavigateToScene(m_iPad, eUIScene_LanguageSelector); + } +} + wstring UIScene_SettingsOptionsMenu::getMoviePath() { if(app.GetLocalPlayerCount() > 1) @@ -173,7 +208,6 @@ void UIScene_SettingsOptionsMenu::updateComponents() if( app.GetLocalPlayerCount() == 1 ) m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,RenderManager.IsHiDef()); else m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,false); - } } @@ -185,22 +219,7 @@ void UIScene_SettingsOptionsMenu::handleInput(int iPad, int key, bool repeat, bo case ACTION_MENU_CANCEL: if(pressed) { - // check the checkboxes - app.SetGameSettings(m_iPad,eGameSetting_ViewBob,m_checkboxViewBob.IsChecked()?1:0); - app.SetGameSettings(m_iPad,eGameSetting_GamertagsVisible,m_checkboxInGameGamertags.IsChecked()?1:0); - app.SetGameSettings(m_iPad,eGameSetting_Hints,m_checkboxShowHints.IsChecked()?1:0); - app.SetGameSettings(m_iPad,eGameSetting_Tooltips,m_checkboxShowTooltips.IsChecked()?1:0); - - // the mashup option will only be shown if some worlds have been previously hidden - if(m_bMashUpWorldsUnhideOption && m_checkboxMashupWorlds.IsChecked()) - { - // unhide all worlds - app.EnableMashupPackWorlds(m_iPad); - } - - // 4J-PB - don't action changes here or we might write to the profile on backing out here and then get a change in the settings all, and write again on backing out there - //app.CheckGameSettingsChanged(true,pInputData->UserIndex); - + setGameSettings(); navigateBack(); } break; @@ -219,9 +238,146 @@ void UIScene_SettingsOptionsMenu::handleInput(int iPad, int key, bool repeat, bo } } +void UIScene_SettingsOptionsMenu::handlePress(F64 controlId, F64 childId) +{ + //CD - Added for audio + ui.PlayUISFX(eSFX_Press); + + switch((int)controlId) + { + case eControl_Languages: + m_bNavigateToLanguageSelector = true; + break; + } +} + +void UIScene_SettingsOptionsMenu::handleReload() +{ + m_bNavigateToLanguageSelector = false; + + m_checkboxViewBob.init(IDS_VIEW_BOBBING,eControl_ViewBob,(app.GetGameSettings(m_iPad,eGameSetting_ViewBob)!=0)); + m_checkboxShowHints.init(IDS_HINTS,eControl_ShowHints,(app.GetGameSettings(m_iPad,eGameSetting_Hints)!=0)); + m_checkboxShowTooltips.init(IDS_IN_GAME_TOOLTIPS,eControl_ShowTooltips,(app.GetGameSettings(m_iPad,eGameSetting_Tooltips)!=0)); + m_checkboxInGameGamertags.init(IDS_IN_GAME_GAMERTAGS,eControl_InGameGamertags,(app.GetGameSettings(m_iPad,eGameSetting_GamertagsVisible)!=0)); + + // check if we should display the mash-up option + if(m_bNotInGame && app.GetMashupPackWorlds(m_iPad)!=0xFFFFFFFF) + { + // the mash-up option is needed + m_bMashUpWorldsUnhideOption=true; + } + else + { + //m_checkboxMashupWorlds.init(L"",eControl_ShowMashUpWorlds,false); + removeControl(&m_checkboxMashupWorlds, true); + m_bMashUpWorldsUnhideOption=false; + } + + unsigned char ucValue=app.GetGameSettings(m_iPad,eGameSetting_Autosave); + + wchar_t autosaveLabels[9][256]; + for(unsigned int i = 0; i < 9; ++i) + { + if(i==0) + { + swprintf( autosaveLabels[i], 256, L"%ls", app.GetString( IDS_SLIDER_AUTOSAVE_OFF )); + } + else + { + swprintf( autosaveLabels[i], 256, L"%ls: %d %ls", app.GetString( IDS_SLIDER_AUTOSAVE ),i*15, app.GetString( IDS_MINUTES )); + } + + } + m_sliderAutosave.setAllPossibleLabels(9,autosaveLabels); + m_sliderAutosave.init(autosaveLabels[ucValue],eControl_Autosave,0,8,ucValue); + +#if defined(_XBOX_ONE) || defined(__ORBIS__) + removeControl(&m_sliderAutosave,true); +#endif + + ucValue = app.GetGameSettings(m_iPad,eGameSetting_Difficulty); + + wchar_t difficultyLabels[4][256]; + for(unsigned int i = 0; i < 4; ++i) + { + swprintf( difficultyLabels[i], 256, L"%ls: %ls", app.GetString( IDS_SLIDER_DIFFICULTY ),app.GetString(m_iDifficultyTitleSettingA[i])); + } + m_sliderDifficulty.setAllPossibleLabels(4,difficultyLabels); + m_sliderDifficulty.init(difficultyLabels[ucValue],eControl_Difficulty,0,3,ucValue); + + wstring wsText=app.GetString(m_iDifficultySettingA[app.GetGameSettings(m_iPad,eGameSetting_Difficulty)]); + EHTMLFontSize size = eHTMLSize_Normal; + if(!RenderManager.IsHiDef() && !RenderManager.IsWidescreen()) + { + size = eHTMLSize_Splitscreen; + } + wchar_t startTags[64]; + swprintf(startTags,64,L"",app.GetHTMLColour(eHTMLColor_White)); + wsText= startTags + wsText; + + m_labelDifficultyText.init(wsText); + + + // If you are in-game, only the game host can change in-game gamertags, and you can't change difficulty + // only the primary player gets to change the autosave and difficulty settings + bool bRemoveDifficulty=false; + bool bRemoveAutosave=false; + bool bRemoveInGameGamertags=false; + + bool bNotInGame=(Minecraft::GetInstance()->level==NULL); + bool bPrimaryPlayer = ProfileManager.GetPrimaryPad()==m_iPad; + if(!bPrimaryPlayer) + { + bRemoveDifficulty=true; + bRemoveAutosave=true; + bRemoveInGameGamertags=true; + } + + if(!bNotInGame) // in the game + { + bRemoveDifficulty=true; + if(!g_NetworkManager.IsHost()) + { + bRemoveAutosave=true; + bRemoveInGameGamertags=true; + } + } + if(bRemoveDifficulty) + { + m_labelDifficultyText.setVisible( false ); + removeControl(&m_sliderDifficulty, true); + } + + if(bRemoveAutosave) + { + removeControl(&m_sliderAutosave, true); + } + + if(bRemoveInGameGamertags) + { + removeControl(&m_checkboxInGameGamertags, true); + } + + // MGH - disabled the language select for the patch build, we'll re-enable afterwards + // 4J Stu - Removed it with a preprocessor def as we turn this off in various places +#ifdef _ENABLE_LANGUAGE_SELECT + // 4J-JEV: Changing languages in-game will produce many a bug. + if (app.GetGameStarted()) + { + removeControl( &m_buttonLanguageSelect, false ); + } + else + { + } +#else + removeControl( &m_buttonLanguageSelect, false ); +#endif + + doHorizontalResizeCheck(); +} + void UIScene_SettingsOptionsMenu::handleSliderMove(F64 sliderId, F64 currentValue) { - WCHAR TempString[256]; int value = (int)currentValue; switch((int)sliderId) { @@ -251,3 +407,22 @@ void UIScene_SettingsOptionsMenu::handleSliderMove(F64 sliderId, F64 currentValu break; } } + +void UIScene_SettingsOptionsMenu::setGameSettings() +{ + // check the checkboxes + app.SetGameSettings(m_iPad,eGameSetting_ViewBob,m_checkboxViewBob.IsChecked()?1:0); + app.SetGameSettings(m_iPad,eGameSetting_GamertagsVisible,m_checkboxInGameGamertags.IsChecked()?1:0); + app.SetGameSettings(m_iPad,eGameSetting_Hints,m_checkboxShowHints.IsChecked()?1:0); + app.SetGameSettings(m_iPad,eGameSetting_Tooltips,m_checkboxShowTooltips.IsChecked()?1:0); + + // the mashup option will only be shown if some worlds have been previously hidden + if(m_bMashUpWorldsUnhideOption && m_checkboxMashupWorlds.IsChecked()) + { + // unhide all worlds + app.EnableMashupPackWorlds(m_iPad); + } + + // 4J-PB - don't action changes here or we might write to the profile on backing out here and then get a change in the settings all, and write again on backing out there + //app.CheckGameSettingsChanged(true,pInputData->UserIndex); +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.h b/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.h index 265a0790..e9abb0a9 100644 --- a/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.h @@ -13,6 +13,7 @@ private: eControl_InGameGamertags, eControl_ShowMashUpWorlds, eControl_Autosave, + eControl_Languages, eControl_Difficulty }; protected: @@ -23,6 +24,8 @@ private: UIControl_CheckBox m_checkboxViewBob, m_checkboxShowHints, m_checkboxShowTooltips, m_checkboxInGameGamertags, m_checkboxMashupWorlds; // Checkboxes UIControl_Slider m_sliderAutosave, m_sliderDifficulty; // Sliders UIControl_Label m_labelDifficultyText; //Text + UIControl_Button m_buttonLanguageSelect; + UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) UI_MAP_ELEMENT( m_checkboxViewBob, "ViewBob") UI_MAP_ELEMENT( m_checkboxShowHints, "ShowHints") @@ -32,16 +35,21 @@ private: UI_MAP_ELEMENT( m_sliderAutosave, "Autosave") UI_MAP_ELEMENT( m_sliderDifficulty, "Difficulty") UI_MAP_ELEMENT( m_labelDifficultyText, "DifficultyText") + UI_MAP_ELEMENT( m_buttonLanguageSelect, "Languages") UI_END_MAP_ELEMENTS_AND_NAMES() bool m_bNotInGame; bool m_bMashUpWorldsUnhideOption; + bool m_bNavigateToLanguageSelector; + public: UIScene_SettingsOptionsMenu(int iPad, void *initData, UILayer *parentLayer); virtual ~UIScene_SettingsOptionsMenu(); virtual EUIScene getSceneType() { return eUIScene_SettingsOptionsMenu;} + virtual void tick(); + virtual void updateTooltips(); virtual void updateComponents(); @@ -52,6 +60,13 @@ protected: public: // INPUT virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled); + virtual void handlePress(F64 controlId, F64 childId); + + virtual void handleReload(); virtual void handleSliderMove(F64 sliderId, F64 currentValue); + +protected: + void setGameSettings(); + }; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp b/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp index 33f41994..d4f26ae7 100644 --- a/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp @@ -222,170 +222,7 @@ void UIScene_SkinSelectMenu::handleInput(int iPad, int key, bool repeat, bool pr #endif if(pressed) { - ui.AnimateKeyPress(iPad, key, repeat, pressed, released); - // if the profile data has been changed, then force a profile write - // It seems we're allowed to break the 5 minute rule if it's the result of a user action - switch(m_packIndex) - { - case SKIN_SELECT_PACK_DEFAULT: - app.SetPlayerSkin(iPad, m_skinIndex); - app.SetPlayerCape(iPad, 0); - m_currentSkinPath = app.GetPlayerSkinName(iPad); - m_originalSkinId = app.GetPlayerSkinId(iPad); - setCharacterSelected(true); - ui.PlayUISFX(eSFX_Press); - break; - case SKIN_SELECT_PACK_FAVORITES: - if(app.GetPlayerFavoriteSkinsCount(iPad)>0) - { - // get the pack number from the skin id - wchar_t chars[256]; - swprintf(chars, 256, L"dlcskin%08d.png", app.GetPlayerFavoriteSkin(iPad,m_skinIndex)); - - DLCPack *Pack=app.m_dlcManager.getPackContainingSkin(chars); - - if(Pack) - { - DLCSkinFile *skinFile = Pack->getSkinFile(chars); - app.SetPlayerSkin(iPad, skinFile->getPath()); - app.SetPlayerCape(iPad, skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape)); - setCharacterSelected(true); - m_currentSkinPath = app.GetPlayerSkinName(iPad); - m_originalSkinId = app.GetPlayerSkinId(iPad); - app.SetPlayerFavoriteSkinsPos(iPad,m_skinIndex); - } - } - break; - default: - if( m_currentPack != NULL ) - { - DLCSkinFile *skinFile = m_currentPack->getSkinFile(m_skinIndex); - - if ( !skinFile->getParameterAsBool( DLCManager::e_DLCParamType_Free ) // Is this a free skin? - && !m_currentPack->hasPurchasedFile( DLCManager::e_DLCType_Skin, skinFile->getPath() ) // do we have a license? - ) - { - // 4J-PB - check for a patch -#ifdef __ORBIS__ - // 4J-PB - Check if there is a patch for the game - int errorCode = ProfileManager.getNPAvailability(ProfileManager.GetPrimaryPad()); - - bool bPatchAvailable; - switch(errorCode) - { - case SCE_NP_ERROR_LATEST_PATCH_PKG_EXIST: - case SCE_NP_ERROR_LATEST_PATCH_PKG_DOWNLOADED: - bPatchAvailable=true; - break; - default: - bPatchAvailable=false; - break; - } - - if(bPatchAvailable) - { - int32_t ret=sceErrorDialogInitialize(); - m_bErrorDialogRunning=true; - if ( ret==SCE_OK ) - { - SceErrorDialogParam param; - sceErrorDialogParamInitialize( ¶m ); - // 4J-PB - We want to display the option to get the patch now - param.errorCode = SCE_NP_ERROR_LATEST_PATCH_PKG_DOWNLOADED;//pClass->m_errorCode; - ret = sceUserServiceGetInitialUser( ¶m.userId ); - if ( ret == SCE_OK ) - { - ret=sceErrorDialogOpen( ¶m ); - break; - } - } - } -#endif - - // no - UINT uiIDA[1] = { IDS_OK }; -#ifdef __ORBIS__ - // Check if PSN is unavailable because of age restriction - int npAvailability = ProfileManager.getNPAvailability(iPad); - if (npAvailability == SCE_NP_ERROR_AGE_RESTRICTION) - { - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable()); - } - else -#endif - // We need to upsell the full version - if(ProfileManager.IsGuest(iPad)) - { - // can't buy - ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1,iPad,NULL,NULL,app.GetStringTable(),NULL,0,false); - } - // are we online? - else if(!ProfileManager.IsSignedInLive(iPad)) - { - showNotOnlineDialog(iPad); - } - else - { - // upsell -#ifdef _XBOX - DLC_INFO *pDLCInfo = app.GetDLCInfoForTrialOfferID(m_currentPack->getPurchaseOfferId()); - ULONGLONG ullOfferID_Full; - - if(pDLCInfo!=NULL) - { - ullOfferID_Full=pDLCInfo->ullOfferID_Full; - } - else - { - ullOfferID_Full=m_currentPack->getPurchaseOfferId(); - } - - // tell sentient about the upsell of the full version of the skin pack - TelemetryManager->RecordUpsellPresented(iPad, eSet_UpsellID_Skin_DLC, ullOfferID_Full & 0xFFFFFFFF); -#endif - bool bContentRestricted=false; -#if defined(__PS3__) || defined(__PSVITA__) - ProfileManager.GetChatAndContentRestrictions(m_iPad,true,NULL,&bContentRestricted,NULL); -#endif - if(bContentRestricted) - { -#if !(defined(_XBOX) || defined(_WIN64)) // 4J Stu - Temp to get the win build running, but so we check this for other platforms - // you can't see the store - UINT uiIDA[1] = { IDS_CONFIRM_OK }; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad,NULL,this, app.GetStringTable(),NULL,0,false); -#endif - } - else - { - // 4J-PB - need to check for an empty store -#if defined __ORBIS__ || defined __PSVITA__ || defined __PS3__ - if(app.CheckForEmptyStore(iPad)==false) -#endif - { - this->m_bIgnoreInput = true; - - UINT uiIDA[2] = { IDS_CONFIRM_OK, IDS_CONFIRM_CANCEL }; - ui.RequestMessageBox(IDS_UNLOCK_DLC_TITLE, IDS_UNLOCK_DLC_SKIN, uiIDA, 2, iPad,&UIScene_SkinSelectMenu::UnlockSkinReturned,this,app.GetStringTable(),NULL,0,false); - } - } - } - } - else - { - app.SetPlayerSkin(iPad, skinFile->getPath()); - app.SetPlayerCape(iPad, skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape)); - setCharacterSelected(true); - m_currentSkinPath = app.GetPlayerSkinName(iPad); - m_originalSkinId = app.GetPlayerSkinId(iPad); - - // push this onto the favorite list - AddFavoriteSkin(iPad,GET_DLC_SKIN_ID_FROM_BITMASK(m_originalSkinId)); - } - } - - ui.PlayUISFX(eSFX_Press); - break; - } + InputActionOK(iPad); } break; case ACTION_MENU_UP: @@ -614,17 +451,62 @@ void UIScene_SkinSelectMenu::InputActionOK(unsigned int iPad) //if(true) if(!m_currentPack->hasPurchasedFile( DLCManager::e_DLCType_Skin, skinFile->getPath() )) { +#ifdef __ORBIS__ + // 4J-PB - Check if there is a patch for the game + int errorCode = ProfileManager.getNPAvailability(ProfileManager.GetPrimaryPad()); + + bool bPatchAvailable; + switch(errorCode) + { + case SCE_NP_ERROR_LATEST_PATCH_PKG_EXIST: + case SCE_NP_ERROR_LATEST_PATCH_PKG_DOWNLOADED: + bPatchAvailable=true; + break; + default: + bPatchAvailable=false; + break; + } + + if(bPatchAvailable) + { + int32_t ret=sceErrorDialogInitialize(); + m_bErrorDialogRunning=true; + if ( ret==SCE_OK ) + { + SceErrorDialogParam param; + sceErrorDialogParamInitialize( ¶m ); + // 4J-PB - We want to display the option to get the patch now + param.errorCode = SCE_NP_ERROR_LATEST_PATCH_PKG_DOWNLOADED;//pClass->m_errorCode; + ret = sceUserServiceGetInitialUser( ¶m.userId ); + if ( ret == SCE_OK ) + { + ret=sceErrorDialogOpen( ¶m ); + break; + } + } + } +#endif + // no UINT uiIDA[1]; uiIDA[0]=IDS_OK; +#ifdef __ORBIS__ + // Check if PSN is unavailable because of age restriction + int npAvailability = ProfileManager.getNPAvailability(iPad); + if (npAvailability == SCE_NP_ERROR_AGE_RESTRICTION) + { + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad); + } + else +#endif // We need to upsell the full version if(ProfileManager.IsGuest(iPad)) { // can't buy - ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1,iPad,NULL,NULL,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1,iPad); } -#if defined(__PS3__) || defined(__ORBIS__) +#if defined(__PS3__) || defined(__ORBIS__) || defined __PSVITA__ // are we online? else if(!ProfileManager.IsSignedInLive(iPad)) { @@ -656,11 +538,11 @@ void UIScene_SkinSelectMenu::InputActionOK(unsigned int iPad) #endif if(bContentRestricted) { -#if !(defined(_XBOX) || defined(_WIN64)) // 4J Stu - Temp to get the win build running, but so we check this for other platforms +#if !(defined(_XBOX) || defined(_WINDOWS64) || defined(_XBOX_ONE)) // 4J Stu - Temp to get the win build running, but so we check this for other platforms // you can't see the store UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,this, app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad); #endif } else @@ -674,7 +556,7 @@ void UIScene_SkinSelectMenu::InputActionOK(unsigned int iPad) renableInputAfterOperation = false; UINT uiIDA[2] = { IDS_CONFIRM_OK, IDS_CONFIRM_CANCEL }; - ui.RequestMessageBox(IDS_UNLOCK_DLC_TITLE, IDS_UNLOCK_DLC_SKIN, uiIDA, 2, iPad,&UIScene_SkinSelectMenu::UnlockSkinReturned,this,app.GetStringTable(),NULL,0,false); + ui.RequestAlertMessage(IDS_UNLOCK_DLC_TITLE, IDS_UNLOCK_DLC_SKIN, uiIDA, 2, iPad,&UIScene_SkinSelectMenu::UnlockSkinReturned,this); } } } @@ -703,7 +585,10 @@ void UIScene_SkinSelectMenu::InputActionOK(unsigned int iPad) AddFavoriteSkin(iPad,GET_DLC_SKIN_ID_FROM_BITMASK(m_originalSkinId)); } - if (renableInputAfterOperation) m_bIgnoreInput = false; + if (renableInputAfterOperation) + { + m_bIgnoreInput = false; + } } ui.PlayUISFX(eSFX_Press); @@ -1652,7 +1537,18 @@ void UIScene_SkinSelectMenu::showNotOnlineDialog(int iPad) SQRNetworkManager_PS3::AttemptPSNSignIn(NULL, this); #elif defined(__PSVITA__) - SQRNetworkManager_Vita::AttemptPSNSignIn(NULL, this); + if(CGameNetworkManager::usingAdhocMode() && SQRNetworkManager_AdHoc_Vita::GetAdhocStatus()) + { + // we're in adhoc mode, we really need to ask before disconnecting + UINT uiIDA[2]; + uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; + uiIDA[1]=IDS_CANCEL; + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_SkinSelectMenu::MustSignInReturned,NULL); + } + else + { + SQRNetworkManager_Vita::AttemptPSNSignIn(NULL, this); + } #elif defined(__ORBIS__) SQRNetworkManager_Orbis::AttemptPSNSignIn(NULL, this, false, iPad); @@ -1660,7 +1556,7 @@ void UIScene_SkinSelectMenu::showNotOnlineDialog(int iPad) #elif defined(_DURANGO) UINT uiIDA[1] = { IDS_CONFIRM_OK }; - ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable() ); + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad ); #endif } @@ -1723,9 +1619,9 @@ int UIScene_SkinSelectMenu::UnlockSkinReturned(void *pParam,int iPad,C4JStorage: app.Checkout(chSkuID); } } - // need to re-enable input because the user can back out of the store purchase, and we'll be stuck - pScene->m_bIgnoreInput = false; } + // need to re-enable input because the user can back out of the store purchase, and we'll be stuck + pScene->m_bIgnoreInput = false; // MGH - moved this to outside the pSONYDLCInfo, so we don't get stuck #elif defined _XBOX_ONE StorageManager.InstallOffer(1,(WCHAR *)(pScene->m_currentPack->getPurchaseOfferId().c_str()), &RenableInput, pScene, NULL); #endif @@ -1810,4 +1706,32 @@ void UIScene_SkinSelectMenu::HandleDLCLicenseChange() // update the lock flag handleSkinIndexChanged(); } -#endif \ No newline at end of file +#endif + + + + +#ifdef __PSVITA__ +int UIScene_SkinSelectMenu::MustSignInReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) +{ + if(result==C4JStorage::EMessage_ResultAccept) + { +#ifdef __PS3__ + SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_SkinSelectMenu::PSNSignInReturned, pParam,true); +#elif defined __PSVITA__ + SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_SkinSelectMenu::PSNSignInReturned, pParam,true); +#elif defined __ORBIS__ + SQRNetworkManager_Orbis::AttemptPSNSignIn(&UIScene_SkinSelectMenu::PSNSignInReturned, pParam,true); +#endif + } + return 0; +} + +int UIScene_SkinSelectMenu::PSNSignInReturned(void* pParam, bool bContinue, int iPad) +{ + if( bContinue ) + { + } + return 0; +} +#endif // __PSVITA__ \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.h b/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.h index c9ed6691..e8d76096 100644 --- a/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.h @@ -183,6 +183,12 @@ private: bool m_bErrorDialogRunning; #endif +#ifdef __PSVITA__ + static int MustSignInReturned(void *pParam,int iPad,C4JStorage::EMessageResult result); + static int PSNSignInReturned(void* pParam, bool bContinue, int iPad); +#endif + + #ifdef __PSVITA__ CRITICAL_SECTION m_DLCInstallCS; // to prevent a race condition between the install and the mounted callback #endif diff --git a/Minecraft.Client/Common/UI/UIScene_Timer.cpp b/Minecraft.Client/Common/UI/UIScene_Timer.cpp index 61586e87..3dec20a3 100644 --- a/Minecraft.Client/Common/UI/UIScene_Timer.cpp +++ b/Minecraft.Client/Common/UI/UIScene_Timer.cpp @@ -20,7 +20,7 @@ wstring UIScene_Timer::getMoviePath() return L"Timer"; } -void UIScene_Timer::reloadMovie() +void UIScene_Timer::reloadMovie(bool force) { // Never needs reloaded } diff --git a/Minecraft.Client/Common/UI/UIScene_Timer.h b/Minecraft.Client/Common/UI/UIScene_Timer.h index 5a75103a..ef6aae94 100644 --- a/Minecraft.Client/Common/UI/UIScene_Timer.h +++ b/Minecraft.Client/Common/UI/UIScene_Timer.h @@ -20,7 +20,7 @@ public: // Returns true if lower scenes in this scenes layer, or in any layer below this scenes layers should be hidden virtual bool hidesLowerScenes() { return true; } - virtual void reloadMovie(); + virtual void reloadMovie(bool force); virtual bool needsReloaded(); protected: diff --git a/Minecraft.Client/Common/UI/UIScene_TradingMenu.cpp b/Minecraft.Client/Common/UI/UIScene_TradingMenu.cpp index dc2bac48..0a35c8e5 100644 --- a/Minecraft.Client/Common/UI/UIScene_TradingMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_TradingMenu.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "UI.h" #include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.item.h" #include "..\..\..\Minecraft.World\net.minecraft.world.item.trading.h" #include "..\..\..\Minecraft.World\net.minecraft.world.level.tile.entity.h" #include "MultiPlayerLocalPlayer.h" @@ -118,6 +119,15 @@ void UIScene_TradingMenu::handleReload() m_slotListInventory.addSlots(MerchantMenu::INV_SLOT_START, 27); m_slotListHotbar.addSlots(MerchantMenu::USE_ROW_SLOT_START, 9); + + updateDisplay(); + + IggyDataValue result; + IggyDataValue value[1]; + + value[0].type = IGGY_DATATYPE_number; + value[0].number = m_selectedSlot; + IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetActiveSlot , 1 , value ); } void UIScene_TradingMenu::tick() @@ -253,16 +263,33 @@ void UIScene_TradingMenu::setTradeRedBox(int index, bool show) m_slotListTrades.showSlotRedBox(index,show); } -void UIScene_TradingMenu::setOfferDescription(const wstring &name, vector &unformattedStrings) +void UIScene_TradingMenu::setOfferDescription(vector *description) { + wstring descriptionStr = HtmlString::Compose(description); + IggyDataValue result; IggyDataValue value[1]; IggyStringUTF16 stringVal; - stringVal.string = (IggyUTF16*)name.c_str(); - stringVal.length = name.length(); + stringVal.string = (IggyUTF16*)descriptionStr.c_str(); + stringVal.length = descriptionStr.length(); value[0].type = IGGY_DATATYPE_string_UTF16; value[0].string16 = stringVal; IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetOfferDescription , 1 , value ); } + +void UIScene_TradingMenu::HandleMessage(EUIMessage message, void *data) +{ + switch(message) + { + case eUIMessage_InventoryUpdated: + handleInventoryUpdated(data); + break; + }; +} + +void UIScene_TradingMenu::handleInventoryUpdated(LPVOID data) +{ + HandleInventoryUpdated(); +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_TradingMenu.h b/Minecraft.Client/Common/UI/UIScene_TradingMenu.h index 08263a1c..a22ba0cf 100644 --- a/Minecraft.Client/Common/UI/UIScene_TradingMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_TradingMenu.h @@ -23,7 +23,7 @@ protected: UIControl_Label m_labelTrading, m_labelRequired; UIControl_Label m_labelRequest1, m_labelRequest2; - IggyName m_funcMoveSelector, m_funcShowScrollRightArrow, m_funcShowScrollLeftArrow, m_funcSetOfferDescription; + IggyName m_funcMoveSelector, m_funcShowScrollRightArrow, m_funcShowScrollLeftArrow, m_funcSetOfferDescription, m_funcSetActiveSlot; UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) UI_MAP_ELEMENT( m_controlMainPanel, "MainPanel" ) @@ -48,6 +48,7 @@ protected: UI_MAP_NAME(m_funcShowScrollRightArrow, L"ShowScrollRightArrow") UI_MAP_NAME(m_funcShowScrollLeftArrow, L"ShowScrollLeftArrow") UI_MAP_NAME(m_funcSetOfferDescription, L"SetOfferDescription") + UI_MAP_NAME(m_funcSetActiveSlot, L"SetSelectorSlot") UI_END_MAP_ELEMENTS_AND_NAMES() virtual wstring getMoviePath(); @@ -72,7 +73,10 @@ protected: virtual void setRequest2RedBox(bool show); virtual void setTradeRedBox(int index, bool show); - virtual void setOfferDescription(const wstring &name, vector &unformattedStrings); + virtual void setOfferDescription(vector *description); + + virtual void HandleMessage(EUIMessage message, void *data); + void handleInventoryUpdated(LPVOID data); int getPad() { return m_iPad; } }; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIScene_TrialExitUpsell.cpp b/Minecraft.Client/Common/UI/UIScene_TrialExitUpsell.cpp index b395bc4c..9ef8f189 100644 --- a/Minecraft.Client/Common/UI/UIScene_TrialExitUpsell.cpp +++ b/Minecraft.Client/Common/UI/UIScene_TrialExitUpsell.cpp @@ -55,7 +55,7 @@ void UIScene_TrialExitUpsell::handleInput(int iPad, int key, bool repeat, bool p { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,this, app.GetStringTable()); + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else #endif diff --git a/Minecraft.Client/Common/UI/UIString.cpp b/Minecraft.Client/Common/UI/UIString.cpp new file mode 100644 index 00000000..288fa87a --- /dev/null +++ b/Minecraft.Client/Common/UI/UIString.cpp @@ -0,0 +1,176 @@ +#include "stdafx.h" + +#include "..\..\..\Minecraft.World\StringHelpers.h" + +#include "UIString.h" + +bool UIString::setCurrentLanguage() +{ + int nextLanguage, nextLocale; + nextLanguage = XGetLanguage(); + nextLocale = XGetLocale(); + + if ( (nextLanguage != s_currentLanguage) || (nextLocale != s_currentLocale) ) + { + s_currentLanguage = nextLanguage; + s_currentLocale = nextLocale; + return true; + } + + return false; +} + +int UIString::getCurrentLanguage() +{ + return s_currentLanguage; +} + +UIString::UIStringCore::UIStringCore(StringBuilder wstrBuilder) +{ + m_bIsConstant = false; + + m_lastSetLanguage = m_lastSetLocale = -1; + m_lastUpdatedLanguage = m_lastUpdatedLocale = -1; + + m_fStringBuilder = wstrBuilder; + + m_wstrCache = L""; + update(true); +} + +UIString::UIStringCore::UIStringCore(const wstring &str) +{ + m_bIsConstant = true; + + m_lastSetLanguage = m_lastSetLocale = -1; + m_lastUpdatedLanguage = m_lastUpdatedLocale = -1; + + m_wstrCache = str; +} + +wstring &UIString::UIStringCore::getString() +{ + if (hasNewString()) update(true); + return m_wstrCache; +} + +bool UIString::UIStringCore::hasNewString() +{ + if (m_bIsConstant) return false; + return (m_lastSetLanguage != s_currentLanguage) || (m_lastSetLocale != s_currentLocale); +} + +bool UIString::UIStringCore::update(bool force) +{ + if ( !m_bIsConstant && (force || hasNewString()) ) + { + m_wstrCache = m_fStringBuilder(); + m_lastSetLanguage = s_currentLanguage; + m_lastSetLocale = s_currentLocale; + return true; + } + return false; +} + +bool UIString::UIStringCore::needsUpdating() +{ + if (m_bIsConstant) return false; + return (m_lastSetLanguage != s_currentLanguage) || (m_lastUpdatedLanguage != m_lastSetLanguage) + || (m_lastSetLocale != s_currentLocale) || (m_lastUpdatedLocale != m_lastSetLocale); +} + +void UIString::UIStringCore::setUpdated() +{ + m_lastUpdatedLanguage = m_lastSetLanguage; + m_lastUpdatedLocale = m_lastSetLocale; +} + +int UIString::s_currentLanguage = -1; +int UIString::s_currentLocale = -1; + +UIString::UIString() +{ + m_core = shared_ptr(); +} + +UIString::UIString(int ids) +{ +#ifdef __PS3__ + StringBuilder builder = StringBuilder( new IdsStringBuilder(ids) ); +#else + StringBuilder builder = [ids](){ return app.GetString(ids); }; +#endif + UIStringCore *core = new UIStringCore( builder ); + m_core = shared_ptr(core); +} + +UIString::UIString(StringBuilder wstrBuilder) +{ + UIStringCore *core = new UIStringCore(wstrBuilder); + m_core = shared_ptr(core); +} + +UIString::UIString(const string &constant) +{ + wstring wstr = convStringToWstring(constant); + UIStringCore *core = new UIStringCore( wstr ); + m_core = shared_ptr(core); +} + +UIString::UIString(const wstring &constant) +{ + UIStringCore *core = new UIStringCore(constant); + m_core = shared_ptr(core); +} + +UIString::UIString(const wchar_t *constant) +{ + wstring str = wstring(constant); + UIStringCore *core = new UIStringCore(str); + m_core = shared_ptr(core); +} + +UIString::~UIString() +{ +#ifndef __PS3__ + m_core = nullptr; +#endif +} + +bool UIString::empty() +{ + return m_core.get() == NULL; +} + +bool UIString::compare(const UIString &uiString) +{ + return m_core.get() != uiString.m_core.get(); +} + +bool UIString::needsUpdating() +{ + if (m_core != NULL) return m_core->needsUpdating(); + else return false; +} + +void UIString::setUpdated() +{ + if (m_core != NULL) m_core->setUpdated(); +} + +wstring &UIString::getString() +{ + static wstring blank(L""); + if (m_core != NULL) return m_core->getString(); + else return blank; +} + +const wchar_t *UIString::c_str() +{ + return getString().c_str(); +} + +unsigned int UIString::length() +{ + return getString().length(); +} \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIString.h b/Minecraft.Client/Common/UI/UIString.h new file mode 100644 index 00000000..29e5a068 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIString.h @@ -0,0 +1,103 @@ +#pragma once + +#include +#include + + +#ifndef __PS3__ + +typedef function StringBuilder; + +#else + +class StringBuilderCore +{ +public: + virtual wstring getString() = 0; +}; + +struct StringBuilder +{ + shared_ptr m_coreBuilder; + virtual wstring operator()() { return m_coreBuilder->getString(); } + StringBuilder() {} + StringBuilder(StringBuilderCore *core) { m_coreBuilder = shared_ptr(core); } +}; + +class IdsStringBuilder : public StringBuilderCore +{ + const int m_ids; +public: + IdsStringBuilder(int ids) : m_ids(ids) {} + virtual wstring getString(void) { return app.GetString(m_ids); } +}; +#endif + +using namespace std; + +class UIString +{ +protected: + static int s_currentLanguage; + static int s_currentLocale; + +public: + static bool setCurrentLanguage(); + static int getCurrentLanguage(); + +protected: + class UIStringCore : public enable_shared_from_this + { + private: + int m_lastSetLanguage; + int m_lastSetLocale; + + int m_lastUpdatedLanguage; + int m_lastUpdatedLocale; + + wstring m_wstrCache; + + bool m_bIsConstant; + + StringBuilder m_fStringBuilder; + + public: + UIStringCore(StringBuilder wstrBuilder); + UIStringCore(const wstring &str); + + wstring &getString(); + + bool hasNewString(); + bool update(bool force); + + bool needsUpdating(); + void setUpdated(); + }; + + shared_ptr m_core; + +public: + UIString(); + + UIString(int ids); // Create a dynamic UI string from a string id value. + + UIString(StringBuilder wstrBuilder); // Create a dynamic UI string with a custom update function. + + // Create a UIString with a constant value. + UIString(const string &constant); + UIString(const wstring &constant); + UIString(const wchar_t *constant); + + ~UIString(); + + bool empty(); + bool compare(const UIString &uiString); + + bool needsUpdating(); // Language has been change since the last time setUpdated was called. + void setUpdated(); // The new text has been used. + + wstring &getString(); + + const wchar_t *c_str(); + unsigned int length(); +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UIStructs.h b/Minecraft.Client/Common/UI/UIStructs.h index 2dd03c8c..c41f2276 100644 --- a/Minecraft.Client/Common/UI/UIStructs.h +++ b/Minecraft.Client/Common/UI/UIStructs.h @@ -13,6 +13,10 @@ class SignTileEntity; class LevelGenerationOptions; class LocalPlayer; class Merchant; +class EntityHorse; +class BeaconTileEntity; +class Slot; +class AbstractContainerMenu; // 4J Stu - Structs shared by Iggy and Xui scenes. typedef struct _UIVec2D @@ -74,7 +78,9 @@ typedef struct _EnchantingScreenInput int z; int iPad; bool bSplitscreen; -} EnchantingScreenInput; + wstring name; +} +EnchantingScreenInput; // Furnace typedef struct _FurnaceScreenInput @@ -98,6 +104,18 @@ typedef struct _CraftingPanelScreenInput } CraftingPanelScreenInput; +// Fireworks +typedef struct _FireworksScreenInput +{ + shared_ptr player; + bool bSplitscreen; + int iPad; + int x; + int y; + int z; +} +FireworksScreenInput; + // Trading typedef struct _TradingScreenInput { @@ -122,6 +140,37 @@ typedef struct _AnvilScreenInput } AnvilScreenInput; +// Hopper +typedef struct _HopperScreenInput +{ + shared_ptr inventory; + shared_ptr hopper; + int iPad; + bool bSplitscreen; +} +HopperScreenInput; + +// Horse +typedef struct _HorseScreenInput +{ + shared_ptr inventory; + shared_ptr container; + shared_ptr horse; + int iPad; + bool bSplitscreen; +} +HorseScreenInput; + +// Beacon +typedef struct _BeaconScreenInput +{ + shared_ptr inventory; + shared_ptr beacon; + int iPad; + bool bSplitscreen; +} +BeaconScreenInput; + // Sign typedef struct _SignEntryScreenInput { @@ -236,24 +285,32 @@ typedef struct _JoinMenuInitData // More Options typedef struct _LaunchMoreOptionsMenuInitData { - BOOL bOnlineGame; - BOOL bInviteOnly; - BOOL bAllowFriendsOfFriends; + bool bOnlineGame; + bool bInviteOnly; + bool bAllowFriendsOfFriends; + + bool bGenerateOptions; + bool bStructures; + bool bFlatWorld; + bool bBonusChest; - BOOL bGenerateOptions; - BOOL bStructures; - BOOL bFlatWorld; - BOOL bBonusChest; + bool bPVP; + bool bTrust; + bool bFireSpreads; + bool bTNT; - BOOL bPVP; - BOOL bTrust; - BOOL bFireSpreads; - BOOL bTNT; + bool bHostPrivileges; + bool bResetNether; - BOOL bHostPrivileges; - BOOL bResetNether; + bool bMobGriefing; + bool bKeepInventory; + bool bDoMobSpawning; + bool bDoMobLoot; + bool bDoTileDrops; + bool bNaturalRegeneration; + bool bDoDaylightCycle; - BOOL bOnlineSettingChangedBySystem; + bool bOnlineSettingChangedBySystem; int iPad; @@ -263,18 +320,32 @@ typedef struct _LaunchMoreOptionsMenuInitData int worldSize; bool bDisableSaving; + EGameHostOptionWorldSize currentWorldSize; + EGameHostOptionWorldSize newWorldSize; + bool newWorldSizeOverwriteEdges; + _LaunchMoreOptionsMenuInitData() { memset(this,0,sizeof(_LaunchMoreOptionsMenuInitData)); - bOnlineGame = TRUE; - bAllowFriendsOfFriends = TRUE; - bPVP = TRUE; - bFireSpreads = TRUE; - bTNT = TRUE; + bOnlineGame = true; + bAllowFriendsOfFriends = true; + bPVP = true; + bFireSpreads = true; + bTNT = true; iPad = -1; worldSize = 3; seed = L""; bDisableSaving = false; + newWorldSize = e_worldSize_Unknown; + newWorldSizeOverwriteEdges = false; + + bMobGriefing = true; + bKeepInventory = false; + bDoMobSpawning = true; + bDoMobLoot = true; + bDoTileDrops = true; + bNaturalRegeneration = true; + bDoDaylightCycle = true; } } LaunchMoreOptionsMenuInitData; @@ -407,3 +478,10 @@ typedef struct _CustomDrawData float x0, y0, x1, y1; // the bounding box of the original DisplayObject, in object space float mat[16]; } CustomDrawData; + +typedef struct _ItemEditorInput +{ + int iPad; + Slot *slot; + AbstractContainerMenu *menu; +} ItemEditorInput; \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UITTFFont.cpp b/Minecraft.Client/Common/UI/UITTFFont.cpp index eb343382..5d72ed97 100644 --- a/Minecraft.Client/Common/UI/UITTFFont.cpp +++ b/Minecraft.Client/Common/UI/UITTFFont.cpp @@ -4,7 +4,8 @@ #include "..\..\..\Minecraft.World\File.h" #include "UITTFFont.h" -UITTFFont::UITTFFont(const string &path, S32 fallbackCharacter) +UITTFFont::UITTFFont(const string &name, const string &path, S32 fallbackCharacter) + : m_strFontName(name) { app.DebugPrintf("UITTFFont opening %s\n",path.c_str()); @@ -36,9 +37,9 @@ UITTFFont::UITTFFont(const string &path, S32 fallbackCharacter) } CloseHandle(file); - IggyFontInstallTruetypeUTF8 ( (void *)pbData, IGGY_TTC_INDEX_none, "Mojangles_TTF", -1, IGGY_FONTFLAG_none ); + IggyFontInstallTruetypeUTF8 ( (void *)pbData, IGGY_TTC_INDEX_none, m_strFontName.c_str(), -1, IGGY_FONTFLAG_none ); - IggyFontInstallTruetypeFallbackCodepointUTF8( "Mojangles_TTF", -1, IGGY_FONTFLAG_none, fallbackCharacter ); + IggyFontInstallTruetypeFallbackCodepointUTF8( m_strFontName.c_str(), -1, IGGY_FONTFLAG_none, fallbackCharacter ); // 4J Stu - These are so we can use the default flash controls IggyFontInstallTruetypeUTF8 ( (void *)pbData, IGGY_TTC_INDEX_none, "Times New Roman", -1, IGGY_FONTFLAG_none ); @@ -48,4 +49,10 @@ UITTFFont::UITTFFont(const string &path, S32 fallbackCharacter) UITTFFont::~UITTFFont() { +} + + +string UITTFFont::getFontName() +{ + return m_strFontName; } \ No newline at end of file diff --git a/Minecraft.Client/Common/UI/UITTFFont.h b/Minecraft.Client/Common/UI/UITTFFont.h index 0de7c4e0..023bd51b 100644 --- a/Minecraft.Client/Common/UI/UITTFFont.h +++ b/Minecraft.Client/Common/UI/UITTFFont.h @@ -3,10 +3,14 @@ class UITTFFont { private: + const string m_strFontName; + PBYTE pbData; //DWORD dwDataSize; public: - UITTFFont(const string &path, S32 fallbackCharacter); + UITTFFont(const string &name, const string &path, S32 fallbackCharacter); ~UITTFFont(); + + string getFontName(); }; diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Candy/Data/TexturePack.xzp b/Minecraft.Client/Common/res/TitleUpdate/DLC/Candy/Data/TexturePack.xzp index f2e865fc..2eae0020 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Candy/Data/TexturePack.xzp and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Candy/Data/TexturePack.xzp differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Candy/Data/x16Data.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/Candy/Data/x16Data.pck index 50d5d4ee..7c548119 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Candy/Data/x16Data.pck and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Candy/Data/x16Data.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Cartoon/Data/TexturePack.xzp b/Minecraft.Client/Common/res/TitleUpdate/DLC/Cartoon/Data/TexturePack.xzp new file mode 100644 index 00000000..9ceb5e40 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Cartoon/Data/TexturePack.xzp differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Cartoon/Data/x32Data.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/Cartoon/Data/x32Data.pck new file mode 100644 index 00000000..f8c3536f Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Cartoon/Data/x32Data.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/City/Data/TexturePack.xzp b/Minecraft.Client/Common/res/TitleUpdate/DLC/City/Data/TexturePack.xzp index b2d02efd..d96eeeee 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/City/Data/TexturePack.xzp and b/Minecraft.Client/Common/res/TitleUpdate/DLC/City/Data/TexturePack.xzp differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/City/Data/x32Data.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/City/Data/x32Data.pck index 4968ba01..52f0f98f 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/City/Data/x32Data.pck and b/Minecraft.Client/Common/res/TitleUpdate/DLC/City/Data/x32Data.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Fantasy/Data/TexturePack.xzp b/Minecraft.Client/Common/res/TitleUpdate/DLC/Fantasy/Data/TexturePack.xzp index 87fc9d91..00b9d61c 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Fantasy/Data/TexturePack.xzp and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Fantasy/Data/TexturePack.xzp differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Fantasy/Data/x32Data.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/Fantasy/Data/x32Data.pck index 9d909b93..103a8d82 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Fantasy/Data/x32Data.pck and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Fantasy/Data/x32Data.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/Festive.mcs b/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/Festive.mcs new file mode 100644 index 00000000..1d3dd63d Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/Festive.mcs differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/GameRules.grf b/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/GameRules.grf new file mode 100644 index 00000000..a260f16b Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/GameRules.grf differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/TexturePack.xzp b/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/TexturePack.xzp new file mode 100644 index 00000000..d458e2e8 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/TexturePack.xzp differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/x16Data.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/x16Data.pck new file mode 100644 index 00000000..6c9439cb Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/Data/x16Data.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/TexturePack.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/TexturePack.pck new file mode 100644 index 00000000..11a01367 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Festive/TexturePack.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Halloween/Data/TexturePack.xzp b/Minecraft.Client/Common/res/TitleUpdate/DLC/Halloween/Data/TexturePack.xzp index ce7ea034..ca0a01ad 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Halloween/Data/TexturePack.xzp and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Halloween/Data/TexturePack.xzp differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Halloween/Data/x16Data.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/Halloween/Data/x16Data.pck index 9da2ef1b..f519e006 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Halloween/Data/x16Data.pck and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Halloween/Data/x16Data.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Halo/Data/TexturePack.xzp b/Minecraft.Client/Common/res/TitleUpdate/DLC/Halo/Data/TexturePack.xzp index 73339be4..908ce222 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Halo/Data/TexturePack.xzp and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Halo/Data/TexturePack.xzp differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Halo/Data/x16Data.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/Halo/Data/x16Data.pck index 63d88194..7e2c79bf 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Halo/Data/x16Data.pck and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Halo/Data/x16Data.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Halo/TexturePack.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/Halo/TexturePack.pck index fddfbb38..5820cd20 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Halo/TexturePack.pck and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Halo/TexturePack.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/Data/TexturePack.xzp b/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/Data/TexturePack.xzp index 5b2df78a..3f021e56 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/Data/TexturePack.xzp and b/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/Data/TexturePack.xzp differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/Data/masseffect.mcs b/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/Data/masseffect.mcs index c3e1cb8d..fdb2b532 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/Data/masseffect.mcs and b/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/Data/masseffect.mcs differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/Data/x16Data.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/Data/x16Data.pck index 2c01acae..85ac50a8 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/Data/x16Data.pck and b/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/Data/x16Data.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/TexturePack.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/TexturePack.pck index e0576ed8..1b60faf7 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/TexturePack.pck and b/Minecraft.Client/Common/res/TitleUpdate/DLC/MassEffect/TexturePack.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Natural/Data/TexturePack.xzp b/Minecraft.Client/Common/res/TitleUpdate/DLC/Natural/Data/TexturePack.xzp index 34f7dc99..a5509dff 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Natural/Data/TexturePack.xzp and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Natural/Data/TexturePack.xzp differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Natural/Data/x32Data.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/Natural/Data/x32Data.pck index 4224184c..d211b05c 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Natural/Data/x32Data.pck and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Natural/Data/x32Data.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Plastic/Data/TexturePack.xzp b/Minecraft.Client/Common/res/TitleUpdate/DLC/Plastic/Data/TexturePack.xzp index 033840eb..3f3cceea 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Plastic/Data/TexturePack.xzp and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Plastic/Data/TexturePack.xzp differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Plastic/Data/x16Data.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/Plastic/Data/x16Data.pck index b5b5c14a..3e9f17fd 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Plastic/Data/x16Data.pck and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Plastic/Data/x16Data.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Skyrim/Data/TexturePack.xzp b/Minecraft.Client/Common/res/TitleUpdate/DLC/Skyrim/Data/TexturePack.xzp index 45c24d41..a0ad5910 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Skyrim/Data/TexturePack.xzp and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Skyrim/Data/TexturePack.xzp differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Skyrim/Data/x16Data.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/Skyrim/Data/x16Data.pck index 82a5965d..1560a2c1 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Skyrim/Data/x16Data.pck and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Skyrim/Data/x16Data.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Skyrim/TexturePack.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/Skyrim/TexturePack.pck index 2dc382a1..2f52919d 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/DLC/Skyrim/TexturePack.pck and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Skyrim/TexturePack.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Steampunk/Data/TexturePack.xzp b/Minecraft.Client/Common/res/TitleUpdate/DLC/Steampunk/Data/TexturePack.xzp new file mode 100644 index 00000000..1672acd8 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Steampunk/Data/TexturePack.xzp differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/DLC/Steampunk/Data/x32Data.pck b/Minecraft.Client/Common/res/TitleUpdate/DLC/Steampunk/Data/x32Data.pck new file mode 100644 index 00000000..795346cb Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/DLC/Steampunk/Data/x32Data.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/GameRules/Tutorial.mcs b/Minecraft.Client/Common/res/TitleUpdate/GameRules/Tutorial.mcs new file mode 100644 index 00000000..9a50985e Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/GameRules/Tutorial.mcs differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/GameRules/Tutorial.pck b/Minecraft.Client/Common/res/TitleUpdate/GameRules/Tutorial.pck index 8f44945b..e506da13 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/GameRules/Tutorial.pck and b/Minecraft.Client/Common/res/TitleUpdate/GameRules/Tutorial.pck differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/audio/1.6.4.xwb b/Minecraft.Client/Common/res/TitleUpdate/audio/1.6.4.xwb new file mode 100644 index 00000000..f2723fcc Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/audio/1.6.4.xwb differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/audio/Minecraft.xgs b/Minecraft.Client/Common/res/TitleUpdate/audio/Minecraft.xgs index 5d6c55be..c6e34ce0 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/audio/Minecraft.xgs and b/Minecraft.Client/Common/res/TitleUpdate/audio/Minecraft.xgs differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/audio/additional.xsb b/Minecraft.Client/Common/res/TitleUpdate/audio/additional.xsb index e60b3524..86c6ac69 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/audio/additional.xsb and b/Minecraft.Client/Common/res/TitleUpdate/audio/additional.xsb differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/colours.col b/Minecraft.Client/Common/res/TitleUpdate/res/colours.col index abe91ebe..ebdcf7a9 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/res/colours.col and b/Minecraft.Client/Common/res/TitleUpdate/res/colours.col differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml b/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml index f6a85645..6c45b660 100644 --- a/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml +++ b/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml @@ -218,6 +218,10 @@ if __name__=="__main__": notecolors() + + + + @@ -263,6 +267,12 @@ if __name__=="__main__": notecolors() + + + + + + @@ -280,4 +290,10 @@ if __name__=="__main__": notecolors() + + + + + + \ No newline at end of file diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/font/Default.png b/Minecraft.Client/Common/res/TitleUpdate/res/font/Default.png index 07ec8d9d..9c499811 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/res/font/Default.png and b/Minecraft.Client/Common/res/TitleUpdate/res/font/Default.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/font/Mojangles_11.png b/Minecraft.Client/Common/res/TitleUpdate/res/font/Mojangles_11.png index cfa86446..32cbd515 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/res/font/Mojangles_11.png and b/Minecraft.Client/Common/res/TitleUpdate/res/font/Mojangles_11.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/font/Mojangles_7.png b/Minecraft.Client/Common/res/TitleUpdate/res/font/Mojangles_7.png index 9de84520..7a1b3870 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/res/font/Mojangles_7.png and b/Minecraft.Client/Common/res/TitleUpdate/res/font/Mojangles_7.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/item/christmas.png b/Minecraft.Client/Common/res/TitleUpdate/res/item/christmas.png new file mode 100644 index 00000000..44591121 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/item/christmas.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/item/christmas_double.png b/Minecraft.Client/Common/res/TitleUpdate/res/item/christmas_double.png new file mode 100644 index 00000000..9e44eebb Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/item/christmas_double.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/item/lead_knot.png b/Minecraft.Client/Common/res/TitleUpdate/res/item/lead_knot.png new file mode 100644 index 00000000..ab4d3b3a Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/item/lead_knot.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/item/trapped.png b/Minecraft.Client/Common/res/TitleUpdate/res/item/trapped.png new file mode 100644 index 00000000..3aef1901 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/item/trapped.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/item/trapped_double.png b/Minecraft.Client/Common/res/TitleUpdate/res/item/trapped_double.png new file mode 100644 index 00000000..00eebe5d Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/item/trapped_double.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/items.png b/Minecraft.Client/Common/res/TitleUpdate/res/items.png index c86026a0..5456083c 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/res/items.png and b/Minecraft.Client/Common/res/TitleUpdate/res/items.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/misc/beacon_beam.png b/Minecraft.Client/Common/res/TitleUpdate/res/misc/beacon_beam.png new file mode 100644 index 00000000..67545b45 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/misc/beacon_beam.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/bat.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/bat.png new file mode 100644 index 00000000..803860ed Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/bat.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/armor/horse_armor_diamond.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/armor/horse_armor_diamond.png new file mode 100644 index 00000000..39068f25 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/armor/horse_armor_diamond.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/armor/horse_armor_gold.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/armor/horse_armor_gold.png new file mode 100644 index 00000000..4a0786de Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/armor/horse_armor_gold.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/armor/horse_armor_iron.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/armor/horse_armor_iron.png new file mode 100644 index 00000000..533b2dd9 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/armor/horse_armor_iron.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/donkey.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/donkey.png new file mode 100644 index 00000000..b94bc630 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/donkey.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_black.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_black.png new file mode 100644 index 00000000..dde716e2 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_black.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_brown.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_brown.png new file mode 100644 index 00000000..ec0158f4 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_brown.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_chestnut.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_chestnut.png new file mode 100644 index 00000000..40322ff9 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_chestnut.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_creamy.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_creamy.png new file mode 100644 index 00000000..bc42bcce Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_creamy.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_darkbrown.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_darkbrown.png new file mode 100644 index 00000000..b38e914c Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_darkbrown.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_gray.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_gray.png new file mode 100644 index 00000000..49875329 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_gray.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_blackdots.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_blackdots.png new file mode 100644 index 00000000..73206486 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_blackdots.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_white.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_white.png new file mode 100644 index 00000000..b1f0a697 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_white.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_whitedots.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_whitedots.png new file mode 100644 index 00000000..20e19546 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_whitedots.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_whitefield.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_whitefield.png new file mode 100644 index 00000000..baa2c06f Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_markings_whitefield.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_skeleton.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_skeleton.png new file mode 100644 index 00000000..29d4ed5d Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_skeleton.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_white.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_white.png new file mode 100644 index 00000000..e90e6e7f Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_white.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_zombie.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_zombie.png new file mode 100644 index 00000000..22d55faa Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/horse_zombie.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/mule.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/mule.png new file mode 100644 index 00000000..241bdaac Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/horse/mule.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/witch.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/witch.png new file mode 100644 index 00000000..24035708 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/witch.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/wither/wither.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/wither/wither.png new file mode 100644 index 00000000..0882d052 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/wither/wither.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/wither/wither_armor.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/wither/wither_armor.png new file mode 100644 index 00000000..a6b5cf5b Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/wither/wither_armor.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/wither/wither_invulnerable.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/wither/wither_invulnerable.png new file mode 100644 index 00000000..717750b4 Binary files /dev/null and b/Minecraft.Client/Common/res/TitleUpdate/res/mob/wither/wither_invulnerable.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/terrain.png b/Minecraft.Client/Common/res/TitleUpdate/res/terrain.png index d5d3751d..0246b41d 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/res/terrain.png and b/Minecraft.Client/Common/res/TitleUpdate/res/terrain.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/terrainMipMapLevel2.png b/Minecraft.Client/Common/res/TitleUpdate/res/terrainMipMapLevel2.png index 771bb2d5..02686b3e 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/res/terrainMipMapLevel2.png and b/Minecraft.Client/Common/res/TitleUpdate/res/terrainMipMapLevel2.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/terrainMipMapLevel3.png b/Minecraft.Client/Common/res/TitleUpdate/res/terrainMipMapLevel3.png index 900ba0f3..dddef615 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/res/terrainMipMapLevel3.png and b/Minecraft.Client/Common/res/TitleUpdate/res/terrainMipMapLevel3.png differ -- cgit v1.2.3