//Shitty ass coding by me...
#library "msx_main"
#include "zcommon.acs"
#define METEORP_MINDIST 150
#define METEORP_MAXDIST 1200
//  HUD graphic arrays
str healthGFX[42]={
	"NULLI","HBAR005","HBAR010","HBAR015","HBAR020","HBAR025","HBAR030",
	"HBAR035","HBAR040","HBAR045","HBAR050","HBAR055","HBAR060","HBAR065",
	"HBAR070","HBAR075","HBAR080","HBAR085","HBAR090","HBAR095","HBAR100",
	"HBAR105","HBAR110","HBAR115","HBAR120","HBAR125","HBAR130","HBAR135",
	"HBAR140","HBAR145","HBAR150","HBAR155","HBAR160","HBAR165","HBAR170",
	"HBAR175","HBAR180","HBAR185","HBAR190","HBAR195","HBAR200","HBAR200",};
str staminaGFX[12]={
	"NULLI","EBAR010","EBAR020","EBAR030","EBAR040","EBAR050","EBAR060",
	"EBAR070","EBAR080","EBAR090","EBAR100","EBAR100",};		
str visorcrackGFX[6]={
	"HUDBRK1","HUDBRK2","HUDBRK3","HUDBRK4","HUDBRK5","HUDBRK6",};
str armorGFX[82]={
	"NULLI","ABAR005","ABAR010","ABAR015","ABAR020","ABAR025","ABAR030",
	"ABAR035","ABAR040","ABAR045","ABAR050","ABAR055","ABAR060","ABAR065",
	"ABAR070","ABAR075","ABAR080","ABAR085","ABAR090","ABAR095","ABAR100",
	"ABAR105","ABAR110","ABAR115","ABAR120","ABAR125","ABAR130","ABAR135",
	"ABAR140","ABAR145","ABAR150","ABAR155","ABAR160","ABAR165","ABAR170",
	"ABAR175","ABAR180","ABAR185","ABAR190","ABAR195","ABAR200","ABAR205",
	"ABAR210","ABAR215","ABAR220","ABAR225","ABAR230","ABAR235","ABAR240",
	"ABAR245","ABAR250","ABAR255","ABAR260","ABAR265","ABAR270","ABAR275",
	"ABAR280","ABAR285","ABAR290","ABAR295","ABAR300","ABAR305","ABAR310",
	"ABAR315","ABAR320","ABAR325","ABAR330","ABAR335","ABAR340","ABAR345",
	"ABAR350","ABAR355","ABAR360","ABAR365","ABAR370","ABAR375","ABAR380",
	"ABAR385","ABAR390","ABAR395","ABAR400","ABAR400",};
str jetpacknums[101]={
	"NULLI","JPN1","JPN2","JPN3","JPN4","JPN5","JPN6","JPN7","JPN8","JPN9",
	"JPN10","JPN11","JPN12","JPN13","JPN14","JPN15","JPN16","JPN17","JPN18",
	"JPN19","JPN20","JPN21","JPN22","JPN23","JPN24","JPN25","JPN26","JPN27",
	"JPN28","JPN29","JPN30","JPN31","JPN32","JPN33","JPN34","JPN35","JPN36",
	"JPN37","JPN38","JPN39","JPN40","JPN41","JPN42","JPN43","JPN44","JPN45",
	"JPN46","JPN47","JPN48","JPN49","JPN50","JPN51","JPN52","JPN53","JPN54",
	"JPN55","JPN56","JPN57","JPN58","JPN59","JPN60","JPN61","JPN62","JPN63",
	"JPN64","JPN65","JPN66","JPN67","JPN68","JPN69","JPN70","JPN71","JPN72",
	"JPN73","JPN74","JPN75","JPN76","JPN77","JPN78","JPN79","JPN80","JPN81",
	"JPN82","JPN83","JPN84","JPN85","JPN86","JPN87","JPN88","JPN89","JPN90",
	"JPN91","JPN92","JPN93","JPN94","JPN95","JPN96","JPN97","JPN98","JPN99",
	"JPN100",};
str medkitnums[16]={
		"NULLI","MEDNU1","MEDNU2","MEDNU3","MEDNU4","MEDNU5","MEDNU6","MEDNU7",
		"MEDNU8","MEDNU9","MEDNU10","MEDNU11","MEDNU12","MEDNU13","MEDNU14","MEDNU15",};
str armorcnums[11]={
		"NULLI","ARMC1","ARMC2","ARMC3","ARMC4","ARMC5","ARMC6","ARMC7","ARMC8",
		"ARMC9","ARMC10",};
str grenadenums[16]={
		"NULLI","GRCO1","GRCO2","GRCO3","GRCO4","GRCO5","GRCO6","GRCO7","GRCO8",
		"GRCO9","GRCO10","GRCO11","GRCO12","GRCO13","GRCO14","GRCO15",};
str reserveGFX[22]={
		"RBAR000","RBAR005","RBAR010","RBAR015","RBAR020","RBAR025","RBAR030",
	    "RBAR035","RBAR040","RBAR045","RBAR050","RBAR055","RBAR060","RBAR065",
	    "RBAR070","RBAR075","RBAR080","RBAR085","RBAR090","RBAR095","RBAR100","RBAR100",};
str pistolGFX[10]={
		"GPIS0","GPIS1","GPIS2","GPIS3","GPIS4","GPIS5","GPIS6","GPIS7","GPIS8","GPIS9",};
str ashotgunGFX[17]={
		"ASHT0","ASHT1","ASHT2","ASHT3","ASHT4","ASHT5","ASHT6","ASHT7","ASHT8",
		"ASHT9","ASHT10","ASHT11","ASHT12","ASHT13","ASHT14","ASHT15","ASHT16",};
str nailshtGFX[5]={
		"NSHT0","NSHT1","NSHT2","NSHT3","NSHT4",};
str arifleGFX[37]={
		"ARIF0","ARIF1","ARIF2","ARIF3","ARIF4","ARIF5","ARIF6","ARIF7","ARIF8",
		"ARIF9","ARIF10","ARIF11","ARIF12","ARIF13","ARIF14","ARIF15","ARIF16",
		"ARIF17","ARIF18","ARIF19","ARIF20","ARIF21","ARIF22","ARIF23","ARIF24",
		"ARIF25","ARIF26","ARIF27","ARIF28","ARIF29","ARIF30","ARIF31","ARIF32",
		"ARIF33","ARIF34","ARIF35","ARIF36",};
str cannonGFX[31]={
		"CANN0","CANN1","CANN2","CANN3","CANN4","CANN5","CANN6","CANN7","CANN8",
		"CANN9","CANN10","CANN11","CANN12","CANN13","CANN14","CANN15","CANN16",
		"CANN17","CANN18","CANN19","CANN20","CANN21","CANN22","CANN23","CANN24",
		"CANN25","CANN26","CANN27","CANN28","CANN29","CANN30",};
str cpulseGFX[81]={
		"CPUL0","CPUL1","CPUL2","CPUL3","CPUL4","CPUL5","CPUL6","CPUL7","CPUL8",
		"CPUL9","CPUL10","CPUL11","CPUL12","CPUL13","CPUL14","CPUL15","CPUL16",
		"CPUL17","CPUL18","CPUL19","CPUL20","CPUL21","CPUL22","CPUL23","CPUL24",
		"CPUL25","CPUL26","CPUL27","CPUL28","CPUL29","CPUL30","CPUL31","CPUL32",
		"CPUL33","CPUL34","CPUL35","CPUL36","CPUL37","CPUL38","CPUL39","CPUL40",
		"CPUL41","CPUL42","CPUL43","CPUL44","CPUL45","CPUL46","CPUL47","CPUL48",
		"CPUL49","CPUL50","CPUL51","CPUL52","CPUL53","CPUL54","CPUL55","CPUL56",
		"CPUL57","CPUL58","CPUL59","CPUL60","CPUL61","CPUL62","CPUL63","CPUL64",
		"CPUL65","CPUL66","CPUL67","CPUL68","CPUL69","CPUL70","CPUL71","CPUL72",
		"CPUL73","CPUL74","CPUL75","CPUL76","CPUL77","CPUL78","CPUL79","CPUL80",};
str snipergaussGFX[6]={
		"SGRF0","SGRF1","SGRF2","SGRF3","SGRF4","SGRF5",};
str tempGFX[22]={
		"HBAR000","TEMP5","TEMP10","TEMP15","TEMP20","TEMP25","TEMP30","TEMP35",
		"TEMP40","TEMP45","TEMP50","TEMP55","TEMP60","TEMP65","TEMP70","TEMP75",
		"TEMP80","TEMP85","TEMP90","TEMP95","TEMP100","TEM100W",};
str shldpow_rtdGFX[2]={"SHLDRTR0","SHLDRTR1",};
str shld_malfunc[2]={"SHDMALF0","SHDMALF1",};
//crosshairs
str xhairGFX[2][4]={
{"HXHR_E","HXHR_W","HXHR_N","HXHR_S"},
{"HXHA_E","HXHA_W","HXHA_N","HXHA_S"}};
//Weapon magazine numbers
str clipnumBGFX[2][10]={
{"CB1D0","CB1D1","CB1D2","CB1D3","CB1D4","CB1D5","CB1D6","CB1D7","CB1D8","CB1D9"},
{"CB2D0","CB2D1","CB2D2","CB2D3","CB2D4","CB2D5","CB2D6","CB2D7","CB2D8","CB2D9"}};
str clipnumYGFX[2][10]={
{"CY1D0","CY1D1","CY1D2","CY1D3","CY1D4","CY1D5","CY1D6","CY1D7","CY1D8","CY1D9"},
{"CY2D0","CY2D1","CY2D2","CY2D3","CY2D4","CY2D5","CY2D6","CY2D7","CY2D8","CY2D9"}};
str clipnumRGFX[2]={"CR1N0","CR2N0",};
//Ammo reserve numbers
str resnumBGFX[3][10]={
{"RB1D0","RB1D1","RB1D2","RB1D3","RB1D4","RB1D5","RB1D6","RB1D7","RB1D8","RB1D9"},
{"RB2D0","RB2D1","RB2D2","RB2D3","RB2D4","RB2D5","RB2D6","RB2D7","RB2D8","RB2D9"},
{"RB3D0","RB3D1","RB3D2","RB3D3","RB3D4","RB3D5","RB3D6","RB3D7","RB3D8","RB3D9"}};
str resnumYGFX[3][10]={
{"RY1D0","RY1D1","RY1D2","RY1D3","RY1D4","RY1D5","RY1D6","RY1D7","RY1D8","RY1D9"},
{"RY2D0","RY2D1","RY2D2","RY2D3","RY2D4","RY2D5","RY2D6","RY2D7","RY2D8","RY2D9"},
{"RY3D0","RY3D1","RY3D2","RY3D3","RY3D4","RY3D5","RY3D6","RY3D7","RY3D8","RY3D9"}};
//Ammo max capacity numbers
str maxnumBGFX[3][10]={
{"MB1D0","MB1D1","MB1D2","MB1D3","MB1D4","MB1D5","MB1D6","MB1D7","MB1D8","MB1D9"},
{"MB2D0","MB2D1","MB2D2","MB2D3","MB2D4","MB2D5","MB2D6","MB2D7","MB2D8","MB2D9"},
{"MB3D0","MB3D1","MB3D2","MB3D3","MB3D4","MB3D5","MB3D6","MB3D7","MB3D8","MB3D9"}};
str maxnumYGFX[3][10]={
{"MY1D0","MY1D1","MY1D2","MY1D3","MY1D4","MY1D5","MY1D6","MY1D7","MY1D8","MY1D9"},
{"MY2D0","MY2D1","MY2D2","MY2D3","MY2D4","MY2D5","MY2D6","MY2D7","MY2D8","MY2D9"},
{"MY3D0","MY3D1","MY3D2","MY3D3","MY3D4","MY3D5","MY3D6","MY3D7","MY3D8","MY3D9"}};
int shield_state=1;
int relobeepcheck=0;
int randstore[2]={0,0};
int pfMAX_dmgbon[2]={0,0};

script "set_SGAcc_rand"(int val,int fic,int slot){
	int res;
	res=random(-val,val);
	if(res<0){
		randstore[slot]=res-fic;}
	else if(res>0){
		randstore[slot]=res+fic;}
	else{
		if(random(0,1)==1){
			randstore[slot]=res+fic;}
		else{
			randstore[slot]=res-fic;}}}
script "get_SGAcc_rand"(int slot){SetResultValue(randstore[slot]);}
script "powfist_aeroslam"(void){ //powfist_meteorattack
	int plyrZ=(GetActorZ(0)-GetActorFloorZ(0))>>16;
	if(GetActorPitch(0)>=0.12||(plyrZ>=METEORP_MINDIST && plyrZ<=METEORP_MAXDIST)){
		ThrustThingZ(0,plyrZ,1,1);}}
script "set_powf-bonusdamage"(void){
	int armour=checkinventory("armor");
	//Sets impact damage bonus
	pfMAX_dmgbon[0]=armour*5; 
	//Sets radius damage bonus
	pfMAX_dmgbon[1]=armour*3; 
	takeinventory("BasicArmor",999);
	terminate;}
script "get_powf-bonusdamage"(int slot){SetResultValue(pfMAX_dmgbon[slot]);}
function void clear_image(int pid){
	setfont("NULLI");
	hudmessage(s:"A"; 0,pid,0,0.1,0.1,0);}
//Widescreen code - Original code by CommanderZ(from the RGA mod)
function bool is4to3(void){
	int w=GetScreenWidth();
	int h=GetScreenHeight();
	if((w==320 && h==240)||(w==400 && h==300)||(w==512 && h==384)||(w==576 && h==432)||
		(w==640 && h==480)||(w==800 && h==600)||(w==1024 && h==768)||(w==1152 && h==1280)||
		(w==1280 && h==960)||(w==1400 && h==1050)){
		return true;}   
	return false;}
function bool is5to4(void){
	int w=GetScreenWidth();
	int h=GetScreenHeight();
	if((w==320 && h==256)||(w==360 && h==288)||(w==720 && h==576)||(w==1280 && h==1024)){
		return true;}   
	return false;}
function bool is16to9(void){
	int w=GetScreenWidth();
	int h=GetScreenHeight();
	if((w==1280 && h==720)||(w==1024 && h==576)||(w==1600 && h==900)||(w==640 && h==360)||
		(w==800 && h==450)||(w==848 && h==480)||(w==1024 && h==576)||(w==1152 && h==648)||
		(w==1280 && h==720)||(w==1400 && h==787)||(w==1769 && h==992)||(w==1920 && h==1080)){
		return true;}   
	return false;}
function bool is16to10(void){
	int w=GetScreenWidth();
	int h=GetScreenHeight();
	if((w==360 && h==240)||(w==400 && h==256)||(w==720 && h==480)||(w==1600 && h==1024)||
		(w==1680 && h==1050)||(w==1280 && h==800)||(w==800 && h==500)||(w==1024 && h==640)||
		(w==1152 && h==720)||(w==1280 && h==1280)||(w==1400 && h==875)||(w==1920 && h==1200)){
		return true;}   
   return false;}
function void drawStretchedImage(int id,int imageWidth,int imageHeight,int time,int fadeINtime,int fadeOUTtime,int mode){
   int hudScreenWidth=imageHeight*4 / 3*imageWidth / imageHeight;
   int hudScreenHeight=imageHeight;
   if(is4to3()){                     
      hudScreenWidth=hudScreenWidth / 4*3;}
   else if(is5to4()){
      hudScreenWidth=hudScreenWidth / 4*3;
      hudScreenHeight=750;}
   else if(is16to9()){
      hudScreenWidth=hudScreenWidth / 16*9;}
   else if(is16to10()){                     
      hudScreenWidth=hudScreenWidth / 16*10;}
   else{
      hudScreenWidth=1280;
      log(s:"unknown resolution- please choose a valid resolution from the SET VIDEO MODE menu.");}
   SetHudSize(hudScreenWidth,hudScreenHeight,1); 
   switch(mode){
		case 0: HudMessage(s:"a"; HUDMSG_FADEINOUT|HUDMSG_LAYER_UNDERHUD,id,CR_UNTRANSLATED,(hudScreenWidth/ 2)* 65536,(hudScreenHeight/ 2)* 65536,time,fadeINtime,fadeOUTtime); 
		break;
		case 1: HudMessage(s:"a"; HUDMSG_FADEINOUT,id,CR_UNTRANSLATED,(hudScreenWidth/ 2)* 65536,(hudScreenHeight/ 2)* 65536,time,fadeINtime,fadeOUTtime); 
		break;}}
function void drawStretchedPlainImage(int id,int imageWidth,int imageHeight,int time,int mode){
   int hudScreenWidth=imageHeight*4 / 3*imageWidth / imageHeight;
   int hudScreenHeight=imageHeight;
   if(is4to3()){                     
      hudScreenWidth=hudScreenWidth / 4*3;}
   else if(is5to4()){
      hudScreenWidth=hudScreenWidth / 4*3;
      hudScreenHeight=750;}
   else if(is16to9()){
      hudScreenWidth=hudScreenWidth / 16*9;}
   else if(is16to10()){                     
      hudScreenWidth=hudScreenWidth / 16*10;}
   else{
      hudScreenWidth=1280;
      log(s:"unknown resolution- please choose a valid resolution from the SET VIDEO MODE menu.");}
   SetHudSize(hudScreenWidth,hudScreenHeight,1);
	switch(mode){
		case 0:HudMessage(s:"a"; HUDMSG_LAYER_UNDERHUD,id,CR_UNTRANSLATED,(hudScreenWidth/ 2)* 65536,(hudScreenHeight/ 2)* 65536,time); break;
		case 1:HudMessage(s:"a"; 0,id,CR_UNTRANSLATED,(hudScreenWidth/ 2)* 65536,(hudScreenHeight/ 2)* 65536,time); break;}}

function void drawHUDelement(int id,int x,int y,int ealpha){
	sethudsize(800,600,1);
	hudmessage(s:"A"; HUDMSG_ALPHA|HUDMSG_LAYER_UNDERHUD|HUDMSG_NOTWITHFULLMAP,id,CR_UNTRANSLATED,x,y,0,ealpha);}

function void drawTimedOutHUDelement(int id,int x,int y,int staytime,int fadespeed,int ealpha){
	sethudsize(800,600,1);
	hudmessage(s:"A";HUDMSG_FADEOUT|HUDMSG_ALPHA|HUDMSG_LAYER_UNDERHUD|HUDMSG_NOTWITHFULLMAP,id,CR_UNTRANSLATED,x,y,staytime,fadespeed,ealpha);}

function void drawTimedInOutHUDelement(int id,int x,int y,int staytime,int fadeinspeed,int fadeoutspeed,int ealpha){
	sethudsize(800,600,1);
	hudmessage(s:"A";HUDMSG_FADEINOUT|HUDMSG_ALPHA|HUDMSG_LAYER_UNDERHUD|HUDMSG_NOTWITHFULLMAP,id,CR_UNTRANSLATED,x,y,staytime,fadeinspeed,fadeoutspeed,ealpha);}	
	
int hdif=0;
function int gethudratiodiff(void){
	int diff;
	if(is4to3()){                     
		diff=0.0;}
	else if(is5to4()){
		diff=0.0;}
	else if(is16to9()){
		diff=117.0;}
	else if(is16to10()){                     
		diff=67.0;}
	else{
		diff=0.0;
		print(s:"Invalid resolution- please choose a valid resolution from the SET VIDEO MODE menu.");}
	return diff;}
// HUD Render scripts //
script "msx_hud-main" enter{
	int activ_weap=0; 
	while(true){	
		hdif=gethudratiodiff();
		if(checkinventory("health")>0){
			// The code for rendering the helmet used to be here. It's gone now,
			// because that code needs to be repeated if the player changes the
			// CVar.
			health_gauge(checkinventory("health"));
			stamina_gauge(checkinventory("PlayerStamina"));
			shield_gauge(checkinventory("armor"));
			plyr_shield_state(checkinventory("armor"));
			if(checkweapon("golampistol")==1)
				activ_weap=1;
			else if(checkweapon("hydrashotgun")==1)
				activ_weap=2;
			else if(checkweapon("barracudarifle")== 1)
				activ_weap=3;
			else if(checkweapon("raptorshotgun")==1)
				activ_weap=4;
			else if(checkweapon("tauruscannon")==1)
				activ_weap=5;
			else if(checkweapon("chimerarifle")==1)
				activ_weap=6;
			else if(checkweapon("orionSniper")==1)
				activ_weap=7;	
			else
				activ_weap=99;
			magazine_ammo(activ_weap);
			reserve_ammo(activ_weap);
			key_bar();
			medkit_counter(checkinventory("healthstim"));
			shield_booster(checkinventory("shieldbooster"));
			jetpack_counter(checkinventory("jetpack"));
			grenade_counter(checkinventory("grenades"));
			lightamp_counter(checkinventory("LightampUpgrade"));
			hazscreen_counter(checkinventory("HazardScreen"));}
		else{
			for(int i=1052; i<=1120; i++)
				clear_image(i);}	
		delay(1);}}
script "msx-helmetvisordraw" ENTER{
	if(checkinventory("health")>0){
		int player = PlayerNumber();
		if(GetUserCVar(player,"MSfiXd_ShowHelmet")==1){
			setfont("HUDHELM");
			drawHUDelement(1050,-133.1,0.1,1.0);
			setfont("HUDDISPL");
			drawHUDelement(1051,-133.1,0.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));}
		else{
			setfont("TNT1A0");
			drawHUDelement(1050,-133.1,0.1,1.0);
			setfont("TNT1A0");
			drawHUDelement(1051,-133.1,0.1,1.0);}}
	delay(1);
	restart;}
function void health_gauge(int health){ //draw health bar
	int player = PlayerNumber();
    sethudsize(800,600,1);
	if((health<=80) && (health>40)){
		setfont("HGYELLO");}
	else if(health<=40){
		setfont("HGRED");}
	else if(health>200){
		setfont("HGVERD");}
	else{
		setfont("HGBLUE");}
	drawHUDelement(1052,19.1-hdif,290.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));
	setfont(healthGFX[(health+9)/10]);
	drawHUDelement(1053,32.1-hdif,314.1,GetUserCVar(player,"MSfiXd_HUDGaugeBitOpacity"));}
function void stamina_gauge(int stamina){ //draw stamina bar
	int player = PlayerNumber();
	sethudsize(800,600,1);
	setfont(staminaGFX[(stamina+9)/10]);
	drawHUDelement(1055,400.0,525.1,GetUserCVar(player,"MSfiXd_HUDGaugeBitOpacity"));}
function void plyr_shield_state(int pshield){ //draw shield bar
	if(pshield>0){
		if(shield_state!=1){ 
			shield_state=1;
			SetActorState(0,"shield_on",true);}}
	else{
		if(shield_state!=0){ 
			shield_state=0;
			SetActorState(0,"shield_off",true);}}}
function void shield_gauge(int pshield){
	int player = PlayerNumber();
	sethudsize(800,600,1);
	//shield icon
	if(pshield==200){
		shldrchrg_snd();}
	if(pshield==0){
		setfont("AGWHIT");}
	else if((pshield<=40) && (pshield>0)) 
		setfont("AGYELLO");  
	else if(pshield>200){
		setfont("AGVERD");}
	else{
		setfont("AGBLUE");}
	drawHUDelement(1056,6.1-hdif,45.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));	
	//shield bar
	if(pshield<=200){
		setfont(armorGFX[(pshield+4)/5]);}
	else{
		setfont(armorGFX[((pshield+9)/10)+20]);}
	drawHUDelement(1057,14.1-hdif,69.1,GetUserCVar(player,"MSfiXd_HUDGaugeBitOpacity"));}
function void magazine_ammo(int activ_weap){ //draw magazine ammo bar
	int player = PlayerNumber();
	int clip;
	switch(activ_weap){
		case 1: // Pistol
			clip=checkinventory("golamclip");
			if(clip>2){
				print_clipnum(clip,0);
				setfont("CGBLUE");}
			else if((clip<=2) && (clip>0)){
				print_clipnum(clip,1);
				setfont("CGYELLO");}
			else{
				print_clipnum(clip,2);
				setfont("CGRED");}
			drawHUDelement(1058,794.2+hdif,60.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));
			setfont(pistolGFX[clip]);
			drawHUDelement(1059,787.2+hdif,66.1,GetUserCVar(player,"MSfiXd_HUDGaugeBitOpacity"));
			break;
		case 2: // Auto-Shotgun
			clip=checkinventory("hydraclip");
			if(clip>4){ //2
				print_clipnum(clip,0);
				setfont("CGBLUE");}
			else if((clip<=4) && (clip>0)){ //2
				print_clipnum(clip,1);
				setfont("CGYELLO");}
			else{
				print_clipnum(clip,2);
				setfont("CGRED");}
			drawHUDelement(1058,794.2+hdif,60.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));
			setfont(ashotgunGFX[clip]);
			drawHUDelement(1059,787.2+hdif,66.1,GetUserCVar(player,"MSfiXd_HUDGaugeBitOpacity"));
			break;
		case 3: // Assault Rifle
			clip=checkinventory("barraclip");
			if(clip>9){
				print_clipnum(clip,0);
				setfont("CGBLUE");}
			else if((clip<=9) && (clip>0)){
				print_clipnum(clip,1);
				setfont("CGYELLO");}
			else{
				print_clipnum(clip,2);
				setfont("CGRED");}
			drawHUDelement(1058,794.2+hdif,60.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));
			setfont(arifleGFX[clip]);
			drawHUDelement(1059,787.2+hdif,66.1,GetUserCVar(player,"MSfiXd_HUDGaugeBitOpacity"));
			break;
		case 4: // Nail-Shotgun
			clip=checkinventory("raptorchamber");
			if(clip>1){
				print_clipnum(clip,0);
				setfont("CGBLUE");}
			else if((clip<=1) && (clip>0)){
				print_clipnum(clip,1);
				setfont("CGYELLO");}
			else{
				print_clipnum(clip,2);
				setfont("CGRED");}
			drawHUDelement(1058,794.2+hdif,60.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));
			setfont(nailshtGFX[clip]);
			drawHUDelement(1059,787.2+hdif,66.1,GetUserCVar(player,"MSfiXd_HUDGaugeBitOpacity"));
			break;
		case 5: //Auto-Cannon
			clip=checkinventory("cannonmag");
			if(clip>7){
				print_clipnum(clip,0);
				setfont("CGBLUE");}
			else if((clip<=7) && (clip>0)){
				print_clipnum(clip,1);
				setfont("CGYELLO");}
			else{
				print_clipnum(clip,2);
				setfont("CGRED");}
			drawHUDelement(1058,794.2+hdif,60.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));
			setfont(cannonGFX[clip]);
			drawHUDelement(1059,787.2+hdif,66.1,GetUserCVar(player,"MSfiXd_HUDGaugeBitOpacity"));
			break;
		case 6: //Concussion Rifle
			clip=checkinventory("criflecell");
			if(clip>20){
				print_clipnum(clip,0);
				setfont("CGBLUE");}
			else if((clip<=20) && (clip>0)){
				print_clipnum(clip,1);
				setfont("CGYELLO");}
			else{
				print_clipnum(clip,2);
				setfont("CGRED");}
			drawHUDelement(1058,794.2+hdif,60.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));
			setfont(cpulseGFX[clip]);
			drawHUDelement(1059,787.2+hdif,66.1,GetUserCVar(player,"MSfiXd_HUDGaugeBitOpacity"));
			break;
		case 7: //Gauss Rifle
			clip=checkinventory("sgaussmag");
			if(clip>1){
				print_clipnum(clip,0);
				setfont("CGBLUE");}
			else if((clip<=1) && (clip>0)){
				print_clipnum(clip,1);
				setfont("CGYELLO");}
			else{
				print_clipnum(clip,2);
				setfont("CGRED");}
			drawHUDelement(1058,794.2+hdif,60.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));
			setfont(snipergaussGFX[clip]);
			drawHUDelement(1059,787.2+hdif,66.1,GetUserCVar(player,"MSfiXd_HUDGaugeBitOpacity"));
			break;
		default:
			sethudsize(800,600,1);
			setfont("CGBLUE");
			drawHUDelement(1058,794.2+hdif,60.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));
			for(int i=1059; i<=1062; i++)
				clear_image(i);
			break;}}
function void print_clipnum(int clip,int x){ // Numerical ammo readout for loaded clip/magazine/clipazine/maggaclip/whatever /k/ gets fannyflustered by the most
	int player = PlayerNumber();
	int a=clip/10;
	int b=clip-(a*10);
	sethudsize(800,600,1);
	switch(x){
		case 0:
			setfont(clipnumBGFX[0][b]);
			drawHUDelement(1060,780.2+hdif,48.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			setfont(clipnumBGFX[1][a]);
			drawHUDelement(1061,780.2+hdif,48.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			break;
		case 1:
			setfont(clipnumYGFX[0][b]);
			drawHUDelement(1060,780.2+hdif,48.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			setfont(clipnumYGFX[1][a]);
			drawHUDelement(1061,780.2+hdif,48.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			break;
		case 2:
			setfont(clipnumRGFX[0]);
			drawHUDelement(1060,780.2+hdif,48.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			setfont(clipnumRGFX[1]);
			drawHUDelement(1061,780.2+hdif,48.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			break;}}
//draw reserve ammo bar
function void reserve_ammo(int activ_weap){
	int player = PlayerNumber();
	str aresclass;
	int ammomax;
	int currentammo;
	int cammogauge;
	if(activ_weap!=99){
		switch(activ_weap){
			case 1:
				aresclass="pistol_ammo";
				break;
			case 2:
				aresclass="autoshot_ammo";
				break;
			case 3:
				aresclass="arifle_ammobox";
				break;
			case 4:
				aresclass="nailshot_ammo";
				break;
			case 5:
				aresclass="cannon_ammo";
				break;
			case 6:
				aresclass="crifle_ammo";
				break;
			case 7:
				aresclass="sgauss_ammo";
				break;}	
		ammomax=getammocapacity(aresclass);
		currentammo=checkinventory(aresclass);
		cammogauge=(currentammo*100)/ammomax;
		//reserve ammo icon
		if(cammogauge>10){
			print_reservenums(currentammo,0);
			print_maxresnums(ammomax,0);
			setfont("RGBLUE");}
		else if(cammogauge<=10){
			print_reservenums(currentammo,1);
			print_maxresnums(ammomax,1);
			setfont("RGYELLO");}
		drawHUDelement(1063,774.2+hdif,319.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));
		//reserve ammo bar
		sethudsize(800,600,1);	
		setfont(reserveGFX[(cammogauge+4)/5]);
		drawHUDelement(1064,766.2+hdif,325.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));}
	else{
		setfont("RGBLUE");
		drawHUDelement(1063,774.2+hdif,319.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));
		for(int i=1064; i<=1070; i++)
			clear_image(i);}}
function void print_reservenums(int currentammo,int x){
	int player = PlayerNumber();
	int a=currentammo/100;
	int m=currentammo-(a*100);
	int b=m/10;
	int c=m-(b*10);
	sethudsize(800,600,1);
	switch(x){
		case 0:
			setfont(resnumBGFX[0][c]);
			drawHUDelement(1065,774.2+hdif,307.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			setfont(resnumBGFX[1][b]);
			drawHUDelement(1066,774.2+hdif,307.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			setfont(resnumBGFX[2][a]);
			drawHUDelement(1067,774.2+hdif,307.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			break;
		case 1:
			setfont(resnumYGFX[0][c]);
			drawHUDelement(1065,774.2+hdif,307.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			setfont(resnumYGFX[1][b]);
			drawHUDelement(1066,774.2+hdif,307.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			setfont(resnumYGFX[2][a]);
			drawHUDelement(1067,774.2+hdif,307.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			break;}}
function void print_maxresnums(int ammomax,int t){
	int player = PlayerNumber();
	int x=ammomax/100;
	int n=ammomax-(x*100);
	int y=n/10;
	int z=n-(y*10);
	sethudsize(800,600,1);
	switch(t){
		case 0:
			setfont(maxnumBGFX[0][z]);
			drawHUDelement(1068,732.2+hdif,432.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			setfont(maxnumBGFX[1][y]);
			drawHUDelement(1069,732.2+hdif,432.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			setfont(maxnumBGFX[2][x]);
			drawHUDelement(1070,732.2+hdif,432.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			break;
		case 1:
			setfont(maxnumYGFX[0][z]);
			drawHUDelement(1068,732.2+hdif,432.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			setfont(maxnumYGFX[1][y]);
			drawHUDelement(1069,732.2+hdif,432.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			setfont(maxnumYGFX[2][x]);
			drawHUDelement(1070,732.2+hdif,432.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));
			break;}}
function void key_bar(void){//draw key bar
	int player = PlayerNumber();
	if(checkinventory("InHeretic")>=1){
		if(checkinventory("KeyYellow")>=1){setfont("YKEY1");}
		else{setfont("YKEY0");}
		drawHUDelement(1071,419.1,80.1,GetUserCVar(player,"MSfiXd_HUDKeyOpacity"));	
		if(checkinventory("KeyGreen")>=1){setfont("GKEY1");}
		else{setfont("GKEY0");}
		drawHUDelement(1073,394.1,82.1,GetUserCVar(player,"MSfiXd_HUDKeyOpacity"));
		if(checkinventory("KeyBlue")>=1){setfont("BKEY1");}
		else{setfont("BKEY0");}
		drawHUDelement(1075,367.1,81.1,GetUserCVar(player,"MSfiXd_HUDKeyOpacity"));}
	if(checkinventory("InHexen")>=1){}
	if(checkinventory("InStrife")>=1){}
	if(checkinventory("InDoom")>=1){
		if(checkinventory("BlueCard")>=1){setfont("HBCARD1");}
		else{setfont("HBCARD0");}
		drawHUDelement(1071,415.1,82.1,GetUserCVar(player,"MSfiXd_HUDKeyOpacity"));	
		if(checkinventory("BlueSkull")>=1){setfont("HBSKUL1");}
		else{setfont("HBSKUL0");}
		drawHUDelement(1072,428.1,80.1,GetUserCVar(player,"MSfiXd_HUDKeyOpacity"));
		if(checkinventory("YellowCard")>=1){setfont("HYCARD1");}
		else{setfont("HYCARD0");}
		drawHUDelement(1073,388.1,82.1,GetUserCVar(player,"MSfiXd_HUDKeyOpacity"));
		if(checkinventory("YellowSkull")>=1){setfont("HYSKUL1");}
		else{setfont("HYSKUL0");}
		drawHUDelement(1074,400.1,81.1,GetUserCVar(player,"MSfiXd_HUDKeyOpacity"));
		if(checkinventory("RedCard")>=1){setfont("HRCARD1");}
		else{setfont("HRCARD0");}
		drawHUDelement(1075,361.1,81.1,GetUserCVar(player,"MSfiXd_HUDKeyOpacity"));
		if(checkinventory("RedSkull")>=1){setfont("HRSKUL1");}
		else{setfont("HRSKUL0");}
		drawHUDelement(1076,373.1,81.1,GetUserCVar(player,"MSfiXd_HUDKeyOpacity"));}}
function void medkit_counter(int pmedkit){//draw medkit counter
	int player = PlayerNumber();
	if(pmedkit>0){setfont("INVMEDI");}
	else{setfont("NULLI");}
	drawHUDelement(1077,82.1-hdif,450.1,GetUserCVar(player,"MSfiXd_HUDItemOpacity"));
	setfont(medkitnums[pmedkit]);
	drawHUDelement(1078,114.1-hdif,454.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));}
function void shield_booster(int pSbooster){//draw shield booster counter
	int player = PlayerNumber();
	if(pSbooster>0){setfont("INVARMC");}
	else{setfont("NULLI");}
	drawHUDelement(1079,106.1-hdif,482.1,GetUserCVar(player,"MSfiXd_HUDItemOpacity"));
	setfont(armorcnums[pSbooster]);
	drawHUDelement(1080,136.1-hdif,484.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));}
function void grenade_counter(int grenades){//draw grenade counter
	int player = PlayerNumber();
	if(grenades>0){
		setfont("WEHEGRC");
		drawHUDelement(1081,707.2+hdif,458.1,GetUserCVar(player,"MSfiXd_HUDItemOpacity"));
		setfont(grenadenums[grenades]);
		drawHUDelement(1082,671.2+hdif,463.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));}
	else{
		setfont("NULLI");
		drawHUDelement(1081,707.2+hdif,458.1,1.0);
		setfont(grenadenums[grenades]);
		drawHUDelement(1082,671.2+hdif,463.1,1.0);}}
function void jetpack_counter(int jetpack){// draw jetpack counter
	int player = PlayerNumber();
	if (jetpack>0){
		setfont("INVJETP");
		drawHUDelement(1083,130.1-hdif,514.1,GetUserCVar(player,"MSfiXd_HUDItemOpacity"));
		//106.1-hdif,482.1
		setfont(jetpacknums[jetpack]);
		drawHUDelement(1084,162.1-hdif,510.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));}
		//136.1-hdif,484.1
	else{
		setfont("NULLI");
		drawHUDelement(1083,106.1-hdif,514.1,1.0);
		setfont(jetpacknums[jetpack]);
		drawHUDelement(1084,136.1-hdif,510.1,1.0);}}	
function void hazscreen_counter(int hazscreen){//draw hazard screeen counter
	int hazactive = (checkinventory("PowerEnviroSuit")>0);
	int player = PlayerNumber();
	if(hazscreen>0){
		if (hazactive==1){
			setfont("INVHAZA");}
		else{
			setfont("INVHAZP");}
		drawHUDelement(1085,677.2+hdif,502.1,GetUserCVar(player,"MSfiXd_HUDItemOpacity"));
		setfont(grenadenums[hazscreen]);
		drawHUDelement(1086,641.2+hdif,507.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));}
	else{
		if (hazactive==1){
			setfont("INVHAZA");}
		else{
			setfont("NULLI");}
		drawHUDelement(1085,677.2+hdif,502.1,1.0); //702.2
		setfont(grenadenums[hazscreen]);
		drawHUDelement(1086,641.2+hdif,507.1,1.0);}}//671.2
function void lightamp_counter(int lightamp){//draw lightamp counter
	int player = PlayerNumber();
	int lamactive = (checkinventory("PowerLiteAmp")>0);
	if(lightamp>0){
		if (lamactive==1){
			setfont("INVLAMA");}
		else{
			setfont("INVLAMP");}
		drawHUDelement(1087,637.2+hdif,532.1,GetUserCVar(player,"MSfiXd_HUDItemOpacity"));
		setfont(grenadenums[lightamp]);
		drawHUDelement(1088,601.2+hdif,537.1,GetUserCVar(player,"MSfiXd_HUDNumericalOpacity"));}
	else{
		if (lamactive==1){
			setfont("INVLAMA");}
		else{
			setfont("NULLI");}
		drawHUDelement(1087,637.2+hdif,532.1,1.0);
		setfont(grenadenums[lightamp]);
		drawHUDelement(1088,601.2+hdif,537.1,1.0);}}	
/////////////////////////////////////////////////////////////////////////////
// GAMEPLAY AND SFX SCRIPTS
/////////////////////////////////////////////////////////////////////////////
//looped script that activates other scripts :P
script "pmsx_Player-Aux" enter{
	int phealth=0,pshield=0,pstamina=0,shdDmg=0;
	int skill_lvl=gameskill();
	ACS_NamedExecute("Player-ChangeSpeed",0,100,0,0);
	takeinventory("SuitIsOvercharged",9);
	takeinventory("SuitIsPowered",9);
	takeinventory("megapunch_counter",999);	
	takeinventory("powthrow_counter",999);
	takeinventory("TossGrenade",9);
	takeinventory("xhair_hold",9);
	takeinventory("pistol_acc",99);
	takeinventory("arifle_acc",99);
	takeinventory("sgauss_acc",99);
	if(skill_lvl>=4){ACS_NamedExecute("pmsx_ShieldGenDamage-Monitor",0,0,0,0);}
	else{ACS_NamedTerminate("pmsx_ShieldGenDamage-Monitor",0);}
	while(true){
		phealth=checkinventory("health");
		pshield=checkinventory("armor");
		pstamina=checkinventory("PlayerStamina");
		if(phealth>0){	
			if(skill_lvl>=4 && checkinventory("PlayerShieldDamage")>=350){
				ACS_NamedTerminate("pmsx_ShieldRecharge",0);}
			else{
				if(checkinventory("SuitIsOvercharged")==1){
					ACS_NamedTerminate("pmsx_ShieldRecharge",0);}
				else{
					ACS_NamedExecute("pmsx_ShieldRecharge",0,pshield,0,0);}}
			if(checkinventory("SuitIsPowered")==1){
				ACS_NamedTerminate("pmsx_StamRecharge",0);}
			else{
				ACS_NamedExecute("pmsx_StamRecharge",0,pstamina,0,0);}
			ACS_NamedExecute("pmsx_LowShieldWarning",0,pshield,skill_lvl,0);
			ACS_NamedExecute("pmsx_TempMeter",0,0,0,0);
			ACS_NamedExecute("pmsx_Crosshairs",0,0,0,0);
			ACS_NamedExecute("pmsx_Player-Sprint&Evade",0,0,0,0);
			ACS_NamedExecute("pmsx_Player-PowerJump",0,0,0,0);
			SetAirControl(0.25);
			if(checkweapon("golampistol")==1){
				ACS_NamedExecute("pmsx_LowMagWarning",0,1,0,0);}
			else if(checkweapon("hydrashotgun")==1){
				ACS_NamedExecute("pmsx_LowMagWarning",0,2,0,0);}
			else if(checkweapon("barracudarifle")== 1){
				ACS_NamedExecute("pmsx_LowMagWarning",0,3,0,0);}
			else if(checkweapon("raptorshotgun")==1){
				ACS_NamedExecute("pmsx_LowMagWarning",0,4,0,0);}
			else if(checkweapon("tauruscannon")==1){
				ACS_NamedExecute("pmsx_LowMagWarning",0,5,0,0);}
			else if(checkweapon("chimerarifle")==1){
				ACS_NamedExecute("pmsx_LowMagWarning",0,6,0,0);}
			else if(checkweapon("orionSniper")==1){
				ACS_NamedExecute("pmsx_LowMagWarning",0,7,0,0);}
			else{
				ACS_NamedExecute("pmsx_LowMagWarning",0,99,0,0);}
			if(checkinventory("PlayerStamina")==0)
				ACS_NamedExecute("pmsx_NoStamWarning",0,0,0,0);
			if(phealth>40){
				ACS_NamedTerminate("pmsx_LowHealthWarning",0);
				clear_image(184);}
			else if((phealth<=40) && (phealth>0)){
				ACS_NamedExecute("pmsx_LowHealthWarning",0,0,0,0);}}
		else{
			ACS_NamedExecute("pmsx_Player-Death",0,0,0,0);
			while(phealth<=0){
				ACS_NamedTerminate("pmsx_ShieldRecharge",0);
				ACS_NamedTerminate("pmsx_LowShieldWarning",0);
				ACS_NamedTerminate("pmsx_LowHealthWarning",0);
				ACS_NamedTerminate("pmsx_TempMeter",0);
				ACS_NamedTerminate("pmsx_Crosshairs",0);
				ACS_NamedTerminate("pmsx_Player-Sprint&Evade",0);
				ACS_NamedTerminate("pmsx_NoStamWarning",0);
				ACS_NamedTerminate("pmsx_Player-PowerJump",0);
				ACS_NamedTerminate("pmsx_LowMagWarning",0);
				clear_image(145);
				for(int i=1025; i<=1049; i++)
					clear_image(i);
				phealth=checkinventory("health");
				delay(1);} 
			ACS_NamedExecute("pmsx_Player-Respawn",0,0,0,0);}
		delay(1);}}
//shield recharge
script "pmsx_ShieldRecharge"(int pshield){
	int damagecheck1,damagecheck2;
	int chargedelay;
	int chargespeed;
	if(checkinventory("SuitIsOvercharged")==0){
		if(pshield==0){
			damagecheck1=CheckInventory("Armor");
			chargedelay = GetCVar("MSfiXd_ShieldRechargeDelay");
			delay(35*chargedelay);
			damagecheck2=CheckInventory("Armor");
			if(damagecheck1==damagecheck2)
				UseInventory("ArmorRechargeSound");
			while(damagecheck1==damagecheck2){
				GiveInventory("shieldauto",1);
				damagecheck1=CheckInventory("Armor");
				chargespeed = GetCVar("MSfiXd_ShieldRechargeSpeed");
				delay(chargespeed);
				damagecheck2=CheckInventory("Armor");}
			shldrchrg_snd();}
		else if(pshield<200){	
			damagecheck1=CheckInventory("Armor");
			chargedelay = GetCVar("MSfiXd_ShieldRechargeDelay");
			delay(35*chargedelay);
			damagecheck2=CheckInventory("Armor");
			if(damagecheck1==damagecheck2)
				UseInventory("ArmorRechargeSound");
			while(damagecheck1==damagecheck2){
				GiveInventory("shieldauto",1);
				damagecheck1=CheckInventory("Armor");
				chargespeed = GetCVar("MSfiXd_ShieldRechargeSpeed");
				delay(chargespeed);
				damagecheck2=CheckInventory("Armor");}
			shldrchrg_snd();}}}
//player damage monitor
script "pmsx_ShieldGenDamage-Monitor"(void){
	int damagecheck1,damagecheck2;
	int damagediff;
	damagecheck1=CheckInventory("Health");
	delay(1);
	damagecheck2=CheckInventory("Health");
	if(damagecheck1>damagecheck2){
		damagediff=damagecheck1- damagecheck2;
		giveinventory("PlayerShieldDamage",damagediff);}
	restart;}
function void shldrchrg_snd(void){
	GiveInventory("ARechargeSound_Cancel",1);
	UseInventory("ARechargeSound_Cancel");}
//shield HUD status messages
script "pmsx_LowShieldWarning"(int pshield,int skill_lvl){
	int player = PlayerNumber();
	sethudsize(800,600,1);
	if(skill_lvl>=4 && checkinventory("PlayerShieldDamage")>=350){
		clear_image(1101);
		setfont("HSHDDMG");		
		drawStretchedImage(1047,800,600,0.1,0.1,0.9,0);
		ActivatorSound("sfx/shddamage",127);
		fadeto(255,255,255,1.0,0.0);
		fadeto(0,0,0,0.0,0.9);	
		do{
			sethudsize(800,600,1);
			for(int j=0; j<2; j++){
				setfont(shld_malfunc[j]);
				drawHUDelement(1048,18.1-hdif,50.1,GetUserCVar(player,"MSfiXd_HUDWarningOpacity"));
				//hudmessage(s:"A"; HUDMSG_LAYER_UNDERHUD|HUDMSG_NOTWITHFULLMAP,1048,CR_UNTRANSLATED,18.1-hdif,50.1,0);
				delay(6);}}
		while(checkinventory("PlayerShieldDamage")>=350);
		clear_image(1048);}
	else{
		if(checkinventory("SuitIsOvercharged")==0){
			clear_image(1048);
			if((pshield<=40) && (pshield>0)){
				setfont("WARN1");
				drawHUDelement(1101,43.1-hdif,63.1,GetUserCVar(player,"MSfiXd_HUDWarningOpacity"));}
				//hudmessage(s:"A"; HUDMSG_LAYER_UNDERHUD|HUDMSG_NOTWITHFULLMAP,1101,CR_UNTRANSLATED,43.1-hdif,63.1,0);}
			else if(pshield>40){
				setfont("NULLI");
				hudmessage(s:"A"; HUDMSG_LAYER_UNDERHUD|HUDMSG_NOTWITHFULLMAP,1101,CR_UNTRANSLATED,43.1-hdif,63.1,0);}
			else if(pshield<=0){
				setfont("WARN1");
				drawTimedInOutHUDelement(1101,43.1-hdif,63.1,0.1,0.0,0.08,GetUserCVar(player,"MSfiXd_HUDWarningOpacity"));
				//hudmessage(s:"A"; HUDMSG_FADEINOUT|HUDMSG_LAYER_UNDERHUD|HUDMSG_NOTWITHFULLMAP,1101,CR_UNTRANSLATED,43.1-hdif,63.1,0.1,0.0,0.08);//ID 183
				ActivatorSound("sfx/beep1",25);
				setfont("AGREDG");
				drawTimedInOutHUDelement(1049,-4.1-hdif,35.1,0,0.15,0.15,GetUserCVar(player,"MSfiXd_HUDWarningOpacity"));
				//hudmessage(s:"A"; HUDMSG_FADEINOUT|HUDMSG_LAYER_UNDERHUD|HUDMSG_NOTWITHFULLMAP,1049,CR_UNTRANSLATED,-4.1-hdif,35.1,0,0.15,0.15);//ID 149
				delay(7);}}
		else{
			clear_image(1101);			
			for(int i=0; i<2; i++){
				setfont(shldpow_rtdGFX[i]);
				drawHUDelement(1048,19.1-hdif,50.1,GetUserCVar(player,"MSfiXd_HUDWarningOpacity"));
				//hudmessage(s:"A"; HUDMSG_LAYER_UNDERHUD|HUDMSG_NOTWITHFULLMAP,1048,CR_UNTRANSLATED,19.1-hdif,50.1,0);
				delay(4);}
			if(checkinventory("SuitIsOvercharged")==0) clear_image(1048);}}}
//low health effect
script "pmsx_LowHealthWarning"(void){
	int player = PlayerNumber();
	int heartbeatsound;
	int bloodyscreen;
	while(true){
		bloodyscreen = GetUserCVar(player,"MSfiXd_BloodyScreenSoReal_Visual");
		if (bloodyscreen==1){
			setfont("HWOUND0");}
		else{
			setfont("NULLI");}
		drawStretchedImage(1045,800,600,0.1,0.1,0.9,0);
		heartbeatsound = GetUserCVar(player,"MSfiXd_BloodyScreenSoReal_Audio");
		if(heartbeatsound==1){
			activatorsound("sfx/heartbeat",127);}
		else{}
		sethudsize(800,600,1);
		for(int i=0; i<=4; i++){
				setfont("DANGER1");
				drawTimedInOutHUDelement(1100,54.1-hdif,289.1,0.05,0.0,0.08,GetUserCVar(player,"MSfiXd_HUDWarningOpacity"));
				//hudmessage(s:"A"; HUDMSG_FADEINOUT|HUDMSG_NOTWITHFULLMAP,1100,CR_UNTRANSLATED,54.1-hdif,289.1,0.05,0.0,0.08);//ID 184
				delay(5);}}}
//shield screen flash
script "pmsx_ShieldFlash" enter{
	int shieldA,shieldB;
	shieldA=CheckInventory("Armor");
	delay(1);
	shieldB=CheckInventory("Armor");
	if(shieldA>shieldB){
		setfont("HSHDFLS");
		drawStretchedImage(1110,800,600,0.0,0.0,0.3,0);
		activatorsound("sfx/shieldhit",128);}
	restart;}
//pain flash
script "pmsx_PlayerPainFlash"(int dsfx_type){
	switch(dsfx_type){
		case 1: //heavy damage
			setfont("HUPAIND");
			drawStretchedImage(1044,800,600,0.0,0.0,1.05,0);
			break;
		case 2: //medium damage
			setfont("HUPAIND");
			drawStretchedImage(1044,800,600,0.0,0.0,0.8,0);
			break;
		default: //default damage
			setfont("HUPAIND");
			drawStretchedImage(1044,800,600,0.0,0.0,0.45,0);
			break;}}
//weapon low ammo effect
script "pmsx_LowMagWarning"(int activ_weap){
	int player = PlayerNumber();
	int magammo_calc,ammotype,current_weap;
		switch(activ_weap){
				case 1:
					ammotype="golamclip";
					current_weap="golampistol";
					break;
				case 2:
					ammotype="hydraclip";
					current_weap="hydrashotgun";
					break;
				case 3:
					ammotype="barraclip";
					current_weap="barracudarifle";
					break;
				case 4:
					ammotype="raptorchamber";
					current_weap="raptorshotgun";
					break;
				case 5:
					ammotype="cannonmag";
					current_weap="tauruscannon";
					break;
				case 6:
					ammotype="criflecell";
					current_weap="chimerarifle";
					break;
				case 7:
					ammotype="sgaussmag";
					current_weap="orionSniper";
					break;
				default:
					clear_image(1103);
					terminate;}		
		magammo_calc=(checkinventory(ammotype)*100)/getammocapacity(ammotype);		
		sethudsize(800,600,1);
		if(magammo_calc>0 && magammo_calc<=25){
			setfont("RELWAR1");
			drawHUDelement(1103,758.2+hdif,70.1,GetUserCVar(player,"MSfiXd_HUDWarningOpacity"));
			//hudmessage(s:"A"; HUDMSG_LAYER_UNDERHUD|HUDMSG_NOTWITHFULLMAP,1103,CR_UNTRANSLATED,758.2+hdif,70.1,0);
			relobeepcheck=0;}
		else if(magammo_calc==0){
			if(relobeepcheck==0){
				activatorsound("sfx/beep4",127);
				relobeepcheck=1;}
			setfont("RELWAR1");
			drawTimedOutHUDElement(1103,758.2+hdif,70.1,0.1,0.02,GetUserCVar(player,"MSfiXd_HUDWarningOpacity"));
			//hudmessage(s:"A"; HUDMSG_FADEOUT|HUDMSG_NOTWITHFULLMAP,1103,0,758.2+hdif,70.1,0.1,0.02);
			delay(5);}
		else{
			setfont("NULLI");
			hudmessage(s:"A"; HUDMSG_LAYER_UNDERHUD,1103,CR_UNTRANSLATED,758.2+hdif,70.1,0);
			relobeepcheck=0;}}
//temp indicator
script "pmsx_TempMeter"(void){
	int player = PlayerNumber();
	int temp;
    if(checkweapon("chimerarifle")== 1){
		if(checkweapon("chimerarifle")==1)
			temp=checkinventory("crifleheat");
		if(temp <200){
			sethudsize(800,600,1);
			if((temp>=0) && (temp <120)){
				setfont("TEMPBLU");}
			else if((temp>=120) && (temp <170)){
				setfont("TEMPYLW");}
			else if((temp>=170) && (temp <200)){
				setfont("TEMPRED");}
			drawHUDelement(1106,761.2+hdif,147.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));
			//hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP,1106,CR_UNTRANSLATED,761.2+hdif,147.1,0);
			setfont("NULLI");
			hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP,1107,CR_UNTRANSLATED,761.2+hdif,147.1,0);
			sethudsize(800,600,1);
			setfont(tempGFX[temp/10]);
			//hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP,1105,CR_UNTRANSLATED,761.2+hdif,147.1,0);
			drawHUDelement(1105,761.2+hdif,147.1,GetUserCVar(player,"MSfiXd_HUDGaugeBitOpacity"));}
		else if(temp>=200){
			ActivatorSound("sfx/beep3",100);			
			for(int i=0; i<2; i++){
				sethudsize(800,600,1);
				setfont("TEMPWHT");
				drawHUDelement(1106,761.2+hdif,147.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));
				//hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP,1106,CR_UNTRANSLATED,761.2+hdif,147.1,0);
				setfont(tempGFX[21]);
				drawHUDelement(1105,761.2+hdif,147.1,GetUserCVar(player,"MSfiXd_HUDGaugeBitOpacity"));
				//hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP,1105,CR_UNTRANSLATED,761.2+hdif,147.1,0);
				setfont("TOOHOT1");
				drawHUDelement(1107,735.2+hdif,183.1,GetUserCVar(player,"MSfiXd_HUDWarningOpacity"));
				//hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP,1107,CR_UNTRANSLATED,735.2+hdif,183.1,0);
				delay(4);
				setfont("TEMPRED");
				drawHUDelement(1106,761.2+hdif,147.1,GetUserCVar(player,"MSfiXd_HUDCosmeticOpacity"));
				//hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP,1106,CR_UNTRANSLATED,761.2+hdif,147.1,0);
				setfont(tempGFX[20]);
				drawHUDelement(1105,761.2+hdif,147.1,GetUserCVar(player,"MSfiXd_HUDGaugeBitOpacity"));
				//hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP,1105,CR_UNTRANSLATED,761.2+hdif,147.1,0);
				setfont("TOOHOT2");
				drawHUDelement(1107,735.2+hdif,183.1,GetCVar("MSfiXd_HUDWarningOpacity"));
				//hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP,1107,CR_UNTRANSLATED,735.2+hdif,183.1,0);
				delay(2);}}}
	else{
		sethudsize(800,600,1);
		for(int j=1105; j<=1107; j++)
			clear_image(j);}}
//Crosshairs script
script "pmsx_Crosshairs"(void){
	int cdf=0,acd=0,wan=0,i=0;
	int plyrZ=0;
	while(true){
		if(checkinventory("xhair_switch")==1){
			if(checkweapon("golampistol")==1||checkweapon("barracudarifle")||checkweapon("orionSniper")){
				if(checkweapon("golampistol")==1){
					if(checkinventory("grenadehold")==1){
						setfont("HXHRGRT");}
					else{
						cdf=(checkinventory("pistol_acc")*1.0)+13.0;
						acd=2; wan="pistol_acc"; i=0;}}
				else if(checkweapon("barracudarifle")==1){
					if(checkinventory("grenadehold")==1){
						setfont("HXHRGRT");}
					else{
						if(checkinventory("barrazoom")==1){
							cdf=2.0; acd=0; wan=0; i=1;}
						else{
							cdf=(checkinventory("arifle_acc")*1.0)+5.0;
							acd=2; wan="arifle_acc"; i=0;}}}
				else if(checkweapon("orionSniper")==1){
					if(checkinventory("grenadehold")==1){
						setfont("HXHRGRT");}
					else{
						if(checkinventory("sgausszoom")>=1){
							cdf=2.0; acd=0; wan=0; i=1;}
						else{
							cdf=(checkinventory("sgauss_acc")*1.0)+2.0;
							acd=2; wan="sgauss_acc"; i=0;}}}
				sethudsize(800,600,1);
				if(checkinventory("grenadehold")==1){
					hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP ,1091,CR_UNTRANSLATED,400.0,300.0 ,0);
					setfont("NULLI");
					hudmessage(s:"A"; 0,1092,0,0.0,0.0,0);
					hudmessage(s:"A"; 0,1093,0,0.0,0.0,0);
					hudmessage(s:"A"; 0,1094,0,0.0,0.0,0);}
				else{
					setfont(xhairGFX[i][0]);
					hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP,1091,CR_UNTRANSLATED,400.2-cdf,300.0 ,0);
					setfont(xhairGFX[i][1]);
					hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP,1092,CR_UNTRANSLATED,400.1+cdf,300.0 ,0);
					setfont(xhairGFX[i][2]);
					hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP,1093,CR_UNTRANSLATED,400.0,300.2-cdf ,0);
					setfont(xhairGFX[i][3]);
					hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP,1094,CR_UNTRANSLATED,400.0,300.1+cdf ,0);
					if(checkinventory("xhair_hold")==0){
						takeinventory(wan,acd);}}}
			else{
				plyrZ=(GetActorZ(0)- GetActorFloorZ(0))>>16;
				sethudsize(800,600,1);
				if(checkweapon("hydrashotgun")==1){
					if(checkinventory("grenadehold")==1){
						setfont("HXHRGRT");}
					else{
						setfont("HXHRASH");}}
				else if(checkweapon("raptorshotgun")==1){
					if(checkinventory("grenadehold")==1){
						setfont("HXHRGRT");}
					else{
						setfont("HXHRCSH");}}
				else if(checkweapon("tauruscannon")==1){
					if(checkinventory("grenadehold")==1){
						setfont("HXHRGRT");}
					else{
						setfont("HXHRACN");}}
				else if(checkweapon("grenade_toss")==1){
					setfont("HXHRGRT");}
				else if(checkweapon("chimerarifle")==1){
					if(checkinventory("grenadehold")==1){
						setfont("HXHRGRT");}
					else{
						if(checkinventory("crifle_mode")==1){
							setfont("HXHRCR1");}
						if(checkinventory("crifle_mode")==2){
							setfont("HXHRCR0");}
						if(checkinventory("crifle_mode")==3){
							setfont("HXHRCR2");}}}
				else if(checkweapon("RegularFists")==1){
					if(checkinventory("grenadehold")==1){
						setfont("HXHRGRT");}
					else{
						if(GetActorPitch(0)>=0.12 && (plyrZ >=METEORP_MINDIST && plyrZ<=METEORP_MAXDIST) && checkinventory("SuitIsOvercharged")==1){
							setfont("HXHRAIM");}}}
				hudmessage(s:"A"; HUDMSG_NOTWITHFULLMAP ,1091,CR_UNTRANSLATED,400.0,300.0 ,0);
				setfont("NULLI");
				hudmessage(s:"A"; 0,1092,0,0.0,0.0,0);
				hudmessage(s:"A"; 0,1093,0,0.0,0.0,0);
				hudmessage(s:"A"; 0,1094,0,0.0,0.0,0);}}
		else{
			sethudsize(800,600,1);
			setfont("NULLI");
			hudmessage(s:"A"; 0,1091,0,0.0,0.0 ,0);
			hudmessage(s:"A"; 0,1092,0,0.0,0.0 ,0);
			hudmessage(s:"A"; 0,1093,0,0.0,0.0 ,0);
			hudmessage(s:"A"; 0,1094,0,0.0,0.0 ,0);}
		delay(1);}}
	
//Weapon auto cooling
script "pmsx_TempCooldown"(void){
	takeinventory("crifleheat",5);
	if(checkinventory("crifleheat")==0){
		terminate;}
	delay(3);
	restart;}
//Stamina recharge
script "pmsx_StamRecharge"(int pstamina){
	int stamstat0,stamstat1;
	if(checkinventory("SuitIsOvercharged")==0){
		if(pstamina==0){
			stamstat0=CheckInventory("PlayerStamina");
			delay(35*4);
			stamstat1=CheckInventory("PlayerStamina");
			while(stamstat0==stamstat1){
				giveInventory("PlayerStamina",1);
				stamstat0=CheckInventory("PlayerStamina");
				delay(1);
				stamstat1=CheckInventory("PlayerStamina");}}
		else if(pstamina<100){	
			stamstat0=CheckInventory("PlayerStamina");
			delay(35*3);
			stamstat1=CheckInventory("PlayerStamina");
			while(stamstat0==stamstat1){
				giveInventory("PlayerStamina",1);
				stamstat0=CheckInventory("PlayerStamina");
				delay(1);
				stamstat1=CheckInventory("PlayerStamina");}}}}
//No suit power indicator 
script "pmsx_NoStamWarning" (void){
	int player = PlayerNumber();
	int c=0;
	while(true){
		if(checkinventory("PlayerStamina")==0){
			if(c==0){
				ActivatorSound("sfx/beep2", 25);
				sethudsize(800,600,1);
				setfont("NOPOWR1");
				drawTimedOutHUDElement(1102,311.1,523.1,0.1,0.1,GetUserCVar(player,"MSfiXd_HUDWarningOpacity"));}
			c++;
			if (c==10){
				c=0;}}
		else{
			setfont("NULLI");
			hudmessage (s:"A"; HUDMSG_FADEOUT, 1102,0,311.1,523.1,0.05,0.2);}
		if(checkinventory("health")==0){
			terminate;}
		delay(1);}}
//Medkit healing effect
script "pmsx_UseMedkit"(void){
	if(checkinventory("health")>0){
		if(checkinventory("healthstim")>0){
			if(checkinventory("health")>191){	
				print(s:"\cn- Health is full-");}
			else{
				setfont("HUHEAL");	
				drawStretchedImage(1045,800,600,0.1,0.0,0.4,0);
				useinventory("healthstim");
				takeinventory("healthstim",1);}}
		else{
			print(s:"\cn- No Health Stims avaiable-");}}}
//shield booster effect
script "pmsx_UseShieldBooster"(void){
	int onoff=0;
	if(checkinventory("health")>0){
		if(checkinventory("shieldbooster")>0){
			if(checkinventory("armor")>=200){	
				print(s:"\cn- Shields are full-");}
			else{
				fadeto(0,255,140,0.7,0.0);
				fadeto(0,0,0,0.0,0.5);
				useinventory("shieldbooster");
				takeinventory("shieldbooster",1);
				ACS_NamedTerminate("pmsx_LowShieldWarning",0);
				SetActorProperty(0,APROP_DamageFactor,0.05);
				setfont("HSHDINV");
				drawStretchedImage(1110,800,600,5.0,0.0,1.0,0);
				sethudsize(800,600,1);
				setfont("AGINVUL");
				hudmessage(s:"A"; HUDMSG_FADEINOUT|HUDMSG_NOTWITHFULLMAP,1049,CR_UNTRANSLATED,-9.1-hdif,30.1,0,0.0,1.0);
				for(int i=0; i<(35*4); i++){
					if((i%35)==0){
						hudmessage(s:"A"; HUDMSG_FADEINOUT|HUDMSG_NOTWITHFULLMAP,1049,CR_UNTRANSLATED,-9.1-hdif,30.1,0,0.0,1.0);}
					Giveinventory("fullshield",1);
					delay(1);}
				SetActorProperty(0,APROP_DamageFactor,1.0);}}
		else 
			print(s:"\cn- No Shield Boosters avaiable-");}}
//PowerJump
script "pmsx_Player-PowerJump"(void){
	int jumpheightmulti; // unused; even when it's 1.0, you rocket up to the ceiling? I dunno.
	int jumpstamdeplete;
	int heldtime=0,input=0;
	int stamcheck=0;
	int plvelZ=0,plvelZ0=0;
	while(true){
		plvelZ0=GetActorVelZ(0);
		delay(1);
		plvelZ=GetActorVelZ(0);
		if(plvelZ==plvelZ0){
			takeInventory("PlayerIsJumping",9); 
			takeInventory("PlayerPowerJumping",9);}
		if((plvelZ>=-5.0 && plvelZ<=0) && checkinventory("PlayerIsJumping")==0){
			if(GetPlayerInput(-1,INPUT_BUTTONS) & BT_JUMP){
					jumpheightmulti = GetCVar("MSfiXd_JumpHeightMultiplier");
					stamcheck=checkinventory("PlayerStamina");					
					++heldtime;
					if(heldtime>15 && checkinventory("SuitIsOvercharged")==1){
						//Overcharged suit ultra powerjump
						if(stamcheck>=50){ 
							ActivatorSound("player/powerjump",127);	
							faderange(127,255,0,0.8,0,0,0,0.0,0.9);
							ThrustThingZ(0,130,0,0);
							jumpstamdeplete = GetCVar("MSfiXd_JumpStaminaUse");
							if(jumpstamdeplete==1){
								takeInventory("PlayerStamina",50);}
							heldtime=0;
							continue;}
						//Overcharged suit powerjump
						else{
							ActivatorSound("player/powerjump",127);	
							faderange(127,255,0,0.5,0,0,0,0.0,0.5);
							ThrustThingZ(0,80,0,0);
							jumpstamdeplete = GetCVar("MSfiXd_JumpStaminaUse");
							if(jumpstamdeplete==1){
								takeInventory("PlayerStamina",30);}
							heldtime=0;
							continue;}} 
					//Normal powerjump
					else if(heldtime>15 && stamcheck>21){ 
							faderange(127,255,0,0.3,0,0,0,0.0,0.5);
							giveInventory("PlayerPowerJumping",1);
							ActivatorSound("player/powerjump",127);							
							ThrustThingZ(0,70,0,0);
							jumpstamdeplete = GetCVar("MSfiXd_JumpStaminaUse");
							if(jumpstamdeplete==1){
								takeInventory("PlayerStamina",30);}
							heldtime=0;
							continue;}}
			else if(GetPlayerInput(-1,INPUT_OLDBUTTONS) & BT_JUMP){
				//Normal jump
				if(checkinventory("SuitIsOvercharged")==0){ 
					giveInventory("PlayerIsJumping",1);				
					ActivatorSound("player/normjump",127);
					ThrustThingZ(0,35,0,0);
					heldtime=0;
					continue;}
				//Overcharged suit normal jump
				else{
					giveInventory("PlayerIsJumping",1);
					ActivatorSound("player/normjump",127);
					ThrustThingZ(0,45,0,0);
					heldtime=0;
					continue;}}}}}
// Evade and Sprint scripts
script "pmsx_Player-Sprint&Evade"(void)
{
	int angle=0,input=0,oldinput=0;
	int stamcheck=0,endsprint=0;
	int heldTime=0,force=40,ret=20,sdel=10;
	takeinventory("EvadingPlayer",1);
	takeinventory("SprintingPlayer",1);
	SetPlayerProperty(0,OFF,PROP_FROZEN);
	ACS_NamedExecute("Player-ChangeSpeed",0,100,0,0);
    while(true)
	{
        delay(1);
        angle=GetActorAngle(0) >> 8;
		input=GetPlayerInput(-1,INPUT_BUTTONS);
		oldinput=GetPlayerInput(-1,INPUT_OLDBUTTONS);
		//Thanks to Salad Viking,on the evade/sprint combo keys ^^
		if(input & BT_FORWARD && input & BT_SPEED)
		{
				if((!(input & BT_BACK)) && checkinventory("PlayerPowerJumping")==0)
				{
					if(++heldTime>10)
					{
						giveInventory("SprintingPlayer",1);
					}
				}
				else
				{
					heldTime++;				
					takeInventory("SprintingPlayer",1);
				}
			}
			else if(!(input & BT_FORWARD && input & BT_SPEED))
			{
				stamcheck=checkinventory("PlayerStamina");
				if((oldinput & BT_FORWARD && oldinput & BT_SPEED))
				{
					if(heldTime>0 && heldTime <10 && stamcheck>10)
					{
						GiveInventory("justforwarddashed",1);
						evade_start(angle,0); 
						ActivatorSound("player/powerevade",127);
						delay(ret);
						evade_end();
						heldTime=0;
						delay(sdel);
						continue;}
						heldTime=0;
						takeInventory("SprintingPlayer",1);
						continue;
					}
					else if((oldinput & BT_BACK && oldinput & BT_SPEED))
					{
						if(stamcheck>10)
						{
							evade_start(angle,128);
							ActivatorSound("player/powerevade",127);
							delay(ret);
							evade_end();
							delay(sdel);
						}
					}
					else if((oldinput & BT_MOVELEFT && oldinput & BT_SPEED))
					{
						if(stamcheck>10)
						{
							evade_start(angle,64);
							ActivatorSound("player/powerevade",127);
							delay(ret);
							evade_end();
							delay(sdel);
						}
					}
					else if((oldinput & BT_MOVERIGHT && oldinput & BT_SPEED))
					{
						if(stamcheck>10)
						{
							evade_start(angle,192);
							ActivatorSound("player/powerevade",127);
							delay(ret);
							evade_end();
							delay(sdel);
						}
					}
					heldTime=0;
				}
			}
		}
	
function void evade_start(int angle,int dir){
	int force=45;
	giveInventory("EvadingPlayer",1);
	takeInventory("PlayerStamina",20);
	faderange(20,255,0,0.3,0,0,0,0.0,0.5);
	ThrustThing(angle+dir,force,0,0);}
function void evade_end(void){takeInventory("EvadingPlayer",1);}
//Powerup HUD effects
script "pmsx_PowerUpFlash"(int powtype){
	switch(powtype){
		case 1: //Invulnerability sphere
			setfont("HUINVPK");
			drawStretchedImage(1030,800,600,0.0,0.0,0.35,0);
			setfont("HUINVON");
			drawStretchedImage(1031,800,600,25.0,0.0,5.0,0);
			break;
		case 2: //Ultra Sphere
			setfont("HUULTSP");
			drawStretchedImage(1030,800,600,0.0,0.0,0.35,0);
			break;
		case 3: //Full Area map
			sethudsize(800,600,1);
			setfont("HUAMAP");
			hudmessage(s:"A"; HUDMSG_FADEINOUT,1108,0,327.1,458.1,2.0,0.05,0.4);
			break;
		case 4: //Defense Sphere
			setfont("HUDEFPK");
			drawStretchedImage(1029,800,600,0.0,0.0,0.35,0);
			setfont("HUDEFON");
			drawStretchedImage(1028,800,600,55.0,0.0,5.0,0);
			break;
		case 5: // Hazard Screen
			setfont("HAZSHDPK");
			drawStretchedImage(1030,800,600,0.0,0.0,0.35,0);
			setfont("HAZSHDON");
			drawStretchedImage(1031,800,600,2.0,0.0,2.0,0);
			break;}}
//player death
script "pmsx_Player-Death"(void){
		GiveInventory("ARechargeSound_Cancel",1);
		LocalSetMusic("KILLAMB");
		ActivatorSound("sfx/hudshatter",127);   
		setfont("HREDSCR");
		drawStretchedImage(1020,800,600,0.16,0.0,0.4,1);	
		setfont("HUBLKVG");
		drawStretchedPlainImage(1050,800,600,0.0,1);
		int player = PlayerNumber();
		if(GetUserCVar(player,"MSfiXd_ShowHelmet")==1){
			setfont(visorcrackGFX[random(0,5)]);
			drawHUDelement(1051,-133.1,0.1,1.0);}
		else{
			setfont("TNT1A0");
			drawHUDelement(1051,-133.1,0.1,1.0);}
		delay(70);
		setfont("BLACKSCR");
		drawStretchedImage(1003,800,600,10.0,2.0,0.0,1);
		delay(80);
		drawStretchedPlainImage(1003,800,600,0.0,1);
		delay(25);
		sethudsize(800,600,1);	 
		ActivatorSound("sfx/gameover",127);
		setfont("HUGAMEO");
		hudmessage(s:"A"; 0,1001,0,400.0,300.0 ,0);}
script "pmsx_Player-Respawn"(void){
		sethudsize(800,600,1);
		acs_namedterminate("pmsx_Player-Death",0);
		clear_image(1051); 
		clear_image(1020);
		clear_image(1003);
		clear_image(1001);
		hudmessage(s:" "; HUDMSG_PLAIN,2,0,0.0,0.0,1);}
// Other scripts
// Player movement modifier script,by DoomRater
Script "Player-ChangeSpeed"(int movespeed){SetActorProperty(0,APROP_Speed,movespeed*65535/100);}
// Weapon recoil effect,by vaecrius
script "Weapon-Recoil"(int climb,int twist){
	int playerpitch=GetActorPitch(0)-((random(1,3)+5)*climb);
	if(playerpitch>-5780){
		SetActorPitch(0,playerpitch);}
	int playerangle=GetActorAngle(0)-((random(1,2)+4)*twist);
	SetActorAngle(0,playerangle);}
script 952(int force){ThrustThingZ(0,FixedMul(force,0.1),1,0);}