Source SDK

Source SDK

Not enough ratings
Viewmodel con salpicaduras de sangre - Motor Source
By Oitnemood
Introducción
En este tutorial, configuraremos un sencillo sistema de proxy de materiales que podemos utilizar para superponer una textura de detalle de sangre en nuestro viewmodel basado en el combate cuerpo a cuerpo.

Los resultados finales que se pueden obtener con esto son, por ejemplo, manos y armas cubiertas de mugre, ácido, sangre, agua, superficie de agua de gotas de lluvia animadas, y muchos más elementos de diseño visual.

todo esta basado en la guía oficial de valve (en ingles)
https://developer.valvesoftware.com/wiki/Viewmodel_Blood_Splatter_Overlay
   
Award
Favorite
Favorited
Unfavorite
Advertencia
no se ha checado del todo la guía, así que si tienes un error no dudes en comentarlo, que todavía no estoy para verificar que cosa esta actualizada y que no, aunque bueno en este caso dice que es para el source sdk 2013, así que no debería dar problema si se toma bien los pasos a seguir.
Requisitos
Un mod de la rama del motor Source SDK Master 2013.
Conocimientos principiantes/intermedios de C++.
Conocimiento y familiaridad con texturas y materiales.
Lo que aprenderá
Para crear un nuevo sistema de proxy de materiales utilizando el parámetro $detail.
Para crear una superposición de sangre en un modelo de vista después de disparar texturas de carne o sangre (NPCs incluidos, por supuesto) a corta distancia
La implementación
Antes de empezar, necesitaremos este archivo:
https://pastebin.com/9bJUscyw

créalo si quieres con un archivo de bloc de notas cambiando su formato o copia otro archivo ya existente y borra su código y pon el que aparece ahí
Que pondrás en <directorio de src code > /src/game/client/

comandos a implementar
c_baseplayer.h
En c_baseplayer.h, dentro de la sección public:, añade la siguiente línea:
bool m_bShouldDrawBloodOverlay;

c_baseplayer.cpp
En c_baseplayer.cpp, debajo de RecvPropString( RECVINFO(m_szLastPlaceName) ), añadir:
RecvPropBool( RECVINFO(m_bShouldDrawBloodOverlay) ),

Entonces en el constructor, debajo de ListenForGameEvent( "base_player_teleported" );, añade:
m_bShouldDrawBloodOverlay = false;

player.h
En player.h, dentro de la sección public:, añade la siguiente línea:
CNetworkVar( bool, m_bShouldDrawBloodOverlay ); // ¿Nos han golpeado o nos ha salpicado la sangre?

player.cpp
En player.cpp, dentro del constructor y debajo de m_bitsDamageType = 0;, añade:
m_bShouldDrawBloodOverlay = false;

Al final de la función InitialSpawn( void ), añade:
m_bShouldDrawBloodOverlay = false; // Restablecer el overlay de la sangre

Entonces dentro de IMPLEMENT_SERVERCLASS_ST( CBasePlayer, DT_BasePlayer ), debajo de SendPropString (SENDINFO(m_szLastPlaceName) ), añadir:
SendPropBool( SENDINFO(m_bShouldDrawBloodOverlay) ),

basecombatcharacter.cpp
En basecombatcharacter.cpp, dentro de la función OnTakeDamage_Alive( const CTakeDamageInfo &info ) por encima de return 1;, añadir:
// Maneja el efecto de superposición de salpicaduras de sangre del viewmodel aquí: if ( ( info.GetDamageType() & ( DMG_BULLET | DMG_SLASH | DMG_BLAST | DMG_CLUB | DMG_BUCKSHOT ) ) ) { CBasePlayer *pPlayer = UTIL_GetLocalPlayer(); if ( pPlayer == this ) pPlayer->m_bShouldDrawBloodOverlay = true; pPlayer = ToBasePlayer( info.GetAttacker() ); if ( pPlayer && ( this->BloodColor() != BLOOD_COLOR_MECH ) ) { if ( pPlayer->GetAbsOrigin().DistTo( this->GetAbsOrigin() ) < 200.0f ) pPlayer->m_bShouldDrawBloodOverlay = true; } }
las texturas o materiales "Materials"
VMTs de Viewmodel
Ahora tendrás que editar cada uno de los viewmodel .vmt para incluir el siguiente fragmento de código:
"VertexLitGeneric" { ... "$detail" "detail/blood_detail" "$detailblendmode" "2" "$detailblendfactor" "0.0" "$detailscale" "1.0" "Proxies" { "BloodyTexture" { } } }

Observe cómo estamos llamando a materials/detail/blood_detail.vtf, esta es la textura de detalle de la sangre que se coloca en la parte superior de nuestro viewmodel.
Conclusión:
Ahora todo lo que queda es hacer tu propia textura de detalles de sangre para esto, pero por conveniencia/prueba, puedes descargar la textura de marcador de posición incluida que se encuentra en la sección "Enlaces externos" más abajo.

Y eso es todo, si la configuración es correcta, ahora debería ser capaz de ver la textura de salpicaduras de sangre aparecer en su viewmodel basado en el fragmento de código que colocamos en basecombatcharacter.cpp
Enlaces externos
https ://mega .nz /file/RsNm2DgK#qHysT50ZYbX_WyXg8FcnyO7Bwb88lfHE1qlXo__9FAI
Una textura de detalle de sangre por Ian B.
si no te sale el link, es porque no has quitado los espacios, fíjate bien, si no entiendes cuales son, el mismo link esta en la guía oficial de valve
3 Comments
YTramiro 19 Mar, 2024 @ 11:14pm 
Llevo intentandolo para armas melee aproximadamente 2 días y no consigo que funcione, se maneja todo por vmt, proxies, y $detail asi que no requiere ver en el qc
Oitnemood  [author] 19 Mar, 2024 @ 10:00pm 
@YTramiro no lo he probado, intentalo, igual puedes copiar el archivo o el comando para evitar errores, si quieres revertir el proceso
YTramiro 19 Mar, 2024 @ 9:10pm 
Tienes idea de si es posible hacer compatible un vmt con bloodmap y bilis de boomer en el mismo archivo? precisamente para l4d2, ambos son $details