1
0
Fork 0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-12-22 17:49:43 +01:00

Don't redraw H/V warp BG if gotorooming to same room in customs

This has two benefits:
 (1) The game uses less resources when it is asked to gotoroom to the
     same room because it is no longer redrawing the warp background
     every single frame, which is very wasteful.
 (2) The warp background no longer freezes or flickers if the player is
     standing inside a gotoroom script box (which calls gotoroom every
     frame or every other frame, because every time the gotoroom happens
     the script box gets reloaded).
This commit is contained in:
Info Teddy 2020-01-27 14:46:11 -08:00
parent 12497f6478
commit 47ebbf15ab
3 changed files with 17 additions and 2 deletions

View file

@ -121,6 +121,7 @@ public:
int door_up;
int door_down;
int roomx, roomy, roomchangedir;
int prevroomx, prevroomy;
int temp, j, k;
int savex, savey, saverx, savery;

View file

@ -1059,9 +1059,18 @@ void mapclass::gotoroom(int rx, int ry, Graphics& dwgfx, Game& game, entityclass
loadlevel(game.roomx, game.roomy, dwgfx, game, obj, music);
dwgfx.backgrounddrawn = false; //Used for background caching speedup
//Do we need to reload the background?
bool redrawbg = game.roomx != game.prevroomx || game.roomy != game.prevroomy;
if(redrawbg)
{
dwgfx.backgrounddrawn = false; //Used for background caching speedup
}
dwgfx.foregrounddrawn = false; //Used for background caching speedup
game.prevroomx = game.roomx;
game.prevroomy = game.roomy;
//a very special case: if entering the communication room, room 13,4 before tag 5 is set, set the game state to a background
//textbox thingy. if tag five is not set when changing room, reset the game state. (tag 5 is set when you get back to the ship)
if(!game.intimetrial && !custommode)
@ -1605,7 +1614,10 @@ void mapclass::loadlevel(int rx, int ry, Graphics& dwgfx, Game& game, entityclas
}
//If screen warping, then override all that:
dwgfx.backgrounddrawn = false;
bool redrawbg = game.roomx != game.prevroomx || game.roomy != game.prevroomy;
if(redrawbg){
dwgfx.backgrounddrawn = false;
}
if(ed.level[curlevel].warpdir>0){
if(ed.level[curlevel].warpdir==1){
warpx=true;

View file

@ -3427,6 +3427,8 @@ void scriptclass::hardreset( KeyPoll& key, Graphics& dwgfx, Game& game,mapclass&
game.roomchange = false;
game.roomx = 0;
game.roomy = 0;
game.prevroomx = 0;
game.prevroomy = 0;
game.teleport_to_new_area = false;
game.teleport_to_x = 0;
game.teleport_to_y = 0;