diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/BattleModeIcon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/BattleModeIcon.png new file mode 100644 index 00000000..805d2ecf Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/BattleModeIcon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Alive.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Alive.png new file mode 100644 index 00000000..964ae777 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Alive.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Alliance.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Alliance.png new file mode 100644 index 00000000..24d6352d Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Alliance.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcon.png new file mode 100644 index 00000000..9413cc45 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0000.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0000.png new file mode 100644 index 00000000..4dc4ab0b Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0000.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0001.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0001.png new file mode 100644 index 00000000..61f3ce97 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0001.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0002.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0002.png new file mode 100644 index 00000000..8dc7c07f Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0002.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0003.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0003.png new file mode 100644 index 00000000..94b4af14 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0003.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0004.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0004.png new file mode 100644 index 00000000..4967aa18 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0004.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0005.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0005.png new file mode 100644 index 00000000..5603a5ce Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0005.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0006.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0006.png new file mode 100644 index 00000000..8dfdd2df Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0006.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0007.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0007.png new file mode 100644 index 00000000..fc9a1217 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0007.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0008.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0008.png new file mode 100644 index 00000000..bf659506 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0008.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0009.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0009.png new file mode 100644 index 00000000..4aabdff9 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0009.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0010.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0010.png new file mode 100644 index 00000000..1dd2d7a5 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0010.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0011.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0011.png new file mode 100644 index 00000000..844ace92 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0011.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0012.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0012.png new file mode 100644 index 00000000..80a791e3 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0012.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0013.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0013.png new file mode 100644 index 00000000..05331ec7 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0013.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0014.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0014.png new file mode 100644 index 00000000..7b176318 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0014.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0015.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0015.png new file mode 100644 index 00000000..cfc399b8 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0015.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0016.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0016.png new file mode 100644 index 00000000..2735fc0d Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0016.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0017.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0017.png new file mode 100644 index 00000000..05f79406 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0017.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0018.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0018.png new file mode 100644 index 00000000..9460ccab Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0018.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0019.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0019.png new file mode 100644 index 00000000..df5a97f6 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0019.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0020.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0020.png new file mode 100644 index 00000000..dc806102 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0020.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0021.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0021.png new file mode 100644 index 00000000..093daf73 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0021.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0022.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0022.png new file mode 100644 index 00000000..34d41474 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0022.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0023.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0023.png new file mode 100644 index 00000000..07893906 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0023.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0024.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0024.png new file mode 100644 index 00000000..c945d042 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0024.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0025.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0025.png new file mode 100644 index 00000000..359b32c5 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0025.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0026.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0026.png new file mode 100644 index 00000000..240b822d Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0026.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0027.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0027.png new file mode 100644 index 00000000..eec94c5c Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0027.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0028.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0028.png new file mode 100644 index 00000000..6cc0a585 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0028.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0029.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0029.png new file mode 100644 index 00000000..c15b1349 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0029.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0030.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0030.png new file mode 100644 index 00000000..e59e1cba Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0030.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0031.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0031.png new file mode 100644 index 00000000..5548bed7 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0031.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0032.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0032.png new file mode 100644 index 00000000..ee352f65 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0032.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0033.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0033.png new file mode 100644 index 00000000..0edd00e4 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0033.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0034.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0034.png new file mode 100644 index 00000000..9511c641 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0034.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0035.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0035.png new file mode 100644 index 00000000..e383d5dd Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0035.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0036.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0036.png new file mode 100644 index 00000000..11fe3a67 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0036.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0037.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0037.png new file mode 100644 index 00000000..e94afbd2 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0037.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0038.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0038.png new file mode 100644 index 00000000..a51b2043 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0038.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0039.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0039.png new file mode 100644 index 00000000..b7b6834f Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0039.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0040.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0040.png new file mode 100644 index 00000000..b96a6ac7 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0040.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0041.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0041.png new file mode 100644 index 00000000..67f37887 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0041.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0042.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0042.png new file mode 100644 index 00000000..933c5007 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0042.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0043.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0043.png new file mode 100644 index 00000000..5bbe8361 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0043.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0044.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0044.png new file mode 100644 index 00000000..f6213fe9 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0044.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0045.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0045.png new file mode 100644 index 00000000..c508d047 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0045.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0046.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0046.png new file mode 100644 index 00000000..0f046dee Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0046.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0047.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0047.png new file mode 100644 index 00000000..5716387c Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0047.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0048.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0048.png new file mode 100644 index 00000000..95d70cdd Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0048.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0049.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0049.png new file mode 100644 index 00000000..2b2e1f59 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0049.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0050.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0050.png new file mode 100644 index 00000000..13e88f8f Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0050.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0051.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0051.png new file mode 100644 index 00000000..a0335d0e Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0051.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0052.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0052.png new file mode 100644 index 00000000..c14c5c5d Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0052.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0053.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0053.png new file mode 100644 index 00000000..60f5ff4c Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0053.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0054.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0054.png new file mode 100644 index 00000000..b02f1424 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0054.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0055.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0055.png new file mode 100644 index 00000000..23956cfa Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0055.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0056.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0056.png new file mode 100644 index 00000000..572de3b9 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0056.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0057.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0057.png new file mode 100644 index 00000000..fc4e0236 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0057.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0058.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0058.png new file mode 100644 index 00000000..5adaeeb4 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0058.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0059.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0059.png new file mode 100644 index 00000000..cc7e32e9 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0059.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0060.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0060.png new file mode 100644 index 00000000..ae431547 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0060.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0061.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0061.png new file mode 100644 index 00000000..c65f6f8a Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0061.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0062.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0062.png new file mode 100644 index 00000000..591838b7 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0062.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0063.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0063.png new file mode 100644 index 00000000..62755c17 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0063.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0064.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0064.png new file mode 100644 index 00000000..49617d52 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0064.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0065.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0065.png new file mode 100644 index 00000000..585878cc Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0065.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0066.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0066.png new file mode 100644 index 00000000..64968c37 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0066.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0067.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0067.png new file mode 100644 index 00000000..c3f20b58 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0067.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0068.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0068.png new file mode 100644 index 00000000..0e624924 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0068.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0069.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0069.png new file mode 100644 index 00000000..da70c72e Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0069.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0070.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0070.png new file mode 100644 index 00000000..ba04fdc9 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0070.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0071.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0071.png new file mode 100644 index 00000000..edff4af4 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0071.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0072.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0072.png new file mode 100644 index 00000000..6fc13347 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0072.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0073.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0073.png new file mode 100644 index 00000000..de54ad16 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0073.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0074.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0074.png new file mode 100644 index 00000000..9be620dc Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0074.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0075.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0075.png new file mode 100644 index 00000000..bf40c327 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0075.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0076.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0076.png new file mode 100644 index 00000000..b67def9d Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0076.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0077.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0077.png new file mode 100644 index 00000000..cbd798ac Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0077.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0078.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0078.png new file mode 100644 index 00000000..a86da5ff Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0078.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0079.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0079.png new file mode 100644 index 00000000..6151e17a Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0079.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0080.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0080.png new file mode 100644 index 00000000..ef54c760 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0080.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0081.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0081.png new file mode 100644 index 00000000..278f0452 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0081.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0082.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0082.png new file mode 100644 index 00000000..35dd6130 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0082.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0083.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0083.png new file mode 100644 index 00000000..6311b13b Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0083.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0084.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0084.png new file mode 100644 index 00000000..fd558ff0 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0084.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0085.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0085.png new file mode 100644 index 00000000..4c001399 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0085.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0086.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0086.png new file mode 100644 index 00000000..0af8e5ed Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0086.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0087.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0087.png new file mode 100644 index 00000000..3b3ffec1 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0087.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0088.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0088.png new file mode 100644 index 00000000..a533f26b Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0088.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0089.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0089.png new file mode 100644 index 00000000..816c9d66 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0089.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0090.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0090.png new file mode 100644 index 00000000..fb08ec51 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0090.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0091.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0091.png new file mode 100644 index 00000000..ed2dbab9 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0091.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0092.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0092.png new file mode 100644 index 00000000..26c7c369 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0092.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0093.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0093.png new file mode 100644 index 00000000..1fd0edb6 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0093.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0094.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0094.png new file mode 100644 index 00000000..26c7c369 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/AwardIcons_0094.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/BattleModeScreen.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/BattleModeScreen.png new file mode 100644 index 00000000..56dd599f Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/BattleModeScreen.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/BlocksDestroyedIcon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/BlocksDestroyedIcon.png new file mode 100644 index 00000000..c317d31f Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/BlocksDestroyedIcon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Dead.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Dead.png new file mode 100644 index 00000000..54f24e60 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Dead.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/DistanceTravelledIcon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/DistanceTravelledIcon.png new file mode 100644 index 00000000..de7dc633 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/DistanceTravelledIcon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/JumpsIcon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/JumpsIcon.png new file mode 100644 index 00000000..bd1e45cb Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/JumpsIcon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG02Screen.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG02Screen.png new file mode 100644 index 00000000..2d60c1ba Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG02Screen.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG02_Mode_00.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG02_Mode_00.png new file mode 100644 index 00000000..1994f58b Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG02_Mode_00.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG02_Mode_01.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG02_Mode_01.png new file mode 100644 index 00000000..ee3f1bfa Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG02_Mode_01.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG02_Mode_02.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG02_Mode_02.png new file mode 100644 index 00000000..14ef1894 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG02_Mode_02.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG03Screen.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG03Screen.png new file mode 100644 index 00000000..95aa2f53 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/MG03Screen.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Score1Icon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Score1Icon.png new file mode 100644 index 00000000..de73d975 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Score1Icon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Score2Icon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Score2Icon.png new file mode 100644 index 00000000..1a1ba7f1 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Score2Icon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Score3Icon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Score3Icon.png new file mode 100644 index 00000000..0f5e5f3f Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Score3Icon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/ScoreIcon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/ScoreIcon.png new file mode 100644 index 00000000..26bcb966 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/ScoreIcon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/SpectatorIcon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/SpectatorIcon.png new file mode 100644 index 00000000..b0492310 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/SpectatorIcon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Time1Icon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Time1Icon.png new file mode 100644 index 00000000..52d0a3e3 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Time1Icon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Time2Icon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Time2Icon.png new file mode 100644 index 00000000..f5bb4931 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Time2Icon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Time3Icon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Time3Icon.png new file mode 100644 index 00000000..35c7ccc2 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/Time3Icon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/TimeIcon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/TimeIcon.png new file mode 100644 index 00000000..b43d437e Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/TimeIcon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/VictoryCountIcon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/VictoryCountIcon.png new file mode 100644 index 00000000..7f197f1b Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/GameModeGraphics/VictoryCountIcon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/MG02icon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/MG02icon.png new file mode 100644 index 00000000..fcb3e3ad Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/MG02icon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/Graphics/MG03icon.png b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/MG03icon.png new file mode 100644 index 00000000..e70fc94d Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/Graphics/MG03icon.png differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/MainMenu1080.swf b/Minecraft.Client/Common/Media/MediaWindows64/MainMenu1080.swf index a3c55273..293e133b 100644 Binary files a/Minecraft.Client/Common/Media/MediaWindows64/MainMenu1080.swf and b/Minecraft.Client/Common/Media/MediaWindows64/MainMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/MapSelectMenu1080.swf b/Minecraft.Client/Common/Media/MediaWindows64/MapSelectMenu1080.swf new file mode 100644 index 00000000..4da9a3d1 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/MapSelectMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/MiniGamesCreateMenu1080.swf b/Minecraft.Client/Common/Media/MediaWindows64/MiniGamesCreateMenu1080.swf new file mode 100644 index 00000000..a2f8c06a Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/MiniGamesCreateMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/MiniGamesJoinMenu1080.swf b/Minecraft.Client/Common/Media/MediaWindows64/MiniGamesJoinMenu1080.swf new file mode 100644 index 00000000..1a2860b0 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/MiniGamesJoinMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/MediaWindows64/MiniGamesMenu1080.swf b/Minecraft.Client/Common/Media/MediaWindows64/MiniGamesMenu1080.swf new file mode 100644 index 00000000..71a94a01 Binary files /dev/null and b/Minecraft.Client/Common/Media/MediaWindows64/MiniGamesMenu1080.swf differ diff --git a/Minecraft.Client/Common/UI/UIEnums.h b/Minecraft.Client/Common/UI/UIEnums.h index e9973348..28013262 100644 --- a/Minecraft.Client/Common/UI/UIEnums.h +++ b/Minecraft.Client/Common/UI/UIEnums.h @@ -102,6 +102,10 @@ enum EUIScene eUIScene_FireworksMenu, eUIScene_BookMenu, eUIScene_AchievementsMenu, + eUIScene_MinigamesMenu, + eUIScene_MinigamesCreateMenu, + eUIScene_MinigamesJoinMenu, + eUIScene_MinigamesMapSelectMenu, #ifdef _XBOX // eUIScene_TransferToXboxOne, #endif diff --git a/Minecraft.Client/Common/UI/UILayer.cpp b/Minecraft.Client/Common/UI/UILayer.cpp index 9c6f1335..f1c79c18 100644 --- a/Minecraft.Client/Common/UI/UILayer.cpp +++ b/Minecraft.Client/Common/UI/UILayer.cpp @@ -4,7 +4,10 @@ #include "UIScene.h" #include "IUIScene_WritingBookMenu.h" #include "UIScene_BookAndQuillMenu.h" -#include "UIScene_AchievementsMenu.h" +#include "UIScene_MinigamesMenu.h" +#include "UIScene_MinigamesCreateMenu.h" +#include "UIScene_MinigamesJoinMenu.h" +#include "UIScene_MinigamesMapSelectMenu.h" UILayer::UILayer(UIGroup *parent) { @@ -246,9 +249,6 @@ bool UILayer::NavigateToScene(int iPad, EUIScene scene, void *initData) case eUIScene_Crafting3x3Menu: newScene = new UIScene_CraftingMenu(iPad, initData, this); break; - case eUIScene_ClassicCraftingMenu: - newScene = new UIScene_ClassicCraftingMenu(iPad, initData, this); - break; case eUIScene_TradingMenu: newScene = new UIScene_TradingMenu(iPad, initData, this); break; @@ -272,9 +272,6 @@ bool UILayer::NavigateToScene(int iPad, EUIScene scene, void *initData) case eUIScene_HelpAndOptionsMenu: newScene = new UIScene_HelpAndOptionsMenu(iPad, initData, this); break; - case eUIScene_AchievementsMenu: - newScene = new UIScene_AchievementsMenu(iPad, initData, this); - break; // Book case eUIScene_BookMenu: newScene = new UIScene_BookAndQuillMenu(iPad, initData, this); @@ -386,6 +383,22 @@ bool UILayer::NavigateToScene(int iPad, EUIScene scene, void *initData) case eUIScene_LoadCreateJoinMenu: newScene = new UIScene_LoadCreateJoinMenu(iPad, initData, this); break; + case eUIScene_MinigamesMenu: + app.DebugPrintf("[MGDBG] UILayer creating UIScene_MinigamesMenu\n"); + newScene = new UIScene_MinigamesMenu(iPad, initData, this); + break; + case eUIScene_MinigamesCreateMenu: + app.DebugPrintf("[MGDBG] UILayer creating UIScene_MinigamesCreateMenu\n"); + newScene = new UIScene_MinigamesCreateMenu(iPad, initData, this); + break; + case eUIScene_MinigamesJoinMenu: + app.DebugPrintf("[MGDBG] UILayer creating UIScene_MinigamesJoinMenu\n"); + newScene = new UIScene_MinigamesJoinMenu(iPad, initData, this); + break; + case eUIScene_MinigamesMapSelectMenu: + app.DebugPrintf("[MGDBG] UILayer creating UIScene_MinigamesMapSelectMenu\n"); + newScene = new UIScene_MinigamesMapSelectMenu(iPad, initData, this); + break; case eUIScene_LoadMenu: newScene = new UIScene_LoadMenu(iPad, initData, this); break; diff --git a/Minecraft.Client/Common/UI/UIScene_LoadCreateJoinMenu.cpp b/Minecraft.Client/Common/UI/UIScene_LoadCreateJoinMenu.cpp index b38fa9ce..741e4449 100644 --- a/Minecraft.Client/Common/UI/UIScene_LoadCreateJoinMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_LoadCreateJoinMenu.cpp @@ -50,7 +50,10 @@ #endif - +#include "UIScene_MinigamesMenu.h" +#include "UIScene_MinigamesCreateMenu.h" +#include "UIScene_MinigamesJoinMenu.h" +#include "UIScene_MinigamesMapSelectMenu.h" #ifdef _WINDOWS64 diff --git a/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp b/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp index c62dcf46..31690568 100644 --- a/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp @@ -1,2174 +1,2183 @@ -#include "stdafx.h" -#include "../../../Minecraft.World/Mth.h" -#include "../../../Minecraft.World/StringHelpers.h" -#include "../../../Minecraft.World/Random.h" -#include "../../User.h" -#include "../../MinecraftServer.h" -#include "UI.h" -#include "UIScene_MainMenu.h" -#ifdef __ORBIS__ -#include -#endif - -Random *UIScene_MainMenu::random = new Random(); - -EUIScene UIScene_MainMenu::eNavigateWhenReady = static_cast(-1); - -UIScene_MainMenu::UIScene_MainMenu(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) -{ -#ifdef __ORBIS - //m_ePatchCheckState=ePatchCheck_Idle; - m_bRunGameChosen=false; - m_bErrorDialogRunning=false; -#endif - - - // Setup all the Iggy references we need for this scene - initialiseMovie(); - - parentLayer->addComponent(iPad,eUIComponent_Panorama); - parentLayer->addComponent(iPad,eUIComponent_Logo); - - m_eAction=eAction_None; - m_bIgnorePress=false; - - - m_buttons[static_cast(eControl_PlayGame)].init(IDS_PLAY_GAME,eControl_PlayGame); - m_buttons[(int)eControl_MiniGames].init(L"Mini Games",eControl_MiniGames); - -#ifdef _XBOX_ONE - if(!ProfileManager.IsFullVersion()) m_buttons[(int)eControl_PlayGame].setLabel(IDS_PLAY_TRIAL_GAME); - app.SetReachedMainMenu(); -#endif - - m_buttons[static_cast(eControl_Leaderboards)].init(IDS_LEADERBOARDS,eControl_Leaderboards); - m_buttons[static_cast(eControl_Achievements)].init( (UIString)IDS_ACHIEVEMENTS,eControl_Achievements); - m_buttons[static_cast(eControl_HelpAndOptions)].init(IDS_HELP_AND_OPTIONS,eControl_HelpAndOptions); - if(ProfileManager.IsFullVersion()) - { - m_bTrialVersion=false; - m_buttons[static_cast(eControl_UnlockOrDLC)].init(IDS_DOWNLOADABLECONTENT,eControl_UnlockOrDLC); - } - else - { - m_bTrialVersion=true; - m_buttons[static_cast(eControl_UnlockOrDLC)].init(IDS_UNLOCK_FULL_GAME,eControl_UnlockOrDLC); - } - -#ifndef _DURANGO - m_buttons[static_cast(eControl_Exit)].init(app.GetString(IDS_EXIT_GAME),eControl_Exit); -#else - m_buttons[(int)eControl_XboxHelp].init(IDS_XBOX_HELP_APP, eControl_XboxHelp); -#endif - -#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 ); - m_bLaunchFullVersionPurchase=false; -#endif -#ifdef _DURANGO - // Allowed to not have achievements in the menu - removeControl( &m_buttons[(int)eControl_Achievements], false ); - // Not allowed to exit from a Xbox One game from the game - have to use the Home button - //removeControl( &m_buttons[(int)eControl_Exit], false ); - m_bWaitingForDLCInfo=false; -#endif - - doHorizontalResizeCheck(); - - m_splash = L""; - - wstring filename = L"splashes.txt"; - if( app.hasArchiveFile(filename) ) - { - byteArray splashesArray = app.getArchiveFile(filename); - ByteArrayInputStream bais(splashesArray); - InputStreamReader isr( &bais ); - BufferedReader br( &isr ); - - wstring line = L""; - while ( !(line = br.readLine()).empty() ) - { - line = trimString( line ); - if (line.length() > 0) - { - m_splashes.push_back(line); - } - } - - br.close(); - } - - m_bIgnorePress=false; - m_bLoadTrialOnNetworkManagerReady = false; - - // 4J Stu - Clear out any loaded game rules - app.setLevelGenerationOptions(nullptr); - - // 4J Stu - Reset the leaving game flag so that we correctly handle signouts while in the menus - g_NetworkManager.ResetLeavingGame(); - -#if TO_BE_IMPLEMENTED - // Fix for #45154 - Frontend: DLC: Content can only be downloaded from the frontend if you have not joined/exited multiplayer - XBackgroundDownloadSetMode(XBACKGROUND_DOWNLOAD_MODE_ALWAYS_ALLOW); -#endif -} - -UIScene_MainMenu::~UIScene_MainMenu() -{ - m_parentLayer->removeComponent(eUIComponent_Panorama); - m_parentLayer->removeComponent(eUIComponent_Logo); -} - -void UIScene_MainMenu::updateTooltips() -{ - int iX = -1; - int iA = -1; - if(!m_bIgnorePress) - { - iA = IDS_TOOLTIPS_SELECT; - -#ifdef _XBOX_ONE - iX = IDS_TOOLTIPS_CHOOSE_USER; -#elif defined __PSVITA__ - if(ProfileManager.IsFullVersion()) - { - iX = IDS_TOOLTIP_CHANGE_NETWORK_MODE; - } -#endif - } - ui.SetTooltips( DEFAULT_XUI_MENU_USER, iA, -1, iX); -} - -void UIScene_MainMenu::updateComponents() -{ - m_parentLayer->showComponent(m_iPad,eUIComponent_Panorama,true); - m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,true); -} - -void UIScene_MainMenu::handleGainFocus(bool navBack) -{ - UIScene::handleGainFocus(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) - { - for (int iPad = 0; iPad < MAX_LOCAL_PLAYERS; iPad++) - { - // For returning to menus after exiting a game. - if (ProfileManager.IsSignedIn(iPad) ) - { - ProfileManager.SetCurrentGameActivity(iPad, CONTEXT_PRESENCE_MENUS, false); - } - } - } - ProfileManager.SetLockedProfile(-1); - - m_bIgnorePress = false; - updateTooltips(); - -#ifdef _DURANGO - ProfileManager.ClearGameUsers(); -#endif - - if(navBack && ProfileManager.IsFullVersion()) - { - // Replace the Unlock Full Game with Downloadable Content - m_buttons[static_cast(eControl_UnlockOrDLC)].setLabel(IDS_DOWNLOADABLECONTENT); - } - -#if TO_BE_IMPLEMENTED - // Fix for #45154 - Frontend: DLC: Content can only be downloaded from the frontend if you have not joined/exited multiplayer - XBackgroundDownloadSetMode(XBACKGROUND_DOWNLOAD_MODE_ALWAYS_ALLOW); - m_Timer.SetShow(FALSE); -#endif - m_controlTimer.setVisible( false ); - - // 4J-PB - remove the "hobo humping" message legal say we can't have, and the 1080p one for Vita -#ifdef __PSVITA__ - int splashIndex = eSplashRandomStart + 2 + random->nextInt( (int)m_splashes.size() - (eSplashRandomStart + 2) ); -#else - int splashIndex = eSplashRandomStart + 1 + random->nextInt( static_cast(m_splashes.size()) - (eSplashRandomStart + 1) ); -#endif - - // Override splash text on certain dates - SYSTEMTIME LocalSysTime; - GetLocalTime( &LocalSysTime ); - if (LocalSysTime.wMonth == 11 && LocalSysTime.wDay == 9) - { - splashIndex = eSplashHappyBirthdayEx; - } - else if (LocalSysTime.wMonth == 6 && LocalSysTime.wDay == 1) - { - splashIndex = eSplashHappyBirthdayNotch; - } - else if (LocalSysTime.wMonth == 12 && LocalSysTime.wDay == 24) // the Java game shows this on Christmas Eve, so we will too - { - splashIndex = eSplashMerryXmas; - } - else if (LocalSysTime.wMonth == 1 && LocalSysTime.wDay == 1) - { - splashIndex = eSplashHappyNewYear; - } - //splashIndex = 47; // Very short string - //splashIndex = 194; // Very long string - //splashIndex = 295; // Coloured - //splashIndex = 296; // Noise - m_splash = m_splashes.at( splashIndex ); -} - -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 || (eNavigateWhenReady >= 0) ) return; - -#if defined (__ORBIS__) || defined (__PSVITA__) - // 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_OK: -#ifdef __ORBIS__ - case ACTION_MENU_TOUCHPAD_PRESS: -#endif - if(pressed) - { - ProfileManager.SetPrimaryPad(iPad); - ProfileManager.SetLockedProfile(-1); - sendInputToMovie(key, repeat, pressed, released); - } - break; -#ifdef _XBOX_ONE - case ACTION_MENU_X: - if(pressed) - { - m_bIgnorePress = true; - ProfileManager.RequestSignInUI(false, false, false, false, false, ChooseUser_SignInReturned, this, iPad); - } - break; -#endif -#ifdef __PSVITA__ - case ACTION_MENU_X: - if(pressed && ProfileManager.IsFullVersion()) - { - UINT uiIDA[2]; - uiIDA[0]=IDS__NETWORK_PSN; - uiIDA[1]=IDS_NETWORK_ADHOC; - ui.RequestErrorMessage(IDS_SELECT_NETWORK_MODE_TITLE, IDS_SELECT_NETWORK_MODE_TEXT, uiIDA, 2, XUSER_INDEX_ANY, &UIScene_MainMenu::SelectNetworkModeReturned,this); - } - break; -#endif - - case ACTION_MENU_UP: - case ACTION_MENU_DOWN: - sendInputToMovie(key, repeat, pressed, released); - break; - } -} - -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) = nullptr; -#else - int (*signInReturnedFunc) (LPVOID,const bool, const int iPad) = nullptr; -#endif - - switch(static_cast(controlId)) - { - case eControl_PlayGame: -#ifdef __ORBIS__ - { - m_bIgnorePress=true; - - //CD - Added for audio - ui.PlayUISFX(eSFX_Press); - - ProfileManager.RefreshChatAndContentRestrictions(RefreshChatAndContentRestrictionsReturned_PlayGame, this); - } -#else - m_eAction=eAction_RunGame; - //CD - Added for audio - ui.PlayUISFX(eSFX_Press); - - signInReturnedFunc = &UIScene_MainMenu::CreateLoad_SignInReturned; -#endif - break; - case eControl_MiniGames: - #ifdef __ORBIS__ - { - m_bIgnorePress=true; - - //CD - Added for audio - ui.PlayUISFX(eSFX_Press); - - ProfileManager.RefreshChatAndContentRestrictions(RefreshChatAndContentRestrictionsReturned_PlayGame, this); - } -#else - m_eAction=eAction_RunGame; - //CD - Added for audio - ui.PlayUISFX(eSFX_Press); - - signInReturnedFunc = &UIScene_MainMenu::CreateLoad_SignInReturned; -#endif - break; - case eControl_Leaderboards: - //CD - Added for audio - ui.PlayUISFX(eSFX_Press); -#ifdef __ORBIS__ - ProfileManager.RefreshChatAndContentRestrictions(RefreshChatAndContentRestrictionsReturned_Leaderboards, this); -#else - m_eAction=eAction_RunLeaderboards; - signInReturnedFunc = &UIScene_MainMenu::Leaderboards_SignInReturned; -#endif - break; - case eControl_Achievements: - //CD - Added for audio - ui.PlayUISFX(eSFX_Press); - - m_eAction=eAction_RunAchievements; - signInReturnedFunc = &UIScene_MainMenu::Achievements_SignInReturned; - break; - case eControl_HelpAndOptions: - //CD - Added for audio - ui.PlayUISFX(eSFX_Press); - - m_eAction=eAction_RunHelpAndOptions; - signInReturnedFunc = &UIScene_MainMenu::HelpAndOptions_SignInReturned; - break; - case eControl_UnlockOrDLC: - //CD - Added for audio - ui.PlayUISFX(eSFX_Press); - - m_eAction=eAction_RunUnlockOrDLC; - signInReturnedFunc = &UIScene_MainMenu::UnlockFullGame_SignInReturned; - break; - case eControl_Exit: - //CD - Added for audio - ui.PlayUISFX(eSFX_Press); - - if( ProfileManager.IsFullVersion() ) - { - UINT uiIDA[2]; - uiIDA[0]=IDS_CANCEL; - uiIDA[1]=IDS_OK; - ui.RequestErrorMessage(IDS_WINDOWS_EXIT, IDS_WARNING_ARCADE_TEXT, uiIDA, 2, XUSER_INDEX_ANY,&UIScene_MainMenu::ExitGameReturned,this); - } - else - { -#ifdef _XBOX -#ifdef _XBOX_ONE - ui.ShowPlayerDisplayname(true); -#endif - ui.NavigateToScene(primaryPad,eUIScene_TrialExitUpsell); -#endif - } - break; - -#ifdef _DURANGO - case eControl_XboxHelp: - ui.PlayUISFX(eSFX_Press); - - m_eAction=eAction_RunXboxHelp; - signInReturnedFunc = &UIScene_MainMenu::XboxHelp_SignInReturned; - break; -#endif - - default: DEBUG_BREAK(); - } - - bool confirmUser = false; - - // Note: if no sign in returned func, assume this isn't required - if (signInReturnedFunc != nullptr) - { - if(ProfileManager.IsSignedIn(primaryPad)) - { - if (confirmUser) - { - ProfileManager.RequestSignInUI(false, false, true, false, true, signInReturnedFunc, this, primaryPad); - } - else - { - RunAction(primaryPad); - } - } - else - { - // Ask user to sign in - UINT uiIDA[2]; - uiIDA[0]=IDS_CONFIRM_OK; - uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestErrorMessage(IDS_MUST_SIGN_IN_TITLE, IDS_MUST_SIGN_IN_TEXT, uiIDA, 2, primaryPad, &UIScene_MainMenu::MustSignInReturned, this); - } - } -} - -// Run current action -void UIScene_MainMenu::RunAction(int iPad) -{ - switch(m_eAction) - { - case eAction_RunGame: - RunPlayGame(iPad); - break; - case eAction_RunLeaderboards: - RunLeaderboards(iPad); - break; - case eAction_RunAchievements: - RunAchievements(iPad); - break; - case eAction_RunHelpAndOptions: - RunHelpAndOptions(iPad); - break; - case eAction_RunUnlockOrDLC: - RunUnlockOrDLC(iPad); - break; -#ifdef _DURANGO - case eAction_RunXboxHelp: - // 4J: Launch the dummy xbox help application. - WXS::User^ user = ProfileManager.GetUser(ProfileManager.GetPrimaryPad()); - Windows::Xbox::ApplicationModel::Help::Show(user); - break; -#endif - } -} - -void UIScene_MainMenu::customDraw(IggyCustomDrawCallbackRegion *region) -{ - if(wcscmp((wchar_t *)region->name,L"Splash")==0) - { - PIXBeginNamedEvent(0,"Custom draw splash"); - customDrawSplash(region); - PIXEndNamedEvent(); - } -} - -void UIScene_MainMenu::customDrawSplash(IggyCustomDrawCallbackRegion *region) -{ - Minecraft *pMinecraft = Minecraft::GetInstance(); - - // 4J Stu - Move this to the ctor when the main menu is not the first scene we navigate to - ScreenSizeCalculator ssc(pMinecraft->options, pMinecraft->width_phys, pMinecraft->height_phys); - m_fScreenWidth=static_cast(pMinecraft->width_phys); - m_fRawWidth=static_cast(ssc.rawWidth); - m_fScreenHeight=static_cast(pMinecraft->height_phys); - m_fRawHeight=static_cast(ssc.rawHeight); - - - // Setup GDraw, normal game render states and matrices - CustomDrawData *customDrawRegion = ui.setupCustomDraw(this,region); - delete customDrawRegion; - - - Font *font = pMinecraft->font; - - // build and render with the game call - glDisable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); - - glPushMatrix(); - - float width = region->x1 - region->x0; - float height = region->y1 - region->y0; - float xo = width/2; - float yo = height; - - glTranslatef(xo, yo, 0); - - glRotatef(-17, 0, 0, 1); - float sss = 1.8f - Mth::abs(Mth::sin(System::currentTimeMillis() % 1000 / 1000.0f * PI * 2) * 0.1f); - sss*=(m_fScreenWidth/m_fRawWidth); - - sss = sss * 100 / (font->width(m_splash) + 8 * 4); - glScalef(sss, sss, sss); - //drawCenteredString(font, splash, 0, -8, 0xffff00); - font->drawShadow(m_splash, 0 - (font->width(m_splash)) / 2, -8, 0xffff00); - glPopMatrix(); - - glDisable(GL_RESCALE_NORMAL); - - glEnable(GL_DEPTH_TEST); - - - // Finish GDraw and anything else that needs to be finalised - ui.endCustomDraw(region); -} - -int UIScene_MainMenu::MustSignInReturned(void *pParam, int iPad, C4JStorage::EMessageResult result) -{ - UIScene_MainMenu* pClass = static_cast(pParam); - - if(result==C4JStorage::EMessage_ResultAccept) - { - // we need to specify local game here to display local and LIVE profiles in the list - switch(pClass->m_eAction) - { - case eAction_RunGame: ProfileManager.RequestSignInUI(false, true, false, false, true, &UIScene_MainMenu::CreateLoad_SignInReturned, pClass, iPad ); break; - case eAction_RunHelpAndOptions: ProfileManager.RequestSignInUI(false, false, true, false, true, &UIScene_MainMenu::HelpAndOptions_SignInReturned, pClass, iPad ); break; - case eAction_RunLeaderboards: ProfileManager.RequestSignInUI(false, false, true, false, true, &UIScene_MainMenu::Leaderboards_SignInReturned, pClass, iPad ); break; - case eAction_RunAchievements: ProfileManager.RequestSignInUI(false, false, true, false, true, &UIScene_MainMenu::Achievements_SignInReturned, pClass, iPad ); break; - case eAction_RunUnlockOrDLC: ProfileManager.RequestSignInUI(false, false, true, false, true, &UIScene_MainMenu::UnlockFullGame_SignInReturned, pClass, iPad ); break; -#ifdef _DURANGO - case eAction_RunXboxHelp: ProfileManager.RequestSignInUI(false, false, true, false, true, &UIScene_MainMenu::XboxHelp_SignInReturned, pClass, iPad ); break; -#endif - } - } - else - { - pClass->m_bIgnorePress=false; - // unlock the profile - ProfileManager.SetLockedProfile(-1); - for(int i=0;im_eAction) - { - case eAction_RunLeaderboardsPSN: - SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_MainMenu::Leaderboards_SignInReturned, pClass); - break; - case eAction_RunGamePSN: - SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_MainMenu::CreateLoad_SignInReturned, pClass); - break; - case eAction_RunUnlockOrDLCPSN: - SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_MainMenu::UnlockFullGame_SignInReturned, pClass); - break; - } -#elif defined __PSVITA__ - switch(pClass->m_eAction) - { - case eAction_RunLeaderboardsPSN: - //CD - Must force Ad-Hoc off if they want leaderboard PSN sign-in - //Save settings change - app.SetGameSettings(0, eGameSetting_PSVita_NetworkModeAdhoc, 0); - //Force off - CGameNetworkManager::setAdhocMode(false); - //Now Sign-in - SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_MainMenu::Leaderboards_SignInReturned, pClass); - break; - case eAction_RunGamePSN: - 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 - //Save settings change - app.SetGameSettings(0, eGameSetting_PSVita_NetworkModeAdhoc, 0); - //Force off - CGameNetworkManager::setAdhocMode(false); - //Now Sign-in - SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_MainMenu::UnlockFullGame_SignInReturned, pClass); - break; - } -#else - switch(pClass->m_eAction) - { - case eAction_RunLeaderboardsPSN: - SQRNetworkManager_Orbis::AttemptPSNSignIn(&UIScene_MainMenu::Leaderboards_SignInReturned, pClass, true, iPad); - break; - case eAction_RunGamePSN: - SQRNetworkManager_Orbis::AttemptPSNSignIn(&UIScene_MainMenu::CreateLoad_SignInReturned, pClass, true, iPad); - break; - case eAction_RunUnlockOrDLCPSN: - SQRNetworkManager_Orbis::AttemptPSNSignIn(&UIScene_MainMenu::UnlockFullGame_SignInReturned, pClass, true, iPad); - break; - } - -#endif - } - else - { - if( pClass->m_eAction == eAction_RunGamePSN ) - { - if( result == C4JStorage::EMessage_Cancelled) - CreateLoad_SignInReturned(pClass, false, 0); - else - CreateLoad_SignInReturned(pClass, true, 0); - } - else - { - pClass->m_bIgnorePress=false; - } - } - - return 0; -} -#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 = static_cast(pParam); - - if(bContinue) - { - // 4J-JEV: Don't we only need to update rich-presence if the sign-in status changes. - ProfileManager.SetCurrentGameActivity(iPad, CONTEXT_PRESENCE_MENUS, false); - -#if TO_BE_IMPLEMENTED - if(app.GetTMSDLCInfoRead()) -#endif - { - ProfileManager.SetLockedProfile(ProfileManager.GetPrimaryPad()); -#ifdef _XBOX_ONE - ui.ShowPlayerDisplayname(true); -#endif - proceedToScene(iPad, eUIScene_HelpAndOptionsMenu); - } -#if TO_BE_IMPLEMENTED - else - { - // Changing to async TMS calls - app.SetTMSAction(iPad,eTMSAction_TMSPP_RetrieveFiles_HelpAndOptions); - - // block all input - pClass->m_bIgnorePress=true; - // We want to hide everything in this scene and display a timer until we get a completion for the TMS files - for(int i=0;im_Buttons[i].SetShow(FALSE); - } - - pClass->updateTooltips(); - - pClass->m_Timer.SetShow(TRUE); - } -#endif - } - else - { - pClass->m_bIgnorePress=false; - // unlock the profile - ProfileManager.SetLockedProfile(-1); - for(int i=0;im_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 = static_cast(pParam); - - if(bContinue) - { - // 4J-JEV: We only need to update rich-presence if the sign-in status changes. - ProfileManager.SetCurrentGameActivity(iPad, CONTEXT_PRESENCE_MENUS, false); - - UINT uiIDA[1] = { IDS_OK }; - - if(ProfileManager.IsGuest(ProfileManager.GetPrimaryPad())) - { - pClass->m_bIgnorePress=false; - ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); - } - else - { - ProfileManager.SetLockedProfile(ProfileManager.GetPrimaryPad()); - - - // change the minecraft player name - Minecraft::GetInstance()->user->name = convStringToWstring( ProfileManager.GetGamertag(ProfileManager.GetPrimaryPad())); - - if(ProfileManager.IsFullVersion()) - { - bool bSignedInLive = ProfileManager.IsSignedInLive(iPad); -#ifdef __PSVITA__ - if(CGameNetworkManager::usingAdhocMode()) - { - if(SQRNetworkManager_AdHoc_Vita::GetAdhocStatus()) - { - bSignedInLive = true; - } - else - { - // adhoc mode, but we didn't make the connection, turn off adhoc mode, and just go with whatever the regular online status is - CGameNetworkManager::setAdhocMode(false); - bSignedInLive = ProfileManager.IsSignedInLive(iPad); - } - } -#endif - - // Check if we're signed in to LIVE - if(bSignedInLive) - { - // 4J-PB - Need to check for installed DLC - if(!app.DLCInstallProcessCompleted()) app.StartInstallDLCProcess(iPad); - - if(ProfileManager.IsGuest(iPad)) - { - pClass->m_bIgnorePress=false; - ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); - } - else - { - // 4J Stu - Not relevant to PS3 -#ifdef _XBOX_ONE -// if(app.GetTMSDLCInfoRead() && app.GetBanListRead(iPad)) - if(app.GetBanListRead(iPad)) - { - Minecraft *pMinecraft=Minecraft::GetInstance(); - pMinecraft->user->name = convStringToWstring( ProfileManager.GetGamertag(ProfileManager.GetPrimaryPad())); - - // ensure we've applied this player's settings - app.ApplyGameSettingsChanged(iPad); - -#ifdef _XBOX_ONE - ui.ShowPlayerDisplayname(true); -#endif - proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadCreateJoinMenu); - } - else - { - app.SetTMSAction(iPad,eTMSAction_TMSPP_RetrieveFiles_RunPlayGame); - - // block all input - pClass->m_bIgnorePress=true; - // We want to hide everything in this scene and display a timer until we get a completion for the TMS files - // for(int i=0;iupdateTooltips(); - - pClass->m_controlTimer.setVisible( true ); - } -#endif -#if TO_BE_IMPLEMENTED - // check if all the TMS files are loaded - if(app.GetTMSDLCInfoRead() && app.GetTMSXUIDsFileRead() && app.GetBanListRead(iPad)) - { - if(StorageManager.SetSaveDevice(&UIScene_MainMenu::DeviceSelectReturned,pClass)==true) - { - // save device already selected - - // ensure we've applied this player's settings - app.ApplyGameSettingsChanged(ProfileManager.GetPrimaryPad()); - // check for DLC - // start timer to track DLC check finished - pClass->m_Timer.SetShow(TRUE); - XuiSetTimer(pClass->m_hObj,DLC_INSTALLED_TIMER_ID,DLC_INSTALLED_TIMER_TIME); - //app.NavigateToScene(ProfileManager.GetPrimaryPad(),eUIScene_MultiGameJoinLoad); - } - } - else - { - // Changing to async TMS calls - app.SetTMSAction(iPad,eTMSAction_TMSPP_RetrieveFiles_RunPlayGame); - - // block all input - pClass->m_bIgnorePress=true; - // We want to hide everything in this scene and display a timer until we get a completion for the TMS files - for(int i=0;im_Buttons[i].SetShow(FALSE); - } - - updateTooltips(); - - pClass->m_Timer.SetShow(TRUE); - } -#else - Minecraft *pMinecraft=Minecraft::GetInstance(); - pMinecraft->user->name = convStringToWstring( ProfileManager.GetGamertag(ProfileManager.GetPrimaryPad())); - - // ensure we've applied this player's settings - app.ApplyGameSettingsChanged(iPad); - -#ifdef _XBOX_ONE - ui.ShowPlayerDisplayname(true); -#endif - proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadCreateJoinMenu); -#endif - } - } - else - { -#if TO_BE_IMPLEMENTED - // offline - ProfileManager.DisplayOfflineProfile(&CScene_Main::CreateLoad_OfflineProfileReturned,pClass, ProfileManager.GetPrimaryPad() ); -#else - app.DebugPrintf("Offline Profile returned not implemented\n"); -#ifdef _XBOX_ONE - ui.ShowPlayerDisplayname(true); -#endif - proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadCreateJoinMenu); -#endif - } - } - else - { - // 4J-PB - if this is the trial game, we can't have any networking - // Can't apply the player's settings here - they haven't come back from the QuerySignInStatud call above yet. - // Need to let them action in the main loop when they come in - // ensure we've applied this player's settings - //app.ApplyGameSettingsChanged(iPad); - -#if defined(__PS3__) || defined(__ORBIS__) || defined( __PSVITA__) - // ensure we've applied this player's settings - we do have them on PS3 - app.ApplyGameSettingsChanged(iPad); -#endif - -#ifdef __ORBIS__ - if(!g_NetworkManager.IsReadyToPlayOrIdle()) - { - pClass->m_bLoadTrialOnNetworkManagerReady = true; - ui.NavigateToScene(iPad, eUIScene_Timer); - } - else -#endif - { - // go straight in to the trial level - LoadTrial(); - } - } - } - } - else - { - pClass->m_bIgnorePress=false; - - // unlock the profile - ProfileManager.SetLockedProfile(-1); - for(int i=0;i(pParam); - - if(bContinue) - { - // 4J-JEV: We only need to update rich-presence if the sign-in status changes. - ProfileManager.SetCurrentGameActivity(iPad, CONTEXT_PRESENCE_MENUS, false); - - UINT uiIDA[1] = { IDS_OK }; - - // guests can't look at leaderboards - if(ProfileManager.IsGuest(ProfileManager.GetPrimaryPad())) - { - pClass->m_bIgnorePress=false; - ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); - } - else if(!ProfileManager.IsSignedInLive(ProfileManager.GetPrimaryPad())) - { - pClass->m_bIgnorePress=false; - ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1); - } - else - { - bool bContentRestricted=false; -#if defined(__PS3__) || defined(__PSVITA__) - ProfileManager.GetChatAndContentRestrictions(iPad,true,nullptr,&bContentRestricted,nullptr); -#endif - if(bContentRestricted) - { - pClass->m_bIgnorePress=false; -#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.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); -#endif - } - else - { - ProfileManager.SetLockedProfile(ProfileManager.GetPrimaryPad()); -#ifdef _XBOX_ONE - ui.ShowPlayerDisplayname(true); -#endif - proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LeaderboardsMenu); - } - } - } - else - { - pClass->m_bIgnorePress=false; - // unlock the profile - ProfileManager.SetLockedProfile(-1); - for(int i=0;i(pParam); - - if (bContinue) - { - pClass->m_bIgnorePress=false; - // 4J-JEV: We only need to update rich-presence if the sign-in status changes. - ProfileManager.SetCurrentGameActivity(iPad, CONTEXT_PRESENCE_MENUS, false); - - XShowAchievementsUI( ProfileManager.GetPrimaryPad() ); - } - else - { - pClass->m_bIgnorePress=false; - // unlock the profile - ProfileManager.SetLockedProfile(-1); - for(int i=0;i(pParam); - - if (bContinue) - { - // 4J-JEV: We only need to update rich-presence if the sign-in status changes. - ProfileManager.SetCurrentGameActivity(iPad, CONTEXT_PRESENCE_MENUS, false); - - pClass->RunUnlockOrDLC(iPad); - } - else - { - pClass->m_bIgnorePress=false; - // unlock the profile - ProfileManager.SetLockedProfile(-1); - for(int i=0;im_errorCode = ProfileManager.getNPAvailability(ProfileManager.GetPrimaryPad()); - - bool bPatchAvailable; - switch(pClass->m_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) - { - pClass->m_eAction=eAction_RunGame; - signInReturnedFunc = &UIScene_MainMenu::CreateLoad_SignInReturned; - } - else - { - pClass->m_bRunGameChosen=true; - pClass->m_bErrorDialogRunning=true; - int32_t ret=sceErrorDialogInitialize(); - 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 ); - } - return; - } - -// UINT uiIDA[1]; -// uiIDA[0]=IDS_OK; -// ui.RequestMessageBox(IDS_PATCH_AVAILABLE_TITLE, IDS_PATCH_AVAILABLE_TEXT, uiIDA, 1, XUSER_INDEX_ANY,nullptr,pClass); - } - - // Check if PSN is unavailable because of age restriction - if (pClass->m_errorCode == SCE_NP_ERROR_AGE_RESTRICTION) - { - UINT uiIDA[1]; - uiIDA[0]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::PlayOfflineReturned, pClass); - - return; - } - - bool confirmUser = false; - - // Note: if no sign in returned func, assume this isn't required - if (signInReturnedFunc != nullptr) - { - if(ProfileManager.IsSignedIn(primaryPad)) - { - if (confirmUser) - { - ProfileManager.RequestSignInUI(false, false, true, false, true, signInReturnedFunc, pClass, primaryPad); - } - else - { - pClass->RunAction(primaryPad); - } - } - else - { - // Ask user to sign in - UINT uiIDA[2]; - uiIDA[0]=IDS_CONFIRM_OK; - uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestErrorMessage(IDS_MUST_SIGN_IN_TITLE, IDS_MUST_SIGN_IN_TEXT, uiIDA, 2, primaryPad, &UIScene_MainMenu::MustSignInReturned, pClass); - } - } -} - -void UIScene_MainMenu::RefreshChatAndContentRestrictionsReturned_Leaderboards(void *pParam) -{ - int primaryPad = ProfileManager.GetPrimaryPad(); - - UIScene_MainMenu* pClass = (UIScene_MainMenu*)pParam; - - int (*signInReturnedFunc) (LPVOID,const bool, const int iPad) = nullptr; - - // 4J-PB - Check if there is a patch for the game - pClass->m_errorCode = ProfileManager.getNPAvailability(ProfileManager.GetPrimaryPad()); - - bool bPatchAvailable; - switch(pClass->m_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) - { - pClass->m_eAction=eAction_RunLeaderboards; - signInReturnedFunc = &UIScene_MainMenu::Leaderboards_SignInReturned; - } - else - { - int32_t ret=sceErrorDialogInitialize(); - pClass->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 ); - } - } - -// UINT uiIDA[1]; -// uiIDA[0]=IDS_OK; -// ui.RequestMessageBox(IDS_PATCH_AVAILABLE_TITLE, IDS_PATCH_AVAILABLE_TEXT, uiIDA, 1, XUSER_INDEX_ANY,nullptr,pClass); - } - - bool confirmUser = false; - - // Update error code - pClass->m_errorCode = ProfileManager.getNPAvailability(ProfileManager.GetPrimaryPad()); - - // Check if PSN is unavailable because of age restriction - if (pClass->m_errorCode == SCE_NP_ERROR_AGE_RESTRICTION) - { - UINT uiIDA[1]; - uiIDA[0] = IDS_CONFIRM_OK; - ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(), nullptr, pClass); - - return; - } - - // Note: if no sign in returned func, assume this isn't required - if (signInReturnedFunc != nullptr) - { - if(ProfileManager.IsSignedIn(primaryPad)) - { - if (confirmUser) - { - ProfileManager.RequestSignInUI(false, false, true, false, true, signInReturnedFunc, pClass, primaryPad); - } - else - { - pClass->RunAction(primaryPad); - } - } - else - { - // Ask user to sign in - UINT uiIDA[2]; - uiIDA[0]=IDS_CONFIRM_OK; - uiIDA[1]=IDS_CONFIRM_CANCEL; - ui.RequestErrorMessage(IDS_MUST_SIGN_IN_TITLE, IDS_MUST_SIGN_IN_TEXT, uiIDA, 2, primaryPad, &UIScene_MainMenu::MustSignInReturned, pClass); - } - } -} - -int UIScene_MainMenu::PlayOfflineReturned(void *pParam, int iPad, C4JStorage::EMessageResult result) -{ - UIScene_MainMenu* pClass = (UIScene_MainMenu*)pParam; - - if(result==C4JStorage::EMessage_ResultAccept) - { - if (pClass->m_eAction == eAction_RunGame) - { - CreateLoad_SignInReturned(pClass, true, 0); - } - else - { - pClass->m_bIgnorePress=false; - } - } - else - { - pClass->m_bIgnorePress=false; - } - - return 0; -} -#endif - -void UIScene_MainMenu::RunPlayGame(int iPad) -{ - Minecraft *pMinecraft=Minecraft::GetInstance(); - - // clear the remembered signed in users so their profiles get read again - app.ClearSignInChangeUsersMask(); - - app.ReleaseSaveThumbnail(); - - if(ProfileManager.IsGuest(iPad)) - { - UINT uiIDA[1]; - uiIDA[0]=IDS_OK; - - m_bIgnorePress=false; - ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); - } - else - { - ProfileManager.SetLockedProfile(iPad); - - // If the player was signed in before selecting play, we'll not have read the profile yet, so query the sign-in status to get this to happen - ProfileManager.QuerySigninStatus(); - - // 4J-PB - Need to check for installed DLC - if(!app.DLCInstallProcessCompleted()) app.StartInstallDLCProcess(iPad); - - if(ProfileManager.IsFullVersion()) - { - // are we offline? - bool bSignedInLive = ProfileManager.IsSignedInLive(iPad); -#ifdef __PSVITA__ - if(app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_PSVita_NetworkModeAdhoc) == true) - { - CGameNetworkManager::setAdhocMode(true); - bSignedInLive = SQRNetworkManager_AdHoc_Vita::GetAdhocStatus(); - app.DebugPrintf("Adhoc mode signed in : %s\n", bSignedInLive ? "true" : "false"); - } - else - { - CGameNetworkManager::setAdhocMode(false); - app.DebugPrintf("PSN mode signed in : %s\n", bSignedInLive ? "true" : "false"); - } - -#endif //__PSVITA__ - - if(!bSignedInLive) - { -#if defined(__PS3__) || defined __PSVITA__ - // enable input again - m_bIgnorePress=false; - - // Not sure why 360 doesn't need this, but leaving as __PS3__ only for now until we see that it does. Without this, on a PS3 offline game, the primary player just gets the default Player1234 type name - pMinecraft->user->name = convStringToWstring( ProfileManager.GetGamertag(ProfileManager.GetPrimaryPad())); - - m_eAction=eAction_RunGamePSN; - // get them to sign in to online - UINT uiIDA[2]; - uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; - uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; - -#ifdef __PSVITA__ - if(CGameNetworkManager::usingAdhocMode()) - { - uiIDA[0]=IDS_NETWORK_ADHOC; - // this should be "Connect to adhoc network" - ui.RequestErrorMessage(IDS_PRO_NOTADHOCONLINE_TITLE, IDS_PRO_NOTADHOCONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_MainMenu::MustSignInReturnedPSN,this); - } - else - { - /* 4J-PB - Add this after release - // Determine why they're not "signed in live" - if (ProfileManager.IsSignedInPSN(iPad)) - { - m_eAction=eAction_RunGame; - // Signed in to PSN but not connected (no internet access) - - 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()); - } - else - { - m_eAction=eAction_RunGamePSN; - // Not signed in to PSN - ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPad, &UIScene_MainMenu::MustSignInReturnedPSN, this, app.GetStringTable()); - return; - } */ - ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_MainMenu::MustSignInReturnedPSN,this); - - } -#else - - ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPad, &UIScene_MainMenu::MustSignInReturnedPSN, this); -#endif - -#elif defined __ORBIS__ - - // Determine why they're not "signed in live" - if (ProfileManager.isSignedInPSN(iPad)) - { - m_eAction=eAction_RunGame; - // Signed in to PSN but not connected (no internet access) - assert(!ProfileManager.isConnectedToPSN(iPad)); - - UINT uiIDA[1]; - uiIDA[0] = IDS_PRO_NOTONLINE_DECLINE; - ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad, UIScene_MainMenu::PlayOfflineReturned, this); - } - else - { - m_eAction=eAction_RunGamePSN; - // Not signed in to PSN - UINT uiIDA[2]; - uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; - uiIDA[1] = IDS_PRO_NOTONLINE_DECLINE; - ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPad, &UIScene_MainMenu::MustSignInReturnedPSN, this); - return; - } -#else - ProfileManager.SetLockedProfile(iPad); -#ifdef _XBOX_ONE - ui.ShowPlayerDisplayname(true); -#endif - proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadCreateJoinMenu); -#endif - } - else - { -#ifdef _XBOX_ONE - if(!app.GetBanListRead(iPad)) - { - app.SetTMSAction(iPad,eTMSAction_TMSPP_RetrieveFiles_RunPlayGame); - - // block all input - m_bIgnorePress=true; - // We want to hide everything in this scene and display a timer until we get a completion for the TMS files -// for(int i=0;iuser->name = convStringToWstring( ProfileManager.GetGamertag(ProfileManager.GetPrimaryPad())); - // save device already selected - - // ensure we've applied this player's settings - app.ApplyGameSettingsChanged(iPad); - // check for DLC - // start timer to track DLC check finished - m_Timer.SetShow(TRUE); - XuiSetTimer(m_hObj,DLC_INSTALLED_TIMER_ID,DLC_INSTALLED_TIMER_TIME); - //app.NavigateToScene(iPad,eUIScene_MultiGameJoinLoad); - } - } - else - { - // Changing to async TMS calls - app.SetTMSAction(iPad,eTMSAction_TMSPP_RetrieveFiles_RunPlayGame); - - // block all input - m_bIgnorePress=true; - // We want to hide everything in this scene and display a timer until we get a completion for the TMS files - for(int i=0;iuser->name = convStringToWstring( ProfileManager.GetGamertag(ProfileManager.GetPrimaryPad())); - - // ensure we've applied this player's settings - app.ApplyGameSettingsChanged(iPad); - -#ifdef _XBOX_ONE - ui.ShowPlayerDisplayname(true); -#endif - proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadCreateJoinMenu); -#endif - } - } - else - { - // 4J-PB - if this is the trial game, we can't have any networking - // go straight in to the trial level - // change the minecraft player name - Minecraft::GetInstance()->user->name = convStringToWstring( ProfileManager.GetGamertag(ProfileManager.GetPrimaryPad())); - - // Can't apply the player's settings here - they haven't come back from the QuerySignInStatud call above yet. - // Need to let them action in the main loop when they come in - // ensure we've applied this player's settings - //app.ApplyGameSettingsChanged(iPad); - -#if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) - // ensure we've applied this player's settings - we do have them on PS3 - app.ApplyGameSettingsChanged(iPad); -#endif - -#ifdef __ORBIS__ - if(!g_NetworkManager.IsReadyToPlayOrIdle()) - { - m_bLoadTrialOnNetworkManagerReady = true; - ui.NavigateToScene(iPad, eUIScene_Timer); - } - else -#endif - { - LoadTrial(); - } - } - } -} - -void UIScene_MainMenu::RunLeaderboards(int iPad) -{ - UINT uiIDA[1]; - uiIDA[0]=IDS_OK; - - // guests can't look at leaderboards - if(ProfileManager.IsGuest(iPad)) - { - ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); - } - else if(!ProfileManager.IsSignedInLive(iPad)) - { -#if defined __PS3__ || defined __PSVITA__ - m_eAction=eAction_RunLeaderboardsPSN; - // get them to sign in to online - UINT uiIDA[1]; - uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; - 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__ - m_eAction=eAction_RunLeaderboardsPSN; - // Determine why they're not "signed in live" - if (ProfileManager.IsSignedInPSN(iPad)) - { - // Signed in to PSN but not connected (no internet access) - UINT uiIDA[1]; - uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; - ui.RequestMessageBox(IDS_PRO_CURRENTLY_NOT_ONLINE_TITLE, IDS_PRO_PSNOFFLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::MustSignInReturnedPSN, this, 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(), &UIScene_MainMenu::MustSignInReturnedPSN, this, app.GetStringTable()); - return; - }*/ -#elif defined __ORBIS__ - m_eAction=eAction_RunLeaderboardsPSN; - // Determine why they're not "signed in live" - if (ProfileManager.isSignedInPSN(iPad)) - { - // Signed in to PSN but not connected (no internet access) - assert(!ProfileManager.isConnectedToPSN(iPad)); - - UINT uiIDA[1]; - uiIDA[0] = IDS_OK; - 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.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::MustSignInReturnedPSN, this); - return; - } -#else - ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1); -#endif - } - else - { - // we're supposed to check for parental control restrictions before showing leaderboards - // The title enforces the user's NP parental control setting for age-based content - //restriction in network communications. - // If age restrictions are in place and the user's age does not meet - // the age restriction of the title's online service content rating (CERO, ESRB, PEGI, etc.), then the title must - //display a message such as the following and disallow online service for this user. - - bool bContentRestricted=false; -#if defined(__PS3__) || defined(__PSVITA__) - ProfileManager.GetChatAndContentRestrictions(iPad,true,nullptr,&bContentRestricted,nullptr); -#endif - if(bContentRestricted) - { -#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.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),nullptr,this); -#endif - } - else - { - ProfileManager.SetLockedProfile(iPad); - // If the player was signed in before selecting play, we'll not have read the profile yet, so query the sign-in status to get this to happen - ProfileManager.QuerySigninStatus(); - -#ifdef _XBOX_ONE - ui.ShowPlayerDisplayname(true); -#endif - proceedToScene(iPad, eUIScene_LeaderboardsMenu); - } - } -} -void UIScene_MainMenu::RunUnlockOrDLC(int iPad) -{ - UINT uiIDA[1]; - uiIDA[0]=IDS_OK; - - // Check if this means downloadable content - if(ProfileManager.IsFullVersion()) - { -#ifdef __ORBIS__ - // 4J-PB - Check if there is a patch for the game - m_errorCode = ProfileManager.getNPAvailability(ProfileManager.GetPrimaryPad()); - - bool bPatchAvailable; - switch(m_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) - { - m_bIgnorePress=false; - - 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 ); - } - } - -// UINT uiIDA[1]; -// uiIDA[0]=IDS_OK; -// ui.RequestMessageBox(IDS_PATCH_AVAILABLE_TITLE, IDS_PATCH_AVAILABLE_TEXT, uiIDA, 1, XUSER_INDEX_ANY,nullptr,this); - return; - } - - // Check if PSN is unavailable because of age restriction - if (m_errorCode == SCE_NP_ERROR_AGE_RESTRICTION) - { - m_bIgnorePress=false; - UINT uiIDA[1]; - uiIDA[0] = IDS_OK; - ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(), nullptr, this); - - return; - } -#endif - // downloadable content - if(ProfileManager.IsSignedInLive(iPad)) - { - if(ProfileManager.IsGuest(iPad)) - { - m_bIgnorePress=false; - ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); - } - else - { - - // If the player was signed in before selecting play, we'll not have read the profile yet, so query the sign-in status to get this to happen - ProfileManager.QuerySigninStatus(); - -#if defined _XBOX_ONE - if(app.GetTMSDLCInfoRead()) -#endif - { - bool bContentRestricted=false; -#if defined(__PS3__) || defined(__PSVITA__) - ProfileManager.GetChatAndContentRestrictions(iPad,true,nullptr,&bContentRestricted,nullptr); -#endif - if(bContentRestricted) - { - m_bIgnorePress=false; -#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.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),nullptr,this); -#endif - } - else - { - ProfileManager.SetLockedProfile(iPad); -#ifdef _XBOX_ONE - ui.ShowPlayerDisplayname(true); -#endif - proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_DLCMainMenu); - } - } -#if defined _XBOX_ONE - else - { - // Changing to async TMS calls - app.SetTMSAction(iPad,eTMSAction_TMSPP_RetrieveFiles_DLCMain); - - // block all input - m_bIgnorePress=true; - // We want to hide everything in this scene and display a timer until we get a completion for the TMS files -// for(int i=0;iRecordUpsellPresented(iPad, eSen_UpsellID_Full_Version_Of_Game, app.m_dwOfferID); - ProfileManager.DisplayFullVersionPurchase(false,iPad,eSen_UpsellID_Full_Version_Of_Game); -#endif - } - } -} - -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 = static_cast(-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) - { - int iCommerceState=app.GetCommerceState(); - // 4J-PB - if there's a commerce error - store down, player can't access store - let the DisplayFullVersionPurchase show the error - if((iCommerceState==CConsoleMinecraftApp::eCommerce_State_Online) || (iCommerceState==CConsoleMinecraftApp::eCommerce_State_Error)) - { - m_bLaunchFullVersionPurchase=false; - m_bIgnorePress=false; - updateTooltips(); - - // 4J-PB - need to check this user can access the store - bool bContentRestricted=false; - ProfileManager.GetChatAndContentRestrictions(ProfileManager.GetPrimaryPad(),true,nullptr,&bContentRestricted,nullptr); - if(bContentRestricted) - { - UINT uiIDA[1]; - uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); - } - else - { - TelemetryManager->RecordUpsellPresented(ProfileManager.GetPrimaryPad(), eSen_UpsellID_Full_Version_Of_Game, app.m_dwOfferID); - ProfileManager.DisplayFullVersionPurchase(false,ProfileManager.GetPrimaryPad(),eSen_UpsellID_Full_Version_Of_Game); - } - } - } - - // 4J-PB - check for a trial version changing to a full version - if(m_bTrialVersion) - { - if(ProfileManager.IsFullVersion()) - { - m_bTrialVersion=false; - m_buttons[(int)eControl_UnlockOrDLC].init(app.GetString(IDS_DOWNLOADABLECONTENT),eControl_UnlockOrDLC); - } - } -#endif - -#if defined _XBOX_ONE - if(m_bWaitingForDLCInfo) - { - if(app.GetTMSDLCInfoRead()) - { - m_bWaitingForDLCInfo=false; - ProfileManager.SetLockedProfile(m_iPad); - proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_DLCMainMenu); - } - } - - if(g_NetworkManager.ShouldMessageForFullSession()) - { - UINT uiIDA[1]; - uiIDA[0]=IDS_CONFIRM_OK; - ui.RequestErrorMessage( IDS_CONNECTION_FAILED, IDS_IN_PARTY_SESSION_FULL, uiIDA,1,ProfileManager.GetPrimaryPad()); - } -#endif - -#ifdef __ORBIS__ - - // process the error dialog (for a patch being available) - // SQRNetworkManager_Orbis::tickErrorDialog also runs the error dialog, so wrap this so this doesn't terminate a signin dialog - if(m_bErrorDialogRunning) - { - SceErrorDialogStatus stat = sceErrorDialogUpdateStatus(); - if( stat == SCE_ERROR_DIALOG_STATUS_FINISHED ) - { - sceErrorDialogTerminate(); - // if m_bRunGameChosen is true, we're here after selecting play game, and we should let the user continue with an offline game - if(m_bRunGameChosen) - { - m_bRunGameChosen=false; - m_eAction = eAction_RunGame; - - // give the option of continuing offline - UINT uiIDA[1]; - uiIDA[0]=IDS_PRO_NOTONLINE_DECLINE; - ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION_PATCH_AVAILABLE, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::PlayOfflineReturned, this); - - } - m_bErrorDialogRunning=false; - } - } - - if(m_bLoadTrialOnNetworkManagerReady && g_NetworkManager.IsReadyToPlayOrIdle()) - { - m_bLoadTrialOnNetworkManagerReady = false; - LoadTrial(); - } - -#endif -} - -void UIScene_MainMenu::RunAchievements(int iPad) -{ -#if TO_BE_IMPLEMENTED - UINT uiIDA[1]; - uiIDA[0]=IDS_OK; - - // guests can't look at achievements - if(ProfileManager.IsGuest(iPad)) - { - ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); - } - else - { - XShowAchievementsUI( iPad ); - } -#endif - ui.NavigateToScene(iPad, eUIScene_AchievementsMenu); -} - -void UIScene_MainMenu::RunHelpAndOptions(int iPad) -{ - if(ProfileManager.IsGuest(iPad)) - { - UINT uiIDA[1]; - uiIDA[0]=IDS_OK; - ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); - } - else - { - // If the player was signed in before selecting play, we'll not have read the profile yet, so query the sign-in status to get this to happen - ProfileManager.QuerySigninStatus(); - -#if TO_BE_IMPLEMENTED - // 4J-PB - You can be offline and still can go into help and options - if(app.GetTMSDLCInfoRead() || !ProfileManager.IsSignedInLive(iPad)) -#endif - { - ProfileManager.SetLockedProfile(iPad); -#ifdef _XBOX_ONE - ui.ShowPlayerDisplayname(true); -#endif - proceedToScene(iPad, eUIScene_HelpAndOptionsMenu); - } -#if TO_BE_IMPLEMENTED - else - { - // Changing to async TMS calls - app.SetTMSAction(iPad,eTMSAction_TMSPP_RetrieveFiles_HelpAndOptions); - - // block all input - m_bIgnorePress=true; - // We want to hide everything in this scene and display a timer until we get a completion for the TMS files - for(int i=0;iseed = 0; - param->saveData = nullptr; - param->settings = app.GetGameHostOption( eGameHostOption_Tutorial ) | app.GetGameHostOption(eGameHostOption_DisableSaving); - - vector *generators = app.getLevelGenerators(); - param->levelGen = generators->at(0); - - LoadingInputParams *loadingParams = new LoadingInputParams(); - loadingParams->func = &CGameNetworkManager::RunNetworkGameThreadProc; - loadingParams->lpParam = static_cast(param); - - UIFullscreenProgressCompletionData *completionData = new UIFullscreenProgressCompletionData(); - completionData->bShowBackground=TRUE; - completionData->bShowLogo=TRUE; - completionData->type = e_ProgressCompletion_CloseAllPlayersUIScenes; - completionData->iPad = ProfileManager.GetPrimaryPad(); - loadingParams->completionData = completionData; - - ui.ShowTrialTimer(true); - -#ifdef _XBOX_ONE - ui.ShowPlayerDisplayname(true); -#endif - ui.NavigateToScene(ProfileManager.GetPrimaryPad(),eUIScene_FullscreenProgress, loadingParams); -} - -void UIScene_MainMenu::handleUnlockFullVersion() -{ - m_buttons[static_cast(eControl_UnlockOrDLC)].setLabel(IDS_DOWNLOADABLECONTENT,true); -} - - -#ifdef __PSVITA__ -int UIScene_MainMenu::SelectNetworkModeReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) -{ - UIScene_MainMenu* pClass = (UIScene_MainMenu*)pParam; - - if(result==C4JStorage::EMessage_ResultAccept) - { - app.DebugPrintf("Setting network mode to PSN\n"); - app.SetGameSettings(0, eGameSetting_PSVita_NetworkModeAdhoc, 0); - } - else if(result==C4JStorage::EMessage_ResultDecline) - { - app.DebugPrintf("Setting network mode to Adhoc\n"); - app.SetGameSettings(0, eGameSetting_PSVita_NetworkModeAdhoc, 1); - } - pClass->updateTooltips(); - return 0; -} -#endif //__PSVITA__ +#include "stdafx.h" +#include "../../../Minecraft.World/Mth.h" +#include "../../../Minecraft.World/StringHelpers.h" +#include "../../../Minecraft.World/Random.h" +#include "../../User.h" +#include "../../MinecraftServer.h" +#include "UI.h" +#include "UIScene_MainMenu.h" +#ifdef __ORBIS__ +#include +#endif + +Random *UIScene_MainMenu::random = new Random(); + +EUIScene UIScene_MainMenu::eNavigateWhenReady = static_cast(-1); + +UIScene_MainMenu::UIScene_MainMenu(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) +{ +#ifdef __ORBIS + //m_ePatchCheckState=ePatchCheck_Idle; + m_bRunGameChosen=false; + m_bErrorDialogRunning=false; +#endif + + + // Setup all the Iggy references we need for this scene + initialiseMovie(); + + parentLayer->addComponent(iPad,eUIComponent_Panorama); + parentLayer->addComponent(iPad,eUIComponent_Logo); + + m_eAction=eAction_None; + m_bIgnorePress=false; + + + m_buttons[static_cast(eControl_PlayGame)].init(IDS_PLAY_GAME,eControl_PlayGame); +#ifdef _XBOX_ONE + if(!ProfileManager.IsFullVersion()) m_buttons[(int)eControl_PlayGame].setLabel(IDS_PLAY_TRIAL_GAME); + app.SetReachedMainMenu(); +#endif + + m_buttons[(int)eControl_MiniGames].init(IDS_MINIGAMES,eControl_MiniGames); + m_buttons[static_cast(eControl_Leaderboards)].init(IDS_LEADERBOARDS,eControl_Leaderboards); + m_buttons[static_cast(eControl_Achievements)].init((UIString)IDS_ACHIEVEMENTS,eControl_Achievements); + m_buttons[static_cast(eControl_HelpAndOptions)].init(IDS_HELP_AND_OPTIONS,eControl_HelpAndOptions); + if(ProfileManager.IsFullVersion()) + { + m_bTrialVersion=false; + m_buttons[static_cast(eControl_UnlockOrDLC)].init(IDS_DOWNLOADABLECONTENT,eControl_UnlockOrDLC); + } + else + { + m_bTrialVersion=true; + m_buttons[static_cast(eControl_UnlockOrDLC)].init(IDS_UNLOCK_FULL_GAME,eControl_UnlockOrDLC); + } + +#ifndef _DURANGO + m_buttons[static_cast(eControl_Exit)].init(app.GetString(IDS_EXIT_GAME),eControl_Exit); +#else + m_buttons[(int)eControl_XboxHelp].init(IDS_XBOX_HELP_APP, eControl_XboxHelp); +#endif + +#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 ); + m_bLaunchFullVersionPurchase=false; +#endif +#ifdef _DURANGO + // Allowed to not have achievements in the menu + removeControl( &m_buttons[(int)eControl_Achievements], false ); + // Not allowed to exit from a Xbox One game from the game - have to use the Home button + //removeControl( &m_buttons[(int)eControl_Exit], false ); + m_bWaitingForDLCInfo=false; +#endif + + doHorizontalResizeCheck(); + + m_splash = L""; + + wstring filename = L"splashes.txt"; + if( app.hasArchiveFile(filename) ) + { + byteArray splashesArray = app.getArchiveFile(filename); + ByteArrayInputStream bais(splashesArray); + InputStreamReader isr( &bais ); + BufferedReader br( &isr ); + + wstring line = L""; + while ( !(line = br.readLine()).empty() ) + { + line = trimString( line ); + if (line.length() > 0) + { + m_splashes.push_back(line); + } + } + + br.close(); + } + + m_bIgnorePress=false; + m_bLoadTrialOnNetworkManagerReady = false; + + // 4J Stu - Clear out any loaded game rules + app.setLevelGenerationOptions(nullptr); + + // 4J Stu - Reset the leaving game flag so that we correctly handle signouts while in the menus + g_NetworkManager.ResetLeavingGame(); + +#if TO_BE_IMPLEMENTED + // Fix for #45154 - Frontend: DLC: Content can only be downloaded from the frontend if you have not joined/exited multiplayer + XBackgroundDownloadSetMode(XBACKGROUND_DOWNLOAD_MODE_ALWAYS_ALLOW); +#endif +} + +UIScene_MainMenu::~UIScene_MainMenu() +{ + m_parentLayer->removeComponent(eUIComponent_Panorama); + m_parentLayer->removeComponent(eUIComponent_Logo); +} + +void UIScene_MainMenu::updateTooltips() +{ + int iX = -1; + int iA = -1; + if(!m_bIgnorePress) + { + iA = IDS_TOOLTIPS_SELECT; + +#ifdef _XBOX_ONE + iX = IDS_TOOLTIPS_CHOOSE_USER; +#elif defined __PSVITA__ + if(ProfileManager.IsFullVersion()) + { + iX = IDS_TOOLTIP_CHANGE_NETWORK_MODE; + } +#endif + } + ui.SetTooltips( DEFAULT_XUI_MENU_USER, iA, -1, iX); +} + +void UIScene_MainMenu::updateComponents() +{ + m_parentLayer->showComponent(m_iPad,eUIComponent_Panorama,true); + m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,true); +} + +void UIScene_MainMenu::handleGainFocus(bool navBack) +{ + UIScene::handleGainFocus(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) + { + for (int iPad = 0; iPad < MAX_LOCAL_PLAYERS; iPad++) + { + // For returning to menus after exiting a game. + if (ProfileManager.IsSignedIn(iPad) ) + { + ProfileManager.SetCurrentGameActivity(iPad, CONTEXT_PRESENCE_MENUS, false); + } + } + } + ProfileManager.SetLockedProfile(-1); + + m_bIgnorePress = false; + updateTooltips(); + +#ifdef _DURANGO + ProfileManager.ClearGameUsers(); +#endif + + if(navBack && ProfileManager.IsFullVersion()) + { + if(ProfileManager.IsFullVersion()) + { + m_buttons[static_cast(eControl_UnlockOrDLC)].setLabel(app.GetString(IDS_DOWNLOADABLECONTENT)); + } + else + { + m_buttons[static_cast(eControl_UnlockOrDLC)].setLabel(app.GetString(IDS_UNLOCK_FULL_GAME)); + } + } + +#if TO_BE_IMPLEMENTED + // Fix for #45154 - Frontend: DLC: Content can only be downloaded from the frontend if you have not joined/exited multiplayer + XBackgroundDownloadSetMode(XBACKGROUND_DOWNLOAD_MODE_ALWAYS_ALLOW); + m_Timer.SetShow(FALSE); +#endif + m_controlTimer.setVisible( false ); + + // 4J-PB - remove the "hobo humping" message legal say we can't have, and the 1080p one for Vita +#ifdef __PSVITA__ + int splashIndex = eSplashRandomStart + 2 + random->nextInt( (int)m_splashes.size() - (eSplashRandomStart + 2) ); +#else + int splashIndex = eSplashRandomStart + 1 + random->nextInt( static_cast(m_splashes.size()) - (eSplashRandomStart + 1) ); +#endif + + // Override splash text on certain dates + SYSTEMTIME LocalSysTime; + GetLocalTime( &LocalSysTime ); + if (LocalSysTime.wMonth == 11 && LocalSysTime.wDay == 9) + { + splashIndex = eSplashHappyBirthdayEx; + } + else if (LocalSysTime.wMonth == 6 && LocalSysTime.wDay == 1) + { + splashIndex = eSplashHappyBirthdayNotch; + } + else if (LocalSysTime.wMonth == 12 && LocalSysTime.wDay == 24) // the Java game shows this on Christmas Eve, so we will too + { + splashIndex = eSplashMerryXmas; + } + else if (LocalSysTime.wMonth == 1 && LocalSysTime.wDay == 1) + { + splashIndex = eSplashHappyNewYear; + } + //splashIndex = 47; // Very short string + //splashIndex = 194; // Very long string + //splashIndex = 295; // Coloured + //splashIndex = 296; // Noise + m_splash = m_splashes.at( splashIndex ); +} + +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 || (eNavigateWhenReady >= 0) ) return; + +#if defined (__ORBIS__) || defined (__PSVITA__) + // 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_OK: +#ifdef __ORBIS__ + case ACTION_MENU_TOUCHPAD_PRESS: +#endif + if(pressed) + { + ProfileManager.SetPrimaryPad(iPad); + ProfileManager.SetLockedProfile(-1); + sendInputToMovie(key, repeat, pressed, released); + } + break; +#ifdef _XBOX_ONE + case ACTION_MENU_X: + if(pressed) + { + m_bIgnorePress = true; + ProfileManager.RequestSignInUI(false, false, false, false, false, ChooseUser_SignInReturned, this, iPad); + } + break; +#endif +#ifdef __PSVITA__ + case ACTION_MENU_X: + if(pressed && ProfileManager.IsFullVersion()) + { + UINT uiIDA[2]; + uiIDA[0]=IDS__NETWORK_PSN; + uiIDA[1]=IDS_NETWORK_ADHOC; + ui.RequestErrorMessage(IDS_SELECT_NETWORK_MODE_TITLE, IDS_SELECT_NETWORK_MODE_TEXT, uiIDA, 2, XUSER_INDEX_ANY, &UIScene_MainMenu::SelectNetworkModeReturned,this); + } + break; +#endif + + case ACTION_MENU_UP: + case ACTION_MENU_DOWN: + sendInputToMovie(key, repeat, pressed, released); + break; + } +} + +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) = nullptr; +#else + int (*signInReturnedFunc) (LPVOID,const bool, const int iPad) = nullptr; +#endif + + switch(static_cast(controlId)) + { + case eControl_PlayGame: +#ifdef __ORBIS__ + { + m_bIgnorePress=true; + + //CD - Added for audio + ui.PlayUISFX(eSFX_Press); + + ProfileManager.RefreshChatAndContentRestrictions(RefreshChatAndContentRestrictionsReturned_PlayGame, this); + } +#else + m_eAction=eAction_RunGame; + //CD - Added for audio + ui.PlayUISFX(eSFX_Press); + + signInReturnedFunc = &UIScene_MainMenu::CreateLoad_SignInReturned; +#endif + break; + case eControl_MiniGames: + //CD - Added for audio + ui.PlayUISFX(eSFX_Press); + m_eAction=eAction_RunMiniGames; + RunAction(primaryPad); + return; + break; + case eControl_Leaderboards: + //CD - Added for audio + ui.PlayUISFX(eSFX_Press); + + m_eAction=eAction_RunLeaderboards; + signInReturnedFunc = &UIScene_MainMenu::Leaderboards_SignInReturned; + break; + case eControl_Achievements: + //CD - Added for audio + ui.PlayUISFX(eSFX_Press); + + m_eAction=eAction_RunAchievements; + signInReturnedFunc = &UIScene_MainMenu::Achievements_SignInReturned; + break; + case eControl_HelpAndOptions: + //CD - Added for audio + ui.PlayUISFX(eSFX_Press); + + m_eAction=eAction_RunHelpAndOptions; + signInReturnedFunc = &UIScene_MainMenu::HelpAndOptions_SignInReturned; + break; + case eControl_UnlockOrDLC: + //CD - Added for audio + ui.PlayUISFX(eSFX_Press); + + m_eAction=eAction_RunUnlockOrDLC; + signInReturnedFunc = &UIScene_MainMenu::UnlockFullGame_SignInReturned; + break; + case eControl_Exit: + //CD - Added for audio + ui.PlayUISFX(eSFX_Press); + + if( ProfileManager.IsFullVersion() ) + { + UINT uiIDA[2]; + uiIDA[0]=IDS_CANCEL; + uiIDA[1]=IDS_OK; + ui.RequestErrorMessage(IDS_WINDOWS_EXIT, IDS_WARNING_ARCADE_TEXT, uiIDA, 2, XUSER_INDEX_ANY,&UIScene_MainMenu::ExitGameReturned,this); + } + else + { +#ifdef _XBOX +#ifdef _XBOX_ONE + ui.ShowPlayerDisplayname(true); +#endif + ui.NavigateToScene(primaryPad,eUIScene_TrialExitUpsell); +#endif + } + break; + +#ifdef _DURANGO + case eControl_XboxHelp: + ui.PlayUISFX(eSFX_Press); + + m_eAction=eAction_RunXboxHelp; + signInReturnedFunc = &UIScene_MainMenu::XboxHelp_SignInReturned; + break; +#endif + + default: __debugbreak(); + } + + bool confirmUser = false; + + // Note: if no sign in returned func, assume this isn't required + if (signInReturnedFunc != nullptr) + { + if(ProfileManager.IsSignedIn(primaryPad)) + { + if (confirmUser) + { + ProfileManager.RequestSignInUI(false, false, true, false, true, signInReturnedFunc, this, primaryPad); + } + else + { + RunAction(primaryPad); + } + } + else + { + // Ask user to sign in + UINT uiIDA[2]; + uiIDA[0]=IDS_CONFIRM_OK; + uiIDA[1]=IDS_CONFIRM_CANCEL; + ui.RequestErrorMessage(IDS_MUST_SIGN_IN_TITLE, IDS_MUST_SIGN_IN_TEXT, uiIDA, 2, primaryPad, &UIScene_MainMenu::MustSignInReturned, this); + } + } +} + +// Run current action +void UIScene_MainMenu::RunAction(int iPad) +{ + switch(m_eAction) + { + case eAction_RunGame: + RunPlayGame(iPad); + break; + case eAction_RunMiniGames: + RunMiniGames(iPad); + break; + case eAction_RunLeaderboards: + RunLeaderboards(iPad); + break; + case eAction_RunAchievements: + RunAchievements(iPad); + break; + case eAction_RunHelpAndOptions: + RunHelpAndOptions(iPad); + break; + case eAction_RunUnlockOrDLC: + RunUnlockOrDLC(iPad); + break; +#ifdef _DURANGO + case eAction_RunXboxHelp: + // 4J: Launch the dummy xbox help application. + WXS::User^ user = ProfileManager.GetUser(ProfileManager.GetPrimaryPad()); + Windows::Xbox::ApplicationModel::Help::Show(user); + break; +#endif + } +} + +void UIScene_MainMenu::customDraw(IggyCustomDrawCallbackRegion *region) +{ + if(wcscmp((wchar_t *)region->name,L"Splash")==0) + { + PIXBeginNamedEvent(0,"Custom draw splash"); + customDrawSplash(region); + PIXEndNamedEvent(); + } +} + +void UIScene_MainMenu::customDrawSplash(IggyCustomDrawCallbackRegion *region) +{ + Minecraft *pMinecraft = Minecraft::GetInstance(); + + // 4J Stu - Move this to the ctor when the main menu is not the first scene we navigate to + ScreenSizeCalculator ssc(pMinecraft->options, pMinecraft->width_phys, pMinecraft->height_phys); + m_fScreenWidth=static_cast(pMinecraft->width_phys); + m_fRawWidth=static_cast(ssc.rawWidth); + m_fScreenHeight=static_cast(pMinecraft->height_phys); + m_fRawHeight=static_cast(ssc.rawHeight); + + + // Setup GDraw, normal game render states and matrices + CustomDrawData *customDrawRegion = ui.setupCustomDraw(this,region); + delete customDrawRegion; + + + Font *font = pMinecraft->font; + + // build and render with the game call + glDisable(GL_CULL_FACE); + glDisable(GL_DEPTH_TEST); + + glPushMatrix(); + + float width = region->x1 - region->x0; + float height = region->y1 - region->y0; + float xo = width/2; + float yo = height; + + glTranslatef(xo, yo, 0); + + glRotatef(-17, 0, 0, 1); + float sss = 1.8f - Mth::abs(Mth::sin(System::currentTimeMillis() % 1000 / 1000.0f * PI * 2) * 0.1f); + sss*=(m_fScreenWidth/m_fRawWidth); + + sss = sss * 100 / (font->width(m_splash) + 8 * 4); + glScalef(sss, sss, sss); + //drawCenteredString(font, splash, 0, -8, 0xffff00); + font->drawShadow(m_splash, 0 - (font->width(m_splash)) / 2, -8, 0xffff00); + glPopMatrix(); + + glDisable(GL_RESCALE_NORMAL); + + glEnable(GL_DEPTH_TEST); + + + // Finish GDraw and anything else that needs to be finalised + ui.endCustomDraw(region); +} + +int UIScene_MainMenu::MustSignInReturned(void *pParam, int iPad, C4JStorage::EMessageResult result) +{ + UIScene_MainMenu* pClass = static_cast(pParam); + + if(result==C4JStorage::EMessage_ResultAccept) + { + // we need to specify local game here to display local and LIVE profiles in the list + switch(pClass->m_eAction) + { + case eAction_RunGame: ProfileManager.RequestSignInUI(false, true, false, false, true, &UIScene_MainMenu::CreateLoad_SignInReturned, pClass, iPad ); break; + case eAction_RunHelpAndOptions: ProfileManager.RequestSignInUI(false, false, true, false, true, &UIScene_MainMenu::HelpAndOptions_SignInReturned, pClass, iPad ); break; + case eAction_RunLeaderboards: ProfileManager.RequestSignInUI(false, false, true, false, true, &UIScene_MainMenu::Leaderboards_SignInReturned, pClass, iPad ); break; + case eAction_RunAchievements: ProfileManager.RequestSignInUI(false, false, true, false, true, &UIScene_MainMenu::Achievements_SignInReturned, pClass, iPad ); break; + case eAction_RunUnlockOrDLC: ProfileManager.RequestSignInUI(false, false, true, false, true, &UIScene_MainMenu::UnlockFullGame_SignInReturned, pClass, iPad ); break; +#ifdef _DURANGO + case eAction_RunXboxHelp: ProfileManager.RequestSignInUI(false, false, true, false, true, &UIScene_MainMenu::XboxHelp_SignInReturned, pClass, iPad ); break; +#endif + } + } + else + { + pClass->m_bIgnorePress=false; + // unlock the profile + ProfileManager.SetLockedProfile(-1); + for(int i=0;im_eAction) + { + case eAction_RunLeaderboardsPSN: + SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_MainMenu::Leaderboards_SignInReturned, pClass); + break; + case eAction_RunGamePSN: + SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_MainMenu::CreateLoad_SignInReturned, pClass); + break; + case eAction_RunUnlockOrDLCPSN: + SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_MainMenu::UnlockFullGame_SignInReturned, pClass); + break; + } +#elif defined __PSVITA__ + switch(pClass->m_eAction) + { + case eAction_RunLeaderboardsPSN: + //CD - Must force Ad-Hoc off if they want leaderboard PSN sign-in + //Save settings change + app.SetGameSettings(0, eGameSetting_PSVita_NetworkModeAdhoc, 0); + //Force off + CGameNetworkManager::setAdhocMode(false); + //Now Sign-in + SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_MainMenu::Leaderboards_SignInReturned, pClass); + break; + case eAction_RunGamePSN: + 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 + //Save settings change + app.SetGameSettings(0, eGameSetting_PSVita_NetworkModeAdhoc, 0); + //Force off + CGameNetworkManager::setAdhocMode(false); + //Now Sign-in + SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_MainMenu::UnlockFullGame_SignInReturned, pClass); + break; + } +#else + switch(pClass->m_eAction) + { + case eAction_RunLeaderboardsPSN: + SQRNetworkManager_Orbis::AttemptPSNSignIn(&UIScene_MainMenu::Leaderboards_SignInReturned, pClass, true, iPad); + break; + case eAction_RunGamePSN: + SQRNetworkManager_Orbis::AttemptPSNSignIn(&UIScene_MainMenu::CreateLoad_SignInReturned, pClass, true, iPad); + break; + case eAction_RunUnlockOrDLCPSN: + SQRNetworkManager_Orbis::AttemptPSNSignIn(&UIScene_MainMenu::UnlockFullGame_SignInReturned, pClass, true, iPad); + break; + } + +#endif + } + else + { + if( pClass->m_eAction == eAction_RunGamePSN ) + { + if( result == C4JStorage::EMessage_Cancelled) + CreateLoad_SignInReturned(pClass, false, 0); + else + CreateLoad_SignInReturned(pClass, true, 0); + } + else + { + pClass->m_bIgnorePress=false; + } + } + + return 0; +} +#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 = static_cast(pParam); + + if(bContinue) + { + // 4J-JEV: Don't we only need to update rich-presence if the sign-in status changes. + ProfileManager.SetCurrentGameActivity(iPad, CONTEXT_PRESENCE_MENUS, false); + +#if TO_BE_IMPLEMENTED + if(app.GetTMSDLCInfoRead()) +#endif + { + ProfileManager.SetLockedProfile(ProfileManager.GetPrimaryPad()); +#ifdef _XBOX_ONE + ui.ShowPlayerDisplayname(true); +#endif + proceedToScene(iPad, eUIScene_HelpAndOptionsMenu); + } +#if TO_BE_IMPLEMENTED + else + { + // Changing to async TMS calls + app.SetTMSAction(iPad,eTMSAction_TMSPP_RetrieveFiles_HelpAndOptions); + + // block all input + pClass->m_bIgnorePress=true; + // We want to hide everything in this scene and display a timer until we get a completion for the TMS files + for(int i=0;im_Buttons[i].SetShow(FALSE); + } + + pClass->updateTooltips(); + + pClass->m_Timer.SetShow(TRUE); + } +#endif + } + else + { + pClass->m_bIgnorePress=false; + // unlock the profile + ProfileManager.SetLockedProfile(-1); + for(int i=0;im_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 = static_cast(pParam); + + if(bContinue) + { + // 4J-JEV: We only need to update rich-presence if the sign-in status changes. + ProfileManager.SetCurrentGameActivity(iPad, CONTEXT_PRESENCE_MENUS, false); + + UINT uiIDA[1] = { IDS_OK }; + + if(ProfileManager.IsGuest(ProfileManager.GetPrimaryPad())) + { + pClass->m_bIgnorePress=false; + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + } + else + { + ProfileManager.SetLockedProfile(ProfileManager.GetPrimaryPad()); + + + // change the minecraft player name + Minecraft::GetInstance()->user->name = convStringToWstring( ProfileManager.GetGamertag(ProfileManager.GetPrimaryPad())); + + if(ProfileManager.IsFullVersion()) + { + bool bSignedInLive = ProfileManager.IsSignedInLive(iPad); +#ifdef __PSVITA__ + if(CGameNetworkManager::usingAdhocMode()) + { + if(SQRNetworkManager_AdHoc_Vita::GetAdhocStatus()) + { + bSignedInLive = true; + } + else + { + // adhoc mode, but we didn't make the connection, turn off adhoc mode, and just go with whatever the regular online status is + CGameNetworkManager::setAdhocMode(false); + bSignedInLive = ProfileManager.IsSignedInLive(iPad); + } + } +#endif + + // Check if we're signed in to LIVE + if(bSignedInLive) + { + // 4J-PB - Need to check for installed DLC + if(!app.DLCInstallProcessCompleted()) app.StartInstallDLCProcess(iPad); + + if(ProfileManager.IsGuest(iPad)) + { + pClass->m_bIgnorePress=false; + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + } + else + { + // 4J Stu - Not relevant to PS3 +#ifdef _XBOX_ONE +// if(app.GetTMSDLCInfoRead() && app.GetBanListRead(iPad)) + if(app.GetBanListRead(iPad)) + { + Minecraft *pMinecraft=Minecraft::GetInstance(); + pMinecraft->user->name = convStringToWstring( ProfileManager.GetGamertag(ProfileManager.GetPrimaryPad())); + + // ensure we've applied this player's settings + app.ApplyGameSettingsChanged(iPad); + +#ifdef _XBOX_ONE + ui.ShowPlayerDisplayname(true); +#endif + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadCreateJoinMenu); + } + else + { + app.SetTMSAction(iPad,eTMSAction_TMSPP_RetrieveFiles_RunPlayGame); + + // block all input + pClass->m_bIgnorePress=true; + // We want to hide everything in this scene and display a timer until we get a completion for the TMS files + // for(int i=0;iupdateTooltips(); + + pClass->m_controlTimer.setVisible( true ); + } +#endif +#if TO_BE_IMPLEMENTED + // check if all the TMS files are loaded + if(app.GetTMSDLCInfoRead() && app.GetTMSXUIDsFileRead() && app.GetBanListRead(iPad)) + { + if(StorageManager.SetSaveDevice(&UIScene_MainMenu::DeviceSelectReturned,pClass)==true) + { + // save device already selected + + // ensure we've applied this player's settings + app.ApplyGameSettingsChanged(ProfileManager.GetPrimaryPad()); + // check for DLC + // start timer to track DLC check finished + pClass->m_Timer.SetShow(TRUE); + XuiSetTimer(pClass->m_hObj,DLC_INSTALLED_TIMER_ID,DLC_INSTALLED_TIMER_TIME); + //app.NavigateToScene(ProfileManager.GetPrimaryPad(),eUIScene_MultiGameJoinLoad); + } + } + else + { + // Changing to async TMS calls + app.SetTMSAction(iPad,eTMSAction_TMSPP_RetrieveFiles_RunPlayGame); + + // block all input + pClass->m_bIgnorePress=true; + // We want to hide everything in this scene and display a timer until we get a completion for the TMS files + for(int i=0;im_Buttons[i].SetShow(FALSE); + } + + updateTooltips(); + + pClass->m_Timer.SetShow(TRUE); + } +#else + Minecraft *pMinecraft=Minecraft::GetInstance(); + pMinecraft->user->name = convStringToWstring( ProfileManager.GetGamertag(ProfileManager.GetPrimaryPad())); + + // ensure we've applied this player's settings + app.ApplyGameSettingsChanged(iPad); + +#ifdef _XBOX_ONE + ui.ShowPlayerDisplayname(true); +#endif + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadCreateJoinMenu); +#endif + } + } + else + { +#if TO_BE_IMPLEMENTED + // offline + ProfileManager.DisplayOfflineProfile(&CScene_Main::CreateLoad_OfflineProfileReturned,pClass, ProfileManager.GetPrimaryPad() ); +#else + app.DebugPrintf("Offline Profile returned not implemented\n"); +#ifdef _XBOX_ONE + ui.ShowPlayerDisplayname(true); +#endif + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadCreateJoinMenu); +#endif + } + } + else + { + // 4J-PB - if this is the trial game, we can't have any networking + // Can't apply the player's settings here - they haven't come back from the QuerySignInStatud call above yet. + // Need to let them action in the main loop when they come in + // ensure we've applied this player's settings + //app.ApplyGameSettingsChanged(iPad); + +#if defined(__PS3__) || defined(__ORBIS__) || defined( __PSVITA__) + // ensure we've applied this player's settings - we do have them on PS3 + app.ApplyGameSettingsChanged(iPad); +#endif + +#ifdef __ORBIS__ + if(!g_NetworkManager.IsReadyToPlayOrIdle()) + { + pClass->m_bLoadTrialOnNetworkManagerReady = true; + ui.NavigateToScene(iPad, eUIScene_Timer); + } + else +#endif + { + // go straight in to the trial level + LoadTrial(); + } + } + } + } + else + { + pClass->m_bIgnorePress=false; + + // unlock the profile + ProfileManager.SetLockedProfile(-1); + for(int i=0;i(pParam); + + if(bContinue) + { + // 4J-JEV: We only need to update rich-presence if the sign-in status changes. + ProfileManager.SetCurrentGameActivity(iPad, CONTEXT_PRESENCE_MENUS, false); + + UINT uiIDA[1] = { IDS_OK }; + + // guests can't look at leaderboards + if(ProfileManager.IsGuest(ProfileManager.GetPrimaryPad())) + { + pClass->m_bIgnorePress=false; + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + } + else if(!ProfileManager.IsSignedInLive(ProfileManager.GetPrimaryPad())) + { + pClass->m_bIgnorePress=false; + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1); + } + else + { + bool bContentRestricted=false; +#if defined(__PS3__) || defined(__PSVITA__) + ProfileManager.GetChatAndContentRestrictions(iPad,true,nullptr,&bContentRestricted,nullptr); +#endif + if(bContentRestricted) + { + pClass->m_bIgnorePress=false; +#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.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); +#endif + } + else + { + ProfileManager.SetLockedProfile(ProfileManager.GetPrimaryPad()); +#ifdef _XBOX_ONE + ui.ShowPlayerDisplayname(true); +#endif + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LeaderboardsMenu); + } + } + } + else + { + pClass->m_bIgnorePress=false; + // unlock the profile + ProfileManager.SetLockedProfile(-1); + for(int i=0;i(pParam); + + if (bContinue) + { + pClass->m_bIgnorePress=false; + // 4J-JEV: We only need to update rich-presence if the sign-in status changes. + ProfileManager.SetCurrentGameActivity(iPad, CONTEXT_PRESENCE_MENUS, false); + + XShowAchievementsUI( ProfileManager.GetPrimaryPad() ); + } + else + { + pClass->m_bIgnorePress=false; + // unlock the profile + ProfileManager.SetLockedProfile(-1); + for(int i=0;i(pParam); + + if (bContinue) + { + // 4J-JEV: We only need to update rich-presence if the sign-in status changes. + ProfileManager.SetCurrentGameActivity(iPad, CONTEXT_PRESENCE_MENUS, false); + + pClass->RunUnlockOrDLC(iPad); + } + else + { + pClass->m_bIgnorePress=false; + // unlock the profile + ProfileManager.SetLockedProfile(-1); + for(int i=0;im_errorCode = ProfileManager.getNPAvailability(ProfileManager.GetPrimaryPad()); + + bool bPatchAvailable; + switch(pClass->m_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) + { + pClass->m_eAction=eAction_RunGame; + signInReturnedFunc = &UIScene_MainMenu::CreateLoad_SignInReturned; + } + else + { + pClass->m_bRunGameChosen=true; + pClass->m_bErrorDialogRunning=true; + int32_t ret=sceErrorDialogInitialize(); + 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 ); + } + return; + } + +// UINT uiIDA[1]; +// uiIDA[0]=IDS_OK; +// ui.RequestMessageBox(IDS_PATCH_AVAILABLE_TITLE, IDS_PATCH_AVAILABLE_TEXT, uiIDA, 1, XUSER_INDEX_ANY,nullptr,pClass); + } + + // Check if PSN is unavailable because of age restriction + if (pClass->m_errorCode == SCE_NP_ERROR_AGE_RESTRICTION) + { + UINT uiIDA[1]; + uiIDA[0]=IDS_PRO_NOTONLINE_DECLINE; + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::PlayOfflineReturned, pClass); + + return; + } + + bool confirmUser = false; + + // Note: if no sign in returned func, assume this isn't required + if (signInReturnedFunc != nullptr) + { + if(ProfileManager.IsSignedIn(primaryPad)) + { + if (confirmUser) + { + ProfileManager.RequestSignInUI(false, false, true, false, true, signInReturnedFunc, pClass, primaryPad); + } + else + { + pClass->RunAction(primaryPad); + } + } + else + { + // Ask user to sign in + UINT uiIDA[2]; + uiIDA[0]=IDS_CONFIRM_OK; + uiIDA[1]=IDS_CONFIRM_CANCEL; + ui.RequestErrorMessage(IDS_MUST_SIGN_IN_TITLE, IDS_MUST_SIGN_IN_TEXT, uiIDA, 2, primaryPad, &UIScene_MainMenu::MustSignInReturned, pClass); + } + } +} + +void UIScene_MainMenu::RefreshChatAndContentRestrictionsReturned_Leaderboards(void *pParam) +{ + int primaryPad = ProfileManager.GetPrimaryPad(); + + UIScene_MainMenu* pClass = (UIScene_MainMenu*)pParam; + + int (*signInReturnedFunc) (LPVOID,const bool, const int iPad) = nullptr; + + // 4J-PB - Check if there is a patch for the game + pClass->m_errorCode = ProfileManager.getNPAvailability(ProfileManager.GetPrimaryPad()); + + bool bPatchAvailable; + switch(pClass->m_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) + { + pClass->m_eAction=eAction_RunLeaderboards; + signInReturnedFunc = &UIScene_MainMenu::Leaderboards_SignInReturned; + } + else + { + int32_t ret=sceErrorDialogInitialize(); + pClass->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 ); + } + } + +// UINT uiIDA[1]; +// uiIDA[0]=IDS_OK; +// ui.RequestMessageBox(IDS_PATCH_AVAILABLE_TITLE, IDS_PATCH_AVAILABLE_TEXT, uiIDA, 1, XUSER_INDEX_ANY,nullptr,pClass); + } + + bool confirmUser = false; + + // Update error code + pClass->m_errorCode = ProfileManager.getNPAvailability(ProfileManager.GetPrimaryPad()); + + // Check if PSN is unavailable because of age restriction + if (pClass->m_errorCode == SCE_NP_ERROR_AGE_RESTRICTION) + { + UINT uiIDA[1]; + uiIDA[0] = IDS_CONFIRM_OK; + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(), nullptr, pClass); + + return; + } + + // Note: if no sign in returned func, assume this isn't required + if (signInReturnedFunc != nullptr) + { + if(ProfileManager.IsSignedIn(primaryPad)) + { + if (confirmUser) + { + ProfileManager.RequestSignInUI(false, false, true, false, true, signInReturnedFunc, pClass, primaryPad); + } + else + { + pClass->RunAction(primaryPad); + } + } + else + { + // Ask user to sign in + UINT uiIDA[2]; + uiIDA[0]=IDS_CONFIRM_OK; + uiIDA[1]=IDS_CONFIRM_CANCEL; + ui.RequestErrorMessage(IDS_MUST_SIGN_IN_TITLE, IDS_MUST_SIGN_IN_TEXT, uiIDA, 2, primaryPad, &UIScene_MainMenu::MustSignInReturned, pClass); + } + } +} + +int UIScene_MainMenu::PlayOfflineReturned(void *pParam, int iPad, C4JStorage::EMessageResult result) +{ + UIScene_MainMenu* pClass = (UIScene_MainMenu*)pParam; + + if(result==C4JStorage::EMessage_ResultAccept) + { + if (pClass->m_eAction == eAction_RunGame) + { + CreateLoad_SignInReturned(pClass, true, 0); + } + else + { + pClass->m_bIgnorePress=false; + } + } + else + { + pClass->m_bIgnorePress=false; + } + + return 0; +} +#endif + +void UIScene_MainMenu::RunPlayGame(int iPad) +{ + Minecraft *pMinecraft=Minecraft::GetInstance(); + + // clear the remembered signed in users so their profiles get read again + app.ClearSignInChangeUsersMask(); + + app.ReleaseSaveThumbnail(); + + if(ProfileManager.IsGuest(iPad)) + { + UINT uiIDA[1]; + uiIDA[0]=IDS_OK; + + m_bIgnorePress=false; + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + } + else + { + ProfileManager.SetLockedProfile(iPad); + + // If the player was signed in before selecting play, we'll not have read the profile yet, so query the sign-in status to get this to happen + ProfileManager.QuerySigninStatus(); + + // 4J-PB - Need to check for installed DLC + if(!app.DLCInstallProcessCompleted()) app.StartInstallDLCProcess(iPad); + + if(ProfileManager.IsFullVersion()) + { + // are we offline? + bool bSignedInLive = ProfileManager.IsSignedInLive(iPad); +#ifdef __PSVITA__ + if(app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_PSVita_NetworkModeAdhoc) == true) + { + CGameNetworkManager::setAdhocMode(true); + bSignedInLive = SQRNetworkManager_AdHoc_Vita::GetAdhocStatus(); + app.DebugPrintf("Adhoc mode signed in : %s\n", bSignedInLive ? "true" : "false"); + } + else + { + CGameNetworkManager::setAdhocMode(false); + app.DebugPrintf("PSN mode signed in : %s\n", bSignedInLive ? "true" : "false"); + } + +#endif //__PSVITA__ + + if(!bSignedInLive) + { +#if defined(__PS3__) || defined __PSVITA__ + // enable input again + m_bIgnorePress=false; + + // Not sure why 360 doesn't need this, but leaving as __PS3__ only for now until we see that it does. Without this, on a PS3 offline game, the primary player just gets the default Player1234 type name + pMinecraft->user->name = convStringToWstring( ProfileManager.GetGamertag(ProfileManager.GetPrimaryPad())); + + m_eAction=eAction_RunGamePSN; + // get them to sign in to online + UINT uiIDA[2]; + uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; + uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; + +#ifdef __PSVITA__ + if(CGameNetworkManager::usingAdhocMode()) + { + uiIDA[0]=IDS_NETWORK_ADHOC; + // this should be "Connect to adhoc network" + ui.RequestErrorMessage(IDS_PRO_NOTADHOCONLINE_TITLE, IDS_PRO_NOTADHOCONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_MainMenu::MustSignInReturnedPSN,this); + } + else + { + /* 4J-PB - Add this after release + // Determine why they're not "signed in live" + if (ProfileManager.IsSignedInPSN(iPad)) + { + m_eAction=eAction_RunGame; + // Signed in to PSN but not connected (no internet access) + + 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()); + } + else + { + m_eAction=eAction_RunGamePSN; + // Not signed in to PSN + ui.RequestMessageBox( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPad, &UIScene_MainMenu::MustSignInReturnedPSN, this, app.GetStringTable()); + return; + } */ + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_MainMenu::MustSignInReturnedPSN,this); + + } +#else + + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPad, &UIScene_MainMenu::MustSignInReturnedPSN, this); +#endif + +#elif defined __ORBIS__ + + // Determine why they're not "signed in live" + if (ProfileManager.isSignedInPSN(iPad)) + { + m_eAction=eAction_RunGame; + // Signed in to PSN but not connected (no internet access) + assert(!ProfileManager.isConnectedToPSN(iPad)); + + UINT uiIDA[1]; + uiIDA[0] = IDS_PRO_NOTONLINE_DECLINE; + ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad, UIScene_MainMenu::PlayOfflineReturned, this); + } + else + { + m_eAction=eAction_RunGamePSN; + // Not signed in to PSN + UINT uiIDA[2]; + uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; + uiIDA[1] = IDS_PRO_NOTONLINE_DECLINE; + ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, iPad, &UIScene_MainMenu::MustSignInReturnedPSN, this); + return; + } +#else + ProfileManager.SetLockedProfile(iPad); +#ifdef _XBOX_ONE + ui.ShowPlayerDisplayname(true); +#endif + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadCreateJoinMenu); +#endif + } + else + { +#ifdef _XBOX_ONE + if(!app.GetBanListRead(iPad)) + { + app.SetTMSAction(iPad,eTMSAction_TMSPP_RetrieveFiles_RunPlayGame); + + // block all input + m_bIgnorePress=true; + // We want to hide everything in this scene and display a timer until we get a completion for the TMS files +// for(int i=0;iuser->name = convStringToWstring( ProfileManager.GetGamertag(ProfileManager.GetPrimaryPad())); + // save device already selected + + // ensure we've applied this player's settings + app.ApplyGameSettingsChanged(iPad); + // check for DLC + // start timer to track DLC check finished + m_Timer.SetShow(TRUE); + XuiSetTimer(m_hObj,DLC_INSTALLED_TIMER_ID,DLC_INSTALLED_TIMER_TIME); + //app.NavigateToScene(iPad,eUIScene_MultiGameJoinLoad); + } + } + else + { + // Changing to async TMS calls + app.SetTMSAction(iPad,eTMSAction_TMSPP_RetrieveFiles_RunPlayGame); + + // block all input + m_bIgnorePress=true; + // We want to hide everything in this scene and display a timer until we get a completion for the TMS files + for(int i=0;iuser->name = convStringToWstring( ProfileManager.GetGamertag(ProfileManager.GetPrimaryPad())); + + // ensure we've applied this player's settings + app.ApplyGameSettingsChanged(iPad); + +#ifdef _XBOX_ONE + ui.ShowPlayerDisplayname(true); +#endif + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_LoadCreateJoinMenu); +#endif + } + } + else + { + // 4J-PB - if this is the trial game, we can't have any networking + // go straight in to the trial level + // change the minecraft player name + Minecraft::GetInstance()->user->name = convStringToWstring( ProfileManager.GetGamertag(ProfileManager.GetPrimaryPad())); + + // Can't apply the player's settings here - they haven't come back from the QuerySignInStatud call above yet. + // Need to let them action in the main loop when they come in + // ensure we've applied this player's settings + //app.ApplyGameSettingsChanged(iPad); + +#if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) + // ensure we've applied this player's settings - we do have them on PS3 + app.ApplyGameSettingsChanged(iPad); +#endif + +#ifdef __ORBIS__ + if(!g_NetworkManager.IsReadyToPlayOrIdle()) + { + m_bLoadTrialOnNetworkManagerReady = true; + ui.NavigateToScene(iPad, eUIScene_Timer); + } + else +#endif + { + LoadTrial(); + } + } + } +} + +void UIScene_MainMenu::RunLeaderboards(int iPad) +{ + UINT uiIDA[1]; + uiIDA[0]=IDS_OK; + + // guests can't look at leaderboards + if(ProfileManager.IsGuest(iPad)) + { + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + } + else if(!ProfileManager.IsSignedInLive(iPad)) + { +#if defined __PS3__ || defined __PSVITA__ + m_eAction=eAction_RunLeaderboardsPSN; + // get them to sign in to online + UINT uiIDA[1]; + uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; + 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__ + m_eAction=eAction_RunLeaderboardsPSN; + // Determine why they're not "signed in live" + if (ProfileManager.IsSignedInPSN(iPad)) + { + // Signed in to PSN but not connected (no internet access) + UINT uiIDA[1]; + uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; + ui.RequestMessageBox(IDS_PRO_CURRENTLY_NOT_ONLINE_TITLE, IDS_PRO_PSNOFFLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::MustSignInReturnedPSN, this, 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(), &UIScene_MainMenu::MustSignInReturnedPSN, this, app.GetStringTable()); + return; + }*/ +#elif defined __ORBIS__ + m_eAction=eAction_RunLeaderboardsPSN; + // Determine why they're not "signed in live" + if (ProfileManager.isSignedInPSN(iPad)) + { + // Signed in to PSN but not connected (no internet access) + assert(!ProfileManager.isConnectedToPSN(iPad)); + + UINT uiIDA[1]; + uiIDA[0] = IDS_OK; + 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.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::MustSignInReturnedPSN, this); + return; + } +#else + ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1); +#endif + } + else + { + // we're supposed to check for parental control restrictions before showing leaderboards + // The title enforces the user's NP parental control setting for age-based content + //restriction in network communications. + // If age restrictions are in place and the user's age does not meet + // the age restriction of the title's online service content rating (CERO, ESRB, PEGI, etc.), then the title must + //display a message such as the following and disallow online service for this user. + + bool bContentRestricted=false; +#if defined(__PS3__) || defined(__PSVITA__) + ProfileManager.GetChatAndContentRestrictions(iPad,true,nullptr,&bContentRestricted,nullptr); +#endif + if(bContentRestricted) + { +#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.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),nullptr,this); +#endif + } + else + { + ProfileManager.SetLockedProfile(iPad); + // If the player was signed in before selecting play, we'll not have read the profile yet, so query the sign-in status to get this to happen + ProfileManager.QuerySigninStatus(); + +#ifdef _XBOX_ONE + ui.ShowPlayerDisplayname(true); +#endif + proceedToScene(iPad, eUIScene_LeaderboardsMenu); + } + } +} +void UIScene_MainMenu::RunUnlockOrDLC(int iPad) +{ + UINT uiIDA[1]; + uiIDA[0]=IDS_OK; + + // Check if this means downloadable content + if(ProfileManager.IsFullVersion()) + { +#ifdef __ORBIS__ + // 4J-PB - Check if there is a patch for the game + m_errorCode = ProfileManager.getNPAvailability(ProfileManager.GetPrimaryPad()); + + bool bPatchAvailable; + switch(m_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) + { + m_bIgnorePress=false; + + 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 ); + } + } + +// UINT uiIDA[1]; +// uiIDA[0]=IDS_OK; +// ui.RequestMessageBox(IDS_PATCH_AVAILABLE_TITLE, IDS_PATCH_AVAILABLE_TEXT, uiIDA, 1, XUSER_INDEX_ANY,nullptr,this); + return; + } + + // Check if PSN is unavailable because of age restriction + if (m_errorCode == SCE_NP_ERROR_AGE_RESTRICTION) + { + m_bIgnorePress=false; + UINT uiIDA[1]; + uiIDA[0] = IDS_OK; + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(), nullptr, this); + + return; + } +#endif + // downloadable content + if(ProfileManager.IsSignedInLive(iPad)) + { + if(ProfileManager.IsGuest(iPad)) + { + m_bIgnorePress=false; + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + } + else + { + + // If the player was signed in before selecting play, we'll not have read the profile yet, so query the sign-in status to get this to happen + ProfileManager.QuerySigninStatus(); + +#if defined _XBOX_ONE + if(app.GetTMSDLCInfoRead()) +#endif + { + bool bContentRestricted=false; +#if defined(__PS3__) || defined(__PSVITA__) + ProfileManager.GetChatAndContentRestrictions(iPad,true,nullptr,&bContentRestricted,nullptr); +#endif + if(bContentRestricted) + { + m_bIgnorePress=false; +#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.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),nullptr,this); +#endif + } + else + { + ProfileManager.SetLockedProfile(iPad); +#ifdef _XBOX_ONE + ui.ShowPlayerDisplayname(true); +#endif + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_DLCMainMenu); + } + } +#if defined _XBOX_ONE + else + { + // Changing to async TMS calls + app.SetTMSAction(iPad,eTMSAction_TMSPP_RetrieveFiles_DLCMain); + + // block all input + m_bIgnorePress=true; + // We want to hide everything in this scene and display a timer until we get a completion for the TMS files +// for(int i=0;iRecordUpsellPresented(iPad, eSen_UpsellID_Full_Version_Of_Game, app.m_dwOfferID); + ProfileManager.DisplayFullVersionPurchase(false,iPad,eSen_UpsellID_Full_Version_Of_Game); +#endif + } + } +} + +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 = static_cast(-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) + { + int iCommerceState=app.GetCommerceState(); + // 4J-PB - if there's a commerce error - store down, player can't access store - let the DisplayFullVersionPurchase show the error + if((iCommerceState==CConsoleMinecraftApp::eCommerce_State_Online) || (iCommerceState==CConsoleMinecraftApp::eCommerce_State_Error)) + { + m_bLaunchFullVersionPurchase=false; + m_bIgnorePress=false; + updateTooltips(); + + // 4J-PB - need to check this user can access the store + bool bContentRestricted=false; + ProfileManager.GetChatAndContentRestrictions(ProfileManager.GetPrimaryPad(),true,nullptr,&bContentRestricted,nullptr); + if(bContentRestricted) + { + UINT uiIDA[1]; + uiIDA[0]=IDS_CONFIRM_OK; + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); + } + else + { + TelemetryManager->RecordUpsellPresented(ProfileManager.GetPrimaryPad(), eSen_UpsellID_Full_Version_Of_Game, app.m_dwOfferID); + ProfileManager.DisplayFullVersionPurchase(false,ProfileManager.GetPrimaryPad(),eSen_UpsellID_Full_Version_Of_Game); + } + } + } + + // 4J-PB - check for a trial version changing to a full version + if(m_bTrialVersion) + { + if(ProfileManager.IsFullVersion()) + { + m_bTrialVersion=false; + m_buttons[(int)eControl_UnlockOrDLC].init(app.GetString(IDS_DOWNLOADABLECONTENT),eControl_UnlockOrDLC); + } + } +#endif + +#if defined _XBOX_ONE + if(m_bWaitingForDLCInfo) + { + if(app.GetTMSDLCInfoRead()) + { + m_bWaitingForDLCInfo=false; + ProfileManager.SetLockedProfile(m_iPad); + proceedToScene(ProfileManager.GetPrimaryPad(), eUIScene_DLCMainMenu); + } + } + + if(g_NetworkManager.ShouldMessageForFullSession()) + { + UINT uiIDA[1]; + uiIDA[0]=IDS_CONFIRM_OK; + ui.RequestErrorMessage( IDS_CONNECTION_FAILED, IDS_IN_PARTY_SESSION_FULL, uiIDA,1,ProfileManager.GetPrimaryPad()); + } +#endif + +#ifdef __ORBIS__ + + // process the error dialog (for a patch being available) + // SQRNetworkManager_Orbis::tickErrorDialog also runs the error dialog, so wrap this so this doesn't terminate a signin dialog + if(m_bErrorDialogRunning) + { + SceErrorDialogStatus stat = sceErrorDialogUpdateStatus(); + if( stat == SCE_ERROR_DIALOG_STATUS_FINISHED ) + { + sceErrorDialogTerminate(); + // if m_bRunGameChosen is true, we're here after selecting play game, and we should let the user continue with an offline game + if(m_bRunGameChosen) + { + m_bRunGameChosen=false; + m_eAction = eAction_RunGame; + + // give the option of continuing offline + UINT uiIDA[1]; + uiIDA[0]=IDS_PRO_NOTONLINE_DECLINE; + ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION_PATCH_AVAILABLE, uiIDA, 1, ProfileManager.GetPrimaryPad(), &UIScene_MainMenu::PlayOfflineReturned, this); + + } + m_bErrorDialogRunning=false; + } + } + + if(m_bLoadTrialOnNetworkManagerReady && g_NetworkManager.IsReadyToPlayOrIdle()) + { + m_bLoadTrialOnNetworkManagerReady = false; + LoadTrial(); + } + +#endif +} + +void UIScene_MainMenu::RunAchievements(int iPad) +{ +#if TO_BE_IMPLEMENTED + UINT uiIDA[1]; + uiIDA[0]=IDS_OK; + + // guests can't look at achievements + if(ProfileManager.IsGuest(iPad)) + { + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + } + else + { + XShowAchievementsUI( iPad ); + } +#endif +} + +void UIScene_MainMenu::RunMiniGames(int iPad) +{ + ProfileManager.SetLockedProfile(iPad); +#ifdef _XBOX_ONE + ui.ShowPlayerDisplayname(true); +#endif + proceedToScene(iPad, eUIScene_MinigamesMenu); +} + +void UIScene_MainMenu::RunHelpAndOptions(int iPad) +{ + if(ProfileManager.IsGuest(iPad)) + { + UINT uiIDA[1]; + uiIDA[0]=IDS_OK; + ui.RequestErrorMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1); + } + else + { + // If the player was signed in before selecting play, we'll not have read the profile yet, so query the sign-in status to get this to happen + ProfileManager.QuerySigninStatus(); + +#if TO_BE_IMPLEMENTED + // 4J-PB - You can be offline and still can go into help and options + if(app.GetTMSDLCInfoRead() || !ProfileManager.IsSignedInLive(iPad)) +#endif + { + ProfileManager.SetLockedProfile(iPad); +#ifdef _XBOX_ONE + ui.ShowPlayerDisplayname(true); +#endif + proceedToScene(iPad, eUIScene_HelpAndOptionsMenu); + } +#if TO_BE_IMPLEMENTED + else + { + // Changing to async TMS calls + app.SetTMSAction(iPad,eTMSAction_TMSPP_RetrieveFiles_HelpAndOptions); + + // block all input + m_bIgnorePress=true; + // We want to hide everything in this scene and display a timer until we get a completion for the TMS files + for(int i=0;iseed = 0; + param->saveData = nullptr; + param->settings = app.GetGameHostOption( eGameHostOption_Tutorial ) | app.GetGameHostOption(eGameHostOption_DisableSaving); + + vector *generators = app.getLevelGenerators(); + param->levelGen = generators->at(0); + + LoadingInputParams *loadingParams = new LoadingInputParams(); + loadingParams->func = &CGameNetworkManager::RunNetworkGameThreadProc; + loadingParams->lpParam = static_cast(param); + + UIFullscreenProgressCompletionData *completionData = new UIFullscreenProgressCompletionData(); + completionData->bShowBackground=TRUE; + completionData->bShowLogo=TRUE; + completionData->type = e_ProgressCompletion_CloseAllPlayersUIScenes; + completionData->iPad = ProfileManager.GetPrimaryPad(); + loadingParams->completionData = completionData; + + ui.ShowTrialTimer(true); + +#ifdef _XBOX_ONE + ui.ShowPlayerDisplayname(true); +#endif + ui.NavigateToScene(ProfileManager.GetPrimaryPad(),eUIScene_FullscreenProgress, loadingParams); +} + +void UIScene_MainMenu::handleUnlockFullVersion() +{ + if(ProfileManager.IsFullVersion()) + { + m_buttons[static_cast(eControl_UnlockOrDLC)].setLabel(IDS_DOWNLOADABLECONTENT,true); + } + else + { + m_buttons[static_cast(eControl_UnlockOrDLC)].setLabel(IDS_UNLOCK_FULL_GAME,true); + } +} + + +#ifdef __PSVITA__ +int UIScene_MainMenu::SelectNetworkModeReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) +{ + UIScene_MainMenu* pClass = (UIScene_MainMenu*)pParam; + + if(result==C4JStorage::EMessage_ResultAccept) + { + app.DebugPrintf("Setting network mode to PSN\n"); + app.SetGameSettings(0, eGameSetting_PSVita_NetworkModeAdhoc, 0); + } + else if(result==C4JStorage::EMessage_ResultDecline) + { + app.DebugPrintf("Setting network mode to Adhoc\n"); + app.SetGameSettings(0, eGameSetting_PSVita_NetworkModeAdhoc, 1); + } + pClass->updateTooltips(); + return 0; +} +#endif //__PSVITA__ diff --git a/Minecraft.Client/Common/UI/UIScene_MainMenu.h b/Minecraft.Client/Common/UI/UIScene_MainMenu.h index 0a3665ee..e833e93d 100644 --- a/Minecraft.Client/Common/UI/UIScene_MainMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_MainMenu.h @@ -1,198 +1,200 @@ -#pragma once - -#include "UIScene.h" - -class UIScene_MainMenu : public UIScene -{ -private: - enum EControls - { - eControl_PlayGame, - eControl_Leaderboards, - eControl_Achievements, - eControl_HelpAndOptions, - eControl_UnlockOrDLC, - eControl_MiniGames, -#ifndef _DURANGO - eControl_Exit, -#else - eControl_XboxHelp, -#endif - eControl_Count, - }; - -// #ifdef __ORBIS__ -// enum EPatchCheck -// { -// ePatchCheck_Idle, -// ePatchCheck_Init, -// ePatchCheck_Running, -// }; -// #endif - +#pragma once + +#include "UIScene.h" + +class UIScene_MainMenu : public UIScene +{ +private: + enum EControls + { + eControl_PlayGame, + eControl_Leaderboards, + eControl_Achievements, + eControl_HelpAndOptions, + eControl_UnlockOrDLC, + eControl_MiniGames, +#ifndef _DURANGO + eControl_Exit, +#else + eControl_XboxHelp, +#endif + eControl_Count, + }; + +// #ifdef __ORBIS__ +// enum EPatchCheck +// { +// ePatchCheck_Idle, +// ePatchCheck_Init, +// ePatchCheck_Running, +// }; +// #endif + UIControl_Button m_buttons[eControl_Count]; UIControl m_controlTimer; UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) UI_MAP_ELEMENT( m_buttons[(int)eControl_PlayGame], "Button1") - UI_MAP_ELEMENT( m_buttons[(int)eControl_Leaderboards], "Button2") - UI_MAP_ELEMENT( m_buttons[(int)eControl_Achievements], "Button3") - UI_MAP_ELEMENT( m_buttons[(int)eControl_HelpAndOptions], "Button4") - UI_MAP_ELEMENT( m_buttons[(int)eControl_UnlockOrDLC], "Button5") + UI_MAP_ELEMENT( m_buttons[(int)eControl_MiniGames], "Button2") + UI_MAP_ELEMENT( m_buttons[(int)eControl_Leaderboards], "Button3") + UI_MAP_ELEMENT( m_buttons[(int)eControl_Achievements], "Button4") + UI_MAP_ELEMENT( m_buttons[(int)eControl_HelpAndOptions], "Button5") #ifndef _DURANGO - UI_MAP_ELEMENT( m_buttons[(int)eControl_MiniGames], "Button7") - UI_MAP_ELEMENT( m_buttons[(int)eControl_Exit], "Button6") + UI_MAP_ELEMENT( m_buttons[(int)eControl_UnlockOrDLC], "Button6") + UI_MAP_ELEMENT( m_buttons[(int)eControl_Exit], "Button7") #else UI_MAP_ELEMENT( m_buttons[(int)eControl_XboxHelp], "Button6") -#endif - UI_MAP_ELEMENT( m_controlTimer, "Timer") - UI_END_MAP_ELEMENTS_AND_NAMES() - - static Random *random; - bool m_bIgnorePress; - bool m_bTrialVersion; - bool m_bLoadTrialOnNetworkManagerReady; -#if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) - bool m_bLaunchFullVersionPurchase; -#endif - -#ifdef _XBOX_ONE - bool m_bWaitingForDLCInfo; -#endif - - float m_fScreenWidth,m_fScreenHeight; - float m_fRawWidth,m_fRawHeight; - vector m_splashes; - wstring m_splash; - enum eSplashIndexes - { - eSplashHappyBirthdayEx = 0, - eSplashHappyBirthdayNotch, - eSplashMerryXmas, - eSplashHappyNewYear, - - // The start index in the splashes vector from which we can select a random splash - eSplashRandomStart, - }; - +#endif + UI_MAP_ELEMENT( m_controlTimer, "Timer") + UI_END_MAP_ELEMENTS_AND_NAMES() + + static Random *random; + bool m_bIgnorePress; + bool m_bTrialVersion; + bool m_bLoadTrialOnNetworkManagerReady; +#if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) + bool m_bLaunchFullVersionPurchase; +#endif + +#ifdef _XBOX_ONE + bool m_bWaitingForDLCInfo; +#endif + + float m_fScreenWidth,m_fScreenHeight; + float m_fRawWidth,m_fRawHeight; + vector m_splashes; + wstring m_splash; + enum eSplashIndexes + { + eSplashHappyBirthdayEx = 0, + eSplashHappyBirthdayNotch, + eSplashMerryXmas, + eSplashHappyNewYear, + + // The start index in the splashes vector from which we can select a random splash + eSplashRandomStart, + }; + enum eActions { eAction_None=0, eAction_RunGame, + eAction_RunMiniGames, eAction_RunLeaderboards, eAction_RunAchievements, eAction_RunHelpAndOptions, eAction_RunUnlockOrDLC, -#if defined(__PS3__)|| defined(__PSVITA__) || defined(__ORBIS__) - eAction_RunLeaderboardsPSN, - eAction_RunGamePSN, - eAction_RunUnlockOrDLCPSN, -#elif defined _DURANGO - eAction_RunXboxHelp, -#endif - - }; - eActions m_eAction; - +#if defined(__PS3__)|| defined(__PSVITA__) || defined(__ORBIS__) + eAction_RunLeaderboardsPSN, + eAction_RunGamePSN, + eAction_RunUnlockOrDLCPSN, +#elif defined _DURANGO + eAction_RunXboxHelp, +#endif + + }; + 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; } -#endif - - virtual void updateTooltips(); - virtual void updateComponents(); - - virtual EUIScene getSceneType() { return eUIScene_MainMenu;} - - virtual void customDraw(IggyCustomDrawCallbackRegion *region); -protected: - void customDrawSplash(IggyCustomDrawCallbackRegion *region); - - - virtual wstring getMoviePath(); - -public: - virtual void tick(); - virtual void handleReload(); - // INPUT - virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled); - - virtual void handleUnlockFullVersion(); - -protected: - void handlePress(F64 controlId, F64 childId); - - void handleGainFocus(bool navBack); - - virtual long long getDefaultGtcButtons() { return 0; } - + + 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; } +#endif + + virtual void updateTooltips(); + virtual void updateComponents(); + + virtual EUIScene getSceneType() { return eUIScene_MainMenu;} + + virtual void customDraw(IggyCustomDrawCallbackRegion *region); +protected: + void customDrawSplash(IggyCustomDrawCallbackRegion *region); + + + virtual wstring getMoviePath(); + +public: + virtual void tick(); + virtual void handleReload(); + // INPUT + virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled); + + virtual void handleUnlockFullVersion(); + +protected: + void handlePress(F64 controlId, F64 childId); + + void handleGainFocus(bool navBack); + + virtual long long getDefaultGtcButtons() { return 0; } + private: void RunPlayGame(int iPad); + void RunMiniGames(int iPad); void RunLeaderboards(int iPad); void RunUnlockOrDLC(int iPad); void RunAchievements(int iPad); - void RunHelpAndOptions(int iPad); - - void RunAction(int iPad); - - static void LoadTrial(); - -#ifdef _XBOX_ONE - 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); - static int MustSignInReturned(void *pParam,int iPad,C4JStorage::EMessageResult result); - -#if defined(__PS3__) || defined(__PSVITA__) || defined(__ORBIS__) - static int MustSignInReturnedPSN(void *pParam,int iPad,C4JStorage::EMessageResult result); -#endif - static int Leaderboards_SignInReturned(void* pParam, bool bContinue, int iPad); - static int UnlockFullGame_SignInReturned(void *pParam,bool bContinue,int iPad); - static int ExitGameReturned(void *pParam,int iPad,C4JStorage::EMessageResult result); - -#ifdef __ORBIS__ - static void RefreshChatAndContentRestrictionsReturned_PlayGame(void *pParam); - static void RefreshChatAndContentRestrictionsReturned_Leaderboards(void *pParam); - - static int PlayOfflineReturned(void *pParam, int iPad, C4JStorage::EMessageResult result); -#endif -#endif - -#ifdef __PSVITA__ - static int SelectNetworkModeReturned(void *pParam,int iPad,C4JStorage::EMessageResult result); -#endif - -#ifdef __ORBIS__ - //EPatchCheck m_ePatchCheckState; - bool m_bRunGameChosen; - int32_t m_errorCode; - bool m_bErrorDialogRunning; -#endif -}; + void RunHelpAndOptions(int iPad); + + void RunAction(int iPad); + + static void LoadTrial(); + +#ifdef _XBOX_ONE + 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); + static int MustSignInReturned(void *pParam,int iPad,C4JStorage::EMessageResult result); + +#if defined(__PS3__) || defined(__PSVITA__) || defined(__ORBIS__) + static int MustSignInReturnedPSN(void *pParam,int iPad,C4JStorage::EMessageResult result); +#endif + static int Leaderboards_SignInReturned(void* pParam, bool bContinue, int iPad); + static int UnlockFullGame_SignInReturned(void *pParam,bool bContinue,int iPad); + static int ExitGameReturned(void *pParam,int iPad,C4JStorage::EMessageResult result); + +#ifdef __ORBIS__ + static void RefreshChatAndContentRestrictionsReturned_PlayGame(void *pParam); + static void RefreshChatAndContentRestrictionsReturned_Leaderboards(void *pParam); + + static int PlayOfflineReturned(void *pParam, int iPad, C4JStorage::EMessageResult result); +#endif +#endif + +#ifdef __PSVITA__ + static int SelectNetworkModeReturned(void *pParam,int iPad,C4JStorage::EMessageResult result); +#endif + +#ifdef __ORBIS__ + //EPatchCheck m_ePatchCheckState; + bool m_bRunGameChosen; + int32_t m_errorCode; + bool m_bErrorDialogRunning; +#endif +}; diff --git a/Minecraft.Client/Common/UI/UIScene_MinigamesCreateMenu.cpp b/Minecraft.Client/Common/UI/UIScene_MinigamesCreateMenu.cpp new file mode 100644 index 00000000..30a38cdd --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_MinigamesCreateMenu.cpp @@ -0,0 +1,397 @@ +#include "stdafx.h" +#include "UI.h" +#include "UIScene_MinigamesCreateMenu.h" +#include "../../Minecraft.h" +// mini gaimes menus By aRockefeler o aRockefort +// string localization by Fireblade +namespace +{ + const wchar_t* GetBattleModeLabel(int mode) + { + switch (mode) + { + case 1: return app.GetString(IDS_BATTLE_MODE_COMPETITIVE); + case 2: return app.GetString(IDS_BATTLE_MODE_CUSTOM); + case 0: + default: + return app.GetString(IDS_BATTLE_MODE_CASUAL); + } + } + // there's a bug with the slider that i haven't been able to fix, whe you move the slider + // the descripcion changes but it's not visible + // it will only appear if you change the button + // sorry if i didn't manage to fix it + const wchar_t* GetBattleModeDescription(int mode) + { + switch (mode) + { + case 1: + return app.GetString(IDS_BATTLE_MODE_COMPETITIVE_DESC); + case 2: + return app.GetString(IDS_BATTLE_MODE_CUSTOM_DESC); + case 0: + default: + return app.GetString(IDS_BATTLE_MODE_CASUAL_DESC); + } + } +} + +int UIScene_MinigamesCreateMenu::s_pendingMiniGameType = eMiniGame_Battle; + +void UIScene_MinigamesCreateMenu::SetPendingMiniGameType(int miniGameType) +{ + s_pendingMiniGameType = miniGameType; +} + +UIScene_MinigamesCreateMenu::UIScene_MinigamesCreateMenu(int iPad, void *initData, UILayer *parentLayer) + : IUIScene_StartGame(iPad, parentLayer) +{ + initialiseMovie(); + + MiniGamesCreateMenuInitData defaultMiniGamesParams = {}; + MiniGamesCreateMenuInitData *miniGamesParams = initData ? static_cast(initData) : &defaultMiniGamesParams; + + m_iMiniGameType = miniGamesParams->miniGameType; + m_iBattleModeSelection = 0; + m_bIgnoreInput = false; + m_bShowTexturePackDescription = false; + m_texturePackDescDisplayed = false; + m_iSetTexturePackDescription = -1; + m_bMultiplayerAllowed = ProfileManager.IsSignedInLive(m_iPad) && ProfileManager.AllowedToPlayMultiplayer(m_iPad); + m_bPublicGame = false; + + // although the names say "texturepack" the swf reuses those labels as + // part of the right panel of the mini game description + // that helps me avoid creating new things and reuse what already exist + m_labelGameName.init(IDS_BATTLE); + m_labelCreatedMode.init(L""); + m_labelSeed.init(L""); + m_sliderGamemode.init(GetBattleModeLabel(m_iBattleModeSelection), eControl_GameMode, 0, 2, m_iBattleModeSelection); + m_labelTexturePackName.init(L""); + m_labelTexturePackDescription.init(L""); + m_checkboxOnline.init(app.GetString(IDS_ONLINE_GAME), eControl_OnlineGame, m_bMultiplayerAllowed); + m_checkboxPublic.init(app.GetString(IDS_CHECKBOX_PUBLIC_GAME), eControl_PublicGame, false); + m_checkboxFriendsOfFriends.init(app.GetString(IDS_GAMEOPTION_FRIENDSOFRIENDS), eControl_FriendsOfFriends, false); + m_checkboxInviteOnly.init(app.GetString(IDS_GAMEOPTION_INVITEONLY), eControl_InviteOnly, false); + m_buttonSelectMaps.init(app.GetString(IDS_GAMEOPTION_SELECTMAPS), eControl_SelectMaps); + m_buttonMoreOptions.init(app.GetString(IDS_GAMEOPTION_MOREOPTIONS), eControl_MoreOptions); + m_buttonCreateGame.init(app.GetString(IDS_GAMEOPTION_CREATEGAME), eControl_CreateGame); + + m_MoreOptionsParams = LaunchMoreOptionsMenuInitData(); + m_MoreOptionsParams.iPad = iPad; + m_MoreOptionsParams.bGenerateOptions = FALSE; + m_MoreOptionsParams.bPVP = TRUE; + m_MoreOptionsParams.bTrust = TRUE; + m_MoreOptionsParams.bFireSpreads = TRUE; + m_MoreOptionsParams.bTNT = TRUE; + m_MoreOptionsParams.bHostPrivileges = FALSE; + m_MoreOptionsParams.bOnlineGame = m_bMultiplayerAllowed ? TRUE : FALSE; + m_MoreOptionsParams.bInviteOnly = FALSE; + m_MoreOptionsParams.bAllowFriendsOfFriends = FALSE; + + ApplyMiniGamePresentation(); + updateTooltips(); +} + +// this is where the main visual and functional part of minigamescreate +// is built +// labels, controls, icons, the image on the right panel etc +void UIScene_MinigamesCreateMenu::ApplyMiniGamePresentation() +{ + const wchar_t* miniGameName = L"Battle"; + const wchar_t* miniGameIconTexture = L"mg_battle_create"; + const wchar_t* miniGameIconArchive = L"Graphics\\BattleModeIcon.png"; + const wchar_t* miniGameScreenTexture = L"mg_battle_screen"; + const wchar_t* miniGameScreenArchive = L"Graphics\\GameModeGraphics\\BattleModeScreen.png"; + + m_labelGameName.setLabel(miniGameName, true, true); + m_labelCreatedMode.setLabel(L"", true, true); + m_labelSeed.setLabel(L"", true, true); + m_sliderGamemode.setLabel(GetBattleModeLabel(m_iBattleModeSelection), true, true); + m_buttonSelectMaps.setLabel(app.GetString(IDS_GAMEOPTION_SELECTMAPS), true, true); + m_buttonMoreOptions.setLabel(app.GetString(IDS_GAMEOPTION_MOREOPTIONS), true, true); + m_buttonCreateGame.setLabel(app.GetString(IDS_GAMEOPTION_CREATEGAME), true, true); + + m_checkboxOnline.SetEnable(m_bMultiplayerAllowed); + m_checkboxOnline.setChecked(m_MoreOptionsParams.bOnlineGame == TRUE); + if (m_checkboxPublic.getIggyValuePath()) + { + m_checkboxPublic.setChecked(m_bPublicGame); + } + if (m_checkboxFriendsOfFriends.getIggyValuePath()) + { + m_checkboxFriendsOfFriends.setChecked(m_MoreOptionsParams.bAllowFriendsOfFriends == TRUE); + } + if (m_checkboxInviteOnly.getIggyValuePath()) + { + m_checkboxInviteOnly.setChecked(m_MoreOptionsParams.bInviteOnly == TRUE); + } + + m_sliderDifficulty.setVisible(false); + m_sliderDifficulty.setHidden(true); + m_labelTexturePackName.setLabel(L"", true, true); + m_labelTexturePackName.setVisible(false); + m_labelTexturePackName.setHidden(true); + m_labelTexturePackName.UpdateControl(); + m_bitmapTexturePackIcon.setVisible(false); + m_bitmapTexturePackIcon.setHidden(true); + + byteArray miniGameIcon = app.getArchiveFile(miniGameIconArchive); + if (miniGameIcon.data && miniGameIcon.length > 0) + { + registerSubstitutionTexture(miniGameIconTexture, miniGameIcon.data, miniGameIcon.length, true); + m_bitmapIcon.setTextureName(miniGameIconTexture); + } + + byteArray miniGameScreen = app.getArchiveFile(miniGameScreenArchive); + if (miniGameScreen.data && miniGameScreen.length > 0) + { + registerSubstitutionTexture(miniGameScreenTexture, miniGameScreen.data, miniGameScreen.length, true); + m_bitmapComparison.setTextureName(miniGameScreenTexture); + } + + ApplyMiniGameOptionDescription(eControl_GameMode); + m_labelTexturePackDescription.UpdateControl(); +} + +void UIScene_MinigamesCreateMenu::ApplyMiniGameOptionDescription(int controlId) +{ + // the description on the right depens on the focused control in battle + // more options and create game inherit the text from the slider's current preset :v + + // fallback + const wchar_t* description = L""; + + switch (controlId) + { + case eControl_OnlineGame: + description = app.GetString(IDS_GAMEOPTION_ONLINE); + break; + case eControl_PublicGame: + description = app.GetString(IDS_GAMEOPTION_PUBLIC); + break; + case eControl_FriendsOfFriends: + description = app.GetString(IDS_GAMEOPTION_ALLOWFOF); + break; + case eControl_InviteOnly: + description = app.GetString(IDS_GAMEOPTION_INVITEONLY); + break; + case eControl_SelectMaps: + description = app.GetString(IDS_GAMEOPTION_SELECTMAPS); + break; + case eControl_GameMode: + description = GetBattleModeDescription(m_iBattleModeSelection); + break; + case eControl_MoreOptions: + case eControl_CreateGame: + description = GetBattleModeDescription(m_iBattleModeSelection); + break; + default: + break; + } + + m_labelTexturePackName.setLabel(L"", true, true); + m_labelTexturePackName.setVisible(false); + m_labelTexturePackName.setHidden(true); + m_labelTexturePackName.UpdateControl(); + m_labelTexturePackDescription.setLabel(description, true, true); + m_labelTexturePackDescription.setVisible(true); + m_labelTexturePackDescription.setHidden(false); + m_labelTexturePackDescription.UpdateControl(); +} + +void UIScene_MinigamesCreateMenu::SyncBattleCheckboxStates() +{ + // MiniGamesCreate/Join checkboxes are mirrored to moreoptionsparams + // in short if a checkbox is visible for example "Public Game" then when you go to more options you'll see + // Public games there as well + bool onlineGame = m_checkboxOnline.IsChecked(); + m_MoreOptionsParams.bOnlineGame = onlineGame; + + if (m_checkboxPublic.getIggyValuePath()) + { + m_bPublicGame = onlineGame ? m_checkboxPublic.IsChecked() : false; + } + + if (onlineGame) + { + m_MoreOptionsParams.bAllowFriendsOfFriends = m_checkboxFriendsOfFriends.getIggyValuePath() ? m_checkboxFriendsOfFriends.IsChecked() : false; + m_MoreOptionsParams.bInviteOnly = m_checkboxInviteOnly.getIggyValuePath() ? m_checkboxInviteOnly.IsChecked() : false; + } + else + { + m_MoreOptionsParams.bAllowFriendsOfFriends = false; + m_MoreOptionsParams.bInviteOnly = false; + + if (m_checkboxPublic.getIggyValuePath()) + m_checkboxPublic.setChecked(false); + if (m_checkboxFriendsOfFriends.getIggyValuePath()) + m_checkboxFriendsOfFriends.setChecked(false); + if (m_checkboxInviteOnly.getIggyValuePath()) + m_checkboxInviteOnly.setChecked(false); + + m_bPublicGame = false; + } +} + +void UIScene_MinigamesCreateMenu::updateTooltips() +{ + ui.SetTooltips(DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT, IDS_TOOLTIPS_BACK, -1, -1); +} + +void UIScene_MinigamesCreateMenu::updateComponents() +{ + m_parentLayer->showComponent(m_iPad, eUIComponent_Panorama, true); + m_parentLayer->showComponent(m_iPad, eUIComponent_Logo, false); + + if (m_iSetTexturePackDescription >= 0) + { + ApplyMiniGameOptionDescription(m_iSetTexturePackDescription); + m_iSetTexturePackDescription = -1; + } +} + +void UIScene_MinigamesCreateMenu::tick() +{ + UIScene::tick(); +} + +UIControl* UIScene_MinigamesCreateMenu::GetMainPanel() +{ + return &m_controlMainPanel; +} + +void UIScene_MinigamesCreateMenu::handleTouchBoxRebuild() +{ +} + +wstring UIScene_MinigamesCreateMenu::getMoviePath() +{ + return L"MiniGamesCreateMenu"; +} + +void UIScene_MinigamesCreateMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) +{ + if (m_bIgnoreInput) + return; + + ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released); + + switch (key) + { + case ACTION_MENU_CANCEL: + if (pressed) + { + navigateBack(); + handled = true; + } + break; + case ACTION_MENU_OK: +#ifdef __ORBIS__ + case ACTION_MENU_TOUCHPAD_PRESS: +#endif + case ACTION_MENU_UP: + case ACTION_MENU_DOWN: + case ACTION_MENU_LEFT: + case ACTION_MENU_RIGHT: + case ACTION_MENU_OTHER_STICK_UP: + case ACTION_MENU_OTHER_STICK_DOWN: + sendInputToMovie(key, repeat, pressed, released); + SyncBattleCheckboxStates(); + handled = true; + break; + } +} + +void UIScene_MinigamesCreateMenu::handlePress(F64 controlId, F64 childId) +{ + (void)childId; + + if (m_bIgnoreInput) + return; + + switch (static_cast(controlId)) + { + case eControl_MoreOptions: + ui.NavigateToScene(m_iPad, eUIScene_LaunchMoreOptionsMenu, &m_MoreOptionsParams); + break; + case eControl_SelectMaps: + // this opens the mapselect scene + ui.NavigateToScene(m_iPad, eUIScene_MinigamesMapSelectMenu, nullptr); + break; + case eControl_CreateGame: + ui.PlayUISFX(eSFX_Press); + checkStateAndStartGame(); + break; + case eControl_OnlineGame: + case eControl_PublicGame: + case eControl_FriendsOfFriends: + case eControl_InviteOnly: + SyncBattleCheckboxStates(); + break; + } +} + +void UIScene_MinigamesCreateMenu::handleSliderMove(F64 sliderId, F64 currentValue) +{ + if (static_cast(sliderId) != eControl_GameMode) + return; + + int value = static_cast(currentValue); + m_iBattleModeSelection = value < 0 ? 0 : (value > 2 ? 2 : value); + m_sliderGamemode.handleSliderMove(m_iBattleModeSelection); + m_sliderGamemode.setLabel(GetBattleModeLabel(m_iBattleModeSelection)); + ApplyMiniGameOptionDescription(eControl_GameMode); +} + +void UIScene_MinigamesCreateMenu::handleGainFocus(bool navBack) +{ + m_iMiniGameType = s_pendingMiniGameType; + if (navBack) + { + SyncBattleCheckboxStates(); + } + ApplyMiniGamePresentation(); + SetFocusToElement(eControl_GameMode); +} + +bool UIScene_MinigamesCreateMenu::canMoveSlider(F64 sliderId) +{ + return static_cast(sliderId) == eControl_GameMode; +} + +void UIScene_MinigamesCreateMenu::handleTimerComplete(int id) +{ + (void)id; +} + +void UIScene_MinigamesCreateMenu::handleFocusChange(F64 controlId, F64 childId) +{ + (void)childId; + m_iSetTexturePackDescription = static_cast(controlId); + ApplyMiniGameOptionDescription(static_cast(controlId)); +} + +void UIScene_MinigamesCreateMenu::handleSelectionChanged(F64 selectedId) +{ + m_iSetTexturePackDescription = static_cast(selectedId); + ApplyMiniGameOptionDescription(static_cast(selectedId)); +} + +void UIScene_MinigamesCreateMenu::checkStateAndStartGame() +{ + LaunchGame(); +} + +void UIScene_MinigamesCreateMenu::LaunchGame() +{ + // this is for debugging + // if the menu is already complete you can remove this + app.DebugPrintf("[MGDBG] MiniGamesCreateMenu Create pressed for type=%d mode=%d online=%d public=%d friends=%d invite=%d\n", + m_iMiniGameType, + m_iBattleModeSelection, + m_MoreOptionsParams.bOnlineGame ? 1 : 0, + m_bPublicGame ? 1 : 0, + m_MoreOptionsParams.bAllowFriendsOfFriends ? 1 : 0, + m_MoreOptionsParams.bInviteOnly ? 1 : 0); +} diff --git a/Minecraft.Client/Common/UI/UIScene_MinigamesCreateMenu.h b/Minecraft.Client/Common/UI/UIScene_MinigamesCreateMenu.h new file mode 100644 index 00000000..5f8d4834 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_MinigamesCreateMenu.h @@ -0,0 +1,98 @@ +#pragma once + +#include "UIEnums.h" +#include "UIStructs.h" +#include "IUIScene_StartGame.h" + +class UIScene_MinigamesCreateMenu : public IUIScene_StartGame +{ +private: + static constexpr EUIScene kMiniGamesCreateScene = eUIScene_MinigamesCreateMenu; + + enum EControls + { + eControl_GameMode, + eControl_Difficulty, + eControl_MoreOptions, + eControl_CreateGame, + eControl_OnlineGame, + eControl_PublicGame, + eControl_FriendsOfFriends, + eControl_InviteOnly, + eControl_SelectMaps, + }; + + UIControl m_controlMainPanel; + UIControl_Label m_labelGameName; + UIControl_Label m_labelSeed; + UIControl_Label m_labelCreatedMode; + UIControl_Button m_buttonSelectMaps; + UIControl_Button m_buttonMoreOptions; + UIControl_Button m_buttonCreateGame; + UIControl_Slider m_sliderDifficulty; + UIControl_Slider m_sliderGamemode; + UIControl_BitmapIcon m_bitmapIcon; + UIControl_CheckBox m_checkboxOnline; + UIControl_CheckBox m_checkboxPublic; + UIControl_CheckBox m_checkboxFriendsOfFriends; + UIControl_CheckBox m_checkboxInviteOnly; + + UI_BEGIN_MAP_ELEMENTS_AND_NAMES(IUIScene_StartGame) + UI_MAP_ELEMENT(m_controlMainPanel, "MainPanel") + UI_BEGIN_MAP_CHILD_ELEMENTS(m_controlMainPanel) + UI_MAP_ELEMENT(m_labelGameName, "GameName") + UI_MAP_ELEMENT(m_labelCreatedMode, "CreatedMode") + UI_MAP_ELEMENT(m_labelSeed, "Seed") + UI_MAP_ELEMENT(m_sliderGamemode, "GameModeToggle") + UI_MAP_ELEMENT(m_checkboxOnline, "CheckboxOnline") + UI_MAP_ELEMENT(m_checkboxPublic, "CheckboxPublic") + UI_MAP_ELEMENT(m_checkboxFriendsOfFriends, "CheckboxFriendsOfFriends") + UI_MAP_ELEMENT(m_checkboxInviteOnly, "CheckboxInviteOnly") + UI_MAP_ELEMENT(m_buttonSelectMaps, "SelectMaps") + UI_MAP_ELEMENT(m_buttonMoreOptions, "MoreOptions") + UI_MAP_ELEMENT(m_buttonCreateGame, "LoadSettings") + UI_MAP_ELEMENT(m_sliderDifficulty, "Difficulty") + UI_MAP_ELEMENT(m_bitmapIcon, "LevelIcon") + UI_END_MAP_CHILD_ELEMENTS() + UI_END_MAP_ELEMENTS_AND_NAMES() + + int m_iMiniGameType; + int m_iBattleModeSelection; + bool m_bMultiplayerAllowed; + bool m_bPublicGame; + + static int s_pendingMiniGameType; + +public: + UIScene_MinigamesCreateMenu(int iPad, void *initData, UILayer *parentLayer); + static void SetPendingMiniGameType(int miniGameType); + + virtual void updateTooltips(); + virtual void updateComponents(); + virtual EUIScene getSceneType() { return kMiniGamesCreateScene; } + virtual void tick(); + virtual UIControl* GetMainPanel(); + virtual void handleTouchBoxRebuild(); + +protected: + virtual wstring getMoviePath(); + +public: + virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled); + virtual void handleTimerComplete(int id); + virtual void handleFocusChange(F64 controlId, F64 childId); + virtual void handleSelectionChanged(F64 selectedId); + +protected: + void handlePress(F64 controlId, F64 childId); + void handleSliderMove(F64 sliderId, F64 currentValue); + virtual void handleGainFocus(bool navBack); + virtual bool canMoveSlider(F64 sliderId); + +private: + void ApplyMiniGamePresentation(); + void ApplyMiniGameOptionDescription(int controlId); + void SyncBattleCheckboxStates(); + virtual void checkStateAndStartGame(); + void LaunchGame(); +}; diff --git a/Minecraft.Client/Common/UI/UIScene_MinigamesJoinMenu.cpp b/Minecraft.Client/Common/UI/UIScene_MinigamesJoinMenu.cpp new file mode 100644 index 00000000..0686a841 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_MinigamesJoinMenu.cpp @@ -0,0 +1,275 @@ +#include "stdafx.h" +#include "UI.h" +#include "UIScene_MinigamesJoinMenu.h" +#include "../../Minecraft.h" +// mini games menus By aRockefeler o aRockefort +namespace +{ + // Join filtra partidas por preset, en vez de configurar reglas completas como Create. + const wchar_t* GetJoinModeLabel(int mode) + { + switch (mode) + { + case 1: return app.GetString(IDS_BATTLE_MODE_CASUAL); + case 2: return app.GetString(IDS_BATTLE_MODE_COMPETITIVE); + case 3: return app.GetString(IDS_BATTLE_MODE_CUSTOM); + case 0: + default: + return app.GetString(IDS_BATTLE_MODE_ANY); + } + } + + const wchar_t* GetJoinModeDescription(int mode) + { + switch (mode) + { + case 1: + return app.GetString(IDS_BATTLE_JOIN_CASUAL_DESC); + case 2: + return app.GetString(IDS_BATTLE_JOIN_COMPETITIVE_DESC); + case 3: + return app.GetString(IDS_BATTLE_JOIN_CUSTOM_DESC); + case 0: + default: + return app.GetString(IDS_BATTLE_JOIN_ANY_DESC); + } + } +} + +int UIScene_MinigamesJoinMenu::s_pendingMiniGameType = eMiniGame_Battle; + +void UIScene_MinigamesJoinMenu::SetPendingMiniGameType(int miniGameType) +{ + s_pendingMiniGameType = miniGameType; +} + +UIScene_MinigamesJoinMenu::UIScene_MinigamesJoinMenu(int iPad, void *initData, UILayer *parentLayer) + : IUIScene_StartGame(iPad, parentLayer) +{ + initialiseMovie(); + + m_iMiniGameType = s_pendingMiniGameType; + m_iJoinModeSelection = 0; + m_bIgnoreInput = false; + m_bShowTexturePackDescription = false; + m_texturePackDescDisplayed = false; + m_iSetTexturePackDescription = -1; + + // Igual que en Create, el panel derecho del SWF sigue usando labels heredados + // con nombres de TexturePack aunque hoy funcionen como descripcion del modo. + m_labelGameName.init(IDS_BATTLE); + m_buttonMoreOptions.init(IDS_MORE_OPTIONS, eControl_MoreOptions); + m_buttonJoin.init(IDS_JOIN_GAME, eControl_Join); + m_sliderGamemode.init(GetJoinModeLabel(m_iJoinModeSelection), eControl_GameMode, 0, 3, m_iJoinModeSelection); + m_labelTexturePackName.init(L""); + m_labelTexturePackDescription.init(L""); + + ApplyMiniGamePresentation(); + updateTooltips(); +} + +void UIScene_MinigamesJoinMenu::ApplyMiniGamePresentation() +{ + const wchar_t* miniGameName = L"Battle"; + const wchar_t* miniGameIconTexture = L"mg_battle_join"; + const wchar_t* miniGameIconArchive = L"Graphics\\BattleModeIcon.png"; + const wchar_t* miniGameScreenTexture = L"mg_battle_join_screen"; + const wchar_t* miniGameScreenArchive = L"Graphics\\GameModeGraphics\\BattleModeScreen.png"; + + // Join Battle es un menu reducido: solo Game Type, More Options, Join e + // imagen/presentacion del minijuego. + m_labelGameName.setLabel(miniGameName, true, true); + m_buttonMoreOptions.setLabel(IDS_MORE_OPTIONS, true, true); + m_buttonJoin.setLabel(IDS_JOIN_GAME, true, true); + m_sliderGamemode.setLabel(GetJoinModeLabel(m_iJoinModeSelection), true, true); + + byteArray miniGameIcon = app.getArchiveFile(miniGameIconArchive); + if (miniGameIcon.data && miniGameIcon.length > 0) + { + registerSubstitutionTexture(miniGameIconTexture, miniGameIcon.data, miniGameIcon.length, true); + m_bitmapIcon.setTextureName(miniGameIconTexture); + } + + byteArray miniGameScreen = app.getArchiveFile(miniGameScreenArchive); + if (miniGameScreen.data && miniGameScreen.length > 0) + { + registerSubstitutionTexture(miniGameScreenTexture, miniGameScreen.data, miniGameScreen.length, true); + m_bitmapComparison.setTextureName(miniGameScreenTexture); + } + + ApplyMiniGameOptionDescription(eControl_GameMode); +} +void UIScene_MinigamesJoinMenu::ApplyMiniGameOptionDescription(int controlId) +{ + // En Join, More Options y Join muestran la misma descripcion del preset + // actual del slider para mantener el panel derecho consistente. + const wchar_t* description = GetJoinModeDescription(m_iJoinModeSelection); + + switch (controlId) + { + case eControl_GameMode: + case eControl_MoreOptions: + case eControl_Join: + break; + default: + break; + } + + m_labelTexturePackName.setLabel(L"", true, true); + m_labelTexturePackName.setVisible(false); + m_labelTexturePackName.setHidden(true); + m_labelTexturePackName.UpdateControl(); + m_labelTexturePackDescription.setLabel(description, true, true); + m_labelTexturePackDescription.setVisible(true); + m_labelTexturePackDescription.setHidden(false); + m_labelTexturePackDescription.UpdateControl(); +} + +void UIScene_MinigamesJoinMenu::updateTooltips() +{ + ui.SetTooltips(DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT, IDS_TOOLTIPS_BACK, -1, -1); +} + +void UIScene_MinigamesJoinMenu::updateComponents() +{ + m_parentLayer->showComponent(m_iPad, eUIComponent_Panorama, true); + m_parentLayer->showComponent(m_iPad, eUIComponent_Logo, false); + + if (m_iSetTexturePackDescription >= 0) + { + ApplyMiniGameOptionDescription(m_iSetTexturePackDescription); + m_iSetTexturePackDescription = -1; + } +} + +void UIScene_MinigamesJoinMenu::tick() +{ + UIScene::tick(); +} + +UIControl* UIScene_MinigamesJoinMenu::GetMainPanel() +{ + return &m_controlMainPanel; +} +// here the code ask for the swf +wstring UIScene_MinigamesJoinMenu::getMoviePath() +{ + return L"MiniGamesJoinMenu"; +} + +void UIScene_MinigamesJoinMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) +{ + if (m_bIgnoreInput) + return; + + ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released); + + switch (key) + { + case ACTION_MENU_CANCEL: + if (pressed) + { + navigateBack(); + handled = true; + } + break; + case ACTION_MENU_OK: +#ifdef __ORBIS__ + case ACTION_MENU_TOUCHPAD_PRESS: +#endif + case ACTION_MENU_UP: + case ACTION_MENU_DOWN: + case ACTION_MENU_LEFT: + case ACTION_MENU_RIGHT: + case ACTION_MENU_OTHER_STICK_UP: + case ACTION_MENU_OTHER_STICK_DOWN: + sendInputToMovie(key, repeat, pressed, released); + handled = true; + break; + } +} + +void UIScene_MinigamesJoinMenu::handlePress(F64 controlId, F64 childId) +{ + (void)childId; + + if (m_bIgnoreInput) + return; + + switch (static_cast(controlId)) + { + case eControl_MoreOptions: + ui.NavigateToScene(m_iPad, eUIScene_LaunchMoreOptionsMenu, &m_MoreOptionsParams); + break; + case eControl_Join: + ui.PlayUISFX(eSFX_Press); + LaunchGame(); + break; + } +} + +void UIScene_MinigamesJoinMenu::handleSliderMove(F64 sliderId, F64 currentValue) +{ + if (static_cast(sliderId) != eControl_GameMode) + return; + + // there's a bug with the slider that i haven't been able to fix, whe you move the slider + // the descripcion changes but it's not visible + // it will only appear if you change the button + // sorry if i didn't manage to fix it + int value = static_cast(currentValue); + m_iJoinModeSelection = value < 0 ? 0 : (value > 3 ? 3 : value); + m_sliderGamemode.handleSliderMove(m_iJoinModeSelection); + m_sliderGamemode.setLabel(GetJoinModeLabel(m_iJoinModeSelection)); + m_iSetTexturePackDescription = eControl_GameMode; + ApplyMiniGameOptionDescription(eControl_GameMode); +} + +void UIScene_MinigamesJoinMenu::handleGainFocus(bool navBack) +{ + (void)navBack; + m_iMiniGameType = s_pendingMiniGameType; + ApplyMiniGamePresentation(); + SetFocusToElement(eControl_GameMode); +} + +bool UIScene_MinigamesJoinMenu::canMoveSlider(F64 sliderId) +{ + return static_cast(sliderId) == eControl_GameMode; +} + +void UIScene_MinigamesJoinMenu::handleTimerComplete(int id) +{ + (void)id; +} + +void UIScene_MinigamesJoinMenu::handleFocusChange(F64 controlId, F64 childId) +{ + (void)childId; + m_iSetTexturePackDescription = static_cast(controlId); + ApplyMiniGameOptionDescription(static_cast(controlId)); +} + +void UIScene_MinigamesJoinMenu::handleSelectionChanged(F64 selectedId) +{ + m_iSetTexturePackDescription = static_cast(selectedId); + ApplyMiniGameOptionDescription(static_cast(selectedId)); +} + +void UIScene_MinigamesJoinMenu::handleTouchBoxRebuild() +{ +} + +void UIScene_MinigamesJoinMenu::checkStateAndStartGame() +{ + LaunchGame(); +} + +void UIScene_MinigamesJoinMenu::LaunchGame() +{ + + // this is the same as Minigamescreate + // it's used for debugging + // if you want to remove it when everthing is ready, remove it + app.DebugPrintf("[MGDBG] MiniGamesJoinMenu Join pressed for type=%d mode=%d\n", m_iMiniGameType, m_iJoinModeSelection); +} diff --git a/Minecraft.Client/Common/UI/UIScene_MinigamesJoinMenu.h b/Minecraft.Client/Common/UI/UIScene_MinigamesJoinMenu.h new file mode 100644 index 00000000..00ea140b --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_MinigamesJoinMenu.h @@ -0,0 +1,69 @@ +#pragma once + +#include "IUIScene_StartGame.h" + +class UIScene_MinigamesJoinMenu : public IUIScene_StartGame +{ +private: + static constexpr EUIScene kMiniGamesJoinScene = eUIScene_MinigamesJoinMenu; + + enum EControls + { + eControl_GameMode, + eControl_MoreOptions, + eControl_Join, + }; + + UIControl m_controlMainPanel; + UIControl_Label m_labelGameName; + UIControl_Button m_buttonMoreOptions; + UIControl_Button m_buttonJoin; + UIControl_Slider m_sliderGamemode; + UIControl_BitmapIcon m_bitmapIcon; + + UI_BEGIN_MAP_ELEMENTS_AND_NAMES(IUIScene_StartGame) + UI_MAP_ELEMENT(m_controlMainPanel, "MainPanel") + UI_BEGIN_MAP_CHILD_ELEMENTS(m_controlMainPanel) + UI_MAP_ELEMENT(m_labelGameName, "GameName") + UI_MAP_ELEMENT(m_sliderGamemode, "GameModeToggle") + UI_MAP_ELEMENT(m_buttonMoreOptions, "MoreOptions") + UI_MAP_ELEMENT(m_buttonJoin, "LoadSettings") + UI_MAP_ELEMENT(m_bitmapIcon, "LevelIcon") + UI_END_MAP_CHILD_ELEMENTS() + UI_END_MAP_ELEMENTS_AND_NAMES() + + int m_iMiniGameType; + int m_iJoinModeSelection; + + static int s_pendingMiniGameType; + +public: + UIScene_MinigamesJoinMenu(int iPad, void *initData, UILayer *parentLayer); + static void SetPendingMiniGameType(int miniGameType); + + virtual void updateTooltips(); + virtual void updateComponents(); + virtual EUIScene getSceneType() { return kMiniGamesJoinScene; } + virtual void tick(); + virtual UIControl* GetMainPanel(); + +protected: + virtual wstring getMoviePath(); + virtual void handleGainFocus(bool navBack); + virtual bool canMoveSlider(F64 sliderId); + virtual void checkStateAndStartGame(); + +public: + virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled); + virtual void handleTimerComplete(int id); + virtual void handleFocusChange(F64 controlId, F64 childId); + virtual void handleSelectionChanged(F64 selectedId); + virtual void handleTouchBoxRebuild(); + +private: + void handlePress(F64 controlId, F64 childId); + void handleSliderMove(F64 sliderId, F64 currentValue); + void ApplyMiniGamePresentation(); + void ApplyMiniGameOptionDescription(int controlId); + void LaunchGame(); +}; diff --git a/Minecraft.Client/Common/UI/UIScene_MinigamesMapSelectMenu.cpp b/Minecraft.Client/Common/UI/UIScene_MinigamesMapSelectMenu.cpp new file mode 100644 index 00000000..49d0ea72 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_MinigamesMapSelectMenu.cpp @@ -0,0 +1,49 @@ +#include "stdafx.h" +#include "UI.h" +#include "UIScene_MinigamesMapSelectMenu.h" +// Mini Games Map select are incomplete +// maybe you can finish it +// sorry i didn't finish it, if you want me to finish it let me know on discord +UIScene_MinigamesMapSelectMenu::UIScene_MinigamesMapSelectMenu(int iPad, void *initData, UILayer *parentLayer) + : UIScene(iPad, parentLayer) +{ + + initialiseMovie(); + updateTooltips(); +} + +void UIScene_MinigamesMapSelectMenu::updateTooltips() +{ + ui.SetTooltips(DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT, IDS_TOOLTIPS_BACK, -1, -1); +} + +void UIScene_MinigamesMapSelectMenu::updateComponents() +{ + + m_parentLayer->showComponent(m_iPad, eUIComponent_Panorama, true); + m_parentLayer->showComponent(m_iPad, eUIComponent_Logo, false); +} + +UIControl* UIScene_MinigamesMapSelectMenu::GetMainPanel() +{ + return &m_controlMainPanel; +} + +wstring UIScene_MinigamesMapSelectMenu::getMoviePath() +{ + return L"MapSelectMenu"; +} + +void UIScene_MinigamesMapSelectMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) +{ + + if (key == ACTION_MENU_CANCEL && pressed) + { + navigateBack(); + handled = true; + return; + } + + sendInputToMovie(key, repeat, pressed, released); + handled = true; +} diff --git a/Minecraft.Client/Common/UI/UIScene_MinigamesMapSelectMenu.h b/Minecraft.Client/Common/UI/UIScene_MinigamesMapSelectMenu.h new file mode 100644 index 00000000..69e7d579 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_MinigamesMapSelectMenu.h @@ -0,0 +1,28 @@ +#pragma once + +#include "UIEnums.h" +#include "UIScene.h" + +class UIScene_MinigamesMapSelectMenu : public UIScene +{ +private: + UIControl m_controlMainPanel; + + UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) + UI_MAP_ELEMENT(m_controlMainPanel, "MainPanel") + UI_END_MAP_ELEMENTS_AND_NAMES() + +public: + UIScene_MinigamesMapSelectMenu(int iPad, void *initData, UILayer *parentLayer); + + virtual EUIScene getSceneType() { return ::eUIScene_MinigamesMapSelectMenu; } + virtual bool hidesLowerScenes() { return true; } + + virtual void updateTooltips(); + virtual void updateComponents(); + virtual UIControl* GetMainPanel(); + virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled); + +protected: + virtual wstring getMoviePath(); +}; diff --git a/Minecraft.Client/Common/UI/UIScene_MinigamesMenu.cpp b/Minecraft.Client/Common/UI/UIScene_MinigamesMenu.cpp new file mode 100644 index 00000000..d701f47b --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_MinigamesMenu.cpp @@ -0,0 +1,483 @@ +#include "stdafx.h" +#include "UI.h" +#include "UIScene_MinigamesMenu.h" +#include "UIStructs.h" +#include "UIScene_MinigamesCreateMenu.h" +#include "UIScene_MinigamesJoinMenu.h" +// MiniGamesMenu By aRockefeler o Rockefort +namespace +{ + // these scenes are the two main destinations for the minigames menus + constexpr EUIScene kMiniGamesCreateScene = eUIScene_MinigamesCreateMenu; + constexpr EUIScene kMiniGamesJoinScene = eUIScene_MinigamesJoinMenu; +} + +UIScene_MinigamesMenu::UIScene_MinigamesMenu(int iPad, void *initData, UILayer *parentLayer) + : UIScene(iPad, parentLayer) + , m_isApplyingMiniGamesTab(false) + , m_removedFooterLabel(false) + , m_activeTab(eTab_Create) + , m_selectedCreateIndex(0) + , m_selectedJoinIndex(0) + , m_selectedFriendsIndex(0) +{ + app.DebugPrintf("[MGDBG] UIScene_MinigamesMenu ctor pad=%d\n", iPad); // for debugging + initialiseMovie(); + ApplyMiniGamesLabels(); +} +// here the code ask for the swf +std::wstring UIScene_MinigamesMenu::getMoviePath() +{ + app.DebugPrintf("[MGDBG] UIScene_MinigamesMenu getMoviePath -> MiniGamesMenu\n");// and this is for debugging too + return L"MiniGamesMenu"; +} + +void UIScene_MinigamesMenu::ApplyMiniGamesLabels() +{ + m_labelCreateTitle.init(IDS_CREATE); + m_labelJoinTitle.init(IDS_JOIN); + m_labelFriendsTitle.init(IDS_FRIENDS); +} + +int UIScene_MinigamesMenu::GetMovieTabIndex() const +{ + switch (m_activeTab) + { + case eTab_Create: + return 0; + case eTab_Join: + return 1; + case eTab_Friends: + default: + return 2; + } +} + +int UIScene_MinigamesMenu::ClampSelectionIndex(int index, int itemCount) const +{ + if (itemCount <= 0) + return 0; + if (index < 0) + return 0; + if (index >= itemCount) + return itemCount - 1; + return index; +} + +void UIScene_MinigamesMenu::RefreshMiniGamesContent() +{ + ApplyMiniGamesLabels(); + + // reloads the visible menu content + auto applyMenuIcon = [this](UIControl_SaveList& list, int itemIndex, const wchar_t* textureName, const wchar_t* archivePath) + { + byteArray iconBytes = app.getArchiveFile(archivePath); + if (iconBytes.data && iconBytes.length > 0) + { + registerSubstitutionTexture(textureName, iconBytes.data, iconBytes.length, true); + list.setTextureName(itemIndex, textureName); + } + }; + + auto populateMiniGamesList = [this, &applyMenuIcon](UIControl_SaveList& list, int& selectedIndex) + { + if (list.getIggyValuePath() == nullptr) + return; + + // when entering battle this code ask for the icon + // then gives it a name like mg_battle exacttly as it says there + // and then applies it to the menu + list.clearList(); + list.addItem(L"Battle"); + applyMenuIcon(list, list.getItemCount() - 1, L"mg_battle", L"Graphics\\BattleModeIcon.png"); + selectedIndex = ClampSelectionIndex(selectedIndex, list.getItemCount()); + list.setCurrentSelection(selectedIndex); + }; + + populateMiniGamesList(m_buttonListCreate, m_selectedCreateIndex); + populateMiniGamesList(m_buttonListJoin, m_selectedJoinIndex); + + if (m_buttonListFriends.getIggyValuePath() != nullptr) + { + m_buttonListFriends.clearList(); + m_buttonListFriends.addItem(L"Work in progress"); + m_selectedFriendsIndex = ClampSelectionIndex(m_selectedFriendsIndex, m_buttonListFriends.getItemCount()); + m_buttonListFriends.setCurrentSelection(m_selectedFriendsIndex); + } +} + +int UIScene_MinigamesMenu::GetSelectedMiniGameType() +{ + switch (m_activeTab) + { + case eTab_Create: + return ClampSelectionIndex(m_selectedCreateIndex, m_buttonListCreate.getItemCount()); + case eTab_Join: + return ClampSelectionIndex(m_selectedJoinIndex, m_buttonListJoin.getItemCount()); + default: + return -1; + } +} +// before opening battle this checks which tab is active +// create opens minigamescreatemenu +// while join opens minigamesjoinmenu +void UIScene_MinigamesMenu::NavigateToSelectedMiniGame() +{ + if (m_activeTab != eTab_Create && m_activeTab != eTab_Join) + return; + + const int miniGameType = GetSelectedMiniGameType(); + // for now the menu only has battle + // i removed tumble and glide + // perhaps you can add them back + if (miniGameType != eMiniGame_Battle) + return; + + MiniGamesCreateMenuInitData *params = new MiniGamesCreateMenuInitData(); + params->iPad = m_iPad; + params->miniGameType = miniGameType; + if (m_activeTab == eTab_Create) + { + UIScene_MinigamesCreateMenu::SetPendingMiniGameType(miniGameType); + ui.NavigateToScene(m_iPad, kMiniGamesCreateScene, params); + } + else + { + UIScene_MinigamesJoinMenu::SetPendingMiniGameType(miniGameType); + ui.NavigateToScene(m_iPad, kMiniGamesJoinScene, params); + } +} + +void UIScene_MinigamesMenu::RemoveFooterLabel() +{ + if (!m_removedFooterLabel) + { + + if (m_funcShowSaveSizeBar != 0)//this is used to disable the save size bar + { + IggyDataValue result; + IggyDataValue value[1]; + value[0].type = IGGY_DATATYPE_boolean; + value[0].boolval = false; + IggyPlayerCallMethodRS(getMovie(), &result, IggyPlayerRootPath(getMovie()), m_funcShowSaveSizeBar, 1, value); + } + + if (m_labelNoGames.getIggyValuePath() != nullptr) + { + m_labelNoGames.setLabel(L""); + m_labelNoGames.setVisible(false); + removeControl(&m_labelNoGames, true); + } + + if (m_controlCreateTimer.getIggyValuePath() != nullptr) + { + m_controlCreateTimer.setVisible(false); + m_controlCreateTimer.setHidden(true); + } + + if (m_controlJoinTimer.getIggyValuePath() != nullptr) + { + m_controlJoinTimer.setVisible(false); + m_controlJoinTimer.setHidden(true); + } + + if (m_controlFriendsTimer.getIggyValuePath() != nullptr) + { + m_controlFriendsTimer.setVisible(false); + m_controlFriendsTimer.setHidden(true); + } + + if (m_controlCreateFooter.getIggyValuePath() != nullptr) + { + m_controlCreateFooter.setVisible(false); + m_controlCreateFooter.setHidden(true); + } + + m_removedFooterLabel = true; + } +} + +void UIScene_MinigamesMenu::ApplyMiniGamesCurrentTab(bool setFocus) +{ + if (m_isApplyingMiniGamesTab) + return; + + m_isApplyingMiniGamesTab = true; + + // this is used to align the swf and the code + ApplyMiniGamesLabels(); + RefreshMiniGamesContent(); + + if (m_funcSetActiveTab != 0) + { + IggyDataValue result; + IggyDataValue value[1]; + value[0].type = IGGY_DATATYPE_number; + value[0].number = static_cast(GetMovieTabIndex()); + IggyPlayerCallMethodRS(getMovie(), &result, IggyPlayerRootPath(getMovie()), m_funcSetActiveTab, 1, value); + } + + if (m_controlCreateTimer.getIggyValuePath() != nullptr) { m_controlCreateTimer.setVisible(false); m_controlCreateTimer.setHidden(true); } + if (m_controlJoinTimer.getIggyValuePath() != nullptr) { m_controlJoinTimer.setVisible(false); m_controlJoinTimer.setHidden(true); } + if (m_controlFriendsTimer.getIggyValuePath() != nullptr) { m_controlFriendsTimer.setVisible(false); m_controlFriendsTimer.setHidden(true); } + if (m_controlCreateFooter.getIggyValuePath() != nullptr) { m_controlCreateFooter.setVisible(false); m_controlCreateFooter.setHidden(true); } + if (m_labelNoGames.getIggyValuePath() != nullptr) { m_labelNoGames.setLabel(L""); m_labelNoGames.setVisible(false); } + + if (setFocus) + { + switch (m_activeTab) + { + case eTab_Create: + if (m_buttonListCreate.getIggyValuePath() != nullptr) + SetFocusToElement(eControl_CreateList); + break; + case eTab_Join: + if (m_buttonListJoin.getIggyValuePath() != nullptr) + SetFocusToElement(eControl_JoinList); + break; + case eTab_Friends: + if (m_buttonListFriends.getIggyValuePath() != nullptr) + SetFocusToElement(eControl_FriendsList); + break; + } + } + + RemoveFooterLabel(); + m_isApplyingMiniGamesTab = false; +} + +void UIScene_MinigamesMenu::SetMiniGamesTab(int tab, bool setFocus) +{ + if (tab < eTab_Create) + tab = eTab_Friends; + else if (tab > eTab_Friends) + tab = eTab_Create; + + m_activeTab = tab; + ApplyMiniGamesCurrentTab(setFocus); + updateTooltips(); +} + +void UIScene_MinigamesMenu::updateTooltips() +{ + ui.SetTooltips(m_iPad, IDS_TOOLTIPS_SELECT, IDS_TOOLTIPS_BACK, -1, -1, -1, -1, -1, -1, IDS_TOOLTIPS_NAVIGATE); +} + +void UIScene_MinigamesMenu::handleGainFocus(bool navBack) +{ + app.DebugPrintf("[MGDBG] UIScene_MinigamesMenu handleGainFocus navBack=%d\n", navBack ? 1 : 0); // holy debugging! + UIScene::handleGainFocus(navBack); + m_parentLayer->showComponent(m_iPad, eUIComponent_Logo, false); + // if we return from minigamesjoin we keep the active tab + // that didn't happen before and it would go back to create + // that happend because i wasn't keeping the tab active + // now is fixed + SetMiniGamesTab(navBack ? m_activeTab : eTab_Create, true); + RemoveFooterLabel(); +} + +void UIScene_MinigamesMenu::handleLoseFocus() +{ + m_parentLayer->showComponent(m_iPad, eUIComponent_Logo, true); +} + +void UIScene_MinigamesMenu::handleInitFocus(F64 controlId, F64 childId) +{ + SetMiniGamesTab(eTab_Create, true); + RemoveFooterLabel(); +} + +void UIScene_MinigamesMenu::handleFocusChange(F64 controlId, F64 childId) +{ + switch (static_cast(controlId)) + { + case eControl_TabCreate: + SetMiniGamesTab(eTab_Create, false); + break; + case eControl_TabJoin: + SetMiniGamesTab(eTab_Join, false); + break; + case eControl_TabFriends: + SetMiniGamesTab(eTab_Friends, false); + break; + case eControl_CreateList: + m_selectedCreateIndex = ClampSelectionIndex(static_cast(childId), m_buttonListCreate.getItemCount()); + m_buttonListCreate.updateChildFocus(m_selectedCreateIndex); + m_buttonListCreate.setCurrentSelection(m_selectedCreateIndex); + break; + case eControl_JoinList: + m_selectedJoinIndex = ClampSelectionIndex(static_cast(childId), m_buttonListJoin.getItemCount()); + m_buttonListJoin.updateChildFocus(m_selectedJoinIndex); + m_buttonListJoin.setCurrentSelection(m_selectedJoinIndex); + break; + case eControl_FriendsList: + m_selectedFriendsIndex = ClampSelectionIndex(static_cast(childId), m_buttonListFriends.getItemCount()); + m_buttonListFriends.updateChildFocus(m_selectedFriendsIndex); + m_buttonListFriends.setCurrentSelection(m_selectedFriendsIndex); + break; + default: + break; + } +} + +void UIScene_MinigamesMenu::handlePress(F64 controlId, F64 childId) +{ + switch (static_cast(controlId)) + { + case eControl_TabCreate: + SetMiniGamesTab(eTab_Create, true); + ui.PlayUISFX(eSFX_Focus); + break; + case eControl_TabJoin: + SetMiniGamesTab(eTab_Join, true); + ui.PlayUISFX(eSFX_Focus); + break; + case eControl_TabFriends: + SetMiniGamesTab(eTab_Friends, true); + ui.PlayUISFX(eSFX_Focus); + break; + case eControl_CreateList: + m_selectedCreateIndex = ClampSelectionIndex(static_cast(childId), m_buttonListCreate.getItemCount()); + m_buttonListCreate.updateChildFocus(m_selectedCreateIndex); + m_buttonListCreate.setCurrentSelection(m_selectedCreateIndex); + ui.PlayUISFX(eSFX_Press); + NavigateToSelectedMiniGame(); + break; + case eControl_JoinList: + m_selectedJoinIndex = ClampSelectionIndex(static_cast(childId), m_buttonListJoin.getItemCount()); + m_buttonListJoin.updateChildFocus(m_selectedJoinIndex); + m_buttonListJoin.setCurrentSelection(m_selectedJoinIndex); + ui.PlayUISFX(eSFX_Press); + NavigateToSelectedMiniGame(); + break; + case eControl_FriendsList: + ui.PlayUISFX(eSFX_Press); + break; + default: + break; + } +} + +void UIScene_MinigamesMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) +{ + auto moveMiniGameSelection = [this](int delta) + { + if (m_activeTab == eTab_Create && m_buttonListCreate.getItemCount() > 0) + { + m_selectedCreateIndex = ClampSelectionIndex(m_selectedCreateIndex + delta, m_buttonListCreate.getItemCount()); + m_buttonListCreate.updateChildFocus(m_selectedCreateIndex); + m_buttonListCreate.setCurrentSelection(m_selectedCreateIndex); + return true; + } + + if (m_activeTab == eTab_Join && m_buttonListJoin.getItemCount() > 0) + { + m_selectedJoinIndex = ClampSelectionIndex(m_selectedJoinIndex + delta, m_buttonListJoin.getItemCount()); + m_buttonListJoin.updateChildFocus(m_selectedJoinIndex); + m_buttonListJoin.setCurrentSelection(m_selectedJoinIndex); + return true; + } + + if (m_activeTab == eTab_Friends && m_buttonListFriends.getItemCount() > 0) + { + m_selectedFriendsIndex = ClampSelectionIndex(m_selectedFriendsIndex + delta, m_buttonListFriends.getItemCount()); + m_buttonListFriends.updateChildFocus(m_selectedFriendsIndex); + m_buttonListFriends.setCurrentSelection(m_selectedFriendsIndex); + return true; + } + + return false; + }; + + if (pressed) + { + if (key == ACTION_MENU_RIGHT_SCROLL) + { + SetMiniGamesTab(m_activeTab + 1, true); + ui.PlayUISFX(eSFX_Focus); + handled = true; + return; + } + + if (key == ACTION_MENU_LEFT_SCROLL) + { + SetMiniGamesTab(m_activeTab - 1, true); + ui.PlayUISFX(eSFX_Focus); + handled = true; + return; + } + } + + switch (key) + { + case ACTION_MENU_OK: + if (pressed) + { + ui.PlayUISFX(eSFX_Press); + if (m_activeTab == eTab_Create) + { + m_selectedCreateIndex = ClampSelectionIndex(m_selectedCreateIndex, m_buttonListCreate.getItemCount()); + m_buttonListCreate.updateChildFocus(m_selectedCreateIndex); + m_buttonListCreate.setCurrentSelection(m_selectedCreateIndex); + NavigateToSelectedMiniGame(); + } + else if (m_activeTab == eTab_Join) + { + m_selectedJoinIndex = ClampSelectionIndex(m_selectedJoinIndex, m_buttonListJoin.getItemCount()); + m_buttonListJoin.updateChildFocus(m_selectedJoinIndex); + m_buttonListJoin.setCurrentSelection(m_selectedJoinIndex); + NavigateToSelectedMiniGame(); + } + handled = true; + return; + } + sendInputToMovie(key, repeat, pressed, released); + handled = true; + return; + case ACTION_MENU_CANCEL: + if (pressed) + { + navigateBack(); + handled = true; + return; + } + break; + case ACTION_MENU_UP: + if (pressed && moveMiniGameSelection(-1)) + { + ui.PlayUISFX(eSFX_Focus); + handled = true; + return; + } + sendInputToMovie(key, repeat, pressed, released); + handled = true; + return; + case ACTION_MENU_DOWN: + if (pressed && moveMiniGameSelection(1)) + { + ui.PlayUISFX(eSFX_Focus); + handled = true; + return; + } + sendInputToMovie(key, repeat, pressed, released); + handled = true; + return; + case ACTION_MENU_PAGEUP: + case ACTION_MENU_PAGEDOWN: + sendInputToMovie(key, repeat, pressed, released); + handled = true; + return; + case ACTION_MENU_OTHER_STICK_UP: + sendInputToMovie(ACTION_MENU_UP, repeat, pressed, released); + handled = true; + return; + case ACTION_MENU_OTHER_STICK_DOWN: + sendInputToMovie(ACTION_MENU_DOWN, repeat, pressed, released); + handled = true; + return; + } + + UIScene::handleInput(iPad, key, repeat, pressed, released, handled); +} + + diff --git a/Minecraft.Client/Common/UI/UIScene_MinigamesMenu.h b/Minecraft.Client/Common/UI/UIScene_MinigamesMenu.h new file mode 100644 index 00000000..fd93b1b7 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_MinigamesMenu.h @@ -0,0 +1,120 @@ +#pragma once + +#include "UIScene.h" +#include "UIStructs.h" + +class UIScene_MinigamesMenu : public UIScene +{ +private: + + enum EControls + { + eControl_CreateList, + eControl_JoinList, + eControl_FriendsList, + eControl_TabCreate, + eControl_TabJoin, + eControl_TabFriends, + }; + + enum EMiniGamesTabIndex + { + eTab_Create = 0, + eTab_Join, + eTab_Friends, + }; + + UIControl m_controlCreateRoot; + UIControl m_controlCreatePanel; + UIControl m_controlCreateFooter; + UIControl m_controlJoinRoot; + UIControl m_controlJoinPanel; + UIControl m_controlFriendsRoot; + UIControl m_controlFriendsPanel; + UIControl_SaveList m_buttonListCreate; + UIControl_SaveList m_buttonListJoin; + UIControl_SaveList m_buttonListFriends; + UIControl_Button m_tabCreate; + UIControl_Button m_tabJoin; + UIControl_Button m_tabFriends; + UIControl_Label m_labelCreateTitle; + UIControl_Label m_labelJoinTitle; + UIControl_Label m_labelFriendsTitle; + UIControl_HTMLLabel m_labelNoGames; + UIControl m_controlCreateTimer; + UIControl m_controlJoinTimer; + UIControl m_controlFriendsTimer; + UIControl m_controlMainPanel; + + IggyName m_funcSetActiveTab; + IggyName m_funcShowSaveSizeBar; + bool m_isApplyingMiniGamesTab; + bool m_removedFooterLabel; + int m_activeTab; + int m_selectedCreateIndex; + int m_selectedJoinIndex; + int m_selectedFriendsIndex; + + UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) + UI_MAP_ELEMENT( m_controlMainPanel, "MainPanel") + UI_MAP_ELEMENT( m_controlCreateRoot, "LoadGame") + UI_BEGIN_MAP_CHILD_ELEMENTS( m_controlCreateRoot ) + UI_MAP_ELEMENT( m_controlCreatePanel, "LoadGameListRecessPanel") + UI_MAP_ELEMENT( m_buttonListCreate, "LoadGameList") + UI_MAP_ELEMENT( m_controlCreateTimer, "LoadGameTimer") + UI_MAP_ELEMENT( m_controlCreateFooter, "SaveSizeBar") + UI_MAP_ELEMENT( m_tabCreate, "TouchTabLoad") + UI_END_MAP_CHILD_ELEMENTS() + + UI_MAP_ELEMENT( m_controlJoinRoot, "NewGame") + UI_BEGIN_MAP_CHILD_ELEMENTS( m_controlJoinRoot ) + UI_MAP_ELEMENT( m_controlJoinPanel, "NewGameListRecessPanel") + UI_MAP_ELEMENT( m_buttonListJoin, "NewGameList") + UI_MAP_ELEMENT( m_controlJoinTimer, "NewGameTimer") + UI_MAP_ELEMENT( m_tabJoin, "TouchTabCreate") + UI_END_MAP_CHILD_ELEMENTS() + + UI_MAP_ELEMENT( m_controlFriendsRoot, "JoinGame") + UI_BEGIN_MAP_CHILD_ELEMENTS( m_controlFriendsRoot ) + UI_MAP_ELEMENT( m_controlFriendsPanel, "JoinListPanel") + UI_MAP_ELEMENT( m_buttonListFriends, "JoinGameGamesList") + UI_MAP_ELEMENT( m_controlFriendsTimer, "JoinGamesTimer") + UI_MAP_ELEMENT( m_tabFriends, "TouchTabJoin") + UI_END_MAP_CHILD_ELEMENTS() + + UI_MAP_ELEMENT( m_labelCreateTitle, "LoadGameTabTitle") + UI_MAP_ELEMENT( m_labelJoinTitle, "NewGameTabTitle") + UI_MAP_ELEMENT( m_labelFriendsTitle, "JoinGameTabTitle") + UI_MAP_ELEMENT( m_labelNoGames, "NoGames") + UI_MAP_NAME( m_funcSetActiveTab, L"SetActiveTab") + UI_MAP_NAME( m_funcShowSaveSizeBar, L"ShowSaveSizeBar") + UI_END_MAP_ELEMENTS_AND_NAMES() + + void RefreshMiniGamesContent(); + void ApplyMiniGamesLabels(); + void ApplyMiniGamesCurrentTab(bool setFocus); + int GetMovieTabIndex() const; + void SetMiniGamesTab(int tab, bool setFocus); + void RemoveFooterLabel(); + int GetSelectedMiniGameType(); + void NavigateToSelectedMiniGame(); + int ClampSelectionIndex(int index, int itemCount) const; + +public: + UIScene_MinigamesMenu(int iPad, void *initData, UILayer *parentLayer); + virtual EUIScene getSceneType() { return eUIScene_MinigamesMenu; } + virtual std::wstring getMoviePath(); + virtual void updateTooltips(); + virtual void handleGainFocus(bool navBack); + virtual void handleLoseFocus(); + virtual void handleInitFocus(F64 controlId, F64 childId); + virtual void handleFocusChange(F64 controlId, F64 childId); + virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled); + virtual UIControl* GetMainPanel() { return &m_controlMainPanel; } + +protected: + void handlePress(F64 controlId, F64 childId); +}; + + + diff --git a/Minecraft.Client/Common/UI/UIStructs.h b/Minecraft.Client/Common/UI/UIStructs.h index 2f01c3e2..15aeead3 100644 --- a/Minecraft.Client/Common/UI/UIStructs.h +++ b/Minecraft.Client/Common/UI/UIStructs.h @@ -288,6 +288,26 @@ typedef struct _LoadMenuInitData } LoadMenuInitData; +enum EMiniGameType +{ + eMiniGame_Battle = 0, + eMiniGame_Tumble, + eMiniGame_Glide, +}; + +typedef struct _MiniGamesCreateMenuInitData +{ + int iPad; + int miniGameType; + + _MiniGamesCreateMenuInitData() + { + iPad = 0; + miniGameType = eMiniGame_Battle; + } +} +MiniGamesCreateMenuInitData; + // Join Games typedef struct _JoinMenuInitData { @@ -538,4 +558,4 @@ typedef struct _ItemEditorInput int iPad; Slot *slot; AbstractContainerMenu *menu; -} ItemEditorInput; \ No newline at end of file +} ItemEditorInput; diff --git a/Minecraft.Client/Common/res/TitleUpdate/GameRules/MG01.xml b/Minecraft.Client/Common/res/TitleUpdate/GameRules/MG01.xml new file mode 100644 index 00000000..7e00b20e --- /dev/null +++ b/Minecraft.Client/Common/res/TitleUpdate/GameRules/MG01.xml @@ -0,0 +1,809 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 180 300 600 + + + + + 1 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hard + Adventure + + 1 + + 8 + false + 2 + + 6 + + $SpectateMode + + true + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.3 + + + + 20 + 4 + 0 + 0 + + 4.0 + 4.0 + + + 40 + + 4.0 + + + 4.0 + + + 0.085 + 0.04 + 0.03 + + + 0.004 + + + + 20.0 + 20.0 + + 80 + + 5.0 + 5.0 + 0.0 + + + + + + 0.05 + 0.0 + 0.0 + 0.012 + + + + + + + + 5 + 0 + 1 + 2 + 0 + 2 + UpdateItems + UpdateItems + UpdateItems + + + + + + 400 + 200 + 200 + 200 + 300 + 400 + 400 + 400 + 200 + + + 1.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + \ No newline at end of file diff --git a/Minecraft.Client/Common/res/TitleUpdate/GameRules/lobby.xml b/Minecraft.Client/Common/res/TitleUpdate/GameRules/lobby.xml new file mode 100644 index 00000000..c359f16a --- /dev/null +++ b/Minecraft.Client/Common/res/TitleUpdate/GameRules/lobby.xml @@ -0,0 +1,65 @@ + + + Lobby + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + \ No newline at end of file diff --git a/Minecraft.Client/Windows64Media/Lobby/Lobby.mcs b/Minecraft.Client/Windows64Media/Lobby/Lobby.mcs new file mode 100644 index 00000000..b1d7f823 Binary files /dev/null and b/Minecraft.Client/Windows64Media/Lobby/Lobby.mcs differ diff --git a/Minecraft.Client/Windows64Media/Lobby/Lobby.pck b/Minecraft.Client/Windows64Media/Lobby/Lobby.pck new file mode 100644 index 00000000..e21914ff Binary files /dev/null and b/Minecraft.Client/Windows64Media/Lobby/Lobby.pck differ diff --git a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml index b8150a8a..74d09654 100644 --- a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml +++ b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml @@ -6614,6 +6614,10 @@ Would you like to install the mash-up pack or texture pack now? When enabled, the game will be an online game. + + When enabled, Allows players that are not your friends to find and join your game. + + When enabled, only invited players can join. @@ -6622,6 +6626,10 @@ Would you like to install the mash-up pack or texture pack now? When enabled, friends of people on your Friends List can join the game. + + Select the maps that you want to play with. + + When enabled, players can inflict damage on other players. Only affects Survival mode. @@ -7389,6 +7397,18 @@ Would you like to install the mash-up pack or texture pack now? Players + + Create + + + + Join + + + + Friends + + Join Game @@ -7405,6 +7425,10 @@ Would you like to install the mash-up pack or texture pack now? Play Game + + Mini Games + + Leaderboards @@ -7457,6 +7481,78 @@ Would you like to install the mash-up pack or texture pack now? Fire Spreads: + + Battle + + + + Public Game + + + + Allow friends of friends + + + + Invite Only + + + + Select Maps + + + + More Options + + + + Create Game + + + + Game Type: Competitive + + + + Game Type: Custom + + + + Game Type: Casual + + + + Game Type: Any + + + + Join a Casual game, which allows all player skins and spectators appear as Bats. + + + + Join a Competitive game, which doesn't allow player skins that provide an advantage (e.g. being smaller than normal, or not displaying all armor), and spectators are invisible. + + + + Join a Custom game with your selected Round Length. + + + + Join any Casual or Competitive game with your selected Round Length. + + + + Create a Competitive game, which doesn't allow player skins that provide an advantage (e.g. being smaller than normal, or not displaying all armor), and spectators are invisible. + + + + Create a custom game and modify a variety of settings to create a new game experience. + + + + Create a Casual game, which allows all player skins and spectators appear as Bats. + + Reinstall Theme diff --git a/Minecraft.Client/Windows64Media/old_strings.h b/Minecraft.Client/Windows64Media/old_strings.h deleted file mode 100644 index f87d6e69..00000000 --- a/Minecraft.Client/Windows64Media/old_strings.h +++ /dev/null @@ -1,2484 +0,0 @@ -#pragma once -// Auto-generated by StringTable builder — do not edit manually. -// Source language: en-US -// Total strings: 2339 - -#define IDS_NULL 0 -#define IDS_OK 1 -#define IDS_BACK 2 -#define IDS_CANCEL 3 -#define IDS_YES 4 -#define IDS_NO 5 -#define IDS_CORRUPTSAVE_TITLE 6 -#define IDS_CORRUPTSAVE_TEXT 7 -#define IDS_NOFREESPACE_TITLE 8 -#define IDS_NOFREESPACE_TEXT 9 -#define IDS_SELECTAGAIN 10 -#define IDS_PLAYWITHOUTSAVING 11 -#define IDS_CREATEANEWSAVE 12 -#define IDS_OVERWRITESAVE_TITLE 13 -#define IDS_OVERWRITESAVE_TEXT 14 -#define IDS_OVERWRITESAVE_NO 15 -#define IDS_OVERWRITESAVE_YES 16 -#define IDS_FAILED_TO_SAVE_TITLE 17 -#define IDS_STORAGEDEVICEPROBLEM_TITLE 18 -#define IDS_FAILED_TO_SAVE_TEXT 19 -#define IDS_FAILED_TO_LOADSAVE_TEXT 20 -#define IDS_SELECTANEWDEVICE 21 -#define IDS_NODEVICE_TITLE 22 -#define IDS_NODEVICE_TEXT 23 -#define IDS_NODEVICE_ACCEPT 24 -#define IDS_NODEVICE_DECLINE 25 -#define IDS_DEVICEGONE_TEXT 26 -#define IDS_DEVICEGONE_TITLE 27 -#define IDS_KEYBOARDUI_SAVEGAME_TITLE 28 -#define IDS_KEYBOARDUI_SAVEGAME_TEXT 29 -#define IDS_WARNING_ARCADE_TITLE 30 -#define IDS_WARNING_ARCADE_TEXT 31 -#define IDS_PRO_RETURNEDTOMENU_TITLE 32 -#define IDS_PRO_RETURNEDTOTITLESCREEN_TEXT 33 -#define IDS_PRO_RETURNEDTOMENU_TEXT 34 -#define IDS_PRO_RETURNEDTOMENU_ACCEPT 35 -#define IDS_PRO_NOTONLINE_TITLE 36 -#define IDS_PRO_NOTONLINE_TEXT 37 -#define IDS_PRO_XBOXLIVE_NOTIFICATION 38 -#define IDS_PRO_NOTONLINE_ACCEPT 39 -#define IDS_PRO_NOTONLINE_DECLINE 40 -#define IDS_PRO_ACHIEVEMENTPROBLEM_TITLE 41 -#define IDS_PRO_ACHIEVEMENTPROBLEM_TEXT 42 -#define IDS_PRO_NOPROFILE_TITLE 43 -#define IDS_PRO_NOPROFILEOPTIONS_TEXT 44 -#define IDS_PRO_GUESTPROFILE_TITLE 45 -#define IDS_PRO_GUESTPROFILE_TEXT 46 -#define IDS_STO_SAVING_SHORT 47 -#define IDS_STO_SAVING_LONG 48 -#define IDS_PRO_UNLOCKGAME_TITLE 49 -#define IDS_PRO_UNLOCKGAME_TEXT 50 -#define IDS_PRO_PROFILEPROBLEM_TEXT 51 -#define IDS_SAVE_TRANSFER_WRONG_VERSION 52 -#define IDS_UNHIDE_MASHUP_WORLDS 53 -#define IDS_TOOLTIPS_HIDE 54 -#define IDS_GAMENAME 55 -#define IDS_OPTIONSFILE 56 -#define IDS_SAVECACHEFILE 57 -#define IDS_ERROR_NETWORK 58 -#define IDS_ERROR_NETWORK_TITLE 59 -#define IDS_ERROR_NETWORK_EXIT 60 -#define IDS_CHAT_RESTRICTION_UGC 61 -#define IDS_CONTENT_RESTRICTION 62 -#define IDS_ONLINE_SERVICE_TITLE 63 -#define IDS_ERROR_PSN_SIGN_OUT 64 -#define IDS_ERROR_PSN_SIGN_OUT_EXIT 65 -#define IDS_PLAYER_LIST_TITLE 66 -#define IDS_DLC_PRICE_FREE 67 -#define IDS_CORRUPT_OPTIONS 68 -#define IDS_CORRUPT_OPTIONS_DELETE 69 -#define IDS_CORRUPT_OPTIONS_RETRY 70 -#define IDS_CORRUPT_SAVECACHE 71 -#define IDS_SAVEDATA_COPIED_TITLE 72 -#define IDS_SAVEDATA_COPIED_TEXT 73 -#define IDS_FATAL_TROPHY_ERROR 74 -#define IDS_TOOLTIPS_GAME_INVITES 75 -#define IDS_CORRUPT_FILE 76 -#define IDS_CONTROLER_DISCONNECT_TITLE 77 -#define IDS_CONTROLER_DISCONNECT_TEXT 78 -#define IDS_CONTENT_RESTRICTION_MULTIPLAYER 79 -#define IDS_CONTENT_RESTRICTION_PATCH_AVAILABLE 80 -#define IDS_NO_DLCCATEGORIES 81 -#define IDS_INVITATION_SUBJECT_MAX_18_CHARS 82 -#define IDS_INVITATION_BODY 83 -#define IDS_EULA 84 -#define IDS_EULA_SCEE 85 -#define IDS_EULA_SCEA 86 -#define IDS_EULA_SCEE_BD 87 -#define IDS_INCREASE_WORLD_SIZE 88 -#define IDS_INCREASE_WORLD_SIZE_OVERWRITE_EDGES 89 -#define IDS_GAMEOPTION_INCREASE_WORLD_SIZE 90 -#define IDS_GAMEOPTION_INCREASE_WORLD_SIZE_OVERWRITE_EDGES 91 -#define IDS_DYNAFONT 92 -#define IDS_TIPS_GAMETIP_NEWDLC 93 -#define IDS_TIPS_GAMETIP_SKINPACKS 94 -#define IDS_TIPS_GAMETIP_2 95 -#define IDS_TIPS_GAMETIP_3 96 -#define IDS_TIPS_GAMETIP_4 97 -#define IDS_TIPS_GAMETIP_5 98 -#define IDS_TIPS_GAMETIP_6 99 -#define IDS_TIPS_GAMETIP_7 100 -#define IDS_TIPS_GAMETIP_8 101 -#define IDS_TIPS_GAMETIP_9 102 -#define IDS_TIPS_GAMETIP_10 103 -#define IDS_TIPS_GAMETIP_11 104 -#define IDS_TIPS_GAMETIP_12 105 -#define IDS_TIPS_GAMETIP_13 106 -#define IDS_TIPS_GAMETIP_14 107 -#define IDS_TIPS_GAMETIP_15 108 -#define IDS_TIPS_GAMETIP_16 109 -#define IDS_TIPS_GAMETIP_17 110 -#define IDS_TIPS_GAMETIP_18 111 -#define IDS_TIPS_GAMETIP_19 112 -#define IDS_TIPS_GAMETIP_20 113 -#define IDS_TIPS_GAMETIP_21 114 -#define IDS_TIPS_GAMETIP_22 115 -#define IDS_TIPS_GAMETIP_23 116 -#define IDS_TIPS_GAMETIP_24 117 -#define IDS_TIPS_GAMETIP_25 118 -#define IDS_TIPS_GAMETIP_26 119 -#define IDS_TIPS_GAMETIP_27 120 -#define IDS_TIPS_GAMETIP_28 121 -#define IDS_TIPS_GAMETIP_29 122 -#define IDS_TIPS_GAMETIP_30 123 -#define IDS_TIPS_GAMETIP_31 124 -#define IDS_TIPS_GAMETIP_32 125 -#define IDS_TIPS_GAMETIP_33 126 -#define IDS_TIPS_GAMETIP_34 127 -#define IDS_TIPS_GAMETIP_35 128 -#define IDS_TIPS_GAMETIP_36 129 -#define IDS_TIPS_GAMETIP_37 130 -#define IDS_TIPS_GAMETIP_38 131 -#define IDS_TIPS_GAMETIP_39 132 -#define IDS_TIPS_GAMETIP_40 133 -#define IDS_TIPS_GAMETIP_41 134 -#define IDS_TIPS_GAMETIP_42 135 -#define IDS_TIPS_GAMETIP_43 136 -#define IDS_TIPS_GAMETIP_46 137 -#define IDS_TIPS_GAMETIP_47 138 -#define IDS_TIPS_GAMETIP_49 139 -#define IDS_TIPS_GAMETIP_50 140 -#define IDS_TIPS_TRIVIA_1 141 -#define IDS_TIPS_TRIVIA_2 142 -#define IDS_TIPS_TRIVIA_3 143 -#define IDS_TIPS_TRIVIA_5 144 -#define IDS_TIPS_TRIVIA_6 145 -#define IDS_TIPS_TRIVIA_7 146 -#define IDS_TIPS_TRIVIA_8 147 -#define IDS_TIPS_TRIVIA_9 148 -#define IDS_TIPS_TRIVIA_10 149 -#define IDS_TIPS_TRIVIA_11 150 -#define IDS_TIPS_TRIVIA_12 151 -#define IDS_TIPS_TRIVIA_13 152 -#define IDS_TIPS_TRIVIA_14 153 -#define IDS_TIPS_TRIVIA_15 154 -#define IDS_TIPS_TRIVIA_16 155 -#define IDS_TIPS_TRIVIA_18 156 -#define IDS_TIPS_TRIVIA_19 157 -#define IDS_TIPS_TRIVIA_20 158 -#define IDS_HOW_TO_PLAY_BASICS 159 -#define IDS_HOW_TO_PLAY_HUD 160 -#define IDS_HOW_TO_PLAY_INVENTORY 161 -#define IDS_HOW_TO_PLAY_CHEST 162 -#define IDS_HOW_TO_PLAY_LARGECHEST 163 -#define IDS_HOW_TO_PLAY_CRAFTING 164 -#define IDS_HOW_TO_PLAY_CRAFT_TABLE 165 -#define IDS_HOW_TO_PLAY_FURNACE 166 -#define IDS_HOW_TO_PLAY_DISPENSER 167 -#define IDS_HOW_TO_PLAY_BREWING 168 -#define IDS_HOW_TO_PLAY_ENCHANTMENT 169 -#define IDS_HOW_TO_PLAY_FARMANIMALS 170 -#define IDS_HOW_TO_PLAY_BREEDANIMALS 171 -#define IDS_HOW_TO_PLAY_NETHERPORTAL 172 -#define IDS_HOW_TO_PLAY_BANLIST 173 -#define IDS_HOW_TO_PLAY_HOSTOPTIONS 174 -#define IDS_HOW_TO_PLAY_NEXT 175 -#define IDS_HOW_TO_PLAY_PREV 176 -#define IDS_HOW_TO_PLAY_MENU_BASICS 177 -#define IDS_HOW_TO_PLAY_MENU_HUD 178 -#define IDS_HOW_TO_PLAY_MENU_INVENTORY 179 -#define IDS_HOW_TO_PLAY_MENU_CHESTS 180 -#define IDS_HOW_TO_PLAY_MENU_CRAFTING 181 -#define IDS_HOW_TO_PLAY_MENU_FURNACE 182 -#define IDS_HOW_TO_PLAY_MENU_DISPENSER 183 -#define IDS_HOW_TO_PLAY_MENU_FARMANIMALS 184 -#define IDS_HOW_TO_PLAY_MENU_BREEDANIMALS 185 -#define IDS_HOW_TO_PLAY_MENU_BREWING 186 -#define IDS_HOW_TO_PLAY_MENU_ENCHANTMENT 187 -#define IDS_HOW_TO_PLAY_MENU_NETHERPORTAL 188 -#define IDS_HOW_TO_PLAY_MENU_MULTIPLAYER 189 -#define IDS_HOW_TO_PLAY_MENU_SOCIALMEDIA 190 -#define IDS_HOW_TO_PLAY_MENU_BANLIST 191 -#define IDS_HOW_TO_PLAY_MENU_CREATIVE 192 -#define IDS_HOW_TO_PLAY_MENU_HOSTOPTIONS 193 -#define IDS_HOW_TO_PLAY_MENU_TRADING 194 -#define IDS_HOW_TO_PLAY_MENU_ANVIL 195 -#define IDS_HOW_TO_PLAY_MENU_THEEND 196 -#define IDS_HOW_TO_PLAY_THEEND 197 -#define IDS_HOW_TO_PLAY_MENU_SPRINT 198 -#define IDS_HOW_TO_PLAY_MENU_WHATSNEW 199 -#define IDS_HOW_TO_PLAY_WHATSNEW 200 -#define IDS_TITLEUPDATE 201 -#define IDS_HOW_TO_PLAY_MENU_HORSES 202 -#define IDS_HOW_TO_PLAY_HORSES 203 -#define IDS_HOW_TO_PLAY_MENU_BEACONS 204 -#define IDS_HOW_TO_PLAY_BEACONS 205 -#define IDS_HOW_TO_PLAY_MENU_FIREWORKS 206 -#define IDS_HOW_TO_PLAY_FIREWORKS 207 -#define IDS_HOW_TO_PLAY_MENU_HOPPERS 208 -#define IDS_HOW_TO_PLAY_HOPPERS 209 -#define IDS_HOW_TO_PLAY_MENU_DROPPERS 210 -#define IDS_HOW_TO_PLAY_DROPPERS 211 -#define IDS_DESC_SWORD 212 -#define IDS_DESC_SHOVEL 213 -#define IDS_DESC_PICKAXE 214 -#define IDS_DESC_HATCHET 215 -#define IDS_DESC_HOE 216 -#define IDS_DESC_DOOR_WOOD 217 -#define IDS_DESC_DOOR_IRON 218 -#define IDS_DESC_HELMET 219 -#define IDS_DESC_CHESTPLATE 220 -#define IDS_DESC_LEGGINGS 221 -#define IDS_DESC_BOOTS 222 -#define IDS_DESC_HELMET_LEATHER 223 -#define IDS_DESC_CHESTPLATE_LEATHER 224 -#define IDS_DESC_LEGGINGS_LEATHER 225 -#define IDS_DESC_BOOTS_LEATHER 226 -#define IDS_DESC_HELMET_CHAIN 227 -#define IDS_DESC_CHESTPLATE_CHAIN 228 -#define IDS_DESC_LEGGINGS_CHAIN 229 -#define IDS_DESC_BOOTS_CHAIN 230 -#define IDS_DESC_HELMET_IRON 231 -#define IDS_DESC_CHESTPLATE_IRON 232 -#define IDS_DESC_LEGGINGS_IRON 233 -#define IDS_DESC_BOOTS_IRON 234 -#define IDS_DESC_HELMET_GOLD 235 -#define IDS_DESC_CHESTPLATE_GOLD 236 -#define IDS_DESC_LEGGINGS_GOLD 237 -#define IDS_DESC_BOOTS_GOLD 238 -#define IDS_DESC_HELMET_DIAMOND 239 -#define IDS_DESC_CHESTPLATE_DIAMOND 240 -#define IDS_DESC_LEGGINGS_DIAMOND 241 -#define IDS_DESC_BOOTS_DIAMOND 242 -#define IDS_DESC_INGOT 243 -#define IDS_DESC_BLOCK 244 -#define IDS_DESC_PRESSUREPLATE 245 -#define IDS_DESC_STAIRS 246 -#define IDS_DESC_SLAB 247 -#define IDS_DESC_HALFSLAB 248 -#define IDS_DESC_TORCH 249 -#define IDS_DESC_WOODENPLANKS 250 -#define IDS_DESC_SANDSTONE 251 -#define IDS_DESC_STRUCTBLOCK 252 -#define IDS_DESC_STICK 253 -#define IDS_DESC_BED 254 -#define IDS_DESC_CRAFTINGTABLE 255 -#define IDS_DESC_FURNACE 256 -#define IDS_DESC_CHEST 257 -#define IDS_DESC_FENCE 258 -#define IDS_DESC_LADDER 259 -#define IDS_DESC_TRAPDOOR 260 -#define IDS_DESC_SIGN 261 -#define IDS_DESC_GLOWSTONE 262 -#define IDS_DESC_TNT 263 -#define IDS_DESC_BOWL 264 -#define IDS_DESC_BUCKET 265 -#define IDS_DESC_BUCKET_WATER 266 -#define IDS_DESC_BUCKET_LAVA 267 -#define IDS_DESC_BUCKET_MILK 268 -#define IDS_DESC_FLINTANDSTEEL 269 -#define IDS_DESC_FISHINGROD 270 -#define IDS_DESC_CLOCK 271 -#define IDS_DESC_COMPASS 272 -#define IDS_DESC_MAP 273 -#define IDS_DESC_MAP_EMPTY 274 -#define IDS_DESC_BOW 275 -#define IDS_DESC_ARROW 276 -#define IDS_DESC_NETHER_STAR 277 -#define IDS_DESC_FIREWORKS 278 -#define IDS_DESC_FIREWORKS_CHARGE 279 -#define IDS_DESC_COMPARATOR 280 -#define IDS_DESC_MINECART_TNT 281 -#define IDS_DESC_DAYLIGHT_DETECTOR 282 -#define IDS_DESC_MINECART_HOPPER 283 -#define IDS_DESC_IRON_HORSE_ARMOR 284 -#define IDS_DESC_GOLD_HORSE_ARMOR 285 -#define IDS_DESC_DIAMOND_HORSE_ARMOR 286 -#define IDS_DESC_LEAD 287 -#define IDS_DESC_NAME_TAG 288 -#define IDS_DESC_BREAD 289 -#define IDS_DESC_CAKE 290 -#define IDS_DESC_COOKIE 291 -#define IDS_DESC_MELON_SLICE 292 -#define IDS_DESC_MUSHROOMSTEW 293 -#define IDS_DESC_CHICKEN_RAW 294 -#define IDS_DESC_CHICKEN_COOKED 295 -#define IDS_DESC_BEEF_RAW 296 -#define IDS_DESC_BEEF_COOKED 297 -#define IDS_DESC_PORKCHOP_RAW 298 -#define IDS_DESC_PORKCHOP_COOKED 299 -#define IDS_DESC_FISH_RAW 300 -#define IDS_DESC_FISH_COOKED 301 -#define IDS_DESC_APPLE 302 -#define IDS_DESC_GOLDENAPPLE 303 -#define IDS_DESC_ROTTEN_FLESH 304 -#define IDS_DESC_SUGAR 305 -#define IDS_DESC_LEVER 306 -#define IDS_DESC_REDSTONETORCH 307 -#define IDS_DESC_REDSTONEREPEATER 308 -#define IDS_DESC_BUTTON 309 -#define IDS_DESC_DISPENSER 310 -#define IDS_DESC_NOTEBLOCK 311 -#define IDS_DESC_RAIL 312 -#define IDS_DESC_POWEREDRAIL 313 -#define IDS_DESC_DETECTORRAIL 314 -#define IDS_DESC_MINECART 315 -#define IDS_DESC_MINECARTWITHCHEST 316 -#define IDS_DESC_MINECARTWITHFURNACE 317 -#define IDS_DESC_BOAT 318 -#define IDS_DESC_WOOL 319 -#define IDS_DESC_WOOLSTRING 320 -#define IDS_DESC_DYE_BLACK 321 -#define IDS_DESC_DYE_GREEN 322 -#define IDS_DESC_DYE_BROWN 323 -#define IDS_DESC_DYE_SILVER 324 -#define IDS_DESC_DYE_YELLOW 325 -#define IDS_DESC_DYE_RED 326 -#define IDS_DESC_DYE_WHITE 327 -#define IDS_DESC_DYE_PINK 328 -#define IDS_DESC_DYE_ORANGE 329 -#define IDS_DESC_DYE_LIME 330 -#define IDS_DESC_DYE_GRAY 331 -#define IDS_DESC_DYE_LIGHTGRAY 332 -#define IDS_DESC_DYE_LIGHTBLUE 333 -#define IDS_DESC_DYE_CYAN 334 -#define IDS_DESC_DYE_PURPLE 335 -#define IDS_DESC_DYE_MAGENTA 336 -#define IDS_DESC_DYE_BLUE 337 -#define IDS_DESC_JUKEBOX 338 -#define IDS_DESC_DIAMONDS 339 -#define IDS_DESC_JACKOLANTERN 340 -#define IDS_DESC_PAPER 341 -#define IDS_DESC_BOOK 342 -#define IDS_DESC_BOOKSHELF 343 -#define IDS_DESC_PICTURE 344 -#define IDS_DESC_ORE_GOLD 345 -#define IDS_DESC_ORE_IRON 346 -#define IDS_DESC_ORE_COAL 347 -#define IDS_DESC_ORE_LAPIS 348 -#define IDS_DESC_ORE_DIAMOND 349 -#define IDS_DESC_ORE_REDSTONE 350 -#define IDS_DESC_STONE 351 -#define IDS_DESC_DIRT 352 -#define IDS_DESC_SAPLING 353 -#define IDS_DESC_BEDROCK 354 -#define IDS_DESC_LAVA 355 -#define IDS_DESC_SAND 356 -#define IDS_DESC_GRAVEL 357 -#define IDS_DESC_LOG 358 -#define IDS_DESC_GLASS 359 -#define IDS_DESC_STONE_BRICK 360 -#define IDS_DESC_BRICK 361 -#define IDS_DESC_CLAY 362 -#define IDS_DESC_CLAY_TILE 363 -#define IDS_DESC_SNOW 364 -#define IDS_DESC_TOP_SNOW 365 -#define IDS_DESC_TALL_GRASS 366 -#define IDS_DESC_FLOWER 367 -#define IDS_DESC_MUSHROOM 368 -#define IDS_DESC_OBSIDIAN 369 -#define IDS_DESC_MOB_SPAWNER 370 -#define IDS_DESC_REDSTONE_DUST 371 -#define IDS_DESC_CROPS 372 -#define IDS_DESC_FARMLAND 373 -#define IDS_DESC_CACTUS 374 -#define IDS_DESC_REEDS 375 -#define IDS_DESC_PUMPKIN 376 -#define IDS_DESC_HELL_ROCK 377 -#define IDS_DESC_HELL_SAND 378 -#define IDS_DESC_PORTAL 379 -#define IDS_DESC_COAL 380 -#define IDS_DESC_STRING 381 -#define IDS_DESC_FEATHER 382 -#define IDS_DESC_SULPHUR 383 -#define IDS_DESC_WHEAT_SEEDS 384 -#define IDS_DESC_WHEAT 385 -#define IDS_DESC_FLINT 386 -#define IDS_DESC_SADDLE 387 -#define IDS_DESC_SNOWBALL 388 -#define IDS_DESC_LEATHER 389 -#define IDS_DESC_SLIMEBALL 390 -#define IDS_DESC_EGG 391 -#define IDS_DESC_YELLOW_DUST 392 -#define IDS_DESC_BONE 393 -#define IDS_DESC_RECORD 394 -#define IDS_DESC_WATER 395 -#define IDS_DESC_LEAVES 396 -#define IDS_DESC_MOSS_STONE 397 -#define IDS_DESC_SHEARS 398 -#define IDS_DESC_PISTON 399 -#define IDS_DESC_STICKY_PISTON 400 -#define IDS_DESC_STONE_BRICK_SMOOTH 401 -#define IDS_DESC_IRON_FENCE 402 -#define IDS_DESC_FENCE_GATE 403 -#define IDS_DESC_MELON_BLOCK 404 -#define IDS_DESC_THIN_GLASS 405 -#define IDS_DESC_PUMPKIN_SEEDS 406 -#define IDS_DESC_MELON_SEEDS 407 -#define IDS_DESC_ENDER_PEARL 408 -#define IDS_DESC_GRASS 409 -#define IDS_DESC_SPONGE 410 -#define IDS_DESC_WEB 411 -#define IDS_DESC_STONE_SILVERFISH 412 -#define IDS_DESC_VINE 413 -#define IDS_DESC_ICE 414 -#define IDS_DESC_DEAD_BUSH 415 -#define IDS_DESC_BLAZE_ROD 416 -#define IDS_DESC_GHAST_TEAR 417 -#define IDS_DESC_GOLD_NUGGET 418 -#define IDS_DESC_NETHER_STALK_SEEDS 419 -#define IDS_DESC_POTION 420 -#define IDS_DESC_GLASS_BOTTLE 421 -#define IDS_DESC_SPIDER_EYE 422 -#define IDS_DESC_FERMENTED_SPIDER_EYE 423 -#define IDS_DESC_BLAZE_POWDER 424 -#define IDS_DESC_MAGMA_CREAM 425 -#define IDS_DESC_BREWING_STAND 426 -#define IDS_DESC_CAULDRON 427 -#define IDS_DESC_EYE_OF_ENDER 428 -#define IDS_DESC_SPECKLED_MELON 429 -#define IDS_DESC_MYCEL 430 -#define IDS_DESC_WATERLILY 431 -#define IDS_DESC_NETHERBRICK 432 -#define IDS_DESC_NETHERFENCE 433 -#define IDS_DESC_NETHERSTALK 434 -#define IDS_DESC_ENCHANTMENTTABLE 435 -#define IDS_DESC_END_PORTAL 436 -#define IDS_DESC_ENDPORTALFRAME 437 -#define IDS_DESC_WHITESTONE 438 -#define IDS_DESC_DRAGONEGG 439 -#define IDS_DESC_EXP_BOTTLE 440 -#define IDS_DESC_FIREBALL 441 -#define IDS_DESC_ITEMFRAME 442 -#define IDS_DESC_MONSTER_SPAWNER 443 -#define IDS_DESC_WOODSLAB 444 -#define IDS_DESC_STONESLAB 445 -#define IDS_DESC_ITEM_NETHERBRICK 446 -#define IDS_DESC_REDSTONE_LIGHT 447 -#define IDS_DESC_COCOA 448 -#define IDS_DESC_SKULL 449 -#define IDS_DESC_COMMAND_BLOCK 450 -#define IDS_DESC_BEACON 451 -#define IDS_DESC_CHEST_TRAP 452 -#define IDS_DESC_WEIGHTED_PLATE_LIGHT 453 -#define IDS_DESC_WEIGHTED_PLATE_HEAVY 454 -#define IDS_DESC_REDSTONE_BLOCK 455 -#define IDS_DESC_HOPPER 456 -#define IDS_DESC_ACTIVATOR_RAIL 457 -#define IDS_DESC_DROPPER 458 -#define IDS_DESC_STAINED_CLAY 459 -#define IDS_DESC_HAY 460 -#define IDS_DESC_HARDENED_CLAY 461 -#define IDS_DESC_STAINED_GLASS 462 -#define IDS_DESC_STAINED_GLASS_PANE 463 -#define IDS_DESC_COAL_BLOCK 464 -#define IDS_SQUID 465 -#define IDS_DESC_SQUID 466 -#define IDS_COW 467 -#define IDS_DESC_COW 468 -#define IDS_SHEEP 469 -#define IDS_DESC_SHEEP 470 -#define IDS_CHICKEN 471 -#define IDS_DESC_CHICKEN 472 -#define IDS_PIG 473 -#define IDS_DESC_PIG 474 -#define IDS_WOLF 475 -#define IDS_DESC_WOLF 476 -#define IDS_CREEPER 477 -#define IDS_DESC_CREEPER 478 -#define IDS_SKELETON 479 -#define IDS_DESC_SKELETON 480 -#define IDS_SPIDER 481 -#define IDS_DESC_SPIDER 482 -#define IDS_ZOMBIE 483 -#define IDS_DESC_ZOMBIE 484 -#define IDS_PIGZOMBIE 485 -#define IDS_DESC_PIGZOMBIE 486 -#define IDS_GHAST 487 -#define IDS_DESC_GHAST 488 -#define IDS_SLIME 489 -#define IDS_DESC_SLIME 490 -#define IDS_ENDERMAN 491 -#define IDS_DESC_ENDERMAN 492 -#define IDS_SILVERFISH 493 -#define IDS_DESC_SILVERFISH 494 -#define IDS_CAVE_SPIDER 495 -#define IDS_DESC_CAVE_SPIDER 496 -#define IDS_MUSHROOM_COW 497 -#define IDS_DESC_MUSHROOM_COW 498 -#define IDS_SNOWMAN 499 -#define IDS_DESC_SNOWMAN 500 -#define IDS_ENDERDRAGON 501 -#define IDS_DESC_ENDERDRAGON 502 -#define IDS_BLAZE 503 -#define IDS_DESC_BLAZE 504 -#define IDS_LAVA_SLIME 505 -#define IDS_DESC_LAVA_SLIME 506 -#define IDS_VILLAGER 507 -#define IDS_OZELOT 508 -#define IDS_DESC_OZELOT 509 -#define IDS_IRONGOLEM 510 -#define IDS_DESC_IRONGOLEM 511 -#define IDS_BAT 512 -#define IDS_DESC_BAT 513 -#define IDS_WITCH 514 -#define IDS_DESC_WITCH 515 -#define IDS_HORSE 516 -#define IDS_DESC_HORSE 517 -#define IDS_DONKEY 518 -#define IDS_DESC_DONKEY 519 -#define IDS_MULE 520 -#define IDS_DESC_MULE 521 -#define IDS_ZOMBIE_HORSE 522 -#define IDS_SKELETON_HORSE 523 -#define IDS_WITHER 524 -#define IDS_DESC_WITHER 525 -#define IDS_CREDITS_EXPLODANIM 526 -#define IDS_CREDITS_CONCEPTART 527 -#define IDS_CREDITS_CRUNCHER 528 -#define IDS_CREDITS_BULLYCOORD 529 -#define IDS_CREDITS_ORIGINALDESIGN 530 -#define IDS_CREDITS_PMPROD 531 -#define IDS_CREDITS_RESTOFMOJANG 532 -#define IDS_CREDITS_LEADPC 533 -#define IDS_CREDITS_CODENINJA 534 -#define IDS_CREDITS_CEO 535 -#define IDS_CREDITS_WCW 536 -#define IDS_CREDITS_CUSTOMERSUPPORT 537 -#define IDS_CREDITS_OFFICEDJ 538 -#define IDS_CREDITS_DESPROG 539 -#define IDS_CREDITS_DEVELOPER 540 -#define IDS_CREDITS_CHIEFARCHITECT 541 -#define IDS_CREDITS_ARTDEVELOPER 542 -#define IDS_CREDITS_GAMECRAFTER 543 -#define IDS_CREDITS_DOF 544 -#define IDS_CREDITS_MUSICANDSOUNDS 545 -#define IDS_CREDITS_PROGRAMMING 546 -#define IDS_CREDITS_ART 547 -#define IDS_CREDITS_QA 548 -#define IDS_CREDITS_EXECPRODUCER 549 -#define IDS_CREDITS_LEADPRODUCER 550 -#define IDS_CREDITS_PRODUCER 551 -#define IDS_CREDITS_TESTLEAD 552 -#define IDS_CREDITS_LEADTESTER 553 -#define IDS_CREDITS_DESIGNTEAM 554 -#define IDS_CREDITS_DEVELOPMENTTEAM 555 -#define IDS_CREDITS_RELEASEMANAGEMENT 556 -#define IDS_CREDITS_XBLADIRECTOR 557 -#define IDS_CREDITS_BIZDEV 558 -#define IDS_CREDITS_PORTFOLIODIRECTOR 559 -#define IDS_CREDITS_PRODUCTMANAGER 560 -#define IDS_CREDITS_MARKETING 561 -#define IDS_CREDITS_COMMUNITYMANAGER 562 -#define IDS_CREDITS_EUROPELOC 563 -#define IDS_CREDITS_REDMONDLOC 564 -#define IDS_CREDITS_ASIALOC 565 -#define IDS_CREDITS_USERRESEARCH 566 -#define IDS_CREDITS_MGSCENTRAL 567 -#define IDS_CREDITS_MILESTONEACCEPT 568 -#define IDS_CREDITS_SPECIALTHANKS 569 -#define IDS_CREDITS_TESTMANAGER 570 -#define IDS_CREDITS_SRTESTLEAD 571 -#define IDS_CREDITS_SDET 572 -#define IDS_CREDITS_PROJECT 573 -#define IDS_CREDITS_ADDITIONALSTE 574 -#define IDS_CREDITS_TESTASSOCIATES 575 -#define IDS_CREDITS_JON_KAGSTROM 576 -#define IDS_CREDITS_TOBIAS_MOLLSTAM 577 -#define IDS_CREDITS_RISE_LUGO 578 -#define IDS_ITEM_SWORD_WOOD 579 -#define IDS_ITEM_SWORD_STONE 580 -#define IDS_ITEM_SWORD_IRON 581 -#define IDS_ITEM_SWORD_DIAMOND 582 -#define IDS_ITEM_SWORD_GOLD 583 -#define IDS_ITEM_SHOVEL_WOOD 584 -#define IDS_ITEM_SHOVEL_STONE 585 -#define IDS_ITEM_SHOVEL_IRON 586 -#define IDS_ITEM_SHOVEL_DIAMOND 587 -#define IDS_ITEM_SHOVEL_GOLD 588 -#define IDS_ITEM_PICKAXE_WOOD 589 -#define IDS_ITEM_PICKAXE_STONE 590 -#define IDS_ITEM_PICKAXE_IRON 591 -#define IDS_ITEM_PICKAXE_DIAMOND 592 -#define IDS_ITEM_PICKAXE_GOLD 593 -#define IDS_ITEM_HATCHET_WOOD 594 -#define IDS_ITEM_HATCHET_STONE 595 -#define IDS_ITEM_HATCHET_IRON 596 -#define IDS_ITEM_HATCHET_DIAMOND 597 -#define IDS_ITEM_HATCHET_GOLD 598 -#define IDS_ITEM_HOE_WOOD 599 -#define IDS_ITEM_HOE_STONE 600 -#define IDS_ITEM_HOE_IRON 601 -#define IDS_ITEM_HOE_DIAMOND 602 -#define IDS_ITEM_HOE_GOLD 603 -#define IDS_ITEM_DOOR_WOOD 604 -#define IDS_ITEM_DOOR_IRON 605 -#define IDS_ITEM_HELMET_CHAIN 606 -#define IDS_ITEM_CHESTPLATE_CHAIN 607 -#define IDS_ITEM_LEGGINGS_CHAIN 608 -#define IDS_ITEM_BOOTS_CHAIN 609 -#define IDS_ITEM_HELMET_CLOTH 610 -#define IDS_ITEM_HELMET_IRON 611 -#define IDS_ITEM_HELMET_DIAMOND 612 -#define IDS_ITEM_HELMET_GOLD 613 -#define IDS_ITEM_CHESTPLATE_CLOTH 614 -#define IDS_ITEM_CHESTPLATE_IRON 615 -#define IDS_ITEM_CHESTPLATE_DIAMOND 616 -#define IDS_ITEM_CHESTPLATE_GOLD 617 -#define IDS_ITEM_LEGGINGS_CLOTH 618 -#define IDS_ITEM_LEGGINGS_IRON 619 -#define IDS_ITEM_LEGGINGS_DIAMOND 620 -#define IDS_ITEM_LEGGINGS_GOLD 621 -#define IDS_ITEM_BOOTS_CLOTH 622 -#define IDS_ITEM_BOOTS_IRON 623 -#define IDS_ITEM_BOOTS_DIAMOND 624 -#define IDS_ITEM_BOOTS_GOLD 625 -#define IDS_ITEM_INGOT_IRON 626 -#define IDS_ITEM_INGOT_GOLD 627 -#define IDS_ITEM_BUCKET 628 -#define IDS_ITEM_BUCKET_WATER 629 -#define IDS_ITEM_BUCKET_LAVA 630 -#define IDS_ITEM_FLINT_AND_STEEL 631 -#define IDS_ITEM_APPLE 632 -#define IDS_ITEM_BOW 633 -#define IDS_ITEM_ARROW 634 -#define IDS_ITEM_COAL 635 -#define IDS_ITEM_CHARCOAL 636 -#define IDS_ITEM_DIAMOND 637 -#define IDS_ITEM_STICK 638 -#define IDS_ITEM_BOWL 639 -#define IDS_ITEM_MUSHROOM_STEW 640 -#define IDS_ITEM_STRING 641 -#define IDS_ITEM_FEATHER 642 -#define IDS_ITEM_SULPHUR 643 -#define IDS_ITEM_WHEAT_SEEDS 644 -#define IDS_ITEM_WHEAT 645 -#define IDS_ITEM_BREAD 646 -#define IDS_ITEM_FLINT 647 -#define IDS_ITEM_PORKCHOP_RAW 648 -#define IDS_ITEM_PORKCHOP_COOKED 649 -#define IDS_ITEM_PAINTING 650 -#define IDS_ITEM_APPLE_GOLD 651 -#define IDS_ITEM_SIGN 652 -#define IDS_ITEM_MINECART 653 -#define IDS_ITEM_SADDLE 654 -#define IDS_ITEM_REDSTONE 655 -#define IDS_ITEM_SNOWBALL 656 -#define IDS_ITEM_BOAT 657 -#define IDS_ITEM_LEATHER 658 -#define IDS_ITEM_BUCKET_MILK 659 -#define IDS_ITEM_BRICK 660 -#define IDS_ITEM_CLAY 661 -#define IDS_ITEM_REEDS 662 -#define IDS_ITEM_PAPER 663 -#define IDS_ITEM_BOOK 664 -#define IDS_ITEM_SLIMEBALL 665 -#define IDS_ITEM_MINECART_CHEST 666 -#define IDS_ITEM_MINECART_FURNACE 667 -#define IDS_ITEM_EGG 668 -#define IDS_ITEM_COMPASS 669 -#define IDS_ITEM_FISHING_ROD 670 -#define IDS_ITEM_CLOCK 671 -#define IDS_ITEM_YELLOW_DUST 672 -#define IDS_ITEM_FISH_RAW 673 -#define IDS_ITEM_FISH_COOKED 674 -#define IDS_ITEM_DYE_POWDER 675 -#define IDS_ITEM_DYE_POWDER_BLACK 676 -#define IDS_ITEM_DYE_POWDER_RED 677 -#define IDS_ITEM_DYE_POWDER_GREEN 678 -#define IDS_ITEM_DYE_POWDER_BROWN 679 -#define IDS_ITEM_DYE_POWDER_BLUE 680 -#define IDS_ITEM_DYE_POWDER_PURPLE 681 -#define IDS_ITEM_DYE_POWDER_CYAN 682 -#define IDS_ITEM_DYE_POWDER_SILVER 683 -#define IDS_ITEM_DYE_POWDER_GRAY 684 -#define IDS_ITEM_DYE_POWDER_PINK 685 -#define IDS_ITEM_DYE_POWDER_LIME 686 -#define IDS_ITEM_DYE_POWDER_YELLOW 687 -#define IDS_ITEM_DYE_POWDER_LIGHT_BLUE 688 -#define IDS_ITEM_DYE_POWDER_MAGENTA 689 -#define IDS_ITEM_DYE_POWDER_ORANGE 690 -#define IDS_ITEM_DYE_POWDER_WHITE 691 -#define IDS_ITEM_BONE 692 -#define IDS_ITEM_SUGAR 693 -#define IDS_ITEM_CAKE 694 -#define IDS_ITEM_BED 695 -#define IDS_ITEM_DIODE 696 -#define IDS_ITEM_COOKIE 697 -#define IDS_ITEM_MAP 698 -#define IDS_ITEM_MAP_EMPTY 699 -#define IDS_ITEM_RECORD_01 700 -#define IDS_ITEM_RECORD_02 701 -#define IDS_ITEM_RECORD_03 702 -#define IDS_ITEM_RECORD_04 703 -#define IDS_ITEM_RECORD_05 704 -#define IDS_ITEM_RECORD_06 705 -#define IDS_ITEM_RECORD_07 706 -#define IDS_ITEM_RECORD_08 707 -#define IDS_ITEM_RECORD_09 708 -#define IDS_ITEM_RECORD_10 709 -#define IDS_ITEM_RECORD_11 710 -#define IDS_ITEM_RECORD_12 711 -#define IDS_ITEM_SHEARS 712 -#define IDS_ITEM_PUMPKIN_SEEDS 713 -#define IDS_ITEM_MELON_SEEDS 714 -#define IDS_ITEM_CHICKEN_RAW 715 -#define IDS_ITEM_CHICKEN_COOKED 716 -#define IDS_ITEM_BEEF_RAW 717 -#define IDS_ITEM_BEEF_COOKED 718 -#define IDS_ITEM_ROTTEN_FLESH 719 -#define IDS_ITEM_ENDER_PEARL 720 -#define IDS_ITEM_MELON_SLICE 721 -#define IDS_ITEM_BLAZE_ROD 722 -#define IDS_ITEM_GHAST_TEAR 723 -#define IDS_ITEM_GOLD_NUGGET 724 -#define IDS_ITEM_NETHER_STALK_SEEDS 725 -#define IDS_ITEM_POTION 726 -#define IDS_ITEM_GLASS_BOTTLE 727 -#define IDS_ITEM_WATER_BOTTLE 728 -#define IDS_ITEM_SPIDER_EYE 729 -#define IDS_ITEM_FERMENTED_SPIDER_EYE 730 -#define IDS_ITEM_BLAZE_POWDER 731 -#define IDS_ITEM_MAGMA_CREAM 732 -#define IDS_ITEM_BREWING_STAND 733 -#define IDS_ITEM_CAULDRON 734 -#define IDS_ITEM_EYE_OF_ENDER 735 -#define IDS_ITEM_SPECKLED_MELON 736 -#define IDS_ITEM_EXP_BOTTLE 737 -#define IDS_ITEM_FIREBALL 738 -#define IDS_ITEM_FIREBALLCHARCOAL 739 -#define IDS_ITEM_FIREBALLCOAL 740 -#define IDS_ITEM_ITEMFRAME 741 -#define IDS_ITEM_MONSTER_SPAWNER 742 -#define IDS_ITEM_NETHERBRICK 743 -#define IDS_ITEM_SKULL 744 -#define IDS_ITEM_SKULL_SKELETON 745 -#define IDS_ITEM_SKULL_WITHER 746 -#define IDS_ITEM_SKULL_ZOMBIE 747 -#define IDS_ITEM_SKULL_CHARACTER 748 -#define IDS_ITEM_SKULL_PLAYER 749 -#define IDS_ITEM_SKULL_CREEPER 750 -#define IDS_NETHER_STAR 751 -#define IDS_FIREWORKS 752 -#define IDS_FIREWORKS_CHARGE 753 -#define IDS_ITEM_COMPARATOR 754 -#define IDS_ITEM_MINECART_TNT 755 -#define IDS_ITEM_MINECART_HOPPER 756 -#define IDS_ITEM_IRON_HORSE_ARMOR 757 -#define IDS_ITEM_GOLD_HORSE_ARMOR 758 -#define IDS_ITEM_DIAMOND_HORSE_ARMOR 759 -#define IDS_ITEM_LEAD 760 -#define IDS_ITEM_NAME_TAG 761 -#define IDS_TILE_STONE 762 -#define IDS_TILE_GRASS 763 -#define IDS_TILE_DIRT 764 -#define IDS_TILE_STONE_BRICK 765 -#define IDS_TILE_OAKWOOD_PLANKS 766 -#define IDS_TILE_SPRUCEWOOD_PLANKS 767 -#define IDS_TILE_BIRCHWOOD_PLANKS 768 -#define IDS_TILE_JUNGLE_PLANKS 769 -#define IDS_TILE_PLANKS 770 -#define IDS_TILE_SAPLING 771 -#define IDS_TILE_SAPLING_OAK 772 -#define IDS_TILE_SAPLING_SPRUCE 773 -#define IDS_TILE_SAPLING_BIRCH 774 -#define IDS_TILE_SAPLING_JUNGLE 775 -#define IDS_TILE_BEDROCK 776 -#define IDS_TILE_WATER 777 -#define IDS_TILE_LAVA 778 -#define IDS_TILE_SAND 779 -#define IDS_TILE_SANDSTONE 780 -#define IDS_TILE_GRAVEL 781 -#define IDS_TILE_ORE_GOLD 782 -#define IDS_TILE_ORE_IRON 783 -#define IDS_TILE_ORE_COAL 784 -#define IDS_TILE_LOG 785 -#define IDS_TILE_LOG_OAK 786 -#define IDS_TILE_LOG_SPRUCE 787 -#define IDS_TILE_LOG_BIRCH 788 -#define IDS_TILE_LOG_JUNGLE 789 -#define IDS_TILE_OAK 790 -#define IDS_TILE_SPRUCE 791 -#define IDS_TILE_BIRCH 792 -#define IDS_TILE_LEAVES 793 -#define IDS_TILE_LEAVES_OAK 794 -#define IDS_TILE_LEAVES_SPRUCE 795 -#define IDS_TILE_LEAVES_BIRCH 796 -#define IDS_TILE_LEAVES_JUNGLE 797 -#define IDS_TILE_SPONGE 798 -#define IDS_TILE_GLASS 799 -#define IDS_TILE_CLOTH 800 -#define IDS_TILE_CLOTH_BLACK 801 -#define IDS_TILE_CLOTH_RED 802 -#define IDS_TILE_CLOTH_GREEN 803 -#define IDS_TILE_CLOTH_BROWN 804 -#define IDS_TILE_CLOTH_BLUE 805 -#define IDS_TILE_CLOTH_PURPLE 806 -#define IDS_TILE_CLOTH_CYAN 807 -#define IDS_TILE_CLOTH_SILVER 808 -#define IDS_TILE_CLOTH_GRAY 809 -#define IDS_TILE_CLOTH_PINK 810 -#define IDS_TILE_CLOTH_LIME 811 -#define IDS_TILE_CLOTH_YELLOW 812 -#define IDS_TILE_CLOTH_LIGHT_BLUE 813 -#define IDS_TILE_CLOTH_MAGENTA 814 -#define IDS_TILE_CLOTH_ORANGE 815 -#define IDS_TILE_CLOTH_WHITE 816 -#define IDS_TILE_FLOWER 817 -#define IDS_TILE_ROSE 818 -#define IDS_TILE_MUSHROOM 819 -#define IDS_TILE_BLOCK_GOLD 820 -#define IDS_DESC_BLOCK_GOLD 821 -#define IDS_DESC_BLOCK_IRON 822 -#define IDS_TILE_BLOCK_IRON 823 -#define IDS_TILE_STONESLAB 824 -#define IDS_TILE_STONESLAB_STONE 825 -#define IDS_TILE_STONESLAB_SAND 826 -#define IDS_TILE_STONESLAB_WOOD 827 -#define IDS_TILE_STONESLAB_COBBLE 828 -#define IDS_TILE_STONESLAB_BRICK 829 -#define IDS_TILE_STONESLAB_SMOOTHBRICK 830 -#define IDS_TILE_STONESLAB_OAK 831 -#define IDS_TILE_STONESLAB_SPRUCE 832 -#define IDS_TILE_STONESLAB_BIRCH 833 -#define IDS_TILE_STONESLAB_JUNGLE 834 -#define IDS_TILE_STONESLAB_NETHERBRICK 835 -#define IDS_TILE_BRICK 836 -#define IDS_TILE_TNT 837 -#define IDS_TILE_BOOKSHELF 838 -#define IDS_TILE_STONE_MOSS 839 -#define IDS_TILE_OBSIDIAN 840 -#define IDS_TILE_TORCH 841 -#define IDS_TILE_TORCHCOAL 842 -#define IDS_TILE_TORCHCHARCOAL 843 -#define IDS_TILE_FIRE 844 -#define IDS_TILE_MOB_SPAWNER 845 -#define IDS_TILE_STAIRS_WOOD 846 -#define IDS_TILE_CHEST 847 -#define IDS_TILE_REDSTONE_DUST 848 -#define IDS_TILE_ORE_DIAMOND 849 -#define IDS_TILE_BLOCK_DIAMOND 850 -#define IDS_DESC_BLOCK_DIAMOND 851 -#define IDS_TILE_WORKBENCH 852 -#define IDS_TILE_CROPS 853 -#define IDS_TILE_FARMLAND 854 -#define IDS_TILE_FURNACE 855 -#define IDS_TILE_SIGN 856 -#define IDS_TILE_DOOR_WOOD 857 -#define IDS_TILE_LADDER 858 -#define IDS_TILE_RAIL 859 -#define IDS_TILE_GOLDEN_RAIL 860 -#define IDS_TILE_DETECTOR_RAIL 861 -#define IDS_TILE_STAIRS_STONE 862 -#define IDS_TILE_LEVER 863 -#define IDS_TILE_PRESSURE_PLATE 864 -#define IDS_TILE_DOOR_IRON 865 -#define IDS_TILE_ORE_REDSTONE 866 -#define IDS_TILE_NOT_GATE 867 -#define IDS_TILE_BUTTON 868 -#define IDS_TILE_SNOW 869 -#define IDS_TILE_ICE 870 -#define IDS_TILE_CACTUS 871 -#define IDS_TILE_CLAY 872 -#define IDS_TILE_REEDS 873 -#define IDS_TILE_JUKEBOX 874 -#define IDS_TILE_FENCE 875 -#define IDS_TILE_PUMPKIN 876 -#define IDS_TILE_LIT_PUMPKIN 877 -#define IDS_TILE_HELL_ROCK 878 -#define IDS_TILE_HELL_SAND 879 -#define IDS_TILE_LIGHT_GEM 880 -#define IDS_TILE_PORTAL 881 -#define IDS_TILE_ORE_LAPIS 882 -#define IDS_TILE_BLOCK_LAPIS 883 -#define IDS_DESC_BLOCK_LAPIS 884 -#define IDS_TILE_DISPENSER 885 -#define IDS_TILE_MUSIC_BLOCK 886 -#define IDS_TILE_CAKE 887 -#define IDS_TILE_BED 888 -#define IDS_TILE_WEB 889 -#define IDS_TILE_TALL_GRASS 890 -#define IDS_TILE_DEAD_BUSH 891 -#define IDS_TILE_DIODE 892 -#define IDS_TILE_LOCKED_CHEST 893 -#define IDS_TILE_TRAPDOOR 894 -#define IDS_ANY_WOOL 895 -#define IDS_TILE_PISTON_BASE 896 -#define IDS_TILE_PISTON_STICK_BASE 897 -#define IDS_TILE_MONSTER_STONE_EGG 898 -#define IDS_TILE_STONE_BRICK_SMOOTH 899 -#define IDS_TILE_STONE_BRICK_SMOOTH_MOSSY 900 -#define IDS_TILE_STONE_BRICK_SMOOTH_CRACKED 901 -#define IDS_TILE_STONE_BRICK_SMOOTH_CHISELED 902 -#define IDS_TILE_HUGE_MUSHROOM_1 903 -#define IDS_TILE_HUGE_MUSHROOM_2 904 -#define IDS_TILE_IRON_FENCE 905 -#define IDS_TILE_THIN_GLASS 906 -#define IDS_TILE_MELON 907 -#define IDS_TILE_PUMPKIN_STEM 908 -#define IDS_TILE_MELON_STEM 909 -#define IDS_TILE_VINE 910 -#define IDS_TILE_FENCE_GATE 911 -#define IDS_TILE_STAIRS_BRICKS 912 -#define IDS_TILE_STAIRS_STONE_BRICKS_SMOOTH 913 -#define IDS_TILE_STONE_SILVERFISH 914 -#define IDS_TILE_STONE_SILVERFISH_COBBLESTONE 915 -#define IDS_TILE_STONE_SILVERFISH_STONE_BRICK 916 -#define IDS_TILE_MYCEL 917 -#define IDS_TILE_WATERLILY 918 -#define IDS_TILE_NETHERBRICK 919 -#define IDS_TILE_NETHERFENCE 920 -#define IDS_TILE_STAIRS_NETHERBRICK 921 -#define IDS_TILE_NETHERSTALK 922 -#define IDS_TILE_ENCHANTMENTTABLE 923 -#define IDS_TILE_BREWINGSTAND 924 -#define IDS_TILE_CAULDRON 925 -#define IDS_TILE_END_PORTAL 926 -#define IDS_TILE_ENDPORTALFRAME 927 -#define IDS_TILE_WHITESTONE 928 -#define IDS_TILE_DRAGONEGG 929 -#define IDS_TILE_SHRUB 930 -#define IDS_TILE_FERN 931 -#define IDS_TILE_STAIRS_SANDSTONE 932 -#define IDS_TILE_STAIRS_SPRUCEWOOD 933 -#define IDS_TILE_STAIRS_BIRCHWOOD 934 -#define IDS_TILE_STAIRS_JUNGLEWOOD 935 -#define IDS_TILE_REDSTONE_LIGHT 936 -#define IDS_TILE_COCOA 937 -#define IDS_TILE_SKULL 938 -#define IDS_TILE_COMMAND_BLOCK 939 -#define IDS_TILE_BEACON 940 -#define IDS_TILE_CHEST_TRAP 941 -#define IDS_TILE_WEIGHTED_PLATE_LIGHT 942 -#define IDS_TILE_WEIGHTED_PLATE_HEAVY 943 -#define IDS_TILE_COMPARATOR 944 -#define IDS_TILE_DAYLIGHT_DETECTOR 945 -#define IDS_TILE_REDSTONE_BLOCK 946 -#define IDS_TILE_HOPPER 947 -#define IDS_TILE_ACTIVATOR_RAIL 948 -#define IDS_TILE_DROPPER 949 -#define IDS_TILE_STAINED_CLAY 950 -#define IDS_TILE_HAY 951 -#define IDS_TILE_HARDENED_CLAY 952 -#define IDS_TILE_COAL 953 -#define IDS_TILE_STAINED_CLAY_BLACK 954 -#define IDS_TILE_STAINED_CLAY_RED 955 -#define IDS_TILE_STAINED_CLAY_GREEN 956 -#define IDS_TILE_STAINED_CLAY_BROWN 957 -#define IDS_TILE_STAINED_CLAY_BLUE 958 -#define IDS_TILE_STAINED_CLAY_PURPLE 959 -#define IDS_TILE_STAINED_CLAY_CYAN 960 -#define IDS_TILE_STAINED_CLAY_SILVER 961 -#define IDS_TILE_STAINED_CLAY_GRAY 962 -#define IDS_TILE_STAINED_CLAY_PINK 963 -#define IDS_TILE_STAINED_CLAY_LIME 964 -#define IDS_TILE_STAINED_CLAY_YELLOW 965 -#define IDS_TILE_STAINED_CLAY_LIGHT_BLUE 966 -#define IDS_TILE_STAINED_CLAY_MAGENTA 967 -#define IDS_TILE_STAINED_CLAY_ORANGE 968 -#define IDS_TILE_STAINED_CLAY_WHITE 969 -#define IDS_TILE_STAINED_GLASS 970 -#define IDS_TILE_STAINED_GLASS_BLACK 971 -#define IDS_TILE_STAINED_GLASS_RED 972 -#define IDS_TILE_STAINED_GLASS_GREEN 973 -#define IDS_TILE_STAINED_GLASS_BROWN 974 -#define IDS_TILE_STAINED_GLASS_BLUE 975 -#define IDS_TILE_STAINED_GLASS_PURPLE 976 -#define IDS_TILE_STAINED_GLASS_CYAN 977 -#define IDS_TILE_STAINED_GLASS_SILVER 978 -#define IDS_TILE_STAINED_GLASS_GRAY 979 -#define IDS_TILE_STAINED_GLASS_PINK 980 -#define IDS_TILE_STAINED_GLASS_LIME 981 -#define IDS_TILE_STAINED_GLASS_YELLOW 982 -#define IDS_TILE_STAINED_GLASS_LIGHT_BLUE 983 -#define IDS_TILE_STAINED_GLASS_MAGENTA 984 -#define IDS_TILE_STAINED_GLASS_ORANGE 985 -#define IDS_TILE_STAINED_GLASS_WHITE 986 -#define IDS_TILE_STAINED_GLASS_PANE 987 -#define IDS_TILE_STAINED_GLASS_PANE_BLACK 988 -#define IDS_TILE_STAINED_GLASS_PANE_RED 989 -#define IDS_TILE_STAINED_GLASS_PANE_GREEN 990 -#define IDS_TILE_STAINED_GLASS_PANE_BROWN 991 -#define IDS_TILE_STAINED_GLASS_PANE_BLUE 992 -#define IDS_TILE_STAINED_GLASS_PANE_PURPLE 993 -#define IDS_TILE_STAINED_GLASS_PANE_CYAN 994 -#define IDS_TILE_STAINED_GLASS_PANE_SILVER 995 -#define IDS_TILE_STAINED_GLASS_PANE_GRAY 996 -#define IDS_TILE_STAINED_GLASS_PANE_PINK 997 -#define IDS_TILE_STAINED_GLASS_PANE_LIME 998 -#define IDS_TILE_STAINED_GLASS_PANE_YELLOW 999 -#define IDS_TILE_STAINED_GLASS_PANE_LIGHT_BLUE 1000 -#define IDS_TILE_STAINED_GLASS_PANE_MAGENTA 1001 -#define IDS_TILE_STAINED_GLASS_PANE_ORANGE 1002 -#define IDS_TILE_STAINED_GLASS_PANE_WHITE 1003 -#define IDS_FIREWORKS_CHARGE_TYPE_0 1004 -#define IDS_FIREWORKS_CHARGE_TYPE_1 1005 -#define IDS_FIREWORKS_CHARGE_TYPE_2 1006 -#define IDS_FIREWORKS_CHARGE_TYPE_3 1007 -#define IDS_FIREWORKS_CHARGE_TYPE_4 1008 -#define IDS_FIREWORKS_CHARGE_TYPE 1009 -#define IDS_FIREWORKS_CHARGE_BLACK 1010 -#define IDS_FIREWORKS_CHARGE_RED 1011 -#define IDS_FIREWORKS_CHARGE_GREEN 1012 -#define IDS_FIREWORKS_CHARGE_BROWN 1013 -#define IDS_FIREWORKS_CHARGE_BLUE 1014 -#define IDS_FIREWORKS_CHARGE_PURPLE 1015 -#define IDS_FIREWORKS_CHARGE_CYAN 1016 -#define IDS_FIREWORKS_CHARGE_SILVER 1017 -#define IDS_FIREWORKS_CHARGE_GRAY 1018 -#define IDS_FIREWORKS_CHARGE_PINK 1019 -#define IDS_FIREWORKS_CHARGE_LIME 1020 -#define IDS_FIREWORKS_CHARGE_YELLOW 1021 -#define IDS_FIREWORKS_CHARGE_LIGHT_BLUE 1022 -#define IDS_FIREWORKS_CHARGE_MAGENTA 1023 -#define IDS_FIREWORKS_CHARGE_ORANGE 1024 -#define IDS_FIREWORKS_CHARGE_WHITE 1025 -#define IDS_FIREWORKS_CHARGE_CUSTOM 1026 -#define IDS_FIREWORKS_CHARGE_FADE_TO 1027 -#define IDS_FIREWORKS_CHARGE_FLICKER 1028 -#define IDS_FIREWORKS_CHARGE_TRAIL 1029 -#define IDS_ITEM_FIREWORKS_FLIGHT 1030 -#define IDS_CURRENT_LAYOUT 1031 -#define IDS_CONTROLS_LAYOUT 1032 -#define IDS_CONTROLS_MOVE 1033 -#define IDS_CONTROLS_LOOK 1034 -#define IDS_CONTROLS_PAUSE 1035 -#define IDS_CONTROLS_JUMP 1036 -#define IDS_CONTROLS_JUMPFLY 1037 -#define IDS_CONTROLS_INVENTORY 1038 -#define IDS_CONTROLS_HELDITEM 1039 -#define IDS_CONTROLS_ACTION 1040 -#define IDS_CONTROLS_USE 1041 -#define IDS_CONTROLS_CRAFTING 1042 -#define IDS_CONTROLS_DROP 1043 -#define IDS_CONTROLS_SNEAK 1044 -#define IDS_CONTROLS_SNEAKFLY 1045 -#define IDS_CONTROLS_THIRDPERSON 1046 -#define IDS_CONTROLS_PLAYERS 1047 -#define IDS_CONTROLS_DPAD 1048 -#define IDS_CONTROLS_SCHEME0 1049 -#define IDS_CONTROLS_SCHEME1 1050 -#define IDS_CONTROLS_SCHEME2 1051 -#define IDS_CONTROLLER_A 1052 -#define IDS_CONTROLLER_B 1053 -#define IDS_CONTROLLER_X 1054 -#define IDS_CONTROLLER_Y 1055 -#define IDS_CONTROLLER_LEFT_STICK 1056 -#define IDS_CONTROLLER_RIGHT_STICK 1057 -#define IDS_CONTROLLER_LEFT_TRIGGER 1058 -#define IDS_CONTROLLER_RIGHT_TRIGGER 1059 -#define IDS_CONTROLLER_LEFT_BUMPER 1060 -#define IDS_CONTROLLER_RIGHT_BUMPER 1061 -#define IDS_CONTROLLER_BACK 1062 -#define IDS_CONTROLLER_START 1063 -#define IDS_CONTROLLER_RIGHT_THUMBSTICK 1064 -#define IDS_CONTROLLER_LEFT_THUMBSTICK 1065 -#define IDS_CONTROLLER_DPAD_R 1066 -#define IDS_CONTROLLER_DPAD_L 1067 -#define IDS_CONTROLLER_DPAD_U 1068 -#define IDS_CONTROLLER_DPAD_D 1069 -#define IDS_ICON_SHANK_01 1070 -#define IDS_ICON_SHANK_03 1071 -#define IDS_TUTORIAL_PROMPT_PRESS_A_TO_CONTINUE 1072 -#define IDS_TUTORIAL_PROMPT_START_TUTORIAL 1073 -#define IDS_TUTORIAL_TASK_OVERVIEW 1074 -#define IDS_TUTORIAL_TASK_LOOK 1075 -#define IDS_TUTORIAL_TASK_MOVE 1076 -#define IDS_TUTORIAL_TASK_SPRINT 1077 -#define IDS_TUTORIAL_TASK_JUMP 1078 -#define IDS_TUTORIAL_TASK_MINE 1079 -#define IDS_TUTORIAL_TASK_CHOP_WOOD 1080 -#define IDS_TUTORIAL_TASK_CRAFTING 1081 -#define IDS_TUTORIAL_TASK_INVENTORY 1082 -#define IDS_TUTORIAL_TASK_FOOD_BAR_DEPLETE 1083 -#define IDS_TUTORIAL_TASK_FOOD_BAR_HEAL 1084 -#define IDS_TUTORIAL_TASK_FOOD_BAR_FEED 1085 -#define IDS_TUTORIAL_TASK_FOOD_BAR_EAT_STEAK 1086 -#define IDS_TUTORIAL_TASK_CREATE_PLANKS 1087 -#define IDS_TUTORIAL_TASK_CREATE_CRAFTING_TABLE 1088 -#define IDS_TUTORIAL_TASK_CREATE_STICKS 1089 -#define IDS_TUTORIAL_TASK_SCROLL 1090 -#define IDS_TUTORIAL_TASK_USE 1091 -#define IDS_TUTORIAL_TASK_PLACE_WORKBENCH 1092 -#define IDS_TUTORIAL_TASK_OPEN_WORKBENCH 1093 -#define IDS_TUTORIAL_TASK_CREATE_WOODEN_SHOVEL 1094 -#define IDS_TUTORIAL_TASK_CREATE_WOODEN_HATCHET 1095 -#define IDS_TUTORIAL_TASK_CREATE_WOODEN_PICKAXE 1096 -#define IDS_TUTORIAL_TASK_OPEN_CONTAINER 1097 -#define IDS_TUTORIAL_TASK_NIGHT_DANGER 1098 -#define IDS_TUTORIAL_TASK_NEARBY_SHELTER 1099 -#define IDS_TUTORIAL_TASK_COLLECT_RESOURCES 1100 -#define IDS_TUTORIAL_TASK_MINE_STONE 1101 -#define IDS_TUTORIAL_TASK_CREATE_FURNACE 1102 -#define IDS_TUTORIAL_TASK_PLACE_AND_OPEN_FURNACE 1103 -#define IDS_TUTORIAL_TASK_CREATE_CHARCOAL 1104 -#define IDS_TUTORIAL_TASK_CREATE_GLASS 1105 -#define IDS_TUTORIAL_TASK_CREATE_WOODEN_DOOR 1106 -#define IDS_TUTORIAL_TASK_PLACE_DOOR 1107 -#define IDS_TUTORIAL_TASK_CREATE_TORCH 1108 -#define IDS_TUTORIAL_TASK_BASIC_COMPLETE 1109 -#define IDS_TUTORIAL_PROMPT_BASIC_COMPLETE 1110 -#define IDS_TUTORIAL_TASK_INV_OVERVIEW 1111 -#define IDS_TUTORIAL_PROMPT_INV_OVERVIEW 1112 -#define IDS_TUTORIAL_TASK_INV_PICK_UP 1113 -#define IDS_TUTORIAL_TASK_INV_MOVE 1114 -#define IDS_TUTORIAL_TASK_INV_DROP 1115 -#define IDS_TUTORIAL_TASK_INV_INFO 1116 -#define IDS_TUTORIAL_TASK_INV_EXIT 1117 -#define IDS_TUTORIAL_TASK_CREATIVE_INV_OVERVIEW 1118 -#define IDS_TUTORIAL_PROMPT_CREATIVE_INV_OVERVIEW 1119 -#define IDS_TUTORIAL_TASK_CREATIVE_INV_PICK_UP 1120 -#define IDS_TUTORIAL_TASK_CREATIVE_INV_MOVE 1121 -#define IDS_TUTORIAL_TASK_CREATIVE_INV_DROP 1122 -#define IDS_TUTORIAL_TASK_CREATIVE_INV_NAV 1123 -#define IDS_TUTORIAL_TASK_CREATIVE_INV_INFO 1124 -#define IDS_TUTORIAL_TASK_CREATIVE_INV_EXIT 1125 -#define IDS_TUTORIAL_TASK_CRAFT_OVERVIEW 1126 -#define IDS_TUTORIAL_PROMPT_CRAFT_OVERVIEW 1127 -#define IDS_TUTORIAL_PROMPT_PRESS_X_TO_TOGGLE_DESCRIPTION 1128 -#define IDS_TUTORIAL_PROMPT_PRESS_X_TO_TOGGLE_INGREDIENTS 1129 -#define IDS_TUTORIAL_PROMPT_PRESS_X_TO_TOGGLE_INVENTORY 1130 -#define IDS_TUTORIAL_TASK_CRAFT_NAV 1131 -#define IDS_TUTORIAL_TASK_CRAFT_CREATE 1132 -#define IDS_TUTORIAL_TASK_CRAFT_CRAFT_TABLE 1133 -#define IDS_TUTORIAL_TASK_CRAFT_INVENTORY 1134 -#define IDS_TUTORIAL_TASK_CRAFT_DESCRIPTION 1135 -#define IDS_TUTORIAL_TASK_CRAFT_INGREDIENTS 1136 -#define IDS_TUTORIAL_TASK_CRAFT_CREATE_PLANKS 1137 -#define IDS_TUTORIAL_TASK_CRAFT_EXIT_AND_PLACE_TABLE 1138 -#define IDS_TUTORIAL_TASK_CRAFT_SELECT_TOOLS 1139 -#define IDS_TUTORIAL_TASK_CRAFT_SELECT_STRUCTURES 1140 -#define IDS_TUTORIAL_TASK_CRAFT_SELECT_WOODEN_SHOVEL 1141 -#define IDS_TUTORIAL_TASK_CRAFT_SELECT_CRAFTING_TABLE 1142 -#define IDS_TUTORIAL_TASK_CRAFT_TOOLS_BUILT 1143 -#define IDS_TUTORIAL_TASK_CRAFT_CREATE_FURNACE 1144 -#define IDS_TUTORIAL_TASK_CRAFT_EXIT_AND_PLACE_FURNACE 1145 -#define IDS_TUTORIAL_TASK_FURNACE_OVERVIEW 1146 -#define IDS_TUTORIAL_PROMPT_FURNACE_OVERVIEW 1147 -#define IDS_TUTORIAL_TASK_FURNACE_METHOD 1148 -#define IDS_TUTORIAL_TASK_FURNACE_FUELS 1149 -#define IDS_TUTORIAL_TASK_FURNACE_INGREDIENTS 1150 -#define IDS_TUTORIAL_TASK_FURNACE_CREATE_CHARCOAL 1151 -#define IDS_TUTORIAL_TASK_FURNACE_CHARCOAL_USES 1152 -#define IDS_TUTORIAL_TASK_FURNACE_CREATE_GLASS 1153 -#define IDS_TUTORIAL_TASK_BREWING_MENU_OVERVIEW 1154 -#define IDS_TUTORIAL_PROMPT_BREWING_MENU_OVERVIEW 1155 -#define IDS_TUTORIAL_TASK_BREWING_MENU_METHOD 1156 -#define IDS_TUTORIAL_TASK_BREWING_MENU_BASIC_INGREDIENTS 1157 -#define IDS_TUTORIAL_TASK_BREWING_MENU_EXTENDED_INGREDIENTS 1158 -#define IDS_TUTORIAL_TASK_BREWING_MENU_EXTENDED_INGREDIENTS_2 1159 -#define IDS_TUTORIAL_TASK_BREWING_MENU_CREATE_FIRE_POTION 1160 -#define IDS_TUTORIAL_TASK_BREWING_MENU_EXIT 1161 -#define IDS_TUTORIAL_TASK_BREWING_OVERVIEW 1162 -#define IDS_TUTORIAL_PROMPT_BREWING_OVERVIEW 1163 -#define IDS_TUTORIAL_TASK_BREWING_GET_GLASS_BOTTLE 1164 -#define IDS_TUTORIAL_TASK_BREWING_FILL_GLASS_BOTTLE 1165 -#define IDS_TUTORIAL_TASK_BREWING_FILL_CAULDRON 1166 -#define IDS_TUTORIAL_TASK_BREWING_CREATE_FIRE_POTION 1167 -#define IDS_TUTORIAL_TASK_BREWING_USE_POTION 1168 -#define IDS_TUTORIAL_TASK_BREWING_DRINK_FIRE_POTION 1169 -#define IDS_TUTORIAL_TASK_BREWING_USE_EFFECTS 1170 -#define IDS_TUTORIAL_TASK_ENCHANTING_MENU_OVERVIEW 1171 -#define IDS_TUTORIAL_PROMPT_ENCHANTING_MENU_OVERVIEW 1172 -#define IDS_TUTORIAL_TASK_ENCHANTING_MENU_START 1173 -#define IDS_TUTORIAL_TASK_ENCHANTING_MENU_ENCHANTMENTS 1174 -#define IDS_TUTORIAL_TASK_ENCHANTING_MENU_COST 1175 -#define IDS_TUTORIAL_TASK_ENCHANTING_MENU_ENCHANT 1176 -#define IDS_TUTORIAL_TASK_ENCHANTING_MENU_BETTER_ENCHANTMENTS 1177 -#define IDS_TUTORIAL_TASK_ENCHANTING_OVERVIEW 1178 -#define IDS_TUTORIAL_PROMPT_ENCHANTING_OVERVIEW 1179 -#define IDS_TUTORIAL_TASK_ENCHANTING_SUMMARY 1180 -#define IDS_TUTORIAL_TASK_ENCHANTING_BOOKCASES 1181 -#define IDS_TUTORIAL_TASK_ENCHANTING_EXPERIENCE 1182 -#define IDS_TUTORIAL_TASK_ENCHANTING_BOTTLE_O_ENCHANTING 1183 -#define IDS_TUTORIAL_TASK_ENCHANTING_USE_CHESTS 1184 -#define IDS_TUTORIAL_TASK_MINECART_OVERVIEW 1185 -#define IDS_TUTORIAL_PROMPT_MINECART_OVERVIEW 1186 -#define IDS_TUTORIAL_TASK_MINECART_RAILS 1187 -#define IDS_TUTORIAL_TASK_MINECART_POWERED_RAILS 1188 -#define IDS_TUTORIAL_TASK_BOAT_OVERVIEW 1189 -#define IDS_TUTORIAL_PROMPT_BOAT_OVERVIEW 1190 -#define IDS_TUTORIAL_TASK_BOAT_STEER 1191 -#define IDS_TUTORIAL_TASK_FISHING_OVERVIEW 1192 -#define IDS_TUTORIAL_PROMPT_FISHING_OVERVIEW 1193 -#define IDS_TUTORIAL_TASK_FISHING_CAST 1194 -#define IDS_TUTORIAL_TASK_FISHING_FISH 1195 -#define IDS_TUTORIAL_TASK_FISHING_USES 1196 -#define IDS_TUTORIAL_TASK_BED_OVERVIEW 1197 -#define IDS_TUTORIAL_PROMPT_BED_OVERVIEW 1198 -#define IDS_TUTORIAL_TASK_BED_PLACEMENT 1199 -#define IDS_TUTORIAL_TASK_BED_MULTIPLAYER 1200 -#define IDS_TUTORIAL_REDSTONE_OVERVIEW 1201 -#define IDS_TUTORIAL_PROMPT_REDSTONE_OVERVIEW 1202 -#define IDS_TUTORIAL_TASK_REDSTONE_POWER_SOURCES 1203 -#define IDS_TUTORIAL_TASK_REDSTONE_POWER_SOURCES_POSITION 1204 -#define IDS_TUTORIAL_TASK_REDSTONE_DUST 1205 -#define IDS_TUTORIAL_TASK_REDSTONE_REPEATER 1206 -#define IDS_TUTORIAL_TASK_PISTONS 1207 -#define IDS_TUTORIAL_TASK_TRY_IT 1208 -#define IDS_TUTORIAL_PORTAL_OVERVIEW 1209 -#define IDS_TUTORIAL_PROMPT_PORTAL_OVERVIEW 1210 -#define IDS_TUTORIAL_TASK_BUILD_PORTAL 1211 -#define IDS_TUTORIAL_TASK_ACTIVATE_PORTAL 1212 -#define IDS_TUTORIAL_TASK_USE_PORTAL 1213 -#define IDS_TUTORIAL_TASK_NETHER 1214 -#define IDS_TUTORIAL_TASK_NETHER_FAST_TRAVEL 1215 -#define IDS_TUTORIAL_CREATIVE_OVERVIEW 1216 -#define IDS_TUTORIAL_PROMPT_CREATIVE_OVERVIEW 1217 -#define IDS_TUTORIAL_TASK_CREATIVE_MODE 1218 -#define IDS_TUTORIAL_TASK_OPEN_CREATIVE_INVENTORY 1219 -#define IDS_TUTORIAL_TASK_CREATIVE_EXIT 1220 -#define IDS_TUTORIAL_TASK_CREATIVE_COMPLETE 1221 -#define IDS_TUTORIAL_FARMING_OVERVIEW 1222 -#define IDS_TUTORIAL_PROMPT_FARMING_OVERVIEW 1223 -#define IDS_TUTORIAL_TASK_FARMING_SEEDS 1224 -#define IDS_TUTORIAL_TASK_FARMING_FARMLAND 1225 -#define IDS_TUTORIAL_TASK_FARMING_WHEAT 1226 -#define IDS_TUTORIAL_TASK_FARMING_PUMPKIN_AND_MELON 1227 -#define IDS_TUTORIAL_TASK_FARMING_SUGARCANE 1228 -#define IDS_TUTORIAL_TASK_FARMING_CACTUS 1229 -#define IDS_TUTORIAL_TASK_FARMING_MUSHROOM 1230 -#define IDS_TUTORIAL_TASK_FARMING_BONEMEAL 1231 -#define IDS_TUTORIAL_TASK_FARMING_COMPLETE 1232 -#define IDS_TUTORIAL_BREEDING_OVERVIEW 1233 -#define IDS_TUTORIAL_PROMPT_BREEDING_OVERVIEW 1234 -#define IDS_TUTORIAL_TASK_BREEDING_FEED 1235 -#define IDS_TUTORIAL_TASK_BREEDING_FEED_FOOD 1236 -#define IDS_TUTORIAL_TASK_BREEDING_BABY 1237 -#define IDS_TUTORIAL_TASK_BREEDING_DELAY 1238 -#define IDS_TUTORIAL_TASK_BREEDING_FOLLOW 1239 -#define IDS_TUTORIAL_TASK_BREEDING_WOLF_TAMING 1240 -#define IDS_TUTORIAL_TASK_BREEDING_COMPLETE 1241 -#define IDS_TUTORIAL_GOLEM_OVERVIEW 1242 -#define IDS_TUTORIAL_PROMPT_GOLEM_OVERVIEW 1243 -#define IDS_TUTORIAL_TASK_GOLEM_PUMPKIN 1244 -#define IDS_TUTORIAL_TASK_GOLEM_SNOW 1245 -#define IDS_TUTORIAL_TASK_GOLEM_IRON 1246 -#define IDS_TUTORIAL_TASK_GOLEM_IRON_VILLAGE 1247 -#define IDS_TUTORIAL_CONSTRAINT_TUTORIAL_AREA 1248 -#define IDS_TUTORIAL_HINT_DIGGER_ITEM_SHOVEL 1249 -#define IDS_TUTORIAL_HINT_DIGGER_ITEM_HATCHET 1250 -#define IDS_TUTORIAL_HINT_DIGGER_ITEM_PICKAXE 1251 -#define IDS_TUTORIAL_HINT_ATTACK_WITH_TOOL 1252 -#define IDS_TUTORIAL_HINT_HOLD_TO_MINE 1253 -#define IDS_TUTORIAL_HINT_TOOL_DAMAGED 1254 -#define IDS_TUTORIAL_HINT_SWIM_UP 1255 -#define IDS_TUTORIAL_HINT_MINECART 1256 -#define IDS_TUTORIAL_HINT_BOAT 1257 -#define IDS_TUTORIAL_HINT_FISHING 1258 -#define IDS_TUTORIAL_HINT_PISTON_SELF_REPAIRING_BRIDGE 1259 -#define IDS_TUTORIAL_HINT_INV_DROP 1260 -#define IDS_TUTORIAL_HINT_CRAFT_NO_INGREDIENTS 1261 -#define IDS_TUTORIAL_COMPLETED 1262 -#define IDS_TUTORIAL_COMPLETED_EXPLORE 1263 -#define IDS_TUTORIAL_REMINDER 1264 -#define IDS_TUTORIAL_HTML_EXIT_PICTURE 1265 -#define IDS_TUTORIAL_NEW_FEATURES_CHOICE 1266 -#define IDS_TUTORIAL_PROMPT_NEW_FEATURES_CHOICE 1267 -#define IDS_TUTORIAL_FEATURES_IN_THIS_AREA 1268 -#define IDS_TUTORIAL_FEATURES_OUTSIDE_THIS_AREA 1269 -#define IDS_TUTORIAL_TASK_FOOD_BAR_OVERVIEW 1270 -#define IDS_TUTORIAL_PROMPT_FOOD_BAR_OVERVIEW 1271 -#define IDS_TUTORIAL_TASK_HORSE_MENU_OVERVIEW 1272 -#define IDS_TUTORIAL_PROMPT_HORSE_MENU_OVERVIEW 1273 -#define IDS_TUTORIAL_TASK_HORSE_MENU_LAYOUT 1274 -#define IDS_TUTORIAL_TASK_HORSE_MENU_EQUIPMENT 1275 -#define IDS_TUTORIAL_TASK_HORSE_MENU_SADDLEBAGS 1276 -#define IDS_TUTORIAL_TASK_HORSE_OVERVIEW 1277 -#define IDS_TUTORIAL_TASK_DONKEY_OVERVIEW 1278 -#define IDS_TUTORIAL_TASK_MULE_OVERVIEW 1279 -#define IDS_TUTORIAL_PROMPT_HORSE_OVERVIEW 1280 -#define IDS_TUTORIAL_TASK_HORSE_INTRO 1281 -#define IDS_TUTORIAL_TASK_HORSE_PURPOSE 1282 -#define IDS_TUTORIAL_TASK_HORSE_TAMING 1283 -#define IDS_TUTORIAL_TASK_HORSE_TAMING2 1284 -#define IDS_TUTORIAL_TASK_HORSE_RIDE 1285 -#define IDS_TUTORIAL_TASK_HORSE_SADDLES 1286 -#define IDS_TUTORIAL_TASK_HORSE_SADDLEBAGS 1287 -#define IDS_TUTORIAL_TASK_HORSE_BREEDING 1288 -#define IDS_TUTORIAL_TASK_HORSE_AREA 1289 -#define IDS_TUTORIAL_TASK_BEACON_MENU_OVERVIEW 1290 -#define IDS_TUTORIAL_PROMPT_BEACON_MENU_OVERVIEW 1291 -#define IDS_TUTORIAL_TASK_BEACON_MENU_PRIMARY_POWERS 1292 -#define IDS_TUTORIAL_TASK_BEACON_MENU_SECONDARY_POWER 1293 -#define IDS_TUTORIAL_TASK_BEACON_MENU_ACTIVATION 1294 -#define IDS_TUTORIAL_TASK_BEACON_OVERVIEW 1295 -#define IDS_TUTORIAL_PROMPT_BEACON_OVERVIEW 1296 -#define IDS_TUTORIAL_TASK_BEACON_PURPOSE 1297 -#define IDS_TUTORIAL_TASK_BEACON_DESIGN 1298 -#define IDS_TUTORIAL_TASK_BEACON_CHOOSING_POWERS 1299 -#define IDS_TUTORIAL_TASK_HOPPER_OVERVIEW 1300 -#define IDS_TUTORIAL_PROMPT_HOPPER_OVERVIEW 1301 -#define IDS_TUTORIAL_TASK_HOPPER_PURPOSE 1302 -#define IDS_TUTORIAL_TASK_HOPPER_CONTAINERS 1303 -#define IDS_TUTORIAL_TASK_HOPPER_MECHANICS 1304 -#define IDS_TUTORIAL_TASK_HOPPER_REDSTONE 1305 -#define IDS_TUTORIAL_TASK_HOPPER_OUTPUT 1306 -#define IDS_TUTORIAL_TASK_HOPPER_AREA 1307 -#define IDS_TUTORIAL_TASK_FIREWORK_MENU_OVERVIEW 1308 -#define IDS_TUTORIAL_PROMPT_FIREWORK_MENU_OVERVIEW 1309 -#define IDS_TUTORIAL_TASK_FIREWORK_MENU_BASIC_START 1310 -#define IDS_TUTORIAL_TASK_FIREWORK_MENU_BASIC_STARS 1311 -#define IDS_TUTORIAL_TASK_FIREWORK_MENU_BASIC_HEIGHT 1312 -#define IDS_TUTORIAL_TASK_FIREWORK_MENU_BASIC_CRAFT 1313 -#define IDS_TUTORIAL_TASK_FIREWORK_MENU_ADV_START 1314 -#define IDS_TUTORIAL_TASK_FIREWORK_MENU_ADV_COLOUR 1315 -#define IDS_TUTORIAL_TASK_FIREWORK_MENU_ADV_SHAPE 1316 -#define IDS_TUTORIAL_TASK_FIREWORK_MENU_ADV_EFFECT 1317 -#define IDS_TUTORIAL_TASK_FIREWORK_MENU_ADV_FADE 1318 -#define IDS_TUTORIAL_TASK_FIREWORK_OVERVIEW 1319 -#define IDS_TUTORIAL_PROMPT_FIREWORK_OVERVIEW 1320 -#define IDS_TUTORIAL_TASK_FIREWORK_PURPOSE 1321 -#define IDS_TUTORIAL_TASK_FIREWORK_CUSTOMISE 1322 -#define IDS_TUTORIAL_TASK_FIREWORK_CRAFTING 1323 -#define IDS_TOOLTIPS_SELECT 1324 -#define IDS_TOOLTIPS_USE 1325 -#define IDS_TOOLTIPS_BACK 1326 -#define IDS_TOOLTIPS_EXIT 1327 -#define IDS_TOOLTIPS_CANCEL 1328 -#define IDS_TOOLTIPS_CANCEL_JOIN 1329 -#define IDS_TOOLTIPS_REFRESH 1330 -#define IDS_TOOLTIPS_PARTY_GAMES 1331 -#define IDS_TOOLTIPS_ALL_GAMES 1332 -#define IDS_TOOLTIPS_CHANGE_GROUP 1333 -#define IDS_TOOLTIPS_SHOW_INVENTORY 1334 -#define IDS_TOOLTIPS_SHOW_DESCRIPTION 1335 -#define IDS_TOOLTIPS_SHOW_INGREDIENTS 1336 -#define IDS_TOOLTIPS_CRAFTING 1337 -#define IDS_TOOLTIPS_CREATE 1338 -#define IDS_TOOLTIPS_PICKUPPLACE 1339 -#define IDS_TOOLTIPS_PICKUP_GENERIC 1340 -#define IDS_TOOLTIPS_PICKUP_ALL 1341 -#define IDS_TOOLTIPS_PICKUP_HALF 1342 -#define IDS_TOOLTIPS_PLACE_GENERIC 1343 -#define IDS_TOOLTIPS_PLACE_ALL 1344 -#define IDS_TOOLTIPS_PLACE_ONE 1345 -#define IDS_TOOLTIPS_DROP_GENERIC 1346 -#define IDS_TOOLTIPS_DROP_ALL 1347 -#define IDS_TOOLTIPS_DROP_ONE 1348 -#define IDS_TOOLTIPS_SWAP 1349 -#define IDS_TOOLTIPS_QUICK_MOVE 1350 -#define IDS_TOOLTIPS_CLEAR_QUICK_SELECT 1351 -#define IDS_TOOLTIPS_WHAT_IS_THIS 1352 -#define IDS_TOOLTIPS_SHARE 1353 -#define IDS_TOOLTIPS_CHANGE_FILTER 1354 -#define IDS_TOOLTIPS_SEND_FRIEND_REQUEST 1355 -#define IDS_TOOLTIPS_PAGE_DOWN 1356 -#define IDS_TOOLTIPS_PAGE_UP 1357 -#define IDS_TOOLTIPS_NEXT 1358 -#define IDS_TOOLTIPS_PREVIOUS 1359 -#define IDS_TOOLTIPS_KICK 1360 -#define IDS_TOOLTIPS_DYE 1361 -#define IDS_TOOLTIPS_MINE 1362 -#define IDS_TOOLTIPS_FEED 1363 -#define IDS_TOOLTIPS_TAME 1364 -#define IDS_TOOLTIPS_HEAL 1365 -#define IDS_TOOLTIPS_SIT 1366 -#define IDS_TOOLTIPS_FOLLOWME 1367 -#define IDS_TOOLTIPS_EJECT 1368 -#define IDS_TOOLTIPS_EMPTY 1369 -#define IDS_TOOLTIPS_SADDLE 1370 -#define IDS_TOOLTIPS_PLACE 1371 -#define IDS_TOOLTIPS_HIT 1372 -#define IDS_TOOLTIPS_MILK 1373 -#define IDS_TOOLTIPS_COLLECT 1374 -#define IDS_TOOLTIPS_EAT 1375 -#define IDS_TOOLTIPS_SLEEP 1376 -#define IDS_TOOLTIPS_WAKEUP 1377 -#define IDS_TOOLTIPS_PLAY 1378 -#define IDS_TOOLTIPS_RIDE 1379 -#define IDS_TOOLTIPS_SAIL 1380 -#define IDS_TOOLTIPS_GROW 1381 -#define IDS_TOOLTIPS_SWIMUP 1382 -#define IDS_TOOLTIPS_OPEN 1383 -#define IDS_TOOLTIPS_CHANGEPITCH 1384 -#define IDS_TOOLTIPS_DETONATE 1385 -#define IDS_TOOLTIPS_READ 1386 -#define IDS_TOOLTIPS_HANG 1387 -#define IDS_TOOLTIPS_THROW 1388 -#define IDS_TOOLTIPS_PLANT 1389 -#define IDS_TOOLTIPS_TILL 1390 -#define IDS_TOOLTIPS_HARVEST 1391 -#define IDS_TOOLTIPS_CONTINUE 1392 -#define IDS_TOOLTIPS_UNLOCKFULLVERSION 1393 -#define IDS_TOOLTIPS_DELETESAVE 1394 -#define IDS_TOOLTIPS_DELETE 1395 -#define IDS_TOOLTIPS_OPTIONS 1396 -#define IDS_TOOLTIPS_INVITE_FRIENDS 1397 -#define IDS_TOOLTIPS_ACCEPT 1398 -#define IDS_TOOLTIPS_SHEAR 1399 -#define IDS_TOOLTIPS_BANLEVEL 1400 -#define IDS_TOOLTIPS_SELECT_SKIN 1401 -#define IDS_TOOLTIPS_IGNITE 1402 -#define IDS_TOOLTIPS_NAVIGATE 1403 -#define IDS_TOOLTIPS_INSTALL_FULL 1404 -#define IDS_TOOLTIPS_INSTALL_TRIAL 1405 -#define IDS_TOOLTIPS_INSTALL 1406 -#define IDS_TOOLTIPS_REINSTALL 1407 -#define IDS_TOOLTIPS_SAVEOPTIONS 1408 -#define IDS_TOOLTIPS_EXECUTE_COMMAND 1409 -#define IDS_TOOLTIPS_CREATIVE 1410 -#define IDS_TOOLTIPS_QUICK_MOVE_INGREDIENT 1411 -#define IDS_TOOLTIPS_QUICK_MOVE_FUEL 1412 -#define IDS_TOOLTIPS_QUICK_MOVE_TOOL 1413 -#define IDS_TOOLTIPS_QUICK_MOVE_ARMOR 1414 -#define IDS_TOOLTIPS_QUICK_MOVE_WEAPON 1415 -#define IDS_TOOLTIPS_EQUIP 1416 -#define IDS_TOOLTIPS_DRAW_BOW 1417 -#define IDS_TOOLTIPS_RELEASE_BOW 1418 -#define IDS_TOOLTIPS_PRIVILEGES 1419 -#define IDS_TOOLTIPS_BLOCK 1420 -#define IDS_TOOLTIPS_PAGEUP 1421 -#define IDS_TOOLTIPS_PAGEDOWN 1422 -#define IDS_TOOLTIPS_LOVEMODE 1423 -#define IDS_TOOLTIPS_DRINK 1424 -#define IDS_TOOLTIPS_ROTATE 1425 -#define IDS_TOOLTIPS_CLEARSLOTS 1426 -#define IDS_TOOLTIPS_MOUNT 1427 -#define IDS_TOOLTIPS_DISMOUNT 1428 -#define IDS_TOOLTIPS_SADDLEBAGS 1429 -#define IDS_TOOLTIPS_FIREWORK_LAUNCH 1430 -#define IDS_TOOLTIPS_LEASH 1431 -#define IDS_TOOLTIPS_UNLEASH 1432 -#define IDS_TOOLTIPS_ATTACH 1433 -#define IDS_TOOLTIPS_NAME 1434 -#define IDS_CONFIRM_OK 1435 -#define IDS_CONFIRM_CANCEL 1436 -#define IDS_DOWNLOADABLECONTENT 1437 -#define IDS_CONFIRM_LEAVE_VIA_INVITE 1438 -#define IDS_EXIT_GAME 1439 -#define IDS_TITLE_SAVE_GAME 1440 -#define IDS_TITLE_DECLINE_SAVE_GAME 1441 -#define IDS_CONFIRM_SAVE_GAME 1442 -#define IDS_CONFIRM_DECLINE_SAVE_GAME 1443 -#define IDS_TITLE_START_GAME 1444 -#define IDS_CORRUPT_OR_DAMAGED_SAVE_TITLE 1445 -#define IDS_CORRUPT_OR_DAMAGED_SAVE_TEXT 1446 -#define IDS_CONFIRM_EXIT_GAME_CONFIRM_DISCONNECT_SAVE 1447 -#define IDS_EXIT_GAME_SAVE 1448 -#define IDS_EXIT_GAME_NO_SAVE 1449 -#define IDS_CONFIRM_EXIT_GAME 1450 -#define IDS_CONFIRM_EXIT_GAME_PROGRESS_LOST 1451 -#define IDS_CREATE_NEW_WORLD 1452 -#define IDS_PLAY_TUTORIAL 1453 -#define IDS_TUTORIALSAVENAME 1454 -#define IDS_NAME_WORLD 1455 -#define IDS_NAME_WORLD_TEXT 1456 -#define IDS_CREATE_NEW_WORLD_SEEDTEXT 1457 -#define IDS_LOAD_SAVED_WORLD 1458 -#define IDS_PRESS_START_TO_JOIN 1459 -#define IDS_EXITING_GAME 1460 -#define IDS_GENERIC_ERROR 1461 -#define IDS_CONNECTION_FAILED 1462 -#define IDS_CONNECTION_LOST 1463 -#define IDS_CONNECTION_LOST_SERVER 1464 -#define IDS_DISCONNECTED 1465 -#define IDS_DISCONNECTED_KICKED 1466 -#define IDS_DISCONNECTED_FLYING 1467 -#define IDS_DISCONNECTED_LOGIN_TOO_LONG 1468 -#define IDS_DISCONNECTED_SERVER_FULL 1469 -#define IDS_DISCONNECTED_SERVER_QUIT 1470 -#define IDS_DISCONNECTED_NO_FRIENDS_IN_GAME 1471 -#define IDS_DISCONNECTED_BANNED 1472 -#define IDS_DISCONNECTED_SERVER_OLD 1473 -#define IDS_DISCONNECTED_CLIENT_OLD 1474 -#define IDS_DEFAULT_SAVENAME 1475 -#define IDS_AWARD_TITLE 1476 -#define IDS_AWARD_GAMERPIC1 1477 -#define IDS_AWARD_GAMERPIC2 1478 -#define IDS_UNLOCK_TITLE 1479 -#define IDS_UNLOCK_TOSAVE_TEXT 1480 -#define IDS_LEADERBOARD_LOADING 1481 -#define IDS_LEADERBOARD_NORESULTS 1482 -#define IDS_LEADERBOARD_FILTER 1483 -#define IDS_LEADERBOARD_FILTER_FRIENDS 1484 -#define IDS_LEADERBOARD_FILTER_MYSCORE 1485 -#define IDS_LEADERBOARD_FILTER_OVERALL 1486 -#define IDS_LEADERBOARD_ENTRIES 1487 -#define IDS_LEADERBOARD_RANK 1488 -#define IDS_PROGRESS_SAVING_LEVEL 1489 -#define IDS_PROGRESS_SAVING_CHUNKS 1490 -#define IDS_PROGRESS_SAVING_TO_DISC 1491 -#define IDS_PROGRESS_BUILDING_TERRAIN 1492 -#define IDS_PROGRESS_SIMULATING_WORLD 1493 -#define IDS_PROGRESS_INITIALISING_SERVER 1494 -#define IDS_PROGRESS_GENERATING_SPAWN_AREA 1495 -#define IDS_PROGRESS_LOADING_SPAWN_AREA 1496 -#define IDS_PROGRESS_ENTERING_NETHER 1497 -#define IDS_PROGRESS_LEAVING_NETHER 1498 -#define IDS_PROGRESS_RESPAWNING 1499 -#define IDS_PROGRESS_GENERATING_LEVEL 1500 -#define IDS_PROGRESS_LOADING_LEVEL 1501 -#define IDS_PROGRESS_SAVING_PLAYERS 1502 -#define IDS_PROGRESS_CONNECTING 1503 -#define IDS_PROGRESS_DOWNLOADING_TERRAIN 1504 -#define IDS_PROGRESS_CONVERTING_TO_OFFLINE_GAME 1505 -#define IDS_PROGRESS_HOST_SAVING 1506 -#define IDS_PROGRESS_ENTERING_END 1507 -#define IDS_PROGRESS_LEAVING_END 1508 -#define IDS_PROGRESS_NEW_WORLD_SEED 1509 -#define IDS_TILE_BED_OCCUPIED 1510 -#define IDS_TILE_BED_NO_SLEEP 1511 -#define IDS_TILE_BED_PLAYERSLEEP 1512 -#define IDS_TILE_BED_NOT_VALID 1513 -#define IDS_TILE_BED_NOTSAFE 1514 -#define IDS_TILE_BED_MESLEEP 1515 -#define IDS_GROUPNAME_TOOLS 1516 -#define IDS_GROUPNAME_WEAPONS 1517 -#define IDS_GROUPNAME_FOOD 1518 -#define IDS_GROUPNAME_STRUCTURES 1519 -#define IDS_GROUPNAME_ARMOUR 1520 -#define IDS_GROUPNAME_MECHANISMS 1521 -#define IDS_GROUPNAME_TRANSPORT 1522 -#define IDS_GROUPNAME_DECORATIONS 1523 -#define IDS_GROUPNAME_BUILDING_BLOCKS 1524 -#define IDS_GROUPNAME_REDSTONE_AND_TRANSPORT 1525 -#define IDS_GROUPNAME_MISCELLANEOUS 1526 -#define IDS_GROUPNAME_POTIONS 1527 -#define IDS_GROUPNAME_TOOLS_WEAPONS_ARMOR 1528 -#define IDS_GROUPNAME_MATERIALS 1529 -#define IDS_RETURNEDTOMENU_TITLE 1530 -#define IDS_SLIDER_DIFFICULTY 1531 -#define IDS_SLIDER_MUSIC 1532 -#define IDS_SLIDER_SOUND 1533 -#define IDS_SLIDER_GAMMA 1534 -#define IDS_SLIDER_SENSITIVITY_INGAME 1535 -#define IDS_SLIDER_SENSITIVITY_INMENU 1536 -#define IDS_DIFFICULTY_TITLE_PEACEFUL 1537 -#define IDS_DIFFICULTY_TITLE_EASY 1538 -#define IDS_DIFFICULTY_TITLE_NORMAL 1539 -#define IDS_DIFFICULTY_TITLE_HARD 1540 -#define IDS_DIFFICULTY_PEACEFUL 1541 -#define IDS_DIFFICULTY_EASY 1542 -#define IDS_DIFFICULTY_NORMAL 1543 -#define IDS_DIFFICULTY_HARD 1544 -#define IDS_TRIALOVER_TITLE 1545 -#define IDS_MULTIPLAYER_FULL_TITLE 1546 -#define IDS_MULTIPLAYER_FULL_TEXT 1547 -#define IDS_SIGN_TITLE 1548 -#define IDS_SIGN_TITLE_TEXT 1549 -#define IDS_NAME_TITLE 1550 -#define IDS_NAME_TITLE_TEXT 1551 -#define IDS_NAME_CAPTION 1552 -#define IDS_NAME_CAPTION_TEXT 1553 -#define IDS_NAME_DESC 1554 -#define IDS_NAME_DESC_TEXT 1555 -#define IDS_INVENTORY 1556 -#define IDS_INGREDIENTS 1557 -#define IDS_BREWING_STAND 1558 -#define IDS_CHEST 1559 -#define IDS_ENCHANT 1560 -#define IDS_FURNACE 1561 -#define IDS_INGREDIENT 1562 -#define IDS_FUEL 1563 -#define IDS_DISPENSER 1564 -#define IDS_CONTAINER_ANIMAL 1565 -#define IDS_CONTAINER_DROPPER 1566 -#define IDS_CONTAINER_HOPPER 1567 -#define IDS_CONTAINER_BEACON 1568 -#define IDS_CONTAINER_BEACON_PRIMARY_POWER 1569 -#define IDS_CONTAINER_BEACON_SECONDARY_POWER 1570 -#define IDS_CONTAINER_MINECART 1571 -#define IDS_NO_DLCOFFERS 1572 -#define IDS_PLAYER_JOINED 1573 -#define IDS_PLAYER_LEFT 1574 -#define IDS_PLAYER_KICKED 1575 -#define IDS_TEXT_DELETE_SAVE 1576 -#define IDS_STRINGVERIFY_AWAITING_APPROVAL 1577 -#define IDS_STRINGVERIFY_CENSORED 1578 -#define IDS_NOWPLAYING 1579 -#define IDS_DEFAULTS_TITLE 1580 -#define IDS_DEFAULTS_TEXT 1581 -#define IDS_FATAL_ERROR_TITLE 1582 -#define IDS_GAME_HOST_NAME 1583 -#define IDS_GAME_HOST_NAME_UNKNOWN 1584 -#define IDS_GUEST_ORDER_CHANGED_TITLE 1585 -#define IDS_GUEST_ORDER_CHANGED_TEXT 1586 -#define IDS_MUST_SIGN_IN_TITLE 1587 -#define IDS_MUST_SIGN_IN_TEXT 1588 -#define IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE 1589 -#define IDS_FAILED_TO_CREATE_GAME_TITLE 1590 -#define IDS_DEFAULT_SKINS 1591 -#define IDS_NO_SKIN_PACK 1592 -#define IDS_FAVORITES_SKIN_PACK 1593 -#define IDS_BANNED_LEVEL_TITLE 1594 -#define IDS_PLAYER_BANNED_LEVEL 1595 -#define IDS_ACTION_BAN_LEVEL_TITLE 1596 -#define IDS_ACTION_BAN_LEVEL_DESCRIPTION 1597 -#define IDS_BUTTON_REMOVE_FROM_BAN_LIST 1598 -#define IDS_SLIDER_AUTOSAVE 1599 -#define IDS_SLIDER_AUTOSAVE_OFF 1600 -#define IDS_MINUTES 1601 -#define IDS_CANT_PLACE_NEAR_SPAWN_TITLE 1602 -#define IDS_CANT_PLACE_NEAR_SPAWN_TEXT 1603 -#define IDS_SLIDER_INTERFACEOPACITY 1604 -#define IDS_PROGRESS_AUTOSAVING_LEVEL 1605 -#define IDS_SLIDER_UISIZE 1606 -#define IDS_SLIDER_UISIZESPLITSCREEN 1607 -#define IDS_SEED 1608 -#define IDS_UNLOCK_DLC_TITLE 1609 -#define IDS_UNLOCK_DLC_SKIN 1610 -#define IDS_UNLOCK_DLC_TEXTUREPACK_TITLE 1611 -#define IDS_UNLOCK_DLC_TEXTUREPACK_TEXT 1612 -#define IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE 1613 -#define IDS_WARNING_DLC_TRIALTEXTUREPACK_TEXT 1614 -#define IDS_DLC_TEXTUREPACK_NOT_PRESENT_TITLE 1615 -#define IDS_DLC_TEXTUREPACK_UNLOCK_TITLE 1616 -#define IDS_DLC_TEXTUREPACK_GET_TRIAL_TITLE 1617 -#define IDS_DLC_TEXTUREPACK_GET_FULL_TITLE 1618 -#define IDS_DLC_TEXTUREPACK_NOT_PRESENT 1619 -#define IDS_TEXTURE_PACK_TRIALVERSION 1620 -#define IDS_TEXTUREPACK_FULLVERSION 1621 -#define IDS_UNLOCK_KICK_PLAYER_TITLE 1622 -#define IDS_UNLOCK_KICK_PLAYER 1623 -#define IDS_GAMERPICS 1624 -#define IDS_THEMES 1625 -#define IDS_SKINS 1626 -#define IDS_ALLOWFRIENDSOFFRIENDS 1627 -#define IDS_NOTALLOWED_FRIENDSOFFRIENDS 1628 -#define IDS_CANTJOIN_TITLE 1629 -#define IDS_SELECTED 1630 -#define IDS_SELECTED_SKIN 1631 -#define IDS_CORRUPT_DLC_TITLE 1632 -#define IDS_CORRUPT_DLC 1633 -#define IDS_CORRUPT_DLC_MULTIPLE 1634 -#define IDS_GAME_MODE_CHANGED 1635 -#define IDS_RENAME_WORLD_TITLE 1636 -#define IDS_RENAME_WORLD_TEXT 1637 -#define IDS_GAMEMODE_SURVIVAL 1638 -#define IDS_GAMEMODE_CREATIVE 1639 -#define IDS_GAMEMODE_ADVENTURE 1640 -#define IDS_SURVIVAL 1641 -#define IDS_CREATIVE 1642 -#define IDS_ADVENTURE 1643 -#define IDS_CREATED_IN_SURVIVAL 1644 -#define IDS_CREATED_IN_CREATIVE 1645 -#define IDS_CHECKBOX_RENDER_CLOUDS 1646 -#define IDS_TEXT_SAVEOPTIONS 1647 -#define IDS_TITLE_RENAMESAVE 1648 -#define IDS_AUTOSAVE_COUNTDOWN 1649 -#define IDS_ON 1650 -#define IDS_OFF 1651 -#define IDS_LEVELTYPE_NORMAL 1652 -#define IDS_LEVELTYPE_SUPERFLAT 1653 -#define IDS_GAMEOPTION_SEED 1654 -#define IDS_GAMEOPTION_ONLINE 1655 -#define IDS_GAMEOPTION_INVITEONLY 1656 -#define IDS_GAMEOPTION_ALLOWFOF 1657 -#define IDS_GAMEOPTION_PVP 1658 -#define IDS_GAMEOPTION_TRUST 1659 -#define IDS_GAMEOPTION_FIRE_SPREADS 1660 -#define IDS_GAMEOPTION_TNT_EXPLODES 1661 -#define IDS_GAMEOPTION_RESET_NETHER 1662 -#define IDS_GAMEOPTION_STRUCTURES 1663 -#define IDS_GAMEOPTION_SUPERFLAT 1664 -#define IDS_GAMEOPTION_BONUS_CHEST 1665 -#define IDS_GAMEOPTION_MOB_GRIEFING 1666 -#define IDS_GAMEOPTION_KEEP_INVENTORY 1667 -#define IDS_GAMEOPTION_MOB_SPAWNING 1668 -#define IDS_GAMEOPTION_MOB_LOOT 1669 -#define IDS_GAMEOPTION_TILE_DROPS 1670 -#define IDS_GAMEOPTION_NATURAL_REGEN 1671 -#define IDS_GAMEOPTION_DAYLIGHT_CYCLE 1672 -#define IDS_DLC_MENU_SKINPACKS 1673 -#define IDS_DLC_MENU_THEMES 1674 -#define IDS_DLC_MENU_GAMERPICS 1675 -#define IDS_DLC_MENU_AVATARITEMS 1676 -#define IDS_DLC_MENU_TEXTUREPACKS 1677 -#define IDS_DLC_MENU_MASHUPPACKS 1678 -#define IDS_DEATH_INFIRE 1679 -#define IDS_DEATH_ONFIRE 1680 -#define IDS_DEATH_LAVA 1681 -#define IDS_DEATH_INWALL 1682 -#define IDS_DEATH_DROWN 1683 -#define IDS_DEATH_STARVE 1684 -#define IDS_DEATH_CACTUS 1685 -#define IDS_DEATH_FALL 1686 -#define IDS_DEATH_OUTOFWORLD 1687 -#define IDS_DEATH_GENERIC 1688 -#define IDS_DEATH_EXPLOSION 1689 -#define IDS_DEATH_MAGIC 1690 -#define IDS_DEATH_DRAGON_BREATH 1691 -#define IDS_DEATH_MOB 1692 -#define IDS_DEATH_PLAYER 1693 -#define IDS_DEATH_ARROW 1694 -#define IDS_DEATH_FIREBALL 1695 -#define IDS_DEATH_THROWN 1696 -#define IDS_DEATH_INDIRECT_MAGIC 1697 -#define IDS_DEATH_FELL_ACCIDENT_LADDER 1698 -#define IDS_DEATH_FELL_ACCIDENT_VINES 1699 -#define IDS_DEATH_FELL_ACCIDENT_WATER 1700 -#define IDS_DEATH_FELL_ACCIDENT_GENERIC 1701 -#define IDS_DEATH_FELL_KILLER 1702 -#define IDS_DEATH_FELL_ASSIST 1703 -#define IDS_DEATH_FELL_ASSIST_ITEM 1704 -#define IDS_DEATH_FELL_FINISH 1705 -#define IDS_DEATH_FELL_FINISH_ITEM 1706 -#define IDS_DEATH_INFIRE_PLAYER 1707 -#define IDS_DEATH_ONFIRE_PLAYER 1708 -#define IDS_DEATH_LAVA_PLAYER 1709 -#define IDS_DEATH_DROWN_PLAYER 1710 -#define IDS_DEATH_CACTUS_PLAYER 1711 -#define IDS_DEATH_EXPLOSION_PLAYER 1712 -#define IDS_DEATH_WITHER 1713 -#define IDS_DEATH_PLAYER_ITEM 1714 -#define IDS_DEATH_ARROW_ITEM 1715 -#define IDS_DEATH_FIREBALL_ITEM 1716 -#define IDS_DEATH_THROWN_ITEM 1717 -#define IDS_DEATH_INDIRECT_MAGIC_ITEM 1718 -#define IDS_CHECKBOX_RENDER_BEDROCKFOG 1719 -#define IDS_CHECKBOX_DISPLAY_HUD 1720 -#define IDS_CHECKBOX_DISPLAY_HAND 1721 -#define IDS_CHECKBOX_DEATH_MESSAGES 1722 -#define IDS_CHECKBOX_ANIMATED_CHARACTER 1723 -#define IDS_CHECKBOX_CUSTOM_SKIN_ANIM 1724 -#define IDS_PRIV_MINE_TOGGLE_ON 1725 -#define IDS_PRIV_MINE_TOGGLE_OFF 1726 -#define IDS_PRIV_BUILD_TOGGLE_ON 1727 -#define IDS_PRIV_BUILD_TOGGLE_OFF 1728 -#define IDS_PRIV_USE_DOORS_TOGGLE_ON 1729 -#define IDS_PRIV_USE_DOORS_TOGGLE_OFF 1730 -#define IDS_PRIV_USE_CONTAINERS_TOGGLE_ON 1731 -#define IDS_PRIV_USE_CONTAINERS_TOGGLE_OFF 1732 -#define IDS_PRIV_ATTACK_MOB_TOGGLE_ON 1733 -#define IDS_PRIV_ATTACK_MOB_TOGGLE_OFF 1734 -#define IDS_PRIV_ATTACK_PLAYER_TOGGLE_ON 1735 -#define IDS_PRIV_ATTACK_PLAYER_TOGGLE_OFF 1736 -#define IDS_PRIV_ATTACK_ANIMAL_TOGGLE_ON 1737 -#define IDS_PRIV_ATTACK_ANIMAL_TOGGLE_OFF 1738 -#define IDS_PRIV_MODERATOR_TOGGLE_ON 1739 -#define IDS_PRIV_MODERATOR_TOGGLE_OFF 1740 -#define IDS_PRIV_FLY_TOGGLE_ON 1741 -#define IDS_PRIV_FLY_TOGGLE_OFF 1742 -#define IDS_PRIV_EXHAUSTION_TOGGLE_ON 1743 -#define IDS_PRIV_EXHAUSTION_TOGGLE_OFF 1744 -#define IDS_PRIV_INVISIBLE_TOGGLE_ON 1745 -#define IDS_PRIV_INVISIBLE_TOGGLE_OFF 1746 -#define IDS_PRIV_INVULNERABLE_TOGGLE_ON 1747 -#define IDS_PRIV_INVULNERABLE_TOGGLE_OFF 1748 -#define IDS_DLC_COST 1749 -#define IDS_BOSS_ENDERDRAGON_HEALTH 1750 -#define IDS_PLAYER_ENTERED_END 1751 -#define IDS_PLAYER_LEFT_END 1752 -#define IDS_WIN_TEXT 1753 -#define IDS_WIN_TEXT_PART_2 1754 -#define IDS_WIN_TEXT_PART_3 1755 -#define IDS_RESETNETHER_TITLE 1756 -#define IDS_RESETNETHER_TEXT 1757 -#define IDS_RESET_NETHER 1758 -#define IDS_DONT_RESET_NETHER 1759 -#define IDS_CANT_SHEAR_MOOSHROOM 1760 -#define IDS_MAX_PIGS_SHEEP_COWS_CATS_SPAWNED 1761 -#define IDS_MAX_MOOSHROOMS_SPAWNED 1762 -#define IDS_MAX_WOLVES_SPAWNED 1763 -#define IDS_MAX_CHICKENS_SPAWNED 1764 -#define IDS_MAX_SQUID_SPAWNED 1765 -#define IDS_MAX_BATS_SPAWNED 1766 -#define IDS_MAX_ENEMIES_SPAWNED 1767 -#define IDS_MAX_VILLAGERS_SPAWNED 1768 -#define IDS_MAX_HANGINGENTITIES 1769 -#define IDS_CANT_SPAWN_IN_PEACEFUL 1770 -#define IDS_MAX_PIGS_SHEEP_COWS_CATS_BRED 1771 -#define IDS_MAX_WOLVES_BRED 1772 -#define IDS_MAX_CHICKENS_BRED 1773 -#define IDS_MAX_HORSES_BRED 1774 -#define IDS_MAX_MUSHROOMCOWS_BRED 1775 -#define IDS_MAX_BOATS 1776 -#define IDS_MAX_SKULL_TILES 1777 -#define IDS_INVERT_LOOK 1778 -#define IDS_SOUTHPAW 1779 -#define IDS_YOU_DIED 1780 -#define IDS_RESPAWN 1781 -#define IDS_DOWNLOADABLE_CONTENT_OFFERS 1782 -#define IDS_CHANGE_SKIN 1783 -#define IDS_HOW_TO_PLAY 1784 -#define IDS_CONTROLS 1785 -#define IDS_SETTINGS 1786 -#define IDS_LANGUAGE_SELECTOR 1787 -#define IDS_CREDITS 1788 -#define IDS_REINSTALL_CONTENT 1789 -#define IDS_DEBUG_SETTINGS 1790 -#define IDS_FIRE_SPREADS 1791 -#define IDS_TNT_EXPLODES 1792 -#define IDS_PLAYER_VS_PLAYER 1793 -#define IDS_TRUST_PLAYERS 1794 -#define IDS_HOST_PRIVILEGES 1795 -#define IDS_GENERATE_STRUCTURES 1796 -#define IDS_SUPERFLAT_WORLD 1797 -#define IDS_BONUS_CHEST 1798 -#define IDS_WORLD_OPTIONS 1799 -#define IDS_GAME_OPTIONS 1800 -#define IDS_MOB_GRIEFING 1801 -#define IDS_KEEP_INVENTORY 1802 -#define IDS_MOB_SPAWNING 1803 -#define IDS_MOB_LOOT 1804 -#define IDS_TILE_DROPS 1805 -#define IDS_NATURAL_REGEN 1806 -#define IDS_DAYLIGHT_CYCLE 1807 -#define IDS_CAN_BUILD_AND_MINE 1808 -#define IDS_CAN_USE_DOORS_AND_SWITCHES 1809 -#define IDS_CAN_OPEN_CONTAINERS 1810 -#define IDS_CAN_ATTACK_PLAYERS 1811 -#define IDS_CAN_ATTACK_ANIMALS 1812 -#define IDS_MODERATOR 1813 -#define IDS_KICK_PLAYER 1814 -#define IDS_CAN_FLY 1815 -#define IDS_DISABLE_EXHAUSTION 1816 -#define IDS_INVISIBLE 1817 -#define IDS_HOST_OPTIONS 1818 -#define IDS_PLAYERS_INVITE 1819 -#define IDS_ONLINE_GAME 1820 -#define IDS_INVITE_ONLY 1821 -#define IDS_MORE_OPTIONS 1822 -#define IDS_LOAD 1823 -#define IDS_DEFAULT_WORLD_NAME 1824 -#define IDS_WORLD_NAME 1825 -#define IDS_CREATE_NEW_WORLD_SEED 1826 -#define IDS_CREATE_NEW_WORLD_RANDOM_SEED 1827 -#define IDS_PLAYERS 1828 -#define IDS_JOIN_GAME 1829 -#define IDS_START_GAME 1830 -#define IDS_NO_GAMES_FOUND 1831 -#define IDS_PLAY_GAME 1832 -#define IDS_LEADERBOARDS 1833 -#define IDS_HELP_AND_OPTIONS 1834 -#define IDS_UNLOCK_FULL_GAME 1835 -#define IDS_RESUME_GAME 1836 -#define IDS_SAVE_GAME 1837 -#define IDS_LABEL_DIFFICULTY 1838 -#define IDS_LABEL_GAME_TYPE 1839 -#define IDS_LABEL_STRUCTURES 1840 -#define IDS_LABEL_LEVEL_TYPE 1841 -#define IDS_LABEL_PvP 1842 -#define IDS_LABEL_TRUST 1843 -#define IDS_LABEL_TNT 1844 -#define IDS_LABEL_FIRE_SPREADS 1845 -#define IDS_REINSTALL_THEME 1846 -#define IDS_REINSTALL_GAMERPIC_1 1847 -#define IDS_REINSTALL_GAMERPIC_2 1848 -#define IDS_REINSTALL_AVATAR_ITEM_1 1849 -#define IDS_REINSTALL_AVATAR_ITEM_2 1850 -#define IDS_REINSTALL_AVATAR_ITEM_3 1851 -#define IDS_OPTIONS 1852 -#define IDS_AUDIO 1853 -#define IDS_CONTROL 1854 -#define IDS_GRAPHICS 1855 -#define IDS_USER_INTERFACE 1856 -#define IDS_RESET_TO_DEFAULTS 1857 -#define IDS_VIEW_BOBBING 1858 -#define IDS_HINTS 1859 -#define IDS_IN_GAME_TOOLTIPS 1860 -#define IDS_CHECKBOX_VERTICAL_SPLIT_SCREEN 1861 -#define IDS_DONE 1862 -#define IDS_EDIT_SIGN_MESSAGE 1863 -#define IDS_SOCIAL_TEXT 1864 -#define IDS_SOCIAL_LABEL_CAPTION 1865 -#define IDS_SOCIAL_DEFAULT_CAPTION 1866 -#define IDS_SOCIAL_LABEL_DESCRIPTION 1867 -#define IDS_DEFAULT_TEXTUREPACK 1868 -#define IDS_POTION_EMPTY 1869 -#define IDS_POTION_MOVESPEED 1870 -#define IDS_POTION_MOVESLOWDOWN 1871 -#define IDS_POTION_DIGSPEED 1872 -#define IDS_POTION_DIGSLOWDOWN 1873 -#define IDS_POTION_DAMAGEBOOST 1874 -#define IDS_POTION_WEAKNESS 1875 -#define IDS_POTION_HEAL 1876 -#define IDS_POTION_HARM 1877 -#define IDS_POTION_JUMP 1878 -#define IDS_POTION_CONFUSION 1879 -#define IDS_POTION_REGENERATION 1880 -#define IDS_POTION_RESISTANCE 1881 -#define IDS_POTION_FIRERESISTANCE 1882 -#define IDS_POTION_WATERBREATHING 1883 -#define IDS_POTION_INVISIBILITY 1884 -#define IDS_POTION_BLINDNESS 1885 -#define IDS_POTION_NIGHTVISION 1886 -#define IDS_POTION_HUNGER 1887 -#define IDS_POTION_POISON 1888 -#define IDS_POTION_WITHER 1889 -#define IDS_POTION_HEALTHBOOST 1890 -#define IDS_POTION_ABSORPTION 1891 -#define IDS_POTION_SATURATION 1892 -#define IDS_POTION_MOVESPEED_POSTFIX 1893 -#define IDS_POTION_MOVESLOWDOWN_POSTFIX 1894 -#define IDS_POTION_DIGSPEED_POSTFIX 1895 -#define IDS_POTION_DIGSLOWDOWN_POSTFIX 1896 -#define IDS_POTION_DAMAGEBOOST_POSTFIX 1897 -#define IDS_POTION_WEAKNESS_POSTFIX 1898 -#define IDS_POTION_HEAL_POSTFIX 1899 -#define IDS_POTION_HARM_POSTFIX 1900 -#define IDS_POTION_JUMP_POSTFIX 1901 -#define IDS_POTION_CONFUSION_POSTFIX 1902 -#define IDS_POTION_REGENERATION_POSTFIX 1903 -#define IDS_POTION_RESISTANCE_POSTFIX 1904 -#define IDS_POTION_FIRERESISTANCE_POSTFIX 1905 -#define IDS_POTION_WATERBREATHING_POSTFIX 1906 -#define IDS_POTION_INVISIBILITY_POSTFIX 1907 -#define IDS_POTION_BLINDNESS_POSTFIX 1908 -#define IDS_POTION_NIGHTVISION_POSTFIX 1909 -#define IDS_POTION_HUNGER_POSTFIX 1910 -#define IDS_POTION_POISON_POSTFIX 1911 -#define IDS_POTION_WITHER_POSTFIX 1912 -#define IDS_POTION_HEALTHBOOST_POSTFIX 1913 -#define IDS_POTION_ABSORPTION_POSTFIX 1914 -#define IDS_POTION_SATURATION_POSTFIX 1915 -#define IDS_POTION_POTENCY_0 1916 -#define IDS_POTION_POTENCY_1 1917 -#define IDS_POTION_POTENCY_2 1918 -#define IDS_POTION_POTENCY_3 1919 -#define IDS_POTION_PREFIX_GRENADE 1920 -#define IDS_POTION_PREFIX_MUNDANE 1921 -#define IDS_POTION_PREFIX_UNINTERESTING 1922 -#define IDS_POTION_PREFIX_BLAND 1923 -#define IDS_POTION_PREFIX_CLEAR 1924 -#define IDS_POTION_PREFIX_MILKY 1925 -#define IDS_POTION_PREFIX_DIFFUSE 1926 -#define IDS_POTION_PREFIX_ARTLESS 1927 -#define IDS_POTION_PREFIX_THIN 1928 -#define IDS_POTION_PREFIX_AWKWARD 1929 -#define IDS_POTION_PREFIX_FLAT 1930 -#define IDS_POTION_PREFIX_BULKY 1931 -#define IDS_POTION_PREFIX_BUNGLING 1932 -#define IDS_POTION_PREFIX_BUTTERED 1933 -#define IDS_POTION_PREFIX_SMOOTH 1934 -#define IDS_POTION_PREFIX_SUAVE 1935 -#define IDS_POTION_PREFIX_DEBONAIR 1936 -#define IDS_POTION_PREFIX_THICK 1937 -#define IDS_POTION_PREFIX_ELEGANT 1938 -#define IDS_POTION_PREFIX_FANCY 1939 -#define IDS_POTION_PREFIX_CHARMING 1940 -#define IDS_POTION_PREFIX_DASHING 1941 -#define IDS_POTION_PREFIX_REFINED 1942 -#define IDS_POTION_PREFIX_CORDIAL 1943 -#define IDS_POTION_PREFIX_SPARKLING 1944 -#define IDS_POTION_PREFIX_POTENT 1945 -#define IDS_POTION_PREFIX_FOUL 1946 -#define IDS_POTION_PREFIX_ODORLESS 1947 -#define IDS_POTION_PREFIX_RANK 1948 -#define IDS_POTION_PREFIX_HARSH 1949 -#define IDS_POTION_PREFIX_ACRID 1950 -#define IDS_POTION_PREFIX_GROSS 1951 -#define IDS_POTION_PREFIX_STINKY 1952 -#define IDS_POTION_DESC_WATER_BOTTLE 1953 -#define IDS_POTION_DESC_EMPTY 1954 -#define IDS_POTION_DESC_MOVESPEED 1955 -#define IDS_POTION_DESC_MOVESLOWDOWN 1956 -#define IDS_POTION_DESC_DAMAGEBOOST 1957 -#define IDS_POTION_DESC_WEAKNESS 1958 -#define IDS_POTION_DESC_HEAL 1959 -#define IDS_POTION_DESC_HARM 1960 -#define IDS_POTION_DESC_REGENERATION 1961 -#define IDS_POTION_DESC_FIRERESISTANCE 1962 -#define IDS_POTION_DESC_POISON 1963 -#define IDS_POTION_EFFECTS_WHENDRANK 1964 -#define IDS_ATTRIBUTE_NAME_HORSE_JUMPSTRENGTH 1965 -#define IDS_ATTRIBUTE_NAME_ZOMBIE_SPAWNREINFORCEMENTS 1966 -#define IDS_ATTRIBUTE_NAME_GENERIC_MAXHEALTH 1967 -#define IDS_ATTRIBUTE_NAME_GENERIC_FOLLOWRANGE 1968 -#define IDS_ATTRIBUTE_NAME_GENERIC_KNOCKBACKRESISTANCE 1969 -#define IDS_ATTRIBUTE_NAME_GENERIC_MOVEMENTSPEED 1970 -#define IDS_ATTRIBUTE_NAME_GENERIC_ATTACKDAMAGE 1971 -#define IDS_ENCHANTMENT_DAMAGE_ALL 1972 -#define IDS_ENCHANTMENT_DAMAGE_UNDEAD 1973 -#define IDS_ENCHANTMENT_DAMAGE_ARTHROPODS 1974 -#define IDS_ENCHANTMENT_KNOCKBACK 1975 -#define IDS_ENCHANTMENT_FIRE 1976 -#define IDS_ENCHANTMENT_PROTECT_ALL 1977 -#define IDS_ENCHANTMENT_PROTECT_FIRE 1978 -#define IDS_ENCHANTMENT_PROTECT_FALL 1979 -#define IDS_ENCHANTMENT_PROTECT_EXPLOSION 1980 -#define IDS_ENCHANTMENT_PROTECT_PROJECTILE 1981 -#define IDS_ENCHANTMENT_OXYGEN 1982 -#define IDS_ENCHANTMENT_WATER_WORKER 1983 -#define IDS_ENCHANTMENT_DIGGING 1984 -#define IDS_ENCHANTMENT_UNTOUCHING 1985 -#define IDS_ENCHANTMENT_DURABILITY 1986 -#define IDS_ENCHANTMENT_LOOT_BONUS 1987 -#define IDS_ENCHANTMENT_LOOT_BONUS_DIGGER 1988 -#define IDS_ENCHANTMENT_ARROW_DAMAGE 1989 -#define IDS_ENCHANTMENT_ARROW_FIRE 1990 -#define IDS_ENCHANTMENT_ARROW_KNOCKBACK 1991 -#define IDS_ENCHANTMENT_ARROW_INFINITE 1992 -#define IDS_ENCHANTMENT_LEVEL_1 1993 -#define IDS_ENCHANTMENT_LEVEL_2 1994 -#define IDS_ENCHANTMENT_LEVEL_3 1995 -#define IDS_ENCHANTMENT_LEVEL_4 1996 -#define IDS_ENCHANTMENT_LEVEL_5 1997 -#define IDS_ENCHANTMENT_LEVEL_6 1998 -#define IDS_ENCHANTMENT_LEVEL_7 1999 -#define IDS_ENCHANTMENT_LEVEL_8 2000 -#define IDS_ENCHANTMENT_LEVEL_9 2001 -#define IDS_ENCHANTMENT_LEVEL_10 2002 -#define IDS_DESC_EMERALDORE 2003 -#define IDS_DESC_ENDERCHEST 2004 -#define IDS_DESC_TRIPWIRE_SOURCE 2005 -#define IDS_DESC_TRIPWIRE 2006 -#define IDS_DESC_EMERALDBLOCK 2007 -#define IDS_DESC_COBBLESTONE_WALL 2008 -#define IDS_DESC_ANVIL 2009 -#define IDS_DESC_NETHER_QUARTZ_ORE 2010 -#define IDS_DESC_QUARTZ_BLOCK 2011 -#define IDS_DESC_EMERALD 2012 -#define IDS_DESC_FLOWERPOT 2013 -#define IDS_DESC_CARROTS 2014 -#define IDS_DESC_POTATO 2015 -#define IDS_DESC_POTATO_BAKED 2016 -#define IDS_DESC_POTATO_POISONOUS 2017 -#define IDS_DESC_CARROT_GOLDEN 2018 -#define IDS_DESC_CARROT_ON_A_STICK 2019 -#define IDS_DESC_PUMPKIN_PIE 2020 -#define IDS_DESC_ENCHANTED_BOOK 2021 -#define IDS_DESC_NETHER_QUARTZ 2022 -#define IDS_DESC_CARPET 2023 -#define IDS_ITEM_EMERALD 2024 -#define IDS_FLOWERPOT 2025 -#define IDS_CARROTS 2026 -#define IDS_POTATO 2027 -#define IDS_ITEM_POTATO_BAKED 2028 -#define IDS_ITEM_POTATO_POISONOUS 2029 -#define IDS_ITEM_CARROT_GOLDEN 2030 -#define IDS_ITEM_CARROT_ON_A_STICK 2031 -#define IDS_ITEM_PUMPKIN_PIE 2032 -#define IDS_ITEM_ENCHANTED_BOOK 2033 -#define IDS_ITEM_NETHER_QUARTZ 2034 -#define IDS_TILE_EMERALDORE 2035 -#define IDS_TILE_ENDERCHEST 2036 -#define IDS_TILE_TRIPWIRE_SOURCE 2037 -#define IDS_TILE_TRIPWIRE 2038 -#define IDS_TILE_EMERALDBLOCK 2039 -#define IDS_TILE_COBBLESTONE_WALL 2040 -#define IDS_TILE_COBBLESTONE_WALL_MOSSY 2041 -#define IDS_TILE_FLOWERPOT 2042 -#define IDS_TILE_CARROTS 2043 -#define IDS_TILE_POTATOES 2044 -#define IDS_TILE_ANVIL 2045 -#define IDS_TILE_ANVIL_INTACT 2046 -#define IDS_TILE_ANVIL_SLIGHTLYDAMAGED 2047 -#define IDS_TILE_ANVIL_VERYDAMAGED 2048 -#define IDS_TILE_NETHER_QUARTZ 2049 -#define IDS_TILE_QUARTZ_BLOCK 2050 -#define IDS_TILE_QUARTZ_BLOCK_CHISELED 2051 -#define IDS_TILE_QUARTZ_BLOCK_LINES 2052 -#define IDS_TILE_STAIRS_QUARTZ 2053 -#define IDS_TILE_CARPET 2054 -#define IDS_TILE_CARPET_BLACK 2055 -#define IDS_TILE_CARPET_RED 2056 -#define IDS_TILE_CARPET_GREEN 2057 -#define IDS_TILE_CARPET_BROWN 2058 -#define IDS_TILE_CARPET_BLUE 2059 -#define IDS_TILE_CARPET_PURPLE 2060 -#define IDS_TILE_CARPET_CYAN 2061 -#define IDS_TILE_CARPET_SILVER 2062 -#define IDS_TILE_CARPET_GRAY 2063 -#define IDS_TILE_CARPET_PINK 2064 -#define IDS_TILE_CARPET_LIME 2065 -#define IDS_TILE_CARPET_YELLOW 2066 -#define IDS_TILE_CARPET_LIGHT_BLUE 2067 -#define IDS_TILE_CARPET_MAGENTA 2068 -#define IDS_TILE_CARPET_ORANGE 2069 -#define IDS_TILE_CARPET_WHITE 2070 -#define IDS_TILE_SANDSTONE_CHISELED 2071 -#define IDS_TILE_SANDSTONE_SMOOTH 2072 -#define IDS_DEATH_THORNS 2073 -#define IDS_DEATH_FALLING_ANVIL 2074 -#define IDS_DEATH_FALLING_TILE 2075 -#define IDS_COMMAND_TELEPORT_SUCCESS 2076 -#define IDS_COMMAND_TELEPORT_ME 2077 -#define IDS_COMMAND_TELEPORT_TO_ME 2078 -#define IDS_ENCHANTMENT_THORNS 2079 -#define IDS_TILE_STONESLAB_QUARTZ 2080 -#define IDS_POTION_DESC_NIGHTVISION 2081 -#define IDS_POTION_DESC_INVISIBILITY 2082 -#define IDS_REPAIR_AND_NAME 2083 -#define IDS_REPAIR_COST 2084 -#define IDS_REPAIR_EXPENSIVE 2085 -#define IDS_TITLE_RENAME 2086 -#define IDS_YOU_HAVE 2087 -#define IDS_REQUIRED_ITEMS_FOR_TRADE 2088 -#define IDS_VILLAGER_OFFERS_ITEM 2089 -#define IDS_TOOLTIPS_REPAIR 2090 -#define IDS_TOOLTIPS_TRADE 2091 -#define IDS_TOOLTIPS_DYECOLLAR 2092 -#define IDS_TUTORIAL_TASK_ANVIL_MENU_OVERVIEW 2093 -#define IDS_TUTORIAL_PROMPT_ANVIL_MENU_OVERVIEW 2094 -#define IDS_TUTORIAL_TASK_ANVIL_MENU_START 2095 -#define IDS_TUTORIAL_TASK_ANVIL_MENU_REPAIR 2096 -#define IDS_TUTORIAL_TASK_ANVIL_MENU_SACRIFICE 2097 -#define IDS_TUTORIAL_TASK_ANVIL_MENU_ENCHANT 2098 -#define IDS_TUTORIAL_TASK_ANVIL_MENU_COST 2099 -#define IDS_TUTORIAL_TASK_ANVIL_MENU_RENAMING 2100 -#define IDS_TUTORIAL_TASK_ANVIL_MENU_SMITH 2101 -#define IDS_TUTORIAL_TASK_ANVIL_OVERVIEW 2102 -#define IDS_TUTORIAL_PROMPT_ANVIL_OVERVIEW 2103 -#define IDS_TUTORIAL_TASK_ANVIL_SUMMARY 2104 -#define IDS_TUTORIAL_TASK_ANVIL_ENCHANTED_BOOKS 2105 -#define IDS_TUTORIAL_TASK_ANVIL_COST 2106 -#define IDS_TUTORIAL_TASK_ANVIL_COST2 2107 -#define IDS_TUTORIAL_TASK_ANVIL_RENAMING 2108 -#define IDS_TUTORIAL_TASK_ANVIL_USE_CHESTS 2109 -#define IDS_TUTORIAL_TASK_TRADING_MENU_OVERVIEW 2110 -#define IDS_TUTORIAL_PROMPT_TRADING_MENU_OVERVIEW 2111 -#define IDS_TUTORIAL_TASK_TRADING_MENU_START 2112 -#define IDS_TUTORIAL_TASK_TRADING_MENU_UNAVAILABLE 2113 -#define IDS_TUTORIAL_TASK_TRADING_MENU_DETAILS 2114 -#define IDS_TUTORIAL_TASK_TRADING_MENU_INVENTORY 2115 -#define IDS_TUTORIAL_TASK_TRADING_MENU_TRADE 2116 -#define IDS_TUTORIAL_TASK_TRADING_OVERVIEW 2117 -#define IDS_TUTORIAL_PROMPT_TRADING_OVERVIEW 2118 -#define IDS_TUTORIAL_TASK_TRADING_SUMMARY 2119 -#define IDS_TUTORIAL_TASK_TRADING_TRADES 2120 -#define IDS_TUTORIAL_TASK_TRADING_INCREASE_TRADES 2121 -#define IDS_TUTORIAL_TASK_TRADING_DECREASE_TRADES 2122 -#define IDS_TUTORIAL_TASK_TRADING_USE_CHESTS 2123 -#define IDS_TUTORIAL_TASK_ENDERCHEST_OVERVIEW 2124 -#define IDS_TUTORIAL_PROMPT_ENDERCHEST_OVERVIEW 2125 -#define IDS_TUTORIAL_TASK_ENDERCHEST_SUMMARY 2126 -#define IDS_TUTORIAL_TASK_ENDERCHEST_PLAYERS 2127 -#define IDS_TUTORIAL_TASK_ENDERCHEST_FUNCTION 2128 -#define IDS_DESC_ENCHANTED_GOLDENAPPLE 2129 -#define IDS_ENABLE_TELEPORT 2130 -#define IDS_TELEPORT 2131 -#define IDS_TELEPORT_TO_PLAYER 2132 -#define IDS_TELEPORT_TO_ME 2133 -#define IDS_CAN_DISABLE_EXHAUSTION 2134 -#define IDS_CAN_INVISIBLE 2135 -#define IDS_PRIV_CAN_INVISIBLE_TOGGLE_ON 2136 -#define IDS_PRIV_CAN_INVISIBLE_TOGGLE_OFF 2137 -#define IDS_PRIV_CAN_FLY_TOGGLE_ON 2138 -#define IDS_PRIV_CAN_FLY_TOGGLE_OFF 2139 -#define IDS_PRIV_CAN_EXHAUSTION_TOGGLE_ON 2140 -#define IDS_PRIV_CAN_EXHAUSTION_TOGGLE_OFF 2141 -#define IDS_PRIV_CAN_TELEPORT_TOGGLE_ON 2142 -#define IDS_PRIV_CAN_TELEPORT_TOGGLE_OFF 2143 -#define IDS_HOW_TO_PLAY_ANVIL 2144 -#define IDS_HOW_TO_PLAY_TRADING 2145 -#define IDS_HOW_TO_PLAY_ENDERCHEST 2146 -#define IDS_VILLAGER_FARMER 2147 -#define IDS_VILLAGER_LIBRARIAN 2148 -#define IDS_VILLAGER_PRIEST 2149 -#define IDS_VILLAGER_SMITH 2150 -#define IDS_VILLAGER_BUTCHER 2151 -#define IDS_DESC_VILLAGER 2152 -#define IDS_CHEST_LARGE 2153 -#define IDS_TUTORIAL_TASK_ENCHANTING_BOOKS 2154 -#define IDS_TUTORIAL_TASK_REDSTONE_TRIPWIRE 2155 -#define IDS_TUTORIAL_TASK_BREEDING_WOLF_COLLAR 2156 -#define IDS_TUTORIAL_TASK_FARMING_CARROTS_AND_POTATOES 2157 -#define IDS_TUTORIAL_TASK_BREEDING_RIDING_PIGS 2158 -#define IDS_TUTORIAL_TASK_MINECART_PUSHING 2159 -#define IDS_CONNECTION_FAILED_NO_SD_SPLITSCREEN 2160 -#define IDS_TOOLTIPS_CURE 2161 -#define IDS_TILE_LOG_ACACIA 2162 -#define IDS_TILE_LOG_DARK_OAK 2163 -#define IDS_TILE_ACACIA_PLANKS 2164 -#define IDS_TILE_DARK_OAK_PLANKS 2165 -#define IDS_TILE_STAIRS_ACACIAWOOD 2166 -#define IDS_TILE_STAIRS_DARKWOOD 2167 -#define IDS_TILE_STONESLAB_ACACIA 2168 -#define IDS_TILE_STONESLAB_DARK_OAK 2169 -#define IDS_TILE_IRON_TRAPDOOR 2170 -#define IDS_TILE_DOOR_SPRUCE 2171 -#define IDS_TILE_DOOR_BIRCH 2172 -#define IDS_TILE_DOOR_JUNGLE 2173 -#define IDS_TILE_DOOR_ACACIA 2174 -#define IDS_TILE_DOOR_DARK 2175 -#define IDS_TILE_SPRUCE_FENCE 2176 -#define IDS_TILE_BIRCH_FENCE 2177 -#define IDS_TILE_JUNGLE_FENCE 2178 -#define IDS_TILE_ACACIA_FENCE 2179 -#define IDS_TILE_DARK_FENCE 2180 -#define IDS_TILE_SPRUCE_GATE 2181 -#define IDS_TILE_BIRCH_GATE 2182 -#define IDS_TILE_JUNGLE_GATE 2183 -#define IDS_TILE_ACACIA_GATE 2184 -#define IDS_TILE_DARK_GATE 2185 -#define IDS_ITEM_DOOR_SPRUCE 2186 -#define IDS_ITEM_DOOR_BIRCH 2187 -#define IDS_ITEM_DOOR_JUNGLE 2188 -#define IDS_ITEM_DOOR_ACACIA 2189 -#define IDS_ITEM_DOOR_DARK 2190 -#define IDS_ITEM_ARMOR_STAND 2191 -#define IDS_DESC_ARMOR_STAND 2192 -#define IDS_RABBIT 2193 -#define IDS_DESC_RABBIT 2194 -#define IDS_ITEM_RABBIT_HIDE 2195 -#define IDS_DESC_RABBIT_HIDE 2196 -#define IDS_ITEM_RABBIT_FOOT 2197 -#define IDS_DESC_RABBIT_FOOT 2198 -#define IDS_ITEM_RABBIT_RAW 2199 -#define IDS_DESC_RABBIT_RAW 2200 -#define IDS_ITEM_RABBIT_COOKED 2201 -#define IDS_DESC_RABBIT_COOKED 2202 -#define IDS_ITEM_MUTTON_RAW 2203 -#define IDS_DESC_MUTTON_RAW 2204 -#define IDS_ITEM_MUTTON_COOKED 2205 -#define IDS_DESC_MUTTON_COOKED 2206 -#define IDS_TILE_SAPLING_ACACIA 2207 -#define IDS_TILE_SAPLING_DARK_OAK 2208 -#define IDS_TILE_LEAVES_ACACIA 2209 -#define IDS_TILE_LEAVES_DARK_OAK 2210 -#define IDS_TILE_RED_SANDSTONE 2211 -#define IDS_TILE_STAIRS_RED_SANDSTONE 2212 -#define IDS_ITEM_PRISMARINE_CRYSTAL 2213 -#define IDS_TILE_SEA_LANTERN 2214 -#define IDS_LANG_SYSTEM 2215 -#define IDS_LANG_ENGLISH 2216 -#define IDS_LANG_GERMAN 2217 -#define IDS_LANG_SPANISH 2218 -#define IDS_LANG_SPANISH_SPAIN 2219 -#define IDS_LANG_SPANISH_LATIN_AMERICA 2220 -#define IDS_LANG_FRENCH 2221 -#define IDS_LANG_ITALIAN 2222 -#define IDS_LANG_PORTUGUESE 2223 -#define IDS_LANG_PORTUGUESE_PORTUGAL 2224 -#define IDS_LANG_PORTUGUESE_BRAZIL 2225 -#define IDS_LANG_JAPANESE 2226 -#define IDS_LANG_KOREAN 2227 -#define IDS_LANG_CHINESE_TRADITIONAL 2228 -#define IDS_LANG_CHINESE_SIMPLIFIED 2229 -#define IDS_LANG_DANISH 2230 -#define IDS_LANG_FINISH 2231 -#define IDS_LANG_DUTCH 2232 -#define IDS_LANG_POLISH 2233 -#define IDS_LANG_RUSSIAN 2234 -#define IDS_LANG_SWEDISH 2235 -#define IDS_LANG_NORWEGIAN 2236 -#define IDS_LANG_GREEK 2237 -#define IDS_LANG_TURKISH 2238 -#define IDS_LEADERBOARD_KILLS_EASY 2239 -#define IDS_LEADERBOARD_KILLS_NORMAL 2240 -#define IDS_LEADERBOARD_KILLS_HARD 2241 -#define IDS_LEADERBOARD_MINING_BLOCKS_PEACEFUL 2242 -#define IDS_LEADERBOARD_MINING_BLOCKS_EASY 2243 -#define IDS_LEADERBOARD_MINING_BLOCKS_NORMAL 2244 -#define IDS_LEADERBOARD_MINING_BLOCKS_HARD 2245 -#define IDS_LEADERBOARD_FARMING_PEACEFUL 2246 -#define IDS_LEADERBOARD_FARMING_EASY 2247 -#define IDS_LEADERBOARD_FARMING_NORMAL 2248 -#define IDS_LEADERBOARD_FARMING_HARD 2249 -#define IDS_LEADERBOARD_TRAVELLING_PEACEFUL 2250 -#define IDS_LEADERBOARD_TRAVELLING_EASY 2251 -#define IDS_LEADERBOARD_TRAVELLING_NORMAL 2252 -#define IDS_LEADERBOARD_TRAVELLING_HARD 2253 -#define IDS_TIPS_GAMETIP_0 2254 -#define IDS_TIPS_GAMETIP_1 2255 -#define IDS_TIPS_GAMETIP_48 2256 -#define IDS_TIPS_GAMETIP_44 2257 -#define IDS_TIPS_GAMETIP_45 2258 -#define IDS_TIPS_TRIVIA_4 2259 -#define IDS_TIPS_TRIVIA_17 2260 -#define IDS_HOW_TO_PLAY_MULTIPLAYER 2261 -#define IDS_HOW_TO_PLAY_SOCIALMEDIA 2262 -#define IDS_HOW_TO_PLAY_CREATIVE 2263 -#define IDS_TUTORIAL_TASK_FLY 2264 -#define IDS_TOOLTIPS_SELECTDEVICE 2265 -#define IDS_TOOLTIPS_CHANGEDEVICE 2266 -#define IDS_TOOLTIPS_VIEW_GAMERCARD 2267 -#define IDS_TOOLTIPS_VIEW_GAMERPROFILE 2268 -#define IDS_TOOLTIPS_INVITE_PARTY 2269 -#define IDS_CONFIRM_START_CREATIVE 2270 -#define IDS_CONFIRM_START_SAVEDINCREATIVE 2271 -#define IDS_CONFIRM_START_SAVEDINCREATIVE_CONTINUE 2272 -#define IDS_CONFIRM_START_HOST_PRIVILEGES 2273 -#define IDS_CONNECTION_LOST_LIVE 2274 -#define IDS_CONNECTION_LOST_LIVE_NO_EXIT 2275 -#define IDS_AWARD_AVATAR1 2276 -#define IDS_AWARD_AVATAR2 2277 -#define IDS_AWARD_AVATAR3 2278 -#define IDS_AWARD_THEME 2279 -#define IDS_UNLOCK_ACHIEVEMENT_TEXT 2280 -#define IDS_UNLOCK_AVATAR_TEXT 2281 -#define IDS_UNLOCK_GAMERPIC_TEXT 2282 -#define IDS_UNLOCK_THEME_TEXT 2283 -#define IDS_UNLOCK_ACCEPT_INVITE 2284 -#define IDS_UNLOCK_GUEST_TEXT 2285 -#define IDS_LEADERBOARD_GAMERTAG 2286 -#define IDS_GROUPNAME_POTIONS_480 2287 -#define IDS_RETURNEDTOTITLESCREEN_TEXT 2288 -#define IDS_TRIALOVER_TEXT 2289 -#define IDS_FATAL_ERROR_TEXT 2290 -#define IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT 2291 -#define IDS_NO_MULTIPLAYER_PRIVILEGE_HOST_TEXT 2292 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_SINGLE_LOCAL 2293 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_ALL_LOCAL 2294 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_REMOTE 2295 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE 2296 -#define IDS_SAVE_ICON_MESSAGE 2297 -#define IDS_GAMEOPTION_HOST_PRIVILEGES 2298 -#define IDS_CHECKBOX_DISPLAY_SPLITSCREENGAMERTAGS 2299 -#define IDS_ACHIEVEMENTS 2300 -#define IDS_LABEL_GAMERTAGS 2301 -#define IDS_IN_GAME_GAMERTAGS 2302 -#define IDS_SOCIAL_DEFAULT_DESCRIPTION 2303 -#define IDS_TITLE_UPDATE_NAME 2304 -#define IDS_PLATFORM_NAME 2305 -#define IDS_BACK_BUTTON 2306 -#define IDS_HOST_OPTION_DISABLES_ACHIEVEMENTS 2307 -#define IDS_KICK_PLAYER_DESCRIPTION 2308 -#define IDS_USING_TRIAL_TEXUREPACK_WARNING 2309 -#define IDS_WORLD_SIZE_TITLE_SMALL 2310 -#define IDS_WORLD_SIZE_TITLE_MEDIUM 2311 -#define IDS_WORLD_SIZE_TITLE_LARGE 2312 -#define IDS_WORLD_SIZE_TITLE_CLASSIC 2313 -#define IDS_WORLD_SIZE 2314 -#define IDS_GAMEOPTION_WORLD_SIZE 2315 -#define IDS_DISABLE_SAVING 2316 -#define IDS_GAMEOPTION_DISABLE_SAVING 2317 -#define IDS_RICHPRESENCE_GAMESTATE 2318 -#define IDS_RICHPRESENCE_IDLE 2319 -#define IDS_RICHPRESENCE_MENUS 2320 -#define IDS_RICHPRESENCE_MULTIPLAYER 2321 -#define IDS_RICHPRESENCE_MULTIPLAYEROFFLINE 2322 -#define IDS_RICHPRESENCE_MULTIPLAYER_1P 2323 -#define IDS_RICHPRESENCE_MULTIPLAYER_1POFFLINE 2324 -#define IDS_RICHPRESENCESTATE_BLANK 2325 -#define IDS_RICHPRESENCESTATE_RIDING_PIG 2326 -#define IDS_RICHPRESENCESTATE_RIDING_MINECART 2327 -#define IDS_RICHPRESENCESTATE_BOATING 2328 -#define IDS_RICHPRESENCESTATE_FISHING 2329 -#define IDS_RICHPRESENCESTATE_CRAFTING 2330 -#define IDS_RICHPRESENCESTATE_FORGING 2331 -#define IDS_RICHPRESENCESTATE_NETHER 2332 -#define IDS_RICHPRESENCESTATE_CD 2333 -#define IDS_RICHPRESENCESTATE_MAP 2334 -#define IDS_RICHPRESENCESTATE_ENCHANTING 2335 -#define IDS_RICHPRESENCESTATE_BREWING 2336 -#define IDS_RICHPRESENCESTATE_ANVIL 2337 -#define IDS_RICHPRESENCESTATE_TRADING 2338 -#define IDS_TILE_PRISMARINE 2339 -#define IDS_TILE_PRISMARINE_DARK 2340 -#define IDS_TILE_PRISMARINE_BRICKS 2341 -#define IDS_ITEM_PRISMARINE_SHARD 2342 -#define IDS_ITEM_PRISMARINE_DESC 2343 -#define IDS_ITEM_PRISMARINE_DARK_DESC 2344 -#define IDS_ITEM_PRISMARINE_BRICK_DESC 2345 -#define IDS_ITEM_PRISMARINE_CRYSTAL_DESC 2346 -#define IDS_ITEM_PRISMARINE_SHARD_DESC 2347 -#define IDS_ITEM_RABBIT_STEW 2348 -#define IDS_TILE_TALL_GRASS2 2349 -#define IDS_TILE_LARGE_FERN 2350 -#define IDS_TILE_LILAC 2351 -#define IDS_TILE_ROSE_BUSH 2352 -#define IDS_TILE_PEONY 2353 -#define IDS_WINDOWS_EXIT 2162 -#define IDS_LANG_SYSTEM 2163 -#define IDS_LANG_ENGLISH 2164 -#define IDS_LANG_GERMAN 2165 -#define IDS_LANG_SPANISH 2166 -#define IDS_LANG_SPANISH_SPAIN 2167 -#define IDS_LANG_SPANISH_LATIN_AMERICA 2168 -#define IDS_LANG_FRENCH 2169 -#define IDS_LANG_ITALIAN 2170 -#define IDS_LANG_PORTUGUESE 2171 -#define IDS_LANG_PORTUGUESE_PORTUGAL 2172 -#define IDS_LANG_PORTUGUESE_BRAZIL 2173 -#define IDS_LANG_JAPANESE 2174 -#define IDS_LANG_KOREAN 2175 -#define IDS_LANG_CHINESE_TRADITIONAL 2176 -#define IDS_LANG_CHINESE_SIMPLIFIED 2177 -#define IDS_LANG_DANISH 2178 -#define IDS_LANG_FINISH 2179 -#define IDS_LANG_DUTCH 2180 -#define IDS_LANG_POLISH 2181 -#define IDS_LANG_RUSSIAN 2182 -#define IDS_LANG_SWEDISH 2183 -#define IDS_LANG_NORWEGIAN 2184 -#define IDS_LANG_GREEK 2185 -#define IDS_LANG_TURKISH 2186 -#define IDS_LEADERBOARD_KILLS_EASY 2187 -#define IDS_LEADERBOARD_KILLS_NORMAL 2188 -#define IDS_LEADERBOARD_KILLS_HARD 2189 -#define IDS_LEADERBOARD_MINING_BLOCKS_PEACEFUL 2190 -#define IDS_LEADERBOARD_MINING_BLOCKS_EASY 2191 -#define IDS_LEADERBOARD_MINING_BLOCKS_NORMAL 2192 -#define IDS_LEADERBOARD_MINING_BLOCKS_HARD 2193 -#define IDS_LEADERBOARD_FARMING_PEACEFUL 2194 -#define IDS_LEADERBOARD_FARMING_EASY 2195 -#define IDS_LEADERBOARD_FARMING_NORMAL 2196 -#define IDS_LEADERBOARD_FARMING_HARD 2197 -#define IDS_LEADERBOARD_TRAVELLING_PEACEFUL 2198 -#define IDS_LEADERBOARD_TRAVELLING_EASY 2199 -#define IDS_LEADERBOARD_TRAVELLING_NORMAL 2200 -#define IDS_LEADERBOARD_TRAVELLING_HARD 2201 -#define IDS_TIPS_GAMETIP_0 2202 -#define IDS_TIPS_GAMETIP_1 2203 -#define IDS_TIPS_GAMETIP_48 2204 -#define IDS_TIPS_GAMETIP_44 2205 -#define IDS_TIPS_GAMETIP_45 2206 -#define IDS_TIPS_TRIVIA_4 2207 -#define IDS_TIPS_TRIVIA_17 2208 -#define IDS_HOW_TO_PLAY_MULTIPLAYER 2209 -#define IDS_HOW_TO_PLAY_SOCIALMEDIA 2210 -#define IDS_HOW_TO_PLAY_CREATIVE 2211 -#define IDS_TUTORIAL_TASK_FLY 2212 -#define IDS_TOOLTIPS_SELECTDEVICE 2213 -#define IDS_TOOLTIPS_CHANGEDEVICE 2214 -#define IDS_TOOLTIPS_VIEW_GAMERCARD 2215 -#define IDS_TOOLTIPS_VIEW_GAMERPROFILE 2216 -#define IDS_TOOLTIPS_INVITE_PARTY 2217 -#define IDS_CONFIRM_START_CREATIVE 2218 -#define IDS_CONFIRM_START_SAVEDINCREATIVE 2219 -#define IDS_CONFIRM_START_SAVEDINCREATIVE_CONTINUE 2220 -#define IDS_CONFIRM_START_HOST_PRIVILEGES 2221 -#define IDS_CONNECTION_LOST_LIVE 2222 -#define IDS_CONNECTION_LOST_LIVE_NO_EXIT 2223 -#define IDS_AWARD_AVATAR1 2224 -#define IDS_AWARD_AVATAR2 2225 -#define IDS_AWARD_AVATAR3 2226 -#define IDS_AWARD_THEME 2227 -#define IDS_UNLOCK_ACHIEVEMENT_TEXT 2228 -#define IDS_UNLOCK_AVATAR_TEXT 2229 -#define IDS_UNLOCK_GAMERPIC_TEXT 2230 -#define IDS_UNLOCK_THEME_TEXT 2231 -#define IDS_UNLOCK_ACCEPT_INVITE 2232 -#define IDS_UNLOCK_GUEST_TEXT 2233 -#define IDS_LEADERBOARD_GAMERTAG 2234 -#define IDS_GROUPNAME_POTIONS_480 2235 -#define IDS_RETURNEDTOTITLESCREEN_TEXT 2236 -#define IDS_TRIALOVER_TEXT 2237 -#define IDS_FATAL_ERROR_TEXT 2238 -#define IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT 2239 -#define IDS_NO_MULTIPLAYER_PRIVILEGE_HOST_TEXT 2240 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_SINGLE_LOCAL 2241 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_ALL_LOCAL 2242 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_REMOTE 2243 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE 2244 -#define IDS_SAVE_ICON_MESSAGE 2245 -#define IDS_GAMEOPTION_HOST_PRIVILEGES 2246 -#define IDS_CHECKBOX_DISPLAY_SPLITSCREENGAMERTAGS 2247 -#define IDS_ACHIEVEMENTS 2248 -#define IDS_LABEL_GAMERTAGS 2249 -#define IDS_IN_GAME_GAMERTAGS 2250 -#define IDS_SOCIAL_DEFAULT_DESCRIPTION 2251 -#define IDS_TITLE_UPDATE_NAME 2252 -#define IDS_PLATFORM_NAME 2253 -#define IDS_BACK_BUTTON 2254 -#define IDS_HOST_OPTION_DISABLES_ACHIEVEMENTS 2255 -#define IDS_KICK_PLAYER_DESCRIPTION 2256 -#define IDS_USING_TRIAL_TEXUREPACK_WARNING 2257 -#define IDS_WORLD_SIZE_TITLE_SMALL 2258 -#define IDS_WORLD_SIZE_TITLE_MEDIUM 2259 -#define IDS_WORLD_SIZE_TITLE_LARGE 2260 -#define IDS_WORLD_SIZE_TITLE_CLASSIC 2261 -#define IDS_WORLD_SIZE 2262 -#define IDS_GAMEOPTION_WORLD_SIZE 2263 -#define IDS_DISABLE_SAVING 2264 -#define IDS_GAMEOPTION_DISABLE_SAVING 2265 -#define IDS_RICHPRESENCE_GAMESTATE 2266 -#define IDS_RICHPRESENCE_IDLE 2267 -#define IDS_RICHPRESENCE_MENUS 2268 -#define IDS_RICHPRESENCE_MULTIPLAYER 2269 -#define IDS_RICHPRESENCE_MULTIPLAYEROFFLINE 2270 -#define IDS_RICHPRESENCE_MULTIPLAYER_1P 2271 -#define IDS_RICHPRESENCE_MULTIPLAYER_1POFFLINE 2272 -#define IDS_RICHPRESENCESTATE_BLANK 2273 -#define IDS_RICHPRESENCESTATE_RIDING_PIG 2274 -#define IDS_RICHPRESENCESTATE_RIDING_MINECART 2275 -#define IDS_RICHPRESENCESTATE_BOATING 2276 -#define IDS_RICHPRESENCESTATE_FISHING 2277 -#define IDS_RICHPRESENCESTATE_CRAFTING 2278 -#define IDS_RICHPRESENCESTATE_FORGING 2279 -#define IDS_RICHPRESENCESTATE_NETHER 2280 -#define IDS_RICHPRESENCESTATE_CD 2281 -#define IDS_RICHPRESENCESTATE_MAP 2282 -#define IDS_RICHPRESENCESTATE_ENCHANTING 2283 -#define IDS_RICHPRESENCESTATE_BREWING 2284 -#define IDS_RICHPRESENCESTATE_ANVIL 2285 -#define IDS_RICHPRESENCESTATE_TRADING 2286 diff --git a/Minecraft.Client/cmake/sources/Common.cmake b/Minecraft.Client/cmake/sources/Common.cmake index 454419f9..36732236 100644 --- a/Minecraft.Client/cmake/sources/Common.cmake +++ b/Minecraft.Client/cmake/sources/Common.cmake @@ -325,6 +325,14 @@ set(_MINECRAFT_CLIENT_COMMON_COMMON_UI_ALL_PLATFORMS "${BASE_DIR}/UI/UIControl_AchievementsList.h" "${BASE_DIR}/UI/UIEnums.h" "${BASE_DIR}/UI/UIStructs.h" + "${BASE_DIR}/UI/UIScene_MinigamesMenu.cpp" + "${BASE_DIR}/UI/UIScene_MinigamesMenu.h" + "${BASE_DIR}/UI/UIScene_MinigamesCreateMenu.cpp" + "${BASE_DIR}/UI/UIScene_MinigamesCreateMenu.h" + "${BASE_DIR}/UI/UIScene_MinigamesJoinMenu.cpp" + "${BASE_DIR}/UI/UIScene_MinigamesJoinMenu.h" + "${BASE_DIR}/UI/UIScene_MinigamesMapSelectMenu.cpp" + "${BASE_DIR}/UI/UIScene_MinigamesMapSelectMenu.h" ) source_group("Common/UI/All Platforms" FILES ${_MINECRAFT_CLIENT_COMMON_COMMON_UI_ALL_PLATFORMS}) diff --git a/Minecraft.Server/cmake/sources/Common.cmake b/Minecraft.Server/cmake/sources/Common.cmake index de12229c..51b996f3 100644 --- a/Minecraft.Server/cmake/sources/Common.cmake +++ b/Minecraft.Server/cmake/sources/Common.cmake @@ -252,6 +252,14 @@ set(_MINECRAFT_SERVER_COMMON_ROOT "${_MS_SRC}/../Minecraft.Client/Common/UI/UIScene_AchievementsMenu.h" "${_MS_SRC}/../Minecraft.Client/Common/UI/UIControl_AchievementsList.cpp" "${_MS_SRC}/../Minecraft.Client/Common/UI/UIControl_AchievementsList.h" + "${_MS_SRC}/../Minecraft.Client/Common/UI/UIScene_MinigamesMenu.cpp" + "${_MS_SRC}/../Minecraft.Client/Common/UI/UIScene_MinigamesMenu.h" + "${_MS_SRC}/../Minecraft.Client/Common/UI/UIScene_MinigamesCreateMenu.cpp" + "${_MS_SRC}/../Minecraft.Client/Common/UI/UIScene_MinigamesCreateMenu.h" + "${_MS_SRC}/../Minecraft.Client/Common/UI/UIScene_MinigamesJoinMenu.cpp" + "${_MS_SRC}/../Minecraft.Client/Common/UI/UIScene_MinigamesJoinMenu.h" + "${_MS_SRC}/../Minecraft.Client/Common/UI/UIScene_MinigamesMapSelectMenu.cpp" + "${_MS_SRC}/../Minecraft.Client/Common/UI/UIScene_MinigamesMapSelectMenu.h" "${_MS_SRC}/../Minecraft.Client/Common/UI/IUIScene_ClassicCraftingMenu.cpp" "${_MS_SRC}/../Minecraft.Client/Common/UI/IUIScene_ClassicCraftingMenu.h" "${_MS_SRC}/../Minecraft.Client/Common/UI/UIScene_ClassicCraftingMenu.cpp" diff --git a/build-linux.sh b/build-linux.sh index 8e35335e..d591cd19 100755 --- a/build-linux.sh +++ b/build-linux.sh @@ -78,7 +78,7 @@ do_cmake_configure() { local winsdk="$XWIN_CACHE/splat" local toolchain toolchain="$(write_toolchain)" - local c_flags="/MT -Wno-non-pod-varargs -fms-compatibility -fms-extensions --target=x86_64-pc-windows-msvc \ + local c_flags="/MT -w -Wno-non-pod-varargs -fms-compatibility -fms-extensions --target=x86_64-pc-windows-msvc \ -imsvc $winsdk/crt/include \ -imsvc $winsdk/sdk/include/ucrt \ -imsvc $winsdk/sdk/include/um \