
let shotopacity=(GetCommonDataDefault("OptionsMenu",[2,0,0,0,0,0,0.5])[6])*0.8+0.2;

function RandDir{
//returns either 1 or -1
	return (prand_int(0,1)-0.5)*2;
}

function Offset(obj){
	Obj_SetX(obj,Obj_GetX(obj)-500);
}

function upper(num1,num2){
//returns the higher of two numbers
	if(num1>num2){return num1;}else{return num2;}
}
function lower(num1,num2){
//returns the lower of two numbers
	if(num1<num2){return num1;}else{return num2;}
}
function center(num1,num2,num3){
//returns the middle number
	return lower(upper(num1,num2),num3)
}

function distance(x1,y1,x2,y2){
	let dy = absolute(y2-y1);
	let dx = absolute(x2-x1);
	return (dx*dx+dy*dy)^0.5;
}

function PlayerForbidShotOff{
	SetCommonData("PlayerForbidShot",false);
}
function PlayerForbidShotOn{
	SetCommonData("PlayerForbidShot",true);
}
function IsForbidShot{
	return (GetCommonDataDefault("PlayerForbidShot",false)||GetCommonDataDefault("ForbidShot",0));
}
function ScreenShakeY{return GetCommonDataDefault("ScreenShakeY",0);}
function ScreenShakeX{return GetCommonDataDefault("ScreenShakeX",0);}
function OnScreen(xx,yy,tolerance){
	let ret=1;
	if(xx<GetClipMinX-tolerance||xx>GetClipMaxX+tolerance||yy<GetClipMinY-tolerance||yy>GetClipMaxY+tolerance){ret=0;}
	return ret;
}
function Range(number,min,max){
	while(number<min){number+=max-min;}
	while(number>max){number-=max-min;}
	return number;
}
function CreatePlayerShot01Obj(x,y,v,a,damage,penetration,graphic,alpha){
	let obj=Obj_Create(OBJ_SHOT);
	Obj_SetPosition(obj,x,y);
	Obj_SetAngle(obj,a);
	Obj_SetSpeed(obj,v);
	ObjShot_SetDamage(obj,damage);
	ObjShot_SetPenetration(obj,penetration);
	ObjShot_SetGraphic(obj,graphic);
	Obj_SetAlpha(obj,alpha);
}
task CreatePlayerShot01ObjD(x,y,v,a,damage,penetration,graphic,alpha,delay){
	loop(delay){yield;}
	let obj=Obj_Create(OBJ_SHOT);
	Obj_SetPosition(obj,x+cos(a)*v*delay,y+sin(a)*v*delay);
	Obj_SetAngle(obj,a);
	Obj_SetSpeed(obj,v);
	ObjShot_SetDamage(obj,damage);
	ObjShot_SetPenetration(obj,penetration);
	ObjShot_SetGraphic(obj,graphic);
	Obj_SetAlpha(obj,alpha);
}
function GetPlayer{
	return trunc(GetCommonDataDefault("AWCPlayerNum",-1));
}
function GetPlayerEx{
	return GetCommonDataDefault("AWCPlayerNum",-1);
}
function ExPlayer{
	return GetCommonData("explayer");
}
function OnEdgeOfScreen{
	if(GetPlayerX<46||GetPlayerX>402){return true;}
	return false;
}
function InitEffect(x,y,texture,vertices,renderstate,layer){
	let obj=Obj_Create(OBJ_EFFECT);
	Obj_SetPosition(obj,x,y);
	ObjEffect_SetTexture(obj,texture);
	ObjEffect_CreateVertex(obj,vertices);
	ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLEFAN);
	ObjEffect_SetRenderState(obj,renderstate);
	ObjEffect_SetLayer(obj,layer);
	return obj;
}
function ObjEffect_SetXYRect(obj,x1,y1,x2,y2){
	ObjEffect_SetVertexXY(obj,0,x1,y1);
	ObjEffect_SetVertexXY(obj,1,x2,y1);
	ObjEffect_SetVertexXY(obj,2,x2,y2);
	ObjEffect_SetVertexXY(obj,3,x1,y2);
}
function ObjEffect_SetUVRect(obj,x1,y1,x2,y2){
	ObjEffect_SetVertexUV(obj,0,x1,y1);
	ObjEffect_SetVertexUV(obj,1,x2,y1);
	ObjEffect_SetVertexUV(obj,2,x2,y2);
	ObjEffect_SetVertexUV(obj,3,x1,y2);
}
function SE(string){
	PlaySE(GetCurrentScriptDirectory~"se\p_"~string~".wav");
}
function LSE(string){
	LoadSE(GetCurrentScriptDirectory~"se\p_"~string~".wav");
}
function DSE(string){
	DeleteSE(GetCurrentScriptDirectory~"se\p_"~string~".wav");
}
function Rainbow(color,offset){
	return center(0,sin((offset-(color*120)+70))+0.5,1);
}
function RainbowArray(offset,mult,adda){
	return [Rainbow(0,offset)*mult+adda,Rainbow(1,offset)*mult+adda,Rainbow(2,offset)*mult+adda];
}
