Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
        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);
                    }
                }
            }
        }