moving main menu/removing "how to play"

ABK

Well-known member
Id like to move the menu a bit, i remember there was someone who made it but i dont know where to start, there was feature that allowed us to rename menu items to different languages, is it still hardcoded?
 
Yeah currently theres no other way and these are private builds so no worries .
IMO removing things from main menu isnt really bring anything to the gameplay so i just left it as is after some tinkering.
But i have some demos that dont use menu at all, they go straight to the level on load, so you could easily make your own menu in that loaded stage to load next stage or select screen etc.
I dont think its that complicated and not that scary  to program if you have already some ground up done like totally skipping menu and your own custom menus onscreen.
 
Damon Caskey said:
No worries. If someone can find a better way that doesn't have all the problems I mentioned, I'll accept it into source. But without a whole new way of thinking (see Plombo's design), I don't see it happening.

DC

Yeah that is my concern too. And I would love to see Plombo's solution. A XML based menu would be way easier to handle.
 
You cant jump branchest from titlescreen so it wont even show "press start" ?
I have  jumptobranch("labir", 1);  in updated.c , doesnt work tho, bfx spawn is shown and jumptobranch is ignored , is this because theres no "set" acquired by the engine when it wants to jump straight to branch from select screen and skip even character selection ? I dont know, maybe something is wrong with my method.Can

Code:
void zoom()
{
   void vscreen = openborvariant("vscreen");
   int maxz=openborvariant("PLAYER_MAX_Z")+1000;
   int zoom_value=getglobalvar("zoomvalue");
   int zoom_x=getglobalvar("zoomx");
   int zoom_y=getglobalvar("zoomy");
   void ent=getglobalvar("zoomentity");
   int px=getentityproperty(ent,"x") +  zoom_x - openborvariant("xpos");
   int py=getentityproperty(ent,"z") + zoom_y - openborvariant("ypos") - getentityproperty(ent,"a");
   void zoom_scr = getglobalvar("zoomscreen");
   if(!zoom_scr){
      zoom_scr = allocscreen(openborvariant("hResolution"),openborvariant("vResolution"));
      setglobalvar("zoomscreen",zoom_scr);
   }
   clearscreen(zoom_scr);

   //draw what we need 
   drawspriteq(zoom_scr,0,openborconstant("MIN_INT"),maxz,0,0);
   //setup drawMethod
   changedrawmethod(NULL(),"reset",1);
   changedrawmethod(NULL(),"enabled",1);
   changedrawmethod(NULL(),"scalex",zoom_value);
   changedrawmethod(NULL(),"scaley",zoom_value);
   changedrawmethod(NULL(),"centerx",px);
   changedrawmethod(NULL(),"centery",py);
   //Draw the resized customized screen to main screen.
   drawscreen(zoom_scr,px,py, maxz+1);
   changedrawmethod(NULL(),"enabled", 0);
   drawspriteq(vscreen, 0, maxz+1,maxz+1, 0, 0);
   drawspriteq(vscreen, 0, maxz+2,openborconstant("MAX_INT"), 0, 0);
   clearspriteq();
}

void main(){
	
   if(getglobalvar("zoomentity"))
   {
      zoom();        
   }

    void counter= getlocalvar("counter");  // Set a variable to trigger the spawn on and off
if(openborvariant("in_menuscreen")) // Check if the game is in menu screen
  {    counter = setlocalvar("counter",0);
	

 }
if((openborvariant("in_titlescreen")) &&(counter!=1)) // Check the variable to avoid double spawn
		{	void subent;
		  jumptobranch("labir", 1);
  			loadmodel("bfx"); // name of the entity to be loaded
                      clearspawnentry(); // clean the spawn entry
			setspawnentry("name", "bfx"); // define the entity to be spawn
			setspawnentry("coords", 129,201,0); // set the position of the entity
			subent=spawn();  //  spawn the entity
			changeentityproperty(subent, "position", 129,201,0); //for safe, set again the position
changeentityproperty(subent, "direction", 1 ); //for safe, set again the position

			counter = setlocalvar("counter",1); // turn on the variable, blocking a new spawn to be made
}

if(openborvariant("in_level"))
	{	
		void counter = getlocalvar("counter"); 
		counter = setlocalvar("counter",0);
	}
	
if(openborvariant("in_showcomplete"))
	{	
  
		void counter = getlocalvar("counter"); 
		while(counter!=1)
		{
playmusic("data/music/score.bor", 1); 
			counter = setlocalvar("counter",1); // turn on the variable, blocking a new spawn to be made
			}

	}
}
------------
Ok i used skiptoset 0 in levels txt, this goes straight from logo animatoon to map ingame.
I used skipselect he-man  but when map shows up, the game closes ,like if he lost all lives and its gameover, what is missing ? I dont want the game to close, just give him normal set of lives.

Code:
completebg 1
showcomplete	394 310 464 310 484 310
clearbonus 205 340 380 340 480 340 580 340 680 340
lifebonus 205 360 380 360 480 360 580 360 680 360
totalscore 205 380 380 380 480 380 580 380 680 380


skiptoset 1


set	ETERNIA
custfade 100
typemp  0

Code:
set VS_Mode
custfade 100
typemp  0
lives   1
credits  1
noshare   1


skipselect he-man


scene	data/scenes/heman3.txt
z 560  560   
file	data/levels/vsfor7.txt
select	data/select.txt

Also, check this, utunnels work:
http://daimao.info/data/host/title.txt
--
oK, UTUNNELS custom menu is working  :)

36btE.png


levels.txt file should have this, also dont forget to change you panel image im title.txt , title should be in data but thats obvious from this:
Code:
skiptoset 0

set	Menu
skipselect
branch title
file data/title.txt

Heres entire thing if it will ever get deleted from server:
Code:
# credits for the "title level" workbase : utunnels

background data/bgs/title
bglayer data/bgs/titleb
bglayer data/bgs/titleb

#load zoom 3
panel data/chars/misc/empty.gif
order a
type 2
notime 1
settime 0 
nofadeout 0
nopause 1
nosave 1

levelscript @script
void main(){
	changelayerproperty("bglayer", 0, "enabled", 0);
	changelayerproperty("bglayer", 1, "enabled", 0);
	setindexedvar("inIntro", 1);
	playgif("data/scenes/logo.gif");
	
	if(getindexedvar("inIntro")){
		playmusic("data/music/test.ogg", 1);
		playgif("data/scenes/characters.gif");
	}
 
	playmusic("data/music/title.ogg", 1);
	setindexedvar("inIntro", NULL());
}
@end_script


#updatedscript data/scripts/updated.c
updatescript @script



#define gpp getplayerproperty
#define cpp changeplayerproperty
#define gep getentityproperty
#define cep changeentityproperty
#define oc openborconstant
#define ov openborvariant
#define cv changeopenborvariant
#define clp changelayerproperty
#define glv getlocalvar
#define slv setlocalvar
#define sev setentityvar
#define TITLE_ANIMATION 0

void oncreate() {
  setupModes();
  setupMenu();
  setupLoad();
  //slv("start", "mode");
  //slv("mselector", 0);
}


void pressStart()
{
	char text  = "PRESS START";
	int size = 1;
	int t = ov("elapsed_time");

	if(!getindexedvar("inIntro") && t%200>50) {
		drawstring(openborvariant("hResolution")/2 -strwidth(text, size)/2, 368, size,text); 
	}

	for(t=0; t<2; t++)
	{

		if(playerkeys(t, 1, "start") )
		{
		
			int se2 = loadsample("data/sounds/beep2.wav");
			playsample(se2);
			if(getindexedvar("inIntro")){
				setindexedvar("inIntro", NULL());
				playgif("");
				return;
			}
			
			//jumptobranch("",1);
			cpp(t, "credits", 5);
			clp("background", 0, "enabled", 0);
			clp("bglayer", 0, "enabled", 1);
			clp("bglayer", 1, "enabled", 0);
			slv("start", "menu");
			slv("selectorPos", 0);

			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 setupModes()
{
	int i=0;
	void items = array(0);
	void previews = array(0);
	void logobg = loadsprite("data/bgs/logo640.png");
	set(items, i++, "Mode 1");
	set(items, i++, "Mode 2");
	set(items, i++, "Mode ...");

	
	for(i=size(items)-1; i>=0; i--)
	set(previews, i, loadsprite("data/sprites/previews/"+(i+1)));
	slv("modeitem", items);
	slv("modeprev", previews);
	slv("logobg", logobg);
	
	
	setlocalvar("chooseModeSprite", loadsprite("data/sprites/previews/choose_stage.png"));
}

void setupMenu()
{
	int i=0;
	void items = array(0);
	set(items, i++, "New Game");
	set(items, i++, "Continue");
	set(items, i++, "Options");
	set(items, i++, "How To Play");
	set(items, i++, "Profiles");
	set(items, i++, "Quit");
	slv("menuitem", items);
}

void setupLoad()
{
	int i, d=0;
	char n;
	void items = array(0);
	void sets = array(0);
	loadgamefile();
	for (i=1; i<=5; i++)
	{
		//log("i=" + i + ", flag="  + getsaveinfo(i, "flag") + ", level=" + getsaveinfo(i, "level") + "\n");
		if(getsaveinfo(i, "flag") && getsaveinfo(i, "level"))
		{
			n = getsaveinfo(i, "name") + " ("+getsaveinfo(i, "level")+")";
			set(sets, d, i);
			set(items, d++, n);
		}
	}
	slv("loaditem", items);
	slv("loadset", sets);
	slv("hassave", d>0);
}



void menuLoop(){
	void ent;
	int i, f;
	int t = ov("elapsed_time");
	int selectorPos = glv("selectorPos");
	
	void items = glv("menuitem");
	char menuOption = get(items, selectorPos);
	
	int se = loadsample("data/sounds/beep.wav");
	int se2 = loadsample("data/sounds/beep2.wav");

	for(i=0; i<size(items); i++)
	{
		drawstring(openborvariant("hResolution")/2-strwidth(get(items,i),(selectorPos==i))/2, openborvariant("vResolution")/2+i*12, (selectorPos==i),get(items,i));
	}

	if(key("moveup"))
	{
		if(--selectorPos<0)
		{
			selectorPos = size(items)-1;
		}
		playsample(se);
	}
	else if(key("movedown"))
	{
		if(++selectorPos>=size(items))
		{
			selectorPos = 0;
		}
		playsample(se);
	}
	else if(key("start") || key("attack") || key("jump"))
	{
		playsample(se2);
		switch(menuOption){
			case "New Game":
				clp("background", 0, "enabled", 0);
				clp("bglayer", 0, "enabled", 0);
				clp("bglayer", 1, "enabled", 0);
				slv("mselector", 0);
				slv("start", "mode");
				break;
			case "Quit":
				shutdown();
				break;
			case "How To Play":
				slv("start", "howToPlay");
				setindexedvar("customView", "howToPlay");
				//playgif("data/scenes/howto.gif");
				playgif("data/scenes/empty.gif");
				break;
		
			case "Options":
			
				options();
				break;

			case "Continue":
		
				if(glv("hassave")){
					clp("background", 0, "enabled", 0);
					clp("bglayer", 0, "enabled", 0);
					clp("bglayer", 1, "enabled", 0);
					slv("mselector", 0);
					slv("start", "load");
				}
				break;
			
		}
	}
	if(key("esc"))
	{
		clp("background", 0, "enabled", 1);
		clp("bglayer", 0, "enabled", 0);
		clp("bglayer", 1, "enabled", 0);
		slv("start", NULL());
	}
	slv("selectorPos", selectorPos);
}

void loadGame()
{
	void ent;
	int i;
	char menut = "LOAD GAME";
	int selectorPos = glv("mselector");
	void items = glv("loaditem");
	void sets = glv("loadset");
	int se = loadsample("data/sounds/beep.wav");
	int se2 = loadsample("data/sounds/beep2.wav");
	
	//drawRotateBg();

	drawstring(ov("hResolution")/2-strwidth(menut, 2)/2, 140, 2, menut);

	for(i=0; i<size(items); i++)
		drawstring(ov("hResolution")/2-strwidth(get(items,i),(selectorPos==i))/2,    ov("vResolution")/2+i*12, (selectorPos==i),get(items,i));

	if(key("moveup"))
	{
		if(--selectorPos<0)
		{
			selectorPos = size(items)-1;
		}
		playsample(se);
	}
	else if(key("movedown"))
	{
		if(++selectorPos>=size(items))
		{
			selectorPos = 0;
		}
		playsample(se);
	}
	else if(key("start") || key("attack") || key("jump"))
	{
		playsample(se2);

		playgame(get(sets, selectorPos), 1);
	}
	if(key("esc") || key("attack3"))
	{
		clp("background", 0, "enabled", 0);
		clp("bglayer", 0, "enabled", 1);
		clp("bglayer", 1, "enabled", 0);
		slv("start", "menu");
	}
	slv("mselector", selectorPos);
}




void chooseMode()
{
	void ent;
	int i;
	char modet = "SELECT MODE";
	int selectorPos = glv("mselector");
	void items = glv("modeitem");
	void previews = glv("modeprev");
	int se = loadsample("data/sounds/beep.wav");
	int se2 = loadsample("data/sounds/beep2.wav");
	


	drawstring(ov("hResolution")/2-strwidth(modet, 2)/2, 140, 2, modet);

	for(i=0; i<size(items); i++)
		drawstring(ov("hResolution")/2-strwidth(get(items,i),(selectorPos==i))/2, 160+i*12, (selectorPos==i),get(items,i));

	if(key("moveup"))
	{
		if(--selectorPos<0)
		{
			selectorPos = size(items)-1;
		}
		playsample(se);
	}
	else if(key("movedown"))
	{
		if(++selectorPos>=size(items))
		{
			selectorPos = 0;
		}
		playsample(se);
	}
	else if(key("start") || key("attack") || key("jump"))
	{
		playsample(se2);

		for(i=0; i<2; i++)
		{
			if(keyp(i, "start") || keyp(i, "attack") || key("jump"))
				slv("player."+i+".join", 1);
		}
		clp("background", 0, "enabled", 0);
		clp("bglayer", 0, "enabled", 0);
		clp("bglayer", 1, "enabled", 1);
		setspawnentry("name", "Pigman");
		setspawnentry("health", 10000);
		ent = spawn();
		cep(ent, "position", 160, 200, 0);
		cep(ent, "noaicontrol", 1);
		slv("pigman", ent);
		slv("start", "select");
	}
	if(key("esc"))
	{
		clp("background", 0, "enabled", 0);
		clp("bglayer", 0, "enabled", 1);
		clp("bglayer", 1, "enabled", 0);
		slv("start", "menu");
	}
	slv("mselector", selectorPos);
}




void main(){
	void type = glv("start");

	if(type==NULL())
	{
		pressStart();
	}
	else if(type=="menu")
	{
		if(!ov("in_options"))menuLoop();
	}
	else if(type=="mode")
	{
		chooseMode();
	}
	else if(type=="load")
	{
		loadGame();
	}
	else if(type=="select")
	{
		//selectPlayerGrid();
	} else if(type == "howToPlay"){
		//howToPlayKey(0);
		//howToPlayKey(1);
	}
}

void ondestroy(){

	int i;
	void list = glv("playerlist");
	void flag = glv("playerflag");
	void menuitem = glv("menuitem");
	void loaditem = glv("loaditem");
	void loadset = glv("loadset");
	void modeitem = glv("modeitem");
	void modeprev = glv("modeprev");
	void logobg = glv("logobg");
	if(list) free(list);
	if(menuitem) free(menuitem);
	if(modeitem) free(modeitem);
	if(flag) free(flag);
	if(loaditem) free(loaditem);
	if(loadset) free(loadset);
	if(logobg) free(logobg);
  if(modeprev) {
    //for(i=0; i<size(modeprev); i++)
      //TODO free(get(modeprev,i));
    free(modeprev);
  }
	changedrawmethod(NULL(), "reset", 1);
}
@end_script
 
Yeah this lets us scrap default menu system and figure out our own, it even goes to options normally.I also like his text centering method.
Me personally id like to some day create startup like limbo so game runs without any crap at the beginning and character sleeps, when you press something then he wakes up and you play, this is very small detail but its unique and gameplay  feels more immersive, menus feel a bit bureaucratic for some games and when your intro creates some impact then "press start" kinda ruins it then you have to go through menu..
 
Great, im having a hard time to convert it to inline script tag
Code:
	@cmd	settextobj 4 (openborvariant("hResolution")/2 -strwidth("CANCEL" 1)/2)  180 0  -1 "CANCEL"

Doesnt work, im trying to convert it from this
Code:
	 settextobj(1, openborvariant("hResolution")/2 -strwidth("welcome to the palace", 1)/2, 180 , 1, 1, "welcome to the palace" , openborvariant("elapsed_time")+1000);
---
OK this is close, 480 is half of hresolution
Code:
@cmd	settextobj 4 (480 -(strwidth("CANCEL" 1))/2  180 0  -1 "CANCEL"
--
OK i think its solved
Code:
@cmd	settextobj 4 ((openborvariant("hResolution"))/2 -(strwidth("CANCEL" 1))/2  180 0  -1 "CANCEL"
But dont laugh! Sometimes im noob like that.
 
O Ilusionista said:
Er... Have you guys read what Damon Caskey  said above?
Personally speaking, I don't think ignoring the lead dev that way will bring anything good. In fact, it will have the opposite effect...
No problem man. Personally I prefer not to change anything in the source code and that's why I use a lot of scripts in my games. In particular, making customized menus I think it is a simple thing to do, despite being laborious.

I don't think it's necessary to include anything in the source code, the file I sent was just an single test and I thought this was what bWWd was looking for due to this part:
You can do it by editing sourcecode and compiling, its easy to remove some stuff and change positions around in there, i did it like 8-10 years ago to see if its possible and wont cause big issues. But i actually dont remember if it did caused problems.

Anyway, it would be good to know by the post creator when a solution not fit to the your problem, and will be good to know if there's better solutions, so we can all learn.
The XML based menu appears to be a good solution for this case, I didn't know it was possible. Thanks for that!
 
So... i got it kinda working but theres and issue with skipselect ( or with me) so it goes nicely to forest branch but mandalorian character is not spawned , it still says press start , how i can make him spawn in level like he normally would ?
Levels txt:
Code:
skiptoset 0

set	Menu
custfade 100
typemp  2
lives   3
credits 100
skipselect mandalorian

branch title
file data/title.txt
skipselect mandalorian
z 460 990
file	data/levels/forest.txt
end

branch forest
skipselect mandalorian
z 460 990
file	data/levels/forest.txt
end


Code of fake titlescreen:
Code:
# credits for the "title level" workbase : utunnels

background data/bgs/title.gif
bglayer data/bgs/titleb.gif
bglayer data/bgs/titleb.gif

#load zoom 3
panel data/bgs/title.gif
order a
type 2
notime 1
settime 0
nofadeout 0
nopause 1
nosave 1

levelscript @script
void main(){
	changelayerproperty("bglayer", 0, "enabled", 0);
	changelayerproperty("bglayer", 1, "enabled", 0);
	setindexedvar("inIntro", 1);
	playgif("data/scenes/logo.gif");
	
	if(getindexedvar("inIntro")){
		playmusic("data/music/test.ogg", 1);
		playgif("data/scenes/cred.gif");
	}
 
	playmusic("data/music/title.ogg", 1);
	setindexedvar("inIntro", NULL());
}
@end_script


#updatedscript data/scripts/updated.c
updatescript @script



#define gpp getplayerproperty
#define cpp changeplayerproperty
#define gep getentityproperty
#define cep changeentityproperty
#define oc openborconstant
#define ov openborvariant
#define cv changeopenborvariant
#define clp changelayerproperty
#define glv getlocalvar
#define slv setlocalvar
#define sev setentityvar
#define TITLE_ANIMATION 0

void oncreate() {
  setupModes();
  setupMenu();
  setupLoad();
  //slv("start", "mode");
  //slv("mselector", 0);
}


void pressStart()
{
	char text  = "PRESS START";
	int size = 1;
	int t = ov("elapsed_time");

	if(!getindexedvar("inIntro") && t%200>50) {
		drawstring(openborvariant("hResolution")/2 -strwidth(text, size)/2, 368, size,text);
	}

	for(t=0; t<2; t++)
	{

		if(playerkeys(t, 1, "start") )
		{
		
			int se2 = loadsample("data/sounds/beep2.wav");
			playsample(se2);
			if(getindexedvar("inIntro")){
				setindexedvar("inIntro", NULL());
				playgif("");
				return;
			}
			
			//jumptobranch("",1);
			cpp(t, "credits", 5);
			clp("background", 0, "enabled", 0);
			clp("bglayer", 0, "enabled", 1);
			clp("bglayer", 1, "enabled", 0);
			slv("start", "menu");
			slv("selectorPos", 0);

			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 setupModes()
{
	int i=0;
	void items = array(0);
	void previews = array(0);
	void logobg = loadsprite("data/bgs/logo640.png");
	set(items, i++, "Mode 1");
//	set(items, i++, "Mode 2");
//	set(items, i++, "Mode ...");

	
	for(i=size(items)-1; i>=0; i--)
	set(previews, i, loadsprite("data/sprites/previews/"+(i+1)));
	slv("modeitem", items);
	slv("modeprev", previews);
	slv("logobg", logobg);
	
	
	setlocalvar("chooseModeSprite", loadsprite("data/sprites/previews/choose_stage.png"));
}

void setupMenu()
{
	int i=0;
	void items = array(0);
	set(items, i++, "New Game");

//	set(items, i++, "Continue");
//	set(items, i++, "Options");
//	set(items, i++, "How To Play");
//	set(items, i++, "Profiles");
	set(items, i++, "Quit");
	slv("menuitem", items);
}

void setupLoad()
{
	int i, d=0;
	char n;
	void items = array(0);
	void sets = array(0);
	loadgamefile();
	for (i=1; i<=5; i++)
	{
		//log("i=" + i + ", flag="  + getsaveinfo(i, "flag") + ", level=" + getsaveinfo(i, "level") + "\n");
		if(getsaveinfo(i, "flag") && getsaveinfo(i, "level"))
		{
			n = getsaveinfo(i, "name") + " ("+getsaveinfo(i, "level")+")";
			set(sets, d, i);
			set(items, d++, n);
		}
	}
	slv("loaditem", items);
	slv("loadset", sets);
	slv("hassave", d>0);
}



void menuLoop(){
	void ent;
	int i, f;
	int t = ov("elapsed_time");
	int selectorPos = glv("selectorPos");
	
	void items = glv("menuitem");
	char menuOption = get(items, selectorPos);
	
	int se = loadsample("data/sounds/beep.wav");
	int se2 = loadsample("data/sounds/beep2.wav");

	for(i=0; i<size(items); i++)
	{
		drawstring(660-strwidth(get(items,i),(selectorPos==i))/2, openborvariant("vResolution")/4+i*28, (selectorPos==i),get(items,i));
	}

	if(key("moveup"))
	{
		if(--selectorPos<0)
		{
			selectorPos = size(items)-1;
		}
		playsample(se);
	}
	else if(key("movedown"))
	{
		if(++selectorPos>=size(items))
		{
			selectorPos = 0;
		}
		playsample(se);
	}
	else if(key("start") || key("attack") || key("jump"))
	{
		playsample(se2);
		switch(menuOption){
			case "New Game":
				clp("background", 0, "enabled", 0);
				clp("bglayer", 0, "enabled", 0);
				clp("bglayer", 1, "enabled", 0);
				slv("mselector", 0);
				slv("start", "mode");
				break;
			case "Quit":
				shutdown();
				break;
			case "How To Play":
				slv("start", "howToPlay");
				setindexedvar("customView", "howToPlay");
				//playgif("data/scenes/howto.gif");
				playgif("data/scenes/empty.gif");
				break;
		
			case "Options":
			
				options();
				break;

			case "Continue":
		
				if(glv("hassave")){
					clp("background", 0, "enabled", 0);
					clp("bglayer", 0, "enabled", 0);
					clp("bglayer", 1, "enabled", 0);
					slv("mselector", 0);
					slv("start", "load");
				}
				break;
			
		}
	}
	if(key("esc"))
	{
		clp("background", 0, "enabled", 1);
		clp("bglayer", 0, "enabled", 0);
		clp("bglayer", 1, "enabled", 0);
		slv("start", NULL());
	}
	slv("selectorPos", selectorPos);
}

void loadGame()
{
	void ent;
	int i;
	char menut = "LOAD GAME";
	int selectorPos = glv("mselector");
	void items = glv("loaditem");
	void sets = glv("loadset");
	int se = loadsample("data/sounds/beep.wav");
	int se2 = loadsample("data/sounds/beep2.wav");
	
	//drawRotateBg();

	drawstring(ov("hResolution")/2-strwidth(menut, 2)/2, 140, 2, menut);

	for(i=0; i<size(items); i++)
		drawstring(ov("hResolution")/2-strwidth(get(items,i),(selectorPos==i))/2,    ov("vResolution")/2+i*12, (selectorPos==i),get(items,i));

	if(key("moveup"))
	{
		if(--selectorPos<0)
		{
			selectorPos = size(items)-1;
		}
		playsample(se);
	}
	else if(key("movedown"))
	{
		if(++selectorPos>=size(items))
		{
			selectorPos = 0;
		}
		playsample(se);
	}
	else if(key("start") || key("attack") || key("jump"))
	{
		playsample(se2);

		playgame(get(sets, selectorPos), 1);
	}
	if(key("esc") || key("attack3"))
	{
		clp("background", 0, "enabled", 0);
		clp("bglayer", 0, "enabled", 1);
		clp("bglayer", 1, "enabled", 0);
		slv("start", "menu");
	}
	slv("mselector", selectorPos);
}




void chooseMode()
{
	void ent;
	int i;
	char modet = "SELECT MODE";
	int selectorPos = glv("mselector");
	void items = glv("modeitem");
	void previews = glv("modeprev");
	int se = loadsample("data/sounds/beep.wav");
	int se2 = loadsample("data/sounds/beep2.wav");
	


	drawstring(ov("hResolution")/2-strwidth(modet, 2)/2, 140, 2, modet);

	for(i=0; i<size(items); i++)
		drawstring(ov("hResolution")/2-strwidth(get(items,i),(selectorPos==i))/2, 160+i*12, (selectorPos==i),get(items,i));

	if(key("moveup"))
	{
		if(--selectorPos<0)
		{
			selectorPos = size(items)-1;
		}
		playsample(se);
	}
	else if(key("movedown"))
	{
		if(++selectorPos>=size(items))
		{
			selectorPos = 0;
		}
		playsample(se);
	}
	else if(key("start") || key("attack") || key("jump"))
	{
		playsample(se2);

		for(i=0; i<2; i++)
		{
			if(keyp(i, "start") || keyp(i, "attack") || key("jump"))
				slv("player."+i+".join", 1);
		}
		jumptobranch("forest", 1);

	}
	if(key("esc"))
	{
		clp("background", 0, "enabled", 0);
		clp("bglayer", 0, "enabled", 1);
		clp("bglayer", 1, "enabled", 0);
		slv("start", "menu");
	}
	slv("mselector", selectorPos);
}




void main(){
	void type = glv("start");

	if(type==NULL())
	{
		pressStart();
	}
	else if(type=="menu")
	{
		if(!ov("in_options"))menuLoop();
	}
	else if(type=="mode")
	{
		chooseMode();
	}
	else if(type=="load")
	{
		loadGame();
	}
	else if(type=="select")
	{
		//selectPlayerGrid();
	} else if(type == "howToPlay"){
		//howToPlayKey(0);
		//howToPlayKey(1);
	}
}

void ondestroy(){

	int i;
	void list = glv("playerlist");
	void flag = glv("playerflag");
	void menuitem = glv("menuitem");
	void loaditem = glv("loaditem");
	void loadset = glv("loadset");
	void modeitem = glv("modeitem");
	void modeprev = glv("modeprev");
	void logobg = glv("logobg");
	if(list) free(list);
	if(menuitem) free(menuitem);
	if(modeitem) free(modeitem);
	if(flag) free(flag);
	if(loaditem) free(loaditem);
	if(loadset) free(loadset);
	if(logobg) free(logobg);
  if(modeprev) {
    //for(i=0; i<size(modeprev); i++)
      //TODO free(get(modeprev,i));
    free(modeprev);
  }
	changedrawmethod(NULL(), "reset", 1);
}
@end_script

Is there any way to force press start of player  by script? So he doesnt have to press start to join ? How to solve this ?

36gLm.jpg


I can upload the demo.
--
OK now i see its a bug in new skipselect, i have older build from utunnels demo and all works fine

https://www.dropbox.com/s/fvco5wd5g41v47a/btoads.7z
But that version is so old it doesnt even support webm player
Yeah, so until its changed back to how it was, it wont gonna work, player i simply not spawned when you use skipselect, but the same script works fine in old openbor version from that btoads.7z file, when you swap openbor in that btoads demo to new openbor, then the same bug happens, player is not spawned.
So i spent entire day trying to get around this and its in engine bug.
My suspicion is since skipselect was "fixed" cause there were some other issues with it, it stopped working for other things.
 
Back
Top Bottom