mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/LCE-Revelations.git
synced 2026-05-22 14:54:51 +00:00
---
Minecraft.Client/ClientConnection.cpp
Purpose: Propagate hardcore flag through network level creation
- handleLogin() (2 sites): Changed MultiPlayerLevel constructor calls from hardcoded false for the
hardcore parameter to packet->m_isHardcore, so the client-side level correctly knows it's hardcore
when joining a server.
- handleRespawn(): Same change - when creating a new dimension level on respawn, uses
packet->m_isHardcore instead of querying minecraft->level->getLevelData()->isHardcore() (which could
be stale/wrong).
---
Minecraft.Client/Common/App_Defines.h
Purpose: Define bitmask for hardcore host option
- Added GAME_HOST_OPTION_BITMASK_HARDCORE (0x40000000) - a new bit in the host options bitfield to
store whether the game is hardcore.
---
Minecraft.Client/Common/App_enums.h
Purpose: Add hardcore enum value
- Added eGameHostOption_Hardcore to the eGameHostOption enum so code can get/set the hardcore flag
via SetGameHostOption/GetGameHostOption.
---
Minecraft.Client/Common/Consoles_App.cpp
Purpose: Implement hardcore get/set in host options bitfield
- SetGameHostOption(): Added case eGameHostOption_Hardcore - sets or clears the
GAME_HOST_OPTION_BITMASK_HARDCORE bit.
- GetGameHostOption(): Added case eGameHostOption_Hardcore - returns 1 if the hardcore bit is set, 0
otherwise.
---
Minecraft.Client/Common/Consoles_App.h
Purpose: Store save folder name for hardcore world deletion
- Added SetCurrentSaveFolderName() and GetCurrentSaveFolderName() public methods.
- Added wstring m_currentSaveFolderName private member - stores the save folder name so the hardcore
death handler can find and delete the world.
---
Minecraft.Client/Common/UI/IUIScene_PauseMenu.cpp
Purpose: Delete hardcore world's save data on exit
- Added Win64_DeleteSaveDirectory() - a recursive directory deletion helper (Windows64 only).
- In _ExitWorld(): Before the server is torn down, captures whether this is a hardcore death exit
(getDeleteWorldOnExit()). Tries 3 sources for the save folder name: app storage, StorageManager, and
MinecraftServer.
- After the server fully stops, if shouldDeleteHardcoreWorld is true, deletes the entire
Windows64\GameHDD\<savefolder> directory.
---
Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.cpp
Purpose: Hardcore difficulty slider in Create World menu
- Added file-scope s_bHardcore flag to track when the slider is at position 4 (Hardcore).
- Constructor: Extended difficulty slider range from 0-3 to 0-4, resets s_bHardcore to false.
- handleSliderMove(): When slider value >= 4, sets s_bHardcore = true, stores actual difficulty as 3
(Hard), and displays "Hardcore" label. Otherwise behaves normally.
- CreateGame(): Clears the save folder name (new world), and sets eGameHostOption_Hardcore based on
s_bHardcore.
- Minor: Changed RequestErrorMessage to RequestAlertMessage for a content restriction dialog.
---
Minecraft.Client/Common/UI/UIScene_DeathMenu.cpp
Purpose: Hardcore death screen behavior (Iggy UI)
- Constructor: Checks if current level is hardcore. If so, shows IDS_HARDCORE_DEATH_MESSAGE on the
respawn button and hides it. Otherwise shows normal "Respawn" button.
- handlePress() - Respawn: Added safeguard - if hardcore, blocks respawn entirely.
- handlePress() - Exit Game: If hardcore and host, skips save dialog, disables save-on-exit, enables
delete-world-on-exit, and triggers immediate world exit.
---
Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp
Purpose: Show "Difficulty: Hardcore" in Load World menu + persist hardcore through game launch
- Static array: Expanded m_iDifficultyTitleSettingA from 4 to 5 entries, added IDS_GAMEMODE_HARDCORE
at index 4.
- Constructor: Initializes m_bHardcore = false. In Windows64 block: sets up thumbnail name from save
details, and reads isHardcore from params->saveDetails. If hardcore, immediately initializes the
difficulty slider to show "Hardcore" locked at position 4.
- tick(): When host options are read (bHostOptionsRead block), also reads the hardcore flag and
re-initializes the slider if needed (for console path).
- handleSliderMove(): If m_bHardcore, locks the slider at position 4 (prevents changing difficulty).
- StartGameFromSave(): Stores the save folder name in app for later hardcore deletion. Sets
eGameHostOption_Hardcore from m_bHardcore.
---
Minecraft.Client/Common/UI/UIScene_LoadMenu.h
Purpose: Declare hardcore member
- Expanded m_iDifficultyTitleSettingA from [4] to [5].
- Added bool m_bHardcore private member.
---
Minecraft.Client/Common/UI/UIScene_LoadOrJoinMenu.cpp
Purpose: Read hardcore flag from level.dat when building the save list
- ReadLevelNameFromSaveFile(): Added optional bool *outHardcore parameter. Inside the NBT Data
compound tag parsing, if outHardcore is non-null, reads dataTag->getBoolean(L"hardcore").
- Save enumeration block (Windows64): Passes &saveHardcore to ReadLevelNameFromSaveFile and stores
the result in m_saveDetails[i].isHardcore.
---
Minecraft.Client/Common/UI/UIStructs.h
Purpose: Add isHardcore to save list details struct
- Added bool isHardcore field to _SaveListDetails struct.
- Initialized to false in the constructor.
---
Minecraft.Client/Common/XUI/XUI_Death.cpp
Purpose: Hardcore death screen behavior (XUI/Xbox UI)
- Mirror of the Iggy UIScene_DeathMenu.cpp changes but for the XUI rendering path.
- OnInit(): Checks isHardcore(), hides respawn button and shows death message if true.
- OnNotifyPressEx() - Exit Game: If hardcore and host, skips save, flags world for deletion, exits
immediately.
- OnNotifyPressEx() - Respawn: Safeguard to block respawn in hardcore.
---
Minecraft.Client/Gui.cpp
Purpose: Syntax fix
- Fixed lines.push_back(L"" → lines.push_back(L"") - missing closing quote/paren in debug terrain
feature display.
---
Minecraft.Client/MinecraftServer.cpp
Purpose: Server-side hardcore support
- Constructor: Initializes m_deleteWorldOnExit = false.
- loadLevel(): Captures the save folder name from StorageManager into m_saveFolderName for later use
in hardcore world deletion.
- isHardcore(): Changed from always returning false to returning
app.GetGameHostOption(eGameHostOption_Hardcore) > 0 - this is the key change that makes the server
actually report hardcore mode.
---
Minecraft.Client/MinecraftServer.h
Purpose: Declare hardcore-related members
- Added bool m_deleteWorldOnExit and wstring m_saveFolderName private members.
- Added setDeleteWorldOnExit(), getDeleteWorldOnExit(), and getSaveFolderName() public methods.
---
Minecraft.Client/PlayerConnection.h
Purpose: Thread-safety fix for kicked flag
- Changed m_bWasKicked from bool to std::atomic<bool> (initialized with {false}).
- Changed setWasKicked()/getWasKicked() to use .store()/.load() - fixes a race condition where the
kicked flag is set on one thread and read on another.
---
Minecraft.Client/PlayerList.cpp
Purpose: Hardcore multiplayer - ban, respawn as Adventure, thread-safe bans
- Constructor/Destructor: Added InitializeCriticalSection/DeleteCriticalSection for m_banCS.
- placeNewPlayer(): Passes isHardcore() flag to the LoginPacket constructor so clients joining know
it's hardcore.
- respawn(): After respawn in hardcore, forces the player into Adventure mode (spectate-like: can
look around but not interact). Sends GameEventPacket to sync client.
- respawn() and toggleDimension() (2 sites): Pass isHardcore() to RespawnPacket constructor.
- isXuidBanned(): Wrapped m_bannedXuids iteration with EnterCriticalSection/LeaveCriticalSection for
thread safety.
- banXuid() (new): Thread-safe method to add a player's XUID to the ban list - used when a player
dies in hardcore multiplayer.
---
Minecraft.Client/PlayerList.h
Purpose: Declare ban-related additions
- Added CRITICAL_SECTION m_banCS to protect m_bannedXuids.
- Added void banXuid(PlayerUID xuid) public method.
---
Minecraft.Client/SelectWorldScreen.cpp
Purpose: Show [Hardcore] badge in Java-style world list
- In renderItem(): If levelSummary->isHardcore(), appends [Hardcore] to the world name display.
---
Minecraft.Client/ServerPlayer.cpp
Purpose: Hardcore death behavior on server
- die(): If the level is hardcore, switches the dead player to Adventure mode (so they can't
interact if somehow respawned).
- Minor: Two comment lines changed // → /// (no functional change).
---
Minecraft.Client/Windows64Media/strings.h
Purpose: String IDs for hardcore UI text
- Added 8 new string IDs (2286-2293): IDS_GAMEMODE_HARDCORE, IDS_HARDCORE, IDS_HARDCORE_TOOLTIP,
IDS_HARDCORE_WARNING_TITLE, IDS_HARDCORE_WARNING_TEXT, IDS_HARDCORE_DEATH_MESSAGE,
IDS_LABEL_HARDCORE, IDS_GAMEOPTION_HARDCORE.
---
Minecraft.World/ConsoleSaveFileOriginal.cpp
Purpose: Capture save folder name after first save (for new worlds)
- SaveSaveDataCallback() (Windows64 only): After a successful save, if the app doesn't yet know the
save folder name, attempts to capture it via StorageManager or by scanning Windows64\GameHDD\ for
the newest folder. This handles the case where a newly-created hardcore world hasn't been saved yet
when the folder name is needed.
---
Minecraft.World/DisconnectPacket.h
Purpose: Hardcore disconnect reason
- Added eDisconnect_HardcoreDeath to the disconnect reason enum - used when kicking a player who
died in hardcore multiplayer.
---
Minecraft.World/LoginPacket.cpp & LoginPacket.h
Purpose: Serialize hardcore flag in login packet
- Added bool m_isHardcore member, initialized to false in both constructors.
- Server→Client constructor now accepts bool isHardcore = false parameter.
- read(): Reads m_isHardcore from the stream.
- write(): Writes m_isHardcore to the stream.
- getEstimatedSize(): Added sizeof(bool) for the new field.
---
Minecraft.World/RespawnPacket.cpp & RespawnPacket.h
Purpose: Serialize hardcore flag in respawn packet
- Added bool m_isHardcore member, initialized to false.
- Constructor now accepts bool isHardcore = false parameter.
- read()/write(): Serialize m_isHardcore via readBoolean()/writeBoolean().
- getEstimatedSize(): Changed from 13 to 14 bytes to account for the new boolean.
531 lines
10 KiB
C++
531 lines
10 KiB
C++
#pragma once
|
|
|
|
#pragma message("UIStructs.h")
|
|
|
|
#include "UIEnums.h"
|
|
|
|
class Container;
|
|
class Inventory;
|
|
class BrewingStandTileEntity;
|
|
class DispenserTileEntity;
|
|
class FurnaceTileEntity;
|
|
class SignTileEntity;
|
|
class LevelGenerationOptions;
|
|
class LocalPlayer;
|
|
class Merchant;
|
|
class EntityHorse;
|
|
class BeaconTileEntity;
|
|
class Slot;
|
|
class AbstractContainerMenu;
|
|
|
|
// 4J Stu - Structs shared by Iggy and Xui scenes.
|
|
typedef struct _UIVec2D
|
|
{
|
|
float x;
|
|
float y;
|
|
|
|
_UIVec2D& operator+=(const _UIVec2D &rhs)
|
|
{
|
|
x += rhs.x;
|
|
y += rhs.y;
|
|
return *this;
|
|
}
|
|
} UIVec2D;
|
|
|
|
// Brewing
|
|
typedef struct _BrewingScreenInput
|
|
{
|
|
shared_ptr<Inventory> inventory;
|
|
shared_ptr<BrewingStandTileEntity> brewingStand;
|
|
int iPad;
|
|
bool bSplitscreen;
|
|
} BrewingScreenInput;
|
|
|
|
// Chest
|
|
typedef struct _ContainerScreenInput
|
|
{
|
|
shared_ptr<Container> inventory;
|
|
shared_ptr<Container> container;
|
|
int iPad;
|
|
bool bSplitscreen;
|
|
} ContainerScreenInput;
|
|
|
|
// Dispenser
|
|
typedef struct _TrapScreenInput
|
|
{
|
|
shared_ptr<Container> inventory;
|
|
shared_ptr<DispenserTileEntity> trap;
|
|
int iPad;
|
|
bool bSplitscreen;
|
|
} TrapScreenInput;
|
|
|
|
// Inventory and creative inventory
|
|
typedef struct _InventoryScreenInput
|
|
{
|
|
shared_ptr<LocalPlayer> player;
|
|
bool bNavigateBack; // If we came here from the crafting screen, go back to it, rather than closing the xui menus
|
|
int iPad;
|
|
bool bSplitscreen;
|
|
} InventoryScreenInput;
|
|
|
|
// Enchanting
|
|
typedef struct _EnchantingScreenInput
|
|
{
|
|
shared_ptr<Inventory> inventory;
|
|
Level *level;
|
|
int x;
|
|
int y;
|
|
int z;
|
|
int iPad;
|
|
bool bSplitscreen;
|
|
wstring name;
|
|
}
|
|
EnchantingScreenInput;
|
|
|
|
// Furnace
|
|
typedef struct _FurnaceScreenInput
|
|
{
|
|
shared_ptr<Inventory> inventory;
|
|
shared_ptr<FurnaceTileEntity> furnace;
|
|
int iPad;
|
|
bool bSplitscreen;
|
|
} FurnaceScreenInput;
|
|
|
|
// Crafting
|
|
typedef struct _CraftingPanelScreenInput
|
|
{
|
|
shared_ptr<LocalPlayer> player;
|
|
int iContainerType; // RECIPE_TYPE_2x2 or RECIPE_TYPE_3x3
|
|
bool bSplitscreen;
|
|
int iPad;
|
|
int x;
|
|
int y;
|
|
int z;
|
|
}
|
|
CraftingPanelScreenInput;
|
|
|
|
// Fireworks
|
|
typedef struct _FireworksScreenInput
|
|
{
|
|
shared_ptr<LocalPlayer> player;
|
|
bool bSplitscreen;
|
|
int iPad;
|
|
int x;
|
|
int y;
|
|
int z;
|
|
}
|
|
FireworksScreenInput;
|
|
|
|
// Trading
|
|
typedef struct _TradingScreenInput
|
|
{
|
|
shared_ptr<Inventory> inventory;
|
|
shared_ptr<Merchant> trader;
|
|
Level *level;
|
|
int iPad;
|
|
bool bSplitscreen;
|
|
}
|
|
TradingScreenInput;
|
|
|
|
// Anvil
|
|
typedef struct _AnvilScreenInput
|
|
{
|
|
shared_ptr<Inventory> inventory;
|
|
Level *level;
|
|
int x;
|
|
int y;
|
|
int z;
|
|
int iPad;
|
|
bool bSplitscreen;
|
|
}
|
|
AnvilScreenInput;
|
|
|
|
// Hopper
|
|
typedef struct _HopperScreenInput
|
|
{
|
|
shared_ptr<Inventory> inventory;
|
|
shared_ptr<Container> hopper;
|
|
int iPad;
|
|
bool bSplitscreen;
|
|
}
|
|
HopperScreenInput;
|
|
|
|
// Horse
|
|
typedef struct _HorseScreenInput
|
|
{
|
|
shared_ptr<Inventory> inventory;
|
|
shared_ptr<Container> container;
|
|
shared_ptr<EntityHorse> horse;
|
|
int iPad;
|
|
bool bSplitscreen;
|
|
}
|
|
HorseScreenInput;
|
|
|
|
// Beacon
|
|
typedef struct _BeaconScreenInput
|
|
{
|
|
shared_ptr<Inventory> inventory;
|
|
shared_ptr<BeaconTileEntity> beacon;
|
|
int iPad;
|
|
bool bSplitscreen;
|
|
}
|
|
BeaconScreenInput;
|
|
|
|
// Sign
|
|
typedef struct _SignEntryScreenInput
|
|
{
|
|
shared_ptr<SignTileEntity> sign;
|
|
int iPad;
|
|
} SignEntryScreenInput;
|
|
|
|
// Connecting progress
|
|
typedef struct _ConnectionProgressParams
|
|
{
|
|
int iPad;
|
|
int stringId;
|
|
bool showTooltips;
|
|
bool setFailTimer;
|
|
int timerTime;
|
|
void (*cancelFunc)(LPVOID param);
|
|
LPVOID cancelFuncParam;
|
|
|
|
_ConnectionProgressParams()
|
|
{
|
|
iPad = 0;
|
|
stringId = -1;
|
|
showTooltips = false;
|
|
setFailTimer = false;
|
|
timerTime = 0;
|
|
cancelFunc = nullptr;
|
|
cancelFuncParam = nullptr;
|
|
}
|
|
} ConnectionProgressParams;
|
|
|
|
// Fullscreen progress
|
|
typedef struct _UIFullscreenProgressCompletionData
|
|
{
|
|
BOOL bRequiresUserAction;
|
|
BOOL bShowBackground;
|
|
BOOL bShowLogo;
|
|
BOOL bShowTips;
|
|
ProgressionCompletionType type;
|
|
int iPad;
|
|
EUIScene scene;
|
|
|
|
_UIFullscreenProgressCompletionData()
|
|
{
|
|
bRequiresUserAction = FALSE;
|
|
bShowBackground = TRUE;
|
|
bShowLogo = TRUE;
|
|
bShowTips = TRUE;
|
|
type = e_ProgressCompletion_NoAction;
|
|
}
|
|
} UIFullscreenProgressCompletionData;
|
|
|
|
// Create world
|
|
typedef struct _CreateWorldMenuInitData
|
|
{
|
|
BOOL bOnline;
|
|
BOOL bIsPrivate;
|
|
int iPad;
|
|
}
|
|
CreateWorldMenuInitData;
|
|
|
|
// Join/Load saves list
|
|
typedef struct _SaveListDetails
|
|
{
|
|
int saveId;
|
|
PBYTE pbThumbnailData;
|
|
DWORD dwThumbnailSize;
|
|
#ifdef _DURANGO
|
|
wchar_t UTF16SaveName[128];
|
|
wchar_t UTF16SaveFilename[MAX_SAVEFILENAME_LENGTH];
|
|
#else
|
|
char UTF8SaveName[128];
|
|
#ifndef _XBOX
|
|
char UTF8SaveFilename[MAX_SAVEFILENAME_LENGTH];
|
|
#endif
|
|
#endif
|
|
|
|
bool isHardcore;
|
|
|
|
_SaveListDetails()
|
|
{
|
|
saveId = 0;
|
|
pbThumbnailData = nullptr;
|
|
dwThumbnailSize = 0;
|
|
isHardcore = false;
|
|
#ifdef _DURANGO
|
|
ZeroMemory(UTF16SaveName,sizeof(wchar_t)*128);
|
|
ZeroMemory(UTF16SaveFilename,sizeof(wchar_t)*MAX_SAVEFILENAME_LENGTH);
|
|
#else
|
|
ZeroMemory(UTF8SaveName,128);
|
|
#ifndef _XBOX
|
|
ZeroMemory(UTF8SaveFilename,MAX_SAVEFILENAME_LENGTH);
|
|
#endif
|
|
#endif
|
|
}
|
|
|
|
} SaveListDetails;
|
|
|
|
// Load world
|
|
typedef struct _LoadMenuInitData
|
|
{
|
|
int iPad;
|
|
int iSaveGameInfoIndex;
|
|
LevelGenerationOptions *levelGen;
|
|
SaveListDetails *saveDetails;
|
|
}
|
|
LoadMenuInitData;
|
|
|
|
// Join Games
|
|
typedef struct _JoinMenuInitData
|
|
{
|
|
FriendSessionInfo *selectedSession;
|
|
int iPad;
|
|
#ifdef _WINDOWS64
|
|
int serverIndex; // Index of the server in servers.db, -1 if not a saved server
|
|
#endif
|
|
} JoinMenuInitData;
|
|
|
|
// Native keyboard (Windows64 replacement for InputManager.RequestKeyboard WinAPI dialog)
|
|
#ifdef _WINDOWS64
|
|
typedef struct _UIKeyboardInitData
|
|
{
|
|
const wchar_t* title;
|
|
const wchar_t* defaultText;
|
|
int maxChars;
|
|
int(*callback)(LPVOID, const bool);
|
|
LPVOID lpParam;
|
|
bool pcMode; // When true, disables on-screen keyboard buttons (PC keyboard users only need the text field)
|
|
|
|
_UIKeyboardInitData() : title(nullptr), defaultText(nullptr), maxChars(25), callback(nullptr), lpParam(nullptr), pcMode(false) {}
|
|
} UIKeyboardInitData;
|
|
|
|
// Stores the text typed in UIScene_Keyboard so callbacks can retrieve it
|
|
// without calling InputManager.GetText (which shows the WinAPI dialog result).
|
|
extern wchar_t g_Win64KeyboardResult[256];
|
|
inline void Win64_GetKeyboardText(uint16_t* outBuf, int maxChars)
|
|
{
|
|
wcsncpy_s((wchar_t*)outBuf, maxChars, g_Win64KeyboardResult, _TRUNCATE);
|
|
}
|
|
|
|
// Returns true if any XInput controller is currently connected.
|
|
// Used to decide whether to show the in-game keyboard UI or fall back to PC input.
|
|
#include <Xinput.h>
|
|
inline bool Win64_IsControllerConnected()
|
|
{
|
|
XINPUT_STATE state;
|
|
for (DWORD i = 0; i < XUSER_MAX_COUNT; i++)
|
|
{
|
|
memset(&state, 0, sizeof(state));
|
|
if (XInputGetState(i, &state) == ERROR_SUCCESS)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
#endif // _WINDOWS64
|
|
|
|
// More Options
|
|
typedef struct _LaunchMoreOptionsMenuInitData
|
|
{
|
|
bool bOnlineGame;
|
|
bool bInviteOnly;
|
|
bool bAllowFriendsOfFriends;
|
|
|
|
bool bGenerateOptions;
|
|
bool bStructures;
|
|
bool bFlatWorld;
|
|
bool bBonusChest;
|
|
|
|
bool bPVP;
|
|
bool bTrust;
|
|
bool bFireSpreads;
|
|
bool bTNT;
|
|
|
|
bool bHostPrivileges;
|
|
bool bResetNether;
|
|
|
|
bool bMobGriefing;
|
|
bool bKeepInventory;
|
|
bool bDoMobSpawning;
|
|
bool bDoMobLoot;
|
|
bool bDoTileDrops;
|
|
bool bNaturalRegeneration;
|
|
bool bDoDaylightCycle;
|
|
|
|
bool bOnlineSettingChangedBySystem;
|
|
|
|
int iPad;
|
|
|
|
DWORD dwTexturePack;
|
|
|
|
wstring seed;
|
|
int worldSize;
|
|
bool bDisableSaving;
|
|
|
|
EGameHostOptionWorldSize currentWorldSize;
|
|
EGameHostOptionWorldSize newWorldSize;
|
|
bool newWorldSizeOverwriteEdges;
|
|
|
|
_LaunchMoreOptionsMenuInitData()
|
|
{
|
|
memset(this,0,sizeof(_LaunchMoreOptionsMenuInitData));
|
|
bOnlineGame = true;
|
|
bAllowFriendsOfFriends = true;
|
|
bPVP = true;
|
|
bFireSpreads = true;
|
|
bTNT = true;
|
|
iPad = -1;
|
|
worldSize = 3;
|
|
seed = L"";
|
|
bDisableSaving = false;
|
|
newWorldSize = e_worldSize_Unknown;
|
|
newWorldSizeOverwriteEdges = false;
|
|
|
|
bMobGriefing = true;
|
|
bKeepInventory = false;
|
|
bDoMobSpawning = true;
|
|
bDoMobLoot = true;
|
|
bDoTileDrops = true;
|
|
bNaturalRegeneration = true;
|
|
bDoDaylightCycle = true;
|
|
}
|
|
}
|
|
LaunchMoreOptionsMenuInitData;
|
|
|
|
typedef struct _LoadingInputParams
|
|
{
|
|
C4JThreadStartFunc* func;
|
|
LPVOID lpParam;
|
|
UIFullscreenProgressCompletionData *completionData;
|
|
|
|
int cancelText;
|
|
void (*cancelFunc)(LPVOID param);
|
|
void (*completeFunc)(LPVOID param);
|
|
LPVOID m_cancelFuncParam;
|
|
LPVOID m_completeFuncParam;
|
|
bool waitForThreadToDelete;
|
|
|
|
_LoadingInputParams()
|
|
{
|
|
func = nullptr;
|
|
lpParam = nullptr;
|
|
completionData = nullptr;
|
|
|
|
cancelText = -1;
|
|
cancelFunc = nullptr;
|
|
completeFunc = nullptr;
|
|
m_cancelFuncParam = nullptr;
|
|
m_completeFuncParam = nullptr;
|
|
waitForThreadToDelete = false;
|
|
}
|
|
} LoadingInputParams;
|
|
|
|
// Tutorial
|
|
#ifndef _XBOX
|
|
class UIScene;
|
|
#endif
|
|
class Tutorial;
|
|
typedef struct _TutorialPopupInfo
|
|
{
|
|
#ifdef _XBOX
|
|
CXuiScene *interactScene;
|
|
#else
|
|
UIScene *interactScene;
|
|
#endif
|
|
LPCWSTR desc;
|
|
LPCWSTR title;
|
|
int icon;
|
|
int iAuxVal /* = 0 */;
|
|
bool isFoil /* = false */;
|
|
bool allowFade /* = true */;
|
|
bool isReminder /*= false*/;
|
|
Tutorial *tutorial;
|
|
|
|
_TutorialPopupInfo()
|
|
{
|
|
interactScene = nullptr;
|
|
desc = L"";
|
|
title = L"";
|
|
icon = -1;
|
|
iAuxVal = 0;
|
|
isFoil = false;
|
|
allowFade = true;
|
|
isReminder = false;
|
|
tutorial = nullptr;
|
|
}
|
|
|
|
} TutorialPopupInfo;
|
|
|
|
// Quadrant sign in
|
|
typedef struct _SignInInfo
|
|
{
|
|
int( *Func)(LPVOID,const bool, const int iPad);
|
|
LPVOID lpParam;
|
|
bool requireOnline;
|
|
} SignInInfo;
|
|
|
|
// Credits
|
|
typedef struct
|
|
{
|
|
LPCWSTR m_Text; // Should contain string, optionally with %s to add in translated string ... e.g. "Andy West - %s"
|
|
int m_iStringID[2]; // May be NO_TRANSLATED_STRING if we do not require to add any translated string.
|
|
ECreditTextTypes m_eType;
|
|
}
|
|
SCreditTextItemDef;
|
|
|
|
// Message box
|
|
typedef struct _MessageBoxInfo
|
|
{
|
|
UINT uiTitle;
|
|
UINT uiText;
|
|
UINT *uiOptionA;
|
|
UINT uiOptionC;
|
|
DWORD dwPad;
|
|
int( *Func)(LPVOID,int,const C4JStorage::EMessageResult);
|
|
LPVOID lpParam;
|
|
//C4JStringTable *pStringTable; // 4J Stu - We don't need this for our internal message boxes
|
|
WCHAR *pwchFormatString;
|
|
DWORD dwFocusButton;
|
|
} MessageBoxInfo;
|
|
|
|
typedef struct _DLCOffersParam
|
|
{
|
|
int iPad;
|
|
int iOfferC;
|
|
int iType;
|
|
}
|
|
DLCOffersParam;
|
|
|
|
typedef struct _InGamePlayerOptionsInitData
|
|
{
|
|
int iPad;
|
|
BYTE networkSmallId;
|
|
unsigned int playerPrivileges;
|
|
} InGamePlayerOptionsInitData;
|
|
|
|
typedef struct _DebugSetCameraPosition
|
|
{
|
|
int player;
|
|
double m_camX, m_camY, m_camZ, m_yRot, m_elev;
|
|
} DebugSetCameraPosition;
|
|
|
|
typedef struct _TeleportMenuInitData
|
|
{
|
|
int iPad;
|
|
bool teleportToPlayer;
|
|
} TeleportMenuInitData;
|
|
|
|
typedef struct _CustomDrawData
|
|
{
|
|
float x0, y0, x1, y1; // the bounding box of the original DisplayObject, in object space
|
|
float mat[16];
|
|
} CustomDrawData;
|
|
|
|
typedef struct _ItemEditorInput
|
|
{
|
|
int iPad;
|
|
Slot *slot;
|
|
AbstractContainerMenu *menu;
|
|
} ItemEditorInput; |