#define gpp getplayerproperty
#define cpp changeplayerproperty
#define gep getentityproperty
#define cep changeentityproperty
#define ov openborvariant
#define cv changeopenborvariant
#define clp changelayerproperty
#define getgv getglobalvar
#define getlv getlocalvar
#define setgv setglobalvar
#define setlv setlocalvar
void pressStart()
{
char text = "PRESS START BUTTON UNELMIA";
int size = 1;
int t = ov("elapsed_time");
int w = strwidth(text, size);
if(t%200>50)
{
drawstring(240-w/2, 190, size,text);
}
for(t=0; t<2; t++)
{
if(playerkeys(t, 1, "start"))
{
//jumptobranch("",1);
cpp(t, "credits", 5);
clp("background", 0, "enabled", 0);
clp("bglayer", 0, "enabled", 1);
clp("bglayer", 1, "enabled", 0);
setgv("start", "menu");
setlv("selector", 0);
setupMenu();
break;
}
}
}
int keyp(int p, char k)
{
return playerkeys(p, 1, k);
}
int key(char k)
{
int i;
for(i=0; i<2; i++)
{
if(playerkeys(i, 1, k))
{
return 1;
}
}
return 0;
}
void setupPlayerList()
{
void list = getlv("playerlist");
void flag = getlv("playerflag");
if(!list)
{
list = array(1);
flag = array(1);
set(list, 0, "JJ");
set(list, 1, "Max");
set(flag, 0, 0);
set(flag, 1, 0);
setlv("playerlist", list);
setlv("playerflag", flag);
}
}
void setupModes()
{
void items = getlv("modeitem");
void widths = getlv("modesize");
void logobg = getlv("logobg");
if(!items)
{
items = array(1);
widths = array(1);
set(items, 0, "DEMO_TEST");
set(widths, 0, strwidth(get(items,0),0));
//logobg = loadsprite("data/bgs/logo.gif");
logobg = loadsprite("data/bgs/logo640.png");
setlv("modeitem", items);
setlv("modesize", widths);
setlv("logobg", logobg);
}
}
void setupMenu()
{
void items = getlv("menuitem");
void widths = getlv("menusize");
if(!items)
{
items = array(3);
widths = array(3);
set(items, 0, "New Game");
set(items, 1, "Options");
set(items, 2, "Quit");
set(widths, 0, strwidth(get(items,0),0));
set(widths, 1, strwidth(get(items,1),0));
set(widths, 2, strwidth(get(items,2),0));
setlv("menuitem", items);
setlv("menusize", widths);
}
}
void menuLoop()
{
int size = 0;
void ent;
int i, f;
int t = ov("elapsed_time");
int selector = getlv("selector");
void items = getlv("menuitem");
void widths = getlv("menusize");
int se = loadsample("data/sounds/beep2.wav");
for(i=0; i<size(items); i++)
{
if(selector==i) size = 1;
else size = 0;
drawstring(240-get(widths,i)/2, 200+i*12, size,get(items,i));
}
if(key("moveup"))
{
if(--selector<0)
{
selector = size(items)-1;
}
playsample(se);
}
else if(key("movedown"))
{
if(++selector>=size(items))
{
selector = 0;
}
playsample(se);
}
else if(key("start") || key("attack"))
{
playsample(se);
if(selector==2)
{
shutdown();
}
else if(selector==1)
{
setlv("pause",1);
options();
setlv("pause",0);
}
/*else if(selector==1)
{
if(getgv("hassave"))
{
jumptobranch("",1);
cv("usesave", 1);
}
}*/
else
{
//setupModes();
//clp("background", 0, "enabled", 0);
//clp("bglayer", 0, "enabled", 0);
//clp("bglayer", 1, "enabled", 0);
//setlv("mselector", 0);
setgv("start", "mode");
jumptobranch("",1);
//cv("usesave", 1);
}
}
if(key("jump"))
{
clp("background", 0, "enabled", 1);
clp("bglayer", 0, "enabled", 0);
clp("bglayer", 1, "enabled", 0);
setgv("start", NULL());
}
setlv("selector", selector);
}
void chooseMode()
{
int size = 0;
void ent;
int i, shift;
char modet = "SELECT MODE";
int t = openborvariant("elapsed_time");
int selector = getlv("mselector");
void items = getlv("modeitem");
void widths = getlv("modesize");
void logobg = getlv("logobg");
int se = loadsample("data/sounds/beep2.wav");
changedrawmethod(NULL(), "reset", 1);
changedrawmethod(NULL(), "enabled", 1);
changedrawmethod(NULL(), "rotate", (t/10)%360);
changedrawmethod(NULL(), "centerx", 480);
changedrawmethod(NULL(), "centery", 480);
changedrawmethod(NULL(), "alpha", 6);
shift = (t/20)%50;
if((t/20)%100>=50) shift = 49-shift;
drawsprite(logobg, 249 + shift, 120-shift, 1);
changedrawmethod(NULL(), "enabled", 0);
drawstring(240-strwidth(modet, 2)/2, 140, 2, modet);
for(i=0; i<size(items); i++)
{
if(selector==i) size = 1;
else size = 0;
drawstring(240-get(widths,i)/2, 240+i*12, size,get(items,i));
}
if(key("moveup"))
{
if(--selector<0)
{
selector = size(items)-1;
}
playsample(se);
}
else if(key("movedown"))
{
if(++selector>=size(items))
{
selector = 0;
}
playsample(se);
}
else if(key("start") || key("attack"))
{
playsample(se);
for(i=0; i<2; i++)
{
if(keyp(i, "start") || keyp(i, "attack"))
setlv("player."+i+".join", 1);
}
setupPlayerList();
clp("background", 0, "enabled", 0);
clp("bglayer", 0, "enabled", 0);
clp("bglayer", 1, "enabled", 1);
setspawnentry("name", "star");
setspawnentry("health", 10000);
ent = spawn();
cep(ent, "position", 240, 200, 0);
cep(ent, "noaicontrol", 1);
setlv("star", ent);
setgv("start", "select");
}
if(key("jump"))
{
clp("background", 0, "enabled", 0);
clp("bglayer", 0, "enabled", 1);
clp("bglayer", 1, "enabled", 0);
setgv("start", "menu");
}
setlv("mselector", selector);
}
void selectPlayer()
{
int i, s, os, t=0, d=0;
void ent;
void list = getlv("playerlist");
void flag = getlv("playerflag");
for(i=0; i<2; i++)
{
if(getlv("player."+i+".join"))
{
if(!getlv("player."+i+".decided"))
{
s = getlv("player."+i+".selector");
if(!s) s = 0;
if(gpp(i, "name")=="")
{
if(get(flag, s))
{
if(getlv("player."+i+".move")==-1)
{
if(--s<0) s=size(flag)-1;
}
else
{
if(++s>=size(list)) s=0;
}
}
cpp(i, "name", get(list, s));
set(flag, s, 1);
ent = gpp(i, "entity");
if(ent) killentity(ent);
setspawnentry("name", gpp(i, "name"));
ent = spawn();
cep(ent, "position", 110+100*i, 200, 0);
cep(ent, "direction", 1-i);
cep(ent, "aiflag", "blink", 0);
cep(ent, "noaicontrol", 1);
performattack(ent, openborconstant("ANI_IDLE"));
cpp(i, "entity", ent);
cep(getlv("star"), "position", 160, 200, 0);
}
os = s;
ent = gpp(i, "entity");
if(keyp(i, "moveleft"))
{
if(--s<0) s = size(list)-1;
setlv("player."+i+".move", -1);
}
else if(keyp(i, "moveright"))
{
if(++s>=size(list)) s = 0;
setlv("player."+i+".move", 1);
}
else if (keyp(i, "start") || keyp(i, "attack"))
{
if(gep(ent, "aiflag", "idling"))
{
cep(ent, "animation", openborconstant("ANI_PICK"));
setlv("player."+i+".decided", 1);
if(getlv("mselector")==3)
{
setspawnentry("name", "zoom");
setspawnentry("coords", 160, 260, 0);
spawn();
}
}
}
if(os!=s)
{
cpp(i, "name", "");
set(flag, os, 0);
}
setlv("player."+i+".selector", s);
}
else
{
ent = gpp(i, "entity");
if(!gep(ent, "aiflag", "animating"))
{
d++;
}
}
t++;
}
else
{
setlv("player."+i+".join", keyp(i, "start"));
}
}
if(t>0 && t==d)
{
for(i=0; i<2; i++)
{
cpp(i, "entity", NULL());
if(gpp(i, "name")!="")
{
cpp(i, "lives", 5);
}
}
jumptobranch(get(getlv("modeitem"),getlv("mselector")),1);
}
else if(key("jump"))
{
for(i=0; i<2; i++)
{
cpp(i, "lives", 0);
cpp(i, "credits", 0);
cpp(i, "name", "");
ent = gpp(i, "entity");
if(ent) killentity(ent);
cpp(i, "entity", NULL());
setlv("player."+i+".join", NULL());
setlv("player."+i+".decided", NULL());
}
for(i=0; i<size(flag); i++)
{
set(flag, i, 0);
}
ent = getlv("star");
if(ent) killentity(ent);
setlv("star", NULL());
clp("background", 0, "enabled", 0);
clp("bglayer", 0, "enabled", 0);
clp("bglayer", 1, "enabled", 0);
setlv("mselector", 0);
setgv("start", "mode");
}
}
void main()
{
void type = getgv("start");
if(type==NULL())
{
pressStart();
}
else if(type=="menu")
{
if(!getlv("pause"))menuLoop();
}
else if(type=="mode")
{
chooseMode();
}
/*else if(type=="select")
{
selectPlayer();
}*/
}
void clear()
{
int i;
void list = getlv("playerlist");
void flag = getlv("playerflag");
void menuitem = getlv("menuitem");
void menusize = getlv("menusize");
void modeitem = getlv("modeitem");
void modesize = getlv("modesize");
void logobg = getlv("logobg");
if(list)
{
for(i=0; i<size(list); i++)
{
set(list, i, NULL());
}
free(list);
}
if(menuitem)
{
for(i=0; i<size(menuitem); i++)
{
set(menuitem, i, NULL());
}
free(menuitem);
}
if(modeitem)
{
for(i=0; i<size(modeitem); i++)
{
set(modeitem, i, NULL());
}
free(modeitem);
}
if(flag){
free(flag);
}
if(menusize){
free(menusize);
}
if(modesize){
free(modesize);
}
if(logobg){
free(logobg);
}
}