Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - AllMoDs

wasn't paying attention where I posted the tutorial can you move to its appropriate place thank you
66 days ago

your game will show on lan and net i was runing every thing frome same folder here in vid
so that means that your game will be broadcast over the internet and anyone you give the consol link to can join your sever
and if you do everything correctly and they don't have your mod they can download it directly just from joining your server you do not have to send them a download link
how many people you can host and how fast the clients download speed depends on your internet
for best results run this on a whole nother computer you're not going to play the game on and make sure you have a lan connection not Wi-Fi
one thing I did not cover there's too many routers out there for me to

warning warning
for people to connect to you going to have to give your main router's IP address for them to put in their console in waw setup a VPN or setup a static IP on your main router
google info specific to your router for this info you will use the VPN IP address or the static IP address for the stuff below that does not specify your PC's IP if you cannot do either one of these do not and I repeat do not give that Ip that you have to use to people you do not trust a hundred percent and I mean a hundred percent if you cannot do one of the top two suggestions my advice pay for the cheapest VPN you can forward suggested ports according to VPNs ip
and I would not follow this tutorial any further if you continue with this tutorial and you cannot do one of the 2 tgings you will endanger all of your Internet devices in anything connected which runs the risk of losing personal data if the wrong person gets the IP address
and if you can or if you can't do the top two things never post the IP stuff on any website links or anything give it to the person directly and by directly I mean by text message  private messages or any other source were no one else but you and then are going to see it
so I will say this again if you cannot do one of the top two things I suggested do not continue if you do it's at your own risk


things you will need to do



#1: a 2nd drive on your pc to get best out of your sever  must be big enough for you to copy your steam Call of Duty World at War
note: if you install mod Tools in your steam directory of World at War drag the whole world at war folder to your desktop redownload waw to your Steam folder after its dun move to 2nd drive in a folder named cod5 go in your steam settings and enable a secondary location for your games so it reads the new location directed to the folder you just made move your original copy back where in steam folder.  cod5  folder will have all exe and so on in it dont make a folder in cod5  folder to put stuff in  so in cod5 folder will be fresh steam copy of waw

#2: make new folder in drive with cod5 folder  named sever_mods inside this folder make 2 new folders named mods 2nd folder usermaps what ever mod your are runing in mp put in both folders the appdata copy of the mod

make a new folder in same drive as cod5 foler name it servers make 2 new folder in that foler.  name 1 main , 2nd  mods and  go to cod5 folder copy pb folder past in servers folder
note: every mod you are running must be same in all folders same copy but dont put a mod in this mod foler this is just for consal log files & server log files will make text files with info

make a new folder in same drive as cod5 foler name it server go to cod5 folder copy pb and main folder past in server folder go in main folder deleate video folder do same in cod5 folder
not sever and severs folder and not same folder
pb folder runs punkbuster on your sever if its set to 1
and sever.gsc that runs on the sever gos in main folder I had you put another location so you have a backup
#3: forward these ports in your router
28900 to 28970 - TCP and UDP
20500 to 20510 - TCP and UDP
20600 to 20610 - TCP and UDP
27900 - TCP and UDP
local port is 28960
forward two pc's IP server is running on port 28960 is master port for control and admin port rcon login
#4: make a new gsc name it  servers note the ip part with your ip only put in your appdata copy  and sever_mods folder  and in main folder
past this in
Sorry but you are not allowed to view spoiler contents.
look it over put your info in where you will see where

#5:  make a shortcut of the cod5 folders codwawmp.exe move to desktop right click it
where target is go to end of what is there and hit spacebar 1 time past this in
Sorry but you are not allowed to view spoiler contents.
where ???? are put same ip from sever.gsc  aka go to google serch what is my ip

#6:  make shortcut form sream copy of codwawmp.exe to desttop name it game play or somthing rename the one frome cod5 folder sever
righr click steam copy of codwawmp.exe and in at end of target pu this 
+set net_port 28961 must be a space betwean what there and what you add

#7:  now your ready to test click the sever exe you made box will pop up  this is your sever all info shows in this window and is dumped to  severs folder
will se this at end part of window

IP specified on command line, setting to: ???????:28960
Advertising on ????????:28960
?????? = your pc ip this means you did every thing right and your sever is live and running and friends can join your sever
by puting this in there consol

 /connect xxx.xxx.xxx.xxx:28960xxx = same ip from sever.gsc  aka go to google serch what is my ip
you can look up how to set a static IP on Main router so people don't have your real one
and still only give the connect part to people you trust sorry can't do any tutorials on port forwarding and setting static IP too many routers out there
now click the short cut from stem dont load your mod find your mod in net games or lan game click to join your sever in your sever box you will see that you joined and files your are getting
 if you get in game all is good to go last part to add client mod download part  which will be an internet page to generate from your own computer that anyone in the world can access if they have the web link
drive.google.com














still get rcon tool
you can skip this whole part here if you're going to give the people that are going to join you to download link but it be faster for them if you set this up
so they can directly download it through Call of Duty from your PC this will trick waw into thinking it's connected to its download server
the stuff below will also work for hosting your own built internet page for everybody for anything over the Internet only downside is you have to use there URL

there are 2 programs in here
miniweb.exe  this makes a local internet page out of what is in the htdocs folder in the htdocs there are 2 folder put your mod in both appdata copy if you add sever,gsc take all your info out this is what the client is going to download if they don't have your mod and your give them stuff to join

2nd is ngrok this make your local miniweb site brodecast to the world wide web for anyone with the link can access it
the purpose of doing this is so the dl speed for joining client will be increased depending on your internet speed if you do not set this up the game will default to your server folder and download from there I have very great internet and if it defaults to that folder the download speed for the client will take over an hour doing this trick I figured out my client download speed is 3 megabytes per second

open miniweb it will show a ip and a port wil look somthing like this
192.168.1.191:8000
put this in web browser on same network as your pc
it should show the content of htdocs folder what is the mods and usermaps folder in eack should be a folder of your mod  appdata copy

now open ngrok  type this in hit enter
ngrok http 8000

this make your files access from anywhere  on the internet if they have the link 

where you see 1st Forwarding  copy link will look somthing like this
http://b59cce4c.ngrok.io

this will go in your server.gsc the ones with your ip info not one people are downloading look for this
seta sv_wwwBaseURL "link you get from ngrok "
put link you get in will look like this
seta sv_wwwBaseURL "]http://b59cce4c.ngrok.io "
this will teal the game to download the mod from this website for clients that don't have it
depending on your internet speed may want to reduce the amount of clients that can connect to you
look for this
set sv_maxclients "28"
i can have 28 with no prob

you have to update the dl link in your server.gsc  file every time you relaunch these files this part
svwwwbaseurl "??????" or if time runs out on ngrock
both of these programs and your server have to be running
ngrok is free so it willonly stay up 7 hours 30 minutes

thats it all dun I'll say this again set a static IP on your main router some people don't have your real one and everywhere I say to put your main router's IP replace with the static IP if you have a VPN setup use your VPN IP depending on your VPN you may need to forward your ports different Google


drive.google.com
















this is rcon login tool for admin right over your sever if someone is acting up in your server do not ban them with punkbuster  it will ban them on all punkbuster games
I was told for whatever time Is that in your server file or in rcon tool
you loh in rcon with pw you set in sever gsc here
set rcon_password "1234" // set for admin controll
port is 28960
ip is your pc ip that showed in sever window

last thing to run the best server ever run it on another computer that you're not going to be playing the game on and have it on lan not wi fi
if you need help pm me
66 days ago
Call of Duty Dragon Ball super multiplayer mod with dedicated server support

lot of work left to do on this I'm still going to make the zombies version as well
took me two days to get this dedicated server to work
69 days ago




this will be my 2nd map
I've been working on this mod on and off for about 8 months
my idea for this mod it will be just like the tournament of power I will add every model that was in the show
when you first start your pick which Universe you want to play with
no player will be able to pick the same universe when you first start your pick which Universe you want to play with
when you die you will lose a character once you lose all your characters you're out the tournament
last two players will have to fight each other plus the zombies Last Man Standing wins and the center timer will be counting down as well every so many quarters you  lose a character from your universe
78 days ago
the reason why I'm posting this I needed something to grab path nodes to a set point with no problem
this dont work good no mater what i use it on ingame i loos fps
nodes = GetAllNodes();		
goal = get_array_of_closest( self.favoriteenemy.origin, nodes, undefined, 45);

GetAllNodes works fine but get_array_of_closest dus not work good at all or getNodeArray() didnt ever get it to work for what i need so  i made a diff script based off a default cod one works like a charm

can use this with path_node grabber in game
will show grabbed path nodes count and origin of the number 7 node "iPrintLn(" array 2 nodes origin " + new_nods[7].origin);" when you shoot your gun this can allso help you find bad paths if nods are not spaced out good for zombies


a good count is 23 and up if in a open space with 400 being how far you look if lower might need to look at
help if you no you got bad nodes and zombies dont do right in a spot in your map now you can check the nodes ingame as you walk

update physically see your path node layout in game
shoot 1 time to play fx on all grabbed path nodes shoot 2nd time to delete fx and script model and repeat


add you own nun looping fx  where ??????? is
level._effect["kiblast"] = loadfx( "?????????t" );
and you get fx on your path nodes they delete when you shoot 2nd time or use way point just add pick here //self.target_scan = "????????"; un comment all take fx off
see_node()
{
    self endon("disconnect");
    self.nod_spot = 0;
    set_node_fx = 1;
    for (;;)
    {
        self waittill("weapon_fired");
        {

if (set_node_fx == 1)
            {
                self.bullets2 = [];
                self.new_nods = self get_desired_paths_nods(self.origin, 400, 60, 0);
iPrintLn("nodes array size " + self.new_nods.size);
                for (i = 0; i < self.new_nods.size; i++)
                {
                    if (self.nod_spot < self.new_nods.size)
                    {
                        self.bullets2[self.nod_spot] = Spawn("script_model", self.new_nods[self.nod_spot].origin);
                        self.bullets2[self.nod_spot] SetModel("tag_origin");
                        PlayFXOnTag(level._effect["kiblast"], self.bullets2[self.nod_spot], "tag_origin");
//self.target_scan = "????????";
//self.payload2 = NewClientHudElem(self);
//self.payload2.hideWhenInMenu = true;
//self.payload2 setshader( self.target_scan, 40, 40 );
//self.payload2 SetTargetEnt( self.bullets2[self.nod_spot]);
//self.payload2 setWayPoint( true, self.target_scan );
                        self.nod_spot = self.nod_spot + 1;
                    }
set_node_fx = 0;
                }

            }
            else if (set_node_fx == 0)
            {                           
for (i = 0; i < self.new_nods.size; i++)
                {
if (self.nod_spot.size > - 1)
{
  self.bullets2[self.nod_spot] delete();
  self.nod_spot = self.nod_spot - 1;
 
}
self.bullets2[0] delete();
set_node_fx = 1;
}
            }
wait .05;
        }
       
    }
}




get_desired_paths_nods(A, B, C, D or E)
D or E allways start with D so you dont loos fps from grabbing every path-nod out side where you look
/* 
 ============= AllMoDs AKA KrooKlyN 8/24/2018================
///ScriptDocBegin
//get_desired_paths_nods(A, B, C, D or E)
// A:origin to start from
//B: distance from start origin to start looking for path_nodes determined by  D or E );
//C: max size of path_nodes to return
// D: return the nodes, reordered from closest to farthest aka <  Example new_nods[0].origin is closer set a 0 for this
// E: return the nodes, reordered from farthest to closest aka >  Example new_nods[0].origin is farthest set a 1 for this
///ScriptDocEnd
 =========================================
 */
///////////////////path_nods only////////////////////////////////
get_desired_paths_nods(org, dis, new_max, lessthan_biggerthan)
{
    nodes = GetAllNodes();
    dist = [];
    index = [];
max = undefined;
    for (i = 0; i < nodes.size; i++)
    {
        length = distancesquared(org, nodes[i].origin);
if (lessthan_biggerthan == 0)
{
if ( dis * dis < length)
continue;
dist[dist.size] = length;
index[index.size] = i;
}
if (lessthan_biggerthan == 1)
{
if ( dis * dis > length)
continue;
dist[dist.size] = length;
index[index.size] = i;
}   
    }
    for (;;)
    {
        change = false;
        for (i = 0; i < dist.size - 1; i++)
        {
            if (dist[i] <= dist[i + 1])
continue;
            change = true;
            temp = dist[i];
            dist[i] = dist[i + 1];
            dist[i + 1] = temp;
            temp = index[i];
            index[i] = index[i + 1];
            index[i + 1] = temp;
        }
        if (!change) break;
    }
    newnodes = [];
    if (new_max > dist.size)
max = max + new_max;
max = dist.size;
    for (i = 0; i < new_max; i++)
newnodes[i] = nodes[index[i]];
    iPrintLn(" array 1 nodes origin " + newnodes[7].origin);
return newnodes;
}



must define everything


this one you can send any array to check 
and you can run something in it 2 times one getting < and then send  it back in doing > will get you ring of what ever you are looking for
Example
1strun = get_desired_paths_nods(A, B, 1000, D, 0); //set 0 at end
2ndrun = get_desired_paths_nods(A, 1run , 500, D, E or 1); //set 1 at end and use 1strun as array in 2nd part
/* 
 ========================== AllMoDs AKW KrooKlyN 8/24/2018================
///ScriptDocBegin
//get_desired_paths_nods(A, B, C, D, E or f)
// A:origin to start from
//B array to check
//C: distance from start origin to start looking for array determined by  E or F);
//D: max size of arrayto return
// E: return the array, reordered from closest to farthest aka <  Example new_nods[0].origin is closer set a 0 for this
// F: return the array, reordered from farthest to closest aka >  Example new_nods[0].origin is farthest set a 1 for this
///ScriptDocEnd
 =============
 */
////////////////any array///////////////////////////////
get_desired_paths_nods(org, array, dis, new_max, lessthan_biggerthan)
{
    dist = [];
    index = [];
max = undefined;
    for (i = 0; i < array.size; i++)
    {
        length = distancesquared(org, array[i].origin);
if (lessthan_biggerthan == 0)
{
if ( dis * dis < length)
continue;
dist[dist.size] = length;
index[index.size] = i;
}
if (lessthan_biggerthan == 1)
{
if ( dis * dis > length)
continue;
dist[dist.size] = length;
index[index.size] = i;
}   
    }
    for (;;)
    {
        change = false;
        for (i = 0; i < dist.size - 1; i++)
        {
            if (dist[i] <= dist[i + 1])
continue;
            change = true;
            temp = dist[i];
            dist[i] = dist[i + 1];
            dist[i + 1] = temp;
            temp = index[i];
            index[i] = index[i + 1];
            index[i + 1] = temp;
        }
        if (!change) break;
    }
    newnodes = [];
    if (new_max > dist.size)
max = max + new_max;
max = dist.size;
    for (i = 0; i < new_max; i++)
newnodes[i] = array[index[i]];
    iPrintLn(" my origin " + self.origin);
return newnodes;
}


87 days ago
I've been working on this on and off for over a year
last thing I have left to do is get the projectile entity better
so the damage is taken when the bullet or projectile hits the other player better than the way I have it now

I finally figured out how to get the entity of every  projectile shot for each client
now I can take damage based on where the projectile hits the player
like headshots , torso to shoulders and torso and down
96 days ago
it took me awhile but I finally figured out how to Precache your own  named menus
and buy  name I mean the menu file itself and the menu name  so that means you
can make as many in-game menu files as you want and not have to use Activision created menus

step 1

back up this file

Sorry but you are not allowed to view spoiler contents.
this file is what loads all in game menus

step 2
replace whats in side with this
Sorry but you are not allowed to view spoiler contents.

you will see this
loadMenu { "ui/_yourmenu.menu" } /// your .menu   #1
loadMenu { "ui/_yourmenu2.menu" } /// your .menu #2
add as maney as needed

step 3
add this to mod csv
Sorry but you are not allowed to view spoiler contents.


note
if you are building your mod and you get a error about duplicate menu
take any
menufile,ui
menufile,ui_mp
files out of mod csv you added the error will teal you what one " they will still get added because of the ingame.txt"
depending on the menu you use the error will give you the menu name not the file name


bugs
the option that has subtitle  settings in it is not there "ingame only"
the option to bind a key for talking and text in it is not there "ingame only"

todo
I will pull the menu files that run the above things and add them in


when you name your menus names, name them the same thing as the file with out the _

so lets say my menu file is _allmodsstore.menu

menu name in file needs to look like this
Sorry but you are not allowed to view spoiler contents.


step 4 optional
make a new menu file with this name
Sorry but you are not allowed to view spoiler contents.

put this in it
[noae][noae][noae][noae]
//#define ENABLE_BUTTON_BG		1	// enables button background image
#define ENABLE_SEPARATOR 1 // enables separator bars
#define ENABLE_TITLE_BG 1 // enables menu title background graphics

/*
#ifndef CHOICE_SIZE_X
#error "CHOICE_SIZE_X undefined"
#endif
#ifndef CHOICE_SIZE_Y
#error "CHOICE_SIZE_Y undefined"
#endif
*/

#ifndef CHOICE_SIZE_X
#define CHOICE_SIZE_X 150
#endif

#ifndef CHOICE_SIZE_Y
#define CHOICE_SIZE_Y 22
#endif

#ifndef CHOICE_SIDEITEM_SIZE_X
#define CHOICE_SIDEITEM_SIZE_X 64
#endif
#ifndef CHOICE_SIDEITEM_SPACING
#define CHOICE_SIDEITEM_SPACING 16
#endif

#ifndef CHOICE_GROUP
#define CHOICE_GROUP ""
#endif

#ifndef CHOICE_X_START
#define CHOICE_X_START 1 // +=right  -=left how far left and right ...
#endif

#ifndef CHOICE_X_SPACING
#define CHOICE_X_SPACING 25 //25 is min  // Allmods SPACING from left to right between buttons
#endif

#ifndef CHOICE_Y_START
#define CHOICE_Y_START -40// +=up -=down// up down all buttions
#endif

#ifndef CHOICE_Y_SPACING
#define CHOICE_Y_SPACING 20
#endif

#ifndef CHOICE_Y_COUNT
#define CHOICE_Y_COUNT 20
#endif

#ifndef CHOICE_TEXT_OFFSET_X
#define CHOICE_TEXT_OFFSET_X 22
#endif

#ifndef SECTION_TEXT_OFFSET_X
#define SECTION_TEXT_OFFSET_X 0
#endif

#ifndef CHOICE_ACCEPT_ALIGN_X
#define CHOICE_ACCEPT_ALIGN_X 6
#endif

#ifndef CHOICE_ACCEPT_ALIGN_Y
#define CHOICE_ACCEPT_ALIGN_Y 2
#endif

#ifndef NEW_X_OFFSET
#define NEW_X_OFFSET 0
#endif

#ifndef NEW_Y_OFFSET
#define NEW_Y_OFFSET 0
#endif

#ifndef TITLE_Y_OFFSET
#define TITLE_Y_OFFSET 0
#endif

#ifndef TITLE_X_OFFSET
#define TITLE_X_OFFSET 0
#endif

#ifndef CHOICE_FOCUS_SOUND
#define CHOICE_FOCUS_SOUND ""
#endif

#ifndef CHOICE_ACTION_SOUND
#define CHOICE_ACTION_SOUND "mouse_click"
#endif

#ifndef CHOICE_TEXTSIZE
#define CHOICE_TEXTSIZE TEXTSIZE_DEFAULT
#endif

#ifndef CHOICE_TEXTFONT
#define CHOICE_TEXTFONT UI_FONT_NORMAL
#endif

#ifndef CHOICE_HEADERCOLOR
#define CHOICE_HEADERCOLOR 0 0 0 0
#endif

#ifndef CHOICE_TEXTCOLOR
#define CHOICE_TEXTCOLOR 0 0 0 0//1 1 1 1
#endif

#ifndef CHOICE_TEXTCOLOR_CAPT
#define CHOICE_TEXTCOLOR_CAPT CHOICE_TEXTCOLOR
#endif

#ifndef CHOICE_TEXTSTYLE
#define CHOICE_TEXTSTYLE 0
#endif

#ifndef CHOICE_TEXTALIGN
#define CHOICE_TEXTALIGN ITEM_ALIGN_MIDDLE_LEFT
#endif

#ifndef ALT_HINT_X_OFFSET
#define ALT_HINT_X_OFFSET -16
#endif

#ifndef SECTION_X_OFFSET
#define SECTION_X_OFFSET 0
#endif

#ifndef SECTION_Y_OFFSET
#define SECTION_Y_OFFSET 0
#endif

#ifndef CHOICE_TEXTCOLOR_DISABLED
#define CHOICE_TEXTCOLOR_DISABLED 0 0 0 0
#endif

#ifndef CHOICE_TEXTCOLOR_SELECTABLE
#define CHOICE_TEXTCOLOR_SELECTABLE 0 0 0 0
#endif

#ifndef CHOICE_SEP_WIDTH
#define CHOICE_SEP_WIDTH 130
#endif

#ifndef CHOICE_SEP_OFFSET_X
#define CHOICE_SEP_OFFSET_X 0
#endif

#ifndef CHOICE_SEP_OFFSET_Y
#define CHOICE_SEP_OFFSET_Y 0
#endif

#ifndef CHOICE_DVAR_WIDTH_OFFSET
#define CHOICE_DVAR_WIDTH_OFFSET 120
#endif

#ifndef CHOICE_DVAR_TEXTALIGN
#define CHOICE_DVAR_TEXTALIGN ITEM_ALIGN_MIDDLE_LEFT //ITEM_ALIGN_MIDDLE_RIGHT
#endif

#ifndef CHOICE_DVAR_OFFSET_X
#define CHOICE_DVAR_OFFSET_X (0 - CHOICE_TEXT_OFFSET_X)
#endif

#ifndef CHOICE_SEP_BACKGROUND
#define CHOICE_SEP_BACKGROUND "menu_button_backing"
#endif

#ifndef HIGHLIGHT_SHADER_ART
#define HIGHLIGHT_SHADER_ART "button_highlight_end"
#endif

#ifndef ALTERNATE_HINT_SHADER
#define ALTERNATE_HINT_SHADER "alternate_hint"
#endif

#ifndef ALTERNATE_HINT_COLOR
#define ALTERNATE_HINT_COLOR 0 0 0 0 //0.55 0.95 0.55 0.9//0 1 0 0.35//0.75 .75 0.8 1
#endif

#ifndef HIGHLIGHT_COLOR
#define HIGHLIGHT_COLOR 0 0 0 0
#endif

#ifndef HIGHLIGHT_BORDER_COLOR
#define HIGHLIGHT_BORDER_COLOR 0 0 0 0
#endif

#ifndef CHOICE_HORIZONTAL_ALIGN
#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_DEFAULT
#endif

#ifndef CHOICE_VERTICAL_ALIGN
#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_DEFAULT
#endif

#ifndef HIGHLIGHT_BORDER
#define HIGHLIGHT_BORDER WINDOW_BORDER_RAISED
#endif

#ifndef HIGHLIGHT_SHADER
#define HIGHLIGHT_SHADER "menu_button_backing_highlight"
#endif

#ifndef A_BUTTON_SIZE
#define A_BUTTON_SIZE 0.4//0.33
#endif

#ifndef A_BUTTON_OFFSET_X
#define A_BUTTON_OFFSET_X 0//(0-4)
#endif

#ifndef A_BUTTON_FONT
#define A_BUTTON_FONT UI_FONT_NORMAL
#endif

#ifndef A_BUTTON_OFFSET_Y
#define A_BUTTON_OFFSET_Y 0
#endif


#ifdef PS3
#define A_BUTTON_BG_COLOR 0 0 0 0
#else
#define A_BUTTON_BG_COLOR 0 0 0 0
#endif

#define A_BUTTON_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL

#ifndef A_BUTTON_COLOR
#define A_BUTTON_COLOR 0 0 0 0
#endif

#ifndef BUTTON_BG_COLOR
#define BUTTON_BG_COLOR .0 .0 .0 .0//0 0 0 0.5
#endif

// ------------ splitscreen ----------------


// -----------------------------------------

#if !defined( CHOICE_SEP_1 ) || !defined( CHOICE_SEP_SPACING )
#define CHOICE_SEP_TOTAL_SPACING( itemIndex ) 0
#elif !defined( CHOICE_SEP_2 )
#define CHOICE_SEP_TOTAL_SPACING( itemIndex ) ((itemIndex <= CHOICE_SEP_1) ? 0 : CHOICE_SEP_SPACING )
#elif !defined( CHOICE_SEP_3 )
#define CHOICE_SEP_TOTAL_SPACING( itemIndex ) ((itemIndex <= CHOICE_SEP_1) ? 0 : ( (itemIndex <= CHOICE_SEP_2) ? CHOICE_SEP_SPACING : CHOICE_SEP_SPACING * 2 ) )
#else
#define CHOICE_SEP_TOTAL_SPACING( itemIndex ) ((itemIndex <= CHOICE_SEP_1) ? 0 : ( (itemIndex <= CHOICE_SEP_2) ? CHOICE_SEP_SPACING : ( (itemIndex <= CHOICE_SEP_3) ? CHOICE_SEP_SPACING * 2 : CHOICE_SEP_SPACING * 3) ) )
#endif

#define CHOICE_ROW( itemIndex ) ((itemIndex - 1) % CHOICE_Y_COUNT)
#define CHOICE_COL( itemIndex ) ((itemIndex - 1 - ((itemIndex - 1) % CHOICE_Y_COUNT)) / CHOICE_Y_COUNT)


#ifdef PC
#ifndef CHOICE_Y_OFFSET
#define CHOICE_Y_OFFSET 40
#endif
#else
#define CHOICE_Y_OFFSET 0
#endif

#define CHOICE_X( itemIndex ) (CHOICE_X_START + CHOICE_X_SPACING * CHOICE_COL( itemIndex ))
#define CHOICE_Y( itemIndex ) (CHOICE_Y_START + CHOICE_Y_OFFSET + CHOICE_Y_SPACING * CHOICE_ROW( itemIndex ) + CHOICE_SEP_TOTAL_SPACING( itemIndex ))
#define CHOICE_ORIGIN( itemIndex ) CHOICE_X( itemIndex ) CHOICE_Y( itemIndex )
#define CHOICE_RECT( itemIndex ) CHOICE_ORIGIN( itemIndex ) CHOICE_SIZE_X CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN

#define FOOTNOTE_RECT( x, y ) x y 240 60 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN

// ======================================================================================================================================
// ======================================================================================================================================
// ======================================================================================================================================

#define CHOICE_HIGHLIGHT( itemIndex, vis ) \
CHOICE_HIGHLIGHT_CUSTOM( itemIndex, HIGHLIGHT_COLOR, HIGHLIGHT_BORDER_COLOR, vis )

#define UI_EDGE( porigin, palign, poffset_x, poffset_y, pcolor ) \
UI_EDGE_RAW( porigin, palign, 5, 20, poffset_x, poffset_y, pcolor )

#define UI_EDGE_REVERSE( porigin, palign, poffset_x, poffset_y, pcolor ) \
UI_EDGE_RAW( porigin, palign, -5, 20, poffset_x, poffset_y, pcolor )

#define UI_EDGE_RAW( porigin, palign, pw, ph, poffset_x, poffset_y, pcolor ) \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect porigin pw ph palign \
origin poffset_x poffset_y \
background HIGHLIGHT_SHADER_ART \
forecolor pcolor \
visible 1; \
decoration \
} \

#define CHOICE_BUTTON_BG( itemIndex, visArg ) \
CHOICE_BUTTON_BG_RAW( itemIndex, "menu_button_backing", BUTTON_BG_COLOR, visArg )

#define CHOICE_BUTTON_BG_RAW( itemIndex, bgimage, foreColorArg, visArg ) \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X-(CHOICE_SIZE_Y/4)) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
exp material( bgimage ); \
forecolor foreColorArg \
visible visArg; \
decoration \
}

#define CHOICE_HIGHLIGHT_CUSTOM( itemIndex, foreColorArg, borderColorArg, visArg ) \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X-(CHOICE_SIZE_Y/4)) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
background "menu_button_backing_highlight" \
forecolor 0 0 0 0 \
border HIGHLIGHT_BORDER \
bordersize 2 \
bordercolor borderColorArg \
visible when( localVarInt( ui_highlight ) == itemIndex && localVarString( ui_choicegroup ) == CHOICE_GROUP && visArg ); \
decoration \
} \
CHOICE_ACCEPT_HINT( itemIndex, visArg )

#define CHOICE_HIGHLIGHT_CUSTOM_NOICON( itemIndex, foreColorArg, borderColorArg, visArg ) \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X-(CHOICE_SIZE_Y/4)) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
background "menu_button_backing_highlight" \
forecolor foreColorArg \
border HIGHLIGHT_BORDER \
bordersize 2 \
bordercolor borderColorArg \
visible when( localVarInt( ui_highlight ) == itemIndex && localVarString( ui_choicegroup ) == CHOICE_GROUP && visArg ); \
decoration \
} \

// used for custom highlights for itemDefs that are special and can not use itemIndex or complie with the strict alignment of this macro set
#define CHOICE_HIGHLIGHT_CUSTOM_2( px, py, pw, ph, visArg ) \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect (px+(ph/4)) py (-(pw-(ph/4))) ph CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
background HIGHLIGHT_SHADER \
forecolor BUTTON_BG_COLOR \
visible 1 \
decoration \
} \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect (px+(ph/4)) py (-(pw-(ph/4))) ph CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
background HIGHLIGHT_SHADER \
forecolor HIGHLIGHT_COLOR \
visible visArg \
decoration \
}

//CHOICE_TEXT_OFFSET_X

#if defined( CONSOLE ) && !defined( SPLITSCREEN )
#define CHOICE_ACCEPT_HINT( itemIndex, vis ) \
itemDef \
{ \
rect CHOICE_RECT( itemIndex ) \
origin A_BUTTON_OFFSET_X A_BUTTON_OFFSET_Y \
text "@PLATFORM_UI_SELECTBUTTON" \
textfont A_BUTTON_FONT \
textscale A_BUTTON_SIZE \
textstyle A_BUTTON_TEXTSTYLE \
textAlign CHOICE_TEXTALIGN \
textAlignX 0\
textAlignY -1\
forecolor 1 1 1 1 \
visible when( localVarInt( ui_highlight ) == itemIndex && localVarString( ui_choicegroup ) == CHOICE_GROUP && vis ); \
decoration \
}
#else // #if defined( CONSOLE ) && !defined( SPLITSCREEN )
#define CHOICE_ACCEPT_HINT( itemIndex, vis )
#endif // #else // #if defined( CONSOLE ) && !defined( SPLITSCREEN )

#ifdef CONSOLE
#define TITLE_STRIP \
/* title bar */ \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect -5 40 640 25 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN \
background "menu_lobby_title_back" \
forecolor 0.2137 0.2346 0.2398 0.75 \
/*forecolor COLOR_TITLEBAR*/ \
visible 1 \
decoration \
} \
/* bottom white strip */ \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect -107 65 854 1 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN \
background "menu_white_line_faded" \
forecolor 0.20 0.216 0.22 1 \
visible 1 \
decoration \
}

#define OVERLAY_TITLE_STRIP \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect -107 66 500 27 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN \
background "gradient" \
forecolor COLOR_TITLEBAR \
visible 1 \
decoration \
}
#else // #ifdef CONSOLE
#define TITLE_STRIP
#define OVERLAY_TITLE_STRIP
#endif // #else // #ifdef CONSOLE

#define CHOICE_MENU_TITLE_SS( titleArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect 22 5 100 100 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP \
origin ORIGIN_TITLE \
forecolor COLOR_TITLE \
exp text( titleArg ) \
textalignx -14 \
textfont UI_FONT_NORMAL \
textscale TEXTSIZE_DEFAULT \
textstyle CHOICE_TEXTSTYLE \
textalign ITEM_ALIGN_TOP_LEFT \
visible 1 \
decoration \
}

#define CHOICE_MENU_TITLE_NO_STRIP( titleArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect 22 5 100 100 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP \
origin ORIGIN_TITLE \
forecolor COLOR_TITLE \
exp text( titleArg ) \
textfont UI_FONT_NORMAL \
textscale TEXTSIZE_TITLE \
textstyle CHOICE_TEXTSTYLE \
textalign ITEM_ALIGN_TOP_LEFT \
textaligny TITLE_Y_OFFSET \
textalignx TITLE_X_OFFSET \
visible 1 \
decoration \
}

#define CHOICE_MENU_TITLE( titleArg ) \
/* white bar backing */ \
TITLE_STRIP \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect 22 5 100 100 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP \
origin ORIGIN_TITLE \
forecolor COLOR_TITLE \
exp text( titleArg ) \
textfont UI_FONT_OBJECTIVE \
textscale TEXTSIZE_TITLE \
textstyle CHOICE_TEXTSTYLE \
textalign ITEM_ALIGN_TOP_LEFT \
textaligny TITLE_Y_OFFSET \
textalignx TITLE_X_OFFSET \
visible 1 \
decoration \
}

#define CHOICE_MENU_TITLE_VIS( titleArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect 22 5 100 100 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP \
origin ORIGIN_TITLE \
forecolor COLOR_TITLE \
text titleArg \
textfont UI_FONT_NORMAL \
textscale TEXTSIZE_TITLE \
textstyle CHOICE_TEXTSTYLE \
textalign ITEM_ALIGN_TOP_LEFT \
visible when( visArg ) \
decoration \
}

#define CHOICE_OVERLAY_TITLE( titleArg ) \
CHOICE_OVERLAY_TITLE_VIS( titleArg, 1 )

#define CHOICE_OVERLAY_TITLE_VIS( titleArg, visArg ) \
/* black bar backing */ \
/*OVERLAY_TITLE_STRIP*/ \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect 22 32 100 100 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP \
origin ORIGIN_TITLE \
forecolor COLOR_TITLE \
exp text( titleArg ) \
textfont UI_FONT_NORMAL \
textscale TEXTSIZE_TITLE \
textstyle CHOICE_TEXTSTYLE \
textalign ITEM_ALIGN_TOP_LEFT \
textaligny TITLE_Y_OFFSET \
textalignx TITLE_X_OFFSET \
visible visArg \
decoration \
}

#define CHOICE_OVERLAY_SUB_TITLE( titleArg ) \
CHOICE_OVERLAY_SUB_TITLE_VIS( titleArg, 1 )

#ifdef PC
#define CHOICE_OVERLAY_SUB_TITLE_VIS( titleArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect 22 58 300 100 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP \
origin ORIGIN_TITLE \
forecolor COLOR_TITLE \
exp text( titleArg ) \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
textalign ITEM_ALIGN_TOP_LEFT \
textaligny TITLE_Y_OFFSET \
textalignx TITLE_X_OFFSET \
visible visArg \
autowrapped\
decoration \
}
#else
#define CHOICE_OVERLAY_SUB_TITLE_VIS( titleArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect 22 58 100 100 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP \
origin ORIGIN_TITLE \
forecolor COLOR_TITLE \
exp text( titleArg ) \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
textalign ITEM_ALIGN_TOP_LEFT \
textaligny TITLE_Y_OFFSET \
textalignx TITLE_X_OFFSET \
visible visArg \
decoration \
}
#endif

#define CHOICE_SECTION_TITLE( itemIndex, titleArg ) \
CHOICE_SECTION_TITLE_VIS( itemIndex, titleArg, 1 )

#define CHOICE_SECTION_TITLE_VIS( itemIndex, titleArg, visArg ) \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect (SECTION_X_OFFSET+0) (SECTION_Y_OFFSET+3) 245 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
origin CHOICE_ORIGIN( itemIndex ) \
background "menu_white_line_faded" \
forecolor 0 0 0 0 \
visible visArg \
decoration \
} \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect (SECTION_X_OFFSET+0) (SECTION_Y_OFFSET+4) 245 17 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
origin CHOICE_ORIGIN( itemIndex ) \
background "menu_black_line" \
forecolor 0 0 0 0 \
visible visArg \
decoration \
} \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect (SECTION_X_OFFSET+0) (SECTION_Y_OFFSET+21) 245 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
origin CHOICE_ORIGIN( itemIndex ) \
background "menu_white_line_faded" \
forecolor 0 0 0 0 \
visible visArg \
decoration \
} \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect (SECTION_X_OFFSET+0) (SECTION_Y_OFFSET-1) 245 24 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
origin CHOICE_ORIGIN( itemIndex ) \
forecolor 0 0 0 0 \
exp text( titleArg );\
textstyle ITEM_TEXTSTYLE_SHADOWED \
textfont UI_FONT_OBJECTIVE \
textscale TEXTSIZE_DEFAULT \
textstyle CHOICE_TEXTSTYLE \
textAlign ITEM_ALIGN_MIDDLE_CENTER \
textAlignX SECTION_TEXT_OFFSET_X \
visible visArg \
decoration \
}


#define CHOICE_SEPARATOR( afterItemIndex ) \
CHOICE_SEPARATOR_VIS( afterItemIndex, when( ENABLE_SEPARATOR ) )

#define CHOICE_SEPARATOR_VIS( afterItemIndex, visArg ) \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect (CHOICE_SEP_OFFSET_X) (CHOICE_Y_SPACING + CHOICE_SEP_SPACING / 2 + CHOICE_SEP_OFFSET_Y ) CHOICE_SEP_WIDTH 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
origin CHOICE_ORIGIN( afterItemIndex ) \
background CHOICE_SEP_BACKGROUND \
forecolor 0 0 0 0 \
visible visArg \
decoration \
}

#define CHOICE_BUTTON( itemIndex, textArg, actionArg ) \
CHOICE_BUTTON_VIS( itemIndex, textArg, actionArg, 1 )

#define CHOICE_BUTTON_NOHI( itemIndex, textArg, actionArg ) \
CHOICE_BUTTON_VIS_NOHI( itemIndex, textArg, actionArg, 1 )

#define CHOICE_BUTTON_VIS( itemIndex, textArg, actionArg, visArg ) \
CHOICE_BUTTON_BG( itemIndex, visArg ) \
CHOICE_HIGHLIGHT( itemIndex, 1 ) \
CHOICE_BUTTON_VIS_NOHI( itemIndex, textArg, actionArg, visArg )

#define CHOICE_BUTTON_VIS_ADV( itemIndex, textArg, actionArg, visArg, vis ) \
CHOICE_BUTTON_BG( itemIndex, visArg ) \
CHOICE_HIGHLIGHT( itemIndex, vis ) \
CHOICE_BUTTON_VIS_NOHI( itemIndex, textArg, actionArg, visArg )

#define CHOICE_BUTTON_VIS_NOHI( itemIndex, textArg, actionArg, visArg ) \
CHOICE_BUTTON_FOCUS_VIS_NOHI( itemIndex, textArg, actionArg, ;, ;, visArg )

#define CHOICE_BUTTON_FOCUS( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg ) \
CHOICE_BUTTON_FOCUS_VIS( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, 1 )

#define CHOICE_BUTTON_FOCUS_NOHI( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg ) \
CHOICE_BUTTON_FOCUS_VIS_NOHI( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, 1 )

#define CHOICE_BUTTON_FOCUS_VIS( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg ) \
CHOICE_BUTTON_BG( itemIndex, visArg ) \
CHOICE_HIGHLIGHT( itemIndex, 1 ) \
CHOICE_BUTTON_FOCUS_VIS_NOHI( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg )

#define CHOICE_BUTTON_FOCUS_VIS_NOICON( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg ) \
CHOICE_BUTTON_BG( itemIndex, visArg ) \
CHOICE_HIGHLIGHT_CUSTOM_NOICON( itemIndex, HIGHLIGHT_COLOR, HIGHLIGHT_BORDER_COLOR, 1 ) \
CHOICE_BUTTON_FOCUS_VIS_NOHI_NOICON( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg )

#define CHOICE_BUTTON_FOCUS_VIS_NOHI_NOICON( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg ) \
CHOICE_BUTTON_FOCUS_VIS_NOHI( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg )

#define CHOICE_BUTTON_FOCUS_VIS_ADV( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg, vis ) \
CHOICE_BUTTON_BG( itemIndex, visArg ) \
CHOICE_HIGHLIGHT( itemIndex, vis ) \
CHOICE_BUTTON_FOCUS_VIS_NOHI( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg )

#define CHOICE_BUTTON_FOCUS_VIS_NOHI( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg ) \
CHOICE_BUTTON_FOCUS_VIS_NOHI_EX( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg, ; )

#define CHOICE_BUTTON_EX( itemIndex, textArg, actionArg, extraArgs ) \
CHOICE_BUTTON_BG( itemIndex, 1 ) \
CHOICE_HIGHLIGHT( itemIndex, 1 ) \
CHOICE_BUTTON_FOCUS_VIS_NOHI_EX( itemIndex, textArg, actionArg, ;, ;, 1, extraArgs )

#define CHOICE_BUTTON_NOHI_EX( itemIndex, textArg, actionArg, extraArgs ) \
CHOICE_BUTTON_FOCUS_VIS_NOHI_EX( itemIndex, textArg, actionArg, ;, ;, 1, extraArgs )

#define CHOICE_BUTTON_EX_ADV( itemIndex, textArg, actionArg, extraArgs, visArg ) \
CHOICE_BUTTON_BG( itemIndex, 1 ) \
CHOICE_HIGHLIGHT( itemIndex, 1 ) \
CHOICE_BUTTON_FOCUS_VIS_NOHI_EX( itemIndex, textArg, actionArg, ;, ;, visArg, extraArgs )

#define CHOICE_BUTTON_FOCUS_VIS_EX( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg, extraArgs ) \
CHOICE_BUTTON_BG( itemIndex, visArg ) \
CHOICE_HIGHLIGHT( itemIndex, 1 ) \
CHOICE_BUTTON_FOCUS_VIS_NOHI_EX( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg, extraArgs )

#define CHOICE_BUTTON_FOCUS_VIS_EX_ADV( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg, extraArgs, vis ) \
CHOICE_BUTTON_BG( itemIndex, visArg ) \
CHOICE_HIGHLIGHT( itemIndex, vis ) \
CHOICE_BUTTON_FOCUS_VIS_NOHI_EX( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg, extraArgs )

#define CHOICE_BUTTON_FOCUS_VIS_NOHI_EX( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg, extraArgs ) \
itemDef \
{ \
type ITEM_TYPE_BUTTON \
rect CHOICE_RECT( itemIndex ) \
exp text( textArg ); \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
textAlign CHOICE_TEXTALIGN \
textAlignX CHOICE_TEXT_OFFSET_X \
forecolor CHOICE_TEXTCOLOR \
visible visArg \
extraArgs \
CHOICE_SCRIPTS_ALL( itemIndex, actionArg, onFocusArg, leaveFocusArg ) \
} \

#define CHOICE_BUTTON_COLOR_VIS( itemIndex, textArg, colorArg, visArg ) \
CHOICE_BUTTON_BG( itemIndex, visArg ) \
CHOICE_BUTTON_FOCUS_COLOR_VIS_NOHI_EX( itemIndex, textArg, ;, ;, ;, colorArg, visArg, ; ) \

#define CHOICE_BUTTON_FOCUS_COLOR_VIS_NOHI_EX( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, colorArg, visArg, extraArgs ) \
itemDef \
{ \
type ITEM_TYPE_BUTTON \
rect CHOICE_RECT( itemIndex ) \
exp text( textArg ); \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
textAlign CHOICE_TEXTALIGN \
textAlignX CHOICE_TEXT_OFFSET_X \
forecolor colorArg \
visible visArg \
extraArgs \
CHOICE_SCRIPTS_ALL( itemIndex, actionArg, onFocusArg, leaveFocusArg ) \
} \

#define CHOICE_DBUTTON_VIS( itemIndex, textArg, visArg ) \
CHOICE_BUTTON_BG( itemIndex, visArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect CHOICE_RECT( itemIndex ) \
exp text( textArg ); \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
textAlign CHOICE_TEXTALIGN \
textAlignX CHOICE_TEXT_OFFSET_X \
forecolor CHOICE_TEXTCOLOR_DISABLED \
visible visArg \
decoration \
} \

#define CHOICE_DBUTTON_NO_BG_VIS( itemIndex, textArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect CHOICE_RECT( itemIndex ) \
exp text( textArg ); \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
textAlign CHOICE_TEXTALIGN \
textAlignX CHOICE_TEXT_OFFSET_X \
forecolor CHOICE_TEXTCOLOR_DISABLED \
visible visArg \
decoration \
} \

#define STATUS_AREA( textArg, xArg, yArg, visArg ) \
itemDef { \
name description_status \
type ITEM_TYPE_TEXT \
rect 10 0 210 36 CHOICE_HORIZONTAL_ALIGN VERTICAL_ALIGN_TOP \
origin xArg yArg \
text textArg \
textfont CHOICE_TEXTFONT \
textscale TEXTSIZE_SMALL \
textaligny 16 \
forecolor COLOR_DESC_TEXT \
visible visArg \
autowrapped \
decoration \
}

#define CHOICE_DVARENUMLIST( itemIndex, textArg, dvarArg, dvarListArg, actionArg ) \
CHOICE_DVARLIST_VIS( itemIndex, textArg, dvarArg, ITEM_TYPE_DVARENUM, dvarEnumList dvarListArg, actionArg, 1 )

#define CHOICE_DVARENUMLIST_VIS( itemIndex, textArg, dvarArg, dvarListArg, actionArg, visArg ) \
CHOICE_DVARLIST_VIS( itemIndex, textArg, dvarArg, ITEM_TYPE_DVARENUM, dvarEnumList dvarListArg, actionArg, visArg )

#define CHOICE_DVARSTRINGLIST( itemIndex, textArg, dvarArg, strListArg, actionArg ) \
CHOICE_DVARLIST_VIS( itemIndex, textArg, dvarArg, ITEM_TYPE_MULTI, dvarStrList strListArg, actionArg, 1 )

#define CHOICE_DVARSTRINGLIST_VIS( itemIndex, textArg, dvarArg, strListArg, actionArg, visArg ) \
CHOICE_DVARLIST_VIS( itemIndex, textArg, dvarArg, ITEM_TYPE_MULTI, dvarStrList strListArg, actionArg, visArg )

#define CHOICE_DVARFLOATLIST( itemIndex, textArg, dvarArg, strListArg, actionArg ) \
CHOICE_DVARLIST_VIS( itemIndex, textArg, dvarArg, ITEM_TYPE_MULTI, dvarFloatList strListArg, actionArg, 1 )

#define CHOICE_DVARFLOATLIST_VIS( itemIndex, textArg, dvarArg, strListArg, actionArg, visArg ) \
CHOICE_DVARLIST_VIS( itemIndex, textArg, dvarArg, ITEM_TYPE_MULTI, dvarFloatList strListArg, actionArg, visArg )

#define CHOICE_DVARFLOATLIST_FOCUS_VIS( itemIndex, textArg, dvarArg, strListArg, actionArg, onFocusArg, leaveFocusArg, visArg ) \
CHOICE_DVARLIST_FOCUS_VIS( itemIndex, textArg, dvarArg, ITEM_TYPE_MULTI, dvarFloatList strListArg, actionArg, onFocusArg, leaveFocusArg, visArg )

#define CHOICE_DVARLIST_VIS( itemIndex, textArg, dvarArg, listTypeArg, listArg, actionArg, visArg ) \
CHOICE_DVARLIST_FOCUS_VIS( itemIndex, textArg, dvarArg, listTypeArg, listArg, actionArg, ;, ;, visArg )

#define CHOICE_DVARLIST_FOCUS_VIS( itemIndex, textArg, dvarArg, listTypeArg, listArg, actionArg, onFocusArg, leaveFocusArg, visArg ) \
CHOICE_CAPTION_VIS( itemIndex, textArg, visArg ) \
itemDef \
{ \
type listTypeArg \
dvar dvarArg \
listArg \
rect CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+CHOICE_DVAR_WIDTH_OFFSET) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
textalign CHOICE_DVAR_TEXTALIGN \
textalignx CHOICE_DVAR_OFFSET_X \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle ITEM_TEXTSTYLE_SHADOWED \
style WINDOW_STYLE_FILLED \
forecolor CHOICE_TEXTCOLOR \
visible visArg ; \
CHOICE_SCRIPTS_ALL( itemIndex, actionArg, onFocusArg, leaveFocusArg ) \
}

#define CHOICE_DDVAR_VIS( itemIndex, textArg, dvarArg, visArg ) \
CHOICE_BUTTON_BG_RAW( itemIndex, "menu_button_backing", BUTTON_BG_COLOR, visArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
exp text( textArg ); \
rect CHOICE_RECT( itemIndex ) \
textAlign CHOICE_TEXTALIGN \
textAlignX CHOICE_TEXT_OFFSET_X \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
forecolor CHOICE_TEXTCOLOR_DISABLED \
visible visArg \
decoration \
} \
itemDef \
{ \
type ITEM_TYPE_TEXT \
dvar dvarArg \
rect CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+CHOICE_DVAR_WIDTH_OFFSET) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
textAlign CHOICE_DVAR_TEXTALIGN \
textAlignX CHOICE_DVAR_OFFSET_X \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
forecolor CHOICE_TEXTCOLOR_DISABLED \
visible visArg \
decoration \
}

#define CHOICE_DDVARALTTEXT_VIS( itemIndex, textArg, textArg1, visArg ) \
CHOICE_BUTTON_BG_RAW( itemIndex, "menu_button_backing", BUTTON_BG_COLOR, visArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
exp text( textArg ); \
rect CHOICE_RECT( itemIndex ) \
textAlign CHOICE_TEXTALIGN \
textAlignX CHOICE_TEXT_OFFSET_X \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
forecolor CHOICE_TEXTCOLOR_DISABLED \
visible visArg \
decoration \
} \
itemDef \
{ \
type ITEM_TYPE_TEXT \
exp text( textArg1 ) \
rect CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+CHOICE_DVAR_WIDTH_OFFSET) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
textAlign CHOICE_DVAR_TEXTALIGN \
textAlignX CHOICE_DVAR_OFFSET_X \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
forecolor CHOICE_TEXTCOLOR_DISABLED \
visible visArg \
decoration \
}

#define CHOICE_STATUS_COLOR_VIS( itemIndex, textArg, colorArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect CHOICE_RECT( itemIndex ) \
exp text( textArg ); \
textalign ITEM_ALIGN_MIDDLE_RIGHT \
textalignx (0 - CHOICE_TEXT_OFFSET_X) \
textscale CHOICE_TEXTSIZE \
style WINDOW_STYLE_FILLED \
forecolor colorArg \
visible visArg ; \
decoration \
}

#define CHOICE_NEWICON_VIS( itemIndex, imageArg, visArg ) \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect (CHOICE_X( itemIndex ) + CHOICE_SIZE_X + NEW_X_OFFSET ) (CHOICE_Y( itemIndex )+2+NEW_Y_OFFSET) (CHOICE_SIZE_Y*2) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
exp material( imageArg ) \
visible visArg ; \
decoration \
}

#define CHOICE_COLLECTIBLEICON_VIS( itemIndex, imageArg, visArg ) \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect (CHOICE_X( itemIndex ) - CHOICE_SIZE_Y ) CHOICE_Y( itemIndex ) CHOICE_SIZE_Y CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
exp material( imageArg ) \
visible visArg ; \
decoration \
}

#define CHOICE_LOCKEDICON_VIS( itemIndex, imageArg, visArg ) \
itemDef \
{ \
style WINDOW_STYLE_SHADER \
rect (CHOICE_X( itemIndex ) + CHOICE_SIZE_X + NEW_X_OFFSET ) (CHOICE_Y( itemIndex )+2+NEW_Y_OFFSET) 12 12 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
exp material( imageArg ) \
visible visArg ; \
decoration \
}

#define CHOICE_LEFTITEM_VIS( itemIndex, textArg, colorArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect (CHOICE_X( itemIndex ) - CHOICE_SIDEITEM_SIZE_X - CHOICE_SIDEITEM_SPACING) CHOICE_Y( itemIndex ) CHOICE_SIDEITEM_SIZE_X CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
exp text( textArg ); \
textalign ITEM_ALIGN_MIDDLE_LEFT \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle ITEM_TEXTSTYLE_SHADOWED \
style WINDOW_STYLE_FILLED \
forecolor colorArg \
visible visArg ; \
decoration \
}

#define CHOICE_DLEFTBUTTON_VIS( itemIndex, textArg, visArg ) \
CHOICE_BUTTON_BG( itemIndex, visArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect (CHOICE_X( itemIndex ) - CHOICE_SIDEITEM_SIZE_X - CHOICE_SIDEITEM_SPACING) CHOICE_Y( itemIndex ) CHOICE_SIDEITEM_SIZE_X CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
exp text( textArg ); \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle ITEM_TEXTSTYLE_SHADOWED \
style WINDOW_STYLE_FILLED \
textAlign ITEM_ALIGN_MIDDLE_LEFT \
forecolor CHOICE_TEXTCOLOR_DISABLED \
visible visArg \
decoration \
} \

#define CHOICE_LEFTITEM2_VIS( itemIndex, textArg, colorArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect (CHOICE_X( itemIndex ) - CHOICE_SIDEITEM_SIZE_X - CHOICE_SIDEITEM_SPACING - 45) CHOICE_Y( itemIndex ) CHOICE_SIDEITEM_SIZE_X CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
exp text( textArg ); \
textalign ITEM_ALIGN_MIDDLE_LEFT \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle ITEM_TEXTSTYLE_SHADOWED \
style WINDOW_STYLE_FILLED \
forecolor colorArg \
visible visArg ; \
decoration \
}

#define CHOICE_RIGHTITEM_VIS( itemIndex, textArg, colorArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect (CHOICE_X( itemIndex ) + CHOICE_SIDEITEM_SIZE_X + CHOICE_SIDEITEM_SPACING) CHOICE_Y( itemIndex ) CHOICE_SIDEITEM_SIZE_X CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
exp text( textArg ); \
textalign ITEM_ALIGN_MIDDLE_RIGHT \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle ITEM_TEXTSTYLE_SHADOWED \
style WINDOW_STYLE_FILLED \
forecolor colorArg \
visible visArg ; \
decoration \
}

#define CHOICE_DVAREDIT_NUMERIC( itemIndex, textArg, dvarArg, max_chars, actionArg ) \
CHOICE_DVAREDIT_NUMERIC_VIS( itemIndex, textArg, dvarArg, max_chars, actionArg, 1 )

#define CHOICE_DVAREDIT_NUMERIC_VIS( itemIndex, textArg, dvarArg, max_chars, actionArg, visArg ) \
CHOICE_CAPTION_VIS( itemIndex, textArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_NUMERICFIELD \
text " " \
dvar dvarArg \
rect CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+CHOICE_DVAR_WIDTH_OFFSET) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
textalign ITEM_ALIGN_MIDDLE_LEFT \
textalignx (CHOICE_SIZE_X+8) /*(-(CHOICE_TEXT_OFFSET_X))*/ \
textscale CHOICE_TEXTSIZE \
textstyle ITEM_TEXTSTYLE_SHADOWED \
style WINDOW_STYLE_FILLED \
forecolor CHOICE_TEXTCOLOR \
visible visArg \
maxChars max_chars \
CHOICE_SCRIPTS_ACTION( itemIndex, actionArg ) \
}


#define CHOICE_DVAREDIT( itemIndex, textArg, dvarArg, actionArg ) \
CHOICE_DVAREDIT_VIS( itemIndex, textArg, dvarArg, 31, 18, actionArg, 1 )

#define CHOICE_DVAREDIT_VIS( itemIndex, textArg, dvarArg, max_chars, max_paintchars, actionArg, visArg ) \
CHOICE_CAPTION_VIS( itemIndex, textArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_EDITFIELD \
text " " \
dvar dvarArg \
rect CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+CHOICE_DVAR_WIDTH_OFFSET) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
textalign ITEM_ALIGN_MIDDLE_LEFT \
textalignx (CHOICE_SIZE_X+8) /*(-(CHOICE_TEXT_OFFSET_X))*/ \
textscale CHOICE_TEXTSIZE \
textstyle ITEM_TEXTSTYLE_SHADOWED \
style WINDOW_STYLE_FILLED \
forecolor CHOICE_TEXTCOLOR \
visible visArg \
maxChars max_chars \
maxpaintchars max_paintchars \
CHOICE_SCRIPTS_ACTION( itemIndex, actionArg ) \
}

#define CHOICE_DVARSLIDER( itemIndex, textArg, dvarArg, defaultArg, minArg, maxArg, actionArg ) \
CHOICE_DVARSLIDER_VIS( itemIndex, textArg, dvarArg, defaultArg, minArg, maxArg, actionArg, 1 )

#define CHOICE_DVARSLIDER_VIS( itemIndex, textArg, dvarArg, defaultArg, minArg, maxArg, actionArg, visArg ) \
CHOICE_DVARSLIDER_VIS_EX( itemIndex, textArg, dvarArg, defaultArg, minArg, maxArg, actionArg, ;, 1 )

#define CHOICE_DVARSLIDER_VIS_EX( itemIndex, textArg, dvarArg, defaultArg, minArg, maxArg, actionArg, extraArg, visArg ) \
CHOICE_CAPTION( itemIndex, textArg ) \
itemDef \
{ \
type ITEM_TYPE_SLIDER \
dvarfloat dvarArg defaultArg minArg maxArg \
rect CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+CHOICE_DVAR_WIDTH_OFFSET) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
textalign ITEM_ALIGN_MIDDLE_LEFT \
textalignx (CHOICE_SIZE_X+20) /*(-(CHOICE_TEXT_OFFSET_X))*/ \
textscale CHOICE_TEXTSIZE \
textstyle ITEM_TEXTSTYLE_SHADOWED \
style WINDOW_STYLE_FILLED \
forecolor CHOICE_TEXTCOLOR \
visible visArg \
extraArg \
CHOICE_SCRIPTS_ACTION( itemIndex, actionArg ) \
}


#define CHOICE_DVARYESNO( itemIndex, textArg, dvarArg, actionArg ) \
CHOICE_DVARYESNO_VIS( itemIndex, textArg, dvarArg, actionArg, 1 )

#define CHOICE_DVARYESNO_VIS( itemIndex, textArg, dvarArg, actionArg, visArg ) \
CHOICE_CAPTION_VIS( itemIndex, textArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_YESNO \
dvar dvarArg \
rect CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+CHOICE_DVAR_WIDTH_OFFSET) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
textalign ITEM_ALIGN_MIDDLE_LEFT \
textalignx (CHOICE_SIZE_X+20)/*(-(CHOICE_TEXT_OFFSET_X))*/ \
textscale CHOICE_TEXTSIZE \
textstyle ITEM_TEXTSTYLE_SHADOWED \
style WINDOW_STYLE_FILLED \
forecolor CHOICE_TEXTCOLOR \
visible visArg \
CHOICE_SCRIPTS_ACTION( itemIndex, actionArg ) \
}

#define CHOICE_BIND( itemIndex, textArg, cmdArg, actionArg ) \
CHOICE_BIND_VIS( itemIndex, textArg, cmdArg, actionArg, 1, 1 )

#define CHOICE_BIND_VIS( itemIndex, textArg, cmdArg, actionArg, visArg, vis ) \
CHOICE_CAPTION_VIS( itemIndex, textArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_BIND \
dvar cmdArg \
rect CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+120) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
textalign ITEM_ALIGN_MIDDLE_LEFT \
textalignx (CHOICE_SIZE_X+20)/*(-(CHOICE_TEXT_OFFSET_X))*/ \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
style WINDOW_STYLE_FILLED \
forecolor CHOICE_TEXTCOLOR \
visible visArg \
CHOICE_SCRIPTS_ALL( itemIndex, actionArg, show keyBindStatus, hide keyBindStatus ) \
}

#define CHOICE_BIND2( itemIndex, textArg, cmdArg, actionArg ) \
CHOICE_BIND2_VIS( itemIndex, textArg, cmdArg, actionArg, 1 )

#define CHOICE_BIND2_VIS( itemIndex, textArg, cmdArg, actionArg, visArg ) \
CHOICE_CAPTION_VIS( itemIndex, textArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_BIND2 \
dvar cmdArg \
rect CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+120) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
textalign ITEM_ALIGN_MIDDLE_LEFT \
textalignx (CHOICE_SIZE_X+20)/*(-(CHOICE_TEXT_OFFSET_X))*/ \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
style WINDOW_STYLE_FILLED \
forecolor CHOICE_TEXTCOLOR \
visible visArg \
CHOICE_SCRIPTS_ALL( itemIndex, actionArg, show keyBindStatus, hide keyBindStatus ) \
}

#define CHOICE_BIND3( itemIndex, textArg, cmdArg, actionArg ) \
CHOICE_BIND3_VIS( itemIndex, textArg, cmdArg, actionArg, 1, 1 )

#define CHOICE_BIND3_VIS( itemIndex, textArg, cmdArg, actionArg, visArg, vis ) \
CHOICE_CAPTION_VIS22( itemIndex, textArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_BIND \
dvar cmdArg \
rect CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+120) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
textalign ITEM_ALIGN_MIDDLE_LEFT \
textalignx (CHOICE_SIZE_X+20)/*(-(CHOICE_TEXT_OFFSET_X))*/ \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
style WINDOW_STYLE_FILLED \
forecolor CHOICE_TEXTCOLOR \
visible when(dvarInt("sub_menu") == 2 ); \ \
CHOICE_SCRIPTS_ALL( itemIndex, actionArg, show keyBindStatus, hide keyBindStatus ) \
}
#define CHOICE_CAPTION_VIS22( itemIndex, textArg, visArg ) \
CHOICE_CAPTION22_COLOR_VIS( itemIndex, textArg, CHOICE_TEXTCOLOR_CAPT, visArg )

#define CHOICE_CAPTION22_COLOR_VIS( itemIndex, textArg, colorArg, visArg ) \
CHOICE_BUTTON_BG( itemIndex, visArg ) \
CHOICE_HIGHLIGHT( itemIndex, 1 ) \
itemDef \
{ \
type ITEM_TYPE_BUTTON \
rect CHOICE_RECT( itemIndex ) \
exp text( textArg ); \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
textAlign CHOICE_TEXTALIGN \
textAlignX CHOICE_TEXT_OFFSET_X \
forecolor colorArg \
visible when(dvarInt("sub_menu") == 2 ); \
decoration \
}
#define CHOICE_BIND4( itemIndex, textArg, cmdArg, actionArg ) \
CHOICE_BIND4_VIS( itemIndex, textArg, cmdArg, actionArg, 1, 1 )

#define CHOICE_BIND4_VIS( itemIndex, textArg, cmdArg, actionArg, visArg, vis ) \
CHOICE_CAPTION_VIS44( itemIndex, textArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_BIND \
dvar cmdArg \
rect CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+120) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
textalign ITEM_ALIGN_MIDDLE_LEFT \
textalignx (CHOICE_SIZE_X+20)/*(-(CHOICE_TEXT_OFFSET_X))*/ \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
style WINDOW_STYLE_FILLED \
forecolor CHOICE_TEXTCOLOR \
visible when(dvarInt("sub_menu") == 1 ); \ \
CHOICE_SCRIPTS_ALL( itemIndex, actionArg, show keyBindStatus, hide keyBindStatus ) \
}
#define CHOICE_CAPTION_VIS44( itemIndex, textArg, visArg ) \
CHOICE_CAPTION44_COLOR_VIS( itemIndex, textArg, CHOICE_TEXTCOLOR_CAPT, visArg )

#define CHOICE_CAPTION44_COLOR_VIS( itemIndex, textArg, colorArg, visArg ) \
CHOICE_BUTTON_BG( itemIndex, visArg ) \
CHOICE_HIGHLIGHT( itemIndex, 1 ) \
itemDef \
{ \
type ITEM_TYPE_BUTTON \
rect CHOICE_RECT( itemIndex ) \
exp text( textArg ); \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
textAlign CHOICE_TEXTALIGN \
textAlignX CHOICE_TEXT_OFFSET_X \
forecolor colorArg \
visible when(dvarInt("sub_menu") == 1 ); \
decoration \
}

#define CHOICE_CAPTION( itemIndex, textArg ) \
CHOICE_CAPTION_VIS( itemIndex, textArg, 1 )

#define CHOICE_CAPTION_COLOR( itemIndex, textArg, colorArg ) \
CHOICE_CAPTION_COLOR_VIS( itemIndex, textArg, colorArg, 1 )

#define CHOICE_CAPTION_VIS( itemIndex, textArg, visArg ) \
CHOICE_CAPTION_COLOR_VIS( itemIndex, textArg, CHOICE_TEXTCOLOR_CAPT, visArg )

#define CHOICE_CAPTION_COLOR_VIS( itemIndex, textArg, colorArg, visArg ) \
CHOICE_BUTTON_BG( itemIndex, visArg ) \
CHOICE_HIGHLIGHT( itemIndex, 1 ) \
itemDef \
{ \
type ITEM_TYPE_BUTTON \
rect CHOICE_RECT( itemIndex ) \
exp text( textArg ); \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
textAlign CHOICE_TEXTALIGN \
textAlignX CHOICE_TEXT_OFFSET_X \
forecolor colorArg \
visible visArg \
decoration \
}

#define CHOICE_TEXT_VIS( itemIndex, textArg, colorArg, visArg ) \
CHOICE_BUTTON_BG( itemIndex, visArg ) \
CHOICE_HIGHLIGHT( itemIndex, 1 ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
rect CHOICE_RECT( itemIndex ) \
exp text( textArg ); \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
textAlign CHOICE_TEXTALIGN \
textAlignX CHOICE_TEXT_OFFSET_X \
forecolor colorArg \
visible visArg \
decoration \
}

#define CHOICE_SUBTEXT_COLOR_VIS( itemIndex, textArg, colorArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_BUTTON \
rect CHOICE_RECT( itemIndex ) \
exp text( textArg ); \
textfont CHOICE_TEXTFONT \
textscale CHOICE_TEXTSIZE \
textstyle CHOICE_TEXTSTYLE \
textAlign ITEM_ALIGN_MIDDLE_LEFT \
forecolor colorArg \
visible visArg \
decoration \
}


#define CHOICE_SCRIPTS_ACTION( itemIndex, actionArg ) \
CHOICE_SCRIPTS_ALL( itemIndex, actionArg, ;, ; )



#define CHOICE_SCRIPTS_ALL( itemIndex, actionArg, onFocusArg, leaveFocusArg ) \
onFocus \
{ \
setLocalVarInt ui_highlight itemIndex; \
setLocalVarString ui_choicegroup CHOICE_GROUP; \
play CHOICE_FOCUS_SOUND setdvar vile_on_1 itemIndex; \
setdvar spin 0; \
onFocusArg \
} \
leaveFocus \
{ \
setLocalVarInt ui_highlight 0 setdvar bind_on_1 0; \
setdvar spin 0; \
leaveFocusArg \
} \
action \
{ \
play CHOICE_ACTION_SOUND ; \
actionArg; \
}


#define CHOICE_APPLY( textArg, actionArg ) \
CHOICE_APPLY_VIS( textArg, actionArg, 1 )

#define CHOICE_APPLY_VIS( textArg, actionArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_BUTTON \
rect 430 422 100 16 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
text textArg \
textfont UI_FONT_NORMAL \
textscale CHOICE_TEXTSIZE \
textstyle ITEM_TEXTSTYLE_SHADOWED \
textAlign ITEM_ALIGN_MIDDLE_CENTER \
forecolor COLOR_FOCUSED \
visible visArg ; \
action \
{ \
play "mouse_click"; \
actionArg; \
} \
}

#define CHOICE_BACK( textArg, actionArg ) \
CHOICE_BACK_VIS( textArg, actionArg, 1 )

#define CHOICE_BACK_VIS( textArg, actionArg, visArg ) \
itemDef \
{ \
type ITEM_TYPE_BUTTON \
rect 270 422 100 16 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
text textArg \
textfont UI_FONT_NORMAL \
textscale CHOICE_TEXTSIZE \
textstyle ITEM_TEXTSTYLE_SHADOWED \
textAlign ITEM_ALIGN_MIDDLE_CENTER \
forecolor COLOR_FOCUSED \
visible visArg ; \
action \
{ \
play "mouse_click"; \
actionArg; \
} \
}


#define CHOICE_FOOTNOTE( textArg, x, y ) \
CHOICE_FOOTNOTE_VIS( textArg, x, y, 1 )

#define CHOICE_FOOTNOTE_VIS( textArg, x, y, visArg ) \
itemDef \
{ \
text textArg \
rect FOOTNOTE_RECT( x, y ) \
autowrapped \
textfont CHOICE_TEXTFONT \
textscale TEXTSIZE_SMALL \
textstyle ITEM_TEXTSTYLE_SHADOWED \
textalign ITEM_ALIGN_TOP_LEFT \
visible visArg \
decoration \
}


#define CHOICE_KEYBINDHELP \
itemDef \
{ \
name keyBindStatus \
rect -190 -8 300 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_BOTTOM \
ownerdraw UI_KEYBINDSTATUS \
textstyle ITEM_TEXTSTYLE_SHADOWED \
style WINDOW_STYLE_FILLED \
backcolor 0 0 0 0 \
forecolor .9 .9 .9 1 \
border 0 \
bordercolor .5 .5 .5 .5 \
textscale TEXTSIZE_SMALL \
textalign ITEM_ALIGN_MIDDLE_LEFT \
visible 0 \
decoration \
}

#define COLUMN_TITLE_X 100
#define COLUMN_TITLE_Y (111+21)

#define LEADERBOARD_COL_TITLE( porgin, ptext, palign ) \
LEADERBOARD_COL_TITLE_VIS( porgin, ptext, palign, 1 )

#define LEADERBOARD_COL_TITLE_VIS( porgin, ptext, palign, visArg ) \
itemDef \
{ \
type ITEM_TYPE_TEXT \
origin porgin \
text ptext \
textscale TEXTSIZE_SMALL \
textfont UI_FONT_NORMAL \
textalign palign \
forecolor 1 1 1 1 \
visible visArg \
decoration \
}



[/noae][/noae][/noae][/noae]
put file in raw/ui

add this to mod csv
Sorry but you are not allowed to view spoiler contents.


line 317 you will see this
Sorry but you are not allowed to view spoiler contents.

that is hiding the little bar that shows up when your mouse cursor is over a menu option
change zeros to ones to make it show again

the advantages of having my setup_common
#1 you can track which menu option your mouse is over in GSC with checking this  dvar "vile_on_1"
#2 the whole entire screen is gridded out so you can add a menu button anywhere from top to bottom 20 buttons
and from left to right 500 or more give or take
#3 added to  button binds that can be hidden CHOICE_BIND3 set to show on dvar sub_menu  = 2 and CHOICE_BIND4 set to show on dvar sub_menu  = 3



just a menu with one sub menu
and itemDef I made myself
that makes it so any image you put there becomes a button regardless of shape and size
and you can have it do things when your mouse touches it leaves off of it and when you click it
like MenuResponse "??????"; to pick up in gsc see menu for use
or to make a keypad with a combination code like I did for my map

Sorry but you are not allowed to view spoiler contents.

replace all ????? with proper stuff
will add more soon


250 days ago
I've been helping a few people out on custom zombie bosses
so I decided to do a few zombie bosses that are not in any maps

everything here will be fully rigged animated and all files included to add to your map


#1
PICS
Sorry but you are not allowed to view spoiler contents.
vids
Sorry but you are not allowed to view spoiler contents.
this boss will have a sword and shoot projectiles and a few other special attacks
will be a HUD display of the bosses health

will add more an update this post as I finished the bosses
273 days ago
creds
me  ;D
more to add


if you use this or my method in anyway please give proper credit
it took me awhile to get the .menu file to communicate with GSC this way
and track what button your mouse is on in gsc  & more

decided to make a public release of this with every gobblegum in it
I'm just doing the factory and the gobblegum selection as close to Black Ops 3 so I can get it
I did not do the in-game machine
there's only one variable for each gum you have to pick up to know if the person has it
so adding it to your machine will be no problem


it's can be used across multiple Maps
if the same setup is used unchanged in multiple Maps you will have the same Goblin gum and same liquid divinium
so if you play one map with this setup and go to another you'll have the same thing you had on last no matter what map you play with this setup

things still to add
Everything Has No Limit I'm going to set a 250 cap on everything

pause menu screen  display to show  what five gum you picked will also have a set up for Easter egg stuff to be displayed as well if you like

the ingame gum meter

touch up some s to make it easier to add this to your machine


all install info in download folder
will add more set notes in soon

342 days ago
does anyone know how to get the save game to work
I got the menu to show up of all your saved games on the main menu to work
I'm trying to save devars that are set to keep track of how many gobblegums you have
I want to do it in the save so if you close the game or play another map and come back you can load your gum and how many liquid divinium you have back up
352 days ago
creds
me  ;D

if you use this or my method in anyway please give proper credit
it took me awhile to get the .menu file to communicate with GSC this way
and track what button your mouse is on in gsc  & more

I was making this for my map and decided to make a public release of it with every gobblegum in it
I like to get someone that actually has the whole machine ingame to share their files with me so I can Implement my system into theirs I'm just doing the factory and the gobblegum selection as close to Black Ops 3 so I can get it


time to work on picking the gum
test what i got so fare

all mega  & normal gum added

371 days ago

i have the .menu runing off gsc   im doing all the hud ing to run the
Factory and set the gum you pick just like bo3



I like to get someone's help that already made a goblin gum machine and s
so I can have the whole set up all in one
I'm almost done with the classic gum screen and selection setup

if you like to help pm me
372 days ago
need  a script-er to make game types for a mod im doing that can be used on any map
like to get a good gun game and what ever you like to make
373 days ago
      warning   do not Precache the pics  you use will get error in coop sooner or latter they will still show

you can set 5 difficulty levels from normal to what ever you name it the zoms  get more health and speed the harder the difficulty level you can add more in to happen easy
make a backup of both files before replacing the difficulty one is a default menu I changed
and it is not for zombie until now so after you're finished with your mod put it back
it is the difficulty menu that pops up when you play a new game






coop menu


how to add
download files put in raw/ui   look down if you want  solo and coop menu all in one   get 2nd download file

add this in mod csv

Sorry but you are not allowed to view spoiler contents.



the xboxlive_lobby.menu file line 294 change this
Sorry but you are not allowed to view spoiler contents.
coop start is what your naming

the difficulty.menu change
line 62 to 66
change all named
Sorry but you are not allowed to view spoiler contents.

its pic that shows when mouse is on that option

lines 78 to 85 change text
line 78 is the menu title basically where this is "^3The Higher The Stars The Harder The Game"
the rest
the names of your different difficulty levels


in zombie mode gsc look for this
Sorry but you are not allowed to view spoiler contents.


replace it all with this

Sorry but you are not allowed to view spoiler contents.


go to _zombiemode_spawner.gsc

delete this out its  right on top

Sorry but you are not allowed to view spoiler contents.

add this
Sorry but you are not allowed to view spoiler contents.


will look like this at top


Sorry but you are not allowed to view spoiler contents.

compile your mod and all done


all dun start coop game host picks what difficulty level  you play and then start game can add gametypes in to
any background picture or video will show on this screen now as well


both coop and solo set up

do every thing same but use these files 



but in this difficulty.menu
lines 83 to 87 is solo names
and put your dev map name where this is
Sorry but you are not allowed to view spoiler contents.
on each line
lines 89 to 93 are coop names

and in your main.menu where your solo lunch button is take this out
Sorry but you are not allowed to view spoiler contents.

mine looked like this
Sorry but you are not allowed to view spoiler contents.

after you take that out put this where that was

Sorry but you are not allowed to view spoiler contents.

will look like this

Sorry but you are not allowed to view spoiler contents.

warning   do not Precache the pics  you use will get error in coop sooner or latter they will still show

compile map
all dun when you click the solo  button the difficulty menu pops up when you click what you want it runs the game with difficulty set
374 days ago
redoing some of this menu is in its own menu file  by its self now

this part is for adding a  sub menu to your Main Menu 
warning   do not Precache the pics  you use will get error in coop sooner or latter they will still show
pics
Sorry but you are not allowed to view spoiler contents.

follow vid



menu
Sorry but you are not allowed to view spoiler contents.

main menu button code
Sorry but you are not allowed to view spoiler contents.

this part is for adding sub menus to the  menu game types[like gun game] ,normal , hard mode[zombies  get more heath per round]
:(
We're sorry.
The embdedded media couldn't be retrieved.
View reason
The response was empty.
View media in new tab



sub menu dvars i used in vid
Sorry but you are not allowed to view spoiler contents.

this part is  for adding new button to your mod to pick up in gsc

1st way adds it to controller settings combat less steps  and easy even for noobs


pic
Sorry but you are not allowed to view spoiler contents.
Sorry but you are not allowed to view spoiler contents.

replace this
^3your button name here

the ^3 is for color of text

step 2
add this to mod.csv
Sorry but you are not allowed to view spoiler contents.
step 3

setting up the GSc to be notified of the button being pressed
you set with new button you set on the main menu in game // just click it in game on mane menu  and push a button dont use already used buttons when you make your mod every player will need to set what ever buttons they want
will notified  a gsc the same no matter what is picked

in gsc use this setup to pick up the new button being pressed and what you want in it and it can be looped

Sorry but you are not allowed to view spoiler contents.
thats it all dun build your mod set button on main menu go in game test your new button out
if used cred all above in creds

[/spoiler]



2nd way is more steps  but adds new button to main menu & BluntStuffy did a tut on this 1st
pic

Sorry but you are not allowed to view spoiler contents.

Sorry but you are not allowed to view spoiler contents.


will look like this but a number where ? is mine is on line 523 yours will be  around same place i added other stuff to my main.menu needs to be under #ifdef PC some ways down


Sorry but you are not allowed to view spoiler contents.

step 2
put this right above it
Sorry but you are not allowed to view spoiler contents.

you see where the ? is put the number that this has there in the CHOICE_BIND where its ? is then make  the CHOICE_BUTTON_VIS ? one number bigger
Sorry but you are not allowed to view spoiler contents.



will look something like this
Sorry but you are not allowed to view spoiler contents.
where this is put what you want it to show in game on main menu in this part "button name here"

save the main.menu file and close it

step 3

put this in mod.csv if your dont have a  one  // if you do this should be dun already for your menu file
Sorry but you are not allowed to view spoiler contents.

step 4
setting up the GSc to be notified of the button being pressed
you set with new button you set on the main menu in game // just click it in game on mane menu  and push a button dont use already used buttons when you make your mod every player will need to set what ever buttons they want
will notified  a gsc the same no matter what is picked

in gsc use this setup to pick up the new button being pressed and what you want in it and it can be looped

Sorry but you are not allowed to view spoiler contents.
warning   do not Precache the pics  you use will get error in coop sooner or latter they will still show
thats it all dun build your mod set button on main menu go in game test your new button out
if used cred all above in creds

more getting added to  tut soon[/spoiler]
378 days ago

Login

or login with an authentication provider below
Twitter
Discord
Steam
Twitch
Google
Loading ...