• Hey Guest! Ever feel like entering a Game Jam, but the time limit is always too much pressure? We get it... You lead a hectic life and dedicating 3 whole days to make a game just doesn't work for you! So, why not enter the GMC SLOW JAM? Take your time! Kick back and make your game over 4 months! Interested? Then just click here!

Legacy GM [NOT SOLVED] Collision error with custom movement code

W

Wraithious

Guest
Hello, in my project I have a character that stays in the middle of the screen and the background images and the game objects move instead of the character, I have now made my background border objects and they move fine with the background images, and my collision code for the most part works nice, BUT sometimes my character bounces the wrong way and ends up on the wrong side of the border, here's a utube video showing what happens:
One big problem I have with the movement system I've made is that I can't use the bounce d&d, bounce functions, or x_previous and y_previous, I can't use any of that because my character doesn't move, so I can only use collision functions.
I'm hoping one of you may have done something like this setup before and can tell me what I'm doing wrong, I'll post my code but know that I have tried several different things like using collision circle, making a variable to disable the player input while 'stuck' in the background border, alarms to keep the stuck variable true until not place meeting and a bunch of other things and get the exact same results. So I've realized what is going on, at some point the character is moving one way and the directional input, which shouldn't be active, is setting the track last direction variable when it shouldn't and then, because I have it set to go the opposite direction the last directional input was set, it goes in the wrong direction.
So how can I determine when this is happening and use the normal direction code to compensate?????
also here's a pic of the background border sprite used in the above video: (the white part is transparent)
upload_2018-5-3_20-9-4.png
Ok so the code, Collision event of my character and one of the 4 border objects
Code:
///bounce on borders
global.stuck=1;

global.st=1;global.lt=0;global.rt=0;global.up=0;global.dn=0;global.dl=0;global.ul=0;global.ur=0;global.dr=0;

if(global.lastdir=4)//if going left, background moves right
{
    global.flyx-=gov+1;
}
if(global.lastdir=0)//if going right, background moves left
{
    global.flyx+=gov+1;
}
if(global.lastdir=6)//if going up, background moves down
{
    global.flyy-=gov+1;
}
if(global.lastdir=2)//if going down, background moves up
{
    global.flyy+=gov+1;
}
if(global.lastdir=1)//if going down left, background moves up right
{
    global.flyx+=(gov+1)*0.707;
    global.flyy+=(gov+1)*0.707;
}
if(global.lastdir=3)//if going up left, background moves down right
{
    global.flyx-=(gov+1)*0.707;
    global.flyy+=(gov+1)*0.707;
}
if(global.lastdir=7)//if going up right, background moves down left
{
    global.flyx+=(gov+1)*0.707;
    global.flyy-=(gov+1)*0.707;
}
if(global.lastdir=5)//if going down right, background moves up left
{
    global.flyx-=(gov+1)*0.707;
    global.flyy-=(gov+1)*0.707;
}
BorderPosition(global.areanum,global.lastseg,global.vehicle);// move the border object to the correct position on the background
This is a portion of the script BorderPosition:
Code:
bdrz0.sprite_index = asset_get_index("bdr"+string(global.roomnum));
bdrz0.x=global.flyx+(1024*(global.roomnum mod 6));
bdrz0.y=global.flyy+(512*(floor(global.roomnum / 6)));
if(bdrsegnum = 0) {//There are 9 segments, or quadrants in each 'room'
bdrz1.sprite_index = bdr22;//blank sprite
bdrz2.sprite_index = bdr22;//blank sprite
bdrz3.sprite_index = bdr22;//blank sprite
global.lastseg=0;
bdrz1.x=global.flyx-1024+(1024*(global.roomnum mod 6));//BL
bdrz1.y=global.flyy+512+(512*(floor(global.roomnum / 6)));
bdrz2.x=global.flyx+(1024*(global.roomnum mod 6));//B
bdrz2.y=global.flyy+512+(512*(floor(global.roomnum / 6)));
bdrz3.x=global.flyx+1024+(1024*(global.roomnum mod 6));//BR
bdrz3.y=global.flyy+512+(512*(floor(global.roomnum / 6)));
global.lastseg=0;//save last quadrant player is in
}
step event to end collision if not meeting any of the collidable objects: (note that I'm not having this problem with object objs)
Code:
if !place_meeting(x,y,bdrz0) && !place_meeting(x,y,bdrz1) && !place_meeting(x,y,bdrz2) && !place_meeting(x,y,bdrz3) && !place_meeting(x,y,objs)
global.stuck=-1;
And here is one of the movement input codes my directional controller has in it's step event, I also tried moving the above code to this object but since it all happens in one step that failed miserably) GLOBAL.LASTDIR is the important variable here
Code:
if(global.stuck=-1) {
if(h_move<0 && v_move=0)
{global.lt=1;global.rt=0;global.up=0;global.dn=0;global.dl=0;global.ul=0;global.ur=0;global.dr=0;//left
global.lastdir=4;}
if(h_move>0 && v_move=0)
{global.rt=1;global.lt=0;global.up=0;global.dn=0;global.dl=0;global.ul=0;global.ur=0;global.dr=0;//right
global.lastdir=0;}
if(h_move=0 && v_move<0)
{global.up=1;global.lt=0;global.rt=0;global.dn=0;global.dl=0;global.ul=0;global.ur=0;global.dr=0;//up
global.lastdir=6;}
if(h_move=0 && v_move>0)
{global.dn=1;global.lt=0;global.rt=0;global.up=0;global.dl=0;global.ul=0;global.ur=0;global.dr=0;//down
global.lastdir=2;}
if(h_move>0 && v_move>0)
{global.dr=1;global.lt=0;global.rt=0;global.up=0;global.dn=0;global.dl=0;global.ul=0;global.ur=0;//down right
global.lastdir=1;}
if(h_move<0 && v_move>0)
{global.dl=1;global.lt=0;global.rt=0;global.up=0;global.dn=0;global.ul=0;global.ur=0;global.dr=0;//down left
global.lastdir=3;}
if(h_move>0 && v_move<0)
{global.ur=1;global.lt=0;global.rt=0;global.up=0;global.dn=0;global.dl=0;global.ul=0;global.dr=0;//up right
global.lastdir=7;}
if(h_move<0 && v_move<0)
{global.ul=1;global.lt=0;global.rt=0;global.up=0;global.dn=0;global.dl=0;global.ur=0;global.dr=0;//up left
global.lastdir=5;}
}
Any help or thoughts on how I could do this differently/correctly would be appreciated, I've spent a good 20 hours at least trying to figure it out
 
Last edited by a moderator:
W

Wraithious

Guest
Also maybe it may help to show you the background movement code that also moves the border objects (and also to note that the border objects have no code in them whatsoever)
step event of room controller object:
Code:
if(global.menu1=0 && global.pause=0 && global.st=0 && room=room1) {// if not in menu and not paused and character is moving via player input
//background movement inverse code
if(bndry=0 && (global.areanum=0 || global.areanum=4)) {
if(global.up=1 && global.flyy< 128 - gov3) {//Up
global.flyy+=gov3;
}
if(global.dn=1 && global.flyy> -2670 + gov3) {//Down
global.flyy-=gov3;
}
if(global.lt=1 && global.flyx< 256 - gov3) {//Left
global.flyx+=gov3;
}
if(global.rt=1 && global.flyx> -5376 + gov3) {//Right
global.flyx-=gov3;
}
if(global.dr=1) {//Down Right
if global.flyx> -5376 + gov3 global.flyx-=gov3;
if global.flyy> -2670 - gov3 global.flyy-=gov3;
}
if(global.dl=1) {//Down Left
if global.flyx< 256 - gov3 global.flyx+=gov3;
if global.flyy> -2670 - gov3 global.flyy-=gov3;
}
if(global.ur=1) {//Up Right
if global.flyx> -5376 + gov3 global.flyx-=gov3;
if global.flyy< 128 - gov3 global.flyy+=gov3;
}
if(global.ul=1) {//Up left
if global.flyx< 256 - gov3 global.flyx+=gov3;
if global.flyy< 128 - gov3 global.flyy+=gov3;
}
if(instance_exists(cha1)) {// character's absolute x,y position
if(cha1.state !=2) {
global.chaxy[0]=global.flyx+256;global.chaxy[1]=global.flyy+128;
}
}
}
//if character is in room transition area
if (global.flyx>=(256-(1024*(global.roomnum mod 6)))) quad[4]=1;//left
if (global.flyx<(256-(1024*(global.roomnum mod 6)))) quad[4]=0;
if (global.flyx<= -256 -(1024*(global.roomnum mod 6))) quad[3]=1;//right
if (global.flyx> -256 -(1024*(global.roomnum mod 6))) quad[3]=0;
if (global.flyy>=(128 -(512*(floor(global.roomnum / 6))))) quad[1]=1;//top
if (global.flyy<(128 -(512*(floor(global.roomnum / 6))))) quad[1]=0;
if (global.flyy<= -128 -(512*(floor(global.roomnum / 6)))) quad[2]=1;//bottom
if (global.flyy> -128 -(512*(floor(global.roomnum / 6)))) quad[2]=0;
if(quad[1] = 1 || quad[2] = 1 || quad[3] = 1 || quad[4] = 1) quad[0]=0; //not in room completely
if(quad[0]=0 && quad[1] = 0 && quad[2] = 0 && quad[3] = 0 && quad[4] = 0) { //in room completely
quad[0]=1;
global.segnum=0;
BorderPosition(global.areanum,0,global.vehicle);
}
//get results to set quadrent number AND border sprites
if(instance_exists(bdrz0) && instance_exists(bdrz1) && instance_exists(bdrz2) && instance_exists(bdrz3)) {
if(quad[4] = 1 && quad[1] = 0 && quad[2] = 0 && quad[3] = 0 && global.segnum !=4) //off left
{global.segnum=4;
if(instance_exists(bdrz0) && instance_exists(bdrz1) && instance_exists(bdrz2) && instance_exists(bdrz3))
BorderPosition(global.areanum,4,global.vehicle);
}
if(quad[3] = 1 && quad[1] = 0 && quad[2] = 0 && quad[4] = 0 && global.segnum !=3) //off right
{global.segnum=3;
if(instance_exists(bdrz0) && instance_exists(bdrz1) && instance_exists(bdrz2) && instance_exists(bdrz3))
BorderPosition(global.areanum,3,global.vehicle);
}
if(quad[1] = 1 && quad[2] = 0 && quad[3] = 0 && quad[4] = 0 && global.segnum !=1) //off top
{global.segnum=1;
if(instance_exists(bdrz0) && instance_exists(bdrz1) && instance_exists(bdrz2) && instance_exists(bdrz3))
BorderPosition(global.areanum,1,global.vehicle);
}
if(quad[2] = 1 && quad[1] = 0 && quad[3] = 0 && quad[4] = 0 && global.segnum !=2) //off bottom
{global.segnum=2;
if(instance_exists(bdrz0) && instance_exists(bdrz1) && instance_exists(bdrz2) && instance_exists(bdrz3))
BorderPosition(global.areanum,2,global.vehicle);
}
if(quad[1] = 1 && quad[3] = 1 && quad[2] = 0 && quad[4] = 0 && global.segnum !=6) //off top right
{global.segnum=6;
if(instance_exists(bdrz0) && instance_exists(bdrz1) && instance_exists(bdrz2) && instance_exists(bdrz3))
BorderPosition(global.areanum,6,global.vehicle);
}
if(quad[1] = 1 && quad[4] = 1 && quad[2] = 0 && quad[3] = 0 && global.segnum !=5) //off top left
{global.segnum=5;
if(instance_exists(bdrz0) && instance_exists(bdrz1) && instance_exists(bdrz2) && instance_exists(bdrz3))
BorderPosition(global.areanum,5,global.vehicle);
}
if(quad[2] = 1 && quad[4] = 1 && quad[1] = 0 && quad[3] = 0 && global.segnum !=8) //off bottom left
{global.segnum=8;
if(instance_exists(bdrz0) && instance_exists(bdrz1) && instance_exists(bdrz2) && instance_exists(bdrz3))
BorderPosition(global.areanum,8,global.vehicle);
}
if(quad[2] = 1 && quad[3] = 1 && quad[1] = 0 && quad[4] = 0 && global.segnum !=7) //off bottom right
{global.segnum=7;
if(instance_exists(bdrz0) && instance_exists(bdrz1) && instance_exists(bdrz2) && instance_exists(bdrz3))
BorderPosition(global.areanum,7,global.vehicle);
}
}
//Background border control - ALLWAYS MOVE ALL 4 BORDER OBJECTS
bdrz0.x=global.flyx+(1024*(global.roomnum mod 6));//move center
bdrz0.y=global.flyy+(512*(floor(global.roomnum / 6)));
if(global.segnum=0) {
bdrz1.x=global.flyx-1024+(1024*(global.roomnum mod 6));//BL
bdrz1.y=global.flyy+512+(512*(floor(global.roomnum / 6)));
bdrz2.x=global.flyx+(1024*(global.roomnum mod 6));//B
bdrz2.y=global.flyy+512+(512*(floor(global.roomnum / 6)));
bdrz3.x=global.flyx+1024+(1024*(global.roomnum mod 6));//BR
bdrz3.y=global.flyy+512+(512*(floor(global.roomnum / 6)));
}
if(global.segnum=1) {//move top
bdrz1.x=global.flyx+(1024*(global.roomnum mod 6));//T
bdrz1.y=global.flyy-512+(512*(floor(global.roomnum / 6)));
bdrz2.x=global.flyx+(1024*(global.roomnum mod 6));//B
bdrz2.y=global.flyy+512+(512*(floor(global.roomnum / 6)));
bdrz3.x=global.flyx+1024+(1024*(global.roomnum mod 6));//BR
bdrz3.y=global.flyy+512+(512*(floor(global.roomnum / 6)));
}
if(global.segnum=2) {//move bottom
bdrz1.x=global.flyx+(1024*(global.roomnum mod 6));//B
bdrz1.y=global.flyy+512+(512*(floor(global.roomnum / 6)));
bdrz2.x=global.flyx+(1024*(global.roomnum mod 6));//T
bdrz2.y=global.flyy-512+(512*(floor(global.roomnum / 6)));
bdrz3.x=global.flyx+1024+(1024*(global.roomnum mod 6));//TR
bdrz3.y=global.flyy-512+(512*(floor(global.roomnum / 6)));
}
if(global.segnum=3) {//move right
bdrz1.x=global.flyx+1024+(1024*(global.roomnum mod 6));//R
bdrz1.y=global.flyy+(512*(floor(global.roomnum / 6)));
bdrz2.x=global.flyx-1024+(1024*(global.roomnum mod 6));//L
bdrz2.y=global.flyy+(512*(floor(global.roomnum / 6)));
bdrz3.x=global.flyx-1024+(1024*(global.roomnum mod 6));//TL
bdrz3.y=global.flyy-512+(512*(floor(global.roomnum / 6)));
}
if(global.segnum=4) {//move left
bdrz1.x=global.flyx-1024+(1024*(global.roomnum mod 6));//L
bdrz1.y=global.flyy+(512*(floor(global.roomnum / 6)));
bdrz2.x=global.flyx+1024+(1024*(global.roomnum mod 6));//R
bdrz2.y=global.flyy+(512*(floor(global.roomnum / 6)));
bdrz3.x=global.flyx+1024+(1024*(global.roomnum mod 6));//BR
bdrz3.y=global.flyy+512+(512*(floor(global.roomnum / 6)));
}
if(global.segnum=5) {//move top left
bdrz1.x=global.flyx-1024+(1024*(global.roomnum mod 6));//L
bdrz1.y=global.flyy+(512*(floor(global.roomnum / 6)));
bdrz2.x=global.flyx+(1024*(global.roomnum mod 6));//T
bdrz2.y=global.flyy-512+(512*(floor(global.roomnum / 6)));
bdrz3.x=global.flyx-1024+(1024*(global.roomnum mod 6));//TL
bdrz3.y=global.flyy-512+(512*(floor(global.roomnum / 6)));
}
if(global.segnum=6) {//move top right
bdrz1.x=global.flyx-1024+(1024*(global.roomnum mod 6));//R
bdrz1.y=global.flyy+(512*(floor(global.roomnum / 6)));
bdrz2.x=global.flyx+(1024*(global.roomnum mod 6));//T
bdrz2.y=global.flyy-512+(512*(floor(global.roomnum / 6)));
bdrz3.x=global.flyx+1024+(1024*(global.roomnum mod 6));//TR
bdrz3.y=global.flyy-512+(512*(floor(global.roomnum / 6)));
}
if(global.segnum=7) {//move bottom right
bdrz1.x=global.flyx+1024+(1024*(global.roomnum mod 6));//R
bdrz1.y=global.flyy+(512*(floor(global.roomnum / 6)));
bdrz2.x=global.flyx+(1024*(global.roomnum mod 6));//B
bdrz2.y=global.flyy+512+(512*(floor(global.roomnum / 6)));
bdrz3.x=global.flyx+1024+(1024*(global.roomnum mod 6));//BR
bdrz3.y=global.flyy+512+(512*(floor(global.roomnum / 6)));
}
if(global.segnum=8) {//move bottom left
bdrz1.x=global.flyx-1024+(1024*(global.roomnum mod 6));//L
bdrz1.y=global.flyy+(512*(floor(global.roomnum / 6)));
bdrz2.x=global.flyx+(1024*(global.roomnum mod 6));//B
bdrz2.y=global.flyy+512+(512*(floor(global.roomnum / 6)));
bdrz3.x=global.flyx-1024+(1024*(global.roomnum mod 6));//BL
bdrz3.y=global.flyy+512+(512*(floor(global.roomnum / 6)));
}
}
 
Last edited by a moderator:
F

FabioF

Guest
Is there any reason of your design choice? I'm very curious, usually moving around the main character backgrounds and lots of other "apparently" grounded objects is usually more complex. Anyway, it seems a lag in the check in the background's position checking, try to change the step event in begin step event.
 
W

Wraithious

Guest
Is there any reason of your design choice? I'm very curious, usually moving around the main character backgrounds and lots of other "apparently" grounded objects is usually more complex. Anyway, it seems a lag in the check in the background's position checking, try to change the step event in begin step event.
Thanks, I haven't tried using step events for this that weren't just the normal step, I'll try that out.

The reason I'm doing it this way is to give the player the illusion that they are playing the game inside a book.
I designed it to get around grounding objects on a moveable background being too complex, for example all I need to do is put this code in an object's step event and the objects appear to stay where they are:
Code:
if(id=global.getIDo[5]) {
if(global.roomnum=1 && global.areanum=0) {
x=((1483-(1024*(1 mod 6)))-(-1*(global.flyx)-(1024*(1 mod 6))));
y=((312-(512*(floor(1/6))))-(-1*(global.flyy)-(512*(floor(1/6)))));
}
}
The objects that move around on their own while the character (background) is also movimg were a little trickier, but the code is short enough:
Code:
if(global.st=0)
{ndualmovex = abs(global.flyx)-nadjx;
ndualmovey = abs(global.flyy)-nadjy;
x=nmyx-ndualmovex;
y=nmyy-ndualmovey;
nmyx=x;
nmyy=y;
nadjx=abs(global.flyx);
nadjy=abs(global.flyy);
}
EDIT: Actually thank you for asking that question, you just made me realized an error in the last code i just posted, where I was using the function abs() I need to change that to -1* (global.flyx) instead because if flyx or flyy happens to be positive instead of negative the object will not stay where it's supposed to be. As you see in the first code I posted I did account for that
 
Last edited by a moderator:
F

FabioF

Guest
if you need to place the player in the center of the viewport, you can set the hborder and vborder of the room view in the correct way, i usually set them to a value of 512 px
and obtain what you obtained with much less code.
 
Last edited by a moderator:
W

Wraithious

Guest
if you need to place the player in the center of the viewport, you can set the hborder and vborder of the room view in the correct way, i usually set them to a value of 512 px
and obtain what you obtained with much less code.
Yep that's defiantly true, when I started the project I didn't want to use views because outside of the book area where all the gameplay takes place is not supposed to move, so I coded the game the way I did because of that. Then someone pointed out on the android version that screen space is a valuable commodity so I used views in the android version when there was no menus being used to 'full screen' the game play. This project is pretty much complete (and huge now) so if I wanted to switch to views and draw the 'book frame' on the gui layer I would have to basically re do the entire game so at this point I don't want to do that, if I do another similar project in the future I will defiantly do it the view way. Also I thought it would be a nice challenge to do this game the way I have and I have learned a lot from it.
 
W

Wraithious

Guest
Thanks @FabioF your idea worked! I actually put my controller/player input code in the END STEP event and it works perfectly now so thank you very much!
 
W

Wraithious

Guest
Well I thought the issue was solved, but it is not, I would of updated this sooner but I was busy the last 2 days creating quests in the game but it's so aggravating trying to test the game only to have the character constantly getting thrown into areas he's not supposed to go in then mucking around to force him back where he's supposed to be. also before updating this I tried a few more things which all made absolutely no difference whatsoever, these things are
1. prevented character's image from changing if meeting border objects:
Code:
if(global.pause=0 && state !=0 && x>=0 && y>=0 && x<room_width && y<room_height && instance_exists(book) && global.stuck=-1)
{if(global.lt=1)//Left
{direction=180;global.trackdir=180;
if((state=1 && x > 512)||(state=2 && book.bndry=0)||(state=2 && book.bndry=1 && x>256))
{speed=gov;global.chaxy[0]-=gov;}if(sis!=8){sis=8;image_single=8;}
}
if(global.rt=1)//Right
{direction=0;global.trackdir=0;
if((state=1 && x < 512)||(state=2 && book.bndry=0)||(state=2 && book.bndry=1 && x<768))
{speed=gov;global.chaxy[0]+=gov;}if(sis!=0){sis=0;image_single=0;}
}
if(global.up=1)//Up
{direction=90;global.trackdir=90;
if((state=1 && y > 256)||(state=2 && book.bndry=0)||(state=2 && book.bndry=1 && y>128))
{speed=gov;global.chaxy[1]-=gov;}if(sis!=12){sis=12;image_single=12;}
}
if(global.dn=1)//Down
{direction=270;global.trackdir=270;
if((state=1 && y < 256)||(state=2 && book.bndry=0)||(state=2 && book.bndry=1 && y<384))
{speed=gov;global.chaxy[1]+=gov;}if(sis!=4){sis=4;image_single=4;}
}
if(global.st=1) //stop
{speed=0;
}
if(global.dr=1)//Down Right
{direction=315;global.trackdir=315;
if((state=1 && x < 512 && y < 256)||(state=2 && book.bndry=0)||(state=2 && book.bndry=1 && x<768 && y<384))
{speed=gov*0.707;global.chaxy[0]+=gov;global.chaxy[1]+=gov;}if(sis!=4){sis=4;image_single=4;}
}
if(global.dl=1)//Down Left
{direction=225;global.trackdir=225;
if((state=1 && x > 512 && y < 256)||(state=2 && book.bndry=0)||(state=2 && book.bndry=1 && x>256 && y<384))
{speed=gov*0.707;global.chaxy[0]-=gov;global.chaxy[1]-=gov;}if(sis!=8){sis=8;image_single=8;}
}
if(global.ur=1)//Up Right
{direction=45;global.trackdir=45;
if((state=1 && x < 512 && y > 256)||(state=2 && book.bndry=0)||(state=2 && book.bndry=1 && x<768 && y>128))
{speed=gov*0.707;global.chaxy[0]+=gov;global.chaxy[1]-=gov;}if(sis!=0){sis=0;image_single=0;}
}
if(global.ul=1)//Up left
{direction=135;global.trackdir=135;
if((state=1 && x > 512 && y > 256)||(state=2 && book.bndry=0)||(state=2 && book.bndry=1 && x>256 && y>128))
{speed=gov*0.707;global.chaxy[0]-=gov;global.chaxy[0]-=gov;}if(sis!=12){sis=12;image_single=12;}
}
if(global.st !=1)//animate character
{if(cananic=1){image_single+=1;if image_single>sis+3 image_single=sis;
ratio=ceil(10/gov)+2;alarm[0]=ratio;
cananic=0;}
}
}
}
}
2. moved seperate collision calls out of the collision event and into the step event:
Code:
//bounce on borders
if( place_meeting(x,y,bdrz0) || place_meeting(x,y,bdrz1) || place_meeting(x,y,bdrz2) || place_meeting(x,y,bdrz3)) {
global.stuck=1;
global.st=1;global.lt=0;global.rt=0;global.up=0;global.dn=0;global.dl=0;global.ul=0;global.ur=0;global.dr=0;
if(global.lastdir=4)
{global.flyx-=gov+1;}
if(global.lastdir=0)
{global.flyx+=gov+1;}
if(global.lastdir=6)
{global.flyy-=gov+1;}
if(global.lastdir=2)
{global.flyy+=gov+1;}
if(global.lastdir=1)
{global.flyx+=(gov+1)*0.707;
global.flyy+=(gov+1)*0.707;}
if(global.lastdir=3)
{global.flyx-=(gov+1)*0.707;
global.flyy+=(gov+1)*0.707;}
if(global.lastdir=7)
{global.flyx+=(gov+1)*0.707;
global.flyy-=(gov+1)*0.707;}
if(global.lastdir=5)
{global.flyx-=(gov+1)*0.707;
global.flyy-=(gov+1)*0.707;}
BorderPosition(global.areanum,global.lastseg,global.vehicle);
global.chaxy[0]=global.flyx+256;global.chaxy[1]=global.flyy+128;
alarm[3]=gov+1;
}
if( !place_meeting(x,y,objs) && global.stuck=1){global.stuck=-1;}
3. added alarm to wait for 1 step longer than the amount of pixels my character can move in one step (note the last statement in above code that calls the alarm) :
Code:
global.stuck=-1;
4. tried putting the controller codes in the begin step, step and end step, STILL NO DIFFERENCE AT ALL
5. eliminated calls to the BoarderPosition script in collision events and only call thie BorderPosition script when changing quadrants in a room, and unrestricted the calls to move the borders in the object that moves the borders so that only 1 object is controlling their movement, NO DIFFERENCE, STILL BROKEN
6. I know scripts can be tricky because other events can sometimes run while the script is doing stuff, so I protected my script calls in the movement objects like so:
Code:
global.stuck=1;BorderPosition(global.areanum,4,global.vehicle);global.stuck=-1;
STILL EXACT SAME PROBLEM!
7. Moved all collision events to each border object and all other objects that my character colides with..... STILL NOT WORKING, EXACT SAME PROBLEM
8. Modified my characters collision mask to the elipse setting.... STILL THE EXACT SAME PROBLEM!!!

So I have a question, Is there a way to find the x and y point of the collision? (I'm using precice collisions in my player and border sprites) if so I only need to use point direction to get the direction, and move opposite of that direction, then when theres no collision I can then set a variable to true to again check for the collision point if there is another collision. I looked all through the manual but there is no collision_at_x and collision_at_y type functions. is there any way I could make a script to do this without having to use draw_get_pixel in a circle around my character? it could be done that way since my border objects use specific colored lines but that would be slooowwww. But the thing is tho that I did find a way around that issue!!! I specifically set a variable that determines the direction of travel in the directional controller step event, AND I set it so that if there was a collision this variable would not change untill there was no collision and that still doesn't work so scratch that idea :glassbreak:

So what is going on here???? why is it that no matter what I do the same problem happens the exact same way? it doesn't make any sense whatsoever.......................................
 
Last edited by a moderator:
F

FabioF

Guest
The following code, must be in the begin step, not the whole collision system!

Wraithious said:
Code:
if !place_meeting(x,y,bdrz0) && !place_meeting(x,y,bdrz1) && !place_meeting(x,y,bdrz2) && !place_meeting(x,y,bdrz3) && !place_meeting(x,y,objs)
global.stuck=-1;
Begin step execute all the code that must be executed before the step event, so if you know how place_meeting works, you should know that all the "meeting" group functions before a collision, virtually simulate a movement of n steps to find a collision, if they find it, the instance that is executing, come back and return a position (position_meeting) or an instance id (place_meeting). So because you have a lag in the collision check you must put the position checking code in the begin step, then in the step event add every code you need to execute.
According with your video, its clear that the player "bounce" against the rocks, the lag in the collision check is often coupled with that behaviour.
Another thing you can try is to double the thickness of the red line internally to the shape, try to set it to 16px. In this way when the code checks for a collision, it is easier find it.
 
W

Wraithious

Guest
The following code, must be in the begin step, not the whole collision system!



Begin step execute all the code that must be executed before the step event, so if you know how place_meeting works, you should know that all the "meeting" group functions before a collision, virtually simulate a movement of n steps to find a collision, if they find it, the instance that is executing, come back and return a position (position_meeting) or an instance id (place_meeting). So because you have a lag in the collision check you must put the position checking code in the begin step, then in the step event add every code you need to execute.
According with your video, its clear that the player "bounce" against the rocks, the lag in the collision check is often coupled with that behaviour.
Another thing you can try is to double the thickness of the red line internally to the shape, try to set it to 16px. In this way when the code checks for a collision, it is easier find it.
Thanks, I don't know if I stated this earlier but when global.stuck=-1 the character is not stuck, and when ity's 1 it is stuck. I've actually had that code in the step event all by it'self in 90% of my trial and error, but I had not tried putting only that in the begin step, I'll try it, if it doesn't work I'll also try thickening my background borders but that's gonna a long time to do as I have about 100 of them and they are 1024 x 512 in size, I might just use the glow effect in the sprite editor then import them to irfanview and destroy the gradient alpha to make them solid then re-import them to gamemaker. (so I'll be dealing with the sprites 300 times) it's really weird tho because it seems to only happen if I head towards a border then press another direction while the character is in contact with it, and I not only masked my sprite to an elipse I also disabled it from animating if global.stuck = 1.

Nope, that actually made it worse, now he gets stuck and stays stuck and doesn't move at all.
 
Last edited by a moderator:
T

tomsaram

Guest
I admit I don't have enough patience to read through the bulk of your code, but from what little I gathered I have two advices:

1. Use the direction of the wall to determine the direction of bounce back, instead of the direction of the player. This will make sure that the wall always push the player to the outside. To also include diagonal bouncing, you can use something like this pseudocode:
Code:
if (collision with wall to the left) {
    if (player is facing lu || u || ru) bounce to down right;
    else if(player is facing ld || d || rd) bounce to up right;
    else bounce to right;
}
2. Whole number is your friend. When you move things around it would be beneficial to always do this (also pseudocode):
Code:
x += xSpeed + xFrac;
xFrac = frac(x);
x -= xFrac;

//also do the same thing for y
This would always store the fraction part of x in xFrac, so that you always deal with whole numbers in collisions and drawing.
 
W

Wraithious

Guest
x += xSpeed + xFrac;
xFrac = frac(x);
x -= xFrac;

//also do the same thing for y
This would always store the fraction part of x in xFrac, so that you always deal with whole numbers in collisions and drawing.
thanks, the defractioning method I will try, your first option won't work because the border object's sprite is the same size as my room and the player is allways 'inside' this object and bounces off lines drawn in the border object's sprite.
 
T

tomsaram

Guest
thanks, the defractioning method I will try, your first option won't work because the border object's sprite is the same size as my room and the player is allways 'inside' this object and bounces off lines drawn in the border object's sprite.
By "the direction" of the border, what I actually mean is the "type" of the border. I think you have four types, which corresponds to four directions.

Also I don't think it is a very good idea to use a sprite as big as the room. Notice that 99% of the sprite is empty (transparent), so a lot of memory is wasted on those transparent pixels and depending on which platform you are on, this can lead to performance problems. I would suggest managing the position of your borders using an array or something.
 
W

Wraithious

Guest
By "the direction" of the border, what I actually mean is the "type" of the border. I think you have four types, which corresponds to four directions.

Also I don't think it is a very good idea to use a sprite as big as the room. Notice that 99% of the sprite is empty (transparent), so a lot of memory is wasted on those transparent pixels and depending on which platform you are on, this can lead to performance problems. I would suggest managing the position of your borders using an array or something.
No, I actually have 4 border sprites because in my game, say if you are in the top left corner of the 'room' I am drawing 4 backgrounds, the one for the room you are in, the one for the room above that, the one for the room to the left of you, and finally the room to the left and above you, so the background borders are for each of those cases, and if only one background is being drawn (player is fully in the room) only object bdrz0 has a border sprite and the other bdrz* objects get assigned a blank 32x32 sprite. So at all times all 4 border objects still have to move to the exact point where the backgrounds are/would be being drawn.

And yes I definitely am positioning my borders with arrays, AND drawing the backgrounds according to arrays as well. I know you said you didn't read my whole post but I posted the code on how I'm moving the border objects, but here I'll post my draw code that draws my backgrounds relative to positions global.flyx and global.flyy:
Code:
///draw backgrounds
if(room=room1){
draw_set_alpha(global.daylight);
if global.segnum=1 && check_boundry(0,global.roomnum - 6)=1 draw_background(global.rbk[global.areanum,(global.roomnum - 6)],
(global.flyx+(1024*(global.roomnum mod 6))),(global.flyy-512+(512*(floor(global.roomnum / 6)))));//draw top
if global.segnum=3 && check_boundry(3,global.roomnum + 1)=1 draw_background(global.rbk[global.areanum,(global.roomnum + 1)],
(global.flyx+1024+(1024*(global.roomnum mod 6))),(global.flyy+(512*(floor(global.roomnum / 6)))));//draw right
if global.segnum=4 && check_boundry(2,global.roomnum - 1)=1 draw_background(global.rbk[global.areanum,(global.roomnum - 1)],
(global.flyx-1024+(1024*(global.roomnum mod 6))),(global.flyy+(512*(floor(global.roomnum / 6)))));//draw left
if global.segnum=2 && check_boundry(1,global.roomnum + 6)=1 draw_background(global.rbk[global.areanum,(global.roomnum + 6)],
(global.flyx+(1024*(global.roomnum mod 6))),(global.flyy+512+(512*(floor(global.roomnum / 6)))));//draw bottom
if(global.segnum=5)
{if check_boundry(4,global.roomnum - 7)=1 draw_background(global.rbk[global.areanum,(global.roomnum - 7)],//left top
(global.flyx-1024+(1024*(global.roomnum mod 6))),(global.flyy-512+(512*(floor(global.roomnum / 6)))));
if check_boundry(0,global.roomnum - 6)=1 draw_background(global.rbk[global.areanum,(global.roomnum - 6)],//top
(global.flyx+(1024*(global.roomnum mod 6))),(global.flyy-512+(512*(floor(global.roomnum / 6)))));
if check_boundry(2,global.roomnum - 1)=1 draw_background(global.rbk[global.areanum,(global.roomnum - 1)],//left
(global.flyx-1024+(1024*(global.roomnum mod 6))),(global.flyy+(512*(floor(global.roomnum / 6)))));}
if(global.segnum=6)
{if check_boundry(5,global.roomnum - 5)=1 draw_background(global.rbk[global.areanum,(global.roomnum - 5)],//right top
(global.flyx+1024+(1024*(global.roomnum mod 6))),(global.flyy-512+(512*(floor(global.roomnum / 6)))));
if check_boundry(0,global.roomnum - 6)=1 draw_background(global.rbk[global.areanum,(global.roomnum - 6)],//top
(global.flyx+(1024*(global.roomnum mod 6))),(global.flyy-512+(512*(floor(global.roomnum / 6)))));
if check_boundry(3,global.roomnum + 1)=1 draw_background(global.rbk[global.areanum,(global.roomnum + 1)],//right
(global.flyx+1024+(1024*(global.roomnum mod 6))),(global.flyy+(512*(floor(global.roomnum / 6)))));}
if(global.segnum=7)
{if check_boundry(3,global.roomnum + 1)=1 draw_background(global.rbk[global.areanum,(global.roomnum + 1)],//right
(global.flyx+1024+(1024*(global.roomnum mod 6))),(global.flyy+(512*(floor(global.roomnum / 6)))));
if check_boundry(6,global.roomnum + 7)=1 draw_background(global.rbk[global.areanum,(global.roomnum + 7)],//right bottom
(global.flyx+1024+(1024*(global.roomnum mod 6))),(global.flyy+512+(512*(floor(global.roomnum / 6)))));
if check_boundry(1,global.roomnum + 6)=1 draw_background(global.rbk[global.areanum,(global.roomnum + 6)],//bottom
(global.flyx+(1024*(global.roomnum mod 6))),(global.flyy+512+(512*(floor(global.roomnum / 6)))));}
if(global.segnum=8)
{if check_boundry(2,global.roomnum - 1)=1 draw_background(global.rbk[global.areanum,(global.roomnum - 1)],//left
(global.flyx-1024+(1024*(global.roomnum mod 6))),(global.flyy+(512*(floor(global.roomnum / 6)))));
if check_boundry(1,global.roomnum + 5)=1 draw_background(global.rbk[global.areanum,(global.roomnum + 5)],//left bottom
(global.flyx-1024+(1024*(global.roomnum mod 6))),(global.flyy+512+(512*(floor(global.roomnum / 6)))));
if check_boundry(1,global.roomnum + 6)=1 draw_background(global.rbk[global.areanum,(global.roomnum + 6)],//bottom
(global.flyx+(1024*(global.roomnum mod 6))),(global.flyy+512+(512*(floor(global.roomnum / 6)))));}
draw_background(global.rbk[global.areanum,global.roomnum],(global.flyx+(1024*(global.roomnum mod 6))),//ALLWAYS Draw active room background
(global.flyy+(512*(floor(global.roomnum / 6)))));
draw_set_alpha(1);
}
And here is the script that determines what those background images are (note this entire system is based on 1 and 2d arrays weather looped or hard coded when need be):
Code:
//6x6 matrix world areas + transition backgrounds for each area entrances
if(argument0=0)//overworld from top left to bottom right
{global.rbk[0,0]=bkg0;global.rbk[0,1]=bkg1;global.rbk[0,2]=bkg2;global.rbk[0,3]=bkg3;global.rbk[0,4]=bkg4;global.rbk[0,5]=bkg5;
global.rbk[0,6]=bkg6;global.rbk[0,7]=bkg7;global.rbk[0,8]=bkg8;global.rbk[0,9]=bkg9;global.rbk[0,10]=bkg10;global.rbk[0,11]=bkg11;
global.rbk[0,12]=bkg12;global.rbk[0,13]=bkg13;global.rbk[0,14]=bkg14;global.rbk[0,15]=bkg15;global.rbk[0,16]=bkg16;global.rbk[0,17]=bkg17;
global.rbk[0,18]=bkg18;global.rbk[0,19]=bkg19;global.rbk[0,20]=bkg20;global.rbk[0,21]=bkg21;global.rbk[0,22]=bkg22;global.rbk[0,23]=bkg23;
global.rbk[0,24]=bkg24;global.rbk[0,25]=bkg25;global.rbk[0,26]=bkg26;global.rbk[0,27]=bkg27;global.rbk[0,28]=bkg28;global.rbk[0,29]=bkg29;
global.rbk[0,30]=bkg30;global.rbk[0,31]=bkg31;global.rbk[0,32]=bkg32;global.rbk[0,33]=bkg33;global.rbk[0,34]=bkg34;global.rbk[0,35]=bkg35;
}
if(argument0=1)//towns - start town, town1 and town2
{var deflt = bkgtdw;
if(global.areatype[1]=7)
{deflt=bkgtdd;global.rbk[1,7]=bkgt0;global.rbk[1,8]=bkgtdd;global.rbk[1,9]=bkgtdd;global.rbk[1,10]=bkgtdd;global.rbk[1,13]=bkgtdd;global.rbk[1,14]=bkgtdd;}
if(global.areatype[1]=8)
{deflt=bkgtdm;global.rbk[1,8]=bkgt1;global.rbk[1,7]=bkgtdm;global.rbk[1,9]=bkgtdm;global.rbk[1,10]=bkgtdm;global.rbk[1,13]=bkgtdm;global.rbk[1,14]=bkgtdm;}
if(global.areatype[1]=9)
{deflt=bkgtdw;global.rbk[1,9]=bkgt2;global.rbk[1,7]=bkgtdw;global.rbk[1,8]=bkgtdw;global.rbk[1,10]=bkgtdw;global.rbk[1,13]=bkgtdw;global.rbk[1,14]=bkgtdw;}
if(global.areatype[1]=10)
{deflt=bkgtdr;global.rbk[1,10]=bkgt3;global.rbk[1,7]=bkgtdr;global.rbk[1,8]=bkgtdr;global.rbk[1,9]=bkgtdr;global.rbk[1,13]=bkgtdr;global.rbk[1,14]=bkgtdr;}
if(global.areatype[1]=13)
{deflt=bkgtdf;global.rbk[1,13]=bkgt4;global.rbk[1,7]=bkgtdf;global.rbk[1,8]=bkgtdf;global.rbk[1,9]=bkgtdf;global.rbk[1,10]=bkgtdf;global.rbk[1,14]=bkgtdf;}
if(global.areatype[1]=14)
{deflt=bkg22;global.rbk[1,14]=bkgt5;global.rbk[1,7]=bkg22;global.rbk[1,8]=bkg22;global.rbk[1,9]=bkg22;global.rbk[1,10]=bkg22;global.rbk[1,13]=bkg22;}
global.rbk[1,0]=deflt;global.rbk[1,1]=deflt;global.rbk[1,2]=deflt;global.rbk[1,3]=deflt; global.rbk[1,4]=deflt;global.rbk[1,5]=deflt;
global.rbk[1,6]=deflt;global.rbk[1,11]=deflt;global.rbk[1,12]=deflt;global.rbk[1,15]=deflt;global.rbk[1,16]=deflt;global.rbk[1,17]=deflt;
global.rbk[1,18]=deflt;global.rbk[1,19]=deflt;global.rbk[1,20]=deflt;global.rbk[1,21]=deflt;global.rbk[1,22]=deflt;global.rbk[1,23]=deflt;
global.rbk[1,24]=deflt;global.rbk[1,25]=deflt;global.rbk[1,26]=deflt;global.rbk[1,27]=deflt;global.rbk[1,28]=deflt;global.rbk[1,29]=deflt;
global.rbk[1,30]=deflt;global.rbk[1,31]=deflt;global.rbk[1,32]=deflt;global.rbk[1,33]=deflt;global.rbk[1,34]=deflt;global.rbk[1,35]=deflt;
}
if(argument0=2)//houses - 7=house, 8=store, 9=store2, 10=store3, 13=library, 14=hospital lobby, 15=hospital room, 16=shrine, 19=inn
{var deflt = bkgtdw;
if global.areatype[1]=7 deflt=bkgtdd;if global.areatype[1]=8 deflt=bkgtdm;if global.areatype[1]=9 deflt=bkgtdw;
if global.areatype[1]=10 deflt=bkgtdr;if global.areatype[1]=13 deflt=bkgtdf;if global.areatype[1]=14 deflt=bkg22;
if(global.areatype[2]=16){if global.roomnum=0 deflt=bkgtdd;if global.roomnum=12 deflt=bkgtdr;if global.roomnum=23 deflt=bkg22;
if global.roomnum=32 deflt=bkgtdw;}
if(global.areatype[2]=7){global.rbk[2,7]=bkgh0;global.rbk[2,8]=deflt;global.rbk[2,9]=deflt;global.rbk[2,10]=deflt;global.rbk[2,13]=deflt;global.rbk[2,14]=deflt;
global.rbk[2,15]=deflt;global.rbk[2,16]=deflt;}
if(global.areatype[2]=8){global.rbk[2,8]=bkgh1;global.rbk[2,7]=deflt;global.rbk[2,9]=deflt;global.rbk[2,10]=deflt;global.rbk[2,13]=deflt;global.rbk[2,14]=deflt;
global.rbk[2,15]=deflt;global.rbk[2,16]=deflt;}
if(global.areatype[2]=9){global.rbk[2,9]=bkgh2;global.rbk[2,7]=deflt;global.rbk[2,8]=deflt;global.rbk[2,10]=deflt;global.rbk[2,13]=deflt;global.rbk[2,14]=deflt;
global.rbk[2,15]=deflt;global.rbk[2,16]=deflt;}
if(global.areatype[2]=10){global.rbk[2,10]=bkgh3;global.rbk[2,7]=deflt;global.rbk[2,8]=deflt;global.rbk[2,9]=deflt;global.rbk[2,13]=deflt;global.rbk[2,14]=deflt;
global.rbk[2,15]=deflt;global.rbk[2,16]=deflt;}
if(global.areatype[2]=13){if global.osys=0 global.rbk[2,13]=bkgh4;if global.osys=1 global.rbk[2,13]=bkgh4b;global.rbk[2,7]=deflt;global.rbk[2,8]=deflt;
global.rbk[2,9]=deflt;global.rbk[2,10]=deflt;global.rbk[2,14]=deflt;global.rbk[2,15]=deflt;global.rbk[2,16]=deflt;global.rbk[2,19]=deflt;global.rbk[2,20]=deflt;
global.rbk[2,21]=deflt;global.rbk[2,22]=deflt;}
if(global.areatype[2]=14){global.rbk[2,14]=bkgh5;global.rbk[2,7]=deflt;global.rbk[2,8]=deflt;global.rbk[2,9]=deflt;global.rbk[2,10]=deflt;global.rbk[2,13]=deflt;
global.rbk[2,15]=deflt;global.rbk[2,16]=deflt;global.rbk[2,19]=deflt;global.rbk[2,20]=deflt;global.rbk[2,21]=deflt;global.rbk[2,22]=deflt;}
if(global.areatype[2]=15){global.rbk[2,15]=bkgh6;global.rbk[2,7]=bkgh6;global.rbk[2,8]=bkgh6;global.rbk[2,9]=bkgh6;global.rbk[2,10]=bkgh6;global.rbk[2,13]=bkgc6;
global.rbk[2,14]=bkgh6;global.rbk[2,16]=bkgh6;global.rbk[2,19]=bkgh6;global.rbk[2,20]=bkgh6;global.rbk[2,21]=bkgh5;global.rbk[2,22]=bkgh6;}
if(global.areatype[2]=16){global.rbk[2,16]=bkgh7;global.rbk[2,7]=deflt;global.rbk[2,8]=deflt;global.rbk[2,9]=deflt;global.rbk[2,10]=deflt;global.rbk[2,13]=deflt;
global.rbk[2,14]=deflt;global.rbk[2,15]=deflt;global.rbk[2,19]=deflt;global.rbk[2,20]=deflt;global.rbk[2,21]=deflt;global.rbk[2,22]=deflt;}
if(global.areatype[2]=19){global.rbk[2,19]=bkgh8;global.rbk[2,13]=deflt;global.rbk[2,14]=deflt;global.rbk[2,15]=deflt;global.rbk[2,16]=deflt;global.rbk[2,20]=deflt;
global.rbk[2,21]=deflt;global.rbk[2,22]=deflt;global.rbk[2,25]=deflt;global.rbk[2,26]=deflt;global.rbk[2,27]=deflt;global.rbk[2,28]=deflt;}
global.rbk[2,0]=deflt;global.rbk[2,1]=deflt;global.rbk[2,2]=deflt;global.rbk[2,3]=deflt; global.rbk[2,4]=deflt;global.rbk[2,5]=deflt;global.rbk[2,6]=deflt;
global.rbk[2,11]=deflt;global.rbk[2,12]=deflt;global.rbk[2,17]=deflt;global.rbk[2,18]=deflt;global.rbk[2,23]=deflt;global.rbk[2,24]=deflt;global.rbk[2,29]=deflt;
global.rbk[2,30]=deflt;global.rbk[2,31]=deflt;global.rbk[2,32]=deflt;global.rbk[2,33]=deflt;global.rbk[2,34]=deflt;global.rbk[2,35]=deflt;
}
if(argument0=3)//fight rooms that match terrain type
{var deflt = bkgtdr;
if(global.areanum=0)
{if global.roomnum<6 deflt=bkgf1;
if (global.roomnum>5 && global.roomnum<10 && global.roomnum !=8)||(global.roomnum=14 || global.roomnum=25)deflt=bkgtdm;
if global.roomnum>30 || global.roomnum=6 || global.roomnum=8 || global.roomnum=29 deflt=bkgf0;
if (global.roomnum>10 && global.roomnum<17)||(global.roomnum>18 && global.roomnum<22)||(global.roomnum>26 && global.roomnum<29) deflt=bkgtdr;
if global.roomnum=26 deflt=bkgtdf;
if global.roomnum=10 || global.roomnum=17 || global.roomnum=22 || global.roomnum=23 deflt=bkg22;}
if(global.areanum=4)
{if global.cave = 2 || global.cave=4 || global.cave=7 || global.cave=8 || global.cave=12 deflt=bkgc14;
if global.cave = 1 || global.cave=3 || global.cave=5 || global.cave=6 || global.cave=9 || global.cave=11 deflt=bkgcr14;
if global.cave = 10 || global.cave=13 deflt=bkgcs14;}
global.rbk[3,0]=deflt;global.rbk[3,1]=deflt;global.rbk[3,2]=deflt;global.rbk[3,3]=deflt;global.rbk[3,4]=deflt;global.rbk[3,5]=deflt;
global.rbk[3,6]=deflt;global.rbk[3,7]=deflt;global.rbk[3,8]=deflt;global.rbk[3,9]=deflt; global.rbk[3,10]=deflt;global.rbk[3,11]=deflt;
global.rbk[3,12]=deflt;global.rbk[3,13]=deflt;global.rbk[3,14]=deflt;global.rbk[3,15]=deflt;global.rbk[3,16]=deflt;global.rbk[3,17]=deflt;
global.rbk[3,18]=deflt;global.rbk[3,19]=deflt;global.rbk[3,20]=deflt;global.rbk[3,21]=deflt;global.rbk[3,22]=deflt;global.rbk[3,23]=deflt;
global.rbk[3,24]=deflt;global.rbk[3,25]=deflt;global.rbk[3,26]=deflt;global.rbk[3,27]=deflt;global.rbk[3,28]=deflt;global.rbk[3,29]=deflt;
global.rbk[3,30]=deflt;global.rbk[3,31]=deflt;global.rbk[3,32]=deflt;global.rbk[3,33]=deflt;global.rbk[3,34]=deflt;global.rbk[3,35]=deflt;
}
if(argument0=4)//Caves - background images 0-15: ld,lu,rd,ru,lr,ud,l,u,r,d,lud,lru,rdu,lrd,blank,lrud
{if(global.areatype[4]=16 && global.cave=1)
{global.rbk[4,0]=bkgcr14;global.rbk[4,1]=bkgcr14;global.rbk[4,2]=bkgcr14;global.rbk[4,3]=bkgcr14;global.rbk[4,4]=bkgcr14;global.rbk[4,5]=bkgcr14;
global.rbk[4,6]=bkgcr14;global.rbk[4,7]=bkgcr2;global.rbk[4,8]=bkgcr4;global.rbk[4,9]=bkgcr0; global.rbk[4,10]=bkgcr14;global.rbk[4,11]=bkgcr14;
global.rbk[4,12]=bkgcr14;global.rbk[4,13]=bkgcr12;global.rbk[4,14]=bkgcr6;global.rbk[4,15]=bkgcr3;global.rbk[4,16]=bkgcr4;global.rbk[4,17]=bkgcr14;
global.rbk[4,18]=bkgcr14;global.rbk[4,19]=bkgcr5;global.rbk[4,20]=bkgcr9;global.rbk[4,21]=bkgcr14;global.rbk[4,22]=bkgcr14;global.rbk[4,23]=bkgcr14;
global.rbk[4,24]=bkgcr14;global.rbk[4,25]=bkgcr3;global.rbk[4,26]=bkgcr11;global.rbk[4,27]=bkgcr6;global.rbk[4,28]=bkgcr14;global.rbk[4,29]=bkgcr14;
global.rbk[4,30]=bkgcr14;global.rbk[4,31]=bkgcr14;global.rbk[4,32]=bkgcr14;global.rbk[4,33]=bkgcr14;global.rbk[4,34]=bkgcr14;global.rbk[4,35]=bkgcr14;
global.ccbg[0]=14;global.ccbg[1]=14;global.ccbg[2]=14;global.ccbg[3]=14;global.ccbg[4]=14;global.ccbg[5]=14;
global.ccbg[6]=14;global.ccbg[7]=2;global.ccbg[8]=4;global.ccbg[9]=0;global.ccbg[10]=14;global.ccbg[11]=14;
global.ccbg[12]=14;global.ccbg[13]=12;global.ccbg[14]=6;global.ccbg[15]=3;global.ccbg[16]=4;global.ccbg[17]=14;
global.ccbg[18]=14;global.ccbg[19]=5;global.ccbg[20]=9;global.ccbg[21]=14;global.ccbg[22]=14;global.ccbg[23]=14;
global.ccbg[24]=14;global.ccbg[25]=3;global.ccbg[26]=11;global.ccbg[27]=6;global.ccbg[28]=14;global.ccbg[29]=14;
global.ccbg[30]=14;global.ccbg[31]=14;global.ccbg[32]=14;global.ccbg[33]=14;global.ccbg[34]=14;global.ccbg[35]=14;
}
if(global.areatype[4]=28 && global.cave=2)
{global.rbk[4,0]=bkgc14;global.rbk[4,1]=bkgc14;global.rbk[4,2]=bkgc14;global.rbk[4,3]=bkgc14;global.rbk[4,4]=bkgc14;global.rbk[4,5]=bkgc14;
global.rbk[4,6]=bkgc14;global.rbk[4,7]=bkgc8;global.rbk[4,8]=bkgc0;global.rbk[4,9]=bkgc2; global.rbk[4,10]=bkgc0;global.rbk[4,11]=bkgc14;
global.rbk[4,12]=bkgc14;global.rbk[4,13]=bkgc2;global.rbk[4,14]=bkgc1;global.rbk[4,15]=bkgc5;global.rbk[4,16]=bkgc5;global.rbk[4,17]=bkgc14;
global.rbk[4,18]=bkgc14;global.rbk[4,19]=bkgc3;global.rbk[4,20]=bkgc13;global.rbk[4,21]=bkgc1;global.rbk[4,22]=bkgc5;global.rbk[4,23]=bkgc14;
global.rbk[4,24]=bkgc14;global.rbk[4,25]=bkgc8;global.rbk[4,26]=bkgc11;global.rbk[4,27]=bkgc6;global.rbk[4,28]=bkgc5;global.rbk[4,29]=bkgc14;
global.rbk[4,30]=bkgc14;global.rbk[4,31]=bkgc14;global.rbk[4,32]=bkgc14;global.rbk[4,33]=bkgc14;global.rbk[4,34]=bkgc14;global.rbk[4,35]=bkgc14;
global.ccbg[0]=14;global.ccbg[1]=14;global.ccbg[2]=14;global.ccbg[3]=14;global.ccbg[4]=14;global.ccbg[5]=14;
global.ccbg[6]=14;global.ccbg[7]=8;global.ccbg[8]=0;global.ccbg[9]=2;global.ccbg[10]=0;global.ccbg[11]=14;
global.ccbg[12]=14;global.ccbg[13]=2;global.ccbg[14]=1;global.ccbg[15]=5;global.ccbg[16]=5;global.ccbg[17]=14;
global.ccbg[18]=14;global.ccbg[19]=3;global.ccbg[20]=13;global.ccbg[21]=1;global.ccbg[22]=5;global.ccbg[23]=14;
global.ccbg[24]=14;global.ccbg[25]=8;global.ccbg[26]=11;global.ccbg[27]=6;global.ccbg[28]=5;global.ccbg[29]=14;
global.ccbg[30]=14;global.ccbg[31]=14;global.ccbg[32]=14;global.ccbg[33]=14;global.ccbg[34]=14;global.ccbg[35]=14;
}
if(global.areatype[4]=8 && global.cave=3)
{global.rbk[4,0]=bkgcr14;global.rbk[4,1]=bkgcr14;global.rbk[4,2]=bkgcr14;global.rbk[4,3]=bkgcr14;global.rbk[4,4]=bkgcr14;global.rbk[4,5]=bkgcr14;
global.rbk[4,6]=bkgcr14;global.rbk[4,7]=bkgcr14;global.rbk[4,8]=bkgcr2;global.rbk[4,9]=bkgcr14; global.rbk[4,10]=bkgcr14;global.rbk[4,11]=bkgcr14;
global.rbk[4,12]=bkgcr14;global.rbk[4,13]=bkgcr8;global.rbk[4,14]=bkgcr10;global.rbk[4,15]=bkgcr14;global.rbk[4,16]=bkgcr9;global.rbk[4,17]=bkgcr14;
global.rbk[4,18]=bkgcr14;global.rbk[4,19]=bkgcr14;global.rbk[4,20]=bkgcr12;global.rbk[4,21]=bkgcr13;global.rbk[4,22]=bkgcr15;global.rbk[4,23]=bkgcr6;
global.rbk[4,24]=bkgcr14;global.rbk[4,25]=bkgcr8;global.rbk[4,26]=bkgcr1;global.rbk[4,27]=bkgcr12;global.rbk[4,28]=bkgcr10;global.rbk[4,29]=bkgcr14;
global.rbk[4,30]=bkgcr14;global.rbk[4,31]=bkgcr14;global.rbk[4,32]=bkgcr8;global.rbk[4,33]=bkgcr1;global.rbk[4,34]=bkgcr7;global.rbk[4,35]=bkgcr14;
global.ccbg[0]=14;global.ccbg[1]=14;global.ccbg[2]=14;global.ccbg[3]=14;global.ccbg[4]=14;global.ccbg[5]=14;
global.ccbg[6]=14;global.ccbg[7]=14;global.ccbg[8]=2;global.ccbg[9]=14;global.ccbg[10]=14;global.ccbg[11]=14;
global.ccbg[12]=14;global.ccbg[13]=8;global.ccbg[14]=10;global.ccbg[15]=14;global.ccbg[16]=9;global.ccbg[17]=14;
global.ccbg[18]=14;global.ccbg[19]=14;global.ccbg[20]=12;global.ccbg[21]=13;global.ccbg[22]=15;global.ccbg[23]=6;
global.ccbg[24]=14;global.ccbg[25]=8;global.ccbg[26]=1;global.ccbg[27]=12;global.ccbg[28]=10;global.ccbg[29]=14;
global.ccbg[30]=14;global.ccbg[31]=14;global.ccbg[32]=8;global.ccbg[33]=1;global.ccbg[34]=7;global.ccbg[35]=14;
}
if(global.areatype[4]=8 && global.cave=4)
{global.rbk[4,0]=bkgc14;global.rbk[4,1]=bkgc14;global.rbk[4,2]=bkgc2;global.rbk[4,3]=bkgc0;global.rbk[4,4]=bkgc14;global.rbk[4,5]=bkgc14;
global.rbk[4,6]=bkgc14;global.rbk[4,7]=bkgc14;global.rbk[4,8]=bkgc5;global.rbk[4,9]=bkgc5; global.rbk[4,10]=bkgc14;global.rbk[4,11]=bkgc14;
global.rbk[4,12]=bkgc14;global.rbk[4,13]=bkgc14;global.rbk[4,14]=bkgc14;global.rbk[4,15]=bkgc12;global.rbk[4,16]=bkgc6;global.rbk[4,17]=bkgc14;
global.rbk[4,18]=bkgc14;global.rbk[4,19]=bkgc14;global.rbk[4,20]=bkgc14;global.rbk[4,21]=bkgc5;global.rbk[4,22]=bkgc14;global.rbk[4,23]=bkgc14;
global.rbk[4,24]=bkgc14;global.rbk[4,25]=bkgc14;global.rbk[4,26]=bkgc8;global.rbk[4,27]=bkgc10;global.rbk[4,28]=bkgc14;global.rbk[4,29]=bkgc14;
global.rbk[4,30]=bkgc14;global.rbk[4,31]=bkgc14;global.rbk[4,32]=bkgc14;global.rbk[4,33]=bkgc7;global.rbk[4,34]=bkgc14;global.rbk[4,35]=bkgc14;
global.ccbg[0]=14;global.ccbg[1]=14;global.ccbg[2]=2;global.ccbg[3]=0;global.ccbg[4]=14;global.ccbg[5]=14;
global.ccbg[6]=14;global.ccbg[7]=14;global.ccbg[8]=5;global.ccbg[9]=5;global.ccbg[10]=14;global.ccbg[11]=14;
global.ccbg[12]=14;global.ccbg[13]=14;global.ccbg[14]=14;global.ccbg[15]=12;global.ccbg[16]=6;global.ccbg[17]=14;
global.ccbg[18]=14;global.ccbg[19]=14;global.ccbg[20]=14;global.ccbg[21]=5;global.ccbg[22]=14;global.ccbg[23]=14;
global.ccbg[24]=14;global.ccbg[25]=14;global.ccbg[26]=8;global.ccbg[27]=10;global.ccbg[28]=14;global.ccbg[29]=14;
global.ccbg[30]=14;global.ccbg[31]=14;global.ccbg[32]=14;global.ccbg[33]=7;global.ccbg[34]=14;global.ccbg[35]=14;
}
if((global.areatype[4]=10 || global.areatype[4]=27) && global.cave=5)
{global.rbk[4,0]=bkgcr14;global.rbk[4,1]=bkgcr14;global.rbk[4,2]=bkgcr14;global.rbk[4,3]=bkgcr14;global.rbk[4,4]=bkgcr14;global.rbk[4,5]=bkgcr14;
global.rbk[4,6]=bkgcr14;global.rbk[4,7]=bkgcr14;global.rbk[4,8]=bkgcr14;global.rbk[4,9]=bkgcr2; global.rbk[4,10]=bkgcr4;global.rbk[4,11]=bkgcr14;
global.rbk[4,12]=bkgcr14;global.rbk[4,13]=bkgcr14;global.rbk[4,14]=bkgcr14;global.rbk[4,15]=bkgcr12;global.rbk[4,16]=bkgcr0;global.rbk[4,17]=bkgcr14;
global.rbk[4,18]=bkgcr14;global.rbk[4,19]=bkgcr14;global.rbk[4,20]=bkgcr14;global.rbk[4,21]=bkgcr5;global.rbk[4,22]=bkgcr7;global.rbk[4,23]=bkgcr14;
global.rbk[4,24]=bkgcr14;global.rbk[4,25]=bkgcr14;global.rbk[4,26]=bkgcr14;global.rbk[4,27]=bkgcr5;global.rbk[4,28]=bkgcr14;global.rbk[4,29]=bkgcr14;
global.rbk[4,30]=bkgcr14;global.rbk[4,31]=bkgcr14;global.rbk[4,32]=bkgcr14;global.rbk[4,33]=bkgcr14;global.rbk[4,34]=bkgcr14;global.rbk[4,35]=bkgcr14;
global.ccbg[0]=14;global.ccbg[1]=14;global.ccbg[2]=14;global.ccbg[3]=14;global.ccbg[4]=14;global.ccbg[5]=14;
global.ccbg[6]=14;global.ccbg[7]=14;global.ccbg[8]=14;global.ccbg[9]=2;global.ccbg[10]=4;global.ccbg[11]=14;
global.ccbg[12]=14;global.ccbg[13]=14;global.ccbg[14]=14;global.ccbg[15]=12;global.ccbg[16]=0;global.ccbg[17]=14;
global.ccbg[18]=14;global.ccbg[19]=14;global.ccbg[20]=14;global.ccbg[21]=5;global.ccbg[22]=7;global.ccbg[23]=14;
global.ccbg[24]=14;global.ccbg[25]=14;global.ccbg[26]=14;global.ccbg[27]=5;global.ccbg[28]=14;global.ccbg[29]=14;
global.ccbg[30]=14;global.ccbg[31]=14;global.ccbg[32]=14;global.ccbg[33]=14;global.ccbg[34]=14;global.ccbg[35]=14;
}
if(global.areatype[4]=16 && global.cave=6)
{global.rbk[4,0]=bkgc14;global.rbk[4,1]=bkgc2;global.rbk[4,2]=bkgc4;global.rbk[4,3]=bkgc6;global.rbk[4,4]=bkgc14;global.rbk[4,5]=bkgc14;
global.rbk[4,6]=bkgc14;global.rbk[4,7]=bkgc3;global.rbk[4,8]=bkgc13;global.rbk[4,9]=bkgc4;global.rbk[4,10]=bkgc6;global.rbk[4,11]=bkgc14;
global.rbk[4,12]=bkgc14;global.rbk[4,13]=bkgc2;global.rbk[4,14]=bkgc15;global.rbk[4,15]=bkgcr4;global.rbk[4,16]=bkgcr4;global.rbk[4,17]=bkgc14;
global.rbk[4,18]=bkgc14;global.rbk[4,19]=bkgc5;global.rbk[4,20]=bkgc7;global.rbk[4,21]=bkgc14;global.rbk[4,22]=bkgc14;global.rbk[4,23]=bkgc14;
global.rbk[4,24]=bkgc2;global.rbk[4,25]=bkgc1;global.rbk[4,26]=bkgc14;global.rbk[4,27]=bkgc14;global.rbk[4,28]=bkgc14;global.rbk[4,29]=bkgc14;
global.rbk[4,30]=bkgc3;global.rbk[4,31]=bkgc4;global.rbk[4,32]=bkgc6;global.rbk[4,33]=bkgc14;global.rbk[4,34]=bkgc14;global.rbk[4,35]=bkgc14;
global.ccbg[0]=14;global.ccbg[1]=2;global.ccbg[2]=4;global.ccbg[3]=6;global.ccbg[4]=14;global.ccbg[5]=14;
global.ccbg[6]=14;global.ccbg[7]=3;global.ccbg[8]=13;global.ccbg[9]=4;global.ccbg[10]=6;global.ccbg[11]=14;
global.ccbg[12]=14;global.ccbg[13]=2;global.ccbg[14]=15;global.ccbg[15]=4;global.ccbg[16]=4;global.ccbg[17]=14;
global.ccbg[18]=14;global.ccbg[19]=5;global.ccbg[20]=7;global.ccbg[21]=14;global.ccbg[22]=14;global.ccbg[23]=14;
global.ccbg[24]=2;global.ccbg[25]=1;global.ccbg[26]=14;global.ccbg[27]=14;global.ccbg[28]=14;global.ccbg[29]=14;
global.ccbg[30]=3;global.ccbg[31]=4;global.ccbg[32]=6;global.ccbg[33]=14;global.ccbg[34]=14;global.ccbg[35]=14;
}
if(global.areatype[4]=20 && global.cave=7)
{global.rbk[4,0]=bkgc14;global.rbk[4,1]=bkgc14;global.rbk[4,2]=bkgc14;global.rbk[4,3]=bkgc14;global.rbk[4,4]=bkgc14;global.rbk[4,5]=bkgc14;
global.rbk[4,6]=bkgc14;global.rbk[4,7]=bkgc14;global.rbk[4,8]=bkgc14;global.rbk[4,9]=bkgc14;global.rbk[4,10]=bkgc14;global.rbk[4,11]=bkgc14;
global.rbk[4,12]=bkgc14;global.rbk[4,13]=bkgc14;global.rbk[4,14]=bkgc14;global.rbk[4,15]=bkgc14;global.rbk[4,16]=bkgc2;global.rbk[4,17]=bkgc0;
global.rbk[4,18]=bkgc2;global.rbk[4,19]=bkgc4;global.rbk[4,20]=bkgc13;global.rbk[4,21]=bkgc13;global.rbk[4,22]=bkgc1;global.rbk[4,23]=bkgc5;
global.rbk[4,24]=bkgc7;global.rbk[4,25]=bkgc14;global.rbk[4,26]=bkgc14;global.rbk[4,27]=bkgc7;global.rbk[4,28]=bkgc8;global.rbk[4,29]=bkgc10;
global.rbk[4,30]=bkgc14;global.rbk[4,31]=bkgc14;global.rbk[4,32]=bkgc14;global.rbk[4,33]=bkgc14;global.rbk[4,34]=bkgc8;global.rbk[4,35]=bkgc1;
global.ccbg[0]=14;global.ccbg[1]=14;global.ccbg[2]=14;global.ccbg[3]=14;global.ccbg[4]=14;global.ccbg[5]=14;
global.ccbg[6]=14;global.ccbg[7]=14;global.ccbg[8]=14;global.ccbg[9]=14;global.ccbg[10]=14;global.ccbg[11]=14;
global.ccbg[12]=14;global.ccbg[13]=14;global.ccbg[14]=14;global.ccbg[15]=14;global.ccbg[16]=2;global.ccbg[17]=0;
global.ccbg[18]=2;global.ccbg[19]=4;global.ccbg[20]=13;global.ccbg[21]=13;global.ccbg[22]=1;global.ccbg[23]=5;
global.ccbg[24]=7;global.ccbg[25]=14;global.ccbg[26]=14;global.ccbg[27]=7;global.ccbg[28]=8;global.ccbg[29]=10;
global.ccbg[30]=14;global.ccbg[31]=14;global.ccbg[32]=14;global.ccbg[33]=14;global.ccbg[34]=8;global.ccbg[35]=1;
}
if(global.areatype[4]=10 && global.cave=8)
{global.rbk[4,0]=bkgc14;global.rbk[4,1]=bkgc9;global.rbk[4,2]=bkgc9;global.rbk[4,3]=bkgc9;global.rbk[4,4]=bkgc14;global.rbk[4,5]=bkgc14;
global.rbk[4,6]=bkgc8;global.rbk[4,7]=bkgc11;global.rbk[4,8]=bkgc15;global.rbk[4,9]=bkgc11;global.rbk[4,10]=bkgc0;global.rbk[4,11]=bkgc14;
global.rbk[4,12]=bkgc14;global.rbk[4,13]=bkgc14;global.rbk[4,14]=bkgc5;global.rbk[4,15]=bkgc14;global.rbk[4,16]=bkgc14;global.rbk[4,17]=bkgc14;
global.rbk[4,18]=bkgc14;global.rbk[4,19]=bkgc14;global.rbk[4,20]=bkgc12;global.rbk[4,21]=bkgc0;global.rbk[4,22]=bkgc14;global.rbk[4,23]=bkgc14;
global.rbk[4,24]=bkgc14;global.rbk[4,25]=bkgc8;global.rbk[4,26]=bkgc1;global.rbk[4,27]=bkgc5;global.rbk[4,28]=bkgc14;global.rbk[4,29]=bkgc14;
global.rbk[4,30]=bkgc14;global.rbk[4,31]=bkgc14;global.rbk[4,32]=bkgc8;global.rbk[4,33]=bkgc1;global.rbk[4,34]=bkgc14;global.rbk[4,35]=bkgc14;
global.ccbg[0]=14;global.ccbg[1]=9;global.ccbg[2]=9;global.ccbg[3]=9;global.ccbg[4]=14;global.ccbg[5]=14;
global.ccbg[6]=8;global.ccbg[7]=11;global.ccbg[8]=15;global.ccbg[9]=11;global.ccbg[10]=0;global.ccbg[11]=14;
global.ccbg[12]=14;global.ccbg[13]=14;global.ccbg[14]=5;global.ccbg[15]=14;global.ccbg[16]=14;global.ccbg[17]=14;
global.ccbg[18]=14;global.ccbg[19]=14;global.ccbg[20]=12;global.ccbg[21]=0;global.ccbg[22]=14;global.ccbg[23]=14;
global.ccbg[24]=14;global.ccbg[25]=8;global.ccbg[26]=1;global.ccbg[27]=5;global.ccbg[28]=14;global.ccbg[29]=14;
global.ccbg[30]=14;global.ccbg[31]=14;global.ccbg[32]=8;global.ccbg[33]=1;global.ccbg[34]=14;global.ccbg[35]=14;
}
if((global.areatype[4]=8 || global.areatype[4]=10 || global.areatype[4]=13) && global.cave=9)
{global.rbk[4,0]=bkgcr14;global.rbk[4,1]=bkgcr14;global.rbk[4,2]=bkgcr14;global.rbk[4,3]=bkgcr14;global.rbk[4,4]=bkgcr14;global.rbk[4,5]=bkgcr14;
global.rbk[4,6]=bkgcr14;global.rbk[4,7]=bkgcr14;global.rbk[4,8]=bkgcr5;global.rbk[4,9]=bkgcr14;global.rbk[4,10]=bkgcr0;global.rbk[4,11]=bkgcr14;
global.rbk[4,12]=bkgcr14;global.rbk[4,13]=bkgcr5;global.rbk[4,14]=bkgcr5;global.rbk[4,15]=bkgcr14;global.rbk[4,16]=bkgcr5;global.rbk[4,17]=bkgcr14;
global.rbk[4,18]=bkgcr14;global.rbk[4,19]=bkgcr5;global.rbk[4,20]=bkgcr12;global.rbk[4,21]=bkgcr6;global.rbk[4,22]=bkgcr12;global.rbk[4,23]=bkgcr6;
global.rbk[4,24]=bkgcr14;global.rbk[4,25]=bkgcr5;global.rbk[4,26]=bkgcr3;global.rbk[4,27]=bkgcr6;global.rbk[4,28]=bkgcr5;global.rbk[4,29]=bkgcr14;
global.rbk[4,30]=bkgcr14;global.rbk[4,31]=bkgcr3;global.rbk[4,32]=bkgcr4;global.rbk[4,33]=bkgcr4;global.rbk[4,34]=bkgcr1;global.rbk[4,35]=bkgcr14;
global.ccbg[0]=14;global.ccbg[1]=14;global.ccbg[2]=14;global.ccbg[3]=14;global.ccbg[4]=14;global.ccbg[5]=14;
global.ccbg[6]=14;global.ccbg[7]=14;global.ccbg[8]=5;global.ccbg[9]=14;global.ccbg[10]=0;global.ccbg[11]=14;
global.ccbg[12]=14;global.ccbg[13]=5;global.ccbg[14]=5;global.ccbg[15]=14;global.ccbg[16]=5;global.ccbg[17]=14;
global.ccbg[18]=14;global.ccbg[19]=5;global.ccbg[20]=12;global.ccbg[21]=6;global.ccbg[22]=12;global.ccbg[23]=6;
global.ccbg[24]=14;global.ccbg[25]=5;global.ccbg[26]=3;global.ccbg[27]=6;global.ccbg[28]=5;global.ccbg[29]=14;
global.ccbg[30]=14;global.ccbg[31]=3;global.ccbg[32]=4;global.ccbg[33]=4;global.ccbg[34]=1;global.ccbg[35]=14;
}
if((global.areatype[4]=10 || global.areatype[4]=22) && (global.cave>9 && global.cave<13))
{global.rbk[4,0]=bkgcs9;global.rbk[4,1]=bkgcs14;global.rbk[4,2]=bkgcs14;global.rbk[4,3]=bkgcs14;global.rbk[4,4]=bkgcs14;global.rbk[4,5]=bkgcs14;
global.rbk[4,6]=bkgcs3;global.rbk[4,7]=bkgcs13;global.rbk[4,8]=bkgcs4;global.rbk[4,9]=bkgcs0;global.rbk[4,10]=bkgcs17;global.rbk[4,11]=bkgcs14;
global.rbk[4,12]=bkgcs14;global.rbk[4,13]=bkgcs12;global.rbk[4,14]=bkgcs0;global.rbk[4,15]=bkgcs3;global.rbk[4,16]=bkgcs1;global.rbk[4,17]=bkgcs14;
global.rbk[4,18]=bkgcs8;global.rbk[4,19]=bkgcs10;global.rbk[4,20]=bkgcs7;global.rbk[4,21]=bkgcs9;global.rbk[4,22]=bkgcs16;global.rbk[4,23]=bkgcs14;
global.rbk[4,24]=bkgcs14;global.rbk[4,25]=bkgcs3;global.rbk[4,26]=bkgcs4;global.rbk[4,27]=bkgcs11;global.rbk[4,28]=bkgcs1;global.rbk[4,29]=bkgcs14;
global.rbk[4,30]=bkgcs14;global.rbk[4,31]=bkgcs14;global.rbk[4,32]=bkgcs14;global.rbk[4,33]=bkgcs14;global.rbk[4,34]=bkgcs14;global.rbk[4,35]=bkgcs14;
global.ccbg[0]=9;global.ccbg[1]=14;global.ccbg[2]=14;global.ccbg[3]=14;global.ccbg[4]=14;global.ccbg[5]=14;
global.ccbg[6]=3;global.ccbg[7]=13;global.ccbg[8]=4;global.ccbg[9]=0;global.ccbg[10]=17;global.ccbg[11]=14;
global.ccbg[12]=14;global.ccbg[13]=12;global.ccbg[14]=0;global.ccbg[15]=3;global.ccbg[16]=1;global.ccbg[17]=14;
global.ccbg[18]=8;global.ccbg[19]=10;global.ccbg[20]=7;global.ccbg[21]=9;global.ccbg[22]=16;global.ccbg[23]=14;
global.ccbg[24]=14;global.ccbg[25]=3;global.ccbg[26]=4;global.ccbg[27]=11;global.ccbg[28]=1;global.ccbg[29]=14;
global.ccbg[30]=14;global.ccbg[31]=14;global.ccbg[32]=14;global.ccbg[33]=14;global.ccbg[34]=14;global.ccbg[35]=14;
}
if((global.areatype[4]=21 || global.areatype[4]=26) && (global.cave>9 && global.cave<13))
{global.rbk[4,0]=bkgcr14;global.rbk[4,1]=bkgcr2;global.rbk[4,2]=bkgcr4;global.rbk[4,3]=bkgcr13;global.rbk[4,4]=bkgcr6;global.rbk[4,5]=bkgcr14;
global.rbk[4,6]=bkgcr9;global.rbk[4,7]=bkgcr7;global.rbk[4,8]=bkgcr2;global.rbk[4,9]=bkgcr15;global.rbk[4,10]=bkgcr13;global.rbk[4,11]=bkgcr6;
global.rbk[4,12]=bkgcr3;global.rbk[4,13]=bkgcr13;global.rbk[4,14]=bkgcr10;global.rbk[4,15]=bkgcr12;global.rbk[4,16]=bkgcr10;global.rbk[4,17]=bkgcr14;
global.rbk[4,18]=bkgcr14;global.rbk[4,19]=bkgcr12;global.rbk[4,20]=bkgcr10;global.rbk[4,21]=bkgcr7;global.rbk[4,22]=bkgcr12;global.rbk[4,23]=bkgcr6;
global.rbk[4,24]=bkgcr14;global.rbk[4,25]=bkgcr7;global.rbk[4,26]=bkgcr5;global.rbk[4,27]=bkgcr14;global.rbk[4,28]=bkgcr7;global.rbk[4,29]=bkgcr14;
global.rbk[4,30]=bkgcr14;global.rbk[4,31]=bkgcr14;global.rbk[4,32]=bkgcr14;global.rbk[4,33]=bkgcr14;global.rbk[4,34]=bkgcr14;global.rbk[4,35]=bkgcr14;
global.ccbg[0]=14;global.ccbg[1]=2;global.ccbg[2]=4;global.ccbg[3]=13;global.ccbg[4]=6;global.ccbg[5]=14;
global.ccbg[6]=9;global.ccbg[7]=7;global.ccbg[8]=2;global.ccbg[9]=15;global.ccbg[10]=13;global.ccbg[11]=6;
global.ccbg[12]=3;global.ccbg[13]=13;global.ccbg[14]=10;global.ccbg[15]=12;global.ccbg[16]=10;global.ccbg[17]=14;
global.ccbg[18]=14;global.ccbg[19]=12;global.ccbg[20]=10;global.ccbg[21]=7;global.ccbg[22]=12;global.ccbg[23]=6;
global.ccbg[24]=14;global.ccbg[25]=7;global.ccbg[26]=5;global.ccbg[27]=14;global.ccbg[28]=7;global.ccbg[29]=14;
global.ccbg[30]=14;global.ccbg[31]=14;global.ccbg[32]=14;global.ccbg[33]=14;global.ccbg[34]=14;global.ccbg[35]=14;
}
if(global.areatype[4]=14 && global.cave>9 && global.cave<13)
{global.rbk[4,0]=bkgc14;global.rbk[4,1]=bkgc14;global.rbk[4,2]=bkgc9;global.rbk[4,3]=bkgc14;global.rbk[4,4]=bkgc9;global.rbk[4,5]=bkgc14;
global.rbk[4,6]=bkgc9;global.rbk[4,7]=bkgc2;global.rbk[4,8]=bkgc11;global.rbk[4,9]=bkgc13;global.rbk[4,10]=bkgc1;global.rbk[4,11]=bkgc14;
global.rbk[4,12]=bkgc5;global.rbk[4,13]=bkgc5;global.rbk[4,14]=bkgc9;global.rbk[4,15]=bkgc3;global.rbk[4,16]=bkgc13;global.rbk[4,17]=bkgc6;
global.rbk[4,18]=bkgc5;global.rbk[4,19]=bkgc3;global.rbk[4,20]=bkgc11;global.rbk[4,21]=bkgc0;global.rbk[4,22]=bkgc7;global.rbk[4,23]=bkgc14;
global.rbk[4,24]=bkgc3;global.rbk[4,25]=bkgc4;global.rbk[4,26]=bkgc4;global.rbk[4,27]=bkgc15;global.rbk[4,28]=bkgc6;global.rbk[4,29]=bkgc14;
global.rbk[4,30]=bkgc14;global.rbk[4,31]=bkgc14;global.rbk[4,32]=bkgc14;global.rbk[4,33]=bkgc7;global.rbk[4,34]=bkgc14;global.rbk[4,35]=bkgc14;
global.ccbg[0]=14;global.ccbg[1]=14;global.ccbg[2]=9;global.ccbg[3]=14;global.ccbg[4]=9;global.ccbg[5]=14;
global.ccbg[6]=9;global.ccbg[7]=2;global.ccbg[8]=11;global.ccbg[9]=13;global.ccbg[10]=1;global.ccbg[11]=14;
global.ccbg[12]=5;global.ccbg[13]=5;global.ccbg[14]=9;global.ccbg[15]=3;global.ccbg[16]=13;global.ccbg[17]=6;
global.ccbg[18]=6;global.ccbg[19]=3;global.ccbg[20]=11;global.ccbg[21]=0;global.ccbg[22]=7;global.ccbg[23]=14;
global.ccbg[24]=3;global.ccbg[25]=4;global.ccbg[26]=4;global.ccbg[27]=15;global.ccbg[28]=6;global.ccbg[29]=14;
global.ccbg[30]=14;global.ccbg[31]=14;global.ccbg[32]=14;global.ccbg[33]=7;global.ccbg[34]=14;global.ccbg[35]=14;
}
if(global.areatype[4]=26 && global.cave=13)
{global.rbk[4,0]=bkgcs8;global.rbk[4,1]=bkgcs13;global.rbk[4,2]=bkgcs13;global.rbk[4,3]=bkgcs13;global.rbk[4,4]=bkgcs13;global.rbk[4,5]=bkgcs0;
global.rbk[4,6]=bkgcs9;global.rbk[4,7]=bkgcs7;global.rbk[4,8]=bkgcs5;global.rbk[4,9]=bkgcs5;global.rbk[4,10]=bkgcs5;global.rbk[4,11]=bkgcs7;
global.rbk[4,12]=bkgcs12;global.rbk[4,13]=bkgcs0;global.rbk[4,14]=bkgcs7;global.rbk[4,15]=bkgcs3;global.rbk[4,16]=bkgcs15;global.rbk[4,17]=bkgcs0;
global.rbk[4,18]=bkgcs7;global.rbk[4,19]=bkgcs12;global.rbk[4,20]=bkgcs13;global.rbk[4,21]=bkgcs13;global.rbk[4,22]=bkgcs1;global.rbk[4,23]=bkgcs7;
global.rbk[4,24]=bkgcs2;global.rbk[4,25]=bkgcs1;global.rbk[4,26]=bkgcs5;global.rbk[4,27]=bkgcs3;global.rbk[4,28]=bkgcs13;global.rbk[4,29]=bkgcs6;
global.rbk[4,30]=bkgcs3;global.rbk[4,31]=bkgcs6;global.rbk[4,32]=bkgcs14;global.rbk[4,33]=bkgcs8;global.rbk[4,34]=bkgcs1;global.rbk[4,35]=bkgcs14;
global.ccbg[0]=8;global.ccbg[1]=13;global.ccbg[2]=13;global.ccbg[3]=13;global.ccbg[4]=13;global.ccbg[5]=0;
global.ccbg[6]=9;global.ccbg[7]=7;global.ccbg[8]=5;global.ccbg[9]=5;global.ccbg[10]=5;global.ccbg[11]=7;
global.ccbg[12]=12;global.ccbg[13]=0;global.ccbg[14]=7;global.ccbg[15]=3;global.ccbg[16]=15;global.ccbg[17]=0;
global.ccbg[18]=7;global.ccbg[19]=12;global.ccbg[20]=13;global.ccbg[21]=13;global.ccbg[22]=1;global.ccbg[23]=7;
global.ccbg[24]=2;global.ccbg[25]=1;global.ccbg[26]=5;global.ccbg[27]=3;global.ccbg[28]=13;global.ccbg[29]=6;
global.ccbg[30]=3;global.ccbg[31]=6;global.ccbg[32]=14;global.ccbg[33]=8;global.ccbg[34]=1;global.ccbg[35]=14;
}
}
So as you can see everything in the game depends solely on 2 variables, which are where global.flyx is, and where global.flyy is. if you have time have a look at the demo and you'll see there's never any lag and the movement code works pretty much flawlessly, note in the demo tho I had not implemented any background borders yet.
 
Last edited by a moderator:
Top