Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Seite 1 von 2 12 Letzte »
Ergebnis 1 bis 20 von 36
  1. Homepage besuchen Beiträge anzeigen #1 Zitieren
    Exodus Avatar von Sektenspinner
    Registriert seit
    Jul 2004
    Ort
    Karlsruhe
    Beiträge
    7.827
     
    Sektenspinner ist offline

    [Skript] Mehr Alpha-Vobs und Alpha-Polys in Gothic 2

    Ich erlaube mir einen eigenen Thread zu eröffnen, weil ich mir einbilde, dass das Thema nicht nur versierte Ikarus Nutzer interessiert.

    Gothic hat Probleme, wenn viele Vobs oder Polygone einen (nicht 1-bit) Alphakanal haben. Dies äußert sich durch eine der beiden Fehlermeldungen
    Code:
    X: XD3D_AlphaBlendPoly: xd3d_numAlphaPolys>=MAXALPHAPOLYS (Too many alphapolys)
    D: RNDMAN: too few alphaVOBs!
    und im zweiten Fall zudem meist durch einen Absturz / Freeze.

    Es folgt Code um in Gothic 2 die Alpha-Vob Grenze und die Alpha-Poly Grenze zu erhöhen. Der Fix ist skriptseitig und ist ergo nicht auf den Spacer übertragbar. Benötigt wird Ikarus.

    Code:
    //************************************************
    //   Alpha-Vob Fix
    //************************************************
    
    func void MoreAlphaVobs(var int newCount) {
        MEM_InitAll();
    
        /* This is an alpha vob:
        
        class zCRndAlphaSortObject_Vob {
            var int _vtbl;
            var int nextSortObject; //zCRndAlphaSortObject_Vob*
            var int zvalue;         //zREAL
            var int vob;            //zCVob*
            var int alpha;          //zREAL
        };
        
        */
        const int sizeOf_zCRndAlphaSortObject_Vob = 20;
        const int zCRndAlphaSortObject_Vob__vtbl = 8592292; //0x831BA4
        
        const int newAlphaVobPool = 0; //wird jedes Laden zurückgesetzt
        
        //nur fixen wenn noch nicht gefixt.
        if (!newAlphaVobPool) {
            //neuer Pool der angegebenen Größe
            newAlphaVobPool = MEM_Alloc(sizeOf_zCRndAlphaSortObject_Vob * newCount);
            
            //Neue Liste bauen, dabei _vtbl und vob initialsieren.
            var int i; i = 0;
            var int loop; loop = MEM_StackPos.position;
            if (i < newCount) {
                var int theSortObj; theSortObj = newAlphaVobPool + i * sizeOf_zCRndAlphaSortObject_Vob;
                MEM_WriteInt(theSortObj +  0, zCRndAlphaSortObject_Vob__vtbl);
                MEM_WriteInt(theSortObj + 12, 0);
                i += 1;
                MEM_StackPos.position = loop;
            };
            
            //Vergleichsinstruktion:
            var int ptr; ptr = 5427853; //0x52D28D
            MemoryProtectionOverride(ptr, 4);
            MEM_WriteInt(ptr, newCount);
            
            //Der Indexzugriff
            ptr = 5427979; //0x52D30B
            MemoryProtectionOverride(ptr, 4);
            MEM_WriteInt(ptr, newAlphaVobPool);
            
            //Verschobener Indexzugriff
            ptr = 5427972; //0x52D304
            MemoryProtectionOverride(ptr, 4);
            MEM_WriteInt(ptr, newAlphaVobPool + 12);
        };
    };
    
    //************************************************
    //   Alpha-Poly Fix
    //************************************************
    
    func void MoreAlphaPolys(var int newCount) {
        MEM_InitAll();
    
        const int sizeOf_zD3D_alphaPoly = 260; //die Teile sind recht groß! Man kriegt nur 4000 pro MB
        const int zD3D_alphaPoly__vtbl = 8631300; //0x83B404
        
        //nur anlegen wenn noch nicht geschehen.
        const int newAlphaPolyPool = 0;
        if (!newAlphaPolyPool) {
            newAlphaPolyPool = MEM_Alloc(sizeOf_zD3D_alphaPoly * newCount);
            
            //Neue Liste bauen (vtbl initialisieren).
            var int i; i = 0;
            var int loop; loop = MEM_StackPos.position;
            if (i < newCount) {
                MEM_WriteInt(newAlphaPolyPool + i * sizeOf_zD3D_alphaPoly, zD3D_alphaPoly__vtbl);
                i += 1;
                MEM_StackPos.position = loop;
            };
            
            //Den Vergleich fixen:
            var int ptr; ptr = 6605188; //0x64C984
            MemoryProtectionOverride(ptr, 4);
            MEM_WriteInt(ptr, newCount - 300); //warning-level (ab hier werden keine neuen Vobs angenommen).
            
            //Noch ein Vergleich
            ptr = 6605201; //0x64C991
            MemoryProtectionOverride(ptr, 4);
            MEM_WriteInt(ptr, newCount); //limit (ab hier: Fehlermeldung)
            
            //Fix XD3D_AlphaBlendPoly
            ptr = 6605403; //0x064CA5B
            
            //lea ebx, [ebx + newAlphaPolyPool]
            MemoryProtectionOverride(ptr, 7);
            MEM_WriteByte(ptr, 141); ptr += 1; //0x8D
            MEM_WriteByte(ptr, 155); ptr += 1; //0x9B
            MEM_WriteInt(ptr, newAlphaPolyPool); ptr += 4;
            MEM_WriteByte(ptr, 144); //0x90 = nop
            
            //Fix AddAlphaPoly
            ptr = 6607092; //0x064D0F4
            //lea ebx, [edx+newAlphaPolyPool
            MemoryProtectionOverride(ptr, 7);
            MEM_WriteByte(ptr, 141); ptr += 1; //0x8D
            MEM_WriteByte(ptr, 154); ptr += 1; //0x9A
            MEM_WriteInt(ptr, newAlphaPolyPool); ptr += 4;
            MEM_WriteByte(ptr, 144); //0x90 = nop
        };
    };
    Die Benutzung ist denkbar einfach. In der Funktion Init_Global (das heißt insbesondere bevor der erste Frame gerendert wird) ist dazu folgender Code auszuführen:

    Code:
        MoreAlphaVobs(2048); //normal: 256
        MoreAlphaPolys(16384); //normal: 2048
    Die neuen Grezen können beliebig gewählt werden (im Beispiel ist die jeweils 8 fache Menge eingesetzt). Dies ist kein Freibrief beliebig viele Alpha-Vobs in Welten zu platzieren, weil diese Welt dann im Spacer nicht mehr sinnvoll bearbeitet werden kann.
    Aber wenn im Spacer mit moderater Sichtweite gearbeitet wird (und das Betrachten einer großen Fläche aus der Vogelperspektive vermieden wird) kann man sich doch schon ziemlich frei austoben ohne mit den Grenzen zu kollidieren.

    Ich hoffe der Code ist fehlerfrei und wird dem ein oder anderen helfen. Bei Problemen bitte melden.
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  2. Homepage besuchen Beiträge anzeigen #2 Zitieren
    Team K Avatar von Klabautermann
    Registriert seit
    Aug 2004
    Beiträge
    4.154
     
    Klabautermann ist offline
    Falls ich nochmal für G2 modde, kriegste dafür beim nächsten Moddertreffen nen Kuss

    Ich hab so viele Ideen, was man mit Alphapolys schönes machen könnte.
    Vielen Dank!

  3. Homepage besuchen Beiträge anzeigen #3 Zitieren
    Gothic Reloaded Mod Avatar von ThielHater
    Registriert seit
    Nov 2006
    Beiträge
    7.048
     
    ThielHater ist offline
    Ich würde dir auch ein Küsschen spendieren.. oder zwei.
    "Weltmacht mit drei Buchstaben?" – Fred & Günther



  4. Homepage besuchen Beiträge anzeigen #4 Zitieren
    Team K Avatar von Kurzer
    Registriert seit
    Jul 2005
    Ort
    Dresden
    Beiträge
    6.549
     
    Kurzer ist offline
    Yeah! Endlich - super geile Sache!

  5. Beiträge anzeigen #5 Zitieren
    Ritter Avatar von ThomasBausB
    Registriert seit
    Jun 2006
    Ort
    Adelpha
    Beiträge
    1.573
     
    ThomasBausB ist offline
    Vielen Danke dafür. Das ist eine super Sache.

  6. Beiträge anzeigen #6 Zitieren
    Drachentöter Avatar von Zaphod Beeblebrox
    Registriert seit
    Aug 2008
    Beiträge
    4.898
     
    Zaphod Beeblebrox ist offline
    Klasse Sache, Besten Dank

    Bisher Umging ich in Outdoor Leveln das Problem in dem ich eben die meisten alphas in die mesh gesetzt habe. Das funktioniert aber nicht in Portalen, da die meisten alpha vobs eben den Portalraum schneiden und es dadurch nicht geht. Wenn man sie dann im Spacer setzt, gibt es eben diese Grenze, äh gab es diese Grenze
    Die gefährlichste aller Weltanschauungen ist die Weltanschauung der Leute, welche die Welt nicht angeschaut haben.
    Alexander von Humboldt

  7. Beiträge anzeigen #7 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.411
     
    NicoDE ist offline
    Danke, hervorragende Arbeit

  8. Beiträge anzeigen #8 Zitieren
    Deus
    Registriert seit
    Sep 2008
    Ort
    Stuttgart
    Beiträge
    14.420
     
    Dalai Zoll ist offline
    Das ist eine der besten Nachrichten der letzten Jahre .... danke!
    EWAGA MOD .... "echtes Gothic"!

    Team 101 Info über die Projekte und Downloaddatenbank:
    http://www.simple-creators.de/GameCo...c_content.html

  9. Beiträge anzeigen #9 Zitieren
    Ritter Avatar von Icebox
    Registriert seit
    Dec 2004
    Ort
    Hückelhoven
    Beiträge
    1.407
     
    Icebox ist offline
    Super, dass werde ich auf jedenfall verwenden können. Da du die Küsse von Thiel und Kurzer bekommst, kriegst du von mir eher ein bier, was aber auch nicht gerade schlimm ist
    Vorzeitig nicht mehr aktiv, aber per PN erreichbar
    Sektenwahn
    [/CENTER]

  10. Homepage besuchen Beiträge anzeigen #10 Zitieren
    Ulrich Thümmler  Avatar von Diablo_Hellfire
    Registriert seit
    May 2005
    Beiträge
    4.622
     
    Diablo_Hellfire ist offline
    Vielen dank Sektenspinner

  11. Beiträge anzeigen #11 Zitieren
    Warrior Avatar von Thanduriel
    Registriert seit
    Sep 2009
    Ort
    Magdeburg
    Beiträge
    438
     
    Thanduriel ist offline
    Super Sache Sektenspinner, das Problem hat mich schon mal eingeholt.
    These days, most of my projects can be found on github.

  12. Beiträge anzeigen #12 Zitieren
    Gotor Avatar von OldCoin
    Registriert seit
    Jun 2010
    Ort
    bei Bremen und auf Sythera
    Beiträge
    4.940
     
    OldCoin ist offline
    Auch ich werde das SICHER gut gebrauchen können.

    Danke Sektenspinner.

    Das Sythera-Mod-Team sucht derzeit nur noch einen weiteren netten Kollegen / Kollegin zur Erstellung von Gebäude-Meshs. Weitere Infos in der Jobbörse.

  13. Beiträge anzeigen #13 Zitieren
    Gorilla Bytes Team Avatar von Gorilla
    Registriert seit
    Nov 2010
    Ort
    Münchner Dschungel
    Beiträge
    2.360
     
    Gorilla ist offline
    Hey, das ist ja wahnsinn, Hammer
    Vielen Dank, das macht einige Sachen echt viel leichter
    Download Orkkrieg

    „Nach göttlichem Recht gebühre es der Kirche [...] zu bestimmen, was zu glauben und was zu tun sei.“-Papst Leo XIII

  14. Beiträge anzeigen #14 Zitieren
    Ehrengarde Avatar von Gottfried
    Registriert seit
    Mar 2006
    Beiträge
    2.512
     
    Gottfried ist offline
    Großartig, auf so etwas habe ich schon lange gewartet

    MfG Gottfried

  15. Beiträge anzeigen #15 Zitieren
    Drachentöter Avatar von Zaphod Beeblebrox
    Registriert seit
    Aug 2008
    Beiträge
    4.898
     
    Zaphod Beeblebrox ist offline
    Ich habe eine Frage zu der MEM_InitALL();

    Die wird ja in Ikarus benötigt und deshalb rufe ich sie in der Startup.d auf, genauer gesagt in der INIT_GLOBAL.

    Die Func MoreAlphaVobs und MoreAlphaPolys ruft nun in der ersten Zeile ebenfalls die MEM_InitALL() auf.

    Könnte ich nun in der INIT_GLOBAL diesen ersten MEM_InitALL(); Aufruf weglasen ?

    Code:
    MEM_InitALL();
    MoreAlphaVobs(2048); //normal: 256
    MoreAlphaPolys(16384); //normal: 2048
    Ansonsten habe ich in Gynaikos viiiele kombinierte alphas also sehr viele in der mesh und viele im Spacer(ZEN) gesetzt und bisher gab es keinerlei Probleme. Auch die Performance ist so wie vorher.

    einfach nur klasse
    Die gefährlichste aller Weltanschauungen ist die Weltanschauung der Leute, welche die Welt nicht angeschaut haben.
    Alexander von Humboldt

  16. Homepage besuchen Beiträge anzeigen #16 Zitieren
    Exodus Avatar von Sektenspinner
    Registriert seit
    Jul 2004
    Ort
    Karlsruhe
    Beiträge
    7.827
     
    Sektenspinner ist offline
    Zitat Zitat von Zaphod Beeblebrox Beitrag anzeigen
    Ich habe eine Frage zu der MEM_InitALL();

    Die wird ja in Ikarus benötigt und deshalb rufe ich sie in der Startup.d auf, genauer gesagt in der INIT_GLOBAL.

    Die Func MoreAlphaVobs und MoreAlphaPolys ruft nun in der ersten Zeile ebenfalls die MEM_InitALL() auf.

    Könnte ich nun in der INIT_GLOBAL diesen ersten MEM_InitALL(); Aufruf weglasen ?
    Ja, könntest du. Beziehungsweise umgekehrt könntest du den Aufruf an MEM_InitAll aus den beiden MoreAlpha* Methoden entfernen, wenn du den von dir angesprochenen drinlässt.

    Mit anderne Worten: MEM_InitAll muss nach jedem Laden vor gewissen Ikarusaktivitäten mindestens einmal aufgerufen worden sein, damit diese fehlerfrei laufen.
    Ein zusätzlicher Aufruf tut aber auch nicht weh und verbraucht, solange man die unnötigen Aufrufe nicht tausendfach anhäuft, auch nicht spürbar Zeit.

    Zitat Zitat von Zaphod
    Ansonsten habe ich in Gynaikos viiiele kombinierte alphas also sehr viele in der mesh und viele im Spacer(ZEN) gesetzt und bisher gab es keinerlei Probleme. Auch die Performance ist so wie vorher.
    Gut zu wissen, dass es nicht nur in meiner Testwelt läuft.

    Ansonsten freu ich mich mit allen anderen hier im Thread mit. Wer die Exodus Präsentation am Moddertreffen gesehen hat, der weiß, dass dieser Fix auch aus Eigennutz entstanden ist.
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  17. Homepage besuchen Beiträge anzeigen #17 Zitieren
    Legend of Ahssûn Avatar von Zuben2
    Registriert seit
    Mar 2008
    Beiträge
    2.607
     
    Zuben2 ist offline
    Schöne Sache, wirklich ne sehr schöne Sache.
    Auch die Performance ist so wie vorher.
    Das ist wohl der Punkt, der mich dabei interessieren würde: Inwiefern wirkt sich das auf die Performance aus? Bei dir scheinbar nicht. Kann das noch jemand anders bestätigen?

  18. Beiträge anzeigen #18 Zitieren
    Gorilla Bytes Team Avatar von Gorilla
    Registriert seit
    Nov 2010
    Ort
    Münchner Dschungel
    Beiträge
    2.360
     
    Gorilla ist offline
    Zitat Zitat von Zuben2 Beitrag anzeigen
    Kann das noch jemand anders bestätigen?
    Also ich habe jetzt ein wenig herumgespielt und meinen FlipScale verzehnfacht(!!!!!) hat wohlgemerkt zu keinem Error geführt. Und wer denkt ich habe wenige Vobs in der Welt, der irrt sich. Solange man immer gerade aus schaut, ist das bild flüssig, aber bei kameraschwenks ruckelt es ein wenig. Naja, übertreiben muss man es ja nicht, bei dem fünfachen Flipscale war bei mir alles komplett flüssig.

    Und 3840*1080 funktioniert jetzt auch endlich ohne Spielabsturz
    Spoiler:(zum lesen bitte Text markieren)
    Download Orkkrieg

    „Nach göttlichem Recht gebühre es der Kirche [...] zu bestimmen, was zu glauben und was zu tun sei.“-Papst Leo XIII

  19. Homepage besuchen Beiträge anzeigen #19 Zitieren
    Team K Avatar von Kurzer
    Registriert seit
    Jul 2005
    Ort
    Dresden
    Beiträge
    6.549
     
    Kurzer ist offline
    Nun, den FarClip verzehnfachen bringt AFAIK gar nicht so viel, da doch bei 5 schon die Mesh-Sicherweite nahezu erreicht ist...

  20. Beiträge anzeigen #20 Zitieren
    Lehrling Avatar von Radomil
    Registriert seit
    Mar 2011
    Beiträge
    44
     
    Radomil ist offline
    Zitat Zitat von Gorilla Beitrag anzeigen
    Und 3840*1080 funktioniert jetzt auch endlich ohne Spielabsturz
    Spoiler:(zum lesen bitte Text markieren)
    Das ist über zwei Monitore im Vollbild, richtig? Wie macht man das?

Seite 1 von 2 12 Letzte »

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide