private void EmulatorConnectionWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { DWProcessReader reader = DWGlobals.ProcessReader; if (reader != default(DWProcessReader)) { // update emulator name in status bar EmulatorStatusLabel.Text = reader.Process.MainWindowTitle; // execute first hero update Hero.Update(true); // update all enemy skills and attack patterns int enemyOffset = 0x9E4B; for (int i = 0; i < DWGlobals.Enemies.Length; i++) { DWEnemy enemy = DWGlobals.Enemies[i]; int pattern = reader.Read((enemyOffset + (i * 0x10)) + 3, 1, 2)[0]; enemy.Skill2Chance = (pattern & 0x3) / 4f; enemy.Skill2 = enemy.GetSkill2((pattern >> 2) & 0x3); enemy.Skill1Chance = ((pattern >> 4) & 0x3) / 4f; enemy.Skill1 = enemy.GetSkill1((pattern >> 6) & 0x3); int resist = reader.Read(enemyOffset + (i * 0x10) + 4, 1, 2)[0]; enemy.StopspellResist = (resist % 0xF) / 16f; Console.WriteLine("0x{0:X}", enemyOffset + (i * 0x10) + 4); Console.WriteLine(enemy.Name + ": " + Math.Floor(enemy.StopspellResist * 100)); } // decode DWR map Overworld.DecodeMap(); } }
private void UpdateEnemy(DWEnemy enemy) { if (EnemyPanel.InvokeRequired) { var d = new UpdateEnemyDelegate(UpdateEnemy); EnemyPanel.Invoke(d, new object[] { enemy }); } else { // update enemy image EnemyPanelPictureBox.Image = enemy.GetImage(); // clear enemy stats table while (EnemyStatsTable.Controls.Count > 0) { EnemyStatsTable.Controls[0].Dispose(); } while (EnemyInfoTable.Controls.Count > 0) { EnemyInfoTable.Controls[0].Dispose(); } // add enemy stats to table string[,] stats = enemy.GetBattleInfo(Hero); for (int i = 0; i < stats.GetLength(0); i++) { string name = stats[i, 0]; string value = stats[i, 1]; if (i == 0) { CombatPanel.Title = name; } else { TableLayoutPanel table = i < 6 ? EnemyInfoTable : EnemyStatsTable; bool isHeader = value == ""; int row = i < 6 ? i - 1 : i - 6; DWLabel nameLabel = new DWLabel { TextAlign = ContentAlignment.MiddleLeft }; table.Controls.Add(nameLabel, 0, row); nameLabel.FitText(name, true, isHeader ? FontStyle.Bold : FontStyle.Regular); DWLabel valueLabel = new DWLabel { TextAlign = ContentAlignment.MiddleRight }; table.Controls.Add(valueLabel, 1, row); valueLabel.FitText(value, true); } } } }