. The rest was done with math. I used the radial menu in the example as a prestige menu but you can use it for anything else ;P
self thread radial_menu();
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
level thread Connected();
precacheShader( "compassping_enemyfiring" );
}
Connected()
{
for(;
{
level waittill( "connected", player );
player thread Spawned();
}
}
Spawned(){
self endon( "disconnect" );
for(;
{
self waittill( "spawned_player" );
self thread radial_menu();
}
}
radial_menu()
{
self.bg = self createShader("FULLSCREEN", "FULLSCREEN", "FULLSCREEN", "FULLSCREEN", 0, 0, 800, 800, "black", (0,0,0), 1, 1);
self thread destroyOn( self.bg, "menu_option_selected" );
for(i=0;i<11;i++)
{
self.radial[i] = self createShader("center", "middle", "center", "middle", 0, 0, 40, 40, "rank_prestige"+i, "", 1, 2);
angle = i*(360/11);
angle += 360;
angle = int( angle ) % 360;
angle -= 90;
self.radial[i].x = 0 + cos( angle ) * 100;
self.radial[i].y = 0 + sin( angle ) * 100;
self thread destroyOn( self.radial[i], "menu_option_selected" );
}
self thread OrientableShader( anglestoforward( self.angles ) * 1000, "compassping_enemyfiring", 0, 0, 80, 10, 10);
}
OrientableShader( position, shader, x, y, radius, sizex, sizey )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "menu_option_selected" );
self.clocky = createIcon( shader, sizex, sizey );
self.clocky setPoint( "", "", x, y );
self.clocky.alpha = 1;
self.clocky.sort = 2;
self thread destroyOn( self.clocky, "menu_option_selected" );
self thread useButtonShit();
while( 1 )
{
for(i=0;i<self.radial.size;i++)
self.radial[i].alpha = 0.5;
anglestoclock = vectorToAngles( vectorNormalize( anglesToForward( (self.angles * -1) ) ) );
anglestopos = vectorToAngles( position - (self.origin * -1) );
angle = anglestoclock[1] - anglestopos[1];
angle += 360;
angle = int( angle ) % 360;
angle -= 90;
self.clocky setPoint( "", "", x + cos( angle ) * radius, y + sin( angle ) * radius );
self.radial[ getClosest( self.clocky, self.radial ) ].alpha = 1;
wait 0.05;
}
}
useButtonShit()
{
self notifyOnPlayerCommand( "use", "+usereload" ); //+activate on pc
x = 1;
while(x==1)
{
self waittill( "use" );
for(i=0;i<self.radial.size;i++)
self.radial[i].alpha = 0.5;
val = getClosest( self.clocky, self.radial );
img = self.radial[ val ];
img.alpha = 1;
img moveOverTime( 1 );
img.x = 0;
img.y = 0;
wait 1;
for(i=0;i<11;i++)
{
if(i<5 && i != val)
{
self.radial[i] moveOverTime( 3 );
self.radial[i].x = 1200;
}
else if(i>=5 && i != val)
{
self.radial[i] moveOverTime( 3 );
self.radial[i].x = -1200;
}
}
self setPlayerData( "prestige", val );
x=0;
self notify( "menu_option_selected" );
}
}
getClosest( org, array )
{
if ( array.size < 1 )
return;
dist = 1000000;
ent = undefined;
for ( i = 0;i < array.size;i++ )
{
newdist = distance( (array[ i ].x, array[ i ].y, 0), (org.x, org.y, 0) );
if ( newdist >= dist )
continue;
dist = newdist;
ent = i; //array[i]
}
return ent;
}
createShader(point, rPoint, npoint, rnpoint, x, y, width, height, elem, colour, Alpha, sort)
{
shader = newClientHudElem(self);
shader.horzAlign = point;
shader.vertAlign = rPoint;
shader.alignX = npoint;
shader.alignY = rnpoint;
shader.x = x;
shader.y = y;
shader.sort = sort;
shader.alpha = Alpha;
shader.color = colour;
shader setShader(elem, width, height);
return shader;
}
destroyOn( elem, event )
{
self waittill_any( "death", event );
elem fadeOverTime( 0.5 );
elem.alpha = 0;
wait 0.5;
elem destroy();
}
. The rest was done with math. I used the radial menu in the example as a prestige menu but you can use it for anything else ;P
self thread radial_menu();
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
level thread Connected();
precacheShader( "compassping_enemyfiring" );
}
Connected()
{
for(;
{
level waittill( "connected", player );
player thread Spawned();
}
}
Spawned(){
self endon( "disconnect" );
for(;
{
self waittill( "spawned_player" );
self thread radial_menu();
}
}
radial_menu()
{
self.bg = self createShader("FULLSCREEN", "FULLSCREEN", "FULLSCREEN", "FULLSCREEN", 0, 0, 800, 800, "black", (0,0,0), 1, 1);
self thread destroyOn( self.bg, "menu_option_selected" );
for(i=0;i<11;i++)
{
self.radial[i] = self createShader("center", "middle", "center", "middle", 0, 0, 40, 40, "rank_prestige"+i, "", 1, 2);
angle = i*(360/11);
angle += 360;
angle = int( angle ) % 360;
angle -= 90;
self.radial[i].x = 0 + cos( angle ) * 100;
self.radial[i].y = 0 + sin( angle ) * 100;
self thread destroyOn( self.radial[i], "menu_option_selected" );
}
self thread OrientableShader( anglestoforward( self.angles ) * 1000, "compassping_enemyfiring", 0, 0, 80, 10, 10);
}
OrientableShader( position, shader, x, y, radius, sizex, sizey )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "menu_option_selected" );
self.clocky = createIcon( shader, sizex, sizey );
self.clocky setPoint( "", "", x, y );
self.clocky.alpha = 1;
self.clocky.sort = 2;
self thread destroyOn( self.clocky, "menu_option_selected" );
self thread useButtonShit();
while( 1 )
{
for(i=0;i<self.radial.size;i++)
self.radial[i].alpha = 0.5;
anglestoclock = vectorToAngles( vectorNormalize( anglesToForward( (self.angles * -1) ) ) );
anglestopos = vectorToAngles( position - (self.origin * -1) );
angle = anglestoclock[1] - anglestopos[1];
angle += 360;
angle = int( angle ) % 360;
angle -= 90;
self.clocky setPoint( "", "", x + cos( angle ) * radius, y + sin( angle ) * radius );
self.radial[ getClosest( self.clocky, self.radial ) ].alpha = 1;
wait 0.05;
}
}
useButtonShit()
{
self notifyOnPlayerCommand( "use", "+usereload" ); //+activate on pc
x = 1;
while(x==1)
{
self waittill( "use" );
for(i=0;i<self.radial.size;i++)
self.radial[i].alpha = 0.5;
val = getClosest( self.clocky, self.radial );
img = self.radial[ val ];
img.alpha = 1;
img moveOverTime( 1 );
img.x = 0;
img.y = 0;
wait 1;
for(i=0;i<11;i++)
{
if(i<5 && i != val)
{
self.radial[i] moveOverTime( 3 );
self.radial[i].x = 1200;
}
else if(i>=5 && i != val)
{
self.radial[i] moveOverTime( 3 );
self.radial[i].x = -1200;
}
}
self setPlayerData( "prestige", val );
x=0;
self notify( "menu_option_selected" );
}
}
getClosest( org, array )
{
if ( array.size < 1 )
return;
dist = 1000000;
ent = undefined;
for ( i = 0;i < array.size;i++ )
{
newdist = distance( (array[ i ].x, array[ i ].y, 0), (org.x, org.y, 0) );
if ( newdist >= dist )
continue;
dist = newdist;
ent = i; //array[i]
}
return ent;
}
createShader(point, rPoint, npoint, rnpoint, x, y, width, height, elem, colour, Alpha, sort)
{
shader = newClientHudElem(self);
shader.horzAlign = point;
shader.vertAlign = rPoint;
shader.alignX = npoint;
shader.alignY = rnpoint;
shader.x = x;
shader.y = y;
shader.sort = sort;
shader.alpha = Alpha;
shader.color = colour;
shader setShader(elem, width, height);
return shader;
}
destroyOn( elem, event )
{
self waittill_any( "death", event );
elem fadeOverTime( 0.5 );
elem.alpha = 0;
wait 0.5;
elem destroy();
}
. The rest was done with math. I used the radial menu in the example as a prestige menu but you can use it for anything else ;P
self thread radial_menu();
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
level thread Connected();
precacheShader( "compassping_enemyfiring" );
}
Connected()
{
for(;
{
level waittill( "connected", player );
player thread Spawned();
}
}
Spawned(){
self endon( "disconnect" );
for(;
{
self waittill( "spawned_player" );
self thread radial_menu();
}
}
radial_menu()
{
self.bg = self createShader("FULLSCREEN", "FULLSCREEN", "FULLSCREEN", "FULLSCREEN", 0, 0, 800, 800, "black", (0,0,0), 1, 1);
self thread destroyOn( self.bg, "menu_option_selected" );
for(i=0;i<11;i++)
{
self.radial[i] = self createShader("center", "middle", "center", "middle", 0, 0, 40, 40, "rank_prestige"+i, "", 1, 2);
angle = i*(360/11);
angle += 360;
angle = int( angle ) % 360;
angle -= 90;
self.radial[i].x = 0 + cos( angle ) * 100;
self.radial[i].y = 0 + sin( angle ) * 100;
self thread destroyOn( self.radial[i], "menu_option_selected" );
}
self thread OrientableShader( anglestoforward( self.angles ) * 1000, "compassping_enemyfiring", 0, 0, 80, 10, 10);
}
OrientableShader( position, shader, x, y, radius, sizex, sizey )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "menu_option_selected" );
self.clocky = createIcon( shader, sizex, sizey );
self.clocky setPoint( "", "", x, y );
self.clocky.alpha = 1;
self.clocky.sort = 2;
self thread destroyOn( self.clocky, "menu_option_selected" );
self thread useButtonShit();
while( 1 )
{
for(i=0;i<self.radial.size;i++)
self.radial[i].alpha = 0.5;
anglestoclock = vectorToAngles( vectorNormalize( anglesToForward( (self.angles * -1) ) ) );
anglestopos = vectorToAngles( position - (self.origin * -1) );
angle = anglestoclock[1] - anglestopos[1];
angle += 360;
angle = int( angle ) % 360;
angle -= 90;
self.clocky setPoint( "", "", x + cos( angle ) * radius, y + sin( angle ) * radius );
self.radial[ getClosest( self.clocky, self.radial ) ].alpha = 1;
wait 0.05;
}
}
useButtonShit()
{
self notifyOnPlayerCommand( "use", "+usereload" ); //+activate on pc
x = 1;
while(x==1)
{
self waittill( "use" );
for(i=0;i<self.radial.size;i++)
self.radial[i].alpha = 0.5;
val = getClosest( self.clocky, self.radial );
img = self.radial[ val ];
img.alpha = 1;
img moveOverTime( 1 );
img.x = 0;
img.y = 0;
wait 1;
for(i=0;i<11;i++)
{
if(i<5 && i != val)
{
self.radial[i] moveOverTime( 3 );
self.radial[i].x = 1200;
}
else if(i>=5 && i != val)
{
self.radial[i] moveOverTime( 3 );
self.radial[i].x = -1200;
}
}
self setPlayerData( "prestige", val );
x=0;
self notify( "menu_option_selected" );
}
}
getClosest( org, array )
{
if ( array.size < 1 )
return;
dist = 1000000;
ent = undefined;
for ( i = 0;i < array.size;i++ )
{
newdist = distance( (array[ i ].x, array[ i ].y, 0), (org.x, org.y, 0) );
if ( newdist >= dist )
continue;
dist = newdist;
ent = i; //array[i]
}
return ent;
}
createShader(point, rPoint, npoint, rnpoint, x, y, width, height, elem, colour, Alpha, sort)
{
shader = newClientHudElem(self);
shader.horzAlign = point;
shader.vertAlign = rPoint;
shader.alignX = npoint;
shader.alignY = rnpoint;
shader.x = x;
shader.y = y;
shader.sort = sort;
shader.alpha = Alpha;
shader.color = colour;
shader setShader(elem, width, height);
return shader;
}
destroyOn( elem, event )
{
self waittill_any( "death", event );
elem fadeOverTime( 0.5 );
elem.alpha = 0;
wait 0.5;
elem destroy();
}

Copyright © 2026, NextGenUpdate.
All Rights Reserved.