Merge branch 'TerryCavanagh:master' into discordrpc

This commit is contained in:
Max Parry 2025-04-28 09:26:51 +10:00 committed by GitHub
commit 2567b5c0cb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 361 additions and 289 deletions

View file

@ -404,6 +404,8 @@ void customlevelclass::reset(void)
script.textbox_colours.clear();
script.add_default_colours();
map.specialroomnames.clear();
player_colour = 0;
}
const int* customlevelclass::loadlevel( int rxi, int ryi )
@ -1414,6 +1416,12 @@ next:
map.specialroomnames.push_back(name);
}
}
if (SDL_strcmp(pKey, "PlayerColour") == 0)
{
player_colour = help.Int(pText);
game.savecolour = player_colour;
}
}
if (mapwidth < maxwidth)
@ -1677,6 +1685,21 @@ bool customlevelclass::save(const std::string& _path)
}
xml::update_tag(data, "script", scriptString.c_str());
if (player_colour != 0)
{
xml::update_tag(data, "PlayerColour", player_colour);
}
else
{
// Get rid of this one as well, since older levels don't have this property anyways
tinyxml2::XMLElement* element;
while ((element = data->FirstChildElement("PlayerColour")) != NULL)
{
doc.DeleteNode(element);
}
}
return FILESYSTEM_saveTiXml2Document(newpath.c_str(), doc);
}

View file

@ -170,6 +170,8 @@ public:
SDL_Color getonewaycol(int rx, int ry);
SDL_Color getonewaycol(void);
bool onewaycol_override;
int player_colour;
};
bool translate_title(const std::string& title);

View file

@ -1048,11 +1048,11 @@ static void draw_entities(void)
if (entity->p1 == 0) // Facing right
{
graphics.draw_sprite(x - 4, y, 0, graphics.col_crewcyan);
graphics.draw_sprite(x - 4, y, 0, graphics.getcol(cl.player_colour));
}
else // Non-zero is facing left
{
graphics.draw_sprite(x - 4, y, 3, graphics.col_crewcyan);
graphics.draw_sprite(x - 4, y, 3, graphics.getcol(cl.player_colour));
}
graphics.draw_rect(x, y, 16, 24, graphics.getRGB(255, 255, 164));
@ -1959,6 +1959,8 @@ void editorrenderfixed(void)
const RoomProperty* const room = cl.getroomprop(ed.levx, ed.levy);
graphics.updatetitlecolours();
graphics.trinketcolset = false;
game.customcol = cl.getlevelcol(room->tileset, room->tilecol) + 1;
ed.entcol = cl.getenemycol(game.customcol);

View file

@ -18,7 +18,7 @@ void entclass::clear(void)
state = 0;
statedelay = 0;
life = 0;
colour = 0;
colour = EntityColour_CREW_CYAN;
para = 0;
behave = 0;
animate = 0;
@ -108,7 +108,7 @@ void entclass::setenemy( int t )
case 0:
tile = 60;
animate = 2;
colour = 6;
colour = EntityColour_ENEMY_RED;
behave = 10;
w = 32;
h = 32;
@ -119,7 +119,7 @@ void entclass::setenemy( int t )
lerpoldyp += 10;
tile = 63;
animate = 100; //LIES
colour = 6;
colour = EntityColour_ENEMY_RED;
behave = 11;
para = 9; //destroyed when outside
x1 = -200;
@ -132,7 +132,7 @@ void entclass::setenemy( int t )
case 2:
tile = 62;
animate = 100;
colour = 6;
colour = EntityColour_ENEMY_RED;
behave = -1;
w = 32;
h = 32;
@ -147,7 +147,7 @@ void entclass::setenemy( int t )
tile = 72;
animate = 3;
size = 9;
colour = 6;
colour = EntityColour_ENEMY_RED;
behave = 12;
w = 64;
h = 40;
@ -161,7 +161,7 @@ void entclass::setenemy( int t )
lerpoldyp -= 4;
tile = 76;
animate = 100; // Clouds
colour = 6;
colour = EntityColour_ENEMY_RED;
behave = 13;
para = -6; //destroyed when outside
x2 = 400;
@ -173,7 +173,7 @@ void entclass::setenemy( int t )
case 2:
tile = 77;
animate = 100;
colour = 6;
colour = EntityColour_ENEMY_RED;
behave = -1;
w = 32;
h = 16;
@ -195,32 +195,32 @@ void entclass::setenemyroom( int rx, int ry )
//Space Station 1
case rn(12, 3): //Security Drone
tile = 36;
colour = 8;
colour = EntityColour_ENEMY_PINK;
animate = 1;
break;
case rn(13, 3): //Wavelengths
tile = 32;
colour = 7;
colour = EntityColour_ENEMY_GREEN;
animate = 1;
w = 32;
break;
case rn(15, 3): //Traffic
tile = 28;
colour = 6;
colour = EntityColour_ENEMY_RED;
animate = 1;
w = 22;
h = 32;
break;
case rn(12, 5): //The Yes Men
tile = 40;
colour = 9;
colour = EntityColour_ENEMY_YELLOW;
animate = 1;
w = 20;
h = 20;
break;
case rn(13, 6): //Hunchbacked Guards
tile = 44;
colour = 8;
colour = EntityColour_ENEMY_PINK;
animate = 1;
w = 16;
h = 20;
@ -231,7 +231,7 @@ void entclass::setenemyroom( int rx, int ry )
{
//transmittor
tile = 104;
colour = 4;
colour = EntityColour_INACTIVE_ENTITY;
animate = 7;
w = 16;
h = 16;
@ -244,7 +244,7 @@ void entclass::setenemyroom( int rx, int ry )
{
//radar dish
tile =124;
colour = 4;
colour = EntityColour_INACTIVE_ENTITY;
animate = 6;
w = 32;
h = 32;
@ -260,37 +260,37 @@ void entclass::setenemyroom( int rx, int ry )
//The Lab
case rn(4, 0):
tile = 78;
colour = 7;
colour = EntityColour_ENEMY_GREEN;
animate = 1;
w = 16;
h = 16;
break;
case rn(2, 0):
tile = 88;
colour = 11;
colour = EntityColour_ENEMY_CYAN;
animate = 1;
w = 16;
h = 16;
break;
//Space Station 2
case rn(14, 11):
colour = 17;
colour = EntityColour_ENEMY_ORANGE;
break; //Lies
case rn(16, 11):
colour = 8;
colour = EntityColour_ENEMY_PINK;
break; //Lies
case rn(13, 10):
colour = 11;
colour = EntityColour_ENEMY_CYAN;
break; //Factory
case rn(13, 9):
colour = 9;
colour = EntityColour_ENEMY_YELLOW;
break; //Factory
case rn(13, 8):
colour = 8;
colour = EntityColour_ENEMY_PINK;
break; //Factory
case rn(11, 13): //Truth
tile = 64;
colour = 7;
colour = EntityColour_ENEMY_GREEN;
animate = 100;
w = 44;
h = 10;
@ -298,7 +298,7 @@ void entclass::setenemyroom( int rx, int ry )
break;
case rn(17, 7): //Brass sent us under the top
tile =82;
colour = 8;
colour = EntityColour_ENEMY_PINK;
animate = 5;
w = 28;
h = 32;
@ -306,42 +306,42 @@ void entclass::setenemyroom( int rx, int ry )
break;
case rn(10, 7): // (deception)
tile = 92;
colour = 6;
colour = EntityColour_ENEMY_RED;
animate = 1;
w = 16;
h = 16;
break;
case rn(14, 13): // (chose poorly)
tile = 56;
colour = 6;
colour = EntityColour_ENEMY_RED;
animate = 1;
w = 15;
h = 24;
break;
case rn(13, 12): // (backsliders)
tile = 164;
colour = 7;
colour = EntityColour_ENEMY_GREEN;
animate = 1;
w = 16;
h = 16;
break;
case rn(14, 8): // (wheel of fortune room)
tile = 116;
colour = 12;
colour = EntityColour_ENEMY_BLUE;
animate = 1;
w = 32;
h = 32;
break;
case rn(16, 9): // (seeing dollar signs)
tile = 68;
colour = 7;
colour = EntityColour_ENEMY_GREEN;
animate = 1;
w = 16;
h = 16;
break;
case rn(16, 7): // (tomb of mad carew)
tile = 106;
colour = 7;
colour = EntityColour_ENEMY_GREEN;
animate = 2;
w = 24;
h = 25;
@ -349,7 +349,7 @@ void entclass::setenemyroom( int rx, int ry )
//Warp Zone
case rn(15, 2): // (numbers)
tile = 100;
colour = 6;
colour = EntityColour_ENEMY_RED;
animate = 1;
w = 32;
h = 14;
@ -358,7 +358,7 @@ void entclass::setenemyroom( int rx, int ry )
break;
case rn(16, 2): // (Manequins)
tile = 52;
colour = 7;
colour = EntityColour_ENEMY_GREEN;
animate = 5;
w = 16;
h = 25;
@ -367,28 +367,28 @@ void entclass::setenemyroom( int rx, int ry )
break;
case rn(18, 0): // (Obey)
tile = 51;
colour = 11;
colour = EntityColour_ENEMY_CYAN;
animate = 100;
w = 30;
h = 14;
break;
case rn(19, 1): // Ascending and Descending
tile = 48;
colour = 9;
colour = EntityColour_ENEMY_YELLOW;
animate = 5;
w = 16;
h = 16;
break;
case rn(19, 2): // Shockwave Rider
tile = 176;
colour = 6;
colour = EntityColour_ENEMY_RED;
animate = 1;
w = 16;
h = 16;
break;
case rn(18, 3): // Mind the gap
tile = 168;
colour = 7;
colour = EntityColour_ENEMY_GREEN;
animate = 1;
w = 16;
h = 16;
@ -397,7 +397,7 @@ void entclass::setenemyroom( int rx, int ry )
if (yp ==96)
{
tile = 160;
colour = 8;
colour = EntityColour_ENEMY_PINK;
animate = 1;
w = 16;
h = 16;
@ -405,7 +405,7 @@ void entclass::setenemyroom( int rx, int ry )
else
{
tile = 156;
colour = 8;
colour = EntityColour_ENEMY_PINK;
animate = 1;
w = 16;
h = 16;
@ -413,14 +413,14 @@ void entclass::setenemyroom( int rx, int ry )
break;
case rn(16, 0): // I love you
tile = 112;
colour = 8;
colour = EntityColour_ENEMY_PINK;
animate = 5;
w = 16;
h = 16;
break;
case rn(14, 2): // That's why I have to kill you
tile = 114;
colour = 6;
colour = EntityColour_ENEMY_RED;
animate = 5;
w = 16;
h = 16;
@ -430,7 +430,7 @@ void entclass::setenemyroom( int rx, int ry )
if (xp ==88)
{
tile = 54+12;
colour = 12;
colour = EntityColour_ENEMY_BLUE;
animate = 100;
w = 60;
h = 16;
@ -439,7 +439,7 @@ void entclass::setenemyroom( int rx, int ry )
else
{
tile = 54;
colour = 12;
colour = EntityColour_ENEMY_BLUE;
animate = 100;
w = 60;
h = 16;
@ -449,62 +449,62 @@ void entclass::setenemyroom( int rx, int ry )
//Final level
case rn(50-100, 53-100): //The Yes Men
tile = 40;
colour = 9;
colour = EntityColour_ENEMY_YELLOW;
animate = 1;
w = 20;
h = 20;
break;
case rn(48-100, 51-100): //Wavelengths
tile = 32;
colour = 7;
colour = EntityColour_ENEMY_GREEN;
animate = 1;
w = 32;
break;
case rn(43-100,52-100): // Ascending and Descending
tile = 48;
colour = 9;
colour = EntityColour_ENEMY_YELLOW;
animate = 5;
w = 16;
h = 16;
break;
case rn(46-100,51-100): //kids his age
tile = 88;
colour = 11;
colour = EntityColour_ENEMY_CYAN;
animate = 1;
w = 16;
h = 16;
break;
case rn(43-100,51-100): // Mind the gap
tile = 168;
colour = 7;
colour = EntityColour_ENEMY_GREEN;
animate = 1;
w = 16;
h = 16;
break;
case rn(44-100,51-100): // vertigo?
tile = 172;
colour = 7;
colour = EntityColour_ENEMY_GREEN;
animate = 100;
w = 32;
h = 32;
break;
case rn(44-100,52-100): // (backsliders)
tile = 164;
colour = 7;
colour = EntityColour_ENEMY_GREEN;
animate = 1;
w = 16;
h = 16;
break;
case rn(43-100, 56-100): //Intermission 1
tile = 88;
colour = 21;
colour = EntityColour_ENEMY_GRAVITRON;
animate = 1;
w = 16;
h = 16;
break;
case rn(45-100, 56-100): //Intermission 1
tile = 88;
colour = 21;
colour = EntityColour_ENEMY_GRAVITRON;
animate = 1;
w = 16;
h = 16;
@ -515,7 +515,7 @@ void entclass::setenemyroom( int rx, int ry )
case rn(11, 8):
case rn(12, 8):
tile = 0;
colour = 102;
colour = EntityColour_TELEPORTER_FLASHING;
animate = 0;
w = 464;
h = 320;

View file

@ -59,7 +59,8 @@ public:
int state, statedelay;
int behave, animate;
float para;
int life, colour;
int life;
int colour; // As out-of-bounds colours are allowed, this should be an int instead of an EnemyColour.
//Position and velocity
int oldxp, oldyp;

View file

@ -109,13 +109,13 @@ void entityclass::resetallflags(void)
int entityclass::swncolour( int t )
{
//given colour t, return colour in setcol
if (t == 0) return 11;
if (t == 1) return 6;
if (t == 2) return 8;
if (t == 3) return 12;
if (t == 4) return 9;
if (t == 5) return 7;
return 0;
if (t == 0) return EntityColour_ENEMY_CYAN;
if (t == 1) return EntityColour_ENEMY_RED;
if (t == 2) return EntityColour_ENEMY_PINK;
if (t == 3) return EntityColour_ENEMY_BLUE;
if (t == 4) return EntityColour_ENEMY_YELLOW;
if (t == 5) return EntityColour_ENEMY_GREEN;
return EntityColour_CREW_CYAN; // Fallback to color 0
}
void entityclass::swnenemiescol( int t )
@ -1324,7 +1324,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
case 0: //Player
entity.rule = 0; //Playable character
entity.tile = 0;
entity.colour = 0;
entity.colour = EntityColour_CREW_CYAN;
entity.cx = 6;
entity.cy = 2;
entity.w = 12;
@ -1357,7 +1357,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.harmful = true;
entity.tile = 24;
entity.animate = 0;
entity.colour = 8;
entity.colour = EntityColour_ENEMY_PINK;
entity.type = EntityType_MOVING;
@ -1375,7 +1375,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
{
//MAVVERRRICK
entity.tile = 96;
entity.colour = 6;
entity.colour = EntityColour_ENEMY_RED;
entity.size = 9;
entity.w = 64;
entity.h = 44;
@ -1515,7 +1515,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
case 6: //Decorative particles
entity.rule = 2;
entity.type = EntityType_PARTICLE; //Particles
entity.colour = 27;
entity.colour = EntityColour_PARTICLE_RED;
entity.size = 3;
entity.vx = meta1;
entity.vy = meta2;
@ -1525,7 +1525,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
case 7: //Decorative particles
entity.rule = 2;
entity.type = EntityType_PARTICLE; //Particles
entity.colour = 0;
entity.colour = EntityColour_CREW_CYAN;
entity.size = 3;
entity.vx = meta1;
entity.vy = meta2;
@ -1536,7 +1536,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.rule = 3;
entity.type = EntityType_COIN;
entity.size = 4;
entity.colour = 26;
entity.colour = EntityColour_COIN;
entity.tile = 48;
entity.w = 8;
entity.h = 8;
@ -1554,7 +1554,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.tile = 22;
entity.w = 16;
entity.h = 16;
entity.colour = 3;
entity.colour = EntityColour_TRINKET;
entity.onentity = 1;
entity.animate = 100;
@ -1569,14 +1569,14 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.tile = 20 + meta1;
entity.w = 16;
entity.h = 16;
entity.colour = 4;
entity.colour = EntityColour_INACTIVE_ENTITY;
entity.onentity = 1;
entity.animate = 100;
entity.para = meta2;
if (game.savepoint == meta2)
{
entity.colour = 5;
entity.colour = EntityColour_ACTIVE_ENTITY;
entity.onentity = 0;
}
@ -1590,7 +1590,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.type = EntityType_HORIZONTAL_GRAVITY_LINE;
entity.size = 5;
entity.life = 0;
entity.colour = 25;
entity.colour = EntityColour_GRAVITY_LINE_ACTIVE;
entity.w = meta1;
entity.h = 1;
entity.onentity = 1;
@ -1600,10 +1600,10 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.type = EntityType_VERTICAL_GRAVITY_LINE;
entity.size = 6;
entity.life = 0;
entity.colour = 25;
entity.colour = EntityColour_GRAVITY_LINE_ACTIVE;
entity.w = 1;
entity.h = meta1;
//entity.colour = 0;
//entity.colour = EntityColour_CREW_CYAN;
entity.onentity = 1;
break;
case 13: //Warp token
@ -1613,7 +1613,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.tile = 18;
entity.w = 16;
entity.h = 16;
entity.colour = 10;
entity.colour = EntityColour_WARP_TOKEN;
entity.onentity = 1;
entity.animate = 2;
//Added in port, hope it doesn't break anything
@ -1627,7 +1627,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.tile = 1; //inactive
entity.w = 96;
entity.h = 96;
entity.colour = 100;
entity.colour = EntityColour_TELEPORTER_INACTIVE;
entity.onentity = 1;
entity.animate = 100;
entity.para = meta2;
@ -1636,7 +1636,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.rule = 6;
entity.type = EntityType_CREWMATE; //A special case!
entity.tile = 144;
entity.colour = 13; //144 for sad :(
entity.colour = EntityColour_CREW_GREEN; //144 for sad :(
entity.cx = 6;
entity.cy = 2;
entity.w = 12;
@ -1651,7 +1651,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.rule = 7;
entity.type = EntityType_CREWMATE; //A special case!
entity.tile = 144+6;
entity.colour = 14; //144 for sad (upside down+12):(
entity.colour = EntityColour_CREW_YELLOW; //144 for sad (upside down+12):(
entity.cx = 6;
entity.cy = 2;
entity.w = 12;
@ -1666,7 +1666,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.rule = 6;
entity.type = EntityType_CREWMATE; //A special case!
entity.tile = 144;
entity.colour = 16; //144 for sad :(
entity.colour = EntityColour_CREW_BLUE; //144 for sad :(
entity.cx = 6;
entity.cy = 2;
entity.w = 12;
@ -1710,7 +1710,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.rule = 6;
entity.type = EntityType_CREWMATE; //A special case!
entity.tile = 0;
entity.colour = 6; //54 for sad :(
entity.colour = EntityColour_ENEMY_RED; //54 for sad :(
entity.cx = 6;
entity.cy = 2;
entity.w = 12;
@ -1728,7 +1728,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.tile = 16 + meta1;
entity.w = 16;
entity.h = 16;
entity.colour = 4;
entity.colour = EntityColour_INACTIVE_ENTITY;
entity.onentity = 1;
entity.animate = 100;
entity.para = meta2;
@ -1740,7 +1740,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.tile = 16 + meta1;
entity.w = 16;
entity.h = 16;
entity.colour = 4;
entity.colour = EntityColour_INACTIVE_ENTITY;
entity.onentity = 0;
entity.animate = 100;
entity.para = meta2;
@ -1752,7 +1752,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.tile = 22;
entity.w = 16;
entity.h = 16;
entity.colour = 3;
entity.colour = EntityColour_TRINKET;
entity.onentity = 0;
entity.animate = 100;
@ -1780,7 +1780,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
//initilise tiles here based on behavior
entity.size = 12; //don't wrap around
entity.colour = 21;
entity.colour = EntityColour_ENEMY_GRAVITRON;
entity.tile = 78; //default case
entity.animate = 1;
if (game.swngame == SWN_SUPERGRAVITRON)
@ -1838,7 +1838,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.size = 0;
entity.w = 16;
entity.h = 16;
entity.colour = 4;
entity.colour = EntityColour_INACTIVE_ENTITY;
entity.onentity = 1;
entity.animate = 100;
entity.para = meta2;
@ -1852,42 +1852,42 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
if (game.bestrank[TimeTrial_SPACESTATION1] >= 3)
{
entity.tile = 184 + meta1;
entity.colour = 31;
entity.colour = EntityColour_TROPHY_SPACE_STATION_1;
}
break;
case 2:
if (game.bestrank[TimeTrial_LABORATORY] >= 3)
{
entity.tile = 186 + meta1;
entity.colour = 35;
entity.colour = EntityColour_TROPHY_LABORATORY;
}
break;
case 3:
if (game.bestrank[TimeTrial_TOWER] >= 3)
{
entity.tile = 184 + meta1;
entity.colour = 33;
entity.colour = EntityColour_TROPHY_TOWER;
}
break;
case 4:
if (game.bestrank[TimeTrial_SPACESTATION2] >= 3)
{
entity.tile = 184 + meta1;
entity.colour = 32;
entity.colour = EntityColour_TROPHY_SPACE_STATION_2;
}
break;
case 5:
if (game.bestrank[TimeTrial_WARPZONE] >= 3)
{
entity.tile = 184 + meta1;
entity.colour = 34;
entity.colour = EntityColour_TROPHY_WARP_ZONE;
}
break;
case 6:
if (game.bestrank[TimeTrial_FINALLEVEL] >= 3)
{
entity.tile = 184 + meta1;
entity.colour = 30;
entity.colour = EntityColour_TROPHY_FINAL_LEVEL;
}
break;
@ -1895,7 +1895,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
if (game.unlock[UnlockTrophy_GAME_COMPLETE])
{
entity.tile = 188 + meta1;
entity.colour = 37;
entity.colour = EntityColour_TROPHY_GAME_COMPLETE;
entity.h += 3;
entity.yp -= 3;
}
@ -1904,7 +1904,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
if (game.unlock[UnlockTrophy_FLIPMODE_COMPLETE])
{
entity.tile = 188 + meta1;
entity.colour = 37;
entity.colour = EntityColour_TROPHY_GAME_COMPLETE;
entity.h += 3;
}
break;
@ -1915,7 +1915,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
if (game.bestgamedeaths <= 50)
{
entity.tile = 182 + meta1;
entity.colour = 40;
entity.colour = EntityColour_TROPHY_FLASHY;
}
}
break;
@ -1925,7 +1925,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
if (game.bestgamedeaths <= 100)
{
entity.tile = 182 + meta1;
entity.colour = 36;
entity.colour = EntityColour_TROPHY_GOLD;
}
}
break;
@ -1935,7 +1935,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
if (game.bestgamedeaths <= 250)
{
entity.tile = 182 + meta1;
entity.colour = 38;
entity.colour = EntityColour_TROPHY_SILVER;
}
}
break;
@ -1945,7 +1945,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
if (game.bestgamedeaths <= 500)
{
entity.tile = 182 + meta1;
entity.colour = 39;
entity.colour = EntityColour_TROPHY_BRONZE;
}
}
break;
@ -1954,42 +1954,42 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
if(game.swnbestrank>=1)
{
entity.tile = 182 + meta1;
entity.colour = 39;
entity.colour = EntityColour_TROPHY_BRONZE;
}
break;
case 14:
if(game.swnbestrank>=2)
{
entity.tile = 182 + meta1;
entity.colour = 39;
entity.colour = EntityColour_TROPHY_BRONZE;
}
break;
case 15:
if(game.swnbestrank>=3)
{
entity.tile = 182 + meta1;
entity.colour = 39;
entity.colour = EntityColour_TROPHY_BRONZE;
}
break;
case 16:
if(game.swnbestrank>=4)
{
entity.tile = 182 + meta1;
entity.colour = 38;
entity.colour = EntityColour_TROPHY_SILVER;
}
break;
case 17:
if(game.swnbestrank>=5)
{
entity.tile = 182 + meta1;
entity.colour = 36;
entity.colour = EntityColour_TROPHY_GOLD;
}
break;
case 18:
if(game.swnbestrank>=6)
{
entity.tile = 182 + meta1;
entity.colour = 40;
entity.colour = EntityColour_TROPHY_FLASHY;
}
break;
@ -1997,7 +1997,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
if (game.unlock[UnlockTrophy_NODEATHMODE_COMPLETE])
{
entity.tile = 3;
entity.colour = 102;
entity.colour = EntityColour_TELEPORTER_FLASHING;
entity.size = 13;
entity.xp -= 64;
entity.yp -= 128;
@ -2014,7 +2014,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
entity.tile = 18;
entity.w = 16;
entity.h = 16;
entity.colour = 3;
entity.colour = EntityColour_TRINKET;
entity.onentity = 0;
entity.animate = 100;
entity.para = meta2;
@ -2137,41 +2137,41 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
//RED
case 3: case 7: case 12: case 23: case 28:
case 34: case 42: case 48: case 58:
entity.colour = 6; break;
entity.colour = EntityColour_ENEMY_RED; break;
//GREEN
case 5: case 9: case 22: case 25: case 29:
case 31: case 38: case 46: case 52: case 53:
entity.colour = 7; break;
entity.colour = EntityColour_ENEMY_GREEN; break;
//BLUE
case 1: case 6: case 14: case 27: case 33:
case 44: case 50: case 57:
entity.colour = 12; break;
entity.colour = EntityColour_ENEMY_BLUE; break;
//YELLOW
case 4: case 17: case 24: case 30: case 37:
case 45: case 51: case 55:
entity.colour = 9; break;
entity.colour = EntityColour_ENEMY_YELLOW; break;
//PURPLE
case 2: case 11: case 15: case 19: case 32:
case 36: case 49:
entity.colour = 20; break;
entity.colour = EntityColour_CREW_PURPLE; break;
//CYAN
case 8: case 10: case 13: case 18: case 26:
case 35: case 41: case 47: case 54:
entity.colour = 11; break;
entity.colour = EntityColour_ENEMY_CYAN; break;
//PINK
case 16: case 20: case 39: case 43: case 56:
entity.colour = 8; break;
entity.colour = EntityColour_ENEMY_PINK; break;
//ORANGE
case 21: case 40:
entity.colour = 17; break;
entity.colour = EntityColour_ENEMY_ORANGE; break;
default:
entity.colour = 6;
entity.colour = EntityColour_ENEMY_RED;
break;
}
}
if(custom_gray){
entity.colour = 18;
entity.colour = EntityColour_ENEMY_GRAY;
}
entityclonefix(&entity);
@ -2744,11 +2744,11 @@ bool entityclass::updateentities( int i )
{
if (entities[j].type == EntityType_CHECKPOINT)
{
entities[j].colour = 4;
entities[j].colour = EntityColour_INACTIVE_ENTITY;
entities[j].onentity = 1;
}
}
entities[i].colour = 5;
entities[i].colour = EntityColour_ACTIVE_ENTITY;
entities[i].onentity = 0;
game.savepoint = entities[i].para;
music.playef(Sound_CHECKPOINT);
@ -2936,7 +2936,7 @@ bool entityclass::updateentities( int i )
else if (entities[i].state == 11)
{
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
int j=getcrewman(PURPLE);
int j=getcrewman(EntityColour_CREW_PURPLE);
if (INBOUNDS_VEC(j, entities))
{
if (entities[j].xp > entities[i].xp + 5)
@ -2961,7 +2961,7 @@ bool entityclass::updateentities( int i )
else if (entities[i].state == 12)
{
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
int j=getcrewman(YELLOW);
int j=getcrewman(EntityColour_CREW_YELLOW);
if (INBOUNDS_VEC(j, entities))
{
if (entities[j].xp > entities[i].xp + 5)
@ -2986,7 +2986,7 @@ bool entityclass::updateentities( int i )
else if (entities[i].state == 13)
{
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
int j=getcrewman(RED);
int j=getcrewman(EntityColour_CREW_RED);
if (INBOUNDS_VEC(j, entities))
{
if (entities[j].xp > entities[i].xp + 5)
@ -3011,7 +3011,7 @@ bool entityclass::updateentities( int i )
else if (entities[i].state == 14)
{
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
int j=getcrewman(GREEN);
int j=getcrewman(EntityColour_CREW_GREEN);
if (INBOUNDS_VEC(j, entities))
{
if (entities[j].xp > entities[i].xp + 5)
@ -3036,7 +3036,7 @@ bool entityclass::updateentities( int i )
else if (entities[i].state == 15)
{
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
int j=getcrewman(BLUE);
int j=getcrewman(EntityColour_CREW_BLUE);
if (INBOUNDS_VEC(j, entities))
{
if (entities[j].xp > entities[i].xp + 5)
@ -3190,7 +3190,7 @@ bool entityclass::updateentities( int i )
//wait for collision
if (entities[i].state == 1)
{
entities[i].colour = 5;
entities[i].colour = EntityColour_ACTIVE_ENTITY;
entities[i].onentity = 0;
music.playef(Sound_TERMINALTOUCH);
@ -3390,7 +3390,7 @@ bool entityclass::updateentities( int i )
{
music.playef(Sound_GAMESAVED);
entities[i].tile = 2;
entities[i].colour = 101;
entities[i].colour = EntityColour_TELEPORTER_ACTIVE;
if(!game.intimetrial && !game.nodeathmode)
{
game.setstate(2000);
@ -3410,7 +3410,7 @@ bool entityclass::updateentities( int i )
{
if (entities[j].type == EntityType_CHECKPOINT)
{
entities[j].colour = 4;
entities[j].colour = EntityColour_INACTIVE_ENTITY;
entities[j].onentity = 1;
}
}
@ -3436,7 +3436,7 @@ bool entityclass::updateentities( int i )
//Initilise the teleporter without changing the game state or playing sound
entities[i].onentity = 0;
entities[i].tile = 6;
entities[i].colour = 102;
entities[i].colour = EntityColour_TELEPORTER_FLASHING;
game.activetele = true;
game.teleblock.x = entities[i].xp - 32;
@ -3994,34 +3994,29 @@ int entityclass::getlineat( int t )
return 0;
}
int entityclass::getcrewman( int t, int fallback /*= 0*/ )
int entityclass::getcrewman(int t)
{
//Returns the index of the crewman with colour index given by t
// Returns the index of the crewman with colour index given by t.
// Note: this takes an int, not an EntityColour, as invalid colours are allowed in scripting
for (size_t i = 0; i < entities.size(); i++)
{
if ((entities[i].type == EntityType_CREWMATE || entities[i].type == EntityType_SUPERCREWMATE)
&& (entities[i].rule == 6 || entities[i].rule == 7))
&& (entities[i].rule == 6 || entities[i].rule == 7))
{
if(entities[i].colour==t)
if (entities[i].colour == t)
{
return i;
}
}
}
return fallback;
return -1;
}
int entityclass::getcustomcrewman( int t )
int entityclass::getcustomcrewman(int t)
{
//Returns the index of the crewman with colour index given by t
if (t == 0) t = 0;
if (t == 1) t = 20;
if (t == 2) t = 14;
if (t == 3) t = 15;
if (t == 4) t = 13;
if (t == 5) t = 16;
// like getcrewman, this returns the index of the CUSTOM crewman with colour index given by t
for (size_t i = 0; i < entities.size(); i++)
{

View file

@ -5,10 +5,10 @@
#include <string>
#include <vector>
#include "Maths.h"
#include "Ent.h"
#include "BlockV.h"
#include "Ent.h"
#include "Game.h"
#include "Maths.h"
enum
{
@ -20,18 +20,6 @@ enum
ACTIVITY = 5
};
enum
{
CYAN = 0,
PURPLE = 20,
YELLOW = 14,
RED = 15,
GREEN = 13,
BLUE = 16,
GRAY = 19,
TELEPORTER = 102
};
class entityclass
{
public:
@ -56,7 +44,7 @@ public:
createblock(DAMAGE, 312, -8, 16, 260);
}
int swncolour(int t );
int swncolour(int t);
void swnenemiescol(int t);
@ -106,7 +94,7 @@ public:
int getlineat(int t);
int getcrewman(int t, int fallback = 0);
int getcrewman(int t);
int getcustomcrewman(int t);
int getteleporter(void);

View file

@ -146,7 +146,7 @@ void Game::init(void)
prevroomy = 0;
saverx = 0;
savery = 0;
savecolour = 0;
savecolour = EntityColour_CREW_CYAN;
mutebutton = 0;
muted = false;
@ -2563,7 +2563,7 @@ void Game::updatestate(void)
int i = obj.getplayer();
if (INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].colour = 0;
obj.entities[i].colour = EntityColour_CREW_CYAN;
obj.entities[i].invis = false;
int j = obj.getteleporter();
@ -2584,7 +2584,7 @@ void Game::updatestate(void)
if (INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].tile = 1;
obj.entities[i].colour = 101;
obj.entities[i].colour = EntityColour_TELEPORTER_ACTIVE;
}
break;
}
@ -2757,7 +2757,7 @@ void Game::updatestate(void)
int i = obj.getplayer();
if (INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].colour = 0;
obj.entities[i].colour = EntityColour_CREW_CYAN;
obj.entities[i].invis = true;
}
@ -2771,7 +2771,7 @@ void Game::updatestate(void)
if (INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].tile = 1;
obj.entities[i].colour = 100;
obj.entities[i].colour = EntityColour_TELEPORTER_INACTIVE;
}
break;
}
@ -3365,7 +3365,7 @@ void Game::updatestate(void)
int i = obj.getplayer();
if (INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].colour = 102;
obj.entities[i].colour = EntityColour_TELEPORTER_FLASHING;
}
incstate();
@ -3407,7 +3407,7 @@ void Game::updatestate(void)
int i = obj.getplayer();
if (INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].colour = 0;
obj.entities[i].colour = EntityColour_CREW_CYAN;
obj.entities[i].invis = true;
}
@ -3492,7 +3492,7 @@ void Game::updatestate(void)
int i = obj.getplayer();
if (INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].colour = 0;
obj.entities[i].colour = EntityColour_CREW_CYAN;
obj.entities[i].invis = true;
}
@ -3500,7 +3500,7 @@ void Game::updatestate(void)
if(INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].tile = 1;
obj.entities[i].colour = 100;
obj.entities[i].colour = EntityColour_TELEPORTER_INACTIVE;
}
break;
}
@ -3544,9 +3544,9 @@ void Game::updatestate(void)
obj.entities[i].lerpoldxp = obj.entities[i].xp;
obj.entities[i].lerpoldyp = obj.entities[i].yp;
obj.entities[j].tile = 2;
obj.entities[j].colour = 101;
obj.entities[j].colour = EntityColour_TELEPORTER_ACTIVE;
}
obj.entities[i].colour = 0;
obj.entities[i].colour = EntityColour_CREW_CYAN;
obj.entities[i].invis = false;
obj.entities[i].dir = 1;
@ -3675,9 +3675,9 @@ void Game::updatestate(void)
obj.entities[i].lerpoldxp = obj.entities[i].xp;
obj.entities[i].lerpoldyp = obj.entities[i].yp;
obj.entities[j].tile = 2;
obj.entities[j].colour = 101;
obj.entities[j].colour = EntityColour_TELEPORTER_ACTIVE;
}
obj.entities[i].colour = 0;
obj.entities[i].colour = EntityColour_CREW_CYAN;
obj.entities[i].invis = false;
obj.entities[i].dir = 1;
@ -3788,9 +3788,9 @@ void Game::updatestate(void)
obj.entities[i].lerpoldxp = obj.entities[i].xp;
obj.entities[i].lerpoldyp = obj.entities[i].yp;
obj.entities[j].tile = 2;
obj.entities[j].colour = 101;
obj.entities[j].colour = EntityColour_TELEPORTER_ACTIVE;
}
obj.entities[i].colour = 0;
obj.entities[i].colour = EntityColour_CREW_CYAN;
obj.entities[i].invis = false;
obj.entities[i].dir = 0;
@ -3901,9 +3901,9 @@ void Game::updatestate(void)
obj.entities[i].lerpoldxp = obj.entities[i].xp;
obj.entities[i].lerpoldyp = obj.entities[i].yp;
obj.entities[j].tile = 2;
obj.entities[j].colour = 101;
obj.entities[j].colour = EntityColour_TELEPORTER_ACTIVE;
}
obj.entities[i].colour = 0;
obj.entities[i].colour = EntityColour_CREW_CYAN;
obj.entities[i].invis = false;
obj.entities[i].dir = 1;
@ -4019,9 +4019,9 @@ void Game::updatestate(void)
obj.entities[i].lerpoldxp = obj.entities[i].xp;
obj.entities[i].lerpoldyp = obj.entities[i].yp;
obj.entities[j].tile = 2;
obj.entities[j].colour = 101;
obj.entities[j].colour = EntityColour_TELEPORTER_ACTIVE;
}
obj.entities[i].colour = 0;
obj.entities[i].colour = EntityColour_CREW_CYAN;
obj.entities[i].invis = false;
obj.entities[i].dir = 1;
@ -4137,9 +4137,9 @@ void Game::updatestate(void)
obj.entities[i].lerpoldxp = obj.entities[i].xp;
obj.entities[i].lerpoldyp = obj.entities[i].yp;
obj.entities[j].tile = 2;
obj.entities[j].colour = 101;
obj.entities[j].colour = EntityColour_TELEPORTER_ACTIVE;
}
obj.entities[i].colour = 0;
obj.entities[i].colour = EntityColour_CREW_CYAN;
obj.entities[i].invis = false;
obj.entities[i].dir = 0;
@ -4253,7 +4253,7 @@ void Game::updatestate(void)
obj.entities[i].lerpoldxp = obj.entities[i].xp;
obj.entities[i].lerpoldyp = obj.entities[i].yp;
obj.entities[j].tile = 2;
obj.entities[j].colour = 101;
obj.entities[j].colour = EntityColour_TELEPORTER_ACTIVE;
}
obj.entities[i].invis = false;
obj.entities[i].dir = 1;
@ -4366,9 +4366,9 @@ void Game::updatestate(void)
obj.entities[i].lerpoldxp = obj.entities[i].xp;
obj.entities[i].lerpoldyp = obj.entities[i].yp;
obj.entities[j].tile = 2;
obj.entities[j].colour = 101;
obj.entities[j].colour = EntityColour_TELEPORTER_ACTIVE;
}
obj.entities[i].colour = 0;
obj.entities[i].colour = EntityColour_CREW_CYAN;
obj.entities[i].invis = false;
obj.entities[i].dir = 1;
@ -4479,9 +4479,9 @@ void Game::updatestate(void)
obj.entities[i].lerpoldxp = obj.entities[i].xp;
obj.entities[i].lerpoldyp = obj.entities[i].yp;
obj.entities[j].tile = 2;
obj.entities[j].colour = 101;
obj.entities[j].colour = EntityColour_TELEPORTER_ACTIVE;
}
obj.entities[i].colour = 0;
obj.entities[i].colour = EntityColour_CREW_CYAN;
obj.entities[i].invis = false;
obj.entities[i].dir = 1;
@ -5363,7 +5363,7 @@ void Game::deathsequence(void)
}
if (INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].colour = 1;
obj.entities[i].colour = EntityColour_DEAD;
obj.entities[i].invis = false;
}

View file

@ -425,22 +425,23 @@ void Graphics::print_level_creator(
int width_for_face = 17;
int total_width = width_for_face + font::len(print_flags, creator.c_str());
int face_x, text_x, sprite_x;
int offset_x = -7;
if (!font::is_rtl(print_flags))
{
face_x = (SCREEN_WIDTH_PIXELS - total_width) / 2;
text_x = face_x + width_for_face;
sprite_x = 7;
sprite_x = 0;
}
else
{
face_x = (SCREEN_WIDTH_PIXELS + total_width) / 2;
text_x = face_x - width_for_face;
face_x -= 10; // sprite origin
sprite_x = 103;
sprite_x = 96;
print_flags |= PR_RIGHT;
}
set_texture_color_mod(grphx.im_sprites, r, g, b);
draw_texture_part(grphx.im_sprites, face_x, y - 1, sprite_x, 2, 10, 10, 1, 1);
draw_texture_part(grphx.im_sprites, face_x + offset_x, y - 3, sprite_x, 0, 24, 12, 1, 1);
set_texture_color_mod(grphx.im_sprites, 255, 255, 255);
font::print(print_flags, text_x, y, creator, r, g, b);
}
@ -3422,19 +3423,19 @@ int Graphics::crewcolour(const int t)
switch (t)
{
case 0:
return CYAN;
return EntityColour_CREW_CYAN;
case 1:
return PURPLE;
return EntityColour_CREW_PURPLE;
case 2:
return YELLOW;
return EntityColour_CREW_YELLOW;
case 3:
return RED;
return EntityColour_CREW_RED;
case 4:
return GREEN;
return EntityColour_CREW_GREEN;
case 5:
return BLUE;
return EntityColour_CREW_BLUE;
default:
return 0;
return EntityColour_CREW_CYAN;
}
}

View file

@ -40,6 +40,54 @@ enum ImageNames
#define FADEMODE_IS_FADING(mode) ((mode) != FADE_NONE && (mode) != FADE_FULLY_BLACK)
enum EntityColour
{
EntityColour_CREW_CYAN = 0,
EntityColour_DEAD = 1,
EntityColour_ENEMY_DARK_ORANGE = 2,
EntityColour_TRINKET = 3,
EntityColour_INACTIVE_ENTITY = 4,
EntityColour_ACTIVE_ENTITY = 5,
EntityColour_ENEMY_RED = 6,
EntityColour_ENEMY_GREEN = 7,
EntityColour_ENEMY_PINK = 8,
EntityColour_ENEMY_YELLOW = 9,
EntityColour_WARP_TOKEN = 10,
EntityColour_ENEMY_CYAN = 11,
EntityColour_ENEMY_BLUE = 12,
EntityColour_CREW_GREEN = 13,
EntityColour_CREW_YELLOW = 14,
EntityColour_CREW_RED = 15,
EntityColour_CREW_BLUE = 16,
EntityColour_ENEMY_ORANGE = 17,
EntityColour_ENEMY_GRAY = 18,
EntityColour_CREW_GRAY = 19, // Despite the comment in the color code saying this is for enemies, it's used as a fallback for crew colors.
EntityColour_CREW_PURPLE = 20,
EntityColour_ENEMY_GRAVITRON = 21,
EntityColour_ENEMY_LIGHT_GRAY = 22,
EntityColour_GRAVITRON_INDICATOR = 23,
EntityColour_GRAVITY_LINE_TOUCHED = 24,
EntityColour_GRAVITY_LINE_ACTIVE = 25,
EntityColour_COIN = 26,
EntityColour_PARTICLE_RED = 27,
EntityColour_TROPHY_FINAL_LEVEL = 30,
EntityColour_TROPHY_SPACE_STATION_1 = 31,
EntityColour_TROPHY_SPACE_STATION_2 = 32,
EntityColour_TROPHY_TOWER = 33,
EntityColour_TROPHY_WARP_ZONE = 34,
EntityColour_TROPHY_LABORATORY = 35,
EntityColour_TROPHY_GOLD = 36,
EntityColour_TROPHY_GAME_COMPLETE = 37,
EntityColour_TROPHY_SILVER = 38,
EntityColour_TROPHY_BRONZE = 39,
EntityColour_TROPHY_FLASHY = 40,
EntityColour_TELEPORTER_INACTIVE = 100,
EntityColour_TELEPORTER_ACTIVE = 101,
EntityColour_TELEPORTER_FLASHING = 102
};
class Graphics
{
public:

View file

@ -2737,14 +2737,14 @@ void gameinput(void)
int player = obj.getplayer();
if (INBOUNDS_VEC(player, obj.entities))
{
obj.entities[player].colour = 102;
obj.entities[player].colour = EntityColour_TELEPORTER_FLASHING;
}
int teleporter = obj.getteleporter();
if (INBOUNDS_VEC(teleporter, obj.entities))
{
obj.entities[teleporter].tile = 6;
obj.entities[teleporter].colour = 102;
obj.entities[teleporter].colour = EntityColour_TELEPORTER_FLASHING;
}
//which teleporter script do we use? it depends on the companion!
game.setstate(4000);
@ -2768,16 +2768,16 @@ void gameinput(void)
int player = obj.getplayer();
if (INBOUNDS_VEC(player, obj.entities))
{
obj.entities[player].colour = 102;
obj.entities[player].colour = EntityColour_TELEPORTER_FLASHING;
}
int companion = obj.getcompanion();
if(INBOUNDS_VEC(companion, obj.entities)) obj.entities[companion].colour = 102;
if(INBOUNDS_VEC(companion, obj.entities)) obj.entities[companion].colour = EntityColour_TELEPORTER_FLASHING;
int teleporter = obj.getteleporter();
if (INBOUNDS_VEC(teleporter, obj.entities))
{
obj.entities[teleporter].tile = 6;
obj.entities[teleporter].colour = 102;
obj.entities[teleporter].colour = EntityColour_TELEPORTER_FLASHING;
}
//which teleporter script do we use? it depends on the companion!
game.setstate(3000);
@ -3241,7 +3241,7 @@ static void mapmenuactionpress(const bool version2_2)
int i = obj.getplayer();
if (INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].colour = 102;
obj.entities[i].colour = EntityColour_TELEPORTER_FLASHING;
}
//which teleporter script do we use? it depends on the companion!
@ -3463,14 +3463,14 @@ void teleporterinput(void)
int i = obj.getplayer();
if (INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].colour = 102;
obj.entities[i].colour = EntityColour_TELEPORTER_FLASHING;
}
i = obj.getteleporter();
if (INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].tile = 6;
obj.entities[i].colour = 102;
obj.entities[i].colour = EntityColour_TELEPORTER_FLASHING;
}
//which teleporter script do we use? it depends on the companion!
game.setstate(4000);

View file

@ -486,28 +486,28 @@ int mapclass::maptiletoenemycol(int t)
switch(t)
{
case 0:
return 11;
return EntityColour_ENEMY_CYAN;
break;
case 1:
return 6;
return EntityColour_ENEMY_RED;
break;
case 2:
return 8;
return EntityColour_ENEMY_PINK;
break;
case 3:
return 12;
return EntityColour_ENEMY_BLUE;
break;
case 4:
return 9;
return EntityColour_ENEMY_YELLOW;
break;
case 5:
return 7;
return EntityColour_ENEMY_GREEN;
break;
case 6:
return 18;
return EntityColour_ENEMY_GRAY;
break;
}
return 11;
return EntityColour_ENEMY_CYAN;
}
void mapclass::changefinalcol(int t)
@ -2185,7 +2185,7 @@ void mapclass::loadlevel(int rx, int ry)
{
//A slight varation - she's upside down
obj.createentity(249, 62, 18, 16, 0, 18);
int j = obj.getcrewman(BLUE);
int j = obj.getcrewman(EntityColour_CREW_BLUE);
if (INBOUNDS_VEC(j, obj.entities))
{
obj.entities[j].rule = 7;

View file

@ -1,6 +1,7 @@
#include "Otherlevel.h"
#include "Game.h"
#include "Graphics.h"
#include "Entity.h"
#include "MakeAndPlay.h"
#include "UtilityClass.h"
@ -8904,7 +8905,7 @@ const short* otherlevelclass::loadlevel(int rx, int ry)
//violet
obj.createentity(83, 126, 18, 20, 0, 18);
int crewman = obj.getcrewman(PURPLE);
int crewman = obj.getcrewman(EntityColour_CREW_PURPLE);
if (INBOUNDS_VEC(crewman, obj.entities))
{
obj.entities[crewman].rule = 7;

View file

@ -3102,26 +3102,30 @@ void maprender(void)
font::print(title_flags | PR_2X | PR_CEN, -1, FLIP(45, 8), meta.title, 196, 196, 255 - help.glow);
int sp = SDL_max(10, font::height(PR_FONT_LEVEL));
int desc_pos = (cl.numcrewmates() > 0) ? 70 : 70 + (sp*2);
graphics.print_level_creator(creator_flags, FLIP(70, 8), meta.creator, 196, 196, 255 - help.glow);
font::print(PR_FONT_LEVEL | PR_CEN, -1, FLIP(70+sp, 8), meta.website, 196, 196, 255 - help.glow);
font::print(PR_FONT_LEVEL | PR_CEN, -1, FLIP(70+sp*3, 8), meta.Desc1, 196, 196, 255 - help.glow);
font::print(PR_FONT_LEVEL | PR_CEN, -1, FLIP(70+sp*4, 8), meta.Desc2, 196, 196, 255 - help.glow);
font::print(PR_FONT_LEVEL | PR_CEN, -1, FLIP(70 + sp, 8), meta.website, 196, 196, 255 - help.glow);
font::print(PR_FONT_LEVEL | PR_CEN, -1, FLIP(desc_pos + sp*3, 8), meta.Desc1, 196, 196, 255 - help.glow);
font::print(PR_FONT_LEVEL | PR_CEN, -1, FLIP(desc_pos + sp*4, 8), meta.Desc2, 196, 196, 255 - help.glow);
if (sp <= 10)
{
font::print(PR_FONT_LEVEL | PR_CEN, -1, FLIP(70+sp*5, 8), meta.Desc3, 196, 196, 255 - help.glow);
font::print(PR_FONT_LEVEL | PR_CEN, -1, FLIP(desc_pos + sp*5, 8), meta.Desc3, 196, 196, 255 - help.glow);
}
int remaining = cl.numcrewmates() - game.crewmates();
if (cl.numcrewmates() > 0)
{
int remaining = cl.numcrewmates() - game.crewmates();
char buffer[SCREEN_WIDTH_CHARS + 1];
loc::gettext_plural_fill(
buffer, sizeof(buffer),
"{n_crew|wordy} crewmates remain",
"{n_crew|wordy} crewmate remains",
"n_crew:int",
remaining
);
font::print_wrap(PR_CEN, -1, FLIP(165, 8), buffer, 196, 196, 255 - help.glow);
char buffer[SCREEN_WIDTH_CHARS + 1];
loc::gettext_plural_fill(
buffer, sizeof(buffer),
"{n_crew|wordy} crewmates remain",
"{n_crew|wordy} crewmate remains",
"n_crew:int",
remaining
);
font::print_wrap(PR_CEN, -1, FLIP(165, 8), buffer, 196, 196, 255 - help.glow);
}
}
else
{
@ -3194,21 +3198,26 @@ void maprender(void)
}
/* Stats. */
font::print(PR_CEN | FLIP_PR_CJK_HIGH, -1, FLIP(52, 8), loc::gettext("[Trinkets found]"), 196, 196, 255 - help.glow);
char buffer[SCREEN_WIDTH_CHARS + 1];
vformat_buf(
buffer, sizeof(buffer),
loc::gettext("{n_trinkets|wordy} out of {max_trinkets|wordy}"),
"n_trinkets:int, max_trinkets:int",
game.trinkets(), max_trinkets
);
font::print(PR_CEN | FLIP_PR_CJK_LOW, -1, FLIP(64, 8), buffer, 96, 96, 96);
int deaths_pos = (cl.numtrinkets() > 0) ? 102 : 72;
int time_pos = (cl.numtrinkets() > 0) ? 152 : 132;
if (cl.numtrinkets() > 0)
{
font::print(PR_CEN | FLIP_PR_CJK_HIGH, -1, FLIP(52, 8), loc::gettext("[Trinkets found]"), 196, 196, 255 - help.glow);
char buffer[SCREEN_WIDTH_CHARS + 1];
vformat_buf(
buffer, sizeof(buffer),
loc::gettext("{n_trinkets|wordy} out of {max_trinkets|wordy}"),
"n_trinkets:int, max_trinkets:int",
game.trinkets(), max_trinkets
);
font::print(PR_CEN | FLIP_PR_CJK_LOW, -1, FLIP(64, 8), buffer, 96, 96, 96);
}
font::print(PR_CEN | FLIP_PR_CJK_HIGH, -1, FLIP(102, 8), loc::gettext("[Number of Deaths]"), 196, 196, 255 - help.glow);
font::print(PR_CEN | FLIP_PR_CJK_LOW, -1, FLIP(114, 8), help.String(game.deathcounts), 96, 96, 96);
font::print(PR_CEN | FLIP_PR_CJK_HIGH, -1, FLIP(deaths_pos, 8), loc::gettext("[Number of Deaths]"), 196, 196, 255 - help.glow);
font::print(PR_CEN | FLIP_PR_CJK_LOW, -1, FLIP(deaths_pos + 12, 8), help.String(game.deathcounts), 96, 96, 96);
font::print(PR_CEN | FLIP_PR_CJK_HIGH, -1, FLIP(152, 8), loc::gettext("[Time Taken]"), 196, 196, 255 - help.glow);
font::print(PR_CEN | FLIP_PR_CJK_LOW, -1, FLIP(164, 8), game.timestring(), 96, 96, 96);
font::print(PR_CEN | FLIP_PR_CJK_HIGH, -1, FLIP(time_pos, 8), loc::gettext("[Time Taken]"), 196, 196, 255 - help.glow);
font::print(PR_CEN | FLIP_PR_CJK_LOW, -1, FLIP(time_pos + 12, 8), game.timestring(), 96, 96, 96);
break;
}
case 3:

View file

@ -134,16 +134,16 @@ void scriptclass::tokenize( const std::string& t )
static int getcolorfromname(std::string name)
{
if (name == "player") return CYAN;
else if (name == "cyan") return CYAN;
else if (name == "red") return RED;
else if (name == "green") return GREEN;
else if (name == "yellow") return YELLOW;
else if (name == "blue") return BLUE;
else if (name == "purple") return PURPLE;
else if (name == "customcyan") return CYAN;
else if (name == "gray") return GRAY;
else if (name == "teleporter") return TELEPORTER;
if (name == "player") return EntityColour_CREW_CYAN;
else if (name == "cyan") return EntityColour_CREW_CYAN;
else if (name == "red") return EntityColour_CREW_RED;
else if (name == "green") return EntityColour_CREW_GREEN;
else if (name == "yellow") return EntityColour_CREW_YELLOW;
else if (name == "blue") return EntityColour_CREW_BLUE;
else if (name == "purple") return EntityColour_CREW_PURPLE;
else if (name == "customcyan") return EntityColour_CREW_CYAN;
else if (name == "gray") return EntityColour_CREW_GRAY;
else if (name == "teleporter") return EntityColour_TELEPORTER_FLASHING;
int color = help.Int(name.c_str(), -1);
if (color < 0) return -1; // Not a number (or it's negative), so we give up
@ -158,7 +158,6 @@ static int getcrewmanfromname(std::string name)
return obj.getcrewman(color);
}
/* Also used in gamestate 1001. */
void foundtrinket_textbox1(textboxclass* THIS);
void foundtrinket_textbox2(textboxclass* THIS);
@ -638,37 +637,37 @@ void scriptclass::run(void)
//the first word is the object to position relative to
if (words[1] == "player")
{
i = obj.getcustomcrewman(0);
i = obj.getcustomcrewman(EntityColour_CREW_CYAN);
j = obj.entities[i].dir;
}
else if (words[1] == "cyan")
{
i = obj.getcustomcrewman(0);
i = obj.getcustomcrewman(EntityColour_CREW_CYAN);
j = obj.entities[i].dir;
}
else if (words[1] == "purple")
{
i = obj.getcustomcrewman(1);
i = obj.getcustomcrewman(EntityColour_CREW_PURPLE);
j = obj.entities[i].dir;
}
else if (words[1] == "yellow")
{
i = obj.getcustomcrewman(2);
i = obj.getcustomcrewman(EntityColour_CREW_YELLOW);
j = obj.entities[i].dir;
}
else if (words[1] == "red")
{
i = obj.getcustomcrewman(3);
i = obj.getcustomcrewman(EntityColour_CREW_RED);
j = obj.entities[i].dir;
}
else if (words[1] == "green")
{
i = obj.getcustomcrewman(4);
i = obj.getcustomcrewman(EntityColour_CREW_GREEN);
j = obj.entities[i].dir;
}
else if (words[1] == "blue")
{
i = obj.getcustomcrewman(5);
i = obj.getcustomcrewman(EntityColour_CREW_BLUE);
j = obj.entities[i].dir;
}
else if (words[1] == "centerx")
@ -910,7 +909,7 @@ void scriptclass::run(void)
obj.entities[i].lerpoldxp = obj.entities[i].xp;
obj.entities[i].lerpoldyp = obj.entities[i].yp;
obj.entities[i].size = 13;
obj.entities[i].colour = 23;
obj.entities[i].colour = EntityColour_GRAVITRON_INDICATOR;
obj.entities[i].cx = 36;// 6;
obj.entities[i].cy = 12+80;// 2;
obj.entities[i].h = 126-80;// 21;
@ -925,7 +924,7 @@ void scriptclass::run(void)
obj.entities[i].xp = 100;
obj.entities[i].lerpoldxp = obj.entities[i].xp;
obj.entities[i].size = 0;
obj.entities[i].colour = 0;
obj.entities[i].colour = EntityColour_CREW_CYAN;
obj.entities[i].cx = 6;
obj.entities[i].cy = 2;
obj.entities[i].h = 21;
@ -1022,47 +1021,47 @@ void scriptclass::run(void)
{
if (words[1] == "player")
{
i=obj.getcustomcrewman(0);
i=obj.getcustomcrewman(EntityColour_CREW_CYAN);
obj.customcrewmoods[0]=ss_toi(words[2]);
}
else if (words[1] == "cyan")
{
i=obj.getcustomcrewman(0);
i=obj.getcustomcrewman(EntityColour_CREW_CYAN);
obj.customcrewmoods[0]=ss_toi(words[2]);
}
else if (words[1] == "customcyan")
{
i=obj.getcustomcrewman(0);
i=obj.getcustomcrewman(EntityColour_CREW_CYAN);
obj.customcrewmoods[0]=ss_toi(words[2]);
}
else if (words[1] == "red")
{
i=obj.getcustomcrewman(3);
i=obj.getcustomcrewman(EntityColour_CREW_RED);
obj.customcrewmoods[3]=ss_toi(words[2]);
}
else if (words[1] == "green")
{
i=obj.getcustomcrewman(4);
i=obj.getcustomcrewman(EntityColour_CREW_GREEN);
obj.customcrewmoods[4]=ss_toi(words[2]);
}
else if (words[1] == "yellow")
{
i=obj.getcustomcrewman(2);
i=obj.getcustomcrewman(EntityColour_CREW_YELLOW);
obj.customcrewmoods[2]=ss_toi(words[2]);
}
else if (words[1] == "blue")
{
i=obj.getcustomcrewman(5);
i=obj.getcustomcrewman(EntityColour_CREW_BLUE);
obj.customcrewmoods[5]=ss_toi(words[2]);
}
else if (words[1] == "purple")
{
i=obj.getcustomcrewman(1);
i=obj.getcustomcrewman(EntityColour_CREW_PURPLE);
obj.customcrewmoods[1]=ss_toi(words[2]);
}
else if (words[1] == "pink")
{
i=obj.getcustomcrewman(1);
i=obj.getcustomcrewman(EntityColour_CREW_PURPLE);
obj.customcrewmoods[1]=ss_toi(words[2]);
}
@ -1188,7 +1187,7 @@ void scriptclass::run(void)
if (INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].tile = 6;
obj.entities[i].colour = 102;
obj.entities[i].colour = EntityColour_TELEPORTER_FLASHING;
}
}
else if (words[0] == "changecolour")
@ -1650,7 +1649,7 @@ void scriptclass::run(void)
{
if (obj.entities[j].type == EntityType_TERMINAL)
{
obj.entities[j].colour = 4;
obj.entities[j].colour = EntityColour_INACTIVE_ENTITY;
}
}
if (ss_toi(words[1]) == 1)
@ -1660,7 +1659,7 @@ void scriptclass::run(void)
{
if (obj.entities[j].xp == 88 && obj.entities[j].yp==80)
{
obj.entities[j].colour = 5;
obj.entities[j].colour = EntityColour_ACTIVE_ENTITY;
}
}
}
@ -1671,7 +1670,7 @@ void scriptclass::run(void)
{
if (obj.entities[j].xp == 128 && obj.entities[j].yp==80)
{
obj.entities[j].colour = 5;
obj.entities[j].colour = EntityColour_ACTIVE_ENTITY;
}
}
}
@ -1682,7 +1681,7 @@ void scriptclass::run(void)
{
if (obj.entities[j].xp == 176 && obj.entities[j].yp==80)
{
obj.entities[j].colour = 5;
obj.entities[j].colour = EntityColour_ACTIVE_ENTITY;
}
}
}
@ -1693,7 +1692,7 @@ void scriptclass::run(void)
{
if (obj.entities[j].xp == 216 && obj.entities[j].yp==80)
{
obj.entities[j].colour = 5;
obj.entities[j].colour = EntityColour_ACTIVE_ENTITY;
}
}
}
@ -1704,7 +1703,7 @@ void scriptclass::run(void)
{
if (obj.entities[j].xp == 88 && obj.entities[j].yp==128)
{
obj.entities[j].colour = 5;
obj.entities[j].colour = EntityColour_ACTIVE_ENTITY;
}
}
}
@ -1715,7 +1714,7 @@ void scriptclass::run(void)
{
if (obj.entities[j].xp == 176 && obj.entities[j].yp==128)
{
obj.entities[j].colour = 5;
obj.entities[j].colour = EntityColour_ACTIVE_ENTITY;
}
}
}
@ -1726,7 +1725,7 @@ void scriptclass::run(void)
{
if (obj.entities[j].xp == 40 && obj.entities[j].yp==40)
{
obj.entities[j].colour = 5;
obj.entities[j].colour = EntityColour_ACTIVE_ENTITY;
}
}
}
@ -1737,7 +1736,7 @@ void scriptclass::run(void)
{
if (obj.entities[j].xp == 216 && obj.entities[j].yp==128)
{
obj.entities[j].colour = 5;
obj.entities[j].colour = EntityColour_ACTIVE_ENTITY;
}
}
}
@ -1748,7 +1747,7 @@ void scriptclass::run(void)
{
if (obj.entities[j].xp == 128 && obj.entities[j].yp==128)
{
obj.entities[j].colour = 5;
obj.entities[j].colour = EntityColour_ACTIVE_ENTITY;
}
}
}
@ -1759,7 +1758,7 @@ void scriptclass::run(void)
{
if (obj.entities[j].xp == 264 && obj.entities[j].yp==40)
{
obj.entities[j].colour = 5;
obj.entities[j].colour = EntityColour_ACTIVE_ENTITY;
}
}
}
@ -1770,31 +1769,31 @@ void scriptclass::run(void)
if (words[1] == "red")
{
i = 3;
crew_color = RED;
crew_color = EntityColour_CREW_RED;
}
else if (words[1] == "green")
{
i = 4;
crew_color = GREEN;
crew_color = EntityColour_CREW_GREEN;
}
else if (words[1] == "yellow")
{
i = 2;
crew_color = YELLOW;
crew_color = EntityColour_CREW_YELLOW;
}
else if (words[1] == "blue")
{
i = 5;
crew_color = BLUE;
crew_color = EntityColour_CREW_BLUE;
}
else if (words[1] == "purple")
{
i = 1;
crew_color = PURPLE;
crew_color = EntityColour_CREW_PURPLE;
}
int crewman = obj.getcrewman(crew_color);
if (INBOUNDS_VEC(crewman, obj.entities) && crew_color == GREEN)
if (INBOUNDS_VEC(crewman, obj.entities) && crew_color == EntityColour_CREW_GREEN)
{
obj.createblock(5, obj.entities[crewman].xp - 32, obj.entities[crewman].yp-20, 96, 60, i, "", (i == 35));
}
@ -1850,8 +1849,9 @@ void scriptclass::run(void)
i = obj.getplayer();
if (INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].colour = 0;
obj.entities[i].colour = cl.player_colour;
}
game.savecolour = cl.player_colour;
}
else if (words[0] == "changeplayercolour")
{
@ -1875,7 +1875,7 @@ void scriptclass::run(void)
i = obj.getteleporter();
if (INBOUNDS_VEC(i, obj.entities))
{
obj.entities[i].colour = 101;
obj.entities[i].colour = EntityColour_TELEPORTER_ACTIVE;
}
}
else if (words[0] == "foundtrinket")
@ -1990,9 +1990,9 @@ void scriptclass::run(void)
else if (words[0] == "createlastrescued")
{
r = graphics.crewcolour(game.lastsaved);
if (r == 0 || r == PURPLE)
if (r == EntityColour_CREW_CYAN || r == EntityColour_CREW_PURPLE)
{
r = GRAY; // Default to gray if invalid color.
r = EntityColour_CREW_GRAY; // Default to gray if invalid color.
}
obj.createentity(200, 153, 18, r, 0, 19, 30);
@ -2652,7 +2652,7 @@ void scriptclass::startgamemode(const enum StartMode mode)
}
}
/* Containers which need to be reset before gameplay starts
/* State which needs to be reset before gameplay starts
* ex. before custom levels get loaded */
switch (mode)
@ -2662,6 +2662,8 @@ void scriptclass::startgamemode(const enum StartMode mode)
default:
textbox_colours.clear();
add_default_colours();
cl.onewaycol_override = false;
cl.player_colour = 0;
break;
}
@ -3207,7 +3209,7 @@ void scriptclass::hardreset(void)
game.savey = 0;
game.savegc = 0;
}
game.savecolour = 0;
game.savecolour = cl.player_colour;
game.intimetrial = false;
game.timetrialcountdown = 0;