void main()
{
void player1 = getplayerproperty(0, "entity");
void player2 = getplayerproperty(1, "entity");
//CHECK IF THE GAME IS IN-LEVEL TO AVOID SELECT SCREEN AND OTHER EVENTS
//CHECK IF THE GAME IS NOT PAUSED TO PREVENT POSSIBLE EFFECTS (OR SCRIPTED REFILL) FROM WORKING DURING PAUSE MENU
if(openborvariant("in_level") && !openborvariant("pause")){
drawMp(player1, 0);
drawMp(player2, 1);
}
}
void drawMp(void player, int pIndex)
{//Draw custom mp bar
//DOUBLE-CHECK FOR SAFE, CONFIRM IF THE PLAYER IS NOT NULL AND IF EXISTS
if(player != NULL()){
if(getentityproperty(player, "exists")){
int maxMp = getentityproperty(player, "maxmp");
int mp = getentityproperty(player, "mp");
int xPos = 1; //BASE X POSITION USED BY PLAYER 1
int xDif = 120; //DIFFERENCE IN X AXIS BETWEEN EACH PLAYER HUD (FOR 480X272 RESOLUTION, SPLIT THE SCREEN IN 4 PARTS)
int xAdd = xDif*pIndex; //CALCULATE THE X POSITION OF EACH PLAYER MP BAR AUTOMATICALLY
int xSize = 100; //BAR SIZE IN X AXIS
int yPos = 40; //BASE Y POSITION USED BY ALL PLAYERS
int ySize = 5; //BAR SIZE IN Y AXIS
int backLayer = 40000; //BACKFILL LAYER
int barLayer = 50000; //MP BAR LAYER
int black = rgbcolor(0,0,0);
int blue = rgbcolor(0,0,255);
int purple = rgbcolor(255,0,255);
int darkBlue = rgbcolor(0,0,100);
int darkpurple = rgbcolor(100,0,100);
int currentMp;
int currentMax;
//PHASE 1, DETECT IF THE MP IS LOWER THAN 1/9
if(mp <= maxMp/9){
//FORMULA
currentMax = maxMp/9; //GET THE CHARACTER MAX MP AND SPLIT BY 9, REACHING THE VALUE OF 100
currentMp = (mp*xSize)/currentMax; //CALCULATE REMAINING MP BAR USING THE PREVIOUSLY DEFINED SIZE
//DRAW BACK FILL
drawbox(xPos+xAdd, yPos, xSize, ySize, backLayer, black);
//DRAW CURRENT MP
if(currentMp > 0){drawbox(xPos+xAdd, yPos, currentMp, ySize, barLayer, blue);}
}else
//PHASE 2, DETECT IF THE MP IS HIGHER THAN 1/9 BUT LOWER THAN 9/9
if(mp > maxMp/9 && mp < maxMp){
//FORMULA
currentMax = maxMp; //GET THE CHARACTER MAX MP AND USE IT IN ITS TOTAL VALUE OF 900
currentMp = (mp*xSize)/currentMax; //CALCULATE REMAINING MP BAR USING THE PREVIOUSLY DEFINED SIZE
//DRAW BACK FILL
drawbox(xPos+xAdd, yPos, xSize, ySize, backLayer, darkBlue);
//DRAW CURRENT MP
drawbox(xPos+xAdd, yPos, currentMp, ySize, barLayer, purple);
}else
//FULL MP
if(mp >= maxMp){
//FORMULA
currentMax = maxMp; //GET THE CHARACTER MAX MP AND USE IT IN ITS TOTAL VALUE OF 900
currentMp = (mp*xSize)/currentMax; //CALCULATE REMAINING MP BAR USING THE PREVIOUSLY DEFINED SIZE
//DRAW CURRENT MP
drawbox(xPos+xAdd, yPos, currentMp, ySize, barLayer, darkpurple);
}
//REFILL MP WITH SCRIPT
float time = openborvariant("elapsed_time");
float centiseconds = 200;
float rate = 0.005; //RECOVERY CYCLE DURATION IN SECONDS, YOU CAN USE FLOAT VALUES SMALLER THAN 1 TO INCREASE THE RECOVERY SPEED
float delay = centiseconds*rate;
float recoveryTime = getentityvar(player, "recoveryTime");
int amount = 1; //MP AMOUNT RECOVERED AT EACH CYCLE
//START THE "RECOVERY TIME" VARIABLE
if(recoveryTime == NULL()){setentityvar(player, "recoveryTime", time+delay);}
//ADD MP AMOUNT AT EACH CYCLE IF SMALLER THAN MAX
if(mp < maxMp){
if(time > recoveryTime){
changeentityproperty(player, "mp", mp+amount);
setentityvar(player, "recoveryTime", time+delay);
}
}
//SHOW THE CURRENT MP IN NUMBERS, ERASE IT WHEN ALL TESTS ARE DONE
drawstring(xPos, yPos+yPos/4, 0, mp);
}
}
}