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 ?
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;
}