add a Sega Mega Drive / Genesis drawing mode
This commit is contained in:
		
							parent
							
								
									537334f327
								
							
						
					
					
						commit
						d2777d79cb
					
				@ -181,6 +181,7 @@ static int Check_block_constraints(enum IMAGE_MODES mode)
 | 
			
		||||
  int block_width = 8, block_height = 8, max_colors = 2;  // default values
 | 
			
		||||
  int error_count = 0;
 | 
			
		||||
  byte errcol = 17;
 | 
			
		||||
  byte pal_mask;
 | 
			
		||||
 | 
			
		||||
  switch (mode)
 | 
			
		||||
  {
 | 
			
		||||
@ -198,9 +199,14 @@ static int Check_block_constraints(enum IMAGE_MODES mode)
 | 
			
		||||
      max_colors = 4;
 | 
			
		||||
      errcol = 33;
 | 
			
		||||
      break;
 | 
			
		||||
    case IMAGE_MODE_MEGADRIVE:
 | 
			
		||||
      max_colors = 16;
 | 
			
		||||
      errcol = 65;
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      return -1;  // unsupported mode
 | 
			
		||||
  }
 | 
			
		||||
  pal_mask = ~(max_colors - 1);
 | 
			
		||||
 | 
			
		||||
  for (y = 0; y <= Main.image_height - block_height; y += block_height)
 | 
			
		||||
  {
 | 
			
		||||
@ -215,11 +221,11 @@ static int Check_block_constraints(enum IMAGE_MODES mode)
 | 
			
		||||
        {
 | 
			
		||||
          int i;
 | 
			
		||||
          byte col = Read_pixel_from_layer(0, x+x2, y+y2);
 | 
			
		||||
          if (mode == IMAGE_MODE_GBC)
 | 
			
		||||
          if (mode == IMAGE_MODE_GBC || mode == IMAGE_MODE_MEGADRIVE)
 | 
			
		||||
          {
 | 
			
		||||
            if (count == 0)
 | 
			
		||||
              c[count++] = col;
 | 
			
		||||
            else if ((col & ~3) != (c[0] & ~3))  // compare palettes
 | 
			
		||||
            else if ((col & pal_mask) != (c[0] & pal_mask))  // compare palettes
 | 
			
		||||
            {
 | 
			
		||||
              if (Main.backups->Pages->Nb_layers < 2)
 | 
			
		||||
                Add_layer(Main.backups, 1);
 | 
			
		||||
@ -566,6 +572,7 @@ void Button_Constraint_menu(void)
 | 
			
		||||
  } modes[] = {
 | 
			
		||||
    {IMAGE_MODE_ZX,      "ZX Spectrum",   "2 colors per 8x8 block", 1}, // 256x192
 | 
			
		||||
    {IMAGE_MODE_GBC,     "Game Boy Color","4 colors per 8x8 block", 1}, // 160x144 to 256x256
 | 
			
		||||
    {IMAGE_MODE_MEGADRIVE,"Sega MegaDrive","16colors per 8x8 block",1}, // 256x224 to 1024x256
 | 
			
		||||
    {IMAGE_MODE_THOMSON, "40col (MO/TO)", "2 colors per 8x1 block", 1}, // 320x200
 | 
			
		||||
    {IMAGE_MODE_EGX,     "EGX (CPC)",     "Alternate Mode0/Mode1 ", 0}, // 320x200
 | 
			
		||||
    {IMAGE_MODE_EGX2,    "EGX2 (CPC)",    "Alternate Mode1/Mode2 ", 0}, // 640x200
 | 
			
		||||
@ -620,7 +627,7 @@ void Button_Constraint_menu(void)
 | 
			
		||||
    }
 | 
			
		||||
    else if (clicked_button == 3)
 | 
			
		||||
    {
 | 
			
		||||
      if (Selected_Constraint_Mode == IMAGE_MODE_GBC)
 | 
			
		||||
      if (Selected_Constraint_Mode == IMAGE_MODE_GBC || Selected_Constraint_Mode == IMAGE_MODE_MEGADRIVE)
 | 
			
		||||
        set_palette = 1;  // activate palette back when switching from GBC
 | 
			
		||||
      Selected_Constraint_Mode = Window_attribute2;
 | 
			
		||||
      for (i = 0; i < sizeof(modes)/sizeof(modes[0]) ; i++)
 | 
			
		||||
@ -632,7 +639,7 @@ void Button_Constraint_menu(void)
 | 
			
		||||
          Display_cursor();
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
      if (Selected_Constraint_Mode == IMAGE_MODE_GBC)
 | 
			
		||||
      if (Selected_Constraint_Mode == IMAGE_MODE_GBC || Selected_Constraint_Mode == IMAGE_MODE_MEGADRIVE)
 | 
			
		||||
        set_palette = 0;
 | 
			
		||||
    }
 | 
			
		||||
    else if (clicked_button == 4) // palette
 | 
			
		||||
@ -714,6 +721,7 @@ void Button_Constraint_menu(void)
 | 
			
		||||
          case IMAGE_MODE_ZX:
 | 
			
		||||
          case IMAGE_MODE_GBC:
 | 
			
		||||
          case IMAGE_MODE_C64HIRES:
 | 
			
		||||
          case IMAGE_MODE_MEGADRIVE:
 | 
			
		||||
            Snap_width = 8;
 | 
			
		||||
            Snap_height = 8;
 | 
			
		||||
            break;
 | 
			
		||||
@ -759,6 +767,13 @@ void Button_Constraint_menu(void)
 | 
			
		||||
            Fore_color = 7;
 | 
			
		||||
            Back_color = 0;
 | 
			
		||||
            break;
 | 
			
		||||
          case IMAGE_MODE_MEGADRIVE:  // 64 colors among 512
 | 
			
		||||
            memset(Main.palette + 64, 0, sizeof(T_Components) * (256 - 64));
 | 
			
		||||
            Main.palette[65].R = 255; // for color clashes
 | 
			
		||||
            First_color_in_palette = 0;
 | 
			
		||||
            Fore_color = 15;
 | 
			
		||||
            Back_color = 0;
 | 
			
		||||
            break;
 | 
			
		||||
          case IMAGE_MODE_GBC:  // 32 colors among 32768
 | 
			
		||||
            memset(Main.palette + 32, 0, sizeof(T_Components) * (256 - 32));
 | 
			
		||||
            Main.palette[33].R = 255; // for color clashes
 | 
			
		||||
 | 
			
		||||
@ -631,6 +631,7 @@ enum IMAGE_MODES
 | 
			
		||||
  IMAGE_MODE_C64FLI,    ///< C64 Flexible Line Interpretation
 | 
			
		||||
  IMAGE_MODE_HGR,       ///< Apple 2 HGR
 | 
			
		||||
  IMAGE_MODE_DHGR,      ///< Apple 2 DHGR
 | 
			
		||||
  IMAGE_MODE_MEGADRIVE, ///< Sega Mega Drive / Genesis
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// Circle / Ellipse Modes
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										16
									
								
								src/graph.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								src/graph.c
									
									
									
									
									
								
							@ -3413,24 +3413,33 @@ done:
 | 
			
		||||
/// Paint a pixel with GBC constraints
 | 
			
		||||
///
 | 
			
		||||
/// Same 4 color palette for all pixels in a 8x8 block.
 | 
			
		||||
///
 | 
			
		||||
/// Megadrive constraints are nearly the same : same 16 color palette in a 8x8 tile
 | 
			
		||||
static void Pixel_in_screen_gbc_with_opt_preview(word x,word y,byte color,int preview)
 | 
			
		||||
{
 | 
			
		||||
  word startx = x & ~7;
 | 
			
		||||
  word starty = y & ~7;
 | 
			
		||||
  word x2, y2;
 | 
			
		||||
  byte palette;
 | 
			
		||||
  byte col_mask, pal_mask;
 | 
			
		||||
 | 
			
		||||
  if (Main.backups->Pages->Image_mode == IMAGE_MODE_MEGADRIVE)
 | 
			
		||||
    col_mask = 15;
 | 
			
		||||
  else
 | 
			
		||||
    col_mask = 3;
 | 
			
		||||
  pal_mask = ~col_mask;
 | 
			
		||||
 | 
			
		||||
  // first set the pixel
 | 
			
		||||
  Pixel_in_screen_layered_with_opt_preview(x,y,color,preview);
 | 
			
		||||
  palette = color & ~3;
 | 
			
		||||
  palette = color & pal_mask;
 | 
			
		||||
  // force all pixels of the block to the same palette
 | 
			
		||||
  for (y2 = 0; y2 < 8; y2++)
 | 
			
		||||
  {
 | 
			
		||||
    for (x2 = 0; x2 < 8; x2++)
 | 
			
		||||
    {
 | 
			
		||||
      byte col = Read_pixel_from_current_layer(startx+x2, starty+y2);
 | 
			
		||||
      if ((col & ~3) != palette)
 | 
			
		||||
        Pixel_in_screen_layered_with_opt_preview(startx+x2, starty+y2, palette | (col & 3), preview);
 | 
			
		||||
      if ((col & pal_mask) != palette)
 | 
			
		||||
        Pixel_in_screen_layered_with_opt_preview(startx+x2, starty+y2, palette | (col & col_mask), preview);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -3912,6 +3921,7 @@ void Update_pixel_renderer(void)
 | 
			
		||||
    Pixel_in_current_screen_with_opt_preview = Pixel_in_screen_thomson_with_opt_preview;
 | 
			
		||||
    break;
 | 
			
		||||
  case IMAGE_MODE_GBC:
 | 
			
		||||
  case IMAGE_MODE_MEGADRIVE:
 | 
			
		||||
    Pixel_in_current_screen_with_opt_preview = Pixel_in_screen_gbc_with_opt_preview;
 | 
			
		||||
    break;
 | 
			
		||||
  case IMAGE_MODE_C64HIRES:
 | 
			
		||||
 | 
			
		||||
@ -1946,10 +1946,10 @@ static const T_Help_table helptable_effects[] =
 | 
			
		||||
  HELP_TEXT ("")
 | 
			
		||||
  HELP_BOLD ("Block modes")
 | 
			
		||||
  HELP_TEXT ("ZX Spectrum, Game Boy Color, Thomson MOTO,")
 | 
			
		||||
  HELP_TEXT ("C64 MultiColor, C64 HiRes are modes with")
 | 
			
		||||
  HELP_TEXT ("block constraints. Only a limited count of")
 | 
			
		||||
  HELP_TEXT ("different colors (generaly 2) is allowed in")
 | 
			
		||||
  HELP_TEXT ("a pixel block.")
 | 
			
		||||
  HELP_TEXT ("Mega Drive, C64 MultiColor and C64 HiRes")
 | 
			
		||||
  HELP_TEXT ("are modes with block constraints. Only a")
 | 
			
		||||
  HELP_TEXT ("limited count of different colors is")
 | 
			
		||||
  HELP_TEXT ("allowed in a pixel block.")
 | 
			
		||||
  HELP_TEXT ("")
 | 
			
		||||
  HELP_BOLD ("Game Boy Color")
 | 
			
		||||
  HELP_TEXT ("All pixels within a 8x8 block should be in")
 | 
			
		||||
@ -1962,6 +1962,15 @@ static const T_Help_table helptable_effects[] =
 | 
			
		||||
  HELP_TEXT ("Color #0 of each palette is transparent for")
 | 
			
		||||
  HELP_TEXT ("Game Boy sprites.")
 | 
			
		||||
  HELP_TEXT ("")
 | 
			
		||||
  HELP_BOLD ("Sega Mega Drive / Genesis")
 | 
			
		||||
  HELP_TEXT ("The constraints are similar to GBC mode,")
 | 
			
		||||
  HELP_TEXT ("there are 4 palettes of 16 colors each.")
 | 
			
		||||
  HELP_TEXT ("Color #0 of each palette is transparent.")
 | 
			
		||||
  HELP_TEXT ("")
 | 
			
		||||
  HELP_BOLD ("ZX Spectrum")
 | 
			
		||||
  HELP_TEXT ("The two colors of the 8x8 block must share")
 | 
			
		||||
  HELP_TEXT ("the same bightness bit.")
 | 
			
		||||
  HELP_TEXT ("")
 | 
			
		||||
  HELP_TEXT ("")
 | 
			
		||||
  HELP_BOLD ("C64 Flexible Line Interpretation (FLI)")
 | 
			
		||||
  HELP_TEXT ("- Layer 1 contains the background colors,")
 | 
			
		||||
 | 
			
		||||
@ -65,7 +65,8 @@ static const struct {
 | 
			
		||||
  { IMAGE_MODE_C64MULTI,  "C64_MULTICOLOR" },
 | 
			
		||||
  { IMAGE_MODE_C64FLI,    "C64_FLI" },
 | 
			
		||||
  { IMAGE_MODE_HGR,       "APPLE2_HGR" },
 | 
			
		||||
  { IMAGE_MODE_DHGR,      "APPLE2_DHGR" }
 | 
			
		||||
  { IMAGE_MODE_DHGR,      "APPLE2_DHGR" },
 | 
			
		||||
  { IMAGE_MODE_MEGADRIVE, "SEGAMEGADRIVE" },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const char * Constraint_mode_label(enum IMAGE_MODES mode)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user