Muzzle Flash Lighting
January 2024
Dieses Tutorial zeigt, wie du ein Mündungsfeuer wie in "Counter-Strike: Source" erzeugts, welches dynamisch auftaucht und die Umgebung beleuchtet. Diese Art von Licht wird "dlights" genannt.
Dieser Code wurde für eine Orange Box basierte Modifikation entwurfen, Singleplayer oder Multiplayer. Es funktioniert ebenfalls mit NPCs, vorausgesetzt, sie funktionieren.
Dlight-basiertes Mündungsfeuer implementieren
Der code beginnt! Nur ein paar kleine Änderungen sind notwendig, um das Mündingsfeuer besser als je zuvor aussehen zu lassen.
Öffne als erstes c_baseanimating.cpp und suche nach der Funktion void C_BaseAnimating::ProcessMuzzleFlashEvent()
Vector vAttachment;
QAngle dummyAngles;
GetAttachment( attachment, vAttachment, dummyAngles );
// Ein elight erstellen
dlight_t *el = effects->CL_AllocElight( LIGHT_INDEX_MUZZLEFLASH + index );
el->origin = vAttachment;
el->radius = random->RandomInt( 32, 64 );
el->decay = el->radius / 0.05f;
el->die = gpGlobals->curtime + 0.05f;
el->color.r = 255;
el->color.g = 192;
el->color.b = 64;
el->color.exponent = 5;
Wie du vielleicht bemerkt hast, wurde Valve hier ein wenig verrückt und das ergebnis war ein scheinbar hässliches Mündungsfeuer. Dieses Tutorial dreht sich darum, Dinge hübscher zu machen, also werden wir das ändern. Ersetze die Einträge oben mit diesen:
Vector vAttachment, vAng;
QAngle angles;
GetAttachment( attachment, vAttachment, angles );
AngleVectors( angles, &vAng );
vAttachment += vAng * 2;
dlight_t *dl = effects->CL_AllocDlight ( index );
dl->origin = vAttachment;
dl->color.r = 231;
dl->color.g = 219;
dl->color.b = 14;
dl->die = gpGlobals->curtime + 0.05f;
dl->radius = random->RandomFloat( 245.0f, 256.0f );
dl->decay = 512.0f;
Nachtrag: Der Farbcode wurde verändert. Standardmäßig war es auf eine Magenta-nahe Farbe gesetzt, aber ein gutes Mündungsfeuer ist näher an weiß. Du kannst 252, 238, 128 für ein realistisch ausgewaschenes Geld probieren.
Bemerkungen
Ich arbeite derzeit an dieser Idee weiter. Das Update wird visuellere Effekte zu dieser Idee hinzufügen, um ein realistischeres und saubereres Aussehen des Mündungsfeuers zu erzeugen. Das Update wird nur in der Orange Box Version der Engine funktionieren. Ein Link wird HIER (oder auf der originalen Seite ) zur Verfügung gestellt, wenn das neue Mündungsfeuer fertig ist.
EINE ANMERKUNG VON GAMERMAN12: Ich habe den Code angepasst, damit die Lichter nach dem Feuern zerfallen, damit es einen Blitzeffekt beim Feuern mit Maschinengewehren gibt. Und es verblasst, damit es etwas realistischer ist. Danke.
Episode 2 Fix
Wenn du einen Fehler (error C2065: 'Attachment' : undeclared identifier) während des Bauens erhälst, probiere stattdessen folgendes:
Vector vAttachment, vAng;
QAngle angles;
GetAttachment( 1, vAttachment, angles ); // 1 statt "attachment"
AngleVectors( angles, &vAng );
vAttachment += vAng * 2;
dlight_t *dl = effects->CL_AllocDlight ( index );
dl->origin = vAttachment;
dl->color.r = 231;
dl->color.g = 219;
dl->color.b = 14;
dl->die = gpGlobals->curtime + 0.05f;
dl->radius = random->RandomFloat( 245.0f, 256.0f );
dl->decay = 512.0f;