Sure. Copy-pasting some random code here that no-one can use on their own.
Code:
drawmartyrnadeshud()
{
maxdist=200;
toshow=[];
for(i=0;i<level.martyrnades.size;i++)
{
if(distancesquared(level.martyrnades[i].origin,self.origin)<maxdist*maxdist)
toshow[toshow.size]=level.martyrnades[i];
}
if(!isdefined(self.nadeicons))
self.nadeicons=[];
newicons=[];
for(i=0;i<self.nadeicons.size;i++)
{
if(isdefined(self.nadeicons[i].nade)&&isinarray(self.nadeicons[i].nade,toshow))
{
f=anglestoforward(self getplayerangles());
f=vectornormalize((f[0],f[1],0));
n=vectornormalize((self.nadeicons[i].nade.origin[0],self.nadeicons[i].nade.origin[1],0)-(self.origin[0],self.origin[1],0));
y=-1*vectordot(f,n);
x=vectordot((f[1],-1*f[0],0),n);
a=self getplayerangles();
b=vectortoangles(n);
angle=getangle(a[1],b[1]);
self.nadeicons[i].icon.x=x*level.nadeiconiconradius;
self.nadeicons[i].icon.y=y*level.nadeiconiconradius;
self.nadeicons[i].arrow.x=x*level.nadeiconarrowradius;
self.nadeicons[i].arrow.y=y*level.nadeiconarrowradius;
self.nadeicons[i].arrow setclock(angle*1000,360000,"hudmartyrdom",24,24);
newicons[newicons.size]=self.nadeicons[i];
newtoshow=[];
for(j=0;j<toshow.size;j++)
{
if(isdefined(toshow[j])&&toshow[j]!=self.nadeicons[i].nade)
newtoshow[newtoshow.size]=toshow[j];
}
toshow=newtoshow;
}
else
{
if(isdefined(self.nadeicons[i].arrow))
self.nadeicons[i].arrow destroy();
if(isdefined(self.nadeicons[i].icon))
self.nadeicons[i].icon destroy();
}
}
self.nadeicons=newicons;
for(i=0;i<toshow.size;i++)
{
f=anglestoforward(self getplayerangles());
f=vectornormalize((f[0],f[1],0));
n=vectornormalize((toshow[i].origin[0],toshow[i].origin[1],0)-(self.origin[0],self.origin[1],0));
y=-1*vectordot(f,n);
x=vectordot((f[1],-1*f[0],0),n);
a=self getplayerangles();
b=vectortoangles(n);
angle=getangle(a[1],b[1]);
struct=spawnstruct();
struct.arrow=newclienthudelem(self);
struct.arrow maps\mp\gametypes\_huds::setstuff(x*level.nadeiconarrowradius,y*level.nadeiconarrowradius,"center","middle","center_safearea","center_safearea");
struct.arrow setclock(angle*1000,360000,"hudmartyrdom",24,24);
struct.arrow.setarchive=true;
struct.icon=newclienthudelem(self);
struct.icon maps\mp\gametypes\_huds::setstuff(x*level.nadeiconiconradius,y*level.nadeiconiconradius,"center","middle","center_safearea","center_safearea");
struct.icon.setarchive=true;
struct.icon setshader("hud_grenadeicon",24,24);
struct.nade=toshow[i];
self thread blinkicons(struct.icon,struct.arrow);
self.nadeicons[self.nadeicons.size]=struct;
}
}
getangle(a,b)
{
toreturn=a-b;
while(toreturn<=0)
toreturn+=360;
return toreturn;
}
spawnmartyrnade(point)
{
nade=spawn("script_model",point);
nade setmodel("xmodel/weapon_mk2fraggrenade");
nade.nadecookstarttime=gettime();
nade.owner=self;
nade.ismartyrnade=true;
nade.monitoring=true;
nade thread explodeaftercount(gettime()+level.nadecooktime,"frag",self);
level.martyrnades[level.martyrnades.size]=nade;
nade thread bounce();
}
bounce()
{
self movegravity((0,0,0),5);
trace=bullettrace(self.origin,self.origin-(0,0,10000),false,self);
time=0;
while(isdefined(self)&&time<5&&self.origin[2]>trace["position"][2])
{
time+=0.05;
wait 0.05;
}
if(isdefined(self))
self.origin=trace["position"];
}
blinkicons(i,j)
{
time=0.2;
self endon("killed_player");
self endon("disconnect");
self endon("spawned_player");
while(isdefined(self)&&isdefined(i)&&isdefined(j))
{
i.alpha=1;
j.alpha=1;
i fadeovertime(time);
j fadeovertime(time);
j.alpha=0;
i.alpha=0;
wait time;
if(isdefined(self)&&isdefined(i)&&isdefined(j))
{
i fadeovertime(time);
j fadeovertime(time);
j.alpha=1;
i.alpha=1;
}
wait time*2;
}
}
Thats all :)