Metin2 Sis/Fog Kaldırma (Unused+Broken Code)

  • Konuyu açan Konuyu açan Kaiser
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 1
  • Gösterim Gösterim 70

Kaiser

Admin
Admin
Süper Üye
Geliştirici
Yardımsever Üye
Mesaj
4.548
Çözümler
451
Beğeni
5.442
Puan
5.349
Ticaret Puanı
0
Merhabalar, sisle alakalı "ölü" diyebileceğimiz bazı kodlar yüzünden zaman zaman client çökmeleri vb. sorunlar yaşanıyor ve buna bağlı olarak çeşitli fixler üretiliyor. Buradaki en kritik etken, clientin okduğu fog.tga dosyasının 4x2 gibi bir boyutta hiçbir işe yaramayan bir doku dosyası olmasıdır. Ancak buradaki ufak temizlik işleminden sonra fog'a bağlı olan çökmeler sona ermiş olacaktır.

Başrol oyuncu: fog.tga dosyası.

Pek çok kişi bu dosyanın sisle alakalı olarak bir şekilde çalıştığını düşünüyor fakat kullanılmıyor ve öylece duruyorlar. Client, bu uyumsuz ve bozuk tga dosyasını her açılışta ram içine kopyalıyor ama asla kullanmıyor. Sanırım geliştiriciler sis yapısını bir doku aracılığı ile yapmayı hedeflemişler ve sonra Directx'in bunu zaten otomatik yaptığını fark edince bu kodları öylece bırakmışlar. Özetle; Metin2'deki sis Directx tarafından çizilir ve çalıştırılır, ve bu arta kalan kodlar ise zaman zaman baş ağrıtmaya devam eder.

Meraklısına: BU İŞLEM OYUNDAKİ MEVCUT SİSİ BOZMAZ / ETKİLEMEZ

Aşağıdaki kodlar güvenle kaldırabilirsiniz:

MapOutdoor.h (aşağıdakilerin hepsini bulun ve silin):
C++:
Genişlet Daralt Kopyala
//1
void            SaveAlphaFogOperation();
void            RestoreAlphaFogOperation();

//2
CGraphicImageInstance    m_AlphaFogImageInstance;
D3DXMATRIX                m_matAlphaFogTexture;

//3
void            InitializeFog();

MapOutdoor.cpp (hepsini bulun ve silin):
C++:
Genişlet Daralt Kopyala
void CMapOutdoor::InitializeFog()
{
    memset (&m_matAlphaFogTexture, 0, sizeof (D3DXMATRIX));
    m_matAlphaFogTexture._31 = -0.001f;
    m_matAlphaFogTexture._41 = -7.0f;
    m_matAlphaFogTexture._42 = 0.5f;
}

void CMapOutdoor::SaveAlphaFogOperation()
{
    STATEMANAGER.SetTextureStageState (1, D3DTSS_COLORARG1,    D3DTA_CURRENT);
    STATEMANAGER.SetTextureStageState (1, D3DTSS_COLOROP,    D3DTOP_SELECTARG1);
    STATEMANAGER.SetTextureStageState (1, D3DTSS_ALPHAARG1,    D3DTA_CURRENT);
    STATEMANAGER.SetTextureStageState (1, D3DTSS_ALPHAARG2,    D3DTA_TEXTURE);
    STATEMANAGER.SetTextureStageState (1, D3DTSS_ALPHAOP,    D3DTOP_MODULATE);
    STATEMANAGER.SetTextureStageState (1, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
    STATEMANAGER.SetTextureStageState (1, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
    STATEMANAGER.SetSamplerState (1, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
    STATEMANAGER.SetSamplerState (1, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);

    STATEMANAGER.SetTransform (D3DTS_TEXTURE1, &m_matAlphaFogTexture);
    STATEMANAGER.SaveRenderState (D3DRS_ALPHABLENDENABLE, TRUE);
    STATEMANAGER.SetTexture (1, m_AlphaFogImageInstance.GetTexturePointer()->GetD3DTexture());
}

void CMapOutdoor::RestoreAlphaFogOperation()
{
    STATEMANAGER.SetTextureStageState (1, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_DISABLE);
    STATEMANAGER.SetTextureStageState (1, D3DTSS_TEXCOORDINDEX, 1);
    STATEMANAGER.RestoreRenderState (D3DRS_ALPHABLENDENABLE);
}

C++:
Genişlet Daralt Kopyala
bool CMapOutdoor::Destroy()
{
    [...]
    
    m_AlphaFogImageInstance.Destroy(); // Sil

    [...]

    return true;
}

C++:
Genişlet Daralt Kopyala
CMapOutdoor::CMapOutdoor()
{
    // Bu iki satırı bulup silin.
    [...]
    CGraphicImage * pAlphaFogImage = (CGraphicImage*) CResourceManager::Instance().GetResourcePointer ("D:/ymir work/special/fog.tga");
    [...]
    m_AlphaFogImageInstance.SetImagePointer (pAlphaFogImage);
    [...]

    Initialize();
}

C++:
Genişlet Daralt Kopyala
bool CMapOutdoor::Initialize()
{
    [...]
    InitializeFog(); // Silin
    [...]
    
    return true;
}
 
Geri
Üst