Batch #16644 by ragnarok-clanker: no function's compiled code changes; checked with 593 compiled unit(s), including every includer of Source/Client/Application/Registry.h, Source/Client/Application/RegistryKey.h, Source/Client/Application/Timer.h, Source/Client/Mode/ModeFade.h, Source/Client/Mode/ModeFadeOut.h, Source/Client/Mode/ModeScreenshot.h, Source/Client/Replay/Replay.h, Source/Client/Replay/ReplayRecordOption.h, Source/Client/Session/Session.h, Source/Contents/Actors/ActorPickNode.h, Source/Contents/Effects/Core/RagEffectState.h, Source/Contents/Effects/Particles/Particle.h, Source/Contents/Movies/BinkMovie.h, Source/Contents/Sprites/SpriteLayerDrawing.h, Source/File/NFileLog.h, Source/Network/NIPAddr.h, Source/Network/Packets/ActorNamePacket.h, Source/Network/Packets/ClientKeepalive.h, Source/Network/Packets/ClientOptionPacket.h, Source/Network/Packets/ExecutableDigestPacket.h, Source/Network/Packets/GameTickPacket.h, Source/Render/DX7/QueuedDrawingDX7.h, Source/Render/DX7/RendererDX7.h, Source/Render/DX9/RenderSystemDX9.h, Source/Render/Device/DeviceSelection.h, Source/Render/Device/Direct3DErrors.h, Source/Render/Device/DisplayMode.h, Source/Render/Device/RenderAdapter.h, Source/Render/Device/RenderBackends.h, Source/Render/Drawing/ActionSpriteDrawing.h, Source/Render/Drawing/BitmapDrawing.h, Source/Render/Drawing/BlendColor.h, Source/Render/Drawing/SpriteGeometry.h, Source/Render/Drawing/TextureStageModes.h, Source/Render/Primitives/AuxiliarySubmission.h, Source/Render/Primitives/SpriteQuad.h, Source/Render/Primitives/TextureQuad.h, Source/Render/Projection/ScreenGeometry.h, Source/Render/Projection/ScreenRectangle.h, Source/Resource/Audio/BinkRuntime.h, Source/Resource/Bitmap/EmblemResource.h, Source/Resource/Bitmap/GifLzw.h, Source/Resource/Bitmap/GifResource.h, Source/Resource/Bitmap/PaletteResource.h, Source/Resource/Bitmap/SkinPalette.h, Source/Resource/Bitmap/TextureNames.h, Source/Resource/Effects/EZeffectResource.h, Source/Resource/Json/JsonCppLoader.h, Source/Resource/Models/RmaResource.h, Source/Resource/Sprites/ImfResource.h, Source/Resource/Xml/XmlNode.h, Source/Security/FileSignatureVerifier.h, Source/Security/ProcessSecurity.h, Source/UI/Achievement/UIAchWnd.h, Source/UI/AdventureGuide/UIAdventureGuide.h, Source/UI/Buttons/UIBalloonOpenBtn.h, Source/UI/Buttons/UIMiniBtnWnd.h, Source/UI/Buttons/UISlotBitmap.h, Source/UI/Buttons/UIStaticBitmap.h, Source/UI/Buttons/UIStaticItem.h, Source/UI/Buttons/UIWindowCallBtnWnd.h, Source/UI/CashEmotion/UICashEmotionSprBtn.h, Source/UI/CashShop/UIMileageWnd.h, Source/UI/CashShop/UIPayConfirmWnd.h, Source/UI/Chat/UIChatRoomWnd.h, Source/UI/Dialogs/UIAccountLimitedToolWnd.h, Source/UI/Dialogs/UICntWnd.h, Source/UI/Dialogs/UILoadingWnd.h, Source/UI/Dialogs/UIMessageBox.h, Source/UI/Dialogs/UIMessageBoxAutoreturn.h, Source/UI/Dialogs/UINormalMB.h, Source/UI/Dialogs/UINoteWnd.h, Source/UI/Dialogs/UINoticeWnd.h, Source/UI/Dialogs/UIRPImageWnd.h, Source/UI/Dialogs/UIRPImageWnd2.h, Source/UI/Dialogs/UITalkboxTrapInputWnd.h, Source/UI/Dialogs/UITransMenuWnd.h, Source/UI/Dialogs/UIVideoWnd.h, Source/UI/Dialogs/UIWordDisplayWnd.h, Source/UI/Edit/UIItemTagCtrl.h, Source/UI/Enchant/EnchantUI.h, Source/UI/Events/UICheckAttendanceWnd.h, Source/UI/Events/UIOpenRoulletteWnd.h, Source/UI/Events/UIRoulletteWnd.h, Source/UI/Exchange/UIExchangeUI.h, Source/UI/GameSettings/GameSettingsUI.h, Source/UI/GameSettings/UIBattleMsgOptionWnd.h, Source/UI/GameSettings/UIEscOptionWnd.h, Source/UI/GameSettings/UIHotKeyWnd.h, Source/UI/GameSettings/UIHotkeyGuideWnd.h, Source/UI/GameSettings/UIViewCameraInfoWnd.h, Source/UI/Gauges/UIBarGraph.h, Source/UI/Guild/UIEmblemWnd.h, Source/UI/Guild/UIGuildWnd.h, Source/UI/Items/UIChangeMaterialWnd.h, Source/UI/Items/UICollectionSystemWnd.h, Source/UI/Items/UIEquipmentPropertiesWnd.h, Source/UI/Items/UIGradeEnchantWnd.h, Source/UI/Items/UIIngredientInfoWnd.h, Source/UI/Items/UIItemBaseWnd.h, Source/UI/Items/UIItemCollectionWnd.h, Source/UI/Items/UIItemMoveInfo.h, Source/UI/Items/UIItemPurchaseWnd.h, Source/UI/Items/UIItemReformWnd.h, Source/UI/Items/UIItemSellWnd.h, Source/UI/Items/UIItemSellWnd2.h, Source/UI/Items/UIItemShopWnd.h, Source/UI/Items/UIItemShopWnd2.h, Source/UI/Items/UIItemStoreComboBox.h, Source/UI/Items/UIItemStoreFindWnd.h, Source/UI/Items/UIItemStoreSubWnd.h, Source/UI/Items/UIItemStoreWnd.h, Source/UI/Items/UIItemWnd.h, Source/UI/Items/UILapineScrollBar.h, Source/UI/Items/UILapineUpgradeBoxWnd.h, Source/UI/Items/UIMerchantItemLogWnd.h, Source/UI/Items/UIParaItemShopWnd.h, Source/UI/Items/UIPreviewEquipWnd.h, Source/UI/Items/UIRefiningWnd.h, Source/UI/Items/UISecondCostumeWnd.h, Source/UI/Items/UISelectCartWnd.h, Source/UI/Lists/UIComboBoxEx.h, Source/UI/Lists/UIScrollBarVariants.h, Source/UI/Lists/UIScrollWnd.h, Source/UI/Lists/UITagListBox.h, Source/UI/Login/FuncDrawWNDChar.h, Source/UI/Login/UIChangeNameWnd.h, Source/UI/Login/UIDescriptRace.h, Source/UI/Login/UIEmailAddressWnd.h, Source/UI/Login/UILoginOTPWnd.h, Source/UI/Login/UILoginWnd.h, Source/UI/Login/UIMakeCharWnd.h, Source/UI/Login/UINewMakeCharWnd.h, Source/UI/Login/UINewSelectCharWnd.h, Source/UI/Login/UIPasswordWnd.h, Source/UI/Login/UISecondPasswordEditWnd.h, Source/UI/Login/UISelCharForUServerWnd.h, Source/UI/Login/UISelectServerWnd.h, Source/UI/Login/UIWaitDBSaveWnd.h, Source/UI/Macro/UICaptchaPreviewWnd.h, Source/UI/Macro/UICaptchaRegisterWnd.h, Source/UI/Macro/UIMacroBlackListCheckWnd.h, Source/UI/Macro/UIMacroDetectorWnd.h, Source/UI/Macro/UIMacroReport.h, Source/UI/Macro/UIMacroUserInfoWnd.h, Source/UI/Monster/UIMonsterDisplayWnd.h, Source/UI/Monster/UIMonsterInfoWnd.h, Source/UI/Navigation/NavigationLink.h, Source/UI/Navigation/UIChooseWarpWnd.h, Source/UI/Navigation/UIListBoxNavi.h, Source/UI/Navigation/UIListBoxNaviSearch.h, Source/UI/Navigation/UIMemorialDunWnd.h, Source/UI/Navigation/UIMiniMapWnd.h, Source/UI/Navigation/UIMinimapZoomWnd.h, Source/UI/Navigation/UINavigationHelpWnd.h, Source/UI/Navigation/UINavigationWnd.h, Source/UI/Navigation/UIRoMapWnd.h, Source/UI/Navigation/UIScrollBarNavi.h, Source/UI/Navigation/UIShowWarpWnd.h, Source/UI/Party/MiniPartyGrid.h, Source/UI/Party/MiniPartyPlacement.h, Source/UI/Party/MiniPartyWndAreaMgr.h, Source/UI/Party/UIJobSlotButton.h, Source/UI/Party/UIPartyBookingHelpWnd.h, Source/UI/Party/UISeekPartyListWnd.h, Source/UI/Party/UISeekPartyMBWnd.h, Source/UI/Party/UISeekPartyWnd.h, Source/UI/ProbabilityTable/UIProbabilityTable.h, Source/UI/Quest/UINotifyQuestWnd.h, Source/UI/Quest/UIOngoingQuestInfo.h, Source/UI/Quest/UIRecommendedQuestInfo.h, Source/UI/Quest/UIRenewQuestUI.h, Source/UI/Quest/UIRenewQuestWnd.h, Source/UI/Replay/UIReplayButton.h, Source/UI/Replay/UIReplayControlWnd.h, Source/UI/Replay/UIReplayListBox.h, Source/UI/Replay/UIReplayRECControlWnd.h, Source/UI/Replay/UISelectReplayDataWnd.h, Source/UI/Repute/UIReputeWnd.h, Source/UI/Rodex/UIOpenMailBoxWnd.h, Source/UI/Rodex/UIRodexContentsWnd.h, Source/UI/Rodex/UIRodexInboxWnd.h, Source/UI/RuneSystem/UIRuneSystemWindows.h, Source/UI/RuneSystem/UIRuneSystemWnd.h, Source/UI/SelectPackageItemBox/SelectPackageItemBox.h, Source/UI/SelectPackageItemBox/UIPackageBoxNameList.h, Source/UI/Shop/PriceCommission.h, Source/UI/Shop/UIBank_NewWnd.h, Source/UI/Shop/UIBartermarketWnd.h, Source/UI/Shop/UIMerchantItemMyShopWnd.h, Source/UI/Shop/UIMerchantItemPurchaseWnd.h, Source/UI/Shop/UIMerchantItemShopWnd.h, Source/UI/Shop/UIMerchantItemWnd.h, Source/UI/Shop/UIMerchantMirrorItemWnd.h, Source/UI/Shop/UISerachStoreInfoWnd.h, Source/UI/Shop/UInCash_CallWnd.h, Source/UI/Skill/UIDebuffRemoveWnd.h, Source/UI/Skill/UIGraffiStrboxWnd.h, Source/UI/Skill/UINewSkillListWnd.h, Source/UI/SkillDelayInfo/SkillDelayInfo.h, Source/UI/Status/UIBasicInfoWnd.h, Source/UI/Status/UIHomunInfoWnd.h, Source/UI/Status/UIJobListWnd.h, Source/UI/Status/UIMerInfoWnd.h, Source/UI/Status/UIPetEvolutionWnd.h, Source/UI/Status/UIPetInfoWnd.h, Source/UI/Status/UIPetTamingDeceiveWnd.h, Source/UI/Status/UIRebirthWnd.h, Source/UI/StylingShop/UIStylingShopWnd.h, Source/UI/Text/TextTags.h, Source/UI/Text/UIBroadcastBalloon.h, Source/UI/Text/UIRoundBoxTooltipWnd.h, Source/UI/Window/FrameSkin.h, Source/UI/Window/UIBasicCtrl.h, Source/UI/Window/UIControl.h, Source/UI/Window/UIWindowMgr.inl, Source/Utility/Cipher/EncryptedName.h, Source/Utility/Hash/CRC32.h, Source/Utility/Hash/GGHash.h, Source/Utility/Hash/GGHashMgr.h, Source/Utility/Hash/Md5State.h, Source/Utility/Hash/SHA3.h, Source/Utility/Hash/XxHash3.h, Source/Utility/Text/GuidParse.h, Source/Utility/Text/Tokenizer.h, Source/Utility/Zlib.h, Source/ActorPickNode.h, Source/Client/ModeFade.h, Source/Client/ModeFadeOut.h, Source/Client/ModeScreenshot.h, Source/Client/Registry.h, Source/Client/Replay.h, Source/Client/ReplayRecordOption.h, Source/Client/Session.h, Source/Client/Timer.h, Source/Network/ActorNamePacket.h, Source/Network/ClientKeepalive.h, Source/Network/ClientOptionPacket.h, Source/Network/ExecutableDigestPacket.h, Source/Network/GameTickPacket.h, Source/Render/ActionSpriteDrawing.h, Source/Render/AuxiliarySubmission.h, Source/Render/BitmapDrawing.h, Source/Render/BlendColor.h, Source/Render/DeviceSelection.h, Source/Render/Direct3DErrors.h, Source/Render/DisplayMode.h, Source/Render/RenderAdapter.h, Source/Render/RenderBackends.h, Source/Render/RendererDX7.h, Source/Render/ScreenGeometry.h, Source/Render/ScreenRectangle.h, Source/Render/SpriteGeometry.h, Source/Render/SpriteQuad.h, Source/Render/TextureQuad.h, Source/Render/TextureStageModes.h, Source/Resource/BinkRuntime.h, Source/Resource/EZeffectResource.h, Source/Resource/EmblemResource.h, Source/Resource/GifLzw.h, Source/Resource/GifResource.h, Source/Resource/ImfResource.h, Source/Resource/PaletteResource.h, Source/Resource/RmaResource.h, Source/Resource/SkinPalette.h, Source/Resource/TextureNames.h, Source/Resource/XmlNode.h, Source/UI/Buttons/UICashEmotionSprBtn.h, Source/UI/Buttons/UIDescriptRace.h, Source/UI/Buttons/UIItemMoveInfo.h, Source/UI/Buttons/UIJobSlotButton.h, Source/UI/Buttons/UIReplayButton.h, Source/UI/Dialogs/UIChooseWarpWnd.h, Source/UI/Dialogs/UIEmailAddressWnd.h, Source/UI/Dialogs/UIGraffiStrboxWnd.h, Source/UI/Dialogs/UIMemorialDunWnd.h, Source/UI/Dialogs/UIMiniMapWnd.h, Source/UI/Dialogs/UIMinimapZoomWnd.h, Source/UI/Dialogs/UINotifyQuestWnd.h, Source/UI/Dialogs/UIPasswordWnd.h, Source/UI/Dialogs/UIPetTamingDeceiveWnd.h, Source/UI/Dialogs/UISecondPasswordEditWnd.h, Source/UI/Dialogs/UISelectCartWnd.h, Source/UI/Dialogs/UIWaitDBSaveWnd.h, Source/UI/FrameSkin.h, Source/UI/Item/UIEquipmentPropertiesWnd.h, Source/UI/Item/UIItemBaseWnd.h, Source/UI/Item/UIItemPurchaseWnd.h, Source/UI/Item/UIItemSellWnd.h, Source/UI/Item/UIItemSellWnd2.h, Source/UI/Item/UIItemShopWnd.h, Source/UI/Item/UIItemShopWnd2.h, Source/UI/Item/UIItemStoreFindWnd.h, Source/UI/Item/UIItemStoreSubWnd.h, Source/UI/Item/UIItemStoreWnd.h, Source/UI/Item/UIItemWnd.h, Source/UI/Item/UIMerchantItemLogWnd.h, Source/UI/Item/UIParaItemShopWnd.h, Source/UI/Lists/UIItemStoreComboBox.h, Source/UI/Lists/UIListBoxNavi.h, Source/UI/Lists/UIListBoxNaviSearch.h, Source/UI/Lists/UIPackageBoxNameList.h, Source/UI/Lists/UIReplayListBox.h, Source/UI/Lists/UIScrollBarNavi.h, Source/UI/MiniPartyGrid.h, Source/UI/MiniPartyPlacement.h, Source/UI/PriceCommission.h, Source/UI/Text/NavigationLink.h, Source/UI/Text/UIAchWnd.h, Source/UI/TextTags.h, Source/UI/UIBarGraph.h, Source/UI/UIBartermarketWnd.h, Source/UI/UIBasicCtrl.h, Source/UI/UIBroadcastBalloon.h, Source/UI/UICaptchaPreviewWnd.h, Source/UI/UICaptchaRegisterWnd.h, Source/UI/UIChangeMaterialWnd.h, Source/UI/UICheckAttendanceWnd.h, Source/UI/UIGradeEnchantWnd.h, Source/UI/UIHotkeyGuideWnd.h, Source/UI/UIIngredientInfoWnd.h, Source/UI/UIItemReformWnd.h, Source/UI/UILapineScrollBar.h, Source/UI/UILapineUpgradeBoxWnd.h, Source/UI/UIMacroBlackListCheckWnd.h, Source/UI/UIMacroDetectorWnd.h, Source/UI/UIMacroReport.h, Source/UI/UIMacroUserInfoWnd.h, Source/UI/UIPreviewEquipWnd.h, Source/UI/UIRefiningWnd.h, Source/UI/UIReputeWnd.h, Source/UI/UIRoundBoxTooltipWnd.h, Source/UI/UIScrollWnd.h, Source/UI/UISlotBitmap.h, Source/UI/UIStaticBitmap.h, Source/UI/UIStaticItem.h, Source/UI/Window/FuncDrawWNDChar.h, Source/UI/Window/MiniPartyWndAreaMgr.h, Source/UI/Window/UIAccountLimitedToolWnd.h, Source/UI/Window/UIBalloonOpenBtn.h, Source/UI/Window/UIBank_NewWnd.h, Source/UI/Window/UIBasicInfoWnd.h, Source/UI/Window/UIBattleMsgOptionWnd.h, Source/UI/Window/UIChangeNameWnd.h, Source/UI/Window/UIChatRoomWnd.h, Source/UI/Window/UICntWnd.h, Source/UI/Window/UICollectionSystemWnd.h, Source/UI/Window/UIDebuffRemoveWnd.h, Source/UI/Window/UIEmblemWnd.h, Source/UI/Window/UIEscOptionWnd.h, Source/UI/Window/UIHomunInfoWnd.h, Source/UI/Window/UIHotKeyWnd.h, Source/UI/Window/UIJobListWnd.h, Source/UI/Window/UILoginOTPWnd.h, Source/UI/Window/UILoginWnd.h, Source/UI/Window/UIMakeCharWnd.h, Source/UI/Window/UIMerInfoWnd.h, Source/UI/Window/UIMessageBox.h, Source/UI/Window/UIMessageBoxAutoreturn.h, Source/UI/Window/UIMileageWnd.h, Source/UI/Window/UIMiniBtnWnd.h, Source/UI/Window/UIMonsterDisplayWnd.h, Source/UI/Window/UIMonsterInfoWnd.h, Source/UI/Window/UINavigationHelpWnd.h, Source/UI/Window/UINavigationWnd.h, Source/UI/Window/UINewMakeCharWnd.h, Source/UI/Window/UINewSelectCharWnd.h, Source/UI/Window/UINewSkillListWnd.h, Source/UI/Window/UINormalMB.h, Source/UI/Window/UINoteWnd.h, Source/UI/Window/UINoticeWnd.h, Source/UI/Window/UIOpenMailBoxWnd.h, Source/UI/Window/UIOpenRoulletteWnd.h, Source/UI/Window/UIPartyBookingHelpWnd.h, Source/UI/Window/UIPayConfirmWnd.h, Source/UI/Window/UIPetEvolutionWnd.h, Source/UI/Window/UIPetInfoWnd.h, Source/UI/Window/UIRPImageWnd.h, Source/UI/Window/UIRPImageWnd2.h, Source/UI/Window/UIRebirthWnd.h, Source/UI/Window/UIReplayControlWnd.h, Source/UI/Window/UIReplayRECControlWnd.h, Source/UI/Window/UIRoMapWnd.h, Source/UI/Window/UIRodexContentsWnd.h, Source/UI/Window/UIRoulletteWnd.h, Source/UI/Window/UISecondCostumeWnd.h, Source/UI/Window/UISeekPartyListWnd.h, Source/UI/Window/UISeekPartyMBWnd.h, Source/UI/Window/UISeekPartyWnd.h, Source/UI/Window/UISelCharForUServerWnd.h, Source/UI/Window/UISelectReplayDataWnd.h, Source/UI/Window/UISelectServerWnd.h, Source/UI/Window/UISerachStoreInfoWnd.h, Source/UI/Window/UIShowWarpWnd.h, Source/UI/Window/UITalkboxTrapInputWnd.h, Source/UI/Window/UITransMenuWnd.h, Source/UI/Window/UIVideoWnd.h, Source/UI/Window/UIViewCameraInfoWnd.h, Source/UI/Window/UIWindowCallBtnWnd.h, Source/UI/Window/UIWordDisplayWnd.h, Source/Utility/CRC32.h, Source/Utility/Compression/Zlib.h, Source/Utility/EncryptedName.h, Source/Utility/FileSignatureVerifier.h, Source/Utility/GGHash.h, Source/Utility/GGHashMgr.h, Source/Utility/GuidParse.h, Source/Utility/JsonCppLoader.h, Source/Utility/Md5State.h, Source/Utility/NFileLog.h, Source/Utility/NIPAddr.h, Source/Utility/ProcessSecurity.h, Source/Utility/RegistryKey.h, Source/Utility/SHA3.h, Source/Utility/Tokenizer.h, Source/Utility/XxHash3.h. Adds to the build: Source/Client/Application/ClientOptions.cpp, Source/Client/Application/Registry.cpp, Source/Client/Application/RegistryKey.cpp, Source/Client/Application/Timer.cpp, Source/Client/Mode/EntityInit.cpp, Source/Client/Mode/ModeBaseEvents.cpp, Source/Client/Mode/ModeCursorDrawing.cpp, Source/Client/Mode/ModeFade.cpp, Source/Client/Mode/ModeFadeOut.cpp, Source/Client/Mode/ModeScreenshot.cpp, Source/Client/Mode/ModeTransitions.cpp, Source/Client/Replay/Replay.cpp, Source/Client/Replay/ReplayControl.cpp, Source/Client/Replay/ReplayPacketRecorder.cpp, Source/Client/Session/Session.cpp, Source/Client/Session/SessionAchievements.cpp, Source/Client/Session/SessionParty.cpp, Source/Client/Session/SessionPredicates.cpp, Source/Client/Session/SessionState.cpp, Source/Contents/Actors/ActorPickNode.cpp, Source/File/NFileLog.cpp, Source/Network/NIPAddr.cpp, Source/Network/Packets/ActorNamePacket.cpp, Source/Network/Packets/ClientKeepalive.cpp, Source/Network/Packets/ClientOptionPacket.cpp, Source/Network/Packets/ExecutableDigestPacket.cpp, Source/Network/Packets/GameTickPacket.cpp, Source/Render/DX7/AlphaQueuesDX7.cpp, Source/Render/DX7/AuxiliaryQueuesDX7.cpp, Source/Render/DX7/OpaqueQueuesDX7.cpp, Source/Render/DX7/RendererDX7.cpp, Source/Render/DX9/DeviceCapabilitiesDX9.cpp, Source/Render/Device/DeviceSelection.cpp, Source/Render/Device/Direct3DErrors.cpp, Source/Render/Device/DisplayMode.cpp, Source/Render/Device/RenderAdapter.cpp, Source/Render/Device/RenderBackends.cpp, Source/Render/Drawing/ActionSpriteDrawing.cpp, Source/Render/Drawing/BitmapDrawing.cpp, Source/Render/Drawing/BlendColor.cpp, Source/Render/Drawing/SpriteGeometry.cpp, Source/Render/Primitives/AlphaRectangle.cpp, Source/Render/Primitives/AuxiliarySubmission.cpp, Source/Render/Primitives/SpriteQuad.cpp, Source/Render/Primitives/TextureQuad.cpp, Source/Render/Primitives/UIRPDataDrawing.cpp, Source/Render/Projection/ScreenGeometry.cpp, Source/Render/Projection/ScreenRectangle.cpp, Source/Render/Projection/ViewportProjection.cpp, Source/Resource/Bitmap/EmblemResource.cpp, Source/Resource/Bitmap/GifLzw.cpp, Source/Resource/Bitmap/GifResource.cpp, Source/Resource/Bitmap/PaletteResource.cpp, Source/Resource/Bitmap/SkinPalette.cpp, Source/Resource/Bitmap/TextureNames.cpp, Source/Resource/Effects/EZeffectResource.cpp, Source/Resource/Json/JsonCppLoader.cpp, Source/Resource/Models/RmaResource.cpp, Source/Resource/Sprites/ImfLayerIndex.cpp, Source/Resource/Sprites/ImfResource.cpp, Source/Resource/Xml/XmlNode.cpp, Source/Resource/Xml/XmlParsing.cpp, Source/Security/FileSignatureVerifier.cpp, Source/Security/ProcessSecurity.cpp, Source/Security/UnknownA68.cpp, Source/UI/Achievement/UIAchWnd.cpp, Source/UI/Buttons/UIBalloonOpenBtn.cpp, Source/UI/Buttons/UIMiniBtnWnd.cpp, Source/UI/Buttons/UISlotBitmap.cpp, Source/UI/Buttons/UIStaticBitmap.cpp, Source/UI/Buttons/UIStaticItem.cpp, Source/UI/CashShop/UIMileageWnd.cpp, Source/UI/Chat/UIZeroChatWnd.cpp, Source/UI/Dialogs/UIAccountLimitedToolWnd.cpp, Source/UI/Dialogs/UILocaleTextWnd.cpp, Source/UI/Dialogs/UIMessageBox.cpp, Source/UI/Dialogs/UINormalMB.cpp, Source/UI/Dialogs/UINoteWnd.cpp, Source/UI/Dialogs/UINoticeWnd.cpp, Source/UI/Dialogs/UIRPImageWnd.cpp, Source/UI/Dialogs/UIRPImageWnd2.cpp, Source/UI/Dialogs/UITransMenuWnd.cpp, Source/UI/Dialogs/UIVideoWnd.cpp, Source/UI/Dialogs/UIWordDisplayWnd.cpp, Source/UI/Events/UICheckAttendanceWnd.cpp, Source/UI/Events/UIOpenRoulletteWnd.cpp, Source/UI/Events/UIRoulletteWnd.cpp, Source/UI/GameSettings/UIBattleMsgOptionWnd.cpp, Source/UI/GameSettings/UIEscOptionWnd.cpp, Source/UI/GameSettings/UIHotKeyWnd.cpp, Source/UI/GameSettings/UIHotkeyGuideWnd.cpp, Source/UI/GameSettings/UIViewCameraInfoWnd.cpp, Source/UI/Gauges/UIBarGraph.cpp, Source/UI/Guild/UIEmblemWnd.cpp, Source/UI/Items/UIChangeMaterialWnd.cpp, Source/UI/Items/UICollectionSystemWnd.cpp, Source/UI/Items/UIEquipmentPropertiesWnd.cpp, Source/UI/Items/UIGradeEnchantWnd.cpp, Source/UI/Items/UIItemMoveInfo.cpp, Source/UI/Items/UIItemReformWnd.cpp, Source/UI/Items/UIItemStoreComboBox.cpp, Source/UI/Items/UIItemStoreWnd.cpp, Source/UI/Items/UILapineBoxWnd.cpp, Source/UI/Items/UILapineScrollBar.cpp, Source/UI/Items/UILapineUpgradeBoxWnd.cpp, Source/UI/Items/UIMerchantItemLogWnd.cpp, Source/UI/Items/UIParaItemShopWnd.cpp, Source/UI/Items/UIPreviewEquipWnd.cpp, Source/UI/Items/UIRefiningWnd.cpp, Source/UI/Items/UISecondCostumeWnd.cpp, Source/UI/Lists/UIScrollWnd.cpp, Source/UI/Login/FuncDrawWNDChar.cpp, Source/UI/Login/UIChangeNameWnd.cpp, Source/UI/Login/UIDescriptRace.cpp, Source/UI/Login/UIEmailAddressWnd.cpp, Source/UI/Login/UILoginWnd.cpp, Source/UI/Login/UINewMakeCharWnd.cpp, Source/UI/Login/UINewSelectCharWnd.cpp, Source/UI/Login/UIPasswordWnd.cpp, Source/UI/Login/UISelCharForUServerWnd.cpp, Source/UI/Login/UIWaitDBSaveWnd.cpp, Source/UI/Macro/UICaptchaPreviewWnd.cpp, Source/UI/Macro/UICaptchaRegisterWnd.cpp, Source/UI/Macro/UIMacroBlackListCheckWnd.cpp, Source/UI/Macro/UIMacroDetectorWnd.cpp, Source/UI/Macro/UIMacroReport.cpp, Source/UI/Macro/UIMacroUserInfoWnd.cpp, Source/UI/Navigation/NavigationLink.cpp, Source/UI/Navigation/UIListBoxNavi.cpp, Source/UI/Navigation/UIMinimapZoomWnd.cpp, Source/UI/Navigation/UINavigationHelpWnd.cpp, Source/UI/Navigation/UINavigationWnd.cpp, Source/UI/Navigation/UIRoMapWnd.cpp, Source/UI/Navigation/UIScrollBarNavi.cpp, Source/UI/Navigation/UIShowWarpWnd.cpp, Source/UI/Party/MiniPartyGrid.cpp, Source/UI/Party/MiniPartyManager.cpp, Source/UI/Party/MiniPartyPlacement.cpp, Source/UI/Party/MiniPartyUsableArea.cpp, Source/UI/Party/UIJobSlotButton.cpp, Source/UI/Party/UIPartyBookingHelpWnd.cpp, Source/UI/Party/UISeekPartyListWnd.cpp, Source/UI/Party/UISeekPartyMBWnd.cpp, Source/UI/Party/UISeekPartyWnd.cpp, Source/UI/Repute/UIReputeWnd.cpp, Source/UI/Rodex/UIOpenMailBoxWnd.cpp, Source/UI/Rodex/UIRodexContentsWnd.cpp, Source/UI/SelectPackageItemBox/UIPackageBoxNameList.cpp, Source/UI/Shop/PriceCommission.cpp, Source/UI/Shop/UIBartermarketWnd.cpp, Source/UI/Shop/UISerachStoreInfoWnd.cpp, Source/UI/Skill/UIDebuffRemoveWnd.cpp, Source/UI/Skill/UIGraffiStrboxWnd.cpp, Source/UI/Skill/UINewSkillListWnd.cpp, Source/UI/Skill/UINewSkillListWndHitTest.cpp, Source/UI/Status/UIBasicInfoWnd.cpp, Source/UI/Status/UIJobListWnd.cpp, Source/UI/Status/UIPetEvolutionWnd.cpp, Source/UI/Status/UIRebirthWnd.cpp, Source/UI/Text/TextTagExtraction.cpp, Source/UI/Text/TextTagRegistry.cpp, Source/UI/Text/UIBroadcastBalloon.cpp, Source/UI/Text/UIRoundBoxTooltipWnd.cpp, Source/UI/Window/FrameSkin.cpp, Source/UI/Window/UIBasicCtrl.cpp, Source/UI/Window/WindowBackground.cpp, Source/UI/Window/WindowLowerBorder.cpp, Source/UI/Window/WindowOverlay.cpp, Source/UI/Window/WindowSprite.cpp, Source/UI/Window/WindowTitlebar.cpp, Source/Utility/BoolStubs.cpp, Source/Utility/Hash/CRC32.cpp, Source/Utility/Hash/GGHash.cpp, Source/Utility/Hash/GGHashMgr.cpp, Source/Utility/Hash/Md5State.cpp, Source/Utility/Hash/SHA3.cpp, Source/Utility/Hash/XxHash3.cpp, Source/Utility/Lexicon/LexiconTrie.cpp, Source/Utility/Text/GuidParse.cpp, Source/Utility/Text/Tokenizer.cpp Deletes: Source/ActorPickNode.cpp, Source/ActorPickNode.h, Source/Archive/UnknownA68.cpp, Source/Client/ClientOptions.cpp, Source/Client/ModeBaseEvents.cpp, Source/Client/ModeCursorDrawing.cpp, Source/Client/ModeFade.cpp, Source/Client/ModeFade.h, Source/Client/ModeFadeOut.cpp, Source/Client/ModeFadeOut.h, Source/Client/ModeScreenshot.cpp, Source/Client/ModeScreenshot.h, Source/Client/ModeTransitions.cpp, Source/Client/Registry.cpp, Source/Client/Registry.h, Source/Client/Replay.cpp, Source/Client/Replay.h, Source/Client/ReplayControl.cpp, Source/Client/ReplayPacketRecorder.cpp, Source/Client/ReplayRecordOption.h, Source/Client/Session.cpp, Source/Client/Session.h, Source/Client/SessionAchievements.cpp, Source/Client/SessionParty.cpp, Source/Client/SessionPredicates.cpp, Source/Client/SessionState.cpp, Source/Client/Timer.cpp, Source/Client/Timer.h, Source/EntityInit.cpp, Source/Interface/BoolStubs.cpp, Source/LexiconTrie.cpp, Source/Network/ActorNamePacket.cpp, Source/Network/ActorNamePacket.h, Source/Network/ClientKeepalive.cpp, Source/Network/ClientKeepalive.h, Source/Network/ClientOptionPacket.cpp, Source/Network/ClientOptionPacket.h, Source/Network/ExecutableDigestPacket.cpp, Source/Network/ExecutableDigestPacket.h, Source/Network/GameTickPacket.cpp, Source/Network/GameTickPacket.h, Source/Render/ActionSpriteDrawing.cpp, Source/Render/ActionSpriteDrawing.h, Source/Render/AlphaQueuesDX7.cpp, Source/Render/AlphaRectangle.cpp, Source/Render/AuxiliaryQueuesDX7.cpp, Source/Render/AuxiliarySubmission.cpp, Source/Render/AuxiliarySubmission.h, Source/Render/BitmapDrawing.cpp, Source/Render/BitmapDrawing.h, Source/Render/BlendColor.cpp, Source/Render/BlendColor.h, Source/Render/DeviceCapabilitiesDX9.cpp, Source/Render/DeviceSelection.cpp, Source/Render/DeviceSelection.h, Source/Render/Direct3DErrors.cpp, Source/Render/Direct3DErrors.h, Source/Render/DisplayMode.cpp, Source/Render/DisplayMode.h, Source/Render/OpaqueQueuesDX7.cpp, Source/Render/RenderAdapter.cpp, Source/Render/RenderAdapter.h, Source/Render/RenderBackends.cpp, Source/Render/RenderBackends.h, Source/Render/RendererDX7.cpp, Source/Render/RendererDX7.h, Source/Render/ScreenGeometry.cpp, Source/Render/ScreenGeometry.h, Source/Render/ScreenRectangle.cpp, Source/Render/ScreenRectangle.h, Source/Render/SpriteGeometry.cpp, Source/Render/SpriteGeometry.h, Source/Render/SpriteQuad.cpp, Source/Render/SpriteQuad.h, Source/Render/TextureQuad.cpp, Source/Render/TextureQuad.h, Source/Render/TextureStageModes.h, Source/Render/UIRPDataDrawing.cpp, Source/Render/ViewportProjection.cpp, Source/Resource/BinkRuntime.h, Source/Resource/EZeffectResource.cpp, Source/Resource/EZeffectResource.h, Source/Resource/EmblemResource.cpp, Source/Resource/EmblemResource.h, Source/Resource/GifLzw.cpp, Source/Resource/GifLzw.h, Source/Resource/GifResource.cpp, Source/Resource/GifResource.h, Source/Resource/ImfLayerIndex.cpp, Source/Resource/ImfResource.cpp, Source/Resource/ImfResource.h, Source/Resource/PaletteResource.cpp, Source/Resource/PaletteResource.h, Source/Resource/RmaResource.cpp, Source/Resource/RmaResource.h, Source/Resource/SkinPalette.cpp, Source/Resource/SkinPalette.h, Source/Resource/TextureNames.cpp, Source/Resource/TextureNames.h, Source/Resource/XmlNode.cpp, Source/Resource/XmlNode.h, Source/Resource/XmlParsing.cpp, Source/UI/Buttons/UICashEmotionSprBtn.h, Source/UI/Buttons/UIDescriptRace.cpp, Source/UI/Buttons/UIDescriptRace.h, Source/UI/Buttons/UIItemMoveInfo.cpp, Source/UI/Buttons/UIItemMoveInfo.h, Source/UI/Buttons/UIJobSlotButton.cpp, Source/UI/Buttons/UIJobSlotButton.h, Source/UI/Buttons/UIReplayButton.h, Source/UI/Dialogs/UIChooseWarpWnd.h, Source/UI/Dialogs/UIEmailAddressWnd.cpp, Source/UI/Dialogs/UIEmailAddressWnd.h, Source/UI/Dialogs/UIGraffiStrboxWnd.cpp, Source/UI/Dialogs/UIGraffiStrboxWnd.h, Source/UI/Dialogs/UIMemorialDunWnd.h, Source/UI/Dialogs/UIMiniMapWnd.h, Source/UI/Dialogs/UIMinimapZoomWnd.cpp, Source/UI/Dialogs/UIMinimapZoomWnd.h, Source/UI/Dialogs/UINotifyQuestWnd.h, Source/UI/Dialogs/UIPasswordWnd.cpp, Source/UI/Dialogs/UIPasswordWnd.h, Source/UI/Dialogs/UIPetTamingDeceiveWnd.h, Source/UI/Dialogs/UISecondPasswordEditWnd.h, Source/UI/Dialogs/UISelectCartWnd.h, Source/UI/Dialogs/UIWaitDBSaveWnd.cpp, Source/UI/Dialogs/UIWaitDBSaveWnd.h, Source/UI/FrameSkin.cpp, Source/UI/FrameSkin.h, Source/UI/Item/UIEquipmentPropertiesWnd.cpp, Source/UI/Item/UIEquipmentPropertiesWnd.h, Source/UI/Item/UIItemBaseWnd.h, Source/UI/Item/UIItemPurchaseWnd.h, Source/UI/Item/UIItemSellWnd.h, Source/UI/Item/UIItemSellWnd2.h, Source/UI/Item/UIItemShopWnd.h, Source/UI/Item/UIItemShopWnd2.h, Source/UI/Item/UIItemStoreFindWnd.h, Source/UI/Item/UIItemStoreSubWnd.h, Source/UI/Item/UIItemStoreWnd.cpp, Source/UI/Item/UIItemStoreWnd.h, Source/UI/Item/UIItemWnd.h, Source/UI/Item/UIMerchantItemLogWnd.cpp, Source/UI/Item/UIMerchantItemLogWnd.h, Source/UI/Item/UIParaItemShopWnd.cpp, Source/UI/Item/UIParaItemShopWnd.h, Source/UI/Lists/UIItemStoreComboBox.cpp, Source/UI/Lists/UIItemStoreComboBox.h, Source/UI/Lists/UIListBoxNavi.cpp, Source/UI/Lists/UIListBoxNavi.h, Source/UI/Lists/UIListBoxNaviSearch.h, Source/UI/Lists/UIPackageBoxNameList.cpp, Source/UI/Lists/UIPackageBoxNameList.h, Source/UI/Lists/UIReplayListBox.h, Source/UI/Lists/UIScrollBarNavi.cpp, Source/UI/Lists/UIScrollBarNavi.h, Source/UI/MiniPartyGrid.cpp, Source/UI/MiniPartyGrid.h, Source/UI/MiniPartyManager.cpp, Source/UI/MiniPartyPlacement.cpp, Source/UI/MiniPartyPlacement.h, Source/UI/MiniPartyUsableArea.cpp, Source/UI/PriceCommission.cpp, Source/UI/PriceCommission.h, Source/UI/Text/NavigationLink.cpp, Source/UI/Text/NavigationLink.h, Source/UI/Text/UIAchWnd.cpp, Source/UI/Text/UIAchWnd.h, Source/UI/TextTagExtraction.cpp, Source/UI/TextTagRegistry.cpp, Source/UI/TextTags.h, Source/UI/UIBarGraph.cpp, Source/UI/UIBarGraph.h, Source/UI/UIBartermarketWnd.cpp, Source/UI/UIBartermarketWnd.h, Source/UI/UIBasicCtrl.cpp, Source/UI/UIBasicCtrl.h, Source/UI/UIBroadcastBalloon.cpp, Source/UI/UIBroadcastBalloon.h, Source/UI/UICaptchaPreviewWnd.cpp, Source/UI/UICaptchaPreviewWnd.h, Source/UI/UICaptchaRegisterWnd.cpp, Source/UI/UICaptchaRegisterWnd.h, Source/UI/UIChangeMaterialWnd.cpp, Source/UI/UIChangeMaterialWnd.h, Source/UI/UICheckAttendanceWnd.cpp, Source/UI/UICheckAttendanceWnd.h, Source/UI/UIGradeEnchantWnd.cpp, Source/UI/UIGradeEnchantWnd.h, Source/UI/UIHotkeyGuideWnd.cpp, Source/UI/UIHotkeyGuideWnd.h, Source/UI/UIIngredientInfoWnd.h, Source/UI/UIItemReformWnd.cpp, Source/UI/UIItemReformWnd.h, Source/UI/UILapineBoxWnd.cpp, Source/UI/UILapineScrollBar.cpp, Source/UI/UILapineScrollBar.h, Source/UI/UILapineUpgradeBoxWnd.cpp, Source/UI/UILapineUpgradeBoxWnd.h, Source/UI/UIMacroBlackListCheckWnd.cpp, Source/UI/UIMacroBlackListCheckWnd.h, Source/UI/UIMacroDetectorWnd.cpp, Source/UI/UIMacroDetectorWnd.h, Source/UI/UIMacroReport.cpp, Source/UI/UIMacroReport.h, Source/UI/UIMacroUserInfoWnd.cpp, Source/UI/UIMacroUserInfoWnd.h, Source/UI/UIPreviewEquipWnd.cpp, Source/UI/UIPreviewEquipWnd.h, Source/UI/UIRefiningWnd.cpp, Source/UI/UIRefiningWnd.h, Source/UI/UIReputeWnd.cpp, Source/UI/UIReputeWnd.h, Source/UI/UIRoundBoxTooltipWnd.cpp, Source/UI/UIRoundBoxTooltipWnd.h, Source/UI/UIScrollWnd.cpp, Source/UI/UIScrollWnd.h, Source/UI/UISlotBitmap.cpp, Source/UI/UISlotBitmap.h, Source/UI/UIStaticBitmap.cpp, Source/UI/UIStaticBitmap.h, Source/UI/UIStaticItem.cpp, Source/UI/UIStaticItem.h, Source/UI/Window/FuncDrawWNDChar.cpp, Source/UI/Window/FuncDrawWNDChar.h, Source/UI/Window/MiniPartyWndAreaMgr.h, Source/UI/Window/UIAccountLimitedToolWnd.cpp, Source/UI/Window/UIAccountLimitedToolWnd.h, Source/UI/Window/UIBalloonOpenBtn.cpp, Source/UI/Window/UIBalloonOpenBtn.h, Source/UI/Window/UIBank_NewWnd.h, Source/UI/Window/UIBasicInfoWnd.cpp, Source/UI/Window/UIBasicInfoWnd.h, Source/UI/Window/UIBattleMsgOptionWnd.cpp, Source/UI/Window/UIBattleMsgOptionWnd.h, Source/UI/Window/UIChangeNameWnd.cpp, Source/UI/Window/UIChangeNameWnd.h, Source/UI/Window/UIChatRoomWnd.h, Source/UI/Window/UICntWnd.h, Source/UI/Window/UICollectionSystemWnd.cpp, Source/UI/Window/UICollectionSystemWnd.h, Source/UI/Window/UIDebuffRemoveWnd.cpp, Source/UI/Window/UIDebuffRemoveWnd.h, Source/UI/Window/UIEmblemWnd.cpp, Source/UI/Window/UIEmblemWnd.h, Source/UI/Window/UIEscOptionWnd.cpp, Source/UI/Window/UIEscOptionWnd.h, Source/UI/Window/UIHomunInfoWnd.h, Source/UI/Window/UIHotKeyWnd.cpp, Source/UI/Window/UIHotKeyWnd.h, Source/UI/Window/UIJobListWnd.cpp, Source/UI/Window/UIJobListWnd.h, Source/UI/Window/UILocaleTextWnd.cpp, Source/UI/Window/UILoginOTPWnd.h, Source/UI/Window/UILoginWnd.cpp, Source/UI/Window/UILoginWnd.h, Source/UI/Window/UIMakeCharWnd.h, Source/UI/Window/UIMerInfoWnd.h, Source/UI/Window/UIMessageBox.cpp, Source/UI/Window/UIMessageBox.h, Source/UI/Window/UIMessageBoxAutoreturn.h, Source/UI/Window/UIMileageWnd.cpp, Source/UI/Window/UIMileageWnd.h, Source/UI/Window/UIMiniBtnWnd.cpp, Source/UI/Window/UIMiniBtnWnd.h, Source/UI/Window/UIMonsterDisplayWnd.h, Source/UI/Window/UIMonsterInfoWnd.h, Source/UI/Window/UINavigationHelpWnd.cpp, Source/UI/Window/UINavigationHelpWnd.h, Source/UI/Window/UINavigationWnd.cpp, Source/UI/Window/UINavigationWnd.h, Source/UI/Window/UINewMakeCharWnd.cpp, Source/UI/Window/UINewMakeCharWnd.h, Source/UI/Window/UINewSelectCharWnd.cpp, Source/UI/Window/UINewSelectCharWnd.h, Source/UI/Window/UINewSkillListWnd.cpp, Source/UI/Window/UINewSkillListWnd.h, Source/UI/Window/UINewSkillListWndHitTest.cpp, Source/UI/Window/UINormalMB.cpp, Source/UI/Window/UINormalMB.h, Source/UI/Window/UINoteWnd.cpp, Source/UI/Window/UINoteWnd.h, Source/UI/Window/UINoticeWnd.cpp, Source/UI/Window/UINoticeWnd.h, Source/UI/Window/UIOpenMailBoxWnd.cpp, Source/UI/Window/UIOpenMailBoxWnd.h, Source/UI/Window/UIOpenRoulletteWnd.cpp, Source/UI/Window/UIOpenRoulletteWnd.h, Source/UI/Window/UIPartyBookingHelpWnd.cpp, Source/UI/Window/UIPartyBookingHelpWnd.h, Source/UI/Window/UIPayConfirmWnd.h, Source/UI/Window/UIPetEvolutionWnd.cpp, Source/UI/Window/UIPetEvolutionWnd.h, Source/UI/Window/UIPetInfoWnd.h, Source/UI/Window/UIRPImageWnd.cpp, Source/UI/Window/UIRPImageWnd.h, Source/UI/Window/UIRPImageWnd2.cpp, Source/UI/Window/UIRPImageWnd2.h, Source/UI/Window/UIRebirthWnd.cpp, Source/UI/Window/UIRebirthWnd.h, Source/UI/Window/UIReplayControlWnd.h, Source/UI/Window/UIReplayRECControlWnd.h, Source/UI/Window/UIRoMapWnd.cpp, Source/UI/Window/UIRoMapWnd.h, Source/UI/Window/UIRodexContentsWnd.cpp, Source/UI/Window/UIRodexContentsWnd.h, Source/UI/Window/UIRoulletteWnd.cpp, Source/UI/Window/UIRoulletteWnd.h, Source/UI/Window/UISecondCostumeWnd.cpp, Source/UI/Window/UISecondCostumeWnd.h, Source/UI/Window/UISeekPartyListWnd.cpp, Source/UI/Window/UISeekPartyListWnd.h, Source/UI/Window/UISeekPartyMBWnd.cpp, Source/UI/Window/UISeekPartyMBWnd.h, Source/UI/Window/UISeekPartyWnd.cpp, Source/UI/Window/UISeekPartyWnd.h, Source/UI/Window/UISelCharForUServerWnd.cpp, Source/UI/Window/UISelCharForUServerWnd.h, Source/UI/Window/UISelectReplayDataWnd.h, Source/UI/Window/UISelectServerWnd.h, Source/UI/Window/UISerachStoreInfoWnd.cpp, Source/UI/Window/UISerachStoreInfoWnd.h, Source/UI/Window/UIShowWarpWnd.cpp, Source/UI/Window/UIShowWarpWnd.h, Source/UI/Window/UITalkboxTrapInputWnd.h, Source/UI/Window/UITransMenuWnd.cpp, Source/UI/Window/UITransMenuWnd.h, Source/UI/Window/UIVideoWnd.cpp, Source/UI/Window/UIVideoWnd.h, Source/UI/Window/UIViewCameraInfoWnd.cpp, Source/UI/Window/UIViewCameraInfoWnd.h, Source/UI/Window/UIWindowCallBtnWnd.h, Source/UI/Window/UIWordDisplayWnd.cpp, Source/UI/Window/UIWordDisplayWnd.h, Source/UI/Window/UIZeroChatWnd.cpp, Source/UI/WindowBackground.cpp, Source/UI/WindowLowerBorder.cpp, Source/UI/WindowOverlay.cpp, Source/UI/WindowSprite.cpp, Source/UI/WindowTitlebar.cpp, Source/Utility/CRC32.cpp, Source/Utility/CRC32.h, Source/Utility/Compression/Zlib.h, Source/Utility/EncryptedName.h, Source/Utility/FileSignatureVerifier.cpp, Source/Utility/FileSignatureVerifier.h, Source/Utility/GGHash.cpp, Source/Utility/GGHash.h, Source/Utility/GGHashMgr.cpp, Source/Utility/GGHashMgr.h, Source/Utility/GuidParse.cpp, Source/Utility/GuidParse.h, Source/Utility/JsonCppLoader.cpp, Source/Utility/JsonCppLoader.h, Source/Utility/Md5State.cpp, Source/Utility/Md5State.h, Source/Utility/NFileLog.cpp, Source/Utility/NFileLog.h, Source/Utility/NIPAddr.cpp, Source/Utility/NIPAddr.h, Source/Utility/ProcessSecurity.cpp, Source/Utility/ProcessSecurity.h, Source/Utility/RegistryKey.cpp, Source/Utility/RegistryKey.h, Source/Utility/SHA3.cpp, Source/Utility/SHA3.h, Source/Utility/Tokenizer.cpp, Source/Utility/Tokenizer.h, Source/Utility/XxHash3.cpp, Source/Utility/XxHash3.h
796 lines
28 KiB
C++
796 lines
28 KiB
C++
#include "UI/Login/UINewSelectCharWnd.h"
|
|
#include "UI/Window/WindowId.h"
|
|
#include "UI/Window/UIEnums.h"
|
|
#include "UI/Status/UIBasicInfoWnd.h"
|
|
#include "Client/Mode/CMode.h"
|
|
#include "Client/Mode/ModeMgr.h"
|
|
|
|
#include "Client/Mode/CGameMode.h"
|
|
#include "Client/Session/Session.h"
|
|
#include "Contents/Configuration/ServiceConfiguration.h"
|
|
#include "Contents/Jobs/JobId.h"
|
|
#include "Resource/Bitmap/BitmapResource.h"
|
|
#include "Resource/ResourceMgr.h"
|
|
#include "Resource/Bitmap/SkinPalette.h"
|
|
#include "Resource/Bitmap/TextureNames.h"
|
|
#include "UI/Buttons/UIBitmapButton.h"
|
|
#include "UI/Buttons/UIButton.h"
|
|
#include "UI/Text/UIStaticText.h"
|
|
#include "UI/Gauges/UIBarGraph.h"
|
|
#include "UI/Window/UIWindowMgr.h"
|
|
#include "UI/Window/WindowBorder.h"
|
|
#include "Contents/Tables/MessageTable.h"
|
|
#include "UI/Items/UIEquipWnd.h"
|
|
#include "UI/Layout/SnapMgr.h"
|
|
#include "UI/Lists/UITabControl.h"
|
|
#include "Utility/Text/FormatString.h"
|
|
#include "Utility/Text/GroupedInteger.h"
|
|
|
|
#include "Resource/MSGSTRINGID.h"
|
|
#include <cstdint>
|
|
#include <cstdio>
|
|
#include <cstring>
|
|
#include <functional>
|
|
#include <windows.h>
|
|
|
|
namespace {
|
|
|
|
std::int64_t BaseExpCurrent() {
|
|
return *reinterpret_cast<const std::int64_t*>(&g_session.playerExperienceState[0x04]);
|
|
}
|
|
|
|
std::int64_t BaseExpMaximum() {
|
|
return *reinterpret_cast<const std::int64_t*>(&g_session.playerExperienceState[0x0C]);
|
|
}
|
|
|
|
std::int64_t JobExpCurrent() {
|
|
return *reinterpret_cast<const std::int64_t*>(&g_session.playerExperienceState[0x1C]);
|
|
}
|
|
|
|
std::int64_t JobExpMaximum() {
|
|
return *reinterpret_cast<const std::int64_t*>(&g_session.playerExperienceState[0x14]);
|
|
}
|
|
|
|
}
|
|
|
|
// OFFSET: 0x00997250
|
|
// FUNCTION: fn_13484
|
|
UIBasicInfoWnd::UIBasicInfoWnd() : UIFrameWnd(0) {
|
|
this->saved = nullptr;
|
|
this->mode = 0;
|
|
this->layoutOffset = 13;
|
|
this->collapsedHeight = 55;
|
|
this->expandedHeight = 134;
|
|
this->extendedOffset = 28;
|
|
this->extendedCollapsedHeight = 71;
|
|
this->extendedExpandedHeight = 149;
|
|
this->normalOffset = 13;
|
|
this->normalCollapsedHeight = 55;
|
|
this->normalExpandedHeight = 134;
|
|
if (g_session.IsTreeGroupThree(g_session.GetDisplayJob()) == true) {
|
|
this->layoutOffset = this->extendedOffset;
|
|
this->collapsedHeight = this->extendedCollapsedHeight;
|
|
this->expandedHeight = this->extendedExpandedHeight;
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00998190
|
|
// FUNCTION: fn_13489
|
|
bool UIBasicInfoWnd::NeedsFrameRefresh() {
|
|
return true;
|
|
}
|
|
|
|
// OFFSET: 0x009981A0
|
|
// FUNCTION: fn_13490
|
|
void UIBasicInfoWnd::SetHeight(int height) {
|
|
if (height == this->collapsedHeight) {
|
|
this->Resize(this->geometry.width, this->collapsedHeight);
|
|
this->nameText->Resize(this->geometry.width - 30, 15);
|
|
this->nameText->SetTextFitted(g_session.DecodePlayerName());
|
|
this->nameText->Move(17, 3);
|
|
this->hpBar->Move(-100, -100);
|
|
this->spBar->Move(-100, -100);
|
|
this->apBar->Move(-100, -100);
|
|
this->baseExpBar->Move(-100, -100);
|
|
this->jobExpBar->Move(-100, -100);
|
|
} else if (height == this->expandedHeight) {
|
|
this->Resize(this->geometry.width, this->expandedHeight);
|
|
this->hpBar->Move(35, 53);
|
|
this->spBar->Move(35, 68);
|
|
if (g_session.IsTreeGroupThree(g_session.GetDisplayJob()) == true) {
|
|
this->apBar->Move(35, 83);
|
|
}
|
|
this->nameText->Resize(this->geometry.width - 20, 15);
|
|
this->nameText->SetTextFitted(g_session.DecodePlayerName());
|
|
this->nameText->Move(9, 22);
|
|
|
|
if (g_session.GetMaxBaseLevel(g_session.GetDisplayJob()) == g_session.m_level) {
|
|
this->baseExpBar->Move(-200, 78);
|
|
} else {
|
|
this->baseExpBar->Move(85, this->layoutOffset + 76);
|
|
}
|
|
|
|
if (g_session.m_jobLevel >= g_session.GetMaxJobLevel(g_session.GetDisplayJob())) {
|
|
this->jobExpBar->Move(-200, 88);
|
|
} else {
|
|
this->jobExpBar->Move(85, this->layoutOffset + 88);
|
|
}
|
|
}
|
|
|
|
if (UIWindow* window = g_windowMgr.LookupWindow(WID_MENUICONWND)) {
|
|
int screenX = 0;
|
|
int screenY = 0;
|
|
this->ToScreen(screenX, screenY);
|
|
window->Move(screenX, this->geometry.height + screenY);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00999490
|
|
// FUNCTION: fn_13497
|
|
void UIBasicInfoWnd::RefreshLayout() {
|
|
if (g_session.IsTreeGroupThree(g_session.GetDisplayJob())) {
|
|
if (this->geometry.height == this->collapsedHeight) {
|
|
this->layoutOffset = this->extendedOffset;
|
|
this->collapsedHeight = this->extendedCollapsedHeight;
|
|
this->expandedHeight = this->extendedExpandedHeight;
|
|
this->SetHeight(this->extendedCollapsedHeight);
|
|
} else if (this->geometry.height == this->expandedHeight) {
|
|
this->layoutOffset = this->extendedOffset;
|
|
this->collapsedHeight = this->extendedCollapsedHeight;
|
|
this->expandedHeight = this->extendedExpandedHeight;
|
|
this->SetHeight(this->extendedExpandedHeight);
|
|
}
|
|
} else {
|
|
if (this->geometry.height == this->collapsedHeight) {
|
|
this->layoutOffset = this->normalOffset;
|
|
this->collapsedHeight = this->normalCollapsedHeight;
|
|
this->expandedHeight = this->normalExpandedHeight;
|
|
this->SetHeight(this->normalCollapsedHeight);
|
|
} else if (this->geometry.height == this->expandedHeight) {
|
|
this->layoutOffset = this->normalOffset;
|
|
this->collapsedHeight = this->normalCollapsedHeight;
|
|
this->expandedHeight = this->normalExpandedHeight;
|
|
this->SetHeight(this->normalExpandedHeight);
|
|
}
|
|
this->apBar->Move(-100, -100);
|
|
}
|
|
|
|
this->Invalidate();
|
|
}
|
|
|
|
// OFFSET: 0x00999BC0
|
|
// FUNCTION: fn_13499
|
|
void UIBasicInfoWnd::StoreInfo() {
|
|
if (this->saved) {
|
|
this->saved->height = this->geometry.height;
|
|
this->saved->width = this->geometry.width;
|
|
this->saved->x = this->geometry.x;
|
|
this->saved->y = this->geometry.y;
|
|
this->saved->mode = this->mode;
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00999360
|
|
// FUNCTION: fn_13494
|
|
void UIBasicInfoWnd::OnLBtnDown(int x, int y) {
|
|
if (y < 17) {
|
|
UIFrameWnd::OnLBtnDown(x, y);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00999330
|
|
// FUNCTION: fn_13493
|
|
void UIBasicInfoWnd::OnLBtnDblClk(int x, int y) {
|
|
if (y < 17) {
|
|
this->SendMsg(this, UM_COMMAND, ID_MINI, 0, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00999430
|
|
// FUNCTION: fn_13496
|
|
void UIBasicInfoWnd::OnMouseMove(int x, int y) {
|
|
UIFrameWnd::OnMouseMove(x, y);
|
|
if (UIWindow* window = g_windowMgr.LookupWindow(WID_MENUICONWND)) {
|
|
int screenX = 0;
|
|
int screenY = 0;
|
|
this->ToScreen(screenX, screenY);
|
|
window->Move(screenX, this->geometry.height + screenY);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00999380
|
|
// FUNCTION: fn_13495
|
|
void UIBasicInfoWnd::OnMouseHover(int x, int y) {
|
|
if (this->geometry.height != this->expandedHeight) {
|
|
return;
|
|
}
|
|
|
|
int top = this->geometry.height - 20;
|
|
if (x >= 0 && x < 100 && y >= top && y < this->geometry.height) {
|
|
char text[64];
|
|
std::sprintf(text, "Weight %d%%", g_session.m_maxWeight == 0 ? 0 : g_session.m_weight * 100 / g_session.m_maxWeight);
|
|
|
|
int screenX = 0;
|
|
int screenY = top - 19;
|
|
this->ToScreen(screenX, screenY);
|
|
g_modeMgr.gameMode->ShowTooltip(text, screenX, screenY, -1, false, true);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x009995A0
|
|
// FUNCTION: fn_13498
|
|
int UIBasicInfoWnd::SendMsg(UIWindow* sender, int message, std::intptr_t argument1, std::intptr_t argument2, std::intptr_t argument3, std::intptr_t argument4) {
|
|
switch (message) {
|
|
case UM_COMMAND:
|
|
switch (argument1) {
|
|
case 373:
|
|
if (!g_windowMgr.CloseWindow(WID_GUILDWND)) {
|
|
g_windowMgr.EnsureWindow(WID_GUILDWND);
|
|
}
|
|
break;
|
|
case ID_STATUS:
|
|
if (!g_windowMgr.CloseWindow(WID_STATUSWND)) {
|
|
g_windowMgr.EnsureWindow(WID_STATUSWND);
|
|
}
|
|
break;
|
|
case ID_OPTION:
|
|
if (!g_windowMgr.CloseWindow(WID_ESCOPTIONWND)) {
|
|
g_windowMgr.EnsureWindow(WID_ESCOPTIONWND);
|
|
}
|
|
break;
|
|
case 247:
|
|
if (!g_windowMgr.LookupWindow(WID_MERGEITEMWND) && !g_windowMgr.CloseWindow(WID_MERCHANTITEMWND) && g_session.replayPacketMode > 0) {
|
|
g_windowMgr.EnsureWindow(WID_MERCHANTITEMWND);
|
|
}
|
|
break;
|
|
case ID_ITEMS:
|
|
if (!g_windowMgr.CloseWindow(WID_ITEMWND)) {
|
|
g_windowMgr.EnsureWindow(WID_ITEMWND);
|
|
}
|
|
break;
|
|
case ID_QUEST:
|
|
if (!g_windowMgr.CloseWindow(WID_RENEWQUESTUI)) {
|
|
g_windowMgr.EnsureWindow(WID_RENEWQUESTUI);
|
|
}
|
|
break;
|
|
case ID_SKILL:
|
|
if (!g_windowMgr.CloseWindow(WID_SKILLLISTWND)) {
|
|
g_windowMgr.EnsureWindow(WID_SKILLLISTWND);
|
|
}
|
|
break;
|
|
case ID_EQUIP: {
|
|
UIEquipWnd* equip = dynamic_cast<UIEquipWnd*>(g_windowMgr.LookupWindow(WID_EQUIPWND));
|
|
if (equip) {
|
|
if (equip->m_page == 0) {
|
|
g_windowMgr.CloseWindow(WID_EQUIPWND);
|
|
return 0;
|
|
}
|
|
} else {
|
|
equip = dynamic_cast<UIEquipWnd*>(static_cast<UIFrameWnd*>(g_windowMgr.EnsureWindow(WID_EQUIPWND)));
|
|
if (!equip) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
equip->m_tabs->SelectTab(0);
|
|
break;
|
|
}
|
|
case ID_MAP:
|
|
if (!g_windowMgr.CloseWindow(WID_ROMAPWND)) {
|
|
g_windowMgr.EnsureWindow(WID_ROMAPWND);
|
|
}
|
|
break;
|
|
case ID_FRIEND:
|
|
if (!g_windowMgr.CloseWindow(WID_MESSENGERWND)) {
|
|
g_windowMgr.EnsureWindow(WID_MESSENGERWND);
|
|
}
|
|
break;
|
|
case 214:
|
|
if (!g_windowMgr.CloseWindow(WID_CHATROOMMAKEWND) && !g_windowMgr.chatRoomWnd) {
|
|
if (!g_windowMgr.merchantShopMakeWnd && !g_windowMgr.merchantItemMyShopWnd) {
|
|
g_windowMgr.EnsureWindow(WID_CHATROOMMAKEWND);
|
|
} else {
|
|
g_windowMgr.Confirm(LookupMessage(MSI_CANT_OPEN_STORE_WHILE_CHAT), 0, true, false, 0, "Message", 280, 120, 0);
|
|
}
|
|
}
|
|
break;
|
|
case 222:
|
|
g_windowMgr.CloseWindow(WID_STATUSWND);
|
|
g_windowMgr.CloseWindow(13);
|
|
g_windowMgr.CloseWindow(WID_ITEMWND);
|
|
g_windowMgr.CloseWindow(WID_RENEWQUESTUI);
|
|
g_windowMgr.CloseWindow(WID_EQUIPWND);
|
|
g_windowMgr.CloseWindow(WID_MESSENGERWND);
|
|
g_windowMgr.CloseWindow(WID_CHATROOMMAKEWND);
|
|
g_windowMgr.CloseWindow(WID_CHATROOMCHANGEWND);
|
|
g_windowMgr.CloseWindow(WID_SKILLLISTWND);
|
|
g_windowMgr.CloseWindow(WID_TIPOFTHEDAYWND);
|
|
g_windowMgr.CloseWindow(WID_PETINFOWND);
|
|
g_windowMgr.CloseWindow(WID_EMOTIONWND);
|
|
g_windowMgr.CloseWindow(WID_CASHEMOTIONLISTWND);
|
|
g_windowMgr.CloseWindow(WID_MERCHANTITEMWND);
|
|
g_windowMgr.CloseWindow(WID_GUILDWND);
|
|
g_windowMgr.ShowWindowById(WID_SHORTCUTWND, 0);
|
|
this->SetHeight(this->collapsedHeight);
|
|
g_windowMgr.StoreSnapRectangle(this);
|
|
break;
|
|
case ID_MINI: {
|
|
const int height = this->geometry.height;
|
|
this->SetHeight(height == this->collapsedHeight ? this->expandedHeight : this->collapsedHeight);
|
|
g_windowMgr.StoreSnapRectangle(this);
|
|
g_windowMgr.Promote(this);
|
|
const int delta = this->geometry.height - height;
|
|
if (delta != 0) {
|
|
g_snapMgr.MoveEdge(this, 0, delta, 3);
|
|
}
|
|
break;
|
|
}
|
|
case 578: {
|
|
UIEquipWnd* equip = dynamic_cast<UIEquipWnd*>(g_windowMgr.LookupWindow(WID_EQUIPWND));
|
|
if (equip) {
|
|
if (equip->m_page == 1) {
|
|
g_windowMgr.CloseWindow(WID_EQUIPWND);
|
|
return 0;
|
|
}
|
|
} else {
|
|
equip = dynamic_cast<UIEquipWnd*>(static_cast<UIFrameWnd*>(g_windowMgr.EnsureWindow(WID_EQUIPWND)));
|
|
if (!equip) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
equip->m_tabs->SelectTab(1);
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case UM_SETINFO:
|
|
this->saved = reinterpret_cast<BasicInfoWndInfo*>(argument1);
|
|
if (!this->saved->IsValid()) {
|
|
this->saved->Reset();
|
|
}
|
|
|
|
this->mode = this->saved->mode != 0;
|
|
this->SetHeight(this->saved->height);
|
|
this->Move(this->saved->x, this->saved->y);
|
|
break;
|
|
case UM_REFRESH:
|
|
if (this->geometry.height != this->expandedHeight) {
|
|
this->Invalidate();
|
|
}
|
|
break;
|
|
default:
|
|
return UIFrameWnd::SendMsg(sender, message, argument1, argument2, argument3, argument4);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
// OFFSET: 0x009974F0
|
|
// FUNCTION: fn_13487
|
|
void UIBasicInfoWnd::DrawExpanded() {
|
|
this->DrawBitmap(0, 0, static_cast<CBitmapRes*>(
|
|
ResourceMgr::Instance().Load(Resolve("유저인터페이스\\basic_interface\\w_basewin_bg2.bmp"))
|
|
), false);
|
|
|
|
this->DrawTextAt(18, 3, LookupMessage(MSI_BASICINFOWND), 0, 0, 12, 0xFFFFFF, 0, 0);
|
|
this->DrawTextAt(17, 2, LookupMessage(MSI_BASICINFOWND), 0, 0, 12, 0, 0, 0);
|
|
|
|
const bool compact = g_serviceType == 0 || g_serviceType == 14;
|
|
const int family = compact ? 0 : 1;
|
|
const int fontHeight = compact ? 12 : 14;
|
|
const int job = g_session.GetDisplayJob();
|
|
const char* jobName = g_session.GetJobName(job, -1);
|
|
this->DrawTextAt(9, 36, jobName, 0, family, fontHeight, 0, 0, 0);
|
|
this->DrawTextAt(9, 51, LookupMessage(MSI_BASICINFO_JOBLEVEL), 0, 1, 14, 0, 0, 0);
|
|
this->DrawTextAt(9, 65, LookupMessage(MSI_BASICINFO_EXP), 0, 1, 14, 0, 0, 0);
|
|
this->DrawTextAt(9, 80, LookupMessage(MSI_GUILD_AGIT_ARE_YOU_MOVE_AGIT), 0, 1, 14, 0, 0, 0);
|
|
|
|
if (g_session.maxHp > 0) {
|
|
const std::int64_t percent = static_cast<std::int64_t>(g_session.hp) * 100 / g_session.maxHp;
|
|
this->DrawTextAt(173, 51, FormatOwnedString("%d%%", percent).c_str(), 0, 1, 14, 0, 0, 0);
|
|
}
|
|
|
|
const int sp = *reinterpret_cast<const int*>(&g_session.spAndHomunculusStats[0]);
|
|
const int spMax = *reinterpret_cast<const int*>(&g_session.spAndHomunculusStats[4]);
|
|
if (spMax > 0) {
|
|
const std::int64_t percent = static_cast<std::int64_t>(sp) * 100 / spMax;
|
|
this->DrawTextAt(173, 65, FormatOwnedString("%d%%", percent).c_str(), 0, 1, 14, 0, 0, 0);
|
|
}
|
|
|
|
if (g_session.GetTraitStat(233) > 0) {
|
|
this->DrawTextAt(
|
|
173, 80, FormatOwnedString("%d%%", g_session.GetTraitStat(232) * 100 / g_session.GetTraitStat(233)).c_str(), 0, 1, 14, 0, 0, 0
|
|
);
|
|
}
|
|
|
|
{
|
|
std::string baseLevel = FormatOwnedString(LookupMessage(MSI__BASIC_MSG_BASE), g_session.m_level);
|
|
this->DrawTextAt(17, this->layoutOffset + 71, baseLevel.c_str(), 0, 1, 14, 0, 0, 0);
|
|
}
|
|
|
|
{
|
|
std::string jobLevel = FormatOwnedString(LookupMessage(MSI__BASIC_MSG_JOB), g_session.m_jobLevel);
|
|
if (g_serviceType == 12) {
|
|
jobLevel = static_cast<const std::string&>(FormatOwnedString("Classe. %d", g_session.m_jobLevel));
|
|
}
|
|
this->DrawTextAt(17, this->layoutOffset + 83, jobLevel.c_str(), 0, 1, 14, 0, 0, 0);
|
|
}
|
|
|
|
char zenyBuffer[64];
|
|
std::memset(zenyBuffer, 0, sizeof(zenyBuffer));
|
|
FormatGroupedInteger(g_session.m_zeny, zenyBuffer, 64);
|
|
std::string zenyText = FormatOwnedString(LookupMessage(MSI_BASIC_MSG_ZENY), zenyBuffer);
|
|
zenyText = " | " + zenyText;
|
|
this->DrawRightAlignedText(this->geometry.width - 5, this->layoutOffset + 103, zenyText.c_str(), 0, 1, 14, 0, 0);
|
|
const int zenyWidth = this->TextWidth(zenyText.c_str(), 0, 1, 14, 0, 0
|
|
);
|
|
|
|
std::string weightText;
|
|
if (g_serviceType == 12) {
|
|
weightText = static_cast<const std::string&>(FormatOwnedString("Peso : %3d / %3d", g_session.m_weight, g_session.m_maxWeight));
|
|
} else {
|
|
weightText = static_cast<const std::string&>(FormatOwnedString(LookupMessage(MSI_WEIGHT), g_session.m_weight, g_session.m_maxWeight));
|
|
}
|
|
|
|
const int denominator = g_session.m_maxWeight < 1 ? 1 : g_session.m_maxWeight;
|
|
const std::uint32_t weightColor = 100 * g_session.m_weight / denominator >= g_overweightThresholdPercent ? 255 : 0;
|
|
this->DrawRightAlignedText(
|
|
this->geometry.width - zenyWidth - 5, this->layoutOffset + 103, weightText.c_str(), 0, 1, 14, weightColor, 0
|
|
);
|
|
}
|
|
|
|
// OFFSET: 0x00997C20
|
|
// FUNCTION: fn_13488
|
|
void UIBasicInfoWnd::DrawCollapsed() {
|
|
{
|
|
unsigned red;
|
|
unsigned green;
|
|
unsigned blue;
|
|
SkinPaletteChannels(ResourceMgr::Instance(), 2, 2, red, green, blue);
|
|
this->FillRegion(1, 17, this->geometry.width - 2, this->geometry.height - 18, RGB(red, green, blue));
|
|
SkinPaletteChannels(ResourceMgr::Instance(), 14, 6, red, green, blue);
|
|
DrawRoundedBorder(*this, 0, 14, this->geometry.width, this->geometry.height - 14, RGB(red, green, blue));
|
|
}
|
|
this->DrawTitleBar(false, "", 0);
|
|
|
|
int family = 1;
|
|
int fontHeight = 14;
|
|
if (g_serviceType == 0) {
|
|
switch (g_session.GetDisplayJob()) {
|
|
case JT_TAEKWON:
|
|
case JT_STAR:
|
|
case JT_STAR2:
|
|
case JT_LINKER:
|
|
case JT_STAR_EMPEROR:
|
|
case JT_SOUL_REAPER:
|
|
case JT_STAR_EMPEROR_B:
|
|
case JT_SOUL_REAPER_B:
|
|
case JT_STAR2_EMPEROR:
|
|
case JT_STAR2_EMPEROR_B:
|
|
case JT_SKY_EMPEROR:
|
|
case JT_SOUL_ASCETIC:
|
|
case JT_SKY_EMPEROR2:
|
|
family = 0;
|
|
fontHeight = 11;
|
|
break;
|
|
}
|
|
}
|
|
|
|
this->DrawTextAt(
|
|
8, 20,
|
|
FormatOwnedString(
|
|
"%s %d / %s / %s %d", LookupMessage(MSI_ALL_ON), g_session.m_level, g_session.GetJobName(g_session.GetDisplayJob(), -1),
|
|
LookupMessage(MSI_GUILD_AGIT_INVESTMENT_INFO), g_session.m_jobLevel
|
|
).c_str(),
|
|
0, family, fontHeight, 0, 0, 0
|
|
);
|
|
|
|
const int hp = g_session.hp;
|
|
const int maxHp = g_session.maxHp;
|
|
std::uint32_t hpColor = 0;
|
|
if (maxHp > 0) {
|
|
hpColor = 0.25f > static_cast<float>(hp) / static_cast<float>(maxHp) ? 255 : 0;
|
|
}
|
|
this->DrawTextAt(
|
|
8, 36, FormatOwnedString("%s %d / %d", LookupMessage(MSI_BASICINFO_JOBLEVEL), hp, maxHp).c_str(), 0, family, fontHeight, hpColor, 0, 0
|
|
);
|
|
|
|
std::int64_t current = BaseExpCurrent();
|
|
if (current < 0) {
|
|
current = 0;
|
|
}
|
|
std::int64_t maximum = BaseExpMaximum();
|
|
if (maximum <= 0) {
|
|
maximum = current + 1;
|
|
}
|
|
double percent;
|
|
if (g_session.m_level < g_session.GetMaxBaseLevel(g_session.GetDisplayJob())) {
|
|
percent = static_cast<double>(
|
|
static_cast<std::int64_t>(static_cast<double>(current) / static_cast<double>(maximum) * 1000.0)
|
|
) *
|
|
0.1;
|
|
} else {
|
|
percent = 100.0;
|
|
}
|
|
this->DrawTextAt(
|
|
136, 36, FormatOwnedString("| %s %.1lf%%", LookupMessage(MSI_SIMPLECASH_P), percent).c_str(), 0, family, fontHeight, 0, 0, 0
|
|
);
|
|
|
|
const int sp = *reinterpret_cast<const int*>(&g_session.spAndHomunculusStats[0]);
|
|
const int spMax = *reinterpret_cast<const int*>(&g_session.spAndHomunculusStats[4]);
|
|
std::uint32_t spColor = 0;
|
|
if (spMax > 0) {
|
|
spColor = 0.25f > static_cast<float>(sp) / static_cast<float>(spMax) ? 255 : 0;
|
|
}
|
|
this->DrawTextAt(
|
|
8, 52, FormatOwnedString("%s %d / %d", LookupMessage(MSI_BASICINFO_EXP), sp, spMax).c_str(), 0, family, fontHeight, spColor, 0, 0
|
|
);
|
|
|
|
this->DrawTextAt(
|
|
136, 52,
|
|
FormatOwnedString("| %s %d / %d", LookupMessage(MSI_GUILD_AGIT_ARE_YOU_MOVE_AGIT), g_session.GetTraitStat(232), g_session.GetTraitStat(233))
|
|
.c_str(),
|
|
0, family, fontHeight, 0, 0, 0
|
|
);
|
|
}
|
|
|
|
// OFFSET: 0x009983C0
|
|
// FUNCTION: fn_13491
|
|
void UIBasicInfoWnd::OnCreate(int width, int height) {
|
|
this->AddBaseButton();
|
|
|
|
UIBitmapButton* minimizeButton = this->AddMinimizeButton("Alt+V, Ctrl+V", 0);
|
|
minimizeButton->Move(this->geometry.width - 14, 3);
|
|
|
|
this->nameText = new UIStaticText();
|
|
this->nameText->SetSize(this->geometry.width - 20, 15);
|
|
this->nameText->Move(9, 23);
|
|
this->nameText->SetTextFitted(g_session.DecodePlayerName());
|
|
this->nameText->SetFont(0, 12, 0, 0);
|
|
this->AddChild(this->nameText);
|
|
|
|
this->hpBar = new UIBarGraphPlayer();
|
|
static_cast<UIBarGraphPlayer*>(this->hpBar)->SetValues(
|
|
[]() -> std::int64_t { return g_session.hp; },
|
|
[]() -> std::int64_t { return g_session.maxHp; }
|
|
);
|
|
static_cast<UIBarGraphPlayer*>(this->hpBar)->SetSize(135, 9);
|
|
static_cast<UIBarGraphPlayer*>(this->hpBar)->Move(-100, -100);
|
|
this->AddChild(this->hpBar);
|
|
|
|
this->spBar = new UIBarGraphPlayer();
|
|
static_cast<UIBarGraphPlayer*>(this->spBar)->SetValues(
|
|
[]() -> std::int64_t { return *reinterpret_cast<const int*>(&g_session.spAndHomunculusStats[0]); },
|
|
[]() -> std::int64_t { return *reinterpret_cast<const int*>(&g_session.spAndHomunculusStats[4]); }
|
|
);
|
|
static_cast<UIBarGraphPlayer*>(this->spBar)->SetSize(135, 9);
|
|
static_cast<UIBarGraphPlayer*>(this->spBar)->Move(-100, -100);
|
|
this->AddChild(this->spBar);
|
|
|
|
this->apBar = new UIBarGraphPlayerAP();
|
|
static_cast<UIBarGraphPlayerAP*>(this->apBar)->SetValues(
|
|
[]() -> std::int64_t { return g_session.GetTraitStat(232); },
|
|
[]() -> std::int64_t { return g_session.GetTraitStat(233); }
|
|
);
|
|
static_cast<UIBarGraphPlayerAP*>(this->apBar)->SetSize(135, 9);
|
|
static_cast<UIBarGraphPlayerAP*>(this->apBar)->Move(-100, -100);
|
|
this->AddChild(this->apBar);
|
|
|
|
this->baseExpBar = new UIINT64BarGraph();
|
|
static_cast<UIINT64BarGraph*>(this->baseExpBar)->m_plainColor = 1;
|
|
static_cast<UIINT64BarGraph*>(this->baseExpBar)->SetSize(112, 6);
|
|
static_cast<UIINT64BarGraph*>(this->baseExpBar)->Move(84, this->layoutOffset + 76);
|
|
static_cast<UIINT64BarGraph*>(this->baseExpBar)->SetValues(BaseExpCurrent(), BaseExpMaximum());
|
|
this->AddChild(this->baseExpBar);
|
|
|
|
this->jobExpBar = new UIINT64BarGraph();
|
|
static_cast<UIINT64BarGraph*>(this->jobExpBar)->m_plainColor = 1;
|
|
static_cast<UIINT64BarGraph*>(this->jobExpBar)->SetSize(112, 6);
|
|
static_cast<UIINT64BarGraph*>(this->jobExpBar)->Move(84, this->layoutOffset + 86);
|
|
static_cast<UIINT64BarGraph*>(this->jobExpBar)->SetValues(JobExpCurrent(), JobExpMaximum());
|
|
this->AddChild(this->jobExpBar);
|
|
|
|
this->SetHeight(height);
|
|
}
|
|
|
|
// OFFSET: 0x00998810
|
|
// FUNCTION: fn_13492
|
|
void UIBasicInfoWnd::Paint() {
|
|
char zenyText[64];
|
|
char text[128];
|
|
|
|
if (g_session.IsTreeGroupThree(g_session.GetDisplayJob()) == true) {
|
|
if (this->geometry.height == this->collapsedHeight) {
|
|
this->DrawCollapsed();
|
|
} else if (this->geometry.height == this->expandedHeight) {
|
|
this->DrawExpanded();
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (this->geometry.height == this->collapsedHeight) {
|
|
{
|
|
unsigned red;
|
|
unsigned green;
|
|
unsigned blue;
|
|
SkinPaletteChannels(ResourceMgr::Instance(), 14, 6, red, green, blue);
|
|
DrawRoundedBorder(*this, 0, 17, this->geometry.width, this->geometry.height - 17, RGB(red, green, blue));
|
|
this->FillRegion(0, 17, this->geometry.width, 5, RGB(red, green, blue));
|
|
SkinPaletteChannels(ResourceMgr::Instance(), 2, 2, red, green, blue);
|
|
this->FillRegion(1, 17, this->geometry.width - 2, this->geometry.height - 19, RGB(red, green, blue));
|
|
this->FillRegion(2, this->geometry.height - 2, this->geometry.width - 4, 1, RGB(red, green, blue));
|
|
}
|
|
this->DrawTitleBar(false, "", 0);
|
|
|
|
std::int64_t current = BaseExpCurrent();
|
|
std::int64_t maximum = BaseExpMaximum();
|
|
if (current < 0) {
|
|
current = 0;
|
|
}
|
|
if (maximum <= 0) {
|
|
maximum = current + 1;
|
|
}
|
|
|
|
int maxLevel;
|
|
if (g_session.IsTreeGroupTwo(g_session.GetDisplayJob())) {
|
|
maxLevel = g_session.m_maxLevel;
|
|
} else if (g_session.IsSuperNovice2Job(g_session.GetDisplayJob())) {
|
|
maxLevel = *reinterpret_cast<const int*>(&g_session.jobLevelLimits[0]);
|
|
} else if (g_session.IsExpandedJob(g_session.GetDisplayJob())) {
|
|
maxLevel = *reinterpret_cast<const int*>(&g_session.jobLevelLimits[4]);
|
|
} else {
|
|
maxLevel = g_session.IsDoramJob(g_session.GetDisplayJob()) == true ? *reinterpret_cast<const int*>(&g_session.jobLevelLimits[0x28])
|
|
: *reinterpret_cast<const int*>(g_session.maxBaseLevel);
|
|
}
|
|
|
|
double percent;
|
|
if (maxLevel == g_session.m_level) {
|
|
percent = 100.0;
|
|
} else {
|
|
percent = static_cast<float>(static_cast<int>(static_cast<double>(current) / static_cast<double>(maximum) * 1000.0)) * 0.1f;
|
|
}
|
|
|
|
int x = 9;
|
|
int family = 1;
|
|
int fontHeight = 14;
|
|
int length;
|
|
if (g_serviceType == 12) {
|
|
length = std::sprintf(text, "Nv. %2d / %s / Nv. %2d / Exp. %lld %%", g_session.m_level, g_session.GetJobName(g_session.GetDisplayJob(), -1),
|
|
g_session.m_jobLevel, static_cast<long long>(percent));
|
|
} else {
|
|
if (g_serviceType == 0) {
|
|
switch (g_session.GetDisplayJob()) {
|
|
case JT_SUPERNOVICE:
|
|
case JT_TAEKWON:
|
|
case JT_STAR:
|
|
case JT_STAR2:
|
|
case JT_LINKER:
|
|
case JT_STAR_EMPEROR:
|
|
case JT_SOUL_REAPER:
|
|
case JT_STAR_EMPEROR_B:
|
|
case JT_SOUL_REAPER_B:
|
|
case JT_STAR2_EMPEROR:
|
|
case JT_STAR2_EMPEROR_B:
|
|
case JT_SKY_EMPEROR:
|
|
case JT_SOUL_ASCETIC:
|
|
case JT_SKY_EMPEROR2:
|
|
family = 0;
|
|
fontHeight = 11;
|
|
break;
|
|
}
|
|
}
|
|
|
|
length = std::sprintf(text, "Lv.%2d / %s / Lv.%2d / Exp. %.1lf %%", g_session.m_level, g_session.GetJobName(g_session.GetDisplayJob(), -1),
|
|
g_session.m_jobLevel, percent);
|
|
if (this->TextWidth(text, length, family, fontHeight, 0, 0) + 9 > this->geometry.width) {
|
|
length = std::sprintf(text, "Lv%2d / %s / Lv%2d / Exp%.1lf%%", g_session.m_level, g_session.GetJobName(g_session.GetDisplayJob(), -1),
|
|
g_session.m_jobLevel, percent);
|
|
const int remaining = this->geometry.width - this->TextWidth(text, length, family, fontHeight, 0, 0);
|
|
if (remaining < 0) {
|
|
x = 3;
|
|
} else {
|
|
x = remaining / 2;
|
|
}
|
|
}
|
|
}
|
|
this->DrawTextAt(x, 20, text, length, family, fontHeight, 0, 0, 0);
|
|
|
|
FormatGroupedInteger(g_session.m_zeny, zenyText, 64);
|
|
|
|
int offset = 0;
|
|
const int maxHp = g_session.maxHp;
|
|
if (maxHp != 0) {
|
|
const int hp = g_session.hp;
|
|
const std::uint32_t color = static_cast<float>(hp) * 100.0f / static_cast<float>(maxHp) < 25.0f ? 255 : 0;
|
|
const int hpLength = std::sprintf(text, x == 9 ? "HP. %d / %d" : "HP %d / %d", hp, maxHp);
|
|
this->DrawTextAt(x, 36, text, hpLength, 1, 14, color, 0, 0);
|
|
offset = this->TextWidth(text, hpLength, 1, 14, 0, 0);
|
|
length = std::sprintf(text, " | ");
|
|
this->DrawTextAt(offset + x, 36, text, length, 1, 14, 0, 0, 0);
|
|
}
|
|
|
|
const int& sp = *reinterpret_cast<const int*>(&g_session.spAndHomunculusStats[0]);
|
|
const int& spMax = *reinterpret_cast<const int*>(&g_session.spAndHomunculusStats[4]);
|
|
if (spMax < 0) {
|
|
return;
|
|
}
|
|
|
|
const std::uint32_t color = static_cast<float>(sp) * 100.0f / static_cast<float>(spMax) < 25.0f ? 255 : 0;
|
|
offset += this->TextWidth(text, length, 1, 14, 0, 0);
|
|
const int spLength = std::sprintf(text, x == 9 ? "SP. %d / %d" : "SP %d / %d", sp, spMax);
|
|
this->DrawTextAt(offset + x, 36, text, spLength, 1, 14, color, 0, 0);
|
|
} else if (this->geometry.height == this->expandedHeight) {
|
|
CBitmapRes* background = static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\basic_interface\\basewin_bg2.bmp")));
|
|
this->DrawTitleBar(false, "", 0);
|
|
this->DrawBitmap(0, 0, background, false);
|
|
|
|
int family;
|
|
int fontHeight;
|
|
if (g_serviceType == 0 || g_serviceType == 14) {
|
|
family = 0;
|
|
fontHeight = 12;
|
|
} else {
|
|
family = 1;
|
|
fontHeight = 14;
|
|
}
|
|
const int job = g_session.GetDisplayJob();
|
|
const char* jobName = g_session.GetJobName(job, -1);
|
|
this->DrawTextAt(9, 36, jobName, 0, family, fontHeight, 0, 0, 0);
|
|
|
|
std::memset(text, 0, sizeof(text));
|
|
if (g_serviceType == 1) {
|
|
this->DrawTextAt(18, 3, "Basic Info", 0, 0, 12, 0xFFFFFF, 0, 0);
|
|
this->DrawTextAt(17, 2, "Basic Info", 0, 0, 12, 0, 0, 0);
|
|
} else {
|
|
this->DrawTextAt(18, 3, LookupMessage(MSI_BASICINFOWND), 0, 0, 12, 0xFFFFFF, 0, 0);
|
|
this->DrawTextAt(17, 2, LookupMessage(MSI_BASICINFOWND), 0, 0, 12, 0, 0, 0);
|
|
}
|
|
|
|
this->DrawTextAt(17, 51, "HP", 0, 1, 14, 0, 0, 0);
|
|
this->DrawTextAt(17, 65, "SP", 0, 1, 14, 0, 0, 0);
|
|
|
|
const int maxHp = g_session.maxHp;
|
|
if (maxHp != 0) {
|
|
std::sprintf(text, "%d%%", g_session.hp * 100 / maxHp);
|
|
this->DrawTextAt(173, 51, text, 0, 1, 14, 0, 0, 0);
|
|
}
|
|
|
|
const int spMax = *reinterpret_cast<const int*>(&g_session.spAndHomunculusStats[4]);
|
|
if (spMax != 0) {
|
|
std::sprintf(text, "%d%%", *reinterpret_cast<const int*>(&g_session.spAndHomunculusStats[0]) * 100 / spMax);
|
|
this->DrawTextAt(173, 65, text, 0, 1, 14, 0, 0, 0);
|
|
}
|
|
|
|
if (g_serviceType == 12) {
|
|
std::sprintf(text, "Base. %d", g_session.m_level);
|
|
} else {
|
|
std::sprintf(text, "Base Lv. %d", g_session.m_level);
|
|
}
|
|
this->DrawTextAt(17, this->layoutOffset + 71, text, 0, 1, 14, 0, 0, 0);
|
|
if (g_serviceType == 12) {
|
|
std::sprintf(text, "Classe. %d", g_session.m_jobLevel);
|
|
} else {
|
|
std::sprintf(text, "Job Lv. %d", g_session.m_jobLevel);
|
|
}
|
|
this->DrawTextAt(17, this->layoutOffset + 83, text, 0, 1, 14, 0, 0, 0);
|
|
|
|
std::memset(zenyText, 0, sizeof(zenyText));
|
|
FormatGroupedInteger(g_session.m_zeny, zenyText, 64);
|
|
std::sprintf(text, "Zeny : %s", zenyText);
|
|
const int zenyWidth = this->TextWidth(text, std::strlen(text), 1, 14, 0, 0);
|
|
this->DrawRightAlignedText(this->geometry.width - 5, this->layoutOffset + 103, text, std::strlen(text), 1, 14, 0, 0);
|
|
|
|
if (g_serviceType == 12) {
|
|
std::sprintf(text, "Peso : %3d / %3d", g_session.m_weight, g_session.m_maxWeight);
|
|
} else {
|
|
std::sprintf(text, "Weight : %3d / %3d", g_session.m_weight, g_session.m_maxWeight);
|
|
}
|
|
int capacity = g_session.m_maxWeight;
|
|
if (capacity < 1) {
|
|
capacity = 1;
|
|
}
|
|
const std::uint32_t color = g_session.m_weight * 100 / capacity >= g_overweightThresholdPercent ? 255 : 0;
|
|
this->DrawRightAlignedText(this->geometry.width - zenyWidth - 10, this->layoutOffset + 103, text, std::strlen(text), 1, 14, color, 0);
|
|
}
|
|
}
|