diff --git a/Source/Client/Mode/CGameMode.h b/Source/Client/Mode/CGameMode.h index 880be056..15bd1dd6 100644 --- a/Source/Client/Mode/CGameMode.h +++ b/Source/Client/Mode/CGameMode.h @@ -276,6 +276,7 @@ public: void DrawMiniMapMarker( const TextureRegion& view, int x, int y, int size, std::string texture, int kind, std::uint32_t color, bool clamp ); + void DrawMiniMapCoordinates(); void ReceiveGradeEnchantInfo(const unsigned char* packet); void ReceivePartyItemPickup(const unsigned char* packet); void ReceiveShortcutPagePacket(const unsigned char* packet); diff --git a/Source/Client/Mode/GameModeMiniMap.cpp b/Source/Client/Mode/GameModeMiniMap.cpp index 42a610d4..82ea54c4 100644 --- a/Source/Client/Mode/GameModeMiniMap.cpp +++ b/Source/Client/Mode/GameModeMiniMap.cpp @@ -2,11 +2,15 @@ #include "Contents/Actors/Pc.h" #include "Contents/Ground/TerrainHeight.h" #include "Contents/World/World.h" +#include "Render/ActionSpriteDrawing.h" #include "Render/Primitives/RenderPrimitivePool.h" #include "Render/Primitives/RenderQueues.h" #include "Render/Renderer.h" #include "Render/TextureQuad.h" #include "Render/Textures/TextureCache.h" +#include "Resource/ResourceMgr.h" +#include "Resource/Sprites/ActionResource.h" +#include "Resource/Sprites/SpriteResource.h" #include "Resource/World/TerrainResource.h" #include "UI/Window/UIWindow.h" #include "UI/Window/UIWindowMgr.h" @@ -312,3 +316,70 @@ void CGameMode::DrawMiniMapMarker( } } } + +// OFFSET: 0x00CD1C50 +// FUNCTION: fn_21258 +void CGameMode::DrawMiniMapCoordinates() { + const char* player = reinterpret_cast(this->scene->player); + const int coordinateX = *reinterpret_cast(player + 0x494); + const int coordinateY = *reinterpret_cast(player + 0x498); + if (coordinateY <= 0 || coordinateX <= 0) { + return; + } + + CActRes* action = static_cast(ResourceMgr::Instance().Load("이팩트\\RankFont.act")); + CSprRes* sprite = static_cast(ResourceMgr::Instance().Load("이팩트\\RankFont.spr")); + + int digits[4]; + int count; + int value = coordinateY; + if (value > 9999) { + value = 9999; + count = 4; + } else { + count = 1; + if (value > 999) { + count = 4; + } else if (value > 99) { + count = 3; + } else if (value > 9) { + count = 2; + } + } + + digits[0] = value % 10; + digits[1] = value / 10 % 10; + digits[2] = value / 100 % 10; + digits[3] = value / 1000 % 10; + + int x = g_renderer->viewport.width - 80 + count * 25; + const int y = g_renderer->viewport.height - 30; + for (int index = 0; index < count; ++index, x -= 25) { + DrawActionSprite(reinterpret_cast(*this), x, y, action, sprite, 0, digits[index], 1.0f, 0.0f, 0xFFFFFFFF, 0x201); + } + + DrawActionSprite( + reinterpret_cast(*this), g_renderer->viewport.width - 80, g_renderer->viewport.height - 40, action, sprite, 0, 10, 1.0f, 0.0f, 0xFFFFFFFF, 0x201 + ); + + value = coordinateX; + count = 1; + if (value > 999) { + count = 4; + } else if (value > 99) { + count = 3; + } else if (value > 9) { + count = 2; + } + + digits[0] = value % 10; + digits[1] = value / 10 % 10; + digits[2] = value / 100 % 10; + digits[3] = value / 1000 % 10; + + x = g_renderer->viewport.width - 105; + const int secondY = g_renderer->viewport.height - 50; + for (int index = 0; index < count; ++index, x -= 25) { + DrawActionSprite(reinterpret_cast(*this), x, secondY, action, sprite, 0, digits[index], 1.0f, 0.0f, 0xFFFFFFFF, 0x201); + } +}