Discussion Constant Player Red?

tooltiperror

Super Moderator
Reaction score
231
Is there a constant player variable for player one?
 

Bribe

vJass errors are legion
Reaction score
67
No, there isn't. I don't believe you can initialize players in the globals block, but it's OK because constant handle-based variables are essentially the same speed as dynamic ones.

You can do:

JASS:
globals
    player pRed = null
endglobals

scope InitPlayerRed initializer Init
    private function Init takes nothing returns nothing
        set pRed= Player(0)
    endfunction
endscope
 

Nestharus

o-o
Reaction score
84
Or you can just do

JASS:
globals
    player playerOne = Player(0)
endglobals



A constant would return Player(0) in vjass from inlining, so like

[ljass]DisplayTestToPlayer(GetLocalPlayer(), 0, 0, GetPlayerName(PLAYER_ONE))[/ljass]

would be like

[ljass]DisplayTestToPlayer(GetLocalPlayer(), 0, 0, GetPlayerName(Player(0)))[/ljass]

rather than using the variable

Ofc if you want to do a readonly style with OOP ^.^

JASS:
struct Players extends array
    public static readonly playerOne = Player(0)
endstruct


edit
Furthermore, without inlining, constants are the same speed as regular variables ; P.
 

Jesus4Lyf

Good Idea™
Reaction score
397
A constant would return Player(0) in vjass from inlining, so like

[ljass]DisplayTestToPlayer(GetLocalPlayer(), 0, 0, GetPlayerName(PLAYER_ONE))[/ljass]

would be like

[ljass]DisplayTestToPlayer(GetLocalPlayer(), 0, 0, GetPlayerName(Player(0)))[/ljass]

rather than using the variable
Have you tried and tested that?
 

uberfoop

~=Admiral Stukov=~
Reaction score
177
Have you tried and tested that?

This:

Untitled Trigger 001 in JNGP:
JASS:

globals
    constant player playerOne = Player(0)
endglobals

function RAWR takes nothing returns nothing
    call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, GetPlayerName(playerOne))
endfunction


Becomes these:

Part of war3map.j global box in JSP after compiling:
JASS:

constant player playerOne= Player(0)


war3map.j farther down in JSP after compiling:
JASS:

//===========================================================================
// Trigger: Untitled Trigger 001
//===========================================================================
//TESH.scrollpos=0
//TESH.alwaysfold=0

function RAWR takes nothing returns nothing
    call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, GetPlayerName(playerOne))
endfunction//===========================================================================
function InitCustomTriggers takes nothing returns nothing
    call InitTrig_StrSteal()
    //Function not found: call InitTrig_Untitled_Trigger_001()
endfunction
 

Nestharus

o-o
Reaction score
84
Ah ok o-o. I guess it does not inline native calls, or perhaps it inlines some and does not others o-o. Maybe only primitive values.

Eh w/e ^>^
 

Jesus4Lyf

Good Idea™
Reaction score
397
Nestharus, as far as I'm concerned, it was never true. I don't have any evidence that there was ever a bug in JassHelper about inlining constant handles (but perhaps there was), but you've been repeating it for the last year or so. I just wanted to know if you actually had any evidence or if you were just repeating unfounded misinformation again.
I don't believe you can initialize players in the globals block
Personally I even doubt that that's true. I'd assume this would work just fine:
JASS:
globals
    constant player PLAYER_ONE=Player(0)
endglobals

But have not tried it myself. :)
 

Nestharus

o-o
Reaction score
84
But have not tried it myself.
You can in fact initialize players in globals block ^.^. I do it all the time.

Nestharus, as far as I'm concerned, it was never true. I don't have any evidence that there was ever a bug in JassHelper about inlining constant handles (but perhaps there was), but you've been repeating it for the last year or so. I just wanted to know if you actually had any evidence or if you were just repeating unfounded misinformation again.

I apologize ; ), seem to keep forgetting about that with all of the work I've been doing o-o.
 

Troll-Brain

You can change this now in User CP.
Reaction score
85
But i have read that wc3mapoptimizer inlines all constants, regardless it's an handle or not (never tested, simply because never used it)
 

Nestharus

o-o
Reaction score
84
But i have read that wc3mapoptimizer inlines all constants, regardless it's an handle or not (never tested, simply because never used it)

Yea, that's what I had read too ; D.

- Added "Inline constant globals" method.

I was probably confusing jasshelper or w/e with wc3mapoptimizer since I always use the optimizer when I'm releasing a map ;o.

Anyways, the fact is that the optimizer would do it and not vjass, so I'd still be personally wrong ^.^.
 

uberfoop

~=Admiral Stukov=~
Reaction score
177
Can we have this tested? :)
I'll give it a shot.

It seems that Vexorians Optimizer inlines constants when "optimize script" AND "compress names" are both checked.


Anyhow...

Before:
JASS:

scope InlineTest
    globals
        constant real Real = 3.0
        constant integer Integer = 3
        constant string String = "Three"
        constant boolean Boolean = false
        constant player PLAYER = Player(0)
        constant unit UNIT = CreateUnit(Player(0),'hfoo',0,0,0)
        constant unit UNIT_TEST_ABOVE = CreateUnit(PLAYER,Integer,Real,Real,Real)
        constant unit UNIT_WEIRD = bj_lastCreatedUnit
    endglobals

    function TheGoodTheBadAndTheUgly_IsTheGreatestFilmEver takes nothing returns nothing
        local real r = Real
        local integer i = Integer
        local string s = String
        local boolean b = Boolean
        local player p = PLAYER
        local unit u = UNIT
        local unit uta = UNIT_TEST_ABOVE
        local unit uw = UNIT_WEIRD
    endfunction
endscope


After:
Map globals block (with interesting Optimizer-generated variables E, X, and I shown):
JASS:

globals
constant player e=Player(0)
constant unit x=CreateUnit(Player(0),'hfoo',0,0,0)
constant unit o=CreateUnit(e,3,3.,3.,3.)
constant unit a=bj_lastCreatedUnit
real E=.0
real X=.0
boolexpr I=null
endglobals


The function:
JASS:

function TheGoodTheBadAndTheUgly_IsTheGreatestFilmEver takes nothing returns nothing
local real r=3.
local integer i=3
local string s="Three"
local boolean b=false
local player p=e
local unit u=x
local unit uta=o
local unit uw=a
endfunction



It seems that the optimizer does not want to inline constant handles.
 

Troll-Brain

You can change this now in User CP.
Reaction score
85
No no no !
You haven't tested all versions of wc3mapoptimizer, so it could be a myth instead of a legend :D
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top