37x Forum  
Zurück  > >

Portal Forum Registrieren Hilfe

 
Themen-Optionen Thema bewerten Ansicht
Alt 09.06.2004, 18:11   Direktlink zum Beitrag - 1 Zum Anfang der Seite springen
suxx-
Gast
 
Beiträge: n/a
Standard

Hi Leute,
heute begrüße ich euch zu einer neuen Ausgabe von "spieletermine Hack-Tutorials". Heutegeht es um Removes.

so nun kommt erstmal die Theorie

Was wollen wir entfernen ?



  • Flashes
  • Smoke
  • Scope
  • Sky
Was brauchen wir dafür ?
  • entweder einen OGL Wrapper
  • einen OGL Hook
  • einfacher ausgedrückt hooked OGL Funktionen
Was müssen wir dafür wissen ?
  • wie HL eine Flash darstellt
  • wie HL das Scope darstellt (cs 1.6)
  • wie HL den Smoke darstellt
  • und wie HL den Sky darstellt

wie HL eine Flash darstellt:

Das ist relative simple denn HL drawed eine Flash indem es einen QUAD mit Fullscreen width und height darstellt der die Farbe weiß hat sprich r=1.0, g=1.0, b=1.0

wie HL das Scope darstellt:
Das ist schon etwas komplizierter da HL hier verschiedene Objekte drawed. Also müssen wir es anhand der Farbe ermitteln ob das Objekt was gerade dargestellt werden soll das Scope ist sprich r==b && b == g und mit Hilfe von glIsEnabled(GL_BLEND) gucken wir ob der Blendmodus deaktive ist will HL ein schwarzes Objekt darstellen und das ist das Scope.

wie HL den Smoke darstellt:
Der Smoke ist wieder sehr einfach und zwar ist er wieder vom Typ QUAD und die Farben sind wie bei einer Flash alle gleich nur sind sie nicht gleich null oder eins.

wie HL den Sky darstellt:
das ist nun wirklich einfach denn wenn HL einen QUAD darstellt und das ganze mit glVertex3fv dann ist es der Sky


Nun kommen wir zur Umsetzung der Theorie

Zuerst brauchen wir Variablen
Code:
 int vp[4]; // Enthält Informationen über den Screen
       GLfloat color[4];
       bool bFlash = false;
       bool bScope = false;
 bool bSky = false; // Wenn ihr den Sky Remove benutzen wollt dann müsst ihr den bool entweder auf true setzten oder ein KeyBinding machen
  bool bSmoke = false;
       bool bClearbit = false;
       bool bQuads = false;
nun wäre das geschafft und schon gehen wir zu der Flash über

glBegin:
Code:
if (mode == GL_QUADS)
       {
          bQuads = true;
          glGetFloatv(GL_CURRENT_COLOR, color);
       
          if(color[0]==1.0 && color[1]==1.0 && color[2]==1.0)
                 bFlash=true;
          else
                 bFlash=false;
       }else
          bQuads = false;
so nun erweitern wir es auch gleich mit der Smoketheorie dann sieht es in etwa so aus
Code:
if (mode == GL_QUADS)
        {
           bQuads = true;
           glGetFloatv(GL_CURRENT_COLOR, color);
       
           if(color[0]==1.0 && color[1]==1.0 && color[2]==1.0)
                  bFlash=true;
           else
                  bFlash=false;
       
          if((color[0]==color[1]) && (color[0] == color[2]) && (color[0] != 0.0) && (color[0] != 1.0))
                  bSmoke = true;
               else
                  bSmoke = false;
        }else
               bQuads = false;
so und nun auch gleich dem der Scopetheorie
Code:
if (mode == GL_QUADS)
         {
            bQuads = true;
            glGetFloatv(GL_CURRENT_COLOR, color);
        
            if(color[0]==1.0 && color[1]==1.0 && color[2]==1.0)
                   bFlash=true;
            else
                   bFlash=false;
        
           if((color[0]==color[1]) && (color[0] == color[2]) && (color[0] != 0.0) && (color[0] != 1.0))
                   bSmoke = true;
                else
                   bSmoke = false;
         }else
                bQuads = false;
       if(bScope)
       {
               bScope = false;
               return;
       }
In glColor4ub wissen wir ja aus der Scopetheorie das wir hier die Farben vergleichen müssen

Code:
if ((red == green) && (green == blue) && (glIsEnabled(GL_BLEND) == false)) {
               bScope = true;
       }
wenn HL bei der Funktion glTexCoord2f angekommen ist müssen wir bFlash wieder auf false setzten.
Code:
if(bFlash) bFlash = false;
mit der Funktion glVertex2f erstellt HL die Flash sprich hier müssen wir eingreifen wir wir nicht geflashed werden wollen.
Code:
if(y == vp[3] && bFlash)
       {
                glGetFloatv(GL_CURRENT_COLOR, color);
          glColor4f(color[0],color[1],color[2],0.01f); // Sehr geringer Alphawert damit die Flash durchsichtig bzw. nicht sichtbar ist
                bFlash = false;
                return;
       }
In glVertex3fv kommen nun Sky und Scope zusammen
Code:
if((bSmoke || bSky ) && bQuads)
       { 
               bClearbit = true;
               return;
       }
so nun noch in glClear den bClearbit einbauen und das war es schon für Heute
Code:
if ((mask & GL_DEPTH_BUFFER_BIT) && bClearbit)
       {
                glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
                mask = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT;
       }
 

Mit Zitat antworten
 


Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus



Alle Zeitangaben in WEZ +2. Es ist jetzt 01:22 Uhr.


Powered by vBulletin