public void MergeIcons(DaxBlock srcIcon) /* icon_xx, could be implemented using alpha-blending */ { for (var i = 0; i < srcIcon.Bpp; i++) { var a = ImageData[i]; var b = srcIcon.ImageData[i]; if (a == 16 && b == 16) { ImageData[i] = 16; } else if (a == 16) { ImageData[i] = b; } else if (b == 16) { ImageData[i] = a; } else { //TODO - not sure about this... more likely there should be a presedant, not just blending on the color code.. ImageData[i] = (byte)(a | b); } } }
// sub_7000A internal static void DrawMaybeOverlayed(DaxBlock dax_block, bool useOverlay, int rowY, int colX) { if (dax_block != null) { if (gbl.area_ptr.picture_fade > 0 || useOverlay == true) { if (gbl.area_ptr.picture_fade > 0) { dax_block.Recolor(true, fadeNewColors, fadeOldColors); } seg040.OverlayBounded(dax_block, 0, 0, rowY - 1, colX - 1); seg040.DrawOverlay(); } else { seg040.draw_picture(dax_block, rowY, colX, 0); } } }
internal static void draw_clipped_picture(DaxBlock dax_block, int rowY, int colX, int index, int clipMinX, int clipMaxX, int clipMinY, int clipMaxY) { if (dax_block != null) { int offset = index * dax_block.bpp; int minY = rowY * 8; int maxY = minY + dax_block.height; int minX = colX * 8; int maxX = minX + (dax_block.width * 8); for (int pixY = minY; pixY < maxY; pixY++) { for (int pixX = minX; pixX < maxX; pixX++) { if (pixX >= clipMinX && pixX < clipMaxX && pixY >= clipMinY && pixY < clipMaxY) { byte color = dax_block.data[offset]; if (color == color_no_draw) { } else if (color == color_re_color_from) { Display.SetPixel3(pixX, pixY, color_re_color_to); } else { Display.SetPixel3(pixX, pixY, color); } } offset++; } } Display.Update(); } }
internal static void draw_picture(DaxBlock dax_block, int rowY, int colX, int index) { draw_clipped_picture(dax_block, rowY, colX, index, 0, 320, 0, 200); }
internal static void draw_combat_picture(DaxBlock dax_block, int rowY, int colX, int index) { draw_clipped_picture(dax_block, rowY, colX, index, 8, 176, 8, 176); }
internal static void OverlayUnbounded(DaxBlock source, int arg_8, int itemIdex, int rowY, int colX) { draw_combat_picture(source, rowY + 1, colX + 1, itemIdex); }
/* ega_01 */ internal static void ega_backup(DaxBlock dax_block, int rowY, int colX) { if (dax_block != null) { int offset = 0; int minY = rowY * 8; int maxY = minY + dax_block.height; int minX = colX * 8; int maxX = minX + (dax_block.width * 8); for (int pixY = minY; pixY < maxY; pixY++) { for (int pixX = minX; pixX < maxX; pixX++) { dax_block.data[offset] = Display.GetPixel(pixX, pixY); offset++; } } } }
/* icon_xx, could be implemented using alpha-blending */ public void MergeIcons(DaxBlock srcIcon) { for (int i = 0; i < srcIcon.bpp; i++) { byte a = data[i]; byte b = srcIcon.data[i]; if (a == 16 && b == 16) { data[i] = 16; } else if (a == 16) { data[i] = b; } else if (b == 16) { data[i] = a; } else { //TODO - not sure about this... more likely there should be a presedant, not just blending on the color code.. data[i] = (byte)(a | b); } } }