public static Bitmap DrawFont(uint image) { if (!U.isPointer(image)) { return(ImageUtil.BlankDummy(32)); } uint palette = Program.ROM.p32(Program.ROM.RomInfo.op_class_font_palette_pointer); byte[] imageUZ = LZ77.decompress(Program.ROM.Data, U.toOffset(image)); return(ImageUtil.ByteToImage16Tile(4 * 8, 4 * 8 , imageUZ, 0 , Program.ROM.Data, (int)U.toOffset(palette) )); }
public static Bitmap DrawIconWhereID_UsingWeaponPalette(uint id) { InputFormRef InputFormRef = Init(null); //現在のIDに対応するデータ uint addr = InputFormRef.IDToAddr(id); if (!U.isSafetyOffset(addr)) { return(ImageUtil.BlankDummy(16)); } uint palette = Program.ROM.u32(Program.ROM.RomInfo.system_weapon_icon_palette_pointer()); return(DrawIcon(addr, palette)); }
public static Bitmap Draw(uint image, uint palette) { if (!U.isPointer(image)) { return(ImageUtil.BlankDummy()); } if (!U.isPointer(palette)) { return(ImageUtil.BlankDummy()); } return(ImageUtil.ByteToImage16Tile(4 * 8, 4 * 8 , Program.ROM.Data, (int)U.toOffset(image) , Program.ROM.Data, (int)U.toOffset(palette) )); }
public static Bitmap DrawBG(uint id) { InputFormRef InputFormRef = Init(null); uint addr = InputFormRef.IDToAddr(id); if (addr == U.NOT_FOUND) { return(ImageUtil.BlankDummy()); } uint image = Program.ROM.u32(addr); uint palette = Program.ROM.u32(addr + 8); uint tsa = Program.ROM.u32(addr + 4); return(DrawBG(image, palette, tsa)); }
//属性アイコン public static Bitmap Attribute(uint type) {//属性アイコンはアイテムアイコンと共有しているらしい。 //7A=炎 1 //7B=稲妻 2 //7C=風 3 //7D=氷 4 //7E=闇 5 //7F=光 6 //80=理 7 //ただし、パレットは武器アイコンを参照していると思われる. if (type <= 0) { return(ImageUtil.BlankDummy()); } return(ImageItemIconForm.DrawIconWhereID_UsingWeaponPalette(type + 0x7A - 1)); }
static Bitmap DrawTSAAnime2Header(uint image, uint palette) { if (!U.isPointer(image)) { return(ImageUtil.BlankDummy()); } if (!U.isPointer(palette)) { return(ImageUtil.BlankDummy()); } byte[] imageUZ = LZ77.decompress(Program.ROM.Data, U.toOffset(image)); int height = (int)ImageUtil.CalcHeight(30 * 8, imageUZ.Length); return(ImageUtil.ByteToImage16Tile(30 * 8, height, imageUZ, 0, Program.ROM.Data, (int)U.toOffset(palette))); }
public static Bitmap DrawIcon(uint addr, uint customPalette = 0) { if (!U.isSafetyOffset(addr)) { return(ImageUtil.BlankDummy()); } if (customPalette == 0) {//アイテムアイコンパレットを利用. customPalette = Program.ROM.u32(Program.ROM.RomInfo.icon_palette_pointer()); } return(ImageUtil.ByteToImage16Tile(2 * 8, 2 * 8 , Program.ROM.Data, (int)addr , Program.ROM.Data, (int)U.toOffset(customPalette) , 0 )); }
public static Bitmap DrawImage(uint image, uint tsa) { if (!U.isPointer(image)) { return(ImageUtil.BlankDummy()); } if (!U.isPointer(tsa)) { return(ImageUtil.BlankDummy()); } uint palette = Program.ROM.p32(Program.ROM.RomInfo.op_prologue_palette_color_pointer); byte[] imageUZ = LZ77.decompress(Program.ROM.Data, U.toOffset(image)); byte[] tsaUZ = LZ77.decompress(Program.ROM.Data, U.toOffset(tsa)); return(ImageUtil.ByteToImage16TileHeaderTSA(32 * 8, 20 * 8, imageUZ, 0, Program.ROM.Data, (int)U.toOffset(palette), tsaUZ, 0)); }
//待機アイコン public static Bitmap DrawWaitIcon(uint cid, int palette_type = 0, bool height16_limit = false, bool centering = true) { if (cid <= 0) { return(ImageUtil.BlankDummy()); } InputFormRef InputFormRef = Init(null); uint addr = InputFormRef.IDToAddr(cid); if (!U.isSafetyOffset(addr)) { return(ImageUtil.BlankDummy()); } uint icon_id = Program.ROM.u8(addr + 6); return(ImageUnitWaitIconFrom.DrawWaitUnitIconBitmap(icon_id, palette_type, height16_limit)); }
//マップ顔 public static Bitmap DrawPortraitFE6Map(uint id) { InputFormRef InputFormRef = Init(null); //現在のIDに対応するデータ uint addr = InputFormRef.IDToAddr(id); if (!U.isSafetyOffset(addr)) { return(ImageUtil.BlankDummy()); } uint map_face = Program.ROM.u32(addr + 4); uint palette = Program.ROM.u32(addr + 8); return(DrawPortraitFE6Map(map_face, palette)); }
public static Bitmap DrawMapStyle(uint id, MapAnimations anime = null) { InputFormRef InputFormRef = Init(null); uint addr = InputFormRef.IDToAddr(id); if (!U.isSafetyOffset(addr)) { return(ImageUtil.BlankDummy(16)); } uint obj_plist = (uint)Program.ROM.u16(addr + 4); uint palette_plist = (uint)Program.ROM.u8(addr + 6); uint config_plist = (uint)Program.ROM.u8(addr + 7); uint mappointer_plist = (uint)Program.ROM.u8(addr + 8); return(ImageUtilMap.DrawMap(obj_plist, palette_plist, config_plist, mappointer_plist, anime)); }
//顔画像 public static Bitmap DrawClassFacePicture(uint cid) { if (cid <= 0) { return(ImageUtil.BlankDummy()); } InputFormRef InputFormRef = Init(null); uint addr = InputFormRef.IDToAddr(cid); if (!U.isSafetyOffset(addr)) { return(ImageUtil.BlankDummy()); } uint face_id = Program.ROM.u16(addr + 8); return(ImagePortraitForm.DrawPortraitClass(face_id)); }
//Skill + テキストを書くルーチン public static Size DrawSkillAndText(ListBox lb, int index, Graphics g, Rectangle listbounds, bool isWithDraw) { if (index < 0 || index >= lb.Items.Count) { return(new Size(listbounds.X, listbounds.Y)); } string text = lb.Items[index].ToString(); SolidBrush brush = new SolidBrush(lb.ForeColor); Font normalFont = lb.Font; Rectangle bounds = listbounds; int textmargineY = (ListBoxEx.OWNER_DRAW_ICON_SIZE - (int)lb.Font.Height) / 2; uint addr = InputFormRef.SelectToAddr(lb, (int)index); Bitmap bitmap = null; if (addr != U.NOT_FOUND) { uint icon = Program.ROM.u16(addr + 0); bitmap = ImageItemIconForm.DrawIconWhereID_UsingWeaponPalette_SKILLFE8NVer2(icon); } else { bitmap = ImageUtil.BlankDummy(); } U.MakeTransparent(bitmap); //アイコンを描く. Rectangle b = bounds; b.Width = ListBoxEx.OWNER_DRAW_ICON_SIZE; b.Height = ListBoxEx.OWNER_DRAW_ICON_SIZE; bounds.X += U.DrawPicture(bitmap, g, isWithDraw, b); bitmap.Dispose(); //テキストを描く. b = bounds; b.Y += textmargineY; bounds.X += U.DrawText(text, g, normalFont, brush, isWithDraw, b); bounds.Y += ListBoxEx.OWNER_DRAW_ICON_SIZE; brush.Dispose(); return(new Size(bounds.X, bounds.Y)); }
public static Bitmap DrawSample(uint unitid, uint type) { InputFormRef InputFormRef = Init(null); InputFormRef N_InputFormRef = N_Init(null); uint addr1 = InputFormRef.IDToAddr(unitid); uint addr2 = N_InputFormRef.IDToAddr(unitid); if (addr1 == U.NOT_FOUND || addr2 == U.NOT_FOUND) { return(ImageUtil.BlankDummy()); } uint b = Program.ROM.u8(addr1 + type); uint n_b = Program.ROM.u8(addr2 + type); return(ImageBattleAnimeForm.DrawBattleAnime(ImageBattleAnimeForm.GetAnimeIDByClassID(n_b) , ImageBattleAnimeForm.ScaleTrim.SCALE_90, b)); }
//クラスカード public static Bitmap DrawPortraitClassFE6(uint id) { InputFormRef InputFormRef = Init(null); uint baseaddress = InputFormRef.BaseAddress; uint blocksize = InputFormRef.BlockSize; //現在のIDに対応するデータ uint addr = baseaddress + (id * blocksize); uint unit_face = Program.ROM.u32(addr); uint map_face = Program.ROM.u32(addr + 4); uint palette = Program.ROM.u32(addr + 8); if (map_face == 0) { return(ImagePortraitForm.DrawPortraitClass(unit_face, palette)); } return(ImageUtil.BlankDummy()); }
//アイコンを画く. public static Bitmap DrawIcon(uint item_id) { if (item_id <= 0) { return(ImageUtil.BlankDummy(16)); } InputFormRef InputFormRef = Init(null); uint addr = InputFormRef.IDToAddr(item_id); if (!U.isSafetyOffset(addr)) { return(ImageUtil.BlankDummy(16)); } uint iconid = Program.ROM.u8(addr + 29); return(ImageItemIconForm.DrawIconWhereID(iconid)); }
static Bitmap DrawSkillIconLow(uint id) { InputFormRef ifr = Init(null); uint addr = ifr.IDToAddr(id); if (addr == U.NOT_FOUND) { return(ImageUtil.BlankDummy()); } uint pal = Program.ROM.u16(addr + 2); uint skillPaletteAddress = GetSkillPaletteAddress(pal); uint iconbaseaddr = Program.ROM.p32(Program.ROM.RomInfo.icon_pointer()); uint icondatacount = (2 * 8 * 2 * 8) / 2; // /2しているのは16色のため uint iconaddr = iconbaseaddr + (icondatacount * (0x100 + id)); return(ImageItemIconForm.DrawIcon(iconaddr, skillPaletteAddress)); }
public static Bitmap DrawSample(uint id) { InputFormRef InputFormRef = Init(null); uint addr = InputFormRef.IDToAddr(id); if (addr == U.NOT_FOUND) { return(ImageUtil.BlankDummy()); } uint saveimage_addr = Program.ROM.p32(addr); if (!U.isSafetyOffset(saveimage_addr)) { return(ImageUtil.BlankDummy()); } return(DrawPic(saveimage_addr, 8 * 32)); }
public static Bitmap DrawUnitsList(uint index, int iconSize, out string errorMessage) { InputFormRef InputFormRef = Init(null); uint addr = InputFormRef.IDToAddr(index); if (!U.isSafetyOffset(addr)) { errorMessage = R._("範囲外のIDを指定しています。\r\n指定できるのは、最大{0}までです。", InputFormRef.DataCount); return(ImageUtil.BlankDummy()); } errorMessage = ""; Bitmap bitmap = new Bitmap((iconSize * 2) * 5, iconSize); Rectangle bounds = new Rectangle(0, 0, bitmap.Width, bitmap.Height); SolidBrush brush = new SolidBrush(OptionForm.Color_Input_ForeColor()); Font font = new Font("MS UI Gothic", 8); using (Graphics g = Graphics.FromImage(bitmap)) { for (uint i = 0; i < 5; i++) { uint classid = Program.ROM.u8(addr + i); if (classid <= 0) { continue; } Bitmap icon = ClassForm.DrawWaitIcon(classid, 2); U.MakeTransparent(icon); Rectangle b = bounds; b.Width = iconSize; b.Height = iconSize; bounds.X += U.DrawPicture(icon, g, true, b); uint probability = Program.ROM.u8(addr + 5 + i); bounds.X += U.DrawText(probability + "", g, font, brush, true, bounds); } } brush.Dispose(); font.Dispose(); return(bitmap); }
public static Bitmap DrawFontString(string str, bool IsItemFont) { //フォントで描画した場合の幅と高さを求める. Size size = MeasureTextMultiLine(str, IsItemFont); if (size.Width <= 0 || size.Height <= 0) { return(ImageUtil.BlankDummy()); } uint fontlist_pointer = GetFontPointer(IsItemFont); PatchUtil.PRIORITY_CODE priorityCode = PatchUtil.SearchPriorityCode(); Bitmap bitmap = ImageUtil.Blank(size.Width, size.Height); string[] lines = str.Split(new string[] { "\r\n" }, StringSplitOptions.None); for (int n = 0; n < lines.Length; n++) { string line = lines[n]; int totalwidth = 0; for (int i = 0; i < line.Length; i++) { string one = str[i].ToString(); uint search_char = U.ConvertMojiCharToUnitFast(one, priorityCode); int width; Bitmap oneBitmap = DrawFont(search_char, IsItemFont, out width, priorityCode); if (oneBitmap == null) { continue; } if (n == 0) {//最初ならパレット設定. bitmap.Palette = oneBitmap.Palette; } ImageUtil.BitBlt(bitmap, totalwidth, n * 16, width, 16, oneBitmap, 0, 0, 0, 0); totalwidth += width; } } return(bitmap); }
public static Bitmap DrawIcon(uint skillid) { if (Program.ROM.RomInfo.version() != 8) { return(ImageUtil.BlankDummy()); } PatchUtil.skill_system_enum skillsystem = PatchUtil.SearchSkillSystem(); if (skillsystem == PatchUtil.skill_system_enum.SkillSystem) { Bitmap bitmap = SkillConfigSkillSystemForm.DrawSkillIcon(skillid); return(bitmap); } else if (skillsystem == PatchUtil.skill_system_enum.FE8N_ver2) { Bitmap bitmap = SkillConfigFE8NVer2SkillForm.DrawSkillIcon(skillid); return(bitmap); } return(ImageUtil.BlankDummy()); }
static Bitmap DrawOneImage(uint image, uint tsa, uint palette) { if (!U.isPointer(image)) { return(ImageUtil.BlankDummy()); } if (!U.isPointer(palette)) { return(ImageUtil.BlankDummy()); } if (!U.isPointer(tsa)) { return(ImageUtil.BlankDummy()); } byte[] imageUZ = LZ77.decompress(Program.ROM.Data, U.toOffset(image)); return(ImageUtil.ByteToImage16TileHeaderTSA(32 * 8, 20 * 8, imageUZ, 0, Program.ROM.Data, (int)U.toOffset(palette), Program.ROM.Data, (int)U.toOffset(tsa))); }
//マップ顔画像 public static Bitmap DrawUnitMapFacePicture(uint uid) { if (uid == 0) { return(ImageUtil.BlankDummy()); } uid--; InputFormRef InputFormRef = Init(null); uint addr = InputFormRef.IDToAddr(uid); if (!U.isSafetyOffset(addr)) { return(ImagePortraitForm.DrawPortraitMap(0)); } uint face_id = Program.ROM.u16(addr + 6); return(ImagePortraitForm.DrawPortraitMap(face_id)); }
public static Bitmap DrawMapChange(uint id, int width, int height, uint change_address, MapAnimations anime = null) { InputFormRef InputFormRef = Init(null); uint addr = InputFormRef.IDToAddr(id); if (!U.isSafetyOffset(addr)) { return(ImageUtil.BlankDummy()); } if (width <= 0 || height <= 0) { return(ImageUtil.BlankDummy()); } uint obj_plist = (uint)Program.ROM.u16(addr + 4); uint palette_plist = (uint)Program.ROM.u8(addr + 6); uint config_plist = (uint)Program.ROM.u8(addr + 7); return(ImageUtilMap.DrawChangeMap(obj_plist, palette_plist, config_plist, width, height, change_address, anime)); }
public static Bitmap DrawIconWhereID_UsingWeaponPalette_SKILLFE8NVer2(uint id) { if (id == U.NOT_FOUND) { return(ImageUtil.BlankDummy(16)); } InputFormRef InputFormRef = Init(null); //現在のIDに対応するデータ(FE8NVer2はスキルアイコンのさらに下の領域に書き込まれる) uint addr = InputFormRef.BaseAddress + (InputFormRef.BlockSize * id); if (!U.isSafetyOffset(addr)) { return(ImageUtil.BlankDummy(16)); } uint palette = Program.ROM.u32(Program.ROM.RomInfo.system_weapon_icon_palette_pointer()); return(DrawIcon(addr, palette)); }
public static Bitmap Draw(uint id) { if (id <= 0) { return(ImageUtil.BlankDummy()); } InputFormRef InputFormRef = Init(null); uint addr = InputFormRef.IDToAddr(id - 1); if (addr == U.NOT_FOUND) { return(ImageUtil.BlankDummy()); } uint image = Program.ROM.u32(addr + 12); uint palette = Program.ROM.u32(addr + 16); return(Draw(image, palette)); }
static Bitmap DrawTSAAnime2(uint image, uint palette, uint tsa) { if (!U.isPointer(image)) { return(ImageUtil.BlankDummy()); } if (!U.isPointer(palette)) { return(ImageUtil.BlankDummy()); } if (!U.isPointer(tsa)) { return(ImageUtil.BlankDummy()); } byte[] imageUZ = LZ77.decompress(Program.ROM.Data, U.toOffset(image)); int height = (int)ImageUtil.CalcByteLengthForHeaderTSAData(Program.ROM.Data, (int)U.toOffset(tsa)); return(ImageUtil.ByteToImage16TileHeaderTSA(32 * 8, height, imageUZ, 0, Program.ROM.Data, (int)U.toOffset(palette), Program.ROM.Data, (int)U.toOffset(tsa))); }
public static Bitmap Draw(uint anime_address, uint showFrameData, out string log) { anime_address = U.toOffset(anime_address); if (!U.isSafetyOffset(anime_address)) { log = ""; return(ImageUtil.BlankDummy()); } uint frame = FindFrame(showFrameData, anime_address, Program.ROM.Data); if (frame == U.NOT_FOUND) { log = ""; return(ImageUtil.BlankDummy()); } //フレームを発見したので描画する. Bitmap retImage = DrawFrameImage(frame, out log); return(retImage); }
public static Bitmap DrawMoveUnitIconBitmap(uint icon_id, int palette_type, int step) { if (icon_id == 0) { return ImageUtil.BlankDummy(); } else { icon_id = icon_id - 1; } InputFormRef InputFormRef = Init(null); uint addr = InputFormRef.IDToAddr(icon_id); if (!U.isSafetyOffset(addr)) { return ImageUtil.Blank(2 * 8, 2 * 8); } uint pic_address = (uint)Program.ROM.u32(addr + 0); return DrawMoveUnitIcon(pic_address, palette_type,step); }
private void PaletteImportButton_Click(object sender, EventArgs e) { if (this.MapStyle.SelectedIndex < 0) { return; } uint palette_plist = this.MapEditConf[this.MapStyle.SelectedIndex].palette_plist; uint obj_plist = this.MapEditConf[this.MapStyle.SelectedIndex].obj_plist; Bitmap bitmap = ImageFormRef.ImportFilenameDialog(this); if (bitmap == null) { return; } bool r = MapPaletteImport(bitmap, palette_plist); if (!r) { return; } //パレットの交換 this.MapObjImage = ImageUtilMap.DrawMapChipOnly(obj_plist, palette_plist); if (this.MapObjImage == null) { this.MapObjImage = ImageUtil.BlankDummy(); } U.ForceUpdate(this.PaletteCombo, 0); //チップセットの更新. Chipset_Update(); SelectedChipset_Update(); MapStyle_SelectedIndexChanged(sender, e); InputFormRef.WriteButtonToYellow(this.PaletteWriteButton, false); //マップエディタが開いていれば更新する MapEditorForm.UpdateMapStyleIfOpen(); }