feat: achievements

fully functional but some achievements dont work yet

EXPERIMENTAL!!!!
This commit is contained in:
SevenToaster509 2026-04-26 15:27:19 +01:00
parent 349b98640f
commit 34504b7b93
90 changed files with 1018 additions and 182 deletions

View file

@ -23,8 +23,7 @@ set(MINECRAFT_CLIENT_SOURCES
${SOURCES_COMMON}
)
add_executable(Minecraft.Client ${MINECRAFT_CLIENT_SOURCES} )
add_executable(Minecraft.Client ${MINECRAFT_CLIENT_SOURCES} "Common/UI/UIScene_AchievementsMenu.cpp" "Common/UI/UIScene_AchievementsMenu.h" "Common/UI/UIControl_AchievementsList.cpp" "Common/UI/UIControl_AchievementsList.h")
set(MINECRAFT_CLIENT_COMPILETIME_STRINGS_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/${PLATFORM_NAME}Media/strings.h")
if(PLATFORM_NAME STREQUAL "Windows64")
set(MINECRAFT_CLIENT_COMPILETIME_STRINGS_HEADER "${CMAKE_BINARY_DIR}/generated/Windows64Media/strings.h")
@ -153,3 +152,4 @@ add_copyredist_target(Minecraft.Client)
if(PLATFORM_NAME STREQUAL "Windows64")
add_gamehdd_target(Minecraft.Client)
endif()

View file

@ -23,18 +23,18 @@ enum eAward
eAward_DispenseWithThis,
eAward_InToTheNether,
eAward_mine100Blocks,
eAward_kill10Creepers,
//eAward_mine100Blocks,
//eAward_kill10Creepers,
eAward_eatPorkChop,
eAward_play100Days,
eAward_arrowKillCreeper,
eAward_socialPost,
//eAward_socialPost,
#ifndef _XBOX
// 4J Stu - Does not map to any Xbox achievements
eAward_snipeSkeleton,
eAward_diamonds,
eAward_portal,
//eAward_portal,
eAward_ghast,
eAward_blazeRod,
eAward_potion,
@ -45,7 +45,7 @@ enum eAward
eAward_bookcase,
#endif
#ifdef _EXTENDED_ACHIEVEMENTS
eAward_adventuringTime,
eAward_repopulation,
//eAward_porkChop,
@ -66,7 +66,6 @@ enum eAward
eAward_ironMan,
eAward_zombieDoctor,
eAward_lionTamer,
#endif
eAward_Max,
};

View file

@ -6698,7 +6698,7 @@ int CMinecraftApp::GetHTMLFontSize(EHTMLFontSize size)
return s_iHTMLFontSizesA[size];
}
wstring CMinecraftApp::FormatHTMLString(int iPad, const wstring &desc, int shadowColour /*= 0xFFFFFFFF*/)
wstring CMinecraftApp::FormatHTMLString(int iPad, const wstring &desc, int shadowColour /*= 0xFFFFFFFF*/, bool override)
{
wstring text(desc);
@ -6781,7 +6781,7 @@ wstring CMinecraftApp::FormatHTMLString(int iPad, const wstring &desc, int shado
text = replaceAll(text, L"{*CONTROLLER_VK_A*}", GetVKReplacement(VK_PAD_A) );
text = replaceAll(text, L"{*CONTROLLER_VK_B*}", GetVKReplacement(VK_PAD_B) );
text = replaceAll(text, L"{*CONTROLLER_VK_X*}", GetVKReplacement(VK_PAD_X) );
text = replaceAll(text, L"{*CONTROLLER_VK_Y*}", GetVKReplacement(VK_PAD_Y) );
text = replaceAll(text, L"{*CONTROLLER_VK_Y*}", GetVKReplacement(VK_PAD_Y, override) );
text = replaceAll(text, L"{*CONTROLLER_VK_LB*}", GetVKReplacement(VK_PAD_LSHOULDER) );
text = replaceAll(text, L"{*CONTROLLER_VK_RB*}", GetVKReplacement(VK_PAD_RSHOULDER) );
text = replaceAll(text, L"{*CONTROLLER_VK_LS*}", GetVKReplacement(VK_PAD_LTHUMB_UP) );
@ -7018,7 +7018,7 @@ wstring CMinecraftApp::GetActionReplacement(int iPad, unsigned char ucAction)
#endif
}
wstring CMinecraftApp::GetVKReplacement(unsigned int uiVKey)
wstring CMinecraftApp::GetVKReplacement(unsigned int uiVKey, bool override)
{
#ifdef _XBOX
switch(uiVKey)
@ -7136,7 +7136,7 @@ wstring CMinecraftApp::GetVKReplacement(unsigned int uiVKey)
int size = 30;
#elif defined _WIN64
int size = 45;
if(ui.getScreenHeight() < 1080) size = 30;
if(ui.getScreenHeight() < 1080 || override == true) size = 30;
#else
int size = 45;
#endif

View file

@ -572,11 +572,11 @@ public:
int GetHTMLColour(eMinecraftColour colour);
int GetHTMLColor(eMinecraftColour colour) { return GetHTMLColour(colour); }
int GetHTMLFontSize(EHTMLFontSize size);
wstring FormatHTMLString(int iPad, const wstring& desc, int shadowColour = 0xFFFFFFFF);
wstring FormatHTMLString(int iPad, const wstring& desc, int shadowColour = 0xFFFFFFFF, bool override = false);
wstring EscapeHTMLString(const wstring &desc);
wstring FormatChatMessage(const wstring& desc, bool applyStyling = true);
wstring GetActionReplacement(int iPad, unsigned char ucAction);
wstring GetVKReplacement(unsigned int uiVKey);
wstring GetVKReplacement(unsigned int uiVKey, bool override = false);
wstring GetIconReplacement(unsigned int uiIcon);
float getAppTime() { return m_Time.fAppTime; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 598 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 561 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 661 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 629 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 640 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,008 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 560 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 481 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 818 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 724 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 757 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 932 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -70,12 +70,61 @@ void UIComponent_PressStartToPlay::handleReload()
m_controlPressStartPanel.setVisible(showPressStart);
}
void UIComponent_PressStartToPlay::ShowAchievementToast(string achievementName, string achievementDescription, string achT)
{
/*IggyStringUTF8 stringVal;
stringVal.string = (char*)label.c_str();
stringVal.length = static_cast<S32>(label.length());
value[0].type = IGGY_DATATYPE_string_UTF8;
value[0].string8 = stringVal;*/
IggyDataValue result;
IggyDataValue value[3];
IggyStringUTF8 stringVal1;
value[0].type = IGGY_DATATYPE_string_UTF8;
stringVal1.string = (char*)achievementName.c_str();
stringVal1.length = static_cast<S32>(achievementName.length());
value[0].string8 = stringVal1;
IggyStringUTF8 stringVal2;
stringVal2.string = (char*)achievementDescription.c_str();
stringVal2.length = static_cast<S32>(achievementDescription.length());
value[1].type = IGGY_DATATYPE_string_UTF8;
value[1].string8 = stringVal2;
IggyStringUTF8 stringVal3;
stringVal3.string = (char*)achT.c_str();
stringVal3.length = static_cast<S32>(achT.length()+3);
value[2].type = IGGY_DATATYPE_string_UTF8;
value[2].string8 = stringVal3;
IggyResult out = IggyPlayerCallMethodRS(getMovie(), &result, IggyPlayerRootPath(getMovie()), m_funcShowAchToast, 3, value);
addTimer(1, 5000);
}
void UIComponent_PressStartToPlay::HideAchievementToast()
{
IggyDataValue result;
IggyResult out = IggyPlayerCallMethodRS(getMovie(), &result, IggyPlayerRootPath(getMovie()), m_funcHideAchToast, 0, nullptr);
Minecraft::GetInstance()->achID = 0;
}
void UIComponent_PressStartToPlay::handleTimerComplete(int id)
{
m_controlPressStartPanel.setVisible(false);
for(unsigned int i = 0; i < XUSER_MAX_COUNT; ++i)
{
m_showingPressStart[i] = false;
if (id == 1) {
HideAchievementToast();
killTimer(id);
ui.toastOn = false;
}
}
ui.ClearPressStart();
}

View file

@ -15,7 +15,7 @@ private:
protected:
UIControl_Label m_labelTrialTimer, m_labelPressStart, m_playerDisplayName;
UIControl m_controlSaveIcon, m_controlPressStartPanel;
IggyName m_funcShowController;
IggyName m_funcShowController, m_funcShowAchToast, m_funcHideAchToast;
UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene)
UI_MAP_ELEMENT(m_labelTrialTimer, "TrialTimer")
UI_MAP_ELEMENT(m_controlSaveIcon, "SaveIcon")
@ -26,6 +26,8 @@ protected:
UI_END_MAP_CHILD_ELEMENTS()
UI_MAP_NAME(m_funcShowController, L"ShowController");
UI_MAP_NAME(m_funcShowAchToast, L"ShowAchievementToast");
UI_MAP_NAME(m_funcHideAchToast, L"HideAchievementToast");
UI_END_MAP_ELEMENTS_AND_NAMES()
public:
@ -47,6 +49,9 @@ public:
// Returns true if lower scenes in this scenes layer, or in any layer below this scenes layers should be hidden
virtual bool hidesLowerScenes() { return false; }
void ShowAchievementToast(string achievementName, string achievementDescription, string achT = "");
void HideAchievementToast();
virtual void handleReload();
virtual void handleTimerComplete(int id);

View file

@ -33,6 +33,7 @@ public:
eTouchControl,
eBook,
ePageFlip,
eAchievementList,
};
protected:
eUIControlType m_eControlType;
@ -65,7 +66,7 @@ public:
UIControl();
virtual bool setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName);
void UpdateControl();
virtual void UpdateControl();
void setHidden(bool bHidden) {m_bHidden=bHidden;}
bool getHidden(void) {return m_bHidden;}

View file

@ -0,0 +1,104 @@
#include "UIControl_AchievementsList.h"
#include "stdafx.h"
#include "UI.h"
#include "../../../Minecraft.World/JavaMath.h"
UIControl_AchievementsList::UIControl_AchievementsList()
{
}
void UIControl_AchievementsList::init(int id)
{
m_id = id;
IggyDataValue result;
IggyDataValue value[1];
value[0].type = IGGY_DATATYPE_number;
value[0].number = id;
IggyResult out = IggyPlayerCallMethodRS(m_parentScene->getMovie(), &result, getIggyValuePath(), m_initFunc, 1, value);
//Hardcoded from SWF since it techinically won't ever change, and getting the x and y just doesnt work through the intended way
m_x = 221;
m_y = 204;
}
void UIControl_AchievementsList::setCurrentSelection(int iSelection)
{
IggyDataValue result;
IggyDataValue value[1];
value[0].type = IGGY_DATATYPE_number;
value[0].number = iSelection;
IggyResult out = IggyPlayerCallMethodRS(m_parentScene->getMovie(), &result, getIggyValuePath(), m_funcHighlightItem, 1, value);
}
bool UIControl_AchievementsList::setupControl(UIScene* scene, IggyValuePath* parent, const string& controlName)
{
UIControl::setControlType(UIControl::eAchievementList);
bool success = UIControl_Base::setupControl(scene, parent, controlName);
//Label specific initialisers
m_funcAddNewItem = registerFastName(L"addNewItem");
m_funcHighlightItem = registerFastName(L"HighlightItem");
m_funcSetTouchFocus = registerFastName(L"SetTouchFocus");
m_funcEnableButton = registerFastName(L"EnableButton");
return success;
}
void UIControl_AchievementsList::UpdateControl()
{
F64 fwidth, fheight;
IggyValueGetF64RS(getIggyValuePath(), m_nameWidth, nullptr, &fwidth);
IggyValueGetF64RS(getIggyValuePath(), m_nameHeight, nullptr, &fheight);
m_width = static_cast<S32>(Math::round(fwidth));
m_height = static_cast<S32>(Math::round(fheight));
}
void UIControl_AchievementsList::SetTouchFocus(S32 iX, S32 iY, bool bRepeat)
{
IggyDataValue result;
IggyDataValue value[3];
value[0].type = IGGY_DATATYPE_number;
value[0].number = iX;
value[1].type = IGGY_DATATYPE_number;
value[1].number = iY;
value[2].type = IGGY_DATATYPE_boolean;
value[2].boolval = bRepeat;
IggyResult out = IggyPlayerCallMethodRS(m_parentScene->getMovie(), &result, getIggyValuePath(), m_funcSetTouchFocus, 3, value);
}
void UIControl_AchievementsList::addnewItem(int id, wstring textureName)
{
IggyDataValue result;
IggyDataValue value[2];
value[0].type = IGGY_DATATYPE_number;
value[0].number = id;
value[1].type = IGGY_DATATYPE_string_UTF16;
IggyStringUTF16 stringVal;
stringVal.string = (IggyUTF16*)textureName.c_str();
stringVal.length = textureName.length();
value[1].string16 = stringVal;
IggyResult out = IggyPlayerCallMethodRS(m_parentScene->getMovie(), &result, getIggyValuePath(), m_funcAddNewItem, 2, value);
++m_itemCount;
}
void UIControl_AchievementsList::EnableButton(int id, bool bEnable) {
IggyDataValue result;
IggyDataValue value[2];
value[0].type = IGGY_DATATYPE_number;
value[0].number = id;
value[1].type = IGGY_DATATYPE_boolean;
value[1].boolval = bEnable;
IggyResult out = IggyPlayerCallMethodRS(m_parentScene->getMovie(), &result, getIggyValuePath(), m_funcEnableButton, 2, value);
}
void UIControl_AchievementsList::updateChildFocus(int iChild)
{
m_iCurrentSelection = iChild;
}

View file

@ -0,0 +1,22 @@
#pragma once
#include "UIControl_Base.h"
class UIControl_AchievementsList : public UIControl_Base
{
private:
IggyName m_funcAddNewItem, m_funcHighlightItem, m_funcSetTouchFocus, m_funcEnableButton;
public:
UIControl_AchievementsList();
void init(int id);
int m_itemCount;
int m_iCurrentSelection = 0;
void SetTouchFocus(S32 iX, S32 iY, bool bRepeat);
void UpdateControl();
void EnableButton(int id, bool bEnable);
void updateChildFocus(int iChild);
void setCurrentSelection(int iSelection);
virtual bool setupControl(UIScene* scene, IggyValuePath* parent, const string& controlName);
void UIControl_AchievementsList::addnewItem(int id, wstring textureName);
//virtual void ReInit();
};

View file

@ -5,6 +5,8 @@
#include "UIScene.h"
#include "UIControl_Slider.h"
#include "UIControl_TexturePackList.h"
#include "UIControl_AchievementsList.h"
#include "UIScene_AchievementsMenu.h"
#include "../../../Minecraft.World/StringHelpers.h"
#include "../../LocalPlayer.h"
#include "../../DLCTexturePack.h"
@ -609,6 +611,11 @@ void UIController::loadSkins()
m_iggyLibraries[eLibrary_Tooltips] = loadSkin(L"skinHDTooltips.swf", L"skinHDTooltips.swf");
m_iggyLibraries[eLibrary_Default] = loadSkin(L"skinHD.swf", L"skinHD.swf");
//Load skins specifcally edited for use on achievements, if we
//used these as skin.swf and skinInGame.swf it breaks some other things
m_iggyLibraries[eLibrary_LCDefault] = loadSkin(L"skinLC.swf", L"skinLC.swf");
m_iggyLibraries[eLibrary_LCInGame] = loadSkin(L"skinInGameLC.swf", L"skinInGameLC.swf");
// Some 1080p menu ports (such as LoadCreateJoin) may import DR-specific HD
// libraries by distinct names. Load them opportunistically when present so
// those SWFs can resolve their imports without replacing the normal Windows
@ -960,7 +967,8 @@ void UIController::tickInput()
UIControl::eUIControlType type = ctrl->getControlType();
if (type != UIControl::eButton && type != UIControl::eTextInput &&
type != UIControl::eCheckBox && type != UIControl::eSlider &&
type != UIControl::eButtonList && type != UIControl::eTexturePackList && type != UIControl::ePageFlip)
type != UIControl::eButtonList && type != UIControl::eTexturePackList && type != UIControl::ePageFlip
&& type != UIControl::eAchievementList)
continue;
// If the scene has an active panel (e.g. tab menus),
@ -1002,6 +1010,18 @@ void UIController::tickInput()
hitCtrl = NULL;
break; // ButtonList takes priority
}
if (type == UIControl::eAchievementList)
{
auto t = (UIScene_AchievementsMenu*)pScene;
static_cast<UIControl_AchievementsList*>(ctrl)->SetTouchFocus(
static_cast<S32>(sceneMouseX - cx), static_cast<S32>(sceneMouseY - cy), false);
/*static_cast<UIControl_AchievementsList*>(ctrl)->SetTouchFocus(
static_cast<S32>(t->aX), static_cast<S32>(t->aY), false);*/
hitControlId = -1;
hitArea = INT_MAX;
hitCtrl = NULL;
break;
}
if (type == UIControl::eTexturePackList)
{
// TexturePackList expects coords relative to its origin.
@ -1877,6 +1897,10 @@ GDrawTexture * RADLINK UIController::TextureSubstitutionCreateCallback ( void *
Textures *t = Minecraft::GetInstance()->textures;
int id = t->getTexture(&image,C4JRender::TEXTURE_FORMAT_RxGyBzAw,false);
std::string result(texture_name, texture_name + wcslen(texture_name));
bool isSub = result.find("sub") != std::string::npos;
// 4J Stu - All our flash controls that allow replacing textures use a special 64x64 symbol
// Force this size here so that our images don't get scaled wildly
#if (defined __ORBIS__ || defined _DURANGO )
@ -1890,11 +1914,15 @@ GDrawTexture * RADLINK UIController::TextureSubstitutionCreateCallback ( void *
#if defined _WINDOWS64
// Only set the size to 96x96 for 1080p on Windows
UIScene *scene = uiController->GetTopScene(0);
if (scene->getSceneResolution() == UIScene::eSceneResolution_1080)
{
*width = 96;
*height = 96;
//Fix for icon size changing on Achievements
if (scene) {
if (scene->getSceneResolution() == UIScene::eSceneResolution_1080 && scene->getSceneType() != eUIScene_PauseMenu && isSub == false)
{
*width = 96;
*height = 96;
}
}
#endif
*destroy_callback_data = (void *)id;
@ -2983,6 +3011,15 @@ void UIController::HidePressStart()
if(m_groups[static_cast<int>(eUIGroup_Fullscreen)]->getPressStartToPlay()) m_groups[static_cast<int>(eUIGroup_Fullscreen)]->getPressStartToPlay()->showPressStart(0, false);
}
void UIController::ShowAchievementToast(string achievementName, string achievementDescription, byteArray b, string achT)
{
if (m_groups[static_cast<int>(eUIGroup_Fullscreen)]->getPressStartToPlay()) {
m_groups[static_cast<int>(eUIGroup_Fullscreen)]->getPressStartToPlay()->registerSubstitutionTexture(convStringToWstring(achT) + L"sub", b.data, b.length);
m_groups[static_cast<int>(eUIGroup_Fullscreen)]->getPressStartToPlay()->ShowAchievementToast(achievementName, achievementDescription, achT + "sub");
}
toastOn = true;
}
void UIController::ClearPressStart()
{
m_iPressStartQuadrantsMask = 0;

View file

@ -18,7 +18,7 @@ class UIController : public IUIController
{
public:
static int64_t iggyAllocCount;
bool toastOn = false;
// MGH - added to prevent crash loading Iggy movies while the skins were being reloaded
static CRITICAL_SECTION ms_reloadSkinCS;
static bool ms_bReloadSkinCSInitialised;
@ -103,6 +103,9 @@ private:
eLibrary_Tooltips,
eLibrary_Default,
eLibrary_LCDefault,
eLibrary_LCInGame,
#if defined(_WINDOWS64)
// Non-HD skin libraries needed by 720p/480p scene SWFs.
eLibraryFallback_Platform,
@ -208,6 +211,9 @@ protected:
UIGroup *m_groups[eUIGroup_COUNT];
public:
auto& getGroups() { return m_groups; }
void showComponent(int iPad, EUIScene scene, EUILayer layer, EUIGroup group, bool show)
{
m_groups[group]->showComponent(iPad, scene, layer, show);
@ -388,6 +394,7 @@ public:
virtual bool PressStartPlaying(unsigned int iPad);
virtual void ShowPressStart(unsigned int iPad);
virtual void HidePressStart();
void ShowAchievementToast(string achievementName, string achievementDescription, byteArray b, string achT = "");
void ClearPressStart();
virtual C4JStorage::EMessageResult RequestAlertMessage(UINT uiTitle, UINT uiText, UINT *uiOptionA,UINT uiOptionC, DWORD dwPad=XUSER_INDEX_ANY, int( *Func)(LPVOID,int,const C4JStorage::EMessageResult)=nullptr,LPVOID lpParam=nullptr, WCHAR *pwchFormatString=nullptr);

View file

@ -100,6 +100,7 @@ enum EUIScene
eUIScene_HorseMenu,
eUIScene_FireworksMenu,
eUIScene_BookMenu,
eUIScene_AchievementsMenu,
#ifdef _XBOX
// eUIScene_TransferToXboxOne,
#endif

View file

@ -4,6 +4,7 @@
#include "UIScene.h"
#include "IUIScene_WritingBookMenu.h"
#include "UIScene_BookAndQuillMenu.h"
#include "UIScene_AchievementsMenu.h"
UILayer::UILayer(UIGroup *parent)
{
@ -268,6 +269,9 @@ 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);

View file

@ -785,7 +785,7 @@ void UIScene::setVisible(bool visible)
void UIScene::customDraw(IggyCustomDrawCallbackRegion *region)
{
app.DebugPrintf("Handling custom draw for scene with no override!\n");
//app.DebugPrintf("Handling custom draw for scene with no override!\n");
}
void UIScene::customDrawSlotControl(IggyCustomDrawCallbackRegion *region, int iPad, shared_ptr<ItemInstance> item, float fAlpha, bool isFoil, bool bDecorations)

View file

@ -0,0 +1,262 @@
#include "UIScene_AchievementsMenu.h"
#include "UI.h"
#include "UILayer.h"
#include "../Minecraft.World/HtmlString.h"
#include "../Minecraft.World/Achievements.h"
#include "../Minecraft.World/Achievement.h"
#include "UISplitScreenHelpers.h"
#include "StatsCounter.h"
#include "MultiPlayerLocalPlayer.h"
#include "Windows64/KeyboardMouseInput.h"
extern HWND g_hWnd;
UIScene_AchievementsMenu::UIScene_AchievementsMenu(int iPad, void* _initData, UILayer* parentLayer) : UIScene(iPad, parentLayer)
{
// Setup all the Iggy references we need for this scene
initialiseMovie();
RECT rc;
GetClientRect(g_hWnd, &rc);
POINT center;
center.x = rc.left;
center.y = rc.top;
ClientToScreen(g_hWnd, &center);
SetCursorPos(center.x, center.y);
m_labelAchievements.init(L"Achievements");
//m_labelDesc.init(L"");
m_labelName.init(L"");
m_achievementsList.init(0);
for (int i = 0; i < Achievements::achievements->size(); i++) { //Achievements::achievements->size()
std::wstring path;
if (app.hasArchiveFile(L"Graphics\\TexturePackIcon.png"))
{
std::wstring iconStr(Achievements::achievements->at(i)->iconInt.begin(),
Achievements::achievements->at(i)->iconInt.end());
path = L"Graphics\\Achievements\\TROP" +
(iconStr.empty() ? L"000" : iconStr) +
L".PNG";
byteArray ba = app.getArchiveFile(path);
registerSubstitutionTexture(path, ba.data, ba.length);
}
std::string result = "Graphics\\Achievements\\" "TROP" + Achievements::achievements->at(i)->iconInt + ".PNG"; //media\\
m_achievementsList.addnewItem(i+1, path);
if (Minecraft::GetInstance()->stats[Minecraft::GetInstance()->player->GetXboxPad()]->hasTaken(Achievements::achievements->at(i)))
{
m_achievementsList.EnableButton(i, true);
}
else {
m_achievementsList.EnableButton(i, false);
}
}
m_funcSetDesc = registerFastName(L"SetAchievementDescription");
m_achievementsList.setCurrentSelection(Minecraft::GetInstance()->achID + 1);
m_achievementsList.m_iCurrentSelection = Minecraft::GetInstance()->achID + 1;
}
void UIScene_AchievementsMenu::handleDestroy()
{
#ifdef _WINDOWS64
#endif
}
void UIScene_AchievementsMenu::SetAchievementDescription(wstring desc) {
wstring desc2 = L"";
if (desc != L"") {
HtmlString test = HtmlString(desc, eHTMLColor_White);
vector<HtmlString>* lines = new vector<HtmlString>();
lines->push_back(test);
desc2 = HtmlString::Compose(lines);
}
IggyDataValue result;
IggyDataValue value[1];
IggyStringUTF16 stringVal1;
value[0].type = IGGY_DATATYPE_string_UTF16;
stringVal1.string = (IggyUTF16*)desc2.c_str();
stringVal1.length = desc2.length();
value[0].string16 = stringVal1;
IggyResult out = IggyPlayerCallMethodRS(getMovie(), &result, IggyPlayerRootPath(getMovie()), m_funcSetDesc, 1, value);
}
wstring UIScene_AchievementsMenu::getMoviePath()
{
if (app.GetLocalPlayerCount() > 1)
{
return L"AchievementsMenu";
}
else
{
return L"AchievementsMenu";
}
}
void UIScene_AchievementsMenu::updateComponents()
{
m_parentLayer->showComponent(m_iPad, eUIComponent_Logo, false);
m_parentLayer->showComponent(m_iPad, eUIComponent_MenuBackground, false);
}
void UIScene_AchievementsMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool& handled)
{
ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released);
switch (key)
{
case ACTION_MENU_CANCEL:
ui.NavigateBack(iPad);
break;
case ACTION_MENU_Y:
if (pressed) {
showDescription = !showDescription;
if (showDescription) {
SetAchievementDescription(app.GetString(Achievements::achievements->at(m_achievementsList.m_iCurrentSelection - 1)->descID));
}
else {
SetAchievementDescription(L"");
}
}
sendInputToMovie(key, repeat, pressed, released);
handled = true;
break;
case ACTION_MENU_UP:
if (pressed) {
if (m_achievementsList.m_iCurrentSelection > 10) {
m_achievementsList.m_iCurrentSelection -= 10;
}
}
sendInputToMovie(key, repeat, pressed, released);
handled = true;
break;
case ACTION_MENU_DOWN:
if (pressed) {
if (m_achievementsList.m_iCurrentSelection < Achievements::achievements->size() - 10) {
m_achievementsList.m_iCurrentSelection += 10;
}
}
sendInputToMovie(key, repeat, pressed, released);
handled = true;
break;
case ACTION_MENU_LEFT:
if (pressed) {
if (m_achievementsList.m_iCurrentSelection > 1) {
m_achievementsList.m_iCurrentSelection -= 1;
}
}
sendInputToMovie(key, repeat, pressed, released);
handled = true;
break;
case ACTION_MENU_RIGHT:
if (pressed) {
if (m_achievementsList.m_iCurrentSelection < Achievements::achievements->size()) {
m_achievementsList.m_iCurrentSelection += 1;
}
}
sendInputToMovie(key, repeat, pressed, released);
handled = true;
break;
}
//m_achievementsList.updateChildFocus(static_cast<int>(childId));
};
void UIScene_AchievementsMenu::getMouseToSWFScale(float& scaleX, float& scaleY)
{
extern HWND g_hWnd;
RECT rc;
GetClientRect(g_hWnd, &rc);
int winW = rc.right - rc.left;
int winH = rc.bottom - rc.top;
if (winW <= 0 || winH <= 0) { scaleX = 1.0f; scaleY = 1.0f; return; }
S32 renderW, renderH;
C4JRender::eViewportType vp = GetParentLayer()->getViewport();
ui.getRenderDimensions(vp, renderW, renderH);
if (vp != C4JRender::VIEWPORT_TYPE_FULLSCREEN)
Fit16x9(renderW, renderH);
float screenW = (float)ui.getScreenWidth();
float screenH = (float)ui.getScreenHeight();
scaleX = static_cast<float>(m_movieWidth) * screenW / (static_cast<float>(renderW) * static_cast<float>(winW));
scaleY = static_cast<float>(m_movieHeight) * screenH / (static_cast<float>(renderH) * static_cast<float>(winH));
}
void UIScene_AchievementsMenu::tick()
{
UIScene::tick();
//ShowCursor(FALSE);
//m_cursorPath1.setVisible(g_KBMInput.IsKBMActive());
//g_KBMInput.SetMouseGrabbed(false);
if (m_achievementsList.m_iCurrentSelection != selection && m_achievementsList.m_iCurrentSelection != 0) {
m_achievementsList.setCurrentSelection(m_achievementsList.m_iCurrentSelection - 1);
m_labelName.setLabel(app.GetString(Achievements::achievements->at(m_achievementsList.m_iCurrentSelection - 1)->nameID));
if (showDescription) {
SetAchievementDescription(app.GetString(Achievements::achievements->at(m_achievementsList.m_iCurrentSelection - 1)->descID));
}
else {
SetAchievementDescription(L"");
}
}
// Apply mouse delta
/*int deltaX = g_KBMInput.GetMouseDeltaX();
int deltaY = g_KBMInput.GetMouseDeltaY();
if (deltaX != 0 || deltaY != 0)
{
float scaleX, scaleY;
getMouseToSWFScale(scaleX, scaleY);
m_pointerPos.x += static_cast<float>(deltaX) * scaleX / 2;
m_pointerPos.y += static_cast<float>(deltaY) * scaleY / 2;
if (m_pointerPos.x < 0.0f) m_pointerPos.x = 0.0f;
if (m_pointerPos.x > static_cast<float>(m_movieWidth)) m_pointerPos.x = static_cast<float>(m_movieWidth);
if (m_pointerPos.y < 0.0f) m_pointerPos.y = 0.0f;
if (m_pointerPos.y > static_cast<float>(m_movieHeight)) m_pointerPos.y = static_cast<float>(m_movieHeight);
}
IggyEvent mouseEvent;
S32 width, height;
m_parentLayer->getRenderDimensions(width, height);
S32 x = static_cast<S32>(m_pointerPos.x * (static_cast<F32>(width) / static_cast<F32>(m_movieWidth)));
aX = x;
S32 y = static_cast<S32>(m_pointerPos.y * (static_cast<F32>(height) / static_cast<F32>(m_movieHeight)));
aY = y;
IggyMakeEventMouseMove(&mouseEvent, x, y);
IggyEventResult result;
IggyPlayerDispatchEventRS(getMovie(), &mouseEvent, &result);*/
selection = m_achievementsList.m_iCurrentSelection;
}
void UIScene_AchievementsMenu::updateTooltips()
{
ui.SetTooltips(m_iPad, -1, IDS_TOOLTIPS_CANCEL, -1, IDS_TOOLTIPS_SHOW_DESCRIPTION);
}
void UIScene_AchievementsMenu::handleFocusChange(F64 controlId, F64 childId)
{
switch (static_cast<int>(controlId))
{
case 0:
m_achievementsList.updateChildFocus(static_cast<int>(childId));
//m_achievementsList.setCurrentSelection(static_cast<int>(childId));
//m_labelName.setLabel(app.GetString(Achievements::achievements->at(static_cast<int>(childId) - 1)->nameID));
//SetAchievementDescription(app.GetString(Achievements::achievements->at(static_cast<int>(childId) - 1)->descID));
//m_labelName.setLabel(app.GetString(IDS_ACHIEVEMENTS);
break;
};
updateTooltips();
}

View file

@ -0,0 +1,69 @@
#pragma once
#include <string>
#include "Common/UI/UIScene.h"
#include "Common/UI/UIControl_Button.h"
#include "Common/UI/UIControl_Cursor.h"
#include "UIControl_AchievementsList.h"
class UIScene_AchievementsMenu : public UIScene
{
private:
enum EControls
{
eControl_AchievementsLabel,
eControl_AchievementsName,
eControl_AchievementsDesc,
eControl_AchievementsListContainer
};
UIControl m_controlMainPanel;
UIControl_Label m_labelAchievements, m_labelName, m_labelDesc;
UIControl_Cursor m_cursorPath1;
vector<UIControl_Button*> m_AchButton;
UIControl_AchievementsList m_achievementsList;
IggyName m_funcSetDesc;
UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene)
UI_MAP_ELEMENT(m_labelAchievements, "AcheivementsLabel")
UI_MAP_ELEMENT(m_labelName, "AchievementName")
UI_MAP_ELEMENT(m_labelDesc, "AchievementDescription")
UI_MAP_ELEMENT(m_cursorPath1, "cursor")
//UI_MAP_ELEMENT(m_achievementsList, "AchievementsList")
UI_MAP_ELEMENT(m_controlMainPanel, "AchievementsListContainer")
UI_MAP_NAME(m_funcSetDesc, L"SetAchievementDescription")
UI_BEGIN_MAP_CHILD_ELEMENTS(m_controlMainPanel)
UI_MAP_ELEMENT(m_achievementsList, "AchievementsList")
UI_END_MAP_CHILD_ELEMENTS()
UI_END_MAP_ELEMENTS_AND_NAMES()
bool showDescription = false;
public:
struct SceneMousePos
{
F32 x;
F32 y;
};
int deltaX;
int deltaY;
int aX;
int aY;
UIVec2D m_pointerPos;
void getMouseToSWFScale(float& scaleX, float& scaleY);
UIScene_AchievementsMenu(int iPad, void* initData, UILayer* parentLayer);
SceneMousePos GetSceneMousePosition(UIScene* pScene, int rawMouseX, int rawMouseY);
virtual void handleDestroy();
int selection = 0;
void SetAchievementDescription(wstring desc);
virtual void tick();
virtual EUIScene getSceneType() { return eUIScene_AchievementsMenu; }
virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool& handled);
virtual void handleFocusChange(F64 controlId, F64 childId);
virtual void updateComponents();
virtual void updateTooltips();
protected:
virtual wstring getMoviePath();
};

View file

@ -619,11 +619,11 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId)
Windows::Xbox::ApplicationModel::Help::Show(user);
}
break;
#elif TO_BE_IMPLEMENTED
#endif
case BUTTON_PAUSE_ACHIEVEMENTS:
// guests can't look at achievements
if(ProfileManager.IsGuest(pNotifyPressData->UserIndex))
/*if(ProfileManager.IsGuest(pNotifyPressData->UserIndex))
{
UINT uiIDA[1];
uiIDA[0]=IDS_OK;
@ -632,9 +632,10 @@ void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId)
else
{
XShowAchievementsUI( pNotifyPressData->UserIndex );
}
}*/
ui.NavigateToScene(m_iPad, eUIScene_AchievementsMenu);
break;
#endif
case BUTTON_PAUSE_HELPANDOPTIONS:
ui.NavigateToScene(m_iPad,eUIScene_HelpAndOptionsMenu);

View file

@ -11,7 +11,7 @@
#include "CraftingScreen.h"
#include "FurnaceScreen.h"
#include "TrapScreen.h"
#include "../Minecraft.Client/Common/UI/UIScene.h"
#include "MultiPlayerLocalPlayer.h"
#include "CreativeMode.h"
#include "GameRenderer.h"
@ -864,6 +864,16 @@ void LocalPlayer::displayClientMessage(int messageId)
minecraft->gui->displayClientMessage(messageId, GetXboxPad());
}
// Helper to convert LPCWSTR -> std::string (UTF-8)
static std::string WideToUtf8(LPCWSTR wide)
{
if (!wide) return {};
int size = WideCharToMultiByte(CP_UTF8, 0, wide, -1, nullptr, 0, nullptr, nullptr);
std::string result(size - 1, '\0');
WideCharToMultiByte(CP_UTF8, 0, wide, -1, result.data(), size, nullptr, nullptr);
return result;
}
void LocalPlayer::awardStat(Stat *stat, byteArray param)
{
#ifdef _DURANGO
@ -886,6 +896,30 @@ void LocalPlayer::awardStat(Stat *stat, byteArray param)
if (stat->isAchievement())
{
Achievement *ach = static_cast<Achievement *>(stat);
/*ui.ShowAchievementToast(
WideToUtf8(app.GetString(ach->nameID)),
WideToUtf8(app.GetString(IDS_ACHIEVEMENT_VIEW))
);*/
std::wstring iconStr(ach->iconInt.begin(),
ach->iconInt.end());
wstring path = L"Graphics\\Achievements\\TROP" +
(iconStr.empty() ? L"000" : iconStr) +
L".PNG";
byteArray ba = app.getArchiveFile(path);
//auto t = ui.GetTopScene(0);
//t->registerSubstitutionTexture(path, ba.data, ba.length);
if (!minecraft->stats[m_iPad]->hasTaken(ach))
{
ui.ShowAchievementToast(
WideToUtf8(app.GetString(ach->nameID)),
WideToUtf8(app.FormatHTMLString(0, app.GetString(IDS_ACHIEVEMENT_VIEW), 0xFFFFFFFF, true).c_str()), ba,
WideToUtf8(path.c_str())
);
minecraft->achID = ach->getAchievementID();
}
//app.FormatHTMLString(0, app.GetString(IDS_ACHIEVEMENT_VIEW));
// 4J-PB - changed to attempt to award everytime - the award may need a storage device, so needs a primary player, and the player may not have been a primary player when they first 'got' the award
// so let the award manager figure it out
//if (!minecraft->stats[m_iPad]->hasTaken(ach))
@ -898,6 +932,8 @@ void LocalPlayer::awardStat(Stat *stat, byteArray param)
// This causes some extreme flooding of some awards
if(ProfileManager.CanBeAwarded(m_iPad, ach->getAchievementID() ) )
{
// 4J Stu - We don't (currently) care about the gamerscore, so setting to a default of 0 points
TelemetryManager->RecordAchievementUnlocked(m_iPad,ach->getAchievementID(),0);
@ -1022,7 +1058,7 @@ void LocalPlayer::awardStat(Stat *stat, byteArray param)
}
#endif
#ifdef _EXTENDED_ACHIEVEMENTS
// AWARD : Porkchop, cook and eat a porkchop.
{
@ -1182,7 +1218,7 @@ void LocalPlayer::awardStat(Stat *stat, byteArray param)
}
#endif
}
#endif
}
bool LocalPlayer::isSolidBlock(int x, int y, int z)

View file

@ -57,6 +57,7 @@ public:
int m_iScreenSection; // assuming 4player splitscreen for now, or -1 for single player
uint64_t ullButtonsPressed; // Stores the button presses, since the inputmanager can be ticked faster than the minecraft
uint64_t ullButtonsDown; // Stores the button presses, since the inputmanager can be ticked faster than the minecraft
// player tick, and a button press and release combo can be missed in the minecraft::tick
uint64_t ullDpad_last;
@ -66,7 +67,7 @@ public:
// 4J-PB - moved these in from the minecraft structure, since they are per player things for splitscreen
//int ticks;
int missTime;
int lastClickTick[2];
int lastClickTick[3];
bool isRaining ;
int m_iThirdPersonView;

View file

@ -71,6 +71,7 @@
#endif
#include "Common/UI/IUIScene_CreativeMenu.h"
#include "Common/UI/UIFontData.h"
#include "Common/UI/UIComponent_PressStartToPlay.h"
#include "DLCTexturePack.h"
#ifdef _WINDOWS64
#define STB_IMAGE_WRITE_IMPLEMENTATION
@ -1452,6 +1453,7 @@ void Minecraft::run_middle()
if(InputManager.ButtonPressed(i, MINECRAFT_ACTION_USE)) localplayers[i]->ullButtonsPressed|=1LL<<MINECRAFT_ACTION_USE;
if(InputManager.ButtonPressed(i, MINECRAFT_ACTION_INVENTORY)) localplayers[i]->ullButtonsPressed|=1LL<<MINECRAFT_ACTION_INVENTORY;
if(InputManager.ButtonDown(i, MINECRAFT_ACTION_INVENTORY)) localplayers[i]->ullButtonsDown|=1LL<<MINECRAFT_ACTION_INVENTORY;
if(InputManager.ButtonPressed(i, MINECRAFT_ACTION_ACTION)) localplayers[i]->ullButtonsPressed|=1LL<<MINECRAFT_ACTION_ACTION;
if(InputManager.ButtonPressed(i, MINECRAFT_ACTION_CRAFTING)) localplayers[i]->ullButtonsPressed|=1LL<<MINECRAFT_ACTION_CRAFTING;
if(InputManager.ButtonPressed(i, MINECRAFT_ACTION_PAUSEMENU))
@ -3666,21 +3668,22 @@ void Minecraft::tick(bool bFirst, bool bUpdateTextures)
#else
bool useHeld = InputManager.ButtonDown(iPad, MINECRAFT_ACTION_USE);
#endif
bool achHeld;
if( player->isUsingItem() )
{
if(!useHeld) gameMode->releaseUsingItem(player);
}
else if( gameMode->isInputAllowed(MINECRAFT_ACTION_USE) )
else if (gameMode->isInputAllowed(MINECRAFT_ACTION_USE))
{
if( player->abilities.instabuild )
if (player->abilities.instabuild)
{
// 4J - attempt to handle click in special creative mode fashion if possible (used for placing blocks at regular intervals)
bool didClick = player->creativeModeHandleMouseClick(1, useHeld );
bool didClick = player->creativeModeHandleMouseClick(1, useHeld);
// If this handler has put us in lastClick_oldRepeat mode then it is because we aren't placing blocks - behave largely as the code used to
if( player->lastClickState == LocalPlayer::lastClick_oldRepeat )
if (player->lastClickState == LocalPlayer::lastClick_oldRepeat)
{
// If we've already handled the click in creativeModeHandleMouseClick then just record the time of this click
if( didClick )
if (didClick)
{
player->lastClickTick[1] = ticks;
}
@ -3700,21 +3703,21 @@ void Minecraft::tick(bool bFirst, bool bUpdateTextures)
// Consider as a click if we've had a period of not pressing the button, or we've reached auto-repeat time since the last time
// Auto-repeat is only considered if we aren't riding or sprinting, to avoid photo sensitivity issues when placing fire whilst doing fast things
// Also disable repeat when the player is sleeping to stop the waking up right after using the bed
bool firstClick = ( player->lastClickTick[1] == 0 );
bool firstClick = (player->lastClickTick[1] == 0);
bool autoRepeat = ticks - player->lastClickTick[1] >= timer->ticksPerSecond / 4;
if ( player->isRiding() || player->isSprinting() || player->isSleeping() ) autoRepeat = false;
if (useHeld )
if (player->isRiding() || player->isSprinting() || player->isSleeping()) autoRepeat = false;
if (useHeld)
{
// If the player has just exited a bed, then delay the time before a repeat key is allowed without releasing
if(player->isSleeping() ) player->lastClickTick[1] = ticks + (timer->ticksPerSecond * 2);
if( firstClick || autoRepeat )
if (player->isSleeping()) player->lastClickTick[1] = ticks + (timer->ticksPerSecond * 2);
if (firstClick || autoRepeat)
{
bool wasSleeping = player->isSleeping();
player->handleMouseClick(1);
// If the player has just exited a bed, then delay the time before a repeat key is allowed without releasing
if(wasSleeping) player->lastClickTick[1] = ticks + (timer->ticksPerSecond * 2);
if (wasSleeping) player->lastClickTick[1] = ticks + (timer->ticksPerSecond * 2);
else player->lastClickTick[1] = ticks;
}
}
@ -3723,6 +3726,68 @@ void Minecraft::tick(bool bFirst, bool bUpdateTextures)
player->lastClickTick[1] = 0;
}
}
achHeld = InputManager.ButtonDown(iPad, MINECRAFT_ACTION_INVENTORY) ||
(iPad == 0 && g_KBMInput.IsKBMActive() &&
g_KBMInput.IsKeyDown(KeyboardMouseInput::KEY_INVENTORY));
if (ui.toastOn) {
if (achHeld) {
// Record when the hold started
if (player->lastClickTick[2] == 0) {
player->lastClickTick[2] = ticks;
}
// Check if held for 1 second
bool heldLongEnough = (ticks - player->lastClickTick[2]) >= (timer->ticksPerSecond);
if (heldLongEnough) {
ui.PlayUISFX(eSFX_Press);
ui.NavigateToScene(iPad, eUIScene_AchievementsMenu);
ui.getGroups()[static_cast<int>(eUIGroup_Fullscreen)]->getPressStartToPlay()->handleTimerComplete(1);
}
}
else {
// If let go during period, open inventory
if (player->lastClickTick[2] != 0) {
shared_ptr<MultiplayerLocalPlayer> player = Minecraft::GetInstance()->player;
if (!player->isRiding())
{
ui.PlayUISFX(eSFX_Press);
}
if (gameMode->isServerControlledInventory())
{
player->sendOpenInventory();
}
else
{
app.LoadInventoryMenu(iPad, player);
}
}
// Reset when button is released
player->lastClickTick[2] = 0;
}
}
else {
//Just open inventory if the toast is not open
if ((player->ullButtonsPressed & (1LL << MINECRAFT_ACTION_INVENTORY)) && gameMode->isInputAllowed(MINECRAFT_ACTION_INVENTORY))
{
shared_ptr<MultiplayerLocalPlayer> player = Minecraft::GetInstance()->player;
if (!player->isRiding())
{
ui.PlayUISFX(eSFX_Press);
}
if (gameMode->isServerControlledInventory())
{
player->sendOpenInventory();
}
else
{
app.LoadInventoryMenu(iPad, player);
}
}
player->lastClickTick[2] = 0;
}
}
if(app.DebugSettingsOn())
@ -3860,19 +3925,26 @@ void Minecraft::tick(bool bFirst, bool bUpdateTextures)
if((player->ullButtonsPressed&(1LL<<MINECRAFT_ACTION_INVENTORY)) && gameMode->isInputAllowed(MINECRAFT_ACTION_INVENTORY))
{
shared_ptr<MultiplayerLocalPlayer> player = Minecraft::GetInstance()->player;
if (!player->isRiding())
{
ui.PlayUISFX(eSFX_Press);
if (achHeld) {
//ui.PlayUISFX(eSFX_Press);
//ui.NavigateToScene(iPad, eUIScene_AchievementsMenu);
}
else {
/*shared_ptr<MultiplayerLocalPlayer> player = Minecraft::GetInstance()->player;
if (!player->isRiding())
{
ui.PlayUISFX(eSFX_Press);
}
if(gameMode->isServerControlledInventory())
{
player->sendOpenInventory();
}
else
{
app.LoadInventoryMenu(iPad,player);
if (gameMode->isServerControlledInventory())
{
player->sendOpenInventory();
}
else
{
app.LoadInventoryMenu(iPad, player);
}*/
}
}
@ -3900,7 +3972,7 @@ void Minecraft::tick(bool bFirst, bool bUpdateTextures)
else
{
ui.PlayUISFX(eSFX_Press);
app.LoadCrafting2x2Menu(iPad,player);
app.LoadCrafting2x2Menu(iPad, player);
}
}

View file

@ -92,7 +92,8 @@ public:
Level *oldLevel; // 4J Stu added to keep a handle on an old level so we can delete it
//HANDLE m_hPlayerRespawned; // 4J Added so we can wait in menus until it is done (for async in multiplayer)
public:
bool inventoryWasHeld = false;
int achID = 0;
MultiPlayerLevel *level;
LevelRenderer *levelRenderer;
shared_ptr<MultiplayerLocalPlayer> player;

View file

@ -211,7 +211,8 @@ void StatsCounter::save(int player, bool force)
//Check we're going to have enough room to store all possible stats
unsigned int uiTotalStatsSize = (Stats::all->size() * 4 * sizeof(unsigned short)) - (Achievements::achievements->size() * 3 * sizeof(unsigned short)) + (LARGE_STATS_COUNT*4*(sizeof(unsigned int)-sizeof(unsigned short)));
assert( uiTotalStatsSize <= (CConsoleMinecraftApp::GAME_DEFINED_PROFILE_DATA_BYTES-sizeof(GAME_SETTINGS)) );
//Do change this back and fix it.
//assert( uiTotalStatsSize <= (CConsoleMinecraftApp::GAME_DEFINED_PROFILE_DATA_BYTES-sizeof(GAME_SETTINGS)) );
//Retrieve the data pointer from the profile
#if ( defined __PS3__ || defined __ORBIS__ || defined _DURANGO || defined __PSVITA__ )

View file

@ -89,9 +89,10 @@ public:
#ifdef _DEBUG
void WipeLeaderboards();
#endif
bool isLargeStat(Stat* stat);
private:
bool isLargeStat(Stat* stat);
void dumpStatsToTTY();
#ifdef _XBOX

View file

@ -1836,7 +1836,7 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
if (!g_KBMInput.IsMouseGrabbed())
{
if (!g_KBMInput.IsKBMActive())
if (!g_KBMInput.IsKBMActive() && ui.FindScene(eUIScene_AchievementsMenu) == nullptr)
g_KBMInput.SetCursorHiddenForUI(true);
else if (!g_KBMInput.IsScreenCursorHidden())
g_KBMInput.SetCursorHiddenForUI(false);

View file

@ -1,4 +1,4 @@
<root>
<root>
<data name="IDS_TIPS_GAMETIP_NEWDLC">
<value>New Downloadable Content is available! Access it from the Minecraft Store button on the Main Menu.</value>
</data>
@ -9396,4 +9396,156 @@ All Ender Chests in a world are linked. Items placed into an Ender Chest are acc
<data name="IDS_ITEM_ELYTRA">
<value>Elytra</value>
</data>
<data name="IDS_ACHIEVE_NAME_TAKING_INVENTORY"><value>Taking Inventory</value></data>
<data name="IDS_ACHIEVE_DESC_TAKING_INVENTORY"><value>Open your inventory.</value></data>
<data name="IDS_ACHIEVE_NAME_GETTING_WOOD"><value>Getting Wood</value></data>
<data name="IDS_ACHIEVE_DESC_GETTING_WOOD"><value>Punch a tree until a block of wood pops out.</value></data>
<data name="IDS_ACHIEVE_NAME_BENCHMARKING"><value>Benchmarking</value></data>
<data name="IDS_ACHIEVE_DESC_BENCHMARKING"><value>Craft a Workbench with four blocks of Wooden Planks.</value></data>
<data name="IDS_ACHIEVE_NAME_TIME_TO_MINE"><value>Time to Mine!</value></data>
<data name="IDS_ACHIEVE_DESC_TIME_TO_MINE"><value>Use Planks and Sticks to make a Pickaxe.</value></data>
<data name="IDS_ACHIEVE_NAME_HOT_TOPIC"><value>Hot Topic</value></data>
<data name="IDS_ACHIEVE_DESC_HOT_TOPIC"><value>Construct a Furnace out of eight Cobblestone blocks.</value></data>
<data name="IDS_ACHIEVE_NAME_ACQUIRE_HARDWARE"><value>Acquire Hardware</value></data>
<data name="IDS_ACHIEVE_DESC_ACQUIRE_HARDWARE"><value>Smelt an Iron Ingot.</value></data>
<data name="IDS_ACHIEVE_NAME_TIME_TO_FARM"><value>Time to Farm!</value></data>
<data name="IDS_ACHIEVE_DESC_TIME_TO_FARM"><value>Make a Hoe.</value></data>
<data name="IDS_ACHIEVE_NAME_BAKE_BREAD"><value>Bake Bread</value></data>
<data name="IDS_ACHIEVE_DESC_BAKE_BREAD"><value>Turn Wheat into Bread.</value></data>
<data name="IDS_ACHIEVE_NAME_THE_LIE"><value>The Lie</value></data>
<data name="IDS_ACHIEVE_DESC_THE_LIE"><value>Bake a Cake using: Wheat, Sugar, Milk and Eggs.</value></data>
<data name="IDS_ACHIEVE_NAME_GETTING_AN_UPGRADE"><value>Getting an Upgrade</value></data>
<data name="IDS_ACHIEVE_DESC_GETTING_AN_UPGRADE"><value>Construct a better pickaxe.</value></data>
<data name="IDS_ACHIEVE_NAME_DELICIOUS_FISH"><value>Delicious Fish</value></data>
<data name="IDS_ACHIEVE_DESC_DELICIOUS_FISH"><value>Catch and cook Fish!</value></data>
<data name="IDS_ACHIEVE_NAME_ON_A_RAIL"><value>On A Rail</value></data>
<data name="IDS_ACHIEVE_DESC_ON_A_RAIL"><value>Travel by Minecart to a point at least 500m in a single direction from where you started.</value></data>
<data name="IDS_ACHIEVE_NAME_TIME_TO_STRIKE"><value>Time to Strike!</value></data>
<data name="IDS_ACHIEVE_DESC_TIME_TO_STRIKE"><value>Use Planks and Sticks to make a Sword.</value></data>
<data name="IDS_ACHIEVE_NAME_MONSTER_HUNTER"><value>Monster Hunter</value></data>
<data name="IDS_ACHIEVE_DESC_MONSTER_HUNTER"><value>Attack and destroy a monster.</value></data>
<data name="IDS_ACHIEVE_NAME_COW_TIPPER"><value>Cow Tipper</value></data>
<data name="IDS_ACHIEVE_DESC_COW_TIPPER"><value>Harvest some leather.</value></data>
<data name="IDS_ACHIEVE_NAME_WHEN_PIGS_FLY"><value>When Pigs Fly</value></data>
<data name="IDS_ACHIEVE_DESC_WHEN_PIGS_FLY"><value>Use a Saddle to ride a Pig, and then have the Pig get hurt from fall damage while riding it.</value></data>
<data name="IDS_ACHIEVE_NAME_LEADER_OF_THE_PACK"><value>Leader of the Pack</value></data>
<data name="IDS_ACHIEVE_DESC_LEADER_OF_THE_PACK"><value>Befriend five Wolves.</value></data>
<data name="IDS_ACHIEVE_NAME_MOAR_TOOLS"><value>MOAR Tools</value></data>
<data name="IDS_ACHIEVE_DESC_MOAR_TOOLS"><value>Construct one type of each tool.</value></data>
<data name="IDS_ACHIEVE_NAME_DISPENSE_WITH_THIS"><value>Dispense With This</value></data>
<data name="IDS_ACHIEVE_DESC_DISPENSE_WITH_THIS"><value>Construct a dispenser.</value></data>
<data name="IDS_ACHIEVE_NAME_INTO_THE_NETHER"><value>Into The Nether</value></data>
<data name="IDS_ACHIEVE_DESC_INTO_THE_NETHER"><value>Construct a Nether Portal.</value></data>
<data name="IDS_ACHIEVE_NAME_EAT_PORKCHOP"><value>Pork Chop</value></data>
<data name="IDS_ACHIEVE_DESC_EAT_PORKCHOP"><value>Cook and eat a Pork Chop.</value></data>
<data name="IDS_ACHIEVE_NAME_PLAY_100_DAYS"><value>Passing the Time</value></data>
<data name="IDS_ACHIEVE_DESC_PLAY_100_DAYS"><value>Play for 100 days.</value></data>
<data name="IDS_ACHIEVE_NAME_ARROW_KILL_CREEPER"><value>Archer</value></data>
<data name="IDS_ACHIEVE_DESC_ARROW_KILL_CREEPER"><value>Kill a Creeper with Arrows.</value></data>
<data name="IDS_ACHIEVE_NAME_SNIPESKELETON"><value>Sniper Duel</value></data>
<data name="IDS_ACHIEVE_DESC_SNIPESKELETON"><value>Kill a Skeleton with an Arrow from more than 50 meters.</value></data>
<data name="IDS_ACHIEVE_NAME_DIAMONDS"><value>DIAMONDS!</value></data>
<data name="IDS_ACHIEVE_DESC_DIAMONDS"><value>Acquire diamonds with your iron tools.</value></data>
<data name="IDS_ACHIEVE_NAME_GHAST"><value>Return to Sender</value></data>
<data name="IDS_ACHIEVE_DESC_GHAST"><value>Destroy a Ghast with a Fireball.</value></data>
<data name="IDS_ACHIEVE_NAME_BLAZEROD"><value>Into Fire</value></data>
<data name="IDS_ACHIEVE_DESC_BLAZEROD"><value>Relieve a Blaze of its rod.</value></data>
<data name="IDS_ACHIEVE_NAME_POTION"><value>Local Brewery</value></data>
<data name="IDS_ACHIEVE_DESC_POTION"><value>Brew a potion.</value></data>
<data name="IDS_ACHIEVE_NAME_THE_END"><value>The End?</value></data>
<data name="IDS_ACHIEVE_DESC_THE_END"><value>Enter an End Portal.</value></data>
<data name="IDS_ACHIEVE_NAME_WINGAME"><value>The End.</value></data>
<data name="IDS_ACHIEVE_DESC_WINGAME"><value>Kill the Enderdragon.</value></data>
<data name="IDS_ACHIEVE_NAME_ENCHANTMENTS"><value>Enchanter</value></data>
<data name="IDS_ACHIEVE_DESC_ENCHANTMENTS"><value>Construct an Enchantment Table.</value></data>
<data name="IDS_ACHIEVE_NAME_OVERKILL"><value>Overkill</value></data>
<data name="IDS_ACHIEVE_DESC_OVERKILL"><value>Deal nine hearts of damage in a single hit.</value></data>
<data name="IDS_ACHIEVE_NAME_BOOKCASE"><value>Librarian</value></data>
<data name="IDS_ACHIEVE_DESC_BOOKCASE"><value>Build some Bookshelves to improve your Enchantment Table.</value></data>
<data name="IDS_ACHIEVE_NAME_ADVENTURING_TIME"><value>Adventuring Time</value></data>
<data name="IDS_ACHIEVE_DESC_ADVENTURING_TIME"><value>Discover all biomes.</value></data>
<data name="IDS_ACHIEVE_NAME_REPOPULATION"><value>Repopulation</value></data>
<data name="IDS_ACHIEVE_DESC_REPOPULATION"><value>Breed two Cows with Wheat.</value></data>
<data name="IDS_ACHIEVE_NAME_DIAMONDS_TO_YOU"><value>Diamonds to you!</value></data>
<data name="IDS_ACHIEVE_DESC_DIAMONDS_TO_YOU"><value>Throw diamonds to another player.</value></data>
<data name="IDS_ACHIEVE_NAME_THE_HAGGLER"><value>The Haggler</value></data>
<data name="IDS_ACHIEVE_DESC_THE_HAGGLER"><value>Mine or purchase 30 Emeralds.</value></data>
<data name="IDS_ACHIEVE_NAME_POT_PLANTER"><value>Pot Planter</value></data>
<data name="IDS_ACHIEVE_DESC_POT_PLANTER"><value>Craft and place a Flower pot.</value></data>
<data name="IDS_ACHIEVE_NAME_ITS_A_SIGN"><value>It's a Sign!</value></data>
<data name="IDS_ACHIEVE_DESC_ITS_A_SIGN"><value>Craft and place a sign.</value></data>
<data name="IDS_ACHIEVE_NAME_IRON_BELLY"><value>Iron Belly</value></data>
<data name="IDS_ACHIEVE_DESC_IRON_BELLY"><value>Stop starvation using rotten flesh.</value></data>
<data name="IDS_ACHIEVE_NAME_HAVE_A_SHEARFUL_DAY"><value>Have a Shearful Day</value></data>
<data name="IDS_ACHIEVE_DESC_HAVE_A_SHEARFUL_DAY"><value>Use Shears to obtain Wool from a Sheep.</value></data>
<data name="IDS_ACHIEVE_NAME_RAINBOW_COLLECTION"><value>Rainbow Collection</value></data>
<data name="IDS_ACHIEVE_DESC_RAINBOW_COLLECTION"><value>Gather all 16 colors of Wool.</value></data>
<data name="IDS_ACHIEVE_NAME_STAYING_FROSTY"><value>Stayin' Frosty</value></data>
<data name="IDS_ACHIEVE_DESC_STAYING_FROSTY"><value>Swim in Lava while having the Fire Resistance effect.</value></data>
<data name="IDS_ACHIEVE_NAME_CHESTFUL_OF_COBBLESTONE"><value>Chestful of Cobblestone</value></data>
<data name="IDS_ACHIEVE_DESC_CHESTFUL_OF_COBBLESTONE"><value>Mine 1,728 Cobblestone and place it in a Chest.</value></data>
<data name="IDS_ACHIEVE_NAME_RENEWABLE_ENERGY"><value>Renewable Energy</value></data>
<data name="IDS_ACHIEVE_DESC_RENEWABLE_ENERGY"><value>Smelt Wood Trunks using Charcoal to make more Charcoal.</value></data>
<data name="IDS_ACHIEVE_NAME_MUSIC_TO_MY_EARS"><value>Music to my Ears</value></data>
<data name="IDS_ACHIEVE_DESC_MUSIC_TO_MY_EARS"><value>Play a Music Disc in a Jukebox.</value></data>
<data name="IDS_ACHIEVE_NAME_BODYGUARD"><value>Body Guard</value></data>
<data name="IDS_ACHIEVE_DESC_BODYGUARD"><value>Create an Iron Golem.</value></data>
<data name="IDS_ACHIEVE_NAME_IRON_MAN"><value>Iron Man</value></data>
<data name="IDS_ACHIEVE_DESC_IRON_MAN"><value>Wear a full suit of Iron Armor.</value></data>
<data name="IDS_ACHIEVE_NAME_ZOMBIE_DOCTOR"><value>Zombie Doctor</value></data>
<data name="IDS_ACHIEVE_DESC_ZOMBIE_DOCTOR"><value>Cure a Zombie Villager.</value></data>
<data name="IDS_ACHIEVE_NAME_LION_TAMER"><value>Lion Tamer</value></data>
<data name="IDS_ACHIEVE_DESC_LION_TAMER"><value>Tame an ocelot.</value></data>
<data name="IDS_ACHIEVEMENT_VIEW"><value>Hold {*CONTROLLER_VK_Y*} to view</value></data>
</root>

View file

@ -15,19 +15,28 @@ void Achievement::_init()
if (y > Achievements::yMax) Achievements::yMax = y;
}
Achievement::Achievement(int id, const wstring& name, int x, int y, Item *icon, Achievement *reqs)
Achievement::Achievement(int id, const wstring& name, int x, int y, Item *icon, Achievement *reqs, string iconI, int nameID1, int descID1)
: Stat( Achievements::ACHIEVEMENT_OFFSET + id, I18n::get(wstring(L"achievement.").append(name)) ), desc( I18n::get(wstring(L"achievement.").append(name).append(L".desc"))), icon( new ItemInstance(icon) ), x(x), y(y), reqs(reqs)
{
iconInt = iconI;
nameID = nameID1;
descID = descID1;
}
Achievement::Achievement(int id, const wstring& name, int x, int y, Tile *icon, Achievement *reqs)
Achievement::Achievement(int id, const wstring& name, int x, int y, Tile *icon, Achievement *reqs, string iconI, int nameID1, int descID1)
: Stat( Achievements::ACHIEVEMENT_OFFSET + id, I18n::get(wstring(L"achievement.").append(name)) ), desc( I18n::get(wstring(L"achievement.").append(name).append(L".desc"))), icon( new ItemInstance(icon) ), x(x), y(y), reqs(reqs)
{
iconInt = iconI;
nameID = nameID1;
descID = descID1;
}
Achievement::Achievement(int id, const wstring& name, int x, int y, shared_ptr<ItemInstance> icon, Achievement *reqs)
Achievement::Achievement(int id, const wstring& name, int x, int y, shared_ptr<ItemInstance> icon, Achievement *reqs, string iconI, int nameID1, int descID1)
: Stat( Achievements::ACHIEVEMENT_OFFSET + id, I18n::get(wstring(L"achievement.").append(name)) ), desc( I18n::get(wstring(L"achievement.").append(name).append(L".desc"))), icon(icon), x(x), y(y), reqs(reqs)
{
iconInt = iconI;
nameID = nameID1;
descID = descID1;
}
Achievement *Achievement::setAwardLocallyOnly()

View file

@ -10,6 +10,9 @@ class Achievement : public Stat
public:
const int x, y;
Achievement *reqs;
string iconInt;
int nameID;
int descID;
private:
const wstring desc;
@ -23,9 +26,9 @@ private:
void _init();
public:
Achievement(int id, const wstring& name, int x, int y, Item *icon, Achievement *reqs);
Achievement(int id, const wstring& name, int x, int y, Tile *icon, Achievement *reqs);
Achievement(int id, const wstring& name, int x, int y, shared_ptr<ItemInstance> icon, Achievement *reqs);
Achievement(int id, const wstring& name, int x, int y, Item* icon, Achievement* reqs, string iconI = "", int nameID = 0, int descID = 0);
Achievement(int id, const wstring& name, int x, int y, Tile* icon, Achievement* reqs, string iconI = "", int nameID = 0, int descID = 0);
Achievement(int id, const wstring& name, int x, int y, shared_ptr<ItemInstance> icon, Achievement* reqs, string iconI = "", int nameID = 0, int descID = 0);
Achievement *setAwardLocallyOnly();
Achievement *setGolden();

View file

@ -53,14 +53,14 @@ Achievement *Achievements::dispenseWithThis = nullptr;
Achievement *Achievements::InToTheNether = nullptr;
// 4J : WESTY : Added other awards.
Achievement *Achievements::socialPost = nullptr;
//Achievement *Achievements::socialPost = nullptr;
Achievement *Achievements::eatPorkChop = nullptr;
Achievement *Achievements::play100Days = nullptr;
Achievement *Achievements::arrowKillCreeper = nullptr;
Achievement *Achievements::mine100Blocks = nullptr;
Achievement *Achievements::kill10Creepers = nullptr;
//Achievement *Achievements::mine100Blocks = nullptr;
//Achievement *Achievements::kill10Creepers = nullptr;
#ifdef _EXTENDED_ACHIEVEMENTS
Achievement *Achievements::overkill = nullptr; // Restored old achivements.
Achievement *Achievements::bookcase = nullptr; // Restored old achivements.
@ -85,46 +85,46 @@ Achievement *Achievements::bodyGuard = nullptr;
Achievement *Achievements::ironMan = nullptr;
Achievement *Achievements::zombieDoctor = nullptr;
Achievement *Achievements::lionTamer = nullptr;
#endif
void Achievements::staticCtor()
{
Achievements::openInventory = (new Achievement(eAward_TakingInventory, L"openInventory", 0, 0, Item::book, nullptr))->setAwardLocallyOnly()->postConstruct();
Achievements::mineWood = (new Achievement(eAward_GettingWood, L"mineWood", 2, 1, Tile::treeTrunk, (Achievement *) openInventory))->postConstruct();
Achievements::buildWorkbench = (new Achievement(eAward_Benchmarking, L"buildWorkBench", 4, -1, Tile::workBench, (Achievement *) mineWood))->postConstruct();
Achievements::buildPickaxe = (new Achievement(eAward_TimeToMine, L"buildPickaxe", 4, 2, Item::pickAxe_wood, (Achievement *) buildWorkbench))->postConstruct();
Achievements::buildFurnace = (new Achievement(eAward_HotTopic, L"buildFurnace", 3, 4, Tile::furnace_lit, (Achievement *) buildPickaxe))->postConstruct();
Achievements::acquireIron = (new Achievement(eAward_AquireHardware, L"acquireIron", 1, 4, Item::ironIngot, (Achievement *) buildFurnace))->postConstruct();
Achievements::buildHoe = (new Achievement(eAward_TimeToFarm, L"buildHoe", 2, -3, Item::hoe_wood, (Achievement *) buildWorkbench))->postConstruct();
Achievements::makeBread = (new Achievement(eAward_BakeBread, L"makeBread", -1, -3, Item::bread, (Achievement *) buildHoe))->postConstruct();
Achievements::bakeCake = (new Achievement(eAward_TheLie, L"bakeCake", 0, -5, Item::cake, (Achievement *) buildHoe))->postConstruct();
Achievements::buildBetterPickaxe = (new Achievement(eAward_GettingAnUpgrade, L"buildBetterPickaxe", 6, 2, Item::pickAxe_stone, (Achievement *) buildPickaxe))->postConstruct();
Achievements::cookFish = (new Achievement(eAward_DeliciousFish, L"cookFish", 2, 6, Item::fish_cooked, (Achievement *) buildFurnace))->postConstruct();
Achievements::onARail = (new Achievement(eAward_OnARail, L"onARail", 2, 3, Tile::rail, (Achievement *) acquireIron))->setGolden()->postConstruct();
Achievements::buildSword = (new Achievement(eAward_TimeToStrike, L"buildSword", 6, -1, Item::sword_wood, (Achievement *) buildWorkbench))->postConstruct();
Achievements::killEnemy = (new Achievement(eAward_MonsterHunter, L"killEnemy", 8, -1, Item::bone, (Achievement *) buildSword))->postConstruct();
Achievements::killCow = (new Achievement(eAward_CowTipper, L"killCow", 7, -3, Item::leather, (Achievement *) buildSword))->postConstruct();
Achievements::flyPig = (new Achievement(eAward_WhenPigsFly, L"flyPig", 8, -4, Item::saddle, (Achievement *) killCow))->setGolden()->postConstruct();
Achievements::openInventory = (new Achievement(eAward_TakingInventory, L"openInventory", 0, 0, Item::book, nullptr, "001", IDS_ACHIEVE_NAME_TAKING_INVENTORY, IDS_ACHIEVE_DESC_TAKING_INVENTORY))->setAwardLocallyOnly()->postConstruct();
Achievements::mineWood = (new Achievement(eAward_GettingWood, L"mineWood", 2, 1, Tile::treeTrunk, (Achievement *) openInventory, "002", IDS_ACHIEVE_NAME_GETTING_WOOD, IDS_ACHIEVE_DESC_GETTING_WOOD))->postConstruct();
Achievements::buildWorkbench = (new Achievement(eAward_Benchmarking, L"buildWorkBench", 4, -1, Tile::workBench, (Achievement *) mineWood, "003", IDS_ACHIEVE_NAME_BENCHMARKING, IDS_ACHIEVE_DESC_BENCHMARKING))->postConstruct();
Achievements::buildPickaxe = (new Achievement(eAward_TimeToMine, L"buildPickaxe", 4, 2, Item::pickAxe_wood, (Achievement *) buildWorkbench, "004", IDS_ACHIEVE_NAME_TIME_TO_MINE, IDS_ACHIEVE_DESC_TIME_TO_MINE))->postConstruct();
Achievements::buildFurnace = (new Achievement(eAward_HotTopic, L"buildFurnace", 3, 4, Tile::furnace_lit, (Achievement *) buildPickaxe, "005", IDS_ACHIEVE_NAME_HOT_TOPIC, IDS_ACHIEVE_DESC_HOT_TOPIC))->postConstruct();
Achievements::acquireIron = (new Achievement(eAward_AquireHardware, L"acquireIron", 1, 4, Item::ironIngot, (Achievement *) buildFurnace, "006", IDS_ACHIEVE_NAME_ACQUIRE_HARDWARE, IDS_ACHIEVE_DESC_ACQUIRE_HARDWARE))->postConstruct();
Achievements::buildHoe = (new Achievement(eAward_TimeToFarm, L"buildHoe", 2, -3, Item::hoe_wood, (Achievement *) buildWorkbench, "007", IDS_ACHIEVE_NAME_TIME_TO_FARM, IDS_ACHIEVE_DESC_TIME_TO_FARM))->postConstruct();
Achievements::makeBread = (new Achievement(eAward_BakeBread, L"makeBread", -1, -3, Item::bread, (Achievement *) buildHoe, "008", IDS_ACHIEVE_NAME_BAKE_BREAD, IDS_ACHIEVE_DESC_BAKE_BREAD))->postConstruct();
Achievements::bakeCake = (new Achievement(eAward_TheLie, L"bakeCake", 0, -5, Item::cake, (Achievement *) buildHoe, "009", IDS_ACHIEVE_NAME_THE_LIE, IDS_ACHIEVE_DESC_THE_LIE))->postConstruct();
Achievements::buildBetterPickaxe = (new Achievement(eAward_GettingAnUpgrade, L"buildBetterPickaxe", 6, 2, Item::pickAxe_stone, (Achievement *) buildPickaxe, "010", IDS_ACHIEVE_NAME_GETTING_AN_UPGRADE, IDS_ACHIEVE_DESC_GETTING_AN_UPGRADE))->postConstruct();
Achievements::cookFish = (new Achievement(eAward_DeliciousFish, L"cookFish", 2, 6, Item::fish_cooked, (Achievement *) buildFurnace, "011", IDS_ACHIEVE_NAME_DELICIOUS_FISH, IDS_ACHIEVE_DESC_DELICIOUS_FISH))->postConstruct();
Achievements::onARail = (new Achievement(eAward_OnARail, L"onARail", 2, 3, Tile::rail, (Achievement *) acquireIron, "012", IDS_ACHIEVE_NAME_ON_A_RAIL, IDS_ACHIEVE_DESC_ON_A_RAIL))->setGolden()->postConstruct();
Achievements::buildSword = (new Achievement(eAward_TimeToStrike, L"buildSword", 6, -1, Item::sword_wood, (Achievement *) buildWorkbench, "013", IDS_ACHIEVE_NAME_TIME_TO_STRIKE, IDS_ACHIEVE_DESC_TIME_TO_STRIKE))->postConstruct();
Achievements::killEnemy = (new Achievement(eAward_MonsterHunter, L"killEnemy", 8, -1, Item::bone, (Achievement *) buildSword, "014", IDS_ACHIEVE_NAME_MONSTER_HUNTER, IDS_ACHIEVE_DESC_MONSTER_HUNTER))->postConstruct();
Achievements::killCow = (new Achievement(eAward_CowTipper, L"killCow", 7, -3, Item::leather, (Achievement *) buildSword, "015", IDS_ACHIEVE_NAME_COW_TIPPER, IDS_ACHIEVE_DESC_COW_TIPPER))->postConstruct();
Achievements::flyPig = (new Achievement(eAward_WhenPigsFly, L"flyPig", 8, -4, Item::saddle, (Achievement *) killCow, "016", IDS_ACHIEVE_NAME_WHEN_PIGS_FLY, IDS_ACHIEVE_DESC_WHEN_PIGS_FLY))->setGolden()->postConstruct();
// 4J Stu - The order of these achievemnts is very important, as they map directly to data stored in the profile data. New achievements should be added at the end.
// 4J : WESTY : Added new achievements. Note, params "x", "y", "icon" and "requires" are ignored on xbox.
Achievements::leaderOfThePack = (new Achievement(eAward_LeaderOfThePack, L"leaderOfThePack", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct();
Achievements::MOARTools = (new Achievement(eAward_MOARTools, L"MOARTools", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct();
Achievements::dispenseWithThis = (new Achievement(eAward_DispenseWithThis, L"dispenseWithThis", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->postConstruct();
Achievements::InToTheNether = (new Achievement(eAward_InToTheNether, L"InToTheNether", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->postConstruct();
Achievements::leaderOfThePack = (new Achievement(eAward_LeaderOfThePack, L"leaderOfThePack", 0, 0, Tile::treeTrunk, (Achievement *) buildSword, "017", IDS_ACHIEVE_NAME_LEADER_OF_THE_PACK, IDS_ACHIEVE_DESC_LEADER_OF_THE_PACK))->setAwardLocallyOnly()->postConstruct();
Achievements::MOARTools = (new Achievement(eAward_MOARTools, L"MOARTools", 0, 0, Tile::treeTrunk, (Achievement *) buildSword, "018", IDS_ACHIEVE_NAME_MOAR_TOOLS, IDS_ACHIEVE_DESC_MOAR_TOOLS))->setAwardLocallyOnly()->postConstruct();
Achievements::dispenseWithThis = (new Achievement(eAward_DispenseWithThis, L"dispenseWithThis", 0, 0, Tile::treeTrunk, (Achievement *) buildSword, "019", IDS_ACHIEVE_NAME_DISPENSE_WITH_THIS, IDS_ACHIEVE_DESC_DISPENSE_WITH_THIS))->postConstruct();
Achievements::InToTheNether = (new Achievement(eAward_InToTheNether, L"InToTheNether", 0, 0, Tile::treeTrunk, (Achievement *) buildSword, "020", IDS_ACHIEVE_NAME_INTO_THE_NETHER, IDS_ACHIEVE_DESC_INTO_THE_NETHER))->postConstruct();
// 4J : WESTY : Added other awards.
Achievements::mine100Blocks = (new Achievement(eAward_mine100Blocks, L"mine100Blocks", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct();
Achievements::kill10Creepers = (new Achievement(eAward_kill10Creepers, L"kill10Creepers", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct();
//Achievements::mine100Blocks = (new Achievement(eAward_mine100Blocks, L"mine100Blocks", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct();
//Achievements::kill10Creepers = (new Achievement(eAward_kill10Creepers, L"kill10Creepers", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct();
#ifdef _EXTENDED_ACHIEVEMENTS
Achievements::eatPorkChop = (new Achievement(eAward_eatPorkChop, L"eatPorkChop", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct();
#else
Achievements::eatPorkChop = (new Achievement(eAward_eatPorkChop, L"eatPorkChop", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->postConstruct();
Achievements::eatPorkChop = (new Achievement(eAward_eatPorkChop, L"eatPorkChop", 0, 0, Tile::treeTrunk, (Achievement *) buildSword, "034", IDS_ACHIEVE_NAME_EAT_PORKCHOP, IDS_ACHIEVE_DESC_EAT_PORKCHOP))->postConstruct();
#endif
Achievements::play100Days = (new Achievement(eAward_play100Days, L"play100Days", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->setAwardLocallyOnly()->postConstruct();
Achievements::arrowKillCreeper = (new Achievement(eAward_arrowKillCreeper, L"arrowKillCreeper", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->postConstruct();
Achievements::socialPost = (new Achievement(eAward_socialPost, L"socialPost", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->postConstruct();
Achievements::play100Days = (new Achievement(eAward_play100Days, L"play100Days", 0, 0, Tile::treeTrunk, (Achievement *) buildSword, "035", IDS_ACHIEVE_NAME_PLAY_100_DAYS, IDS_ACHIEVE_DESC_PLAY_100_DAYS))->setAwardLocallyOnly()->postConstruct();
Achievements::arrowKillCreeper = (new Achievement(eAward_arrowKillCreeper, L"arrowKillCreeper", 0, 0, Tile::treeTrunk, (Achievement *) buildSword, "036", IDS_ACHIEVE_NAME_ARROW_KILL_CREEPER, IDS_ACHIEVE_DESC_ARROW_KILL_CREEPER))->postConstruct();
//Achievements::socialPost = (new Achievement(eAward_socialPost, L"socialPost", 0, 0, Tile::treeTrunk, (Achievement *) buildSword))->postConstruct();
#ifndef _XBOX
// WARNING: NO NEW ACHIEVMENTS CAN BE ADDED HERE
@ -133,46 +133,45 @@ void Achievements::staticCtor()
// 4J Stu - All new Java achievements removed to stop them using the profile data
// 4J Stu - This achievment added in 1.8.2, but does not map to any Xbox achievements
Achievements::snipeSkeleton = (new Achievement(eAward_snipeSkeleton, L"snipeSkeleton", 7, 0, Item::bow, (Achievement *) killEnemy))->setGolden()->postConstruct();
Achievements::snipeSkeleton = (new Achievement(eAward_snipeSkeleton, L"snipeSkeleton", 7, 0, Item::bow, (Achievement *) killEnemy, "021", IDS_ACHIEVE_NAME_SNIPESKELETON, IDS_ACHIEVE_DESC_SNIPESKELETON))->setGolden()->postConstruct();
// 4J Stu - These added in 1.0.1, but do not map to any Xbox achievements
Achievements::diamonds = (new Achievement(eAward_diamonds, L"diamonds", -1, 5, Item::diamond, (Achievement *) acquireIron) )->postConstruct();
Achievements::diamonds = (new Achievement(eAward_diamonds, L"diamonds", -1, 5, Item::diamond, (Achievement *) acquireIron, "022", IDS_ACHIEVE_NAME_DIAMONDS, IDS_ACHIEVE_DESC_DIAMONDS) )->postConstruct();
//Achievements::portal = (new Achievement(eAward_portal, L"portal", -1, 7, Tile::obsidian, (Achievement *)diamonds) )->postConstruct();
Achievements::ghast = (new Achievement(eAward_ghast, L"ghast", -4, 8, Item::ghastTear, (Achievement *)ghast) )->setGolden()->postConstruct();
Achievements::blazeRod = (new Achievement(eAward_blazeRod, L"blazeRod", 0, 9, Item::blazeRod, (Achievement *)blazeRod) )->postConstruct();
Achievements::potion = (new Achievement(eAward_potion, L"potion", 2, 8, Item::potion, (Achievement *)potion) )->postConstruct();
Achievements::theEnd = (new Achievement(eAward_theEnd, L"theEnd", 3, 10, Item::eyeOfEnder, (Achievement *)theEnd) )->setGolden()->postConstruct();
Achievements::winGame = (new Achievement(eAward_winGame, L"theEnd2", 4, 13, Tile::dragonEgg, (Achievement *)winGame) )->setGolden()->postConstruct();
Achievements::enchantments = (new Achievement(eAward_enchantments, L"enchantments", -4, 4, Tile::enchantTable, (Achievement *)enchantments) )->postConstruct();
Achievements::ghast = (new Achievement(eAward_ghast, L"ghast", -4, 8, Item::ghastTear, (Achievement *)ghast, "023", IDS_ACHIEVE_NAME_GHAST, IDS_ACHIEVE_DESC_GHAST) )->setGolden()->postConstruct();
Achievements::blazeRod = (new Achievement(eAward_blazeRod, L"blazeRod", 0, 9, Item::blazeRod, (Achievement *)blazeRod, "024", IDS_ACHIEVE_NAME_BLAZEROD, IDS_ACHIEVE_DESC_BLAZEROD) )->postConstruct();
Achievements::potion = (new Achievement(eAward_potion, L"potion", 2, 8, Item::potion, (Achievement *)potion, "025", IDS_ACHIEVE_NAME_POTION, IDS_ACHIEVE_DESC_POTION) )->postConstruct();
Achievements::theEnd = (new Achievement(eAward_theEnd, L"theEnd", 3, 10, Item::eyeOfEnder, (Achievement *)theEnd, "026", IDS_ACHIEVE_NAME_THE_END, IDS_ACHIEVE_DESC_THE_END) )->setGolden()->postConstruct();
Achievements::winGame = (new Achievement(eAward_winGame, L"theEnd2", 4, 13, Tile::dragonEgg, (Achievement *)winGame, "027", IDS_ACHIEVE_NAME_WINGAME, IDS_ACHIEVE_DESC_WINGAME) )->setGolden()->postConstruct();
Achievements::enchantments = (new Achievement(eAward_enchantments, L"enchantments", -4, 4, Tile::enchantTable, (Achievement *)enchantments, "028", IDS_ACHIEVE_NAME_ENCHANTMENTS, IDS_ACHIEVE_DESC_ENCHANTMENTS) )->postConstruct();
// Achievements::overkill = (new Achievement(eAward_overkill, L"overkill", -4, 1, Item::sword_diamond, (Achievement *)enchantments) )->setGolden()->postConstruct();
// Achievements::bookcase = (new Achievement(eAward_bookcase, L"bookcase", -3, 6, Tile::bookshelf, (Achievement *)enchantments) )->postConstruct();
#endif
#ifdef _EXTENDED_ACHIEVEMENTS
Achievements::overkill = (new Achievement(eAward_overkill, L"overkill", -4,1, Item::sword_diamond, (Achievement *)enchantments) )->setGolden()->postConstruct();
Achievements::bookcase = (new Achievement(eAward_bookcase, L"bookcase", -3,6, Tile::bookshelf, (Achievement *)enchantments) )->postConstruct();
Achievements::adventuringTime = (new Achievement(eAward_adventuringTime, L"adventuringTime", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->setAwardLocallyOnly()->postConstruct();
Achievements::repopulation = (new Achievement(eAward_repopulation, L"repopulation", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct();
Achievements::overkill = (new Achievement(eAward_overkill, L"overkill", -4,1, Item::sword_diamond, (Achievement *)enchantments, "029", IDS_ACHIEVE_NAME_OVERKILL, IDS_ACHIEVE_DESC_OVERKILL) )->setGolden()->postConstruct();
Achievements::bookcase = (new Achievement(eAward_bookcase, L"bookcase", -3,6, Tile::bookshelf, (Achievement *)enchantments, "030", IDS_ACHIEVE_NAME_BOOKCASE, IDS_ACHIEVE_DESC_BOOKCASE) )->postConstruct();
Achievements::adventuringTime = (new Achievement(eAward_adventuringTime, L"adventuringTime", 0,0, Tile::bookshelf, (Achievement*) nullptr, "031", IDS_ACHIEVE_NAME_ADVENTURING_TIME, IDS_ACHIEVE_DESC_ADVENTURING_TIME) )->setAwardLocallyOnly()->postConstruct();
Achievements::repopulation = (new Achievement(eAward_repopulation, L"repopulation", 7,-5, Tile::bookshelf, (Achievement*) nullptr, "032", IDS_ACHIEVE_NAME_REPOPULATION, IDS_ACHIEVE_DESC_REPOPULATION) )->postConstruct();
//Achievements::porkChoop // // // // // //
Achievements::diamondsToYou = (new Achievement(eAward_diamondsToYou, L"diamondsToYou", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct();
Achievements::diamondsToYou = (new Achievement(eAward_diamondsToYou, L"diamondsToYou", 0,0, Tile::bookshelf, (Achievement*) nullptr, "033", IDS_ACHIEVE_NAME_DIAMONDS, IDS_ACHIEVE_DESC_DIAMONDS) )->postConstruct();
//Achievements::passingTheTime = (new Achievement(eAward_play100Days, L"passingTheTime", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct();
//Achievements::archer = (new Achievement(eAward_arrowKillCreeper, L"archer", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct();
Achievements::theHaggler = (new Achievement(eAward_theHaggler, L"theHaggler", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->setAwardLocallyOnly()->postConstruct();
Achievements::potPlanter = (new Achievement(eAward_potPlanter, L"potPlanter", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->setAwardLocallyOnly()->postConstruct();
Achievements::itsASign = (new Achievement(eAward_itsASign, L"itsASign", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->setAwardLocallyOnly()->postConstruct();
Achievements::ironBelly = (new Achievement(eAward_ironBelly, L"ironBelly", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct();
Achievements::haveAShearfulDay = (new Achievement(eAward_haveAShearfulDay, L"haveAShearfulDay", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct();
Achievements::rainbowCollection = (new Achievement(eAward_rainbowCollection, L"rainbowCollection", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->setAwardLocallyOnly()->postConstruct();
Achievements::stayinFrosty = (new Achievement(eAward_stayinFrosty, L"stayingFrosty", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct();
Achievements::chestfulOfCobblestone = (new Achievement(eAward_chestfulOfCobblestone, L"chestfulOfCobblestone", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->setAwardLocallyOnly()->postConstruct();
Achievements::renewableEnergy = (new Achievement(eAward_renewableEnergy, L"renewableEnergy", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct();
Achievements::musicToMyEars = (new Achievement(eAward_musicToMyEars, L"musicToMyEars", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct();
Achievements::bodyGuard = (new Achievement(eAward_bodyGuard, L"bodyGuard", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct();
Achievements::ironMan = (new Achievement(eAward_ironMan, L"ironMan", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct();
Achievements::zombieDoctor = (new Achievement(eAward_zombieDoctor, L"zombieDoctor", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct();
Achievements::lionTamer = (new Achievement(eAward_lionTamer, L"lionTamer", 0,0, Tile::bookshelf, (Achievement*) nullptr) )->postConstruct();
#endif
Achievements::theHaggler = (new Achievement(eAward_theHaggler, L"theHaggler", 0,0, Tile::bookshelf, (Achievement*) nullptr, "037", IDS_ACHIEVE_NAME_THE_HAGGLER, IDS_ACHIEVE_DESC_THE_HAGGLER) )->setAwardLocallyOnly()->postConstruct();
Achievements::potPlanter = (new Achievement(eAward_potPlanter, L"potPlanter", 0,0, Tile::bookshelf, (Achievement*) nullptr, "038", IDS_ACHIEVE_NAME_POT_PLANTER, IDS_ACHIEVE_DESC_POT_PLANTER) )->setAwardLocallyOnly()->postConstruct();
Achievements::itsASign = (new Achievement(eAward_itsASign, L"itsASign", 0,0, Tile::bookshelf, (Achievement*) nullptr, "039", IDS_ACHIEVE_NAME_ITS_A_SIGN, IDS_ACHIEVE_DESC_ITS_A_SIGN) )->setAwardLocallyOnly()->postConstruct();
Achievements::ironBelly = (new Achievement(eAward_ironBelly, L"ironBelly", 0,0, Tile::bookshelf, (Achievement*) nullptr, "040", IDS_ACHIEVE_NAME_IRON_BELLY, IDS_ACHIEVE_DESC_IRON_BELLY) )->postConstruct();
Achievements::haveAShearfulDay = (new Achievement(eAward_haveAShearfulDay, L"haveAShearfulDay", 0,0, Tile::bookshelf, (Achievement*) nullptr, "041", IDS_ACHIEVE_NAME_HAVE_A_SHEARFUL_DAY, IDS_ACHIEVE_DESC_HAVE_A_SHEARFUL_DAY) )->postConstruct();
Achievements::rainbowCollection = (new Achievement(eAward_rainbowCollection, L"rainbowCollection", 0,0, Tile::bookshelf, (Achievement*) nullptr, "042", IDS_ACHIEVE_NAME_RAINBOW_COLLECTION, IDS_ACHIEVE_DESC_RAINBOW_COLLECTION) )->setAwardLocallyOnly()->postConstruct();
Achievements::stayinFrosty = (new Achievement(eAward_stayinFrosty, L"stayingFrosty", 0,0, Tile::bookshelf, (Achievement*) nullptr, "043", IDS_ACHIEVE_NAME_STAYING_FROSTY, IDS_ACHIEVE_DESC_STAYING_FROSTY) )->postConstruct();
Achievements::chestfulOfCobblestone = (new Achievement(eAward_chestfulOfCobblestone, L"chestfulOfCobblestone", 0,0, Tile::bookshelf, (Achievement*) nullptr, "044", IDS_ACHIEVE_NAME_CHESTFUL_OF_COBBLESTONE, IDS_ACHIEVE_DESC_CHESTFUL_OF_COBBLESTONE) )->setAwardLocallyOnly()->postConstruct();
Achievements::renewableEnergy = (new Achievement(eAward_renewableEnergy, L"renewableEnergy", 0,0, Tile::bookshelf, (Achievement*) nullptr, "045", IDS_ACHIEVE_NAME_RENEWABLE_ENERGY, IDS_ACHIEVE_DESC_RENEWABLE_ENERGY) )->postConstruct();
Achievements::musicToMyEars = (new Achievement(eAward_musicToMyEars, L"musicToMyEars", 0,0, Tile::bookshelf, (Achievement*) nullptr, "046", IDS_ACHIEVE_NAME_MUSIC_TO_MY_EARS, IDS_ACHIEVE_DESC_MUSIC_TO_MY_EARS) )->postConstruct();
Achievements::bodyGuard = (new Achievement(eAward_bodyGuard, L"bodyGuard", 0,0, Tile::bookshelf, (Achievement*) nullptr, "047", IDS_ACHIEVE_NAME_BODYGUARD, IDS_ACHIEVE_DESC_BODYGUARD) )->postConstruct();
Achievements::ironMan = (new Achievement(eAward_ironMan, L"ironMan", 0,0, Tile::bookshelf, (Achievement*) nullptr, "048", IDS_ACHIEVE_NAME_IRON_MAN, IDS_ACHIEVE_DESC_IRON_MAN) )->postConstruct();
Achievements::zombieDoctor = (new Achievement(eAward_zombieDoctor, L"zombieDoctor", 0,0, Tile::bookshelf, (Achievement*) nullptr, "049", IDS_ACHIEVE_NAME_ZOMBIE_DOCTOR, IDS_ACHIEVE_DESC_ZOMBIE_DOCTOR) )->postConstruct();
Achievements::lionTamer = (new Achievement(eAward_lionTamer, L"lionTamer", 0,0, Tile::bookshelf, (Achievement*) nullptr, "050", IDS_ACHIEVE_NAME_LION_TAMER, IDS_ACHIEVE_DESC_LION_TAMER) )->postConstruct();
}

View file

@ -55,14 +55,14 @@ public:
static Achievement *InToTheNether;
// 4J : WESTY : Added other awards.
static Achievement *socialPost;
//static Achievement *socialPost;
static Achievement *eatPorkChop;
static Achievement *play100Days;
static Achievement *arrowKillCreeper;
static Achievement *mine100Blocks;
static Achievement *kill10Creepers;
//static Achievement *mine100Blocks;
//static Achievement *kill10Creepers;
#ifdef _EXTENDED_ACHIEVEMENTS
static Achievement *overkill; // Old achievements;
static Achievement *bookcase; // Old achievements;
static Achievement *adventuringTime;
@ -84,7 +84,6 @@ public:
static Achievement *ironMan;
static Achievement *zombieDoctor;
static Achievement *lionTamer;
#endif
static void staticCtor();

View file

@ -161,17 +161,17 @@ Stat *CommonStats::get_achievement(eAward achievementId)
case eAward_MOARTools: return (Stat *) Achievements::MOARTools;
case eAward_DispenseWithThis: return (Stat *) Achievements::dispenseWithThis;
case eAward_InToTheNether: return (Stat *) Achievements::InToTheNether;
case eAward_mine100Blocks: return (Stat *) Achievements::mine100Blocks;
case eAward_kill10Creepers: return (Stat *) Achievements::kill10Creepers;
//case eAward_mine100Blocks: return (Stat *) Achievements::mine100Blocks;
//case eAward_kill10Creepers: return (Stat *) Achievements::kill10Creepers;
case eAward_eatPorkChop: return (Stat *) Achievements::eatPorkChop;
case eAward_play100Days: return (Stat *) Achievements::play100Days;
case eAward_arrowKillCreeper: return (Stat *) Achievements::arrowKillCreeper;
case eAward_socialPost: return (Stat *) Achievements::socialPost;
//case eAward_socialPost: return (Stat *) Achievements::socialPost;
#ifndef _XBOX
case eAward_snipeSkeleton: return (Stat *) Achievements::snipeSkeleton;
case eAward_diamonds: return (Stat *) Achievements::diamonds;
case eAward_portal: return (Stat *) nullptr; // TODO
//case eAward_portal: return (Stat *) nullptr; // TODO
case eAward_ghast: return (Stat *) Achievements::ghast;
case eAward_blazeRod: return (Stat *) Achievements::blazeRod;
case eAward_potion: return (Stat *) Achievements::potion;
@ -180,7 +180,7 @@ Stat *CommonStats::get_achievement(eAward achievementId)
case eAward_enchantments: return (Stat *) Achievements::enchantments;
#endif
#ifdef _EXTENDED_ACHIEVEMENTS
case eAward_overkill: return (Stat *) Achievements::overkill; // Restored old ach.
case eAward_bookcase: return (Stat *) Achievements::bookcase; // Restored old ach.
@ -203,7 +203,7 @@ Stat *CommonStats::get_achievement(eAward achievementId)
case eAward_ironMan: return (Stat *) Achievements::ironMan;
case eAward_zombieDoctor: return (Stat *) Achievements::zombieDoctor;
case eAward_lionTamer: return (Stat *) Achievements::lionTamer;
#endif
default: return (Stat *) nullptr;
}

View file

@ -88,6 +88,7 @@ void FurnaceResultSlot::checkTakeAchievements(shared_ptr<ItemInstance> carried)
#else
if (carried->id == Item::ironIngot_Id) player->awardStat(GenericStats::acquireIron(), GenericStats::param_acquireIron());
if (carried->id == Item::fish_cooked_Id) player->awardStat(GenericStats::cookFish(), GenericStats::param_cookFish());
//if (carried->id == Item::porkChop_cooked_Id) GenericStats::itemsCrafted(Item::porkChop_cooked_Id);
#endif
removeCount = 0;

View file

@ -391,10 +391,10 @@ Stat* GenericStats::InToTheNether()
return instance->get_achievement( eAward_InToTheNether );
}
Stat* GenericStats::socialPost()
{
return instance->get_achievement( eAward_socialPost );
}
//Stat* GenericStats::socialPost()
//{
// return instance->get_achievement( eAward_socialPost );
//}
Stat* GenericStats::eatPorkChop()
{
@ -411,22 +411,22 @@ Stat* GenericStats::arrowKillCreeper()
return instance->get_achievement( eAward_arrowKillCreeper );
}
Stat* GenericStats::mine100Blocks()
{
return instance->get_achievement( eAward_mine100Blocks );
}
//Stat* GenericStats::mine100Blocks()
//{
// return instance->get_achievement( eAward_mine100Blocks );
//}
Stat* GenericStats::kill10Creepers()
{
return instance->get_achievement( eAward_kill10Creepers );
}
//Stat* GenericStats::kill10Creepers()
//{
// return instance->get_achievement( eAward_kill10Creepers );
//}
Stat* GenericStats::adventuringTime()
{
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_adventuringTime);
#else
return nullptr;
return instance->get_achievement(eAward_adventuringTime);
#endif
}
@ -435,7 +435,7 @@ Stat* GenericStats::repopulation()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_repopulation);
#else
return nullptr;
return instance->get_achievement(eAward_repopulation);
#endif
}
@ -444,7 +444,7 @@ Stat* GenericStats::porkChop()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_eatPorkChop);
#else
return nullptr;
return instance->get_achievement(eAward_eatPorkChop);
#endif
}
@ -453,7 +453,7 @@ Stat* GenericStats::diamondsToYou()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_diamondsToYou);
#else
return nullptr;
return instance->get_achievement(eAward_diamondsToYou);
#endif
}
@ -462,7 +462,7 @@ Stat* GenericStats::passingTheTime()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_play100Days);
#else
return nullptr;
return instance->get_achievement(eAward_play100Days);
#endif
}
@ -471,7 +471,7 @@ Stat* GenericStats::archer()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_arrowKillCreeper);
#else
return nullptr;
return instance->get_achievement(eAward_arrowKillCreeper);
#endif
}
@ -480,7 +480,7 @@ Stat* GenericStats::theHaggler()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_theHaggler);
#else
return nullptr;
return instance->get_achievement(eAward_theHaggler);
#endif
}
@ -489,7 +489,7 @@ Stat* GenericStats::potPlanter()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_potPlanter);
#else
return nullptr;
return instance->get_achievement(eAward_potPlanter);
#endif
}
@ -498,7 +498,7 @@ Stat* GenericStats::itsASign()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_itsASign);
#else
return nullptr;
return instance->get_achievement(eAward_itsASign);
#endif
}
@ -507,7 +507,7 @@ Stat* GenericStats::ironBelly()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_ironBelly);
#else
return nullptr;
return instance->get_achievement(eAward_ironBelly);
#endif
}
@ -516,7 +516,7 @@ Stat* GenericStats::haveAShearfulDay()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_haveAShearfulDay);
#else
return nullptr;
return instance->get_achievement(eAward_haveAShearfulDay);
#endif
}
@ -525,7 +525,7 @@ Stat* GenericStats::rainbowCollection()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_rainbowCollection);
#else
return nullptr;
return instance->get_achievement(eAward_rainbowCollection);
#endif
}
@ -534,7 +534,7 @@ Stat* GenericStats::stayinFrosty()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_stayinFrosty);
#else
return nullptr;
return instance->get_achievement(eAward_stayinFrosty);
#endif
}
@ -543,7 +543,7 @@ Stat* GenericStats::chestfulOfCobblestone()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_chestfulOfCobblestone);
#else
return nullptr;
return instance->get_achievement(eAward_chestfulOfCobblestone);
#endif
}
@ -552,7 +552,7 @@ Stat* GenericStats::renewableEnergy()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_renewableEnergy);
#else
return nullptr;
return instance->get_achievement(eAward_renewableEnergy);
#endif
}
@ -561,7 +561,7 @@ Stat* GenericStats::musicToMyEars()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_musicToMyEars);
#else
return nullptr;
return instance->get_achievement(eAward_musicToMyEars);
#endif
}
@ -570,7 +570,7 @@ Stat* GenericStats::bodyGuard()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_bodyGuard);
#else
return nullptr;
return instance->get_achievement(eAward_bodyGuard);
#endif
}
@ -579,7 +579,7 @@ Stat* GenericStats::ironMan()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_ironMan);
#else
return nullptr;
return instance->get_achievement(eAward_ironMan);
#endif
}
@ -588,7 +588,7 @@ Stat* GenericStats::zombieDoctor()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_zombieDoctor);
#else
return nullptr;
return instance->get_achievement(eAward_zombieDoctor);
#endif
}
@ -597,7 +597,7 @@ Stat* GenericStats::lionTamer()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->get_achievement(eAward_lionTamer);
#else
return nullptr;
return instance->get_achievement(eAward_lionTamer);
#endif
}
@ -1081,10 +1081,10 @@ byteArray GenericStats::param_InToTheNether()
return instance->getParam_achievement(eAward_InToTheNether);
}
byteArray GenericStats::param_socialPost()
{
return instance->getParam_achievement(eAward_socialPost);
}
//byteArray GenericStats::param_socialPost()
//{
// return instance->getParam_achievement(eAward_socialPost);
//}
byteArray GenericStats::param_eatPorkChop()
{
@ -1101,15 +1101,15 @@ byteArray GenericStats::param_arrowKillCreeper()
return instance->getParam_achievement(eAward_arrowKillCreeper);
}
byteArray GenericStats::param_mine100Blocks()
{
return instance->getParam_achievement(eAward_mine100Blocks);
}
byteArray GenericStats::param_kill10Creepers()
{
return instance->getParam_achievement(eAward_kill10Creepers);
}
//byteArray GenericStats::param_mine100Blocks()
//{
// return instance->getParam_achievement(eAward_mine100Blocks);
//}
//
//byteArray GenericStats::param_kill10Creepers()
//{
// return instance->getParam_achievement(eAward_kill10Creepers);
//}
byteArray GenericStats::param_adventuringTime()
{
@ -1134,7 +1134,7 @@ byteArray GenericStats::param_porkChop()
#ifdef _EXTENDED_ACHIEVEMENTS
return instance->getParam_achievement(eAward_eatPorkChop);
#else
return instance->getParam_noArgs();
return instance->getParam_achievement(eAward_eatPorkChop);
#endif
}