Solved A question about the partner menu.

Question that is answered or resolved.

DD Tokki

Well-known member
I am having fun playing openbor these days with 'partner menu portable v2'. But when the partner appears, the 'parrow5' sprite is too high, so I want to adjust the height. Where
can I adjust it?
partner.PNG
 
The partner menu uses the character's height to adjust the cursor position automatically. Usually, I use the idle sprite to define the height.
Once you declare it at the character header, the cursor will be adjusted automatically.

Sem título.png

This is how the character's height is configured
Code:
##MAIN
name        Axel
type         player
height       74

This is cursor's position formula in the script.
C:
float xPos       = openborvariant("xpos");
float yPos      = openborvariant("ypos");
float screen    = openborvariant("gfx_y_offset");
int x           = getentityproperty(self, "x");
int y           = getentityproperty(self, "y");
int z           = getentityproperty(self, "z");
int height      = getentityproperty(self, "height");
int xDif        = 4;
int yDif        = 16;

x = x-xPos-xDif; //CALCULATE X POSITION TO BIND PARROW IN THE ENTITY, OFFSET IS ALWAYS THE CENTER
y = z-yPos+screen-y-height-yDif; //CALCULATE Y POSITION TO BIND PARROW IN THE ENTITY
 
The partner menu uses the character's height to adjust the cursor position automatically. Usually, I use the idle sprite to define the height.
Once you declare it at the character header, the cursor will be adjusted automatically.

View attachment 1585

This is how the character's height is configured
Code:
##MAIN
name        Axel
type         player
height       74

This is cursor's position formula in the script.
C:
float xPos       = openborvariant("xpos");
float yPos      = openborvariant("ypos");
float screen    = openborvariant("gfx_y_offset");
int x           = getentityproperty(self, "x");
int y           = getentityproperty(self, "y");
int z           = getentityproperty(self, "z");
int height      = getentityproperty(self, "height");
int xDif        = 4;
int yDif        = 16;

x = x-xPos-xDif; //CALCULATE X POSITION TO BIND PARROW IN THE ENTITY, OFFSET IS ALWAYS THE CENTER
y = z-yPos+screen-y-height-yDif; //CALCULATE Y POSITION TO BIND PARROW IN THE ENTITY
Is it the 'height' part of (Entity=Character)****.txt?
 
Yes, the "height" is one of the main character properties, usually called as "character's header".
There seems to be a problem. It doesn't seem to change even if I edit the height in the entity header.
Just in case, I applied it with Street of rage 2x, and it is the same.

default 74
change 20

street.PNG
 
Last edited:
예, "높이"는 일반적으로 "문자 헤더"라고 하는 주요 문자 속성 중 하나입니다.
I solved it. I was looking for something like this without knowing it, and somehow it was solved.
I fixed 'yDif =' in void partnerArrow() and it worked.


//BIG ARROW, SAME AS PLAYERS, USED DURING PARTNER'S RESPAWN
if(life > 0 && blink){
xDif = 15;
yDif = 50; <=========================== this part

setdrawmethod(NULL(),0,256,256,0,0,0,0);
x = x-xPos-xDif; //CALCULATE X POSITION TO BIND PARROW IN THE ENTITY, OFFSET IS ALWAYS THE CENTER
y = z-yPos+screen-y-yDif; //CALCULATE Y POSITION TO BIND PARROW IN THE ENTITY
drawsprite(getglobalvar("parrow5"), x, y, z); //DRAW PARROW

p arrow.PNG
 
@DD Tokki
After seeing your image, now I understand the problem. The partner's script uses height only for the small arrow, not for the big arrow.
The big one uses a default distance from the character, same as the native engine arrow.

If you take a look at the original script I created, you can confirm it.
C:
void partnerArrow()
{//Draw custom parrow in the screen for NPC PARTNERS, entity binded like RPG games
    
    if(openborvariant("in_level")){ //IN ANY LEVEL??
        void self = getlocalvar("self");
        void type = getentityproperty(self, "type");

        if(type == openborconstant("TYPE_NPC")){
            void cursor        = ";";
            float time        = openborvariant("elapsed_time");
            float xPos        = openborvariant("xpos");
            float yPos        = openborvariant("ypos");
            float screen    = openborvariant("gfx_y_offset");
            int blink        = getentityproperty(self, "blink");
            int life        = getentityproperty(self, "health");
            int x            = getentityproperty(self, "x");
            int y            = getentityproperty(self, "y");
            int z            = getentityproperty(self, "z");
            int height        = getentityproperty(self, "height");
            int xDif        = 4;
            int yDif        = 16;
            int font0        = 0;
            int font1        = 4;
            int xCall        = 8;
            int yCall        = 10;
            
            //NORMAL ARROW, SAME AS PLAYERS, USED DURING CALL MESSAGE OR IF PLAYER ARROW IS ENABLED
            if(life > 0 && !blink){
                x = x-xPos-xDif; //CALCULATE X POSITION TO BIND PARROW IN THE ENTITY, OFFSET IS ALWAYS THE CENTER
                y = z-yPos+screen-y-height-yDif; //CALCULATE Y POSITION TO BIND PARROW IN THE ENTITY

                //PLAYER ARROW IS ENABLED AND NOT BLINKING??
                if(getglobalvar("playerArrow") == "on"){
                    drawstring(x, y, font1, cursor, z); //DRAW PARROW
                }

                //PARTNER CALL BUTTON IS HELD AND NOT BLINKING??
                if(getglobalvar("partnerParrow") == "call"){
                    drawstring(x-xCall, y-yCall, font0, "call", z); //DRAW CALL MESSAGE
                    drawstring(x, y, font1, cursor, z); //DRAW PARROW
                }
            }
            
            //BIG ARROW, SAME AS PLAYERS, USED DURING PARTNER'S RESPAWN
            if(life > 0 && blink){
                xDif = 15;
                yDif = 150;
                
                setdrawmethod(NULL(),0,256,256,0,0,0,0);
                x = x-xPos-xDif; //CALCULATE X POSITION TO BIND PARROW IN THE ENTITY, OFFSET IS ALWAYS THE CENTER
                y = z-yPos+screen-y-yDif; //CALCULATE Y POSITION TO BIND PARROW IN THE ENTITY
                drawsprite(getglobalvar("parrow5"), x, y, z); //DRAW PARROW
            }
        }
    }
}

Here's the height property working:
 
@DD Tokki
After seeing your image, now I understand the problem. The partner's script uses height only for the small arrow, not for the big arrow.
The big one uses a default distance from the character, same as the native engine arrow.

If you take a look at the original script I created, you can confirm it.
C:
void partnerArrow()
{//Draw custom parrow in the screen for NPC PARTNERS, entity binded like RPG games
  
    if(openborvariant("in_level")){ //IN ANY LEVEL??
        void self = getlocalvar("self");
        void type = getentityproperty(self, "type");

        if(type == openborconstant("TYPE_NPC")){
            void cursor        = ";";
            float time        = openborvariant("elapsed_time");
            float xPos        = openborvariant("xpos");
            float yPos        = openborvariant("ypos");
            float screen    = openborvariant("gfx_y_offset");
            int blink        = getentityproperty(self, "blink");
            int life        = getentityproperty(self, "health");
            int x            = getentityproperty(self, "x");
            int y            = getentityproperty(self, "y");
            int z            = getentityproperty(self, "z");
            int height        = getentityproperty(self, "height");
            int xDif        = 4;
            int yDif        = 16;
            int font0        = 0;
            int font1        = 4;
            int xCall        = 8;
            int yCall        = 10;
          
            //플레이어와 동일한 일반 화살표, 호출 메시지 중 또는 플레이어 화살표가 활성화된 경우 사용
            if(life > 0 && !blink){
                x = x-xPos-xDif; //엔티티에서 앵무새를 바인딩할 X 위치를 계산합니다. 오프셋은 항상 중심입니다.
                y = z-yPos+화면-y-높이-yDif; //엔티티에서 PARROW를 바인딩하기 위한 Y 위치 계산

                //플레이어 화살표가 활성화되고 깜박이지 않습니까?
                if(getglobalvar("playerArrow") == "켜기"){
                    drawstring(x, y, font1, 커서, z); // 패로우 그리기
                }

                //파트너 콜 버튼이 깜박이지 않고 유지됨??
                if(getglobalvar("partnerParrow") == "호출"){
                    drawstring(x-xCall, y-yCall, font0, "호출", z); //통화 메시지 그리기
                    drawstring(x, y, font1, 커서, z); // 패로우 그리기
                }
            }
          
            //큰 화살표, 플레이어와 동일, 파트너 리스폰 시 사용
            if(생명 > 0 && 깜박임){
                xDif = 15;
                yDif = 150;
              
                setdraw 메서드(NULL(),0,256,256,0,0,0,0);
                x = x-xPos-xDif; //엔티티에서 앵무새를 바인딩할 X 위치를 계산합니다. 오프셋은 항상 중심입니다.
                y = z-yPos+스크린-y-yDif; //엔티티에서 PARROW를 바인딩하기 위한 Y 위치 계산
                drawsprite(getglobalvar("parrow5"), x, y, z); // 패로우 그리기
            }
        }
    }
}[/암호]

작동하는 height 속성은 다음과 같습니다.
[MEDIA=youtube]I1WerjOCGL[/MEDIA]
[/QUOTE]

@DD Tokki
After seeing your image, now I understand the problem. The partner's script uses height only for the small arrow, not for the big arrow.
The big one uses a default distance from the character, same as the native engine arrow.

If you take a look at the original script I created, you can confirm it.
C:
void partnerArrow()
{//Draw custom parrow in the screen for NPC PARTNERS, entity binded like RPG games
   
    if(openborvariant("in_level")){ //IN ANY LEVEL??
        void self = getlocalvar("self");
        void type = getentityproperty(self, "type");

        if(type == openborconstant("TYPE_NPC")){
            void cursor        = ";";
            float time        = openborvariant("elapsed_time");
            float xPos        = openborvariant("xpos");
            float yPos        = openborvariant("ypos");
            float screen    = openborvariant("gfx_y_offset");
            int blink        = getentityproperty(self, "blink");
            int life        = getentityproperty(self, "health");
            int x            = getentityproperty(self, "x");
            int y            = getentityproperty(self, "y");
            int z            = getentityproperty(self, "z");
            int height        = getentityproperty(self, "height");
            int xDif        = 4;
            int yDif        = 16;
            int font0        = 0;
            int font1        = 4;
            int xCall        = 8;
            int yCall        = 10;
           
            //NORMAL ARROW, SAME AS PLAYERS, USED DURING CALL MESSAGE OR IF PLAYER ARROW IS ENABLED
            if(life > 0 && !blink){
                x = x-xPos-xDif; //CALCULATE X POSITION TO BIND PARROW IN THE ENTITY, OFFSET IS ALWAYS THE CENTER
                y = z-yPos+screen-y-height-yDif; //CALCULATE Y POSITION TO BIND PARROW IN THE ENTITY

                //PLAYER ARROW IS ENABLED AND NOT BLINKING??
                if(getglobalvar("playerArrow") == "on"){
                    drawstring(x, y, font1, cursor, z); //DRAW PARROW
                }

                //PARTNER CALL BUTTON IS HELD AND NOT BLINKING??
                if(getglobalvar("partnerParrow") == "call"){
                    drawstring(x-xCall, y-yCall, font0, "call", z); //DRAW CALL MESSAGE
                    drawstring(x, y, font1, cursor, z); //DRAW PARROW
                }
            }
           
            //BIG ARROW, SAME AS PLAYERS, USED DURING PARTNER'S RESPAWN
            if(life > 0 && blink){
                xDif = 15;
                yDif = 150;
               
                setdrawmethod(NULL(),0,256,256,0,0,0,0);
                x = x-xPos-xDif; //CALCULATE X POSITION TO BIND PARROW IN THE ENTITY, OFFSET IS ALWAYS THE CENTER
                y = z-yPos+screen-y-yDif; //CALCULATE Y POSITION TO BIND PARROW IN THE ENTITY
                drawsprite(getglobalvar("parrow5"), x, y, z); //DRAW PARROW
            }
        }
    }
}

Here's the height property working:
It was only for text composed of fonts.
Thanks to you, I am also learning.
 
Back
Top Bottom