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

Move mapclass r/g/b variables off onto TowerBG

This fixes a bug where if you entered a tower before watching the
credits sequence, the credits sequence would have mismatched text and
background colors.

This bug happened because entering a tower modified the r/g/b attributes
of mapclass, and updated graphics.towerbg, without updating
graphics.titlebg too. Then gamecompleterender() uses the r/g/b
attributes of mapclass.

The solution is to put the r/g/b attributes on TowerBG instead. That
way, entering a tower will only modify the r/g/b attributes used to
render towers, and won't affect the r/g/b attributes used to render the
credits sequence.

Additionally, I also de-duplicated the case-switch that updated the
r/g/b attributes based off of the current colstate, because it got
copy-pasted twice, leading to three instances of one piece of code.
This commit is contained in:
Misa 2021-01-07 17:37:38 -08:00 committed by Ethan Lee
parent 6b18e3875d
commit 3dd1dcc131
5 changed files with 50 additions and 91 deletions

View file

@ -13,9 +13,6 @@
mapclass::mapclass() mapclass::mapclass()
{ {
//Start here! //Start here!
r = 196;
g = 196;
b = 196;
colstatedelay = 0; colstatedelay = 0;
colsuperstate = 0; colsuperstate = 0;
spikeleveltop = 0; spikeleveltop = 0;
@ -566,11 +563,41 @@ void mapclass::changefinalcol(int t)
} }
} }
void mapclass::setcol(const int r1, const int g1, const int b1 , const int r2, const int g2, const int b2, const int c) void mapclass::setcol(TowerBG& bg_obj, const int r1, const int g1, const int b1 , const int r2, const int g2, const int b2, const int c)
{ {
r = intpol(r1, r2, c / 5); bg_obj.r = intpol(r1, r2, c / 5);
g = intpol(g1, g2, c / 5); bg_obj.g = intpol(g1, g2, c / 5);
b = intpol(b1, b2, c / 5); bg_obj.b = intpol(b1, b2, c / 5);
}
void mapclass::updatebgobj(TowerBG& bg_obj)
{
const int check = bg_obj.colstate % 5; //current state of phase
const int cmode = (bg_obj.colstate - check) / 5; // current colour transition;
switch(cmode)
{
case 0:
setcol(bg_obj, 255, 93, 107, 255, 255, 93, check);
break;
case 1:
setcol(bg_obj, 255, 255, 93, 159, 255, 93, check);
break;
case 2:
setcol(bg_obj, 159, 255, 93, 93, 245, 255, check);
break;
case 3:
setcol(bg_obj, 93, 245, 255, 177, 93, 255, check);
break;
case 4:
setcol(bg_obj, 177, 93, 255, 255, 93, 255, check);
break;
case 5:
setcol(bg_obj, 255, 93, 255, 255, 93, 107, check);
break;
}
bg_obj.tdrawback = true;
} }
void mapclass::updatetowerglow(TowerBG& bg_obj) void mapclass::updatetowerglow(TowerBG& bg_obj)
@ -580,30 +607,9 @@ void mapclass::updatetowerglow(TowerBG& bg_obj)
if (colsuperstate > 0) bg_obj.colstate--; if (colsuperstate > 0) bg_obj.colstate--;
bg_obj.colstate++; bg_obj.colstate++;
if (bg_obj.colstate >= 30) bg_obj.colstate = 0; if (bg_obj.colstate >= 30) bg_obj.colstate = 0;
int check = bg_obj.colstate % 5; //current state of phase
int cmode = (bg_obj.colstate - check) / 5; // current colour transition
switch(cmode) const int check = bg_obj.colstate % 5;
{ updatebgobj(bg_obj);
case 0:
setcol(255, 93, 107, 255, 255, 93, check);
break;
case 1:
setcol(255, 255, 93, 159, 255, 93, check);
break;
case 2:
setcol(159, 255, 93, 93, 245, 255, check);
break;
case 3:
setcol(93, 245, 255, 177, 93, 255, check);
break;
case 4:
setcol(177, 93, 255, 255, 93, 255, check);
break;
case 5:
setcol(255, 93, 255, 255, 93, 107, check);
break;
}
if (check == 0) if (check == 0)
{ {
@ -614,8 +620,6 @@ void mapclass::updatetowerglow(TowerBG& bg_obj)
colstatedelay = 0; colstatedelay = 0;
} }
if (colsuperstate > 0) colstatedelay = 0; if (colsuperstate > 0) colstatedelay = 0;
bg_obj.tdrawback = true;
} }
else else
{ {
@ -627,64 +631,16 @@ void mapclass::nexttowercolour()
{ {
graphics.titlebg.colstate+=5; graphics.titlebg.colstate+=5;
if (graphics.titlebg.colstate >= 30) graphics.titlebg.colstate = 0; if (graphics.titlebg.colstate >= 30) graphics.titlebg.colstate = 0;
int check = graphics.titlebg.colstate % 5; //current state of phase
int cmode = (graphics.titlebg.colstate - check) / 5; // current colour transition
switch(cmode) updatebgobj(graphics.titlebg);
{
case 0:
setcol(255, 93, 107, 255, 255, 93, check);
break;
case 1:
setcol(255, 255, 93, 159, 255, 93, check);
break;
case 2:
setcol(159, 255, 93, 93, 245, 255, check);
break;
case 3:
setcol(93, 245, 255, 177, 93, 255, check);
break;
case 4:
setcol(177, 93, 255, 255, 93, 255, check);
break;
case 5:
setcol(255, 93, 255, 255, 93, 107, check);
break;
}
graphics.titlebg.tdrawback = true;
} }
void mapclass::settowercolour(int t) void mapclass::settowercolour(int t)
{ {
graphics.titlebg.colstate=t*5; graphics.titlebg.colstate=t*5;
if (graphics.titlebg.colstate >= 30) graphics.titlebg.colstate = 0; if (graphics.titlebg.colstate >= 30) graphics.titlebg.colstate = 0;
int check = graphics.titlebg.colstate % 5; //current state of phase
int cmode = (graphics.titlebg.colstate - check) / 5; // current colour transition
switch(cmode) updatebgobj(graphics.titlebg);
{
case 0:
setcol(255, 93, 107, 255, 255, 93, check);
break;
case 1:
setcol(255, 255, 93, 159, 255, 93, check);
break;
case 2:
setcol(159, 255, 93, 93, 245, 255, check);
break;
case 3:
setcol(93, 245, 255, 177, 93, 255, check);
break;
case 4:
setcol(177, 93, 255, 255, 93, 255, check);
break;
case 5:
setcol(255, 93, 255, 255, 93, 107, check);
break;
}
graphics.titlebg.tdrawback = true;
} }
bool mapclass::spikecollide(int x, int y) bool mapclass::spikecollide(int x, int y)

View file

@ -46,7 +46,9 @@ public:
void changefinalcol(int t); void changefinalcol(int t);
void setcol(const int r1, const int g1, const int b1 , const int r2, const int g2, const int b2, const int c); void setcol(TowerBG& bg_obj, const int r1, const int g1, const int b1 , const int r2, const int g2, const int b2, const int c);
void updatebgobj(TowerBG& bg_obj);
void updatetowerglow(TowerBG& bg_obj); void updatetowerglow(TowerBG& bg_obj);
@ -109,8 +111,6 @@ public:
int resumedelay; int resumedelay;
bool minitowermode; bool minitowermode;
//This is the old colour cycle
int r, g,b;
int colstatedelay; int colstatedelay;
int colsuperstate; int colsuperstate;
int spikeleveltop, spikelevelbottom; int spikeleveltop, spikelevelbottom;

View file

@ -9,9 +9,9 @@
void titleupdatetextcol() void titleupdatetextcol()
{ {
graphics.col_tr = map.r - (help.glow / 4) - int(fRandom() * 4); graphics.col_tr = graphics.titlebg.r - (help.glow / 4) - int(fRandom() * 4);
graphics.col_tg = map.g - (help.glow / 4) - int(fRandom() * 4); graphics.col_tg = graphics.titlebg.g - (help.glow / 4) - int(fRandom() * 4);
graphics.col_tb = map.b - (help.glow / 4) - int(fRandom() * 4); graphics.col_tb = graphics.titlebg.b - (help.glow / 4) - int(fRandom() * 4);
if (graphics.col_tr < 0) graphics.col_tr = 0; if (graphics.col_tr < 0) graphics.col_tr = 0;
if(graphics.col_tr>255) graphics.col_tr=255; if(graphics.col_tr>255) graphics.col_tr=255;
if (graphics.col_tg < 0) graphics.col_tg = 0; if (graphics.col_tg < 0) graphics.col_tg = 0;

View file

@ -12,6 +12,9 @@ struct TowerBG
int bscroll; int bscroll;
int colstate; int colstate;
int scrolldir; int scrolldir;
int r;
int g;
int b;
}; };
#endif /* TOWERBG_H */ #endif /* TOWERBG_H */

View file

@ -3194,9 +3194,9 @@ void editorrender()
FillRect(graphics.backBuffer, 0, 0, 320, 240, 0x00000000); FillRect(graphics.backBuffer, 0, 0, 320, 240, 0x00000000);
} }
int tr = map.r - (help.glow / 4) - int(fRandom() * 4); int tr = graphics.titlebg.r - (help.glow / 4) - int(fRandom() * 4);
int tg = map.g - (help.glow / 4) - int(fRandom() * 4); int tg = graphics.titlebg.g - (help.glow / 4) - int(fRandom() * 4);
int tb = map.b - (help.glow / 4) - int(fRandom() * 4); int tb = graphics.titlebg.b - (help.glow / 4) - int(fRandom() * 4);
if (tr < 0) tr = 0; if (tr < 0) tr = 0;
if(tr>255) tr=255; if(tr>255) tr=255;
if (tg < 0) tg = 0; if (tg < 0) tg = 0;