(height 15)
(background "")
(music "Mortimers_chipdisko.mod")
- (bkgd_red 100)
- (bkgd_green 230)
- (bkgd_blue 140)
+ (bkgd_top_red 120)
+ (bkgd_top_green 120)
+ (bkgd_top_blue 160)
+ (bkgd_bottom_red 215)
+ (bkgd_bottom_green 215)
+ (bkgd_bottom_blue 250)
(time 190)
(gravity 10.0)
(particle_system "clouds")
{
fillrect(base.x - scroll_x, base.y,
32,32,
- plevel->bkgd_red, plevel->bkgd_green, plevel->bkgd_blue, 0);
+ plevel->bkgd_top_red, plevel->bkgd_top_green, plevel->bkgd_top_blue, 0);
+// FIXME: doesn't respect the gradient, futhermore is this necessary at all??
}
else
{
width = 21;
time_left = 100;
gravity = 10.;
- bkgd_red = 0;
- bkgd_green = 0;
- bkgd_blue = 0;
+ bkgd_top_red = 0;
+ bkgd_top_green = 0;
+ bkgd_top_blue = 0;
+ bkgd_bottom_red = 0;
+ bkgd_bottom_green = 0;
+ bkgd_bottom_blue = 0;
endpos = 0;
for(int i = 0; i < 15; ++i)
reader.read_int("version", &version);
reader.read_int("width", &width);
reader.read_int("time", &time_left);
- reader.read_int("bkgd_red", &bkgd_red);
- reader.read_int("bkgd_green", &bkgd_green);
- reader.read_int("bkgd_blue", &bkgd_blue);
+ reader.read_int("bkgd_top_red", &bkgd_top_red);
+ reader.read_int("bkgd_top_green", &bkgd_top_green);
+ reader.read_int("bkgd_top_blue", &bkgd_top_blue);
+ reader.read_int("bkgd_bottom_red", &bkgd_bottom_red);
+ reader.read_int("bkgd_bottom_green", &bkgd_bottom_green);
+ reader.read_int("bkgd_bottom_blue", &bkgd_bottom_blue);
reader.read_float("gravity", &gravity);
reader.read_string("name", &name);
reader.read_string("theme", &theme);
fprintf(fi," (music \"%s\")\n", song_title.c_str());
fprintf(fi," (background \"%s\")\n", bkgd_image.c_str());
fprintf(fi," (particle_system \"%s\")\n", particle_system.c_str());
- fprintf(fi," (bkgd_red %d)\n", bkgd_red);
- fprintf(fi," (bkgd_green %d)\n", bkgd_green);
- fprintf(fi," (bkgd_blue %d)\n", bkgd_blue);
+ fprintf(fi," (bkgd_top_red %d)\n", bkgd_top_red);
+ fprintf(fi," (bkgd_top_green %d)\n", bkgd_top_green);
+ fprintf(fi," (bkgd_top_blue %d)\n", bkgd_top_blue);
+ fprintf(fi," (bkgd_bottom_red %d)\n", bkgd_bottom_red);
+ fprintf(fi," (bkgd_bottom_green %d)\n", bkgd_bottom_green);
+ fprintf(fi," (bkgd_bottom_blue %d)\n", bkgd_bottom_blue);
fprintf(fi," (time %d)\n", time_left);
fprintf(fi," (width %d)\n", width);
fprintf(fi," (gravity %2.1f)\n", gravity);
unsigned int* ia_tiles[15]; /* Tiles which can interact in the game (solids for example)*/
unsigned int* fg_tiles[15]; /* Tiles in the foreground */
int time_left;
- int bkgd_red;
- int bkgd_green;
- int bkgd_blue;
+ int bkgd_top_red;
+ int bkgd_top_green;
+ int bkgd_top_blue;
+ int bkgd_bottom_red;
+ int bkgd_bottom_green;
+ int bkgd_bottom_blue;
int width;
int endpos;
float gravity;
{
switch (level_settings_menu->check())
{
- case 13:
+ case 16:
apply_level_settings_menu();
Menu::set_current(leveleditor_menu);
break;
level_settings_menu->additem(MN_NUMFIELD,"Length ",0,0);
level_settings_menu->additem(MN_NUMFIELD,"Time ",0,0);
level_settings_menu->additem(MN_NUMFIELD,"Gravity",0,0);
- level_settings_menu->additem(MN_NUMFIELD,"Red ",0,0);
- level_settings_menu->additem(MN_NUMFIELD,"Green ",0,0);
- level_settings_menu->additem(MN_NUMFIELD,"Blue ",0,0);
+ level_settings_menu->additem(MN_NUMFIELD,"Top Red ",0,0);
+ level_settings_menu->additem(MN_NUMFIELD,"Top Green ",0,0);
+ level_settings_menu->additem(MN_NUMFIELD,"Top Blue ",0,0);
+ level_settings_menu->additem(MN_NUMFIELD,"Bottom Red ",0,0);
+ level_settings_menu->additem(MN_NUMFIELD,"Bottom Green",0,0);
+ level_settings_menu->additem(MN_NUMFIELD,"Bottom Blue",0,0);
level_settings_menu->additem(MN_HL,"",0,0);
level_settings_menu->additem(MN_ACTION,"Apply Changes",0,0);
level_settings_menu->item[7].change_input(str);
sprintf(str,"%2.0f",le_current_level->gravity);
level_settings_menu->item[8].change_input(str);
- sprintf(str,"%d",le_current_level->bkgd_red);
+ sprintf(str,"%d",le_current_level->bkgd_top_red);
level_settings_menu->item[9].change_input(str);
- sprintf(str,"%d",le_current_level->bkgd_green);
- level_settings_menu->item[10].change_input(str);
- sprintf(str,"%d",le_current_level->bkgd_blue);
- level_settings_menu->item[11].change_input(str);
+ sprintf(str,"%d",le_current_level->bkgd_top_green);
+ level_settings_menu->item[10].change_input(str);
+ sprintf(str,"%d",le_current_level->bkgd_top_blue);
+ level_settings_menu->item[11].change_input(str);
+ sprintf(str,"%d",le_current_level->bkgd_bottom_red);
+ level_settings_menu->item[12].change_input(str);
+ sprintf(str,"%d",le_current_level->bkgd_bottom_green);
+ level_settings_menu->item[13].change_input(str);
+ sprintf(str,"%d",le_current_level->bkgd_bottom_blue);
+ level_settings_menu->item[14].change_input(str);
}
void update_subset_settings_menu()
le_current_level->change_size(atoi(level_settings_menu->item[6].input));
le_current_level->time_left = atoi(level_settings_menu->item[7].input);
le_current_level->gravity = atof(level_settings_menu->item[8].input);
- le_current_level->bkgd_red = atoi(level_settings_menu->item[9].input);
- le_current_level->bkgd_green = atoi(level_settings_menu->item[10].input);
- le_current_level->bkgd_blue = atoi(level_settings_menu->item[11].input);
+ le_current_level->bkgd_top_red = atoi(level_settings_menu->item[9].input);
+ le_current_level->bkgd_top_green = atoi(level_settings_menu->item[10].input);
+ le_current_level->bkgd_top_blue = atoi(level_settings_menu->item[11].input);
+ le_current_level->bkgd_bottom_red = atoi(level_settings_menu->item[12].input);
+ le_current_level->bkgd_bottom_green = atoi(level_settings_menu->item[13].input);
+ le_current_level->bkgd_bottom_blue = atoi(level_settings_menu->item[14].input);
}
void save_subset_settings_menu()
}
else
{
- clearscreen(le_current_level->bkgd_red, le_current_level->bkgd_green, le_current_level->bkgd_blue);
+ drawgradient(le_current_level->bkgd_top_red, le_current_level->bkgd_top_green, le_current_level->bkgd_top_blue,
+ le_current_level->bkgd_bottom_red, le_current_level->bkgd_bottom_green, le_current_level->bkgd_bottom_blue);
}
/* clearscreen(current_level.bkgd_red, current_level.bkgd_green, current_level.bkgd_blue); */
#endif
}
+/* --- DRAWS A VERTICAL GRADIENT --- */
+
+void drawgradient(int top_r, int top_g, int top_b, int bot_r, int bot_g, int bot_b)
+{
+#ifndef NOOPENGL
+ if(use_gl)
+ {
+ glBegin(GL_QUADS);
+ glColor3ub(top_r, top_g, top_b);
+ glVertex2f(0, 0);
+ glVertex2f(640, 0);
+ glColor3ub(bot_r, bot_g, bot_b);
+ glVertex2f(640, 480);
+ glVertex2f(0, 480);
+ glEnd();
+ }
+ else
+ {
+#endif
+
+ SDL_Rect r;
+ r.x = 0;
+ r.w = 640;
+ r.h = 2;
+
+ for(float y = 0; y < 480; y += 2)
+ {
+ r.y = (int)y;
+
+ SDL_FillRect(screen, &r, SDL_MapRGB(screen->format, (int)(((float)(top_r-bot_r)/640) * y + top_r), (int)(((float)(top_g-bot_g)/640) * y + top_g), (int)(((float)(top_b-bot_b)/640) * y + top_b)));
+ }
+/* calculates the color for each line, based in the generic equation for functions: y = mx + b */
+
+#ifndef NOOPENGL
+
+ }
+#endif
+}
+
/* 'Stolen' from the SDL documentation.
* Set the pixel at (x, y) to the given value
* NOTE: The surface must be locked before calling this!
void drawline(int x1, int y1, int x2, int y2, int r, int g, int b, int a);
void clearscreen(int r, int g, int b);
+void drawgradient(int top_r, int top_g, int top_b, int bot_r, int bot_g, int bot_b);
void fillrect(float x, float y, float w, float h, int r, int g, int b, int a);
void updatescreen(void);
void flipscreen(void);
}
else
{
- clearscreen(level->bkgd_red, level->bkgd_green, level->bkgd_blue);
+ drawgradient(level->bkgd_top_red, level->bkgd_top_green, level->bkgd_top_blue,
+ level->bkgd_bottom_red, level->bkgd_bottom_green, level->bkgd_bottom_blue);
}
/* Draw particle systems (background) */