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
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
}
}
}
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
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
skiptoset 0
set Menu
skipselect
branch title
file data/title.txt
# 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,that is AWESOME.Me personally id like to some day create startup like limbo so game runs without any crap at the beginning and character sleeps,
bWWd Yeah I used on my game too, to show the helper's name. It will get the string length to always center the text.I also like his text centering method.
@cmd settextobj 4 (openborvariant("hResolution")/2 -strwidth("CANCEL" 1)/2) 180 0 -1 "CANCEL"
settextobj(1, openborvariant("hResolution")/2 -strwidth("welcome to the palace", 1)/2, 180 , 1, 1, "welcome to the palace" , openborvariant("elapsed_time")+1000);
@cmd settextobj 4 (480 -(strwidth("CANCEL" 1))/2 180 0 -1 "CANCEL"
@cmd settextobj 4 ((openborvariant("hResolution"))/2 -(strwidth("CANCEL" 1))/2 180 0 -1 "CANCEL"
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.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...
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.
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
# 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