From e5efd0030c5ec0aaee561501950e30276af97be9 Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Thu, 23 Apr 2026 22:09:32 -0500 Subject: [PATCH] Big Update to include icons, separate intrinsic/extrinsic tracking, and streamable tracker --- NethackHelper/MainForm.Designer.cs | 1492 ++++++++++------- NethackHelper/MainForm.cs | 43 +- NethackHelper/MainForm.resx | 20 +- NethackHelper/NethackHelper.csproj | 26 + ...datasource => PropertiesSource.datasource} | 4 +- .../Properties/Resources.Designer.cs | 413 +++++ NethackHelper/Properties/Resources.resx | 226 +++ NethackHelper/PropertyBox.Designer.cs | 100 ++ NethackHelper/PropertyBox.cs | 99 ++ NethackHelper/PropertyBox.resx | 120 ++ NethackHelper/SaveData.cs | 80 +- NethackHelper/TrackerManager.cs | 22 + NethackHelper/TrackingClient.cs | 17 + NethackHelper/TrackingHub.cs | 6 + .../wwwroot/icons/acid_resistance.png | Bin 0 -> 852 bytes .../wwwroot/icons/aggravate_monster.png | Bin 0 -> 756 bytes NethackHelper/wwwroot/icons/angry_god.png | Bin 0 -> 821 bytes .../wwwroot/icons/cold_resistance.png | Bin 0 -> 846 bytes NethackHelper/wwwroot/icons/conflict.png | Bin 0 -> 768 bytes NethackHelper/wwwroot/icons/darken.sh | 4 + .../icons/disintegration_resistance.png | Bin 0 -> 862 bytes .../wwwroot/icons/fire_resistance.png | Bin 0 -> 789 bytes .../wwwroot/icons/food_appraisal.png | Bin 0 -> 858 bytes NethackHelper/wwwroot/icons/free_action.png | Bin 0 -> 843 bytes NethackHelper/wwwroot/icons/hunger.png | Bin 0 -> 799 bytes NethackHelper/wwwroot/icons/infravision.png | Bin 0 -> 800 bytes NethackHelper/wwwroot/icons/invisibility.png | Bin 0 -> 673 bytes NethackHelper/wwwroot/icons/jumping.png | Bin 0 -> 741 bytes NethackHelper/wwwroot/icons/levitation.png | Bin 0 -> 704 bytes .../wwwroot/icons/magic_resistance.png | Bin 0 -> 786 bytes .../wwwroot/icons/magical_breathing.png | Bin 0 -> 708 bytes .../wwwroot/icons/no_acid_resistance.png | Bin 0 -> 1499 bytes .../wwwroot/icons/no_aggravate_monster.png | Bin 0 -> 1461 bytes NethackHelper/wwwroot/icons/no_angry_god.png | Bin 0 -> 1488 bytes .../wwwroot/icons/no_cold_resistance.png | Bin 0 -> 1479 bytes NethackHelper/wwwroot/icons/no_conflict.png | Bin 0 -> 1473 bytes .../icons/no_disintegration_resistance.png | Bin 0 -> 1495 bytes .../wwwroot/icons/no_fire_resistance.png | Bin 0 -> 1471 bytes .../wwwroot/icons/no_food_appraisal.png | Bin 0 -> 1494 bytes .../wwwroot/icons/no_free_action.png | Bin 0 -> 1490 bytes NethackHelper/wwwroot/icons/no_hunger.png | Bin 0 -> 1460 bytes .../wwwroot/icons/no_infravision.png | Bin 0 -> 1467 bytes .../wwwroot/icons/no_invisibility.png | Bin 0 -> 1403 bytes NethackHelper/wwwroot/icons/no_jumping.png | Bin 0 -> 1428 bytes NethackHelper/wwwroot/icons/no_levitation.png | Bin 0 -> 1418 bytes .../wwwroot/icons/no_magic_resistance.png | Bin 0 -> 1457 bytes .../wwwroot/icons/no_magical_breathing.png | Bin 0 -> 1414 bytes .../wwwroot/icons/no_poison_resistance.png | Bin 0 -> 1499 bytes .../wwwroot/icons/no_polymorph_control.png | Bin 0 -> 1424 bytes .../wwwroot/icons/no_polymorphitis.png | Bin 0 -> 1421 bytes .../wwwroot/icons/no_prayer_timeout.png | Bin 0 -> 1451 bytes NethackHelper/wwwroot/icons/no_protection.png | Bin 0 -> 1429 bytes .../no_protection_from_shape_changers.png | Bin 0 -> 1492 bytes NethackHelper/wwwroot/icons/no_reflection.png | Bin 0 -> 1443 bytes .../wwwroot/icons/no_regeneration.png | Bin 0 -> 1450 bytes NethackHelper/wwwroot/icons/no_searching.png | Bin 0 -> 1442 bytes .../wwwroot/icons/no_see_invisible.png | Bin 0 -> 1409 bytes .../wwwroot/icons/no_shock_resistance.png | Bin 0 -> 1458 bytes .../wwwroot/icons/no_sleep_resistance.png | Bin 0 -> 1447 bytes .../wwwroot/icons/no_slow_digestion.png | Bin 0 -> 1429 bytes NethackHelper/wwwroot/icons/no_speed.png | Bin 0 -> 1403 bytes NethackHelper/wwwroot/icons/no_stealth.png | Bin 0 -> 1396 bytes NethackHelper/wwwroot/icons/no_telepathy.png | Bin 0 -> 1485 bytes .../wwwroot/icons/no_teleport_control.png | Bin 0 -> 1460 bytes .../wwwroot/icons/no_teleportitis.png | Bin 0 -> 1482 bytes NethackHelper/wwwroot/icons/no_warning.png | Bin 0 -> 1419 bytes .../wwwroot/icons/poison_resistance.png | Bin 0 -> 865 bytes .../wwwroot/icons/polymorph_control.png | Bin 0 -> 694 bytes NethackHelper/wwwroot/icons/polymorphitis.png | Bin 0 -> 671 bytes .../wwwroot/icons/prayer_timeout.png | Bin 0 -> 779 bytes NethackHelper/wwwroot/icons/protection.png | Bin 0 -> 746 bytes .../icons/protection_from_shape_changers.png | Bin 0 -> 847 bytes NethackHelper/wwwroot/icons/reflection.png | Bin 0 -> 750 bytes NethackHelper/wwwroot/icons/regeneration.png | Bin 0 -> 762 bytes NethackHelper/wwwroot/icons/searching.png | Bin 0 -> 763 bytes NethackHelper/wwwroot/icons/see_invisible.png | Bin 0 -> 706 bytes .../wwwroot/icons/shock_resistance.png | Bin 0 -> 765 bytes .../wwwroot/icons/sleep_resistance.png | Bin 0 -> 741 bytes .../wwwroot/icons/slow_digestion.png | Bin 0 -> 742 bytes NethackHelper/wwwroot/icons/speed.png | Bin 0 -> 679 bytes NethackHelper/wwwroot/icons/stealth.png | Bin 0 -> 666 bytes NethackHelper/wwwroot/icons/telepathy.png | Bin 0 -> 831 bytes .../wwwroot/icons/teleport_control.png | Bin 0 -> 736 bytes NethackHelper/wwwroot/icons/teleportitis.png | Bin 0 -> 826 bytes NethackHelper/wwwroot/icons/warning.png | Bin 0 -> 706 bytes NethackHelper/wwwroot/tracker.css | 83 + NethackHelper/wwwroot/tracker.html | 331 ++++ NethackHelper/wwwroot/tracker.js | 48 + 88 files changed, 2535 insertions(+), 599 deletions(-) rename NethackHelper/Properties/DataSources/{Intrinsics.datasource => PropertiesSource.datasource} (63%) create mode 100644 NethackHelper/Properties/Resources.Designer.cs create mode 100644 NethackHelper/Properties/Resources.resx create mode 100644 NethackHelper/PropertyBox.Designer.cs create mode 100644 NethackHelper/PropertyBox.cs create mode 100644 NethackHelper/PropertyBox.resx create mode 100644 NethackHelper/TrackerManager.cs create mode 100644 NethackHelper/TrackingClient.cs create mode 100644 NethackHelper/TrackingHub.cs create mode 100644 NethackHelper/wwwroot/icons/acid_resistance.png create mode 100644 NethackHelper/wwwroot/icons/aggravate_monster.png create mode 100644 NethackHelper/wwwroot/icons/angry_god.png create mode 100644 NethackHelper/wwwroot/icons/cold_resistance.png create mode 100644 NethackHelper/wwwroot/icons/conflict.png create mode 100644 NethackHelper/wwwroot/icons/darken.sh create mode 100644 NethackHelper/wwwroot/icons/disintegration_resistance.png create mode 100644 NethackHelper/wwwroot/icons/fire_resistance.png create mode 100644 NethackHelper/wwwroot/icons/food_appraisal.png create mode 100644 NethackHelper/wwwroot/icons/free_action.png create mode 100644 NethackHelper/wwwroot/icons/hunger.png create mode 100644 NethackHelper/wwwroot/icons/infravision.png create mode 100644 NethackHelper/wwwroot/icons/invisibility.png create mode 100644 NethackHelper/wwwroot/icons/jumping.png create mode 100644 NethackHelper/wwwroot/icons/levitation.png create mode 100644 NethackHelper/wwwroot/icons/magic_resistance.png create mode 100644 NethackHelper/wwwroot/icons/magical_breathing.png create mode 100644 NethackHelper/wwwroot/icons/no_acid_resistance.png create mode 100644 NethackHelper/wwwroot/icons/no_aggravate_monster.png create mode 100644 NethackHelper/wwwroot/icons/no_angry_god.png create mode 100644 NethackHelper/wwwroot/icons/no_cold_resistance.png create mode 100644 NethackHelper/wwwroot/icons/no_conflict.png create mode 100644 NethackHelper/wwwroot/icons/no_disintegration_resistance.png create mode 100644 NethackHelper/wwwroot/icons/no_fire_resistance.png create mode 100644 NethackHelper/wwwroot/icons/no_food_appraisal.png create mode 100644 NethackHelper/wwwroot/icons/no_free_action.png create mode 100644 NethackHelper/wwwroot/icons/no_hunger.png create mode 100644 NethackHelper/wwwroot/icons/no_infravision.png create mode 100644 NethackHelper/wwwroot/icons/no_invisibility.png create mode 100644 NethackHelper/wwwroot/icons/no_jumping.png create mode 100644 NethackHelper/wwwroot/icons/no_levitation.png create mode 100644 NethackHelper/wwwroot/icons/no_magic_resistance.png create mode 100644 NethackHelper/wwwroot/icons/no_magical_breathing.png create mode 100644 NethackHelper/wwwroot/icons/no_poison_resistance.png create mode 100644 NethackHelper/wwwroot/icons/no_polymorph_control.png create mode 100644 NethackHelper/wwwroot/icons/no_polymorphitis.png create mode 100644 NethackHelper/wwwroot/icons/no_prayer_timeout.png create mode 100644 NethackHelper/wwwroot/icons/no_protection.png create mode 100644 NethackHelper/wwwroot/icons/no_protection_from_shape_changers.png create mode 100644 NethackHelper/wwwroot/icons/no_reflection.png create mode 100644 NethackHelper/wwwroot/icons/no_regeneration.png create mode 100644 NethackHelper/wwwroot/icons/no_searching.png create mode 100644 NethackHelper/wwwroot/icons/no_see_invisible.png create mode 100644 NethackHelper/wwwroot/icons/no_shock_resistance.png create mode 100644 NethackHelper/wwwroot/icons/no_sleep_resistance.png create mode 100644 NethackHelper/wwwroot/icons/no_slow_digestion.png create mode 100644 NethackHelper/wwwroot/icons/no_speed.png create mode 100644 NethackHelper/wwwroot/icons/no_stealth.png create mode 100644 NethackHelper/wwwroot/icons/no_telepathy.png create mode 100644 NethackHelper/wwwroot/icons/no_teleport_control.png create mode 100644 NethackHelper/wwwroot/icons/no_teleportitis.png create mode 100644 NethackHelper/wwwroot/icons/no_warning.png create mode 100644 NethackHelper/wwwroot/icons/poison_resistance.png create mode 100644 NethackHelper/wwwroot/icons/polymorph_control.png create mode 100644 NethackHelper/wwwroot/icons/polymorphitis.png create mode 100644 NethackHelper/wwwroot/icons/prayer_timeout.png create mode 100644 NethackHelper/wwwroot/icons/protection.png create mode 100644 NethackHelper/wwwroot/icons/protection_from_shape_changers.png create mode 100644 NethackHelper/wwwroot/icons/reflection.png create mode 100644 NethackHelper/wwwroot/icons/regeneration.png create mode 100644 NethackHelper/wwwroot/icons/searching.png create mode 100644 NethackHelper/wwwroot/icons/see_invisible.png create mode 100644 NethackHelper/wwwroot/icons/shock_resistance.png create mode 100644 NethackHelper/wwwroot/icons/sleep_resistance.png create mode 100644 NethackHelper/wwwroot/icons/slow_digestion.png create mode 100644 NethackHelper/wwwroot/icons/speed.png create mode 100644 NethackHelper/wwwroot/icons/stealth.png create mode 100644 NethackHelper/wwwroot/icons/telepathy.png create mode 100644 NethackHelper/wwwroot/icons/teleport_control.png create mode 100644 NethackHelper/wwwroot/icons/teleportitis.png create mode 100644 NethackHelper/wwwroot/icons/warning.png create mode 100644 NethackHelper/wwwroot/tracker.css create mode 100644 NethackHelper/wwwroot/tracker.html create mode 100644 NethackHelper/wwwroot/tracker.js diff --git a/NethackHelper/MainForm.Designer.cs b/NethackHelper/MainForm.Designer.cs index 88db6c2..3c541f2 100644 --- a/NethackHelper/MainForm.Designer.cs +++ b/NethackHelper/MainForm.Designer.cs @@ -1,5 +1,6 @@ using System.Drawing; using System.Windows.Forms; +using NethackHelper.Properties; namespace NethackHelper { partial class MainForm : Form { @@ -26,655 +27,1009 @@ namespace NethackHelper { /// the contents of this method with the code editor. /// private void InitializeComponent() { - components = new System.ComponentModel.Container(); + this.components = new System.ComponentModel.Container(); + Label extrinsicLabel; + Label intrinsicLabel; System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); - mainTabControl = new TabControl(); - itemsTab = new TabPage(); - suckerBox = new CheckBox(); - saveSourceBindingSource = new BindingSource(components); - itemTabControl = new TabControl(); - scrollPotionTab = new TabPage(); - potionDisplay = new ItemDisplay(); - scrollDisplay = new ItemDisplay(); - wandRingTab = new TabPage(); - ringDisplay = new ItemDisplay(); - wandDisplay = new ItemDisplay(); - spellbookTab = new TabPage(); - amuletDisplay = new ItemDisplay(); - spellbookDisplay = new ItemDisplay(); - toolsTab = new TabPage(); - armorDisplay = new ItemDisplay(); - toolDisplay = new ItemDisplay(); - charismaSelector = new ComboBox(); - intrinsicsTab = new TabPage(); - label2 = new Label(); - lastPrayerPicker = new NumericUpDown(); - intrinsicsBindingSource = new BindingSource(components); - label1 = new Label(); - protectionPicker = new NumericUpDown(); - warningCheckbox = new CheckBox(); - teleportitisCheckbox = new CheckBox(); - teleportControlCheckbox = new CheckBox(); - telepathyCheckbox = new CheckBox(); - stealthCheckbox = new CheckBox(); - speedCheckbox = new CheckBox(); - sleepResistanceCheckbox = new CheckBox(); - shockResistanceCheckbox = new CheckBox(); - seeInvisibleCheckbox = new CheckBox(); - searchingCheckbox = new CheckBox(); - poisonResistanceCheckbox = new CheckBox(); - invisibleCheckbox = new CheckBox(); - fireResistanceCheckbox = new CheckBox(); - disintegrationResistanceCheckbox = new CheckBox(); - coldResistanceCheckbox = new CheckBox(); - sokobanTab = new TabPage(); - sokobanVertical = new CheckBox(); - sokobanHorizontal = new CheckBox(); - sokobanPrev = new Button(); - sokobanNext = new Button(); - sokobanSolution = new Label(); - sokobanLevelList = new ListBox(); - charismaSourceBindingSource = new BindingSource(components); - mainMenu = new MenuStrip(); - fileToolStripMenuItem = new ToolStripMenuItem(); - resetToolStripMenuItem = new ToolStripMenuItem(); - toolTip1 = new ToolTip(components); - mainTabControl.SuspendLayout(); - itemsTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize) saveSourceBindingSource).BeginInit(); - itemTabControl.SuspendLayout(); - scrollPotionTab.SuspendLayout(); - wandRingTab.SuspendLayout(); - spellbookTab.SuspendLayout(); - toolsTab.SuspendLayout(); - intrinsicsTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize) lastPrayerPicker).BeginInit(); - ((System.ComponentModel.ISupportInitialize) intrinsicsBindingSource).BeginInit(); - ((System.ComponentModel.ISupportInitialize) protectionPicker).BeginInit(); - sokobanTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize) charismaSourceBindingSource).BeginInit(); - mainMenu.SuspendLayout(); - SuspendLayout(); + this.mainTabControl = new TabControl(); + this.itemsTab = new TabPage(); + this.suckerBox = new CheckBox(); + this.saveSourceBindingSource = new BindingSource(this.components); + this.itemTabControl = new TabControl(); + this.scrollPotionTab = new TabPage(); + this.potionDisplay = new ItemDisplay(); + this.scrollDisplay = new ItemDisplay(); + this.wandRingTab = new TabPage(); + this.ringDisplay = new ItemDisplay(); + this.wandDisplay = new ItemDisplay(); + this.spellbookTab = new TabPage(); + this.amuletDisplay = new ItemDisplay(); + this.spellbookDisplay = new ItemDisplay(); + this.toolsTab = new TabPage(); + this.armorDisplay = new ItemDisplay(); + this.toolDisplay = new ItemDisplay(); + this.charismaSelector = new ComboBox(); + this.propertiesTab = new TabPage(); + this.godAngryCheckbox = new CheckBox(); + this.propertiesBindingSource = new BindingSource(this.components); + this.hungerBox = new PropertyBox(); + this.freeActionBox = new PropertyBox(); + this.slowDigestionBox = new PropertyBox(); + this.polymorphControlBox = new PropertyBox(); + this.polymorphitisBox = new PropertyBox(); + this.protectionFromShapeChangersBox = new PropertyBox(); + this.regenerationBox = new PropertyBox(); + this.conflictBox = new PropertyBox(); + this.aggravateMonsterBox = new PropertyBox(); + this.magicalBreathingBox = new PropertyBox(); + this.magicResistanceBox = new PropertyBox(); + this.reflectionBox = new PropertyBox(); + this.acidResistanceBox = new PropertyBox(); + this.teleportitisBox = new PropertyBox(); + this.warningBox = new PropertyBox(); + this.disintegrationResistanceBox = new PropertyBox(); + this.fireResistanceBox = new PropertyBox(); + this.invisibilityBox = new PropertyBox(); + this.poisonResistanceBox = new PropertyBox(); + this.searchingBox = new PropertyBox(); + this.seeInvisibleBox = new PropertyBox(); + this.shockResistanceBox = new PropertyBox(); + this.sleepResistanceBox = new PropertyBox(); + this.speedBox = new PropertyBox(); + this.stealthBox = new PropertyBox(); + this.teleportControlBox = new PropertyBox(); + this.telepathyBox = new PropertyBox(); + this.coldResistanceBox = new PropertyBox(); + this.label2 = new Label(); + this.lastPrayerPicker = new NumericUpDown(); + this.label1 = new Label(); + this.protectionPicker = new NumericUpDown(); + this.sokobanTab = new TabPage(); + this.sokobanVertical = new CheckBox(); + this.sokobanHorizontal = new CheckBox(); + this.sokobanPrev = new Button(); + this.sokobanNext = new Button(); + this.sokobanSolution = new Label(); + this.sokobanLevelList = new ListBox(); + this.charismaSourceBindingSource = new BindingSource(this.components); + this.mainMenu = new MenuStrip(); + this.fileToolStripMenuItem = new ToolStripMenuItem(); + this.resetToolStripMenuItem = new ToolStripMenuItem(); + this.toolTip1 = new ToolTip(this.components); + extrinsicLabel = new Label(); + intrinsicLabel = new Label(); + this.mainTabControl.SuspendLayout(); + this.itemsTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize) this.saveSourceBindingSource).BeginInit(); + this.itemTabControl.SuspendLayout(); + this.scrollPotionTab.SuspendLayout(); + this.wandRingTab.SuspendLayout(); + this.spellbookTab.SuspendLayout(); + this.toolsTab.SuspendLayout(); + this.propertiesTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize) this.propertiesBindingSource).BeginInit(); + ((System.ComponentModel.ISupportInitialize) this.lastPrayerPicker).BeginInit(); + ((System.ComponentModel.ISupportInitialize) this.protectionPicker).BeginInit(); + this.sokobanTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize) this.charismaSourceBindingSource).BeginInit(); + this.mainMenu.SuspendLayout(); + this.SuspendLayout(); + // + // extrinsicLabel + // + extrinsicLabel.Font = new Font("Consolas", 9F); + extrinsicLabel.Location = new Point(15, 8); + extrinsicLabel.Margin = new Padding(1); + extrinsicLabel.Name = "extrinsicLabel"; + extrinsicLabel.Size = new Size(16, 16); + extrinsicLabel.TabIndex = 55; + extrinsicLabel.Text = "E"; + extrinsicLabel.TextAlign = ContentAlignment.MiddleCenter; + // + // intrinsicLabel + // + intrinsicLabel.Font = new Font("Consolas", 9F); + intrinsicLabel.Location = new Point(38, 8); + intrinsicLabel.Margin = new Padding(1); + intrinsicLabel.Name = "intrinsicLabel"; + intrinsicLabel.Size = new Size(16, 16); + intrinsicLabel.TabIndex = 56; + intrinsicLabel.Text = "I"; + intrinsicLabel.TextAlign = ContentAlignment.MiddleCenter; // // mainTabControl // - mainTabControl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - mainTabControl.Controls.Add(itemsTab); - mainTabControl.Controls.Add(intrinsicsTab); - mainTabControl.Controls.Add(sokobanTab); - mainTabControl.Location = new Point(12, 27); - mainTabControl.Name = "mainTabControl"; - mainTabControl.SelectedIndex = 0; - mainTabControl.Size = new Size(672, 621); - mainTabControl.TabIndex = 0; + this.mainTabControl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + this.mainTabControl.Controls.Add(this.itemsTab); + this.mainTabControl.Controls.Add(this.propertiesTab); + this.mainTabControl.Controls.Add(this.sokobanTab); + this.mainTabControl.Location = new Point(12, 27); + this.mainTabControl.Name = "mainTabControl"; + this.mainTabControl.SelectedIndex = 0; + this.mainTabControl.Size = new Size(672, 621); + this.mainTabControl.TabIndex = 0; // // itemsTab // - itemsTab.Controls.Add(suckerBox); - itemsTab.Controls.Add(itemTabControl); - itemsTab.Controls.Add(charismaSelector); - itemsTab.Location = new Point(4, 24); - itemsTab.Name = "itemsTab"; - itemsTab.Padding = new Padding(3); - itemsTab.Size = new Size(664, 593); - itemsTab.TabIndex = 1; - itemsTab.Text = "Items"; - itemsTab.UseVisualStyleBackColor = true; + this.itemsTab.Controls.Add(this.suckerBox); + this.itemsTab.Controls.Add(this.itemTabControl); + this.itemsTab.Controls.Add(this.charismaSelector); + this.itemsTab.Location = new Point(4, 24); + this.itemsTab.Name = "itemsTab"; + this.itemsTab.Padding = new Padding(3); + this.itemsTab.Size = new Size(664, 593); + this.itemsTab.TabIndex = 1; + this.itemsTab.Text = "Items"; + this.itemsTab.UseVisualStyleBackColor = true; // // suckerBox // - suckerBox.AutoSize = true; - suckerBox.Cursor = Cursors.Help; - suckerBox.DataBindings.Add(new Binding("Checked", saveSourceBindingSource, "Sucker", true)); - suckerBox.Location = new Point(133, 8); - suckerBox.Name = "suckerBox"; - suckerBox.Size = new Size(61, 19); - suckerBox.TabIndex = 2; - suckerBox.Text = "Sucker"; - toolTip1.SetToolTip(suckerBox, "Check this box if you are a tourist under level 15, are wearing a dunce cap, or are wearing a visible shirt."); - suckerBox.UseVisualStyleBackColor = true; - suckerBox.CheckedChanged += suckerBox_CheckedChanged; + this.suckerBox.AutoSize = true; + this.suckerBox.Cursor = Cursors.Help; + this.suckerBox.DataBindings.Add(new Binding("Checked", this.saveSourceBindingSource, "Sucker", true)); + this.suckerBox.Location = new Point(133, 8); + this.suckerBox.Name = "suckerBox"; + this.suckerBox.Size = new Size(61, 19); + this.suckerBox.TabIndex = 2; + this.suckerBox.Text = "Sucker"; + this.toolTip1.SetToolTip(this.suckerBox, "Check this box if you are a tourist under level 15, are wearing a dunce cap, or are wearing a visible shirt."); + this.suckerBox.UseVisualStyleBackColor = true; + this.suckerBox.CheckedChanged += this.suckerBox_CheckedChanged; // // saveSourceBindingSource // - saveSourceBindingSource.DataSource = typeof(SaveSource); - saveSourceBindingSource.Position = 0; + this.saveSourceBindingSource.DataSource = typeof(SaveSource); + this.saveSourceBindingSource.Position = 0; // // itemTabControl // - itemTabControl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - itemTabControl.Controls.Add(scrollPotionTab); - itemTabControl.Controls.Add(wandRingTab); - itemTabControl.Controls.Add(spellbookTab); - itemTabControl.Controls.Add(toolsTab); - itemTabControl.Location = new Point(6, 35); - itemTabControl.Name = "itemTabControl"; - itemTabControl.SelectedIndex = 0; - itemTabControl.Size = new Size(652, 555); - itemTabControl.TabIndex = 1; + this.itemTabControl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + this.itemTabControl.Controls.Add(this.scrollPotionTab); + this.itemTabControl.Controls.Add(this.wandRingTab); + this.itemTabControl.Controls.Add(this.spellbookTab); + this.itemTabControl.Controls.Add(this.toolsTab); + this.itemTabControl.Location = new Point(6, 35); + this.itemTabControl.Name = "itemTabControl"; + this.itemTabControl.SelectedIndex = 0; + this.itemTabControl.Size = new Size(652, 555); + this.itemTabControl.TabIndex = 1; // // scrollPotionTab // - scrollPotionTab.Controls.Add(potionDisplay); - scrollPotionTab.Controls.Add(scrollDisplay); - scrollPotionTab.Location = new Point(4, 24); - scrollPotionTab.Name = "scrollPotionTab"; - scrollPotionTab.Padding = new Padding(3); - scrollPotionTab.Size = new Size(644, 527); - scrollPotionTab.TabIndex = 1; - scrollPotionTab.Text = "Scrolls / Potions"; - scrollPotionTab.UseVisualStyleBackColor = true; + this.scrollPotionTab.Controls.Add(this.potionDisplay); + this.scrollPotionTab.Controls.Add(this.scrollDisplay); + this.scrollPotionTab.Location = new Point(4, 24); + this.scrollPotionTab.Name = "scrollPotionTab"; + this.scrollPotionTab.Padding = new Padding(3); + this.scrollPotionTab.Size = new Size(644, 527); + this.scrollPotionTab.TabIndex = 1; + this.scrollPotionTab.Text = "Scrolls / Potions"; + this.scrollPotionTab.UseVisualStyleBackColor = true; // // potionDisplay // - potionDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; - potionDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("potionDisplay.Columns"); - potionDisplay.Grouping = ItemAttribute.Cost; - potionDisplay.Location = new Point(375, 6); - potionDisplay.Name = "potionDisplay"; - potionDisplay.Size = new Size(263, 515); - potionDisplay.TabIndex = 1; + this.potionDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; + this.potionDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("potionDisplay.Columns"); + this.potionDisplay.Grouping = ItemAttribute.Cost; + this.potionDisplay.Location = new Point(375, 6); + this.potionDisplay.Name = "potionDisplay"; + this.potionDisplay.Size = new Size(263, 515); + this.potionDisplay.TabIndex = 1; // // scrollDisplay // - scrollDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; - scrollDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("scrollDisplay.Columns"); - scrollDisplay.Grouping = ItemAttribute.Cost; - scrollDisplay.Location = new Point(6, 6); - scrollDisplay.Name = "scrollDisplay"; - scrollDisplay.Size = new Size(363, 515); - scrollDisplay.TabIndex = 0; + this.scrollDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; + this.scrollDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("scrollDisplay.Columns"); + this.scrollDisplay.Grouping = ItemAttribute.Cost; + this.scrollDisplay.Location = new Point(6, 6); + this.scrollDisplay.Name = "scrollDisplay"; + this.scrollDisplay.Size = new Size(363, 515); + this.scrollDisplay.TabIndex = 0; // // wandRingTab // - wandRingTab.Controls.Add(ringDisplay); - wandRingTab.Controls.Add(wandDisplay); - wandRingTab.Location = new Point(4, 24); - wandRingTab.Name = "wandRingTab"; - wandRingTab.Padding = new Padding(3); - wandRingTab.Size = new Size(644, 527); - wandRingTab.TabIndex = 2; - wandRingTab.Text = "Wands / Rings"; - wandRingTab.UseVisualStyleBackColor = true; + this.wandRingTab.Controls.Add(this.ringDisplay); + this.wandRingTab.Controls.Add(this.wandDisplay); + this.wandRingTab.Location = new Point(4, 24); + this.wandRingTab.Name = "wandRingTab"; + this.wandRingTab.Padding = new Padding(3); + this.wandRingTab.Size = new Size(644, 527); + this.wandRingTab.TabIndex = 2; + this.wandRingTab.Text = "Wands / Rings"; + this.wandRingTab.UseVisualStyleBackColor = true; // // ringDisplay // - ringDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right; - ringDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("ringDisplay.Columns"); - ringDisplay.Grouping = ItemAttribute.Cost; - ringDisplay.Location = new Point(301, 6); - ringDisplay.Name = "ringDisplay"; - ringDisplay.Size = new Size(337, 515); - ringDisplay.TabIndex = 2; + this.ringDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right; + this.ringDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("ringDisplay.Columns"); + this.ringDisplay.Grouping = ItemAttribute.Cost; + this.ringDisplay.Location = new Point(301, 6); + this.ringDisplay.Name = "ringDisplay"; + this.ringDisplay.Size = new Size(337, 515); + this.ringDisplay.TabIndex = 2; // // wandDisplay // - wandDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; - wandDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("wandDisplay.Columns"); - wandDisplay.Grouping = ItemAttribute.Cost; - wandDisplay.Location = new Point(6, 6); - wandDisplay.Name = "wandDisplay"; - wandDisplay.Size = new Size(289, 515); - wandDisplay.TabIndex = 1; + this.wandDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; + this.wandDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("wandDisplay.Columns"); + this.wandDisplay.Grouping = ItemAttribute.Cost; + this.wandDisplay.Location = new Point(6, 6); + this.wandDisplay.Name = "wandDisplay"; + this.wandDisplay.Size = new Size(289, 515); + this.wandDisplay.TabIndex = 1; // // spellbookTab // - spellbookTab.Controls.Add(amuletDisplay); - spellbookTab.Controls.Add(spellbookDisplay); - spellbookTab.Location = new Point(4, 24); - spellbookTab.Name = "spellbookTab"; - spellbookTab.Padding = new Padding(3); - spellbookTab.Size = new Size(644, 527); - spellbookTab.TabIndex = 3; - spellbookTab.Text = "Spellbooks / Amulets"; - spellbookTab.UseVisualStyleBackColor = true; + this.spellbookTab.Controls.Add(this.amuletDisplay); + this.spellbookTab.Controls.Add(this.spellbookDisplay); + this.spellbookTab.Location = new Point(4, 24); + this.spellbookTab.Name = "spellbookTab"; + this.spellbookTab.Padding = new Padding(3); + this.spellbookTab.Size = new Size(644, 527); + this.spellbookTab.TabIndex = 3; + this.spellbookTab.Text = "Spellbooks / Amulets"; + this.spellbookTab.UseVisualStyleBackColor = true; // // amuletDisplay // - amuletDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right; - amuletDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("amuletDisplay.Columns"); - amuletDisplay.Grouping = ItemAttribute.Cost; - amuletDisplay.Location = new Point(325, 6); - amuletDisplay.Name = "amuletDisplay"; - amuletDisplay.Size = new Size(313, 515); - amuletDisplay.TabIndex = 1; + this.amuletDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right; + this.amuletDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("amuletDisplay.Columns"); + this.amuletDisplay.Grouping = ItemAttribute.Cost; + this.amuletDisplay.Location = new Point(325, 6); + this.amuletDisplay.Name = "amuletDisplay"; + this.amuletDisplay.Size = new Size(313, 515); + this.amuletDisplay.TabIndex = 1; // // spellbookDisplay // - spellbookDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; - spellbookDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("spellbookDisplay.Columns"); - spellbookDisplay.Grouping = ItemAttribute.Cost; - spellbookDisplay.Location = new Point(6, 6); - spellbookDisplay.Name = "spellbookDisplay"; - spellbookDisplay.Size = new Size(313, 515); - spellbookDisplay.TabIndex = 0; + this.spellbookDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; + this.spellbookDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("spellbookDisplay.Columns"); + this.spellbookDisplay.Grouping = ItemAttribute.Cost; + this.spellbookDisplay.Location = new Point(6, 6); + this.spellbookDisplay.Name = "spellbookDisplay"; + this.spellbookDisplay.Size = new Size(313, 515); + this.spellbookDisplay.TabIndex = 0; // // toolsTab // - toolsTab.Controls.Add(armorDisplay); - toolsTab.Controls.Add(toolDisplay); - toolsTab.Location = new Point(4, 24); - toolsTab.Name = "toolsTab"; - toolsTab.Padding = new Padding(3); - toolsTab.Size = new Size(644, 527); - toolsTab.TabIndex = 4; - toolsTab.Text = "Tools / Armor"; - toolsTab.UseVisualStyleBackColor = true; + this.toolsTab.Controls.Add(this.armorDisplay); + this.toolsTab.Controls.Add(this.toolDisplay); + this.toolsTab.Location = new Point(4, 24); + this.toolsTab.Name = "toolsTab"; + this.toolsTab.Padding = new Padding(3); + this.toolsTab.Size = new Size(644, 527); + this.toolsTab.TabIndex = 4; + this.toolsTab.Text = "Tools / Armor"; + this.toolsTab.UseVisualStyleBackColor = true; // // armorDisplay // - armorDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right; - armorDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("armorDisplay.Columns"); - armorDisplay.Grouping = ItemAttribute.Slot; - armorDisplay.Location = new Point(225, 6); - armorDisplay.Name = "armorDisplay"; - armorDisplay.Size = new Size(413, 515); - armorDisplay.TabIndex = 1; + this.armorDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right; + this.armorDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("armorDisplay.Columns"); + this.armorDisplay.Grouping = ItemAttribute.Slot; + this.armorDisplay.Location = new Point(225, 6); + this.armorDisplay.Name = "armorDisplay"; + this.armorDisplay.Size = new Size(413, 515); + this.armorDisplay.TabIndex = 1; // // toolDisplay // - toolDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; - toolDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("toolDisplay.Columns"); - toolDisplay.Grouping = ItemAttribute.Slot; - toolDisplay.Location = new Point(6, 6); - toolDisplay.Name = "toolDisplay"; - toolDisplay.Size = new Size(213, 515); - toolDisplay.TabIndex = 0; + this.toolDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; + this.toolDisplay.Columns = (System.Collections.Generic.List) resources.GetObject("toolDisplay.Columns"); + this.toolDisplay.Grouping = ItemAttribute.Slot; + this.toolDisplay.Location = new Point(6, 6); + this.toolDisplay.Name = "toolDisplay"; + this.toolDisplay.Size = new Size(213, 515); + this.toolDisplay.TabIndex = 0; // // charismaSelector // - charismaSelector.DataBindings.Add(new Binding("SelectedItem", saveSourceBindingSource, "CharismaClass", true)); - charismaSelector.FormattingEnabled = true; - charismaSelector.Location = new Point(6, 6); - charismaSelector.Name = "charismaSelector"; - charismaSelector.Size = new Size(121, 23); - charismaSelector.TabIndex = 0; - charismaSelector.SelectedIndexChanged += charismaSelector_SelectedIndexChanged; + this.charismaSelector.DataBindings.Add(new Binding("SelectedItem", this.saveSourceBindingSource, "CharismaClass", true)); + this.charismaSelector.FormattingEnabled = true; + this.charismaSelector.Location = new Point(6, 6); + this.charismaSelector.Name = "charismaSelector"; + this.charismaSelector.Size = new Size(121, 23); + this.charismaSelector.TabIndex = 0; + this.charismaSelector.SelectedIndexChanged += this.charismaSelector_SelectedIndexChanged; // - // intrinsicsTab + // propertiesTab // - intrinsicsTab.Controls.Add(label2); - intrinsicsTab.Controls.Add(lastPrayerPicker); - intrinsicsTab.Controls.Add(label1); - intrinsicsTab.Controls.Add(protectionPicker); - intrinsicsTab.Controls.Add(warningCheckbox); - intrinsicsTab.Controls.Add(teleportitisCheckbox); - intrinsicsTab.Controls.Add(teleportControlCheckbox); - intrinsicsTab.Controls.Add(telepathyCheckbox); - intrinsicsTab.Controls.Add(stealthCheckbox); - intrinsicsTab.Controls.Add(speedCheckbox); - intrinsicsTab.Controls.Add(sleepResistanceCheckbox); - intrinsicsTab.Controls.Add(shockResistanceCheckbox); - intrinsicsTab.Controls.Add(seeInvisibleCheckbox); - intrinsicsTab.Controls.Add(searchingCheckbox); - intrinsicsTab.Controls.Add(poisonResistanceCheckbox); - intrinsicsTab.Controls.Add(invisibleCheckbox); - intrinsicsTab.Controls.Add(fireResistanceCheckbox); - intrinsicsTab.Controls.Add(disintegrationResistanceCheckbox); - intrinsicsTab.Controls.Add(coldResistanceCheckbox); - intrinsicsTab.Location = new Point(4, 24); - intrinsicsTab.Name = "intrinsicsTab"; - intrinsicsTab.Padding = new Padding(3); - intrinsicsTab.Size = new Size(664, 593); - intrinsicsTab.TabIndex = 2; - intrinsicsTab.Text = "Intrinsics"; - intrinsicsTab.UseVisualStyleBackColor = true; + this.propertiesTab.Controls.Add(this.godAngryCheckbox); + this.propertiesTab.Controls.Add(this.hungerBox); + this.propertiesTab.Controls.Add(this.freeActionBox); + this.propertiesTab.Controls.Add(this.slowDigestionBox); + this.propertiesTab.Controls.Add(this.polymorphControlBox); + this.propertiesTab.Controls.Add(this.polymorphitisBox); + this.propertiesTab.Controls.Add(this.protectionFromShapeChangersBox); + this.propertiesTab.Controls.Add(this.regenerationBox); + this.propertiesTab.Controls.Add(this.conflictBox); + this.propertiesTab.Controls.Add(this.aggravateMonsterBox); + this.propertiesTab.Controls.Add(this.magicalBreathingBox); + this.propertiesTab.Controls.Add(this.magicResistanceBox); + this.propertiesTab.Controls.Add(this.reflectionBox); + this.propertiesTab.Controls.Add(this.acidResistanceBox); + this.propertiesTab.Controls.Add(this.teleportitisBox); + this.propertiesTab.Controls.Add(intrinsicLabel); + this.propertiesTab.Controls.Add(this.warningBox); + this.propertiesTab.Controls.Add(this.disintegrationResistanceBox); + this.propertiesTab.Controls.Add(this.fireResistanceBox); + this.propertiesTab.Controls.Add(this.invisibilityBox); + this.propertiesTab.Controls.Add(this.poisonResistanceBox); + this.propertiesTab.Controls.Add(this.searchingBox); + this.propertiesTab.Controls.Add(this.seeInvisibleBox); + this.propertiesTab.Controls.Add(this.shockResistanceBox); + this.propertiesTab.Controls.Add(this.sleepResistanceBox); + this.propertiesTab.Controls.Add(this.speedBox); + this.propertiesTab.Controls.Add(this.stealthBox); + this.propertiesTab.Controls.Add(this.teleportControlBox); + this.propertiesTab.Controls.Add(this.telepathyBox); + this.propertiesTab.Controls.Add(this.coldResistanceBox); + this.propertiesTab.Controls.Add(this.label2); + this.propertiesTab.Controls.Add(this.lastPrayerPicker); + this.propertiesTab.Controls.Add(this.label1); + this.propertiesTab.Controls.Add(this.protectionPicker); + this.propertiesTab.Controls.Add(extrinsicLabel); + this.propertiesTab.Location = new Point(4, 24); + this.propertiesTab.Name = "propertiesTab"; + this.propertiesTab.Padding = new Padding(3); + this.propertiesTab.Size = new Size(664, 593); + this.propertiesTab.TabIndex = 2; + this.propertiesTab.Text = "Properties"; + this.propertiesTab.UseVisualStyleBackColor = true; + // + // godAngryCheckbox + // + this.godAngryCheckbox.DataBindings.Add(new Binding("Checked", this.propertiesBindingSource, "GodAngry", true)); + this.godAngryCheckbox.Image = Resources.angry_god; + this.godAngryCheckbox.ImageAlign = ContentAlignment.MiddleLeft; + this.godAngryCheckbox.Location = new Point(23, 423); + this.godAngryCheckbox.Name = "godAngryCheckbox"; + this.godAngryCheckbox.Size = new Size(98, 25); + this.godAngryCheckbox.TabIndex = 86; + this.godAngryCheckbox.Text = " God Angry"; + this.godAngryCheckbox.TextAlign = ContentAlignment.MiddleRight; + this.godAngryCheckbox.UseVisualStyleBackColor = true; + this.godAngryCheckbox.CheckedChanged += this.godAngryCheckbox_CheckedChanged; + // + // propertiesBindingSource + // + this.propertiesBindingSource.DataSource = typeof(GameProperties); + // + // hungerBox + // + this.hungerBox.AllowExtrinsic = true; + this.hungerBox.AllowIntrinsic = true; + this.hungerBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "Hunger", true)); + this.hungerBox.HasExtrinsic = false; + this.hungerBox.HasIntrinsic = false; + this.hungerBox.Location = new Point(314, 245); + this.hungerBox.Margin = new Padding(1); + this.hungerBox.Name = "hungerBox"; + this.hungerBox.PropertyImage = Resources.hunger; + this.hungerBox.PropertyKey = "hunger"; + this.hungerBox.PropertyName = "Hunger"; + this.hungerBox.Size = new Size(300, 20); + this.hungerBox.TabIndex = 85; + // + // freeActionBox + // + this.freeActionBox.AllowExtrinsic = true; + this.freeActionBox.AllowIntrinsic = false; + this.freeActionBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "FreeAction", true)); + this.freeActionBox.HasExtrinsic = false; + this.freeActionBox.HasIntrinsic = false; + this.freeActionBox.Location = new Point(314, 113); + this.freeActionBox.Margin = new Padding(1); + this.freeActionBox.Name = "freeActionBox"; + this.freeActionBox.PropertyImage = Resources.fire_resistance; + this.freeActionBox.PropertyKey = "free_action"; + this.freeActionBox.PropertyName = "Free Action"; + this.freeActionBox.Size = new Size(300, 20); + this.freeActionBox.TabIndex = 84; + // + // slowDigestionBox + // + this.slowDigestionBox.AllowExtrinsic = true; + this.slowDigestionBox.AllowIntrinsic = false; + this.slowDigestionBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "SlowDigestion", true)); + this.slowDigestionBox.HasExtrinsic = false; + this.slowDigestionBox.HasIntrinsic = false; + this.slowDigestionBox.Location = new Point(314, 91); + this.slowDigestionBox.Margin = new Padding(1); + this.slowDigestionBox.Name = "slowDigestionBox"; + this.slowDigestionBox.PropertyImage = Resources.slow_digestion; + this.slowDigestionBox.PropertyKey = "slow_digestion"; + this.slowDigestionBox.PropertyName = "Slow Digestion"; + this.slowDigestionBox.Size = new Size(300, 20); + this.slowDigestionBox.TabIndex = 83; + // + // polymorphControlBox + // + this.polymorphControlBox.AllowExtrinsic = true; + this.polymorphControlBox.AllowIntrinsic = true; + this.polymorphControlBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "PolymorphControl", true)); + this.polymorphControlBox.HasExtrinsic = false; + this.polymorphControlBox.HasIntrinsic = false; + this.polymorphControlBox.Location = new Point(314, 135); + this.polymorphControlBox.Margin = new Padding(1); + this.polymorphControlBox.Name = "polymorphControlBox"; + this.polymorphControlBox.PropertyImage = Resources.polymorph_control; + this.polymorphControlBox.PropertyKey = "polymorph_control"; + this.polymorphControlBox.PropertyName = "Polymorph Control"; + this.polymorphControlBox.Size = new Size(300, 20); + this.polymorphControlBox.TabIndex = 82; + // + // polymorphitisBox + // + this.polymorphitisBox.AllowExtrinsic = true; + this.polymorphitisBox.AllowIntrinsic = true; + this.polymorphitisBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "Polymorphitis", true)); + this.polymorphitisBox.HasExtrinsic = false; + this.polymorphitisBox.HasIntrinsic = false; + this.polymorphitisBox.Location = new Point(314, 157); + this.polymorphitisBox.Margin = new Padding(1); + this.polymorphitisBox.Name = "polymorphitisBox"; + this.polymorphitisBox.PropertyImage = Resources.polymorphitis; + this.polymorphitisBox.PropertyKey = "polymorphitis"; + this.polymorphitisBox.PropertyName = "Polymorphitis"; + this.polymorphitisBox.Size = new Size(300, 20); + this.polymorphitisBox.TabIndex = 81; + // + // protectionFromShapeChangersBox + // + this.protectionFromShapeChangersBox.AllowExtrinsic = true; + this.protectionFromShapeChangersBox.AllowIntrinsic = true; + this.protectionFromShapeChangersBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "ProtectionFromShapeChangers", true)); + this.protectionFromShapeChangersBox.HasExtrinsic = false; + this.protectionFromShapeChangersBox.HasIntrinsic = false; + this.protectionFromShapeChangersBox.Location = new Point(314, 179); + this.protectionFromShapeChangersBox.Margin = new Padding(1); + this.protectionFromShapeChangersBox.Name = "protectionFromShapeChangersBox"; + this.protectionFromShapeChangersBox.PropertyImage = Resources.protection_from_shape_changers; + this.protectionFromShapeChangersBox.PropertyKey = "protection_from_shape_changers"; + this.protectionFromShapeChangersBox.PropertyName = "Protection From Shape Changers"; + this.protectionFromShapeChangersBox.Size = new Size(300, 20); + this.protectionFromShapeChangersBox.TabIndex = 80; + // + // regenerationBox + // + this.regenerationBox.AllowExtrinsic = true; + this.regenerationBox.AllowIntrinsic = true; + this.regenerationBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "Regeneration", true)); + this.regenerationBox.HasExtrinsic = false; + this.regenerationBox.HasIntrinsic = false; + this.regenerationBox.Location = new Point(314, 201); + this.regenerationBox.Margin = new Padding(1); + this.regenerationBox.Name = "regenerationBox"; + this.regenerationBox.PropertyImage = Resources.regeneration; + this.regenerationBox.PropertyKey = "regeneration"; + this.regenerationBox.PropertyName = "Regeneration"; + this.regenerationBox.Size = new Size(300, 20); + this.regenerationBox.TabIndex = 79; + // + // conflictBox + // + this.conflictBox.AllowExtrinsic = true; + this.conflictBox.AllowIntrinsic = true; + this.conflictBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "Conflict", true)); + this.conflictBox.HasExtrinsic = false; + this.conflictBox.HasIntrinsic = false; + this.conflictBox.Location = new Point(314, 223); + this.conflictBox.Margin = new Padding(1); + this.conflictBox.Name = "conflictBox"; + this.conflictBox.PropertyImage = Resources.conflict; + this.conflictBox.PropertyKey = "conflict"; + this.conflictBox.PropertyName = "Conflict"; + this.conflictBox.Size = new Size(300, 20); + this.conflictBox.TabIndex = 78; + // + // aggravateMonsterBox + // + this.aggravateMonsterBox.AllowExtrinsic = true; + this.aggravateMonsterBox.AllowIntrinsic = true; + this.aggravateMonsterBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "AggravateMonster", true)); + this.aggravateMonsterBox.HasExtrinsic = false; + this.aggravateMonsterBox.HasIntrinsic = false; + this.aggravateMonsterBox.Location = new Point(314, 267); + this.aggravateMonsterBox.Margin = new Padding(1); + this.aggravateMonsterBox.Name = "aggravateMonsterBox"; + this.aggravateMonsterBox.PropertyImage = Resources.aggravate_monster; + this.aggravateMonsterBox.PropertyKey = "aggravate_monster"; + this.aggravateMonsterBox.PropertyName = "Aggravate Monster"; + this.aggravateMonsterBox.Size = new Size(300, 20); + this.aggravateMonsterBox.TabIndex = 77; + // + // magicalBreathingBox + // + this.magicalBreathingBox.AllowExtrinsic = true; + this.magicalBreathingBox.AllowIntrinsic = true; + this.magicalBreathingBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "MagicalBreathing", true)); + this.magicalBreathingBox.HasExtrinsic = false; + this.magicalBreathingBox.HasIntrinsic = false; + this.magicalBreathingBox.Location = new Point(314, 289); + this.magicalBreathingBox.Margin = new Padding(1); + this.magicalBreathingBox.Name = "magicalBreathingBox"; + this.magicalBreathingBox.PropertyImage = Resources.magical_breathing; + this.magicalBreathingBox.PropertyKey = "magical_breathing"; + this.magicalBreathingBox.PropertyName = "Magical Breathing"; + this.magicalBreathingBox.Size = new Size(300, 20); + this.magicalBreathingBox.TabIndex = 76; + // + // magicResistanceBox + // + this.magicResistanceBox.AllowExtrinsic = true; + this.magicResistanceBox.AllowIntrinsic = false; + this.magicResistanceBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "MagicResistance", true)); + this.magicResistanceBox.HasExtrinsic = false; + this.magicResistanceBox.HasIntrinsic = false; + this.magicResistanceBox.Location = new Point(314, 69); + this.magicResistanceBox.Margin = new Padding(1); + this.magicResistanceBox.Name = "magicResistanceBox"; + this.magicResistanceBox.PropertyImage = Resources.magic_resistance; + this.magicResistanceBox.PropertyKey = "magic_resistance"; + this.magicResistanceBox.PropertyName = "Magic Resistance"; + this.magicResistanceBox.Size = new Size(300, 20); + this.magicResistanceBox.TabIndex = 75; + // + // reflectionBox + // + this.reflectionBox.AllowExtrinsic = true; + this.reflectionBox.AllowIntrinsic = false; + this.reflectionBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "Reflection", true)); + this.reflectionBox.HasExtrinsic = false; + this.reflectionBox.HasIntrinsic = false; + this.reflectionBox.Location = new Point(314, 47); + this.reflectionBox.Margin = new Padding(1); + this.reflectionBox.Name = "reflectionBox"; + this.reflectionBox.PropertyImage = Resources.reflection; + this.reflectionBox.PropertyKey = "reflection"; + this.reflectionBox.PropertyName = "Reflection"; + this.reflectionBox.Size = new Size(300, 20); + this.reflectionBox.TabIndex = 74; + // + // acidResistanceBox + // + this.acidResistanceBox.AllowExtrinsic = true; + this.acidResistanceBox.AllowIntrinsic = false; + this.acidResistanceBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "AcidResistance", true)); + this.acidResistanceBox.HasExtrinsic = false; + this.acidResistanceBox.HasIntrinsic = false; + this.acidResistanceBox.Location = new Point(314, 25); + this.acidResistanceBox.Margin = new Padding(1); + this.acidResistanceBox.Name = "acidResistanceBox"; + this.acidResistanceBox.PropertyImage = Resources.acid_resistance; + this.acidResistanceBox.PropertyKey = "acid_resistance"; + this.acidResistanceBox.PropertyName = "Acid Resistance"; + this.acidResistanceBox.Size = new Size(300, 20); + this.acidResistanceBox.TabIndex = 73; + // + // teleportitisBox + // + this.teleportitisBox.AllowExtrinsic = true; + this.teleportitisBox.AllowIntrinsic = true; + this.teleportitisBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "Teleportitis", true)); + this.teleportitisBox.HasExtrinsic = false; + this.teleportitisBox.HasIntrinsic = false; + this.teleportitisBox.Location = new Point(12, 311); + this.teleportitisBox.Margin = new Padding(1); + this.teleportitisBox.Name = "teleportitisBox"; + this.teleportitisBox.PropertyImage = Resources.teleportitis; + this.teleportitisBox.PropertyKey = "teleportitis"; + this.teleportitisBox.PropertyName = "Teleportitis"; + this.teleportitisBox.Size = new Size(300, 20); + this.teleportitisBox.TabIndex = 70; + // + // warningBox + // + this.warningBox.AllowExtrinsic = true; + this.warningBox.AllowIntrinsic = true; + this.warningBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "Warning", true)); + this.warningBox.HasExtrinsic = false; + this.warningBox.HasIntrinsic = false; + this.warningBox.Location = new Point(12, 333); + this.warningBox.Margin = new Padding(1); + this.warningBox.Name = "warningBox"; + this.warningBox.PropertyImage = Resources.warning; + this.warningBox.PropertyKey = "warning"; + this.warningBox.PropertyName = "Warning"; + this.warningBox.Size = new Size(300, 20); + this.warningBox.TabIndex = 69; + // + // disintegrationResistanceBox + // + this.disintegrationResistanceBox.AllowExtrinsic = true; + this.disintegrationResistanceBox.AllowIntrinsic = true; + this.disintegrationResistanceBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "DisintegrationResistance", true)); + this.disintegrationResistanceBox.HasExtrinsic = false; + this.disintegrationResistanceBox.HasIntrinsic = false; + this.disintegrationResistanceBox.Location = new Point(12, 47); + this.disintegrationResistanceBox.Margin = new Padding(1); + this.disintegrationResistanceBox.Name = "disintegrationResistanceBox"; + this.disintegrationResistanceBox.PropertyImage = Resources.disintegration_resistance; + this.disintegrationResistanceBox.PropertyKey = "disintegration_resistance"; + this.disintegrationResistanceBox.PropertyName = "Disintegration Resistance"; + this.disintegrationResistanceBox.Size = new Size(300, 20); + this.disintegrationResistanceBox.TabIndex = 68; + // + // fireResistanceBox + // + this.fireResistanceBox.AllowExtrinsic = true; + this.fireResistanceBox.AllowIntrinsic = true; + this.fireResistanceBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "FireResistance", true)); + this.fireResistanceBox.HasExtrinsic = false; + this.fireResistanceBox.HasIntrinsic = false; + this.fireResistanceBox.Location = new Point(12, 69); + this.fireResistanceBox.Margin = new Padding(1); + this.fireResistanceBox.Name = "fireResistanceBox"; + this.fireResistanceBox.PropertyImage = Resources.fire_resistance; + this.fireResistanceBox.PropertyKey = "fire_resistance"; + this.fireResistanceBox.PropertyName = "Fire Resistance"; + this.fireResistanceBox.Size = new Size(300, 20); + this.fireResistanceBox.TabIndex = 67; + // + // invisibilityBox + // + this.invisibilityBox.AllowExtrinsic = true; + this.invisibilityBox.AllowIntrinsic = true; + this.invisibilityBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "Invisibility", true)); + this.invisibilityBox.HasExtrinsic = false; + this.invisibilityBox.HasIntrinsic = false; + this.invisibilityBox.Location = new Point(12, 91); + this.invisibilityBox.Margin = new Padding(1); + this.invisibilityBox.Name = "invisibilityBox"; + this.invisibilityBox.PropertyImage = Resources.invisibility; + this.invisibilityBox.PropertyKey = "invisibility"; + this.invisibilityBox.PropertyName = "Invisibility"; + this.invisibilityBox.Size = new Size(300, 20); + this.invisibilityBox.TabIndex = 66; + // + // poisonResistanceBox + // + this.poisonResistanceBox.AllowExtrinsic = true; + this.poisonResistanceBox.AllowIntrinsic = true; + this.poisonResistanceBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "PoisonResistance", true)); + this.poisonResistanceBox.HasExtrinsic = false; + this.poisonResistanceBox.HasIntrinsic = false; + this.poisonResistanceBox.Location = new Point(12, 113); + this.poisonResistanceBox.Margin = new Padding(1); + this.poisonResistanceBox.Name = "poisonResistanceBox"; + this.poisonResistanceBox.PropertyImage = Resources.poison_resistance; + this.poisonResistanceBox.PropertyKey = "poison_resistance"; + this.poisonResistanceBox.PropertyName = "Poison Resistance"; + this.poisonResistanceBox.Size = new Size(300, 20); + this.poisonResistanceBox.TabIndex = 65; + // + // searchingBox + // + this.searchingBox.AllowExtrinsic = true; + this.searchingBox.AllowIntrinsic = true; + this.searchingBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "Searching", true)); + this.searchingBox.HasExtrinsic = false; + this.searchingBox.HasIntrinsic = false; + this.searchingBox.Location = new Point(12, 135); + this.searchingBox.Margin = new Padding(1); + this.searchingBox.Name = "searchingBox"; + this.searchingBox.PropertyImage = Resources.searching; + this.searchingBox.PropertyKey = "searching"; + this.searchingBox.PropertyName = "Searching"; + this.searchingBox.Size = new Size(300, 20); + this.searchingBox.TabIndex = 64; + // + // seeInvisibleBox + // + this.seeInvisibleBox.AllowExtrinsic = true; + this.seeInvisibleBox.AllowIntrinsic = true; + this.seeInvisibleBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "SeeInvisible", true)); + this.seeInvisibleBox.HasExtrinsic = false; + this.seeInvisibleBox.HasIntrinsic = false; + this.seeInvisibleBox.Location = new Point(12, 157); + this.seeInvisibleBox.Margin = new Padding(1); + this.seeInvisibleBox.Name = "seeInvisibleBox"; + this.seeInvisibleBox.PropertyImage = Resources.see_invisible; + this.seeInvisibleBox.PropertyKey = "see_invisible"; + this.seeInvisibleBox.PropertyName = "See Invisible"; + this.seeInvisibleBox.Size = new Size(300, 20); + this.seeInvisibleBox.TabIndex = 63; + // + // shockResistanceBox + // + this.shockResistanceBox.AllowExtrinsic = true; + this.shockResistanceBox.AllowIntrinsic = true; + this.shockResistanceBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "ShockResistance", true)); + this.shockResistanceBox.HasExtrinsic = false; + this.shockResistanceBox.HasIntrinsic = false; + this.shockResistanceBox.Location = new Point(12, 179); + this.shockResistanceBox.Margin = new Padding(1); + this.shockResistanceBox.Name = "shockResistanceBox"; + this.shockResistanceBox.PropertyImage = Resources.shock_resistance; + this.shockResistanceBox.PropertyKey = "shock_resistance"; + this.shockResistanceBox.PropertyName = "Shock Resistance"; + this.shockResistanceBox.Size = new Size(300, 20); + this.shockResistanceBox.TabIndex = 62; + // + // sleepResistanceBox + // + this.sleepResistanceBox.AllowExtrinsic = true; + this.sleepResistanceBox.AllowIntrinsic = true; + this.sleepResistanceBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "SleepResistance", true)); + this.sleepResistanceBox.HasExtrinsic = false; + this.sleepResistanceBox.HasIntrinsic = false; + this.sleepResistanceBox.Location = new Point(12, 201); + this.sleepResistanceBox.Margin = new Padding(1); + this.sleepResistanceBox.Name = "sleepResistanceBox"; + this.sleepResistanceBox.PropertyImage = Resources.sleep_resistance; + this.sleepResistanceBox.PropertyKey = "sleep_resistance"; + this.sleepResistanceBox.PropertyName = "Sleep Resistance"; + this.sleepResistanceBox.Size = new Size(300, 20); + this.sleepResistanceBox.TabIndex = 61; + // + // speedBox + // + this.speedBox.AllowExtrinsic = true; + this.speedBox.AllowIntrinsic = true; + this.speedBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "Speed", true)); + this.speedBox.HasExtrinsic = false; + this.speedBox.HasIntrinsic = false; + this.speedBox.Location = new Point(12, 223); + this.speedBox.Margin = new Padding(1); + this.speedBox.Name = "speedBox"; + this.speedBox.PropertyImage = Resources.speed; + this.speedBox.PropertyKey = "speed"; + this.speedBox.PropertyName = "Speed"; + this.speedBox.Size = new Size(300, 20); + this.speedBox.TabIndex = 60; + // + // stealthBox + // + this.stealthBox.AllowExtrinsic = true; + this.stealthBox.AllowIntrinsic = true; + this.stealthBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "Stealth", true)); + this.stealthBox.HasExtrinsic = false; + this.stealthBox.HasIntrinsic = false; + this.stealthBox.Location = new Point(12, 245); + this.stealthBox.Margin = new Padding(1); + this.stealthBox.Name = "stealthBox"; + this.stealthBox.PropertyImage = Resources.stealth; + this.stealthBox.PropertyKey = "stealth"; + this.stealthBox.PropertyName = "Stealth"; + this.stealthBox.Size = new Size(300, 20); + this.stealthBox.TabIndex = 59; + // + // teleportControlBox + // + this.teleportControlBox.AllowExtrinsic = true; + this.teleportControlBox.AllowIntrinsic = true; + this.teleportControlBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "TeleportControl", true)); + this.teleportControlBox.HasExtrinsic = false; + this.teleportControlBox.HasIntrinsic = false; + this.teleportControlBox.Location = new Point(12, 289); + this.teleportControlBox.Margin = new Padding(1); + this.teleportControlBox.Name = "teleportControlBox"; + this.teleportControlBox.PropertyImage = Resources.teleport_control; + this.teleportControlBox.PropertyKey = "teleport_control"; + this.teleportControlBox.PropertyName = "Teleport Control"; + this.teleportControlBox.Size = new Size(300, 20); + this.teleportControlBox.TabIndex = 58; + // + // telepathyBox + // + this.telepathyBox.AllowExtrinsic = true; + this.telepathyBox.AllowIntrinsic = true; + this.telepathyBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "Telepathy", true)); + this.telepathyBox.HasExtrinsic = false; + this.telepathyBox.HasIntrinsic = false; + this.telepathyBox.Location = new Point(12, 267); + this.telepathyBox.Margin = new Padding(1); + this.telepathyBox.Name = "telepathyBox"; + this.telepathyBox.PropertyImage = Resources.telepathy; + this.telepathyBox.PropertyKey = "telepathy"; + this.telepathyBox.PropertyName = "Telepathy"; + this.telepathyBox.Size = new Size(300, 20); + this.telepathyBox.TabIndex = 58; + // + // coldResistanceBox + // + this.coldResistanceBox.AllowExtrinsic = true; + this.coldResistanceBox.AllowIntrinsic = true; + this.coldResistanceBox.DataBindings.Add(new Binding("Property", this.propertiesBindingSource, "ColdResistance", true)); + this.coldResistanceBox.HasExtrinsic = false; + this.coldResistanceBox.HasIntrinsic = false; + this.coldResistanceBox.Location = new Point(12, 25); + this.coldResistanceBox.Margin = new Padding(1); + this.coldResistanceBox.Name = "coldResistanceBox"; + this.coldResistanceBox.PropertyImage = Resources.cold_resistance; + this.coldResistanceBox.PropertyKey = "cold_resistance"; + this.coldResistanceBox.PropertyName = "Cold Resistance"; + this.coldResistanceBox.Size = new Size(300, 20); + this.coldResistanceBox.TabIndex = 57; // // label2 // - label2.AutoSize = true; - label2.Location = new Point(6, 411); - label2.Name = "label2"; - label2.Size = new Size(64, 15); - label2.TabIndex = 18; - label2.Text = "Last Prayer"; + this.label2.AutoSize = true; + this.label2.Location = new Point(12, 396); + this.label2.Name = "label2"; + this.label2.Size = new Size(64, 15); + this.label2.TabIndex = 18; + this.label2.Text = "Last Prayer"; // // lastPrayerPicker // - lastPrayerPicker.DataBindings.Add(new Binding("Value", intrinsicsBindingSource, "LastPrayer", true)); - lastPrayerPicker.Increment = new decimal(new int[] { 1000, 0, 0, 0 }); - lastPrayerPicker.Location = new Point(76, 409); - lastPrayerPicker.Maximum = new decimal(new int[] { 100000, 0, 0, 0 }); - lastPrayerPicker.Name = "lastPrayerPicker"; - lastPrayerPicker.Size = new Size(61, 23); - lastPrayerPicker.TabIndex = 17; - lastPrayerPicker.ThousandsSeparator = true; - // - // intrinsicsBindingSource - // - intrinsicsBindingSource.DataSource = typeof(IntrinsicsSource); - intrinsicsBindingSource.Position = 0; + this.lastPrayerPicker.DataBindings.Add(new Binding("Value", this.propertiesBindingSource, "LastPrayer", true)); + this.lastPrayerPicker.Increment = new decimal(new int[] { 1000, 0, 0, 0 }); + this.lastPrayerPicker.Location = new Point(82, 394); + this.lastPrayerPicker.Maximum = new decimal(new int[] { 100000, 0, 0, 0 }); + this.lastPrayerPicker.Name = "lastPrayerPicker"; + this.lastPrayerPicker.Size = new Size(61, 23); + this.lastPrayerPicker.TabIndex = 17; + this.lastPrayerPicker.ThousandsSeparator = true; + this.lastPrayerPicker.ValueChanged += this.lastPrayerPicker_ValueChanged; // // label1 // - label1.AutoSize = true; - label1.Location = new Point(6, 382); - label1.Name = "label1"; - label1.Size = new Size(62, 15); - label1.TabIndex = 16; - label1.Text = "Protection"; + this.label1.AutoSize = true; + this.label1.Location = new Point(12, 367); + this.label1.Name = "label1"; + this.label1.Size = new Size(62, 15); + this.label1.TabIndex = 16; + this.label1.Text = "Protection"; // // protectionPicker // - protectionPicker.DataBindings.Add(new Binding("Value", intrinsicsBindingSource, "Protection", true)); - protectionPicker.Location = new Point(74, 380); - protectionPicker.Maximum = new decimal(new int[] { 30, 0, 0, 0 }); - protectionPicker.Name = "protectionPicker"; - protectionPicker.Size = new Size(41, 23); - protectionPicker.TabIndex = 15; - // - // warningCheckbox - // - warningCheckbox.AutoSize = true; - warningCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "Warning", true)); - warningCheckbox.Location = new Point(6, 355); - warningCheckbox.Name = "warningCheckbox"; - warningCheckbox.Size = new Size(71, 19); - warningCheckbox.TabIndex = 14; - warningCheckbox.Text = "Warning"; - warningCheckbox.UseVisualStyleBackColor = true; - // - // teleportitisCheckbox - // - teleportitisCheckbox.AutoSize = true; - teleportitisCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "Teleportitis", true)); - teleportitisCheckbox.Location = new Point(6, 330); - teleportitisCheckbox.Name = "teleportitisCheckbox"; - teleportitisCheckbox.Size = new Size(83, 19); - teleportitisCheckbox.TabIndex = 13; - teleportitisCheckbox.Text = "Teleportitis"; - teleportitisCheckbox.UseVisualStyleBackColor = true; - // - // teleportControlCheckbox - // - teleportControlCheckbox.AutoSize = true; - teleportControlCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "TeleportControl", true)); - teleportControlCheckbox.Location = new Point(6, 305); - teleportControlCheckbox.Name = "teleportControlCheckbox"; - teleportControlCheckbox.Size = new Size(111, 19); - teleportControlCheckbox.TabIndex = 12; - teleportControlCheckbox.Text = "Teleport Control"; - teleportControlCheckbox.UseVisualStyleBackColor = true; - // - // telepathyCheckbox - // - telepathyCheckbox.AutoSize = true; - telepathyCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "Telepathy", true)); - telepathyCheckbox.Location = new Point(6, 280); - telepathyCheckbox.Name = "telepathyCheckbox"; - telepathyCheckbox.Size = new Size(76, 19); - telepathyCheckbox.TabIndex = 11; - telepathyCheckbox.Text = "Telepathy"; - telepathyCheckbox.UseVisualStyleBackColor = true; - // - // stealthCheckbox - // - stealthCheckbox.AutoSize = true; - stealthCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "Stealth", true)); - stealthCheckbox.Location = new Point(6, 255); - stealthCheckbox.Name = "stealthCheckbox"; - stealthCheckbox.Size = new Size(62, 19); - stealthCheckbox.TabIndex = 10; - stealthCheckbox.Text = "Stealth"; - stealthCheckbox.UseVisualStyleBackColor = true; - // - // speedCheckbox - // - speedCheckbox.AutoSize = true; - speedCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "Speed", true)); - speedCheckbox.Location = new Point(6, 230); - speedCheckbox.Name = "speedCheckbox"; - speedCheckbox.Size = new Size(58, 19); - speedCheckbox.TabIndex = 9; - speedCheckbox.Text = "Speed"; - speedCheckbox.UseVisualStyleBackColor = true; - // - // sleepResistanceCheckbox - // - sleepResistanceCheckbox.AutoSize = true; - sleepResistanceCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "SleepResistance", true)); - sleepResistanceCheckbox.Location = new Point(6, 207); - sleepResistanceCheckbox.Name = "sleepResistanceCheckbox"; - sleepResistanceCheckbox.Size = new Size(112, 19); - sleepResistanceCheckbox.TabIndex = 8; - sleepResistanceCheckbox.Text = "Sleep Resistance"; - sleepResistanceCheckbox.UseVisualStyleBackColor = true; - // - // shockResistanceCheckbox - // - shockResistanceCheckbox.AutoSize = true; - shockResistanceCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "ShockResistance", true)); - shockResistanceCheckbox.Location = new Point(6, 182); - shockResistanceCheckbox.Name = "shockResistanceCheckbox"; - shockResistanceCheckbox.Size = new Size(116, 19); - shockResistanceCheckbox.TabIndex = 7; - shockResistanceCheckbox.Text = "Shock Resistance"; - shockResistanceCheckbox.UseVisualStyleBackColor = true; - // - // seeInvisibleCheckbox - // - seeInvisibleCheckbox.AutoSize = true; - seeInvisibleCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "SeeInvisible", true)); - seeInvisibleCheckbox.Location = new Point(6, 157); - seeInvisibleCheckbox.Name = "seeInvisibleCheckbox"; - seeInvisibleCheckbox.Size = new Size(90, 19); - seeInvisibleCheckbox.TabIndex = 6; - seeInvisibleCheckbox.Text = "See Invisible"; - seeInvisibleCheckbox.UseVisualStyleBackColor = true; - // - // searchingCheckbox - // - searchingCheckbox.AutoSize = true; - searchingCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "Searching", true)); - searchingCheckbox.Location = new Point(6, 131); - searchingCheckbox.Name = "searchingCheckbox"; - searchingCheckbox.Size = new Size(78, 19); - searchingCheckbox.TabIndex = 5; - searchingCheckbox.Text = "Searching"; - searchingCheckbox.UseVisualStyleBackColor = true; - // - // poisonResistanceCheckbox - // - poisonResistanceCheckbox.AutoSize = true; - poisonResistanceCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "PoisonResistance", true)); - poisonResistanceCheckbox.Location = new Point(6, 106); - poisonResistanceCheckbox.Name = "poisonResistanceCheckbox"; - poisonResistanceCheckbox.Size = new Size(120, 19); - poisonResistanceCheckbox.TabIndex = 4; - poisonResistanceCheckbox.Text = "Poison Resistance"; - poisonResistanceCheckbox.UseVisualStyleBackColor = true; - // - // invisibleCheckbox - // - invisibleCheckbox.AutoSize = true; - invisibleCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "Invisible", true)); - invisibleCheckbox.Location = new Point(6, 81); - invisibleCheckbox.Name = "invisibleCheckbox"; - invisibleCheckbox.Size = new Size(69, 19); - invisibleCheckbox.TabIndex = 3; - invisibleCheckbox.Text = "Inivisble"; - invisibleCheckbox.UseVisualStyleBackColor = true; - // - // fireResistanceCheckbox - // - fireResistanceCheckbox.AutoSize = true; - fireResistanceCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "FireResistance", true)); - fireResistanceCheckbox.Location = new Point(6, 56); - fireResistanceCheckbox.Name = "fireResistanceCheckbox"; - fireResistanceCheckbox.Size = new Size(103, 19); - fireResistanceCheckbox.TabIndex = 2; - fireResistanceCheckbox.Text = "Fire Resistance"; - fireResistanceCheckbox.UseVisualStyleBackColor = true; - // - // disintegrationResistanceCheckbox - // - disintegrationResistanceCheckbox.AutoSize = true; - disintegrationResistanceCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "DisintegrationResistance", true)); - disintegrationResistanceCheckbox.Location = new Point(6, 31); - disintegrationResistanceCheckbox.Name = "disintegrationResistanceCheckbox"; - disintegrationResistanceCheckbox.Size = new Size(158, 19); - disintegrationResistanceCheckbox.TabIndex = 1; - disintegrationResistanceCheckbox.Text = "Disintegration Resistance"; - disintegrationResistanceCheckbox.UseVisualStyleBackColor = true; - // - // coldResistanceCheckbox - // - coldResistanceCheckbox.AutoSize = true; - coldResistanceCheckbox.DataBindings.Add(new Binding("Checked", intrinsicsBindingSource, "ColdResistance", true)); - coldResistanceCheckbox.Location = new Point(6, 6); - coldResistanceCheckbox.Name = "coldResistanceCheckbox"; - coldResistanceCheckbox.Size = new Size(109, 19); - coldResistanceCheckbox.TabIndex = 0; - coldResistanceCheckbox.Text = "Cold Resistance"; - coldResistanceCheckbox.UseVisualStyleBackColor = true; + this.protectionPicker.DataBindings.Add(new Binding("Value", this.propertiesBindingSource, "Protection", true)); + this.protectionPicker.Location = new Point(80, 365); + this.protectionPicker.Maximum = new decimal(new int[] { 30, 0, 0, 0 }); + this.protectionPicker.Name = "protectionPicker"; + this.protectionPicker.Size = new Size(41, 23); + this.protectionPicker.TabIndex = 15; + this.protectionPicker.ValueChanged += this.protectionPicker_ValueChanged; // // sokobanTab // - sokobanTab.Controls.Add(sokobanVertical); - sokobanTab.Controls.Add(sokobanHorizontal); - sokobanTab.Controls.Add(sokobanPrev); - sokobanTab.Controls.Add(sokobanNext); - sokobanTab.Controls.Add(sokobanSolution); - sokobanTab.Controls.Add(sokobanLevelList); - sokobanTab.Location = new Point(4, 24); - sokobanTab.Name = "sokobanTab"; - sokobanTab.Padding = new Padding(3); - sokobanTab.Size = new Size(664, 593); - sokobanTab.TabIndex = 0; - sokobanTab.Text = "Sokoban"; - sokobanTab.UseVisualStyleBackColor = true; + this.sokobanTab.Controls.Add(this.sokobanVertical); + this.sokobanTab.Controls.Add(this.sokobanHorizontal); + this.sokobanTab.Controls.Add(this.sokobanPrev); + this.sokobanTab.Controls.Add(this.sokobanNext); + this.sokobanTab.Controls.Add(this.sokobanSolution); + this.sokobanTab.Controls.Add(this.sokobanLevelList); + this.sokobanTab.Location = new Point(4, 24); + this.sokobanTab.Name = "sokobanTab"; + this.sokobanTab.Padding = new Padding(3); + this.sokobanTab.Size = new Size(664, 593); + this.sokobanTab.TabIndex = 0; + this.sokobanTab.Text = "Sokoban"; + this.sokobanTab.UseVisualStyleBackColor = true; // // sokobanVertical // - sokobanVertical.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - sokobanVertical.Location = new Point(151, 564); - sokobanVertical.Name = "sokobanVertical"; - sokobanVertical.Size = new Size(123, 23); - sokobanVertical.TabIndex = 3; - sokobanVertical.Text = "Vertical Reflection"; - sokobanVertical.UseVisualStyleBackColor = true; - sokobanVertical.CheckedChanged += sokobanReflection_CheckedChanged; - sokobanVertical.KeyDown += sokobanLevelList_KeyDown; + this.sokobanVertical.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + this.sokobanVertical.Location = new Point(151, 564); + this.sokobanVertical.Name = "sokobanVertical"; + this.sokobanVertical.Size = new Size(123, 23); + this.sokobanVertical.TabIndex = 3; + this.sokobanVertical.Text = "Vertical Reflection"; + this.sokobanVertical.UseVisualStyleBackColor = true; + this.sokobanVertical.CheckedChanged += this.sokobanReflection_CheckedChanged; + this.sokobanVertical.KeyDown += this.sokobanLevelList_KeyDown; // // sokobanHorizontal // - sokobanHorizontal.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - sokobanHorizontal.Location = new Point(6, 564); - sokobanHorizontal.Name = "sokobanHorizontal"; - sokobanHorizontal.Size = new Size(139, 23); - sokobanHorizontal.TabIndex = 2; - sokobanHorizontal.Text = "Horizontal Reflection"; - sokobanHorizontal.UseVisualStyleBackColor = true; - sokobanHorizontal.CheckedChanged += sokobanReflection_CheckedChanged; - sokobanHorizontal.KeyDown += sokobanLevelList_KeyDown; + this.sokobanHorizontal.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + this.sokobanHorizontal.Location = new Point(6, 564); + this.sokobanHorizontal.Name = "sokobanHorizontal"; + this.sokobanHorizontal.Size = new Size(139, 23); + this.sokobanHorizontal.TabIndex = 2; + this.sokobanHorizontal.Text = "Horizontal Reflection"; + this.sokobanHorizontal.UseVisualStyleBackColor = true; + this.sokobanHorizontal.CheckedChanged += this.sokobanReflection_CheckedChanged; + this.sokobanHorizontal.KeyDown += this.sokobanLevelList_KeyDown; // // sokobanPrev // - sokobanPrev.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - sokobanPrev.Location = new Point(438, 563); - sokobanPrev.Name = "sokobanPrev"; - sokobanPrev.Size = new Size(24, 23); - sokobanPrev.TabIndex = 4; - sokobanPrev.Text = "<"; - sokobanPrev.UseVisualStyleBackColor = true; - sokobanPrev.Click += sokobanPrev_Click; - sokobanPrev.KeyDown += sokobanLevelList_KeyDown; + this.sokobanPrev.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + this.sokobanPrev.Location = new Point(438, 563); + this.sokobanPrev.Name = "sokobanPrev"; + this.sokobanPrev.Size = new Size(24, 23); + this.sokobanPrev.TabIndex = 4; + this.sokobanPrev.Text = "<"; + this.sokobanPrev.UseVisualStyleBackColor = true; + this.sokobanPrev.Click += this.sokobanPrev_Click; + this.sokobanPrev.KeyDown += this.sokobanLevelList_KeyDown; // // sokobanNext // - sokobanNext.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - sokobanNext.Location = new Point(468, 563); - sokobanNext.Name = "sokobanNext"; - sokobanNext.Size = new Size(24, 23); - sokobanNext.TabIndex = 5; - sokobanNext.Text = ">"; - sokobanNext.UseVisualStyleBackColor = true; - sokobanNext.Click += sokobanNext_Click; - sokobanNext.KeyDown += sokobanLevelList_KeyDown; + this.sokobanNext.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + this.sokobanNext.Location = new Point(468, 563); + this.sokobanNext.Name = "sokobanNext"; + this.sokobanNext.Size = new Size(24, 23); + this.sokobanNext.TabIndex = 5; + this.sokobanNext.Text = ">"; + this.sokobanNext.UseVisualStyleBackColor = true; + this.sokobanNext.Click += this.sokobanNext_Click; + this.sokobanNext.KeyDown += this.sokobanLevelList_KeyDown; // // sokobanSolution // - sokobanSolution.Font = new Font("Consolas", 18F); - sokobanSolution.Location = new Point(6, 6); - sokobanSolution.Name = "sokobanSolution"; - sokobanSolution.Size = new Size(486, 554); - sokobanSolution.TabIndex = 1; + this.sokobanSolution.Font = new Font("Consolas", 18F); + this.sokobanSolution.Location = new Point(6, 6); + this.sokobanSolution.Name = "sokobanSolution"; + this.sokobanSolution.Size = new Size(486, 554); + this.sokobanSolution.TabIndex = 1; // // sokobanLevelList // - sokobanLevelList.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right; - sokobanLevelList.FormattingEnabled = true; - sokobanLevelList.IntegralHeight = false; - sokobanLevelList.Location = new Point(498, 6); - sokobanLevelList.Name = "sokobanLevelList"; - sokobanLevelList.Size = new Size(160, 581); - sokobanLevelList.TabIndex = 1; - sokobanLevelList.SelectedIndexChanged += sokobanLevelList_SelectedIndexChanged; - sokobanLevelList.KeyDown += sokobanLevelList_KeyDown; + this.sokobanLevelList.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right; + this.sokobanLevelList.FormattingEnabled = true; + this.sokobanLevelList.IntegralHeight = false; + this.sokobanLevelList.Location = new Point(498, 6); + this.sokobanLevelList.Name = "sokobanLevelList"; + this.sokobanLevelList.Size = new Size(160, 581); + this.sokobanLevelList.TabIndex = 1; + this.sokobanLevelList.SelectedIndexChanged += this.sokobanLevelList_SelectedIndexChanged; + this.sokobanLevelList.KeyDown += this.sokobanLevelList_KeyDown; // // charismaSourceBindingSource // - charismaSourceBindingSource.DataSource = typeof(CharismaSource); - charismaSourceBindingSource.Position = 0; + this.charismaSourceBindingSource.DataSource = typeof(CharismaSource); + this.charismaSourceBindingSource.Position = 0; // // mainMenu // - mainMenu.Items.AddRange(new ToolStripItem[] { fileToolStripMenuItem }); - mainMenu.Location = new Point(0, 0); - mainMenu.Name = "mainMenu"; - mainMenu.Size = new Size(696, 24); - mainMenu.TabIndex = 1; + this.mainMenu.Items.AddRange(new ToolStripItem[] { this.fileToolStripMenuItem }); + this.mainMenu.Location = new Point(0, 0); + this.mainMenu.Name = "mainMenu"; + this.mainMenu.Size = new Size(696, 24); + this.mainMenu.TabIndex = 1; // // fileToolStripMenuItem // - fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { resetToolStripMenuItem }); - fileToolStripMenuItem.Name = "fileToolStripMenuItem"; - fileToolStripMenuItem.Size = new Size(37, 20); - fileToolStripMenuItem.Text = "File"; + this.fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { this.resetToolStripMenuItem }); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new Size(37, 20); + this.fileToolStripMenuItem.Text = "File"; // // resetToolStripMenuItem // - resetToolStripMenuItem.Name = "resetToolStripMenuItem"; - resetToolStripMenuItem.Size = new Size(102, 22); - resetToolStripMenuItem.Text = "Reset"; + this.resetToolStripMenuItem.Name = "resetToolStripMenuItem"; + this.resetToolStripMenuItem.Size = new Size(102, 22); + this.resetToolStripMenuItem.Text = "Reset"; // // MainForm // - AutoScaleDimensions = new SizeF(7F, 15F); - AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(696, 660); - Controls.Add(mainTabControl); - Controls.Add(mainMenu); - Icon = (Icon) resources.GetObject("$this.Icon"); - MainMenuStrip = mainMenu; - MaximizeBox = false; - MaximumSize = new Size(712, 1200); - MinimumSize = new Size(712, 500); - Name = "MainForm"; - SizeGripStyle = SizeGripStyle.Hide; - StartPosition = FormStartPosition.CenterScreen; - Text = "NethackHelper"; - FormClosing += Form1_FormClosing; - mainTabControl.ResumeLayout(false); - itemsTab.ResumeLayout(false); - itemsTab.PerformLayout(); - ((System.ComponentModel.ISupportInitialize) saveSourceBindingSource).EndInit(); - itemTabControl.ResumeLayout(false); - scrollPotionTab.ResumeLayout(false); - wandRingTab.ResumeLayout(false); - spellbookTab.ResumeLayout(false); - toolsTab.ResumeLayout(false); - intrinsicsTab.ResumeLayout(false); - intrinsicsTab.PerformLayout(); - ((System.ComponentModel.ISupportInitialize) lastPrayerPicker).EndInit(); - ((System.ComponentModel.ISupportInitialize) intrinsicsBindingSource).EndInit(); - ((System.ComponentModel.ISupportInitialize) protectionPicker).EndInit(); - sokobanTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize) charismaSourceBindingSource).EndInit(); - mainMenu.ResumeLayout(false); - mainMenu.PerformLayout(); - ResumeLayout(false); - PerformLayout(); + this.AutoScaleDimensions = new SizeF(7F, 15F); + this.AutoScaleMode = AutoScaleMode.Font; + this.ClientSize = new Size(696, 660); + this.Controls.Add(this.mainTabControl); + this.Controls.Add(this.mainMenu); + this.Icon = (Icon) resources.GetObject("$this.Icon"); + this.MainMenuStrip = this.mainMenu; + this.MaximizeBox = false; + this.MaximumSize = new Size(712, 1200); + this.MinimumSize = new Size(712, 500); + this.Name = "MainForm"; + this.SizeGripStyle = SizeGripStyle.Hide; + this.StartPosition = FormStartPosition.CenterScreen; + this.Text = "NethackHelper"; + this.FormClosing += this.MainForm_FormClosing; + this.mainTabControl.ResumeLayout(false); + this.itemsTab.ResumeLayout(false); + this.itemsTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize) this.saveSourceBindingSource).EndInit(); + this.itemTabControl.ResumeLayout(false); + this.scrollPotionTab.ResumeLayout(false); + this.wandRingTab.ResumeLayout(false); + this.spellbookTab.ResumeLayout(false); + this.toolsTab.ResumeLayout(false); + this.propertiesTab.ResumeLayout(false); + this.propertiesTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize) this.propertiesBindingSource).EndInit(); + ((System.ComponentModel.ISupportInitialize) this.lastPrayerPicker).EndInit(); + ((System.ComponentModel.ISupportInitialize) this.protectionPicker).EndInit(); + this.sokobanTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize) this.charismaSourceBindingSource).EndInit(); + this.mainMenu.ResumeLayout(false); + this.mainMenu.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); } #endregion @@ -698,27 +1053,12 @@ namespace NethackHelper { private ItemDisplay ringDisplay; private ItemDisplay wandDisplay; private CheckBox suckerBox; - private TabPage intrinsicsTab; - private CheckBox warningCheckbox; - private CheckBox teleportitisCheckbox; - private CheckBox teleportControlCheckbox; - private CheckBox telepathyCheckbox; - private CheckBox stealthCheckbox; - private CheckBox speedCheckbox; - private CheckBox sleepResistanceCheckbox; - private CheckBox shockResistanceCheckbox; - private CheckBox seeInvisibleCheckbox; - private CheckBox searchingCheckbox; - private CheckBox poisonResistanceCheckbox; - private CheckBox invisibleCheckbox; - private CheckBox fireResistanceCheckbox; - private CheckBox disintegrationResistanceCheckbox; - private CheckBox coldResistanceCheckbox; + private TabPage propertiesTab; private Label label2; private NumericUpDown lastPrayerPicker; private Label label1; private NumericUpDown protectionPicker; - private BindingSource intrinsicsBindingSource; + private BindingSource propertiesBindingSource; private BindingSource saveSourceBindingSource; private BindingSource charismaSourceBindingSource; private MenuStrip mainMenu; @@ -731,5 +1071,35 @@ namespace NethackHelper { private TabPage toolsTab; private ItemDisplay toolDisplay; private ItemDisplay armorDisplay; + private Label extrinsicLabel; + private PropertyBox coldResistanceBox; + private PropertyBox disintegrationResistanceBox; + private PropertyBox fireResistanceBox; + private PropertyBox invisibilityBox; + private PropertyBox poisonResistanceBox; + private PropertyBox searchingBox; + private PropertyBox seeInvisibleBox; + private PropertyBox shockResistanceBox; + private PropertyBox sleepResistanceBox; + private PropertyBox speedBox; + private PropertyBox stealthBox; + private PropertyBox telepathyBox; + private PropertyBox teleportitisBox; + private PropertyBox warningBox; + private PropertyBox teleportControlBox; + private PropertyBox polymorphControlBox; + private PropertyBox polymorphitisBox; + private PropertyBox protectionFromShapeChangersBox; + private PropertyBox regenerationBox; + private PropertyBox conflictBox; + private PropertyBox aggravateMonsterBox; + private PropertyBox magicalBreathingBox; + private PropertyBox magicResistanceBox; + private PropertyBox reflectionBox; + private PropertyBox acidResistanceBox; + private PropertyBox freeActionBox; + private PropertyBox slowDigestionBox; + private PropertyBox hungerBox; + private CheckBox godAngryCheckbox; } } \ No newline at end of file diff --git a/NethackHelper/MainForm.cs b/NethackHelper/MainForm.cs index 48345a3..4019c8c 100644 --- a/NethackHelper/MainForm.cs +++ b/NethackHelper/MainForm.cs @@ -1,10 +1,16 @@ namespace NethackHelper { + using Microsoft.AspNetCore.Builder; + using Microsoft.AspNetCore.SignalR; + using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.IO; + using System.Threading.Tasks; using System.Windows.Forms; public partial class MainForm : Form { + private const int PORT = 5993; + private readonly List sokobans = []; private int sokobanStepIndex = 0; @@ -46,6 +52,27 @@ namespace NethackHelper { } this.LoadSave(); + + this.RunWebserver(); + } + + private void RunWebserver() { + WebApplicationBuilder builder = WebApplication.CreateBuilder(); + builder.Services.AddSignalR(); + + WebApplication app = builder.Build(); + + app.UseStaticFiles(); + app.MapHub("/webview"); + + string baseUrl = $"http://localhost:{PORT}/"; + Task _ = app.RunAsync(baseUrl); + + IHubContext? hub = app.Services.GetService>(); + + if (hub != null) { + TrackerManager.Instance.Tracker = hub.Clients.All; + } } private void Reset(Version version) { @@ -62,7 +89,7 @@ namespace NethackHelper { this.Text = "NethackHelper - " + version.Name; - intrinsicsBindingSource.DataSource = save.Intrinsics; + propertiesBindingSource.DataSource = save.Properties; charismaSelector.SelectedItem = save.CharismaClass; @@ -196,7 +223,7 @@ namespace NethackHelper { } } - private void Form1_FormClosing(object sender, FormClosingEventArgs e) { + private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { var save = SaveData.Instance; save.Potions = this.potionDisplay.Export(); save.Rings = this.ringDisplay.Export(); @@ -209,5 +236,17 @@ namespace NethackHelper { save.Save(); } + + private void protectionPicker_ValueChanged(object sender, EventArgs e) { + TrackerManager.Instance.Tracker.UpdateProtection((int) protectionPicker.Value); + } + + private void lastPrayerPicker_ValueChanged(object sender, EventArgs e) { + TrackerManager.Instance.Tracker.UpdatePrayer((int) lastPrayerPicker.Value); + } + + private void godAngryCheckbox_CheckedChanged(object sender, EventArgs e) { + TrackerManager.Instance.Tracker.UpdateAngry(godAngryCheckbox.Checked); + } } } \ No newline at end of file diff --git a/NethackHelper/MainForm.resx b/NethackHelper/MainForm.resx index e9380f2..81c0c41 100644 --- a/NethackHelper/MainForm.resx +++ b/NethackHelper/MainForm.resx @@ -117,11 +117,17 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + False + + + False + - 410, 17 + 416, 17 - 712, 17 + 718, 17 @@ -248,14 +254,14 @@ AAAAAACPAAAAAQYAAAAFAAAAAfj////5////AQAAAC0AAAAL - - 232, 17 - - + 17, 17 + + 201, 17 + - 600, 17 + 606, 17 diff --git a/NethackHelper/NethackHelper.csproj b/NethackHelper/NethackHelper.csproj index b516735..d5fbdc9 100644 --- a/NethackHelper/NethackHelper.csproj +++ b/NethackHelper/NethackHelper.csproj @@ -7,6 +7,7 @@ true disable icon.ico + 2.0.0 @@ -15,6 +16,7 @@ + @@ -24,12 +26,36 @@ PreserveNewest + + Always + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + True + True + Resources.resx + + + ResXFileCodeGenerator + Resources.Designer.cs + \ No newline at end of file diff --git a/NethackHelper/Properties/DataSources/Intrinsics.datasource b/NethackHelper/Properties/DataSources/PropertiesSource.datasource similarity index 63% rename from NethackHelper/Properties/DataSources/Intrinsics.datasource rename to NethackHelper/Properties/DataSources/PropertiesSource.datasource index dfdca3e..1b13f21 100644 --- a/NethackHelper/Properties/DataSources/Intrinsics.datasource +++ b/NethackHelper/Properties/DataSources/PropertiesSource.datasource @@ -5,6 +5,6 @@ Renaming the file extension or editing the content of this file may cause the file to be unrecognizable by the program. --> - - NethackHelper.Intrinsics, NethackHelper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + + NethackHelper.Properties, NethackHelper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/NethackHelper/Properties/Resources.Designer.cs b/NethackHelper/Properties/Resources.Designer.cs new file mode 100644 index 0000000..424f525 --- /dev/null +++ b/NethackHelper/Properties/Resources.Designer.cs @@ -0,0 +1,413 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace NethackHelper.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NethackHelper.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap acid_resistance { + get { + object obj = ResourceManager.GetObject("acid_resistance", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap aggravate_monster { + get { + object obj = ResourceManager.GetObject("aggravate_monster", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap angry_god { + get { + object obj = ResourceManager.GetObject("angry_god", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cold_resistance { + get { + object obj = ResourceManager.GetObject("cold_resistance", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap conflict { + get { + object obj = ResourceManager.GetObject("conflict", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap disintegration_resistance { + get { + object obj = ResourceManager.GetObject("disintegration_resistance", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap fire_resistance { + get { + object obj = ResourceManager.GetObject("fire_resistance", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap food_appraisal { + get { + object obj = ResourceManager.GetObject("food_appraisal", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap free_action { + get { + object obj = ResourceManager.GetObject("free_action", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap hunger { + get { + object obj = ResourceManager.GetObject("hunger", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap infravision { + get { + object obj = ResourceManager.GetObject("infravision", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap invisibility { + get { + object obj = ResourceManager.GetObject("invisibility", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap jumping { + get { + object obj = ResourceManager.GetObject("jumping", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap levitation { + get { + object obj = ResourceManager.GetObject("levitation", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap magic_resistance { + get { + object obj = ResourceManager.GetObject("magic_resistance", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap magical_breathing { + get { + object obj = ResourceManager.GetObject("magical_breathing", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap poison_resistance { + get { + object obj = ResourceManager.GetObject("poison_resistance", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap polymorph_control { + get { + object obj = ResourceManager.GetObject("polymorph_control", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap polymorphitis { + get { + object obj = ResourceManager.GetObject("polymorphitis", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap prayer_timeout { + get { + object obj = ResourceManager.GetObject("prayer_timeout", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap protection { + get { + object obj = ResourceManager.GetObject("protection", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap protection_from_shape_changers { + get { + object obj = ResourceManager.GetObject("protection_from_shape_changers", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap reflection { + get { + object obj = ResourceManager.GetObject("reflection", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap regeneration { + get { + object obj = ResourceManager.GetObject("regeneration", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap searching { + get { + object obj = ResourceManager.GetObject("searching", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap see_invisible { + get { + object obj = ResourceManager.GetObject("see_invisible", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap shock_resistance { + get { + object obj = ResourceManager.GetObject("shock_resistance", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sleep_resistance { + get { + object obj = ResourceManager.GetObject("sleep_resistance", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap slow_digestion { + get { + object obj = ResourceManager.GetObject("slow_digestion", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap speed { + get { + object obj = ResourceManager.GetObject("speed", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap stealth { + get { + object obj = ResourceManager.GetObject("stealth", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap telepathy { + get { + object obj = ResourceManager.GetObject("telepathy", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap teleport_control { + get { + object obj = ResourceManager.GetObject("teleport_control", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap teleportitis { + get { + object obj = ResourceManager.GetObject("teleportitis", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap warning { + get { + object obj = ResourceManager.GetObject("warning", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/NethackHelper/Properties/Resources.resx b/NethackHelper/Properties/Resources.resx new file mode 100644 index 0000000..058e1cd --- /dev/null +++ b/NethackHelper/Properties/Resources.resx @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\wwwroot\icons\acid_resistance.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\aggravate_monster.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\angry_god.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\cold_resistance.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\conflict.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\disintegration_resistance.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\fire_resistance.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\food_appraisal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\free_action.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\hunger.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\infravision.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\invisibility.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\jumping.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\levitation.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\magical_breathing.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\magic_resistance.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\poison_resistance.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\polymorphitis.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\polymorph_control.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\prayer_timeout.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\protection.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\protection_from_shape_changers.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\reflection.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\regeneration.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\searching.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\see_invisible.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\shock_resistance.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\sleep_resistance.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\slow_digestion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\speed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\stealth.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\telepathy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\teleportitis.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\teleport_control.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wwwroot\icons\warning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + diff --git a/NethackHelper/PropertyBox.Designer.cs b/NethackHelper/PropertyBox.Designer.cs new file mode 100644 index 0000000..844bcd9 --- /dev/null +++ b/NethackHelper/PropertyBox.Designer.cs @@ -0,0 +1,100 @@ +namespace NethackHelper { + partial class PropertyBox { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.extrinsicCheckBox = new System.Windows.Forms.CheckBox(); + this.intrinsicCheckBox = new System.Windows.Forms.CheckBox(); + this.propertyLabel = new System.Windows.Forms.Label(); + this.propertyIcon = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize) this.propertyIcon).BeginInit(); + this.SuspendLayout(); + // + // extrinsicCheckBox + // + this.extrinsicCheckBox.Dock = System.Windows.Forms.DockStyle.Left; + this.extrinsicCheckBox.Location = new System.Drawing.Point(0, 0); + this.extrinsicCheckBox.Name = "extrinsicCheckBox"; + this.extrinsicCheckBox.Padding = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.extrinsicCheckBox.Size = new System.Drawing.Size(23, 30); + this.extrinsicCheckBox.TabIndex = 0; + this.extrinsicCheckBox.UseVisualStyleBackColor = true; + this.extrinsicCheckBox.CheckedChanged += this.extrinsicCheckBox_CheckedChanged; + // + // intrinsicCheckBox + // + this.intrinsicCheckBox.Dock = System.Windows.Forms.DockStyle.Left; + this.intrinsicCheckBox.Location = new System.Drawing.Point(23, 0); + this.intrinsicCheckBox.Name = "intrinsicCheckBox"; + this.intrinsicCheckBox.Padding = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.intrinsicCheckBox.Size = new System.Drawing.Size(23, 30); + this.intrinsicCheckBox.TabIndex = 1; + this.intrinsicCheckBox.UseVisualStyleBackColor = true; + this.intrinsicCheckBox.CheckedChanged += this.intrinsicCheckBox_CheckedChanged; + // + // propertyLabel + // + this.propertyLabel.Dock = System.Windows.Forms.DockStyle.Fill; + this.propertyLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.propertyLabel.Location = new System.Drawing.Point(68, 0); + this.propertyLabel.Name = "propertyLabel"; + this.propertyLabel.Padding = new System.Windows.Forms.Padding(0, 0, 0, 2); + this.propertyLabel.Size = new System.Drawing.Size(232, 30); + this.propertyLabel.TabIndex = 2; + this.propertyLabel.Text = "Silliness Resistance"; + this.propertyLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // propertyIcon + // + this.propertyIcon.Dock = System.Windows.Forms.DockStyle.Left; + this.propertyIcon.Location = new System.Drawing.Point(46, 0); + this.propertyIcon.Margin = new System.Windows.Forms.Padding(0); + this.propertyIcon.Name = "propertyIcon"; + this.propertyIcon.Size = new System.Drawing.Size(22, 30); + this.propertyIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.propertyIcon.TabIndex = 3; + this.propertyIcon.TabStop = false; + this.propertyIcon.Visible = false; + // + // PropertyBox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.propertyLabel); + this.Controls.Add(this.propertyIcon); + this.Controls.Add(this.intrinsicCheckBox); + this.Controls.Add(this.extrinsicCheckBox); + this.Name = "PropertyBox"; + this.Size = new System.Drawing.Size(300, 30); + ((System.ComponentModel.ISupportInitialize) this.propertyIcon).EndInit(); + this.ResumeLayout(false); + } + + #endregion + + private System.Windows.Forms.CheckBox extrinsicCheckBox; + private System.Windows.Forms.CheckBox intrinsicCheckBox; + private System.Windows.Forms.Label propertyLabel; + private System.Windows.Forms.PictureBox propertyIcon; + } +} diff --git a/NethackHelper/PropertyBox.cs b/NethackHelper/PropertyBox.cs new file mode 100644 index 0000000..6249d70 --- /dev/null +++ b/NethackHelper/PropertyBox.cs @@ -0,0 +1,99 @@ +namespace NethackHelper { + using System.ComponentModel; + using System.Drawing; + using System.Windows.Forms; + + public partial class PropertyBox : UserControl { + public PropertyBox() { + InitializeComponent(); + } + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public string PropertyKey { get; set; } + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public string PropertyName { + get { + return propertyLabel.Text; + } + set { + propertyLabel.Text = value; + } + } + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public bool AllowExtrinsic { + get { + return extrinsicCheckBox.Enabled; + } + set { + extrinsicCheckBox.Enabled = value; + } + } + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public bool AllowIntrinsic { + get { + return intrinsicCheckBox.Enabled; + } + set { + intrinsicCheckBox.Enabled = value; + } + } + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public bool HasExtrinsic { + get { + return extrinsicCheckBox.Checked; + } + set { + extrinsicCheckBox.Checked = value; + } + } + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public bool HasIntrinsic { + get { + return intrinsicCheckBox.Checked; + } + set { + intrinsicCheckBox.Checked = value; + } + } + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public Image? PropertyImage { + get { + return propertyIcon.Visible ? propertyIcon.Image : null; + } + set { + propertyIcon.Visible = value != null; + if (value != null) { + propertyIcon.Image = value; + } + } + } + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public Property Property { + get { + return new() { + Extrinsic = HasExtrinsic, + Intrinsic = HasIntrinsic, + }; + } + set { + HasExtrinsic = value.Extrinsic; + HasIntrinsic = value.Intrinsic; + } + } + + private void intrinsicCheckBox_CheckedChanged(object sender, System.EventArgs e) { + TrackerManager.Instance.Tracker.UpdateProperty(PropertyKey, "intrinsic", intrinsicCheckBox.Checked); + } + + private void extrinsicCheckBox_CheckedChanged(object sender, System.EventArgs e) { + TrackerManager.Instance.Tracker.UpdateProperty(PropertyKey, "extrinsic", extrinsicCheckBox.Checked); + } + } +} diff --git a/NethackHelper/PropertyBox.resx b/NethackHelper/PropertyBox.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/NethackHelper/PropertyBox.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/NethackHelper/SaveData.cs b/NethackHelper/SaveData.cs index bc79825..6c4c8eb 100644 --- a/NethackHelper/SaveData.cs +++ b/NethackHelper/SaveData.cs @@ -18,13 +18,18 @@ private SaveData() { var fileName = Path.Combine(Application.UserAppDataPath, SAVE_NAME); - var save = YamlOptions.DeserializeFileOrDefault(fileName); + + SaveFile? save = null; + try { + save = YamlOptions.DeserializeFileOrDefault(fileName); + } catch (YamlDotNet.Core.YamlException) { + } if (save != null) { this.Version = save.Version; this.CharismaClass = save.CharismaClass; this.Sucker = save.Sucker; - this.Intrinsics = save.Intrinsics; + this.Properties = save.Properties; if (save.Potions != null && save.Potions.Count > 0) { this.Potions = new(save.Potions); } @@ -59,7 +64,7 @@ Version = this.Version, CharismaClass = this.CharismaClass, Sucker = this.Sucker, - Intrinsics = this.Intrinsics, + Properties = this.Properties, Potions = this.Potions?.Export() ?? [], Rings = this.Rings?.Export() ?? [], Scrolls = this.Scrolls?.Export() ?? [], @@ -85,13 +90,13 @@ this.Amulets = null; this.Tools = null; this.Armor = null; - this.Intrinsics = new(); + this.Properties = new(); } public string Version { get; set; } = string.Empty; public CharismaClass CharismaClass { get; set; } = CharismaClass.DefaultClass; public bool Sucker { get; set; } - public Intrinsics Intrinsics { get; set; } = new(); + public GameProperties Properties { get; set; } = new(); public IdentificationRecord? Potions { get; set; } public IdentificationRecord? Rings { get; set; } public IdentificationRecord? Scrolls { get; set; } @@ -131,7 +136,7 @@ public string Version { get; set; } = string.Empty; public CharismaClass CharismaClass { get; set; } = CharismaClass.DefaultClass; public bool Sucker { get; set; } - public Intrinsics Intrinsics { get; set; } = new(); + public GameProperties Properties { get; set; } = new(); public List Potions { get; set; } = []; public List Rings { get; set; } = []; @@ -143,29 +148,50 @@ public List Armor { get; set; } = []; } - public class Intrinsics { - public bool ColdResistance { get; set; } - public bool DisintegrationResistance { get; set; } - public bool FireResistance { get; set; } - public bool Invisible { get; set; } - public bool PoisonResistance { get; set; } - public bool Searching { get; set; } - public bool SeeInvisible { get; set; } - public bool ShockResistance { get; set; } - public bool SleepResistance { get; set; } - public bool Speed { get; set; } - public bool Stealth { get; set; } - public bool Telepathy { get; set; } - public bool TeleportControl { get; set; } - public bool Teleportitis { get; set; } - public bool Warning { get; set; } - public int Protection { get; set; } - public int LastPrayer { get; set; } + public struct Property { + public bool Intrinsic { get; set; } + public bool Extrinsic { get; set; } } - public class IntrinsicsSource : BindingSource { - public IntrinsicsSource() { - this.DataSource = SaveData.Instance.Intrinsics; + public class GameProperties { + public Property ColdResistance { get; set; } + public Property DisintegrationResistance { get; set; } + public Property FireResistance { get; set; } + public Property Invisibility { get; set; } + public Property PoisonResistance { get; set; } + public Property Searching { get; set; } + public Property SeeInvisible { get; set; } + public Property ShockResistance { get; set; } + public Property SleepResistance { get; set; } + public Property Speed { get; set; } + public Property Stealth { get; set; } + public Property Telepathy { get; set; } + public Property TeleportControl { get; set; } + public Property Teleportitis { get; set; } + public Property Warning { get; set; } + + public Property ProtectionFromShapeChangers { get; set; } + public Property PolymorphControl { get; set; } + public Property Polymorphitis { get; set; } + public Property MagicResistance { get; set; } + public Property Reflection { get; set; } + public Property Regeneration { get; set; } + public Property Conflict { get; set; } + public Property AggravateMonster { get; set; } + public Property MagicalBreathing { get; set; } + public Property AcidResistance { get; set; } + public Property SlowDigestion { get; set; } + public Property FreeAction { get; set; } + public Property Hunger { get; set; } + + public int Protection { get; set; } + public int LastPrayer { get; set; } + public bool GodAngry { get; set; } + } + + public class PropertiesSource : BindingSource { + public PropertiesSource() { + this.DataSource = SaveData.Instance.Properties; } } diff --git a/NethackHelper/TrackerManager.cs b/NethackHelper/TrackerManager.cs new file mode 100644 index 0000000..a9899ae --- /dev/null +++ b/NethackHelper/TrackerManager.cs @@ -0,0 +1,22 @@ +namespace NethackHelper { + using System; + + internal class TrackerManager { + private static TrackerManager? instance; + + public static TrackerManager Instance { + get { + instance ??= new(); + return instance; + } + } + + public ITrackingClient Tracker { get; set; } = new DummyTrackingClient(); + + public void RequestUpdate() { + OnRequestUpdate?.Invoke(); + } + + public event Action? OnRequestUpdate; + } +} diff --git a/NethackHelper/TrackingClient.cs b/NethackHelper/TrackingClient.cs new file mode 100644 index 0000000..b9e679d --- /dev/null +++ b/NethackHelper/TrackingClient.cs @@ -0,0 +1,17 @@ +namespace NethackHelper { + using System.Threading.Tasks; + + public interface ITrackingClient { + Task UpdateProperty(string property, string type, bool has); + Task UpdateProtection(int protection); + Task UpdatePrayer(int last_prayed); + Task UpdateAngry(bool is_angry); + } + + internal class DummyTrackingClient : ITrackingClient { + public Task UpdateProperty(string property, string type, bool has) => Task.CompletedTask; + public Task UpdateProtection(int protection) => Task.CompletedTask; + public Task UpdatePrayer(int last_prayed) => Task.CompletedTask; + public Task UpdateAngry(bool is_angry) => Task.CompletedTask; + } +} diff --git a/NethackHelper/TrackingHub.cs b/NethackHelper/TrackingHub.cs new file mode 100644 index 0000000..55ed0d9 --- /dev/null +++ b/NethackHelper/TrackingHub.cs @@ -0,0 +1,6 @@ +namespace NethackHelper { + using Microsoft.AspNetCore.SignalR; + + public class TrackingHub : Hub { } +} + diff --git a/NethackHelper/wwwroot/icons/acid_resistance.png b/NethackHelper/wwwroot/icons/acid_resistance.png new file mode 100644 index 0000000000000000000000000000000000000000..3c3088dd91349db9093065c527f18877c711b615 GIT binary patch literal 852 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 literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/cold_resistance.png b/NethackHelper/wwwroot/icons/cold_resistance.png new file mode 100644 index 0000000000000000000000000000000000000000..648b087a45593f044f494d18bf16d71c8dd273f7 GIT binary patch literal 846 zcmV-U1F`&xP)EX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3_CX>@2HM@dakSAh-}0003cNklb;@5Jlfc)S>VROiOJSNs*3-10XJt z6cJS<7g2=3mV$*8Bq~I~2`mnP>?#zo6mkfkz=bKdnG^wJXGIA4)y(Yt|3{-)g$dy} zR5`gQ5d@GZPRX?<*BTt3Tx+5@C5qEZA3$xdvU}v|;U0j@>M(kJ#JUc#^JS%{dwW%J z{x0?tGONRQz5w9)<`RJMd_iV)==Kvn-#?784@KDw>Gl(TippkaETC3S?0kuGsWk3m zV2l{Ov`}uqDTp_iirr`mjxVFPLU4Ss8%^;BQ#o;crocHwL*QIuMc_Zgzx*)1 Y06zwrq&d5jWdHyG07*qoM6N<$g0=r_0RR91 literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/conflict.png b/NethackHelper/wwwroot/icons/conflict.png new file mode 100644 index 0000000000000000000000000000000000000000..f85e6698fdf3fe2153f1df21665c0cd00c3fb6b5 GIT binary patch literal 768 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 TLEw=300000NkvXXu0mjfEtOe$ literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/food_appraisal.png b/NethackHelper/wwwroot/icons/food_appraisal.png new file mode 100644 index 0000000000000000000000000000000000000000..4325f15561d114b491f700541744e555af276a95 GIT binary patch literal 858 zcmV-g1Eu_lP)EX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3=Rs6wE;5#000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0003oNklgev~wasPYA?{W9u zDT)%qtCC!rUnqeIJ%`Y95=i_A=(=$jDudP0^;5d>BRKtV;duprsn0w~65FfI*mqsw z@Id@%=8Y#P6P(oR)Zfn-4W?B0I_ZHOtjDI+&vBJ9Fi~x16M)Id5L@fw`%EyAZnRSn zVDY?%$Z`g$F@UQ4tTq}9GlP+sb=sDaDKj|8SXHq)$07*qoM6N<$f)==UD*ylh literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/free_action.png b/NethackHelper/wwwroot/icons/free_action.png new file mode 100644 index 0000000000000000000000000000000000000000..1beaada8ba5ca86e73742cca3a6a7a6cf69ef9c9 GIT binary patch literal 843 zcmV-R1GM~!P)EX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3=ty(U6;WC000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0003ZNklVDKK3s&ayN4J|kT0FnjZ zb?}1oOKftF^Gmkt4c;|JvIRR(vU_j^K=k`bZNq+$2 Vy9lkU355Uv002ovPDHLkV1ijsY{&or literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/hunger.png b/NethackHelper/wwwroot/icons/hunger.png new file mode 100644 index 0000000000000000000000000000000000000000..ae5e3c60b6abb52a841738c791a420007e7e5a01 GIT binary patch literal 799 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 literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/magical_breathing.png b/NethackHelper/wwwroot/icons/magical_breathing.png new file mode 100644 index 0000000000000000000000000000000000000000..8218967eefef40b4492058fc34bb6c94fd1f95b2 GIT binary patch literal 708 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 Lu6{1-oD!M<^R{Gu literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_angry_god.png b/NethackHelper/wwwroot/icons/no_angry_god.png new file mode 100644 index 0000000000000000000000000000000000000000..16413b78162c67982c99e56c71527fdce6bef6a6 GIT binary patch literal 1488 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 YY7PTPYjlFAGf;-X)78&qol`;+01c39&;S4c literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_disintegration_resistance.png b/NethackHelper/wwwroot/icons/no_disintegration_resistance.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b7ff7dda7b5cfdf3e00a39c432102bbcd99c5e GIT binary patch literal 1495 zcmeAS@N?(olHy`uVBq!ia0vp^{2>QApoXo(WF|l^ye(%E$ zGDqX6DAuor?j*{ zl;xnj!av4GOI|3c*6C|*>G=3y2mkwbw(ssS{;Qg~GOa)+!1T0->LVw$-C8C4lsfEM z47wCMXa1U_q4v;n-@Av8U&r>OSI+-kT%v6`nbEGXV%p0#*FBCldoy3o`QE9#Mnm(+ z^CQV@u@inwe7)&({v2+;-<4@cJeEJ}R6gRgu=lB1nya(wJf%LZRc=53^_=EE-!e6I-DMdUrtXL)4o0I@8Vh;24Wmqhe3oR`zk4WO@JDH9O3~B4 zg?RMI|KYDI&wi$^erHL6%!`VRZ~GG$6pLqE$@%^J#x`knhX;~7E=B$GlAZBWW$(31 zi`*T~n-vt^z4XNPK@t0l`b(+SgW%)e-!+ITNoVau~`*X|sD$vk1%x=H2- z4k{W1EqGJfUtYfT`?vQq)9URz=M-&tx8Py`Fg}=)yxmTT$X?><>&pI$MO@sP`=if|=fLPYSQQdc5|mi3P*9YgmYI{PP*PctssN5p zi{7Qd(S0(CJb#{xST=p!Y{|!bH|Sk`qXf_ATQ@ysM>v&C-xzD=`s;4gFH;|0VV=WW zx29~7X1v_8<#lF`#))Gc3hg2*ITF%K&6!ia-raw(Ch^jml#~OJ4h_v+HZUZpxK&^0?)3 ziN1dv6$j6k9e>MtzePsA^G3efilk?uj5ZI9|DFA5vO+4Wzy22Ax5ym~Vch55u|Ds; zo!2}0@L8Ap`I+}qf-eTUWU%XOSN|Z$Bp&bQbZl*}Td9U`O?msTg@!3_UjOegb{1;V zX51(2QJ+5Hb#vnZt+v1%v4t9k-gJJE;y)B#XV7qba>b^F2^GQ{vb{Pv=CjURSm@$q zzdo_W=>J-uws3uekI`p~->(+>Y9?%&{;{($?xLh@xXO}G6E%x=HeD<|b9+bT<9^PK zH@@69{9aSSZn8V)U2dOC^`{ki#`^%su_Ut?kR=LF5A z>$oQVnDlM#yKfuruao^Y`?u1b{~lkoj(lOCe?!5aGxAkBFn*7Fx;TbNTrRz6n{_xq z;K;}MP5Bd?ww|9b|qY3YT*} zrcaxB_t1)z)mbw79zhN+-EPj4RLU+`aBT`&esy8tbanF`6`uwEa74MEE-K%`=D7a) z;;G_3D}!HOU2*qW%kDxO7WMajS=H5t#ir{u#pza-&bWK@hSjO4nA)TZzIUHLx${Q$ z!&2evCqpAk%yvl4ajo1HZ8$r4&MBROUeAl$`$g|Oy3aec{_FE%|Bba4eDxw?Oh7M5 zmbgZgIOpf)rskC}I2WZRmZYXAlxLP?D7bt2281{Ai31g>f)u3yrL2;{Dj19mjLdWm zOmvNmLyU~AObx6IjkFC6tPBif%o&VPH00)|WTsUjG#G(27@JrbTR=1%;gl8uYS4h& zP?DLOT3nKtTY%65vBc8K&=8{Md(#SbpdM+E9$-$gO3p8+EXqvJC}9XFP0GnkR&dGB zP0Y;OHqkH|s7wi_EG4x#xhS)sBr`vc0pvM_q|(fs65Y%^h2kK0C!cgjVW4VJnCjfb wywbG9>QApoXo(WF|l^ye(%E$ zGDqX6DAuor?j*{ zl;xnj!av4GOI|3c*6C|*>G=3y2mkwbw(ssS{;Qg~GOa)+!1T0->LVw$-C8C4lsfEM z47wCMXa1U_q4v;n-@Av8U&r>OSI+-kT%v6`nbEGXV%p0#*FBCldoy3o`QE9#Mnm(+ z^CQV@u@inwe7)&({v2+;-<4@cJeEJ}R6gRgu=lB1nya(wJf%LZRc=53^_=EE-!e6I-DMdUrtXL)4o0I@8Vh;24Wmqhe3oR`zk4WO@JDH9O3~B4 zg?RMI|KYDI&wi$^erHL6%!`VRZ~GG$6pLqE$@%^J#x`knhX;~7E=B$GlAZBWW$(31 zi`*T~n-vt^z4XNPK@t0l`b(+SgW%)e-!+ITNoVau~`*X|sD$vk1%x=H2- z4k{W1EqGJfUtYfT`?vQq)9URz=M-&tx8Py`Fg}=)yxmTT$X?><>&pI$MO@sPCtt%CsG9L$RY*ihP-3}4K~a8MW=^U?No7H*0ysV` zdY1-A_sJ;o{CO^7+4OOZQVv8qG)Vtxj*TldI3@j} zmc zUhm|?XI<{+XWmZb;|4?|HLBsLM6`K|&R0wa#_Uh!A&pLBqp^KOO z`otEa|7(5P!u1V4MxQNyzgp<4nXqa4$IiyMi;}Y8DoZ|1)GXTBbg}fz?H!qq`#Cq> z_;TCudrb+u$?lwYxqU9xpH}1<>xXqKddzGTF>2P@E`GQ5q94oDUpyjwjfL5t6Ev5u zqCD-WAh9#smH!%xgW%slkCh5g!nh)Y%zZk!}d)~?!b`)HS0I*Jox3!7YqHBTK~Q; z=!%lKvU2PD(@6~J@B8)@9#1!1Tjk1HWD%KYxlJ&z zV8U|?PP3-93TF$C+htRUZdiY5de*|z-m}&fer5G5Q?-7Sl<}17 z+75{BTAg}b8}PkN*J7rQWHy3QxwWGOEMJP zJ$(bh8~Mb6ic~?0Qh-uc$zT->Mg~S^x&|h?M#dpV##W{VR)$8}1_o9J1~TRh#wZ$c z^HVa@DiIotKpKoqtc)!n8jf&EivTrfz-=hW%uOvWNz5%k=z&;b3Af}})}~oNJ<=dO zz#LpnG#G{N@{U(QD#9&W_}(6$a4xw zrI|S;x|w+j#X;^)KIx9aK-Ho!)wzjzrD=)DC8b5FMPTJV^Cp}ED&T`F$WKYlVE}23 TPVjUF$}o7k`njxgN@xNAqycE* literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_food_appraisal.png b/NethackHelper/wwwroot/icons/no_food_appraisal.png new file mode 100644 index 0000000000000000000000000000000000000000..76e949f831e2c1d3d70b44ec2b7fd9ef7d811d9f GIT binary patch literal 1494 zcmY+DdoFWt5>C5@*ef- zCQ9gp$X-MgI;D$iQv|b2Gtp)ZBD@-*B9l^<>8D69qOcmug3$^*>Q#Q(U7^r zDa2-B?CG&o*P1OGYr(O+8Ij>NoT+3)68uMC_80N^%{FeHirRc!h=lsju*gtCD$00k z8{+C>RA7*4c4h1AVtSkMh($-(oz`Mf`z#Dou) zp1x`xlgqwTdeW}GK_5@MFd@i_iMc%^`;Z%w=p@SHmq{;ldc*rz7PO5*27oIWh6FfM z;!*vh0pL%=r9i}9bUFY(Dnf3au8QyE(dZ4TT%0FNBN`6+_(3#A43@{|hJYLv7K-Ds zu;2G-pK)<#Kqf|CbzubMkTiMAK~1igCQTG-sZPCkPCf5Og3go&+Pcp5?wPakSgxts zsQluu3LQjuO2s(H!L>A{VUM9MBk62`ogDLX@4e1=M%Ohav)pxL2WD{~PU z+wkZ>^LwTK6pWszhihCCG`tJ3ae%nkK5JdFCM+xQg__L28rZGUAypX3co~^-sJ&VDSq;9e)vnq7&(M~VJEIo$z5&-Ds^xq6|$9S=w}mIg6c3ywHrGmanCZbsMH55Ot zrl@a^ggp5DGfH8czv zEkR7U|4D@*t2K2`mkV4HAGH$O4SSM$;%H5B3&Km|pdhj$lLz qLKwl2fY0K8$2|(NTVX)$7r>QApoXo(WF|l^ye(%E$ zGDqX6DAuor?j*{ zl;xnj!av4GOI|3c*6C|*>G=3y2mkwbw(ssS{;Qg~GOa)+!1T0->LVw$-C8C4lsfEM z47wCMXa1U_q4v;n-@Av8U&r>OSI+-kT%v6`nbEGXV%p0#*FBCldoy3o`QE9#Mnm(+ z^CQV@u@inwe7)&({v2+;-<4@cJeEJ}R6gRgu=lB1nya(wJf%LZRc=53^_=EE-!e6I-DMdUrtXL)4o0I@8Vh;24Wmqhe3oR`zk4WO@JDH9O3~B4 zg?RMI|KYDI&wi$^erHL6%!`VRZ~GG$6pLqE$@%^J#x`knhX;~7E=B$GlAZBWW$(31 zi`*T~n-vt^z4XNPK@t0l`b(+SgW%)e-!+ITNoVau~`*X|sD$vk1%x=H2- z4k{W1EqGJfUtYfT`?vQq)9URz=M-&tx8Py`Fg}=)yxmTT$X?><>&pI$MO@sPCtt%CsG9L$RY*ihP-3}4K~a8MW=^U?No7H*0ysV` zdY1-A_sJ;o{CO^7+4OOZQVv8qG)Vtxj*TldI3@j} zmc zUhm|?XI<{+XWmZb;|4?|HLBsLM6`K|&R0wa#_Uh!A&pLBqp^KOO z`otEa|7(5P!u1V4MxQNyzgp<4nXqa4$IiyMi;}Y8DoZ|1)GXTBbg}fz?H!qq`#Cq> z_;TCudrb+u$?lwYxqU9xpH}1<>xXqKddzGTF>2P@E`GQ5q94oDUpyjwjfL5t6Ev5u z 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 O83s>RKbLh*2~7YT^kmxr literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_invisibility.png b/NethackHelper/wwwroot/icons/no_invisibility.png new file mode 100644 index 0000000000000000000000000000000000000000..42d04e6a0d9468784a43e4e76fb78d12e293142c GIT binary patch literal 1403 zcmeAS@N?(olHy`uVBq!ia0vp^{2>QApoXo(WF|l^ye(%E$ zGDqX6DAuor?j*{ zl;xnj!av4GOI|3c*6C|*>G=3y2mkwbw(ssS{;Qg~GOa)+!1T0->LVw$-C8C4lsfEM z47wCMXa1U_q4v;n-@Av8U&r>OSI+-kT%v6`nbEGXV%p0#*FBCldoy3o`QE9#Mnm(+ z^CQV@u@inwe7)&({v2+;-<4@cJeEJ}R6gRgu=lB1nya(wJf%LZRc=53^_=EE-!e6I-DMdUrtXL)4o0I@8Vh;24Wmqhe3oR`zk4WO@JDH9O3~B4 zg?RMI|KYDI&wi$^erHL6%!`VRZ~GG$6pLqE$@%^J#x`knhX;~7E=B$GlAZBWW$(31 zi`*T~n-vt^z4XNPK@t0l`b(+SgW%)e-!+ITNoVau~`*X|sD$vk1%x=H2- z4k{W1EqGJfUtYfT`?vQq)9URz=M-&tx8Py`Fg}=)yxmTT$X?><>&pI$MO@sPCtt%CsG9L$RY*ihP-3}4K~a8MW=^U?No7H*0ysV` zdY1-A_sJ;o{CO^7+4OOZQVv8qG)Vtxj*TldI3@j} zmc zUhm|?XI<{+XWmZb;|4?|HLBsLM6`K|&R0wa#_Uh!A&pLBqp^KOO z`otEa|7(5P!u1V4MxQNyzgp<4nXqa4$IiyMi;}Y8DoZ|1)GXTBbg}fz?H!qq`#Cq> z_;TCudrb+u$?lwYxqU9xpH}1<>xXqKddzGTF>2P@E`GQ5q94oDUpyjwjfL5t6Ev5u z~BKur*^R`{Nn6=WZ@ks_`WS~ zTjC+VsHrRNJxFl>e{1JkRf*l}?&OJa-p*Axbo!HJ%hH@HtBd(g?s0whe`kI2W!1vn zi+(Zzt(7csjVN)>&&^HED`9XhN=+cpt3+rp0%Qch;F zf=hmGVrJg9iH6ZYWlAt*DXGQDMVSR9nfZAPAkQfzm1gFY=w{|A6bHFG`J_7v167N{ zROcqFN!D8u0C>gTe~DWM4fX^2Q{ literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_jumping.png b/NethackHelper/wwwroot/icons/no_jumping.png new file mode 100644 index 0000000000000000000000000000000000000000..3fe2e9009eef9f3ed5a27c5c7f40a3fa6ffdaa05 GIT binary patch literal 1428 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 Pfieu9u6{1-oD!M<&v#LQ literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_magic_resistance.png b/NethackHelper/wwwroot/icons/no_magic_resistance.png new file mode 100644 index 0000000000000000000000000000000000000000..87ef8c05b3ffb930a9cdf6b03afd27e11285cd59 GIT binary patch literal 1457 zcmeAS@N?(olHy`uVBq!ia0vp^{2>QApoXo(WF|l^ye(%E$ zGDqX6DAuor?j*{ zl;xnj!av4GOI|3c*6C|*>G=3y2mkwbw(ssS{;Qg~GOa)+!1T0->LVw$-C8C4lsfEM z47wCMXa1U_q4v;n-@Av8U&r>OSI+-kT%v6`nbEGXV%p0#*FBCldoy3o`QE9#Mnm(+ z^CQV@u@inwe7)&({v2+;-<4@cJeEJ}R6gRgu=lB1nya(wJf%LZRc=53^_=EE-!e6I-DMdUrtXL)4o0I@8Vh;24Wmqhe3oR`zk4WO@JDH9O3~B4 zg?RMI|KYDI&wi$^erHL6%!`VRZ~GG$6pLqE$@%^J#x`knhX;~7E=B$GlAZBWW$(31 zi`*T~n-vt^z4XNPK@t0l`b(+SgW%)e-!+ITNoVau~`*X|sD$vk1%x=H2- z4k{W1EqGJfUtYfT`?vQq)9URz=M-&tx8Py`Fg}=)yxmTT$X?><>&pI$MO@sPCtt%CsG9L$RY*ihP-3}4K~a8MW=^U?No7H*0ysV` zdY1-A_sJ;o{CO^7+4OOZQVv8qG)Vtxj*TldI3@j} zmc zUhm|?XI<{+XWmZb;|4?|HLBsLM6`K|&R0wa#_Uh!A&pLBqp^KOO z`otEa|7(5P!u1V4MxQNyzgp<4nXqa4$IiyMi;}Y8DoZ|1)GXTBbg}fz?H!qq`#Cq> z_;TCudrb+u$?lwYxqU9xpH}1<>xXqKddzGTF>2P@E`GQ5q94oDUpyjwjfL5t6Ev5u zc)Xm~1etx9wYJp!CcEm!uU}-ves_j>he-ct zS{}1C(7UVT*8Xda1=?2$jwj5Oshm_Fal{XHnB3c zfM__vDJ=rjpaHj`Br`X)xFj*R0HFtBi6z{UV_BPK0rg0O^Z@gSRdRkoWl?5&MhQbe zX;MyRvVu!~ZenKMwuy$(KxIlWWhtq}$wiq3C7Jno3?R=bB$a07l;~#WDHI2}JNcwL z3IkP(!c^xb=9Q);CYO{Jr51se`^=kg3aEe&t{^`pHHQJDH9Eo587RZx>FVdQ&MBb@ E0CQ_#VgLXD literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_magical_breathing.png b/NethackHelper/wwwroot/icons/no_magical_breathing.png new file mode 100644 index 0000000000000000000000000000000000000000..ebc16e16c627bdc6d15de1e3e981e3e094d5ecb3 GIT binary patch literal 1414 zcmeAS@N?(olHy`uVBq!ia0vp^{2>QApoXo(WF|l^ye(%E$ zGDqX6DAuor?j*{ zl;xnj!av4GOI|3c*6C|*>G=3y2mkwbw(ssS{;Qg~GOa)+!1T0->LVw$-C8C4lsfEM z47wCMXa1U_q4v;n-@Av8U&r>OSI+-kT%v6`nbEGXV%p0#*FBCldoy3o`QE9#Mnm(+ z^CQV@u@inwe7)&({v2+;-<4@cJeEJ}R6gRgu=lB1nya(wJf%LZRc=53^_=EE-!e6I-DMdUrtXL)4o0I@8Vh;24Wmqhe3oR`zk4WO@JDH9O3~B4 zg?RMI|KYDI&wi$^erHL6%!`VRZ~GG$6pLqE$@%^J#x`knhX;~7E=B$GlAZBWW$(31 zi`*T~n-vt^z4XNPK@t0l`b(+SgW%)e-!+ITNoVau~`*X|sD$vk1%x=H2- z4k{W1EqGJfUtYfT`?vQq)9URz=M-&tx8Py`Fg}=)yxmTT$X?><>&pI$MO@sPCtt%CsG9L$RY*ihP-3}4K~a8MW=^U?No7H*0ysV` zdY1-A_sJ;o{CO^7+4OOZQVv8qG)Vtxj*TldI3@j} zmc zUhm|?XI<{+XWmZb;|4?|HLBsLM6`K|&R0wa#_Uh!A&pLBqp^KOO z`otEa|7(5P!u1V4MxQNyzgp<4nXqa4$IiyMi;}Y8DoZ|1)GXTBbg}fz?H!qq`#Cq> z_;TCudrb+u$?lwYxqU9xpH}1<>xXqKddzGTF>2P@E`GQ5q94oDUpyjwjfL5t6Ev5u zPkwkx@#DT;rzQ^X5e&Ein`Qy^NQ3kM6TVe)enDkX zW_m^mLqKU#PG+)#OMY%*X5O}mhS5M}N-$+9sl~}fnFS@8`FRW=&nYC8X6BUWX67jr z2e~`>q&o@&Rg1z@=O*TrrX?nqloq8HftCBrn{W!KfDf)9KP5GX0i-oL!P6Ni!{F)a K=d#Wzp$Py1J4y@y literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_poison_resistance.png b/NethackHelper/wwwroot/icons/no_poison_resistance.png new file mode 100644 index 0000000000000000000000000000000000000000..ebcd4db886ad089d9438bb6299a64108df1fcd81 GIT binary patch literal 1499 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 BU~T{a literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_protection.png b/NethackHelper/wwwroot/icons/no_protection.png new file mode 100644 index 0000000000000000000000000000000000000000..6745d8e8293599f195118564f893d5940f741203 GIT binary patch literal 1429 zcmeAS@N?(olHy`uVBq!ia0vp^{2>QApoXo(WF|l^ye(%E$ zGDqX6DAuor?j*{ zl;xnj!av4GOI|3c*6C|*>G=3y2mkwbw(ssS{;Qg~GOa)+!1T0->LVw$-C8C4lsfEM z47wCMXa1U_q4v;n-@Av8U&r>OSI+-kT%v6`nbEGXV%p0#*FBCldoy3o`QE9#Mnm(+ z^CQV@u@inwe7)&({v2+;-<4@cJeEJ}R6gRgu=lB1nya(wJf%LZRc=53^_=EE-!e6I-DMdUrtXL)4o0I@8Vh;24Wmqhe3oR`zk4WO@JDH9O3~B4 zg?RMI|KYDI&wi$^erHL6%!`VRZ~GG$6pLqE$@%^J#x`knhX;~7E=B$GlAZBWW$(31 zi`*T~n-vt^z4XNPK@t0l`b(+SgW%)e-!+ITNoVau~`*X|sD$vk1%x=H2- z4k{W1EqGJfUtYfT`?vQq)9URz=M-&tx8Py`Fg}=)yxmTT$X?><>&pI$MO@sPS3R)s{A1SOU$6cpvBW#*(RlvEa^DuCnD zqIYR|@PVxRVEiA<4GI}+NS^foRmv?#IkI9ubi;bRfYyqiDe?D|@-n{wrxJZ^bh zqVFF^#liDs$KP_^Z;_GjypgZABI#Kuqs;^3e`kN1tdPp;ufN6jEpi7#827n%tj~LI z=k-oLeAeZDe&+p@;ETa78SFaS)jtR_iO2gn9b4P$R;uA!Q{Mh-p<&9K*Z+HrorRjT z8TSc$)Td8)-Q0LUt1U1`Y@x=XH=SRk_z#8G88jT9T(N0kLWS^#Y_Cp^`K&V+7P@%Z zuTN|-`oGqvEnMH=WAxeL_p61znhBexf9!0GyC^9euCnCQM9rd|O&3eg+}@G-xSw<5 zjW4$izt@zoo9xbcm)qx3{b@y>v3^*$qQ}fe5u;|U?c#S^FZ!`e{lz1~*I1bSIYD#j zItw&p{;jm!8mvFmu-Zr^7TyM9LQ%Lk@^_g6B;hRgR(Jv{#v&_R+Vt`Q~9`MJ5Nc_j?aMX8A; zsVNHOnI#zt?w-B@;f;LaKt-w`MJYfjt7NbW1|tI_GhG7{T_fWVBV#L511m!#Z36=< z0|Oaz24fTrx%nxXX_W{KMj#EwCRWB45DiB-rA2@mG~hOrWag$8mn7yEAoM^iv9vNY zhUiI<-KhuEBMs66%m-G<`303lnduoN3<0G{Ihn}{F8R5MnR(kL8b$+^DZ!Mbq!uR^ zWfqiV=I1ehJg1OUnwe9go0+Fj9OUlglkO-CR4ocqotv0fnwFScQd*Q+1Xk`dZ^9{{ e0zSBc{FKxj29Vb11W#w641=eupUXO@geCxAg;mi2 literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_protection_from_shape_changers.png b/NethackHelper/wwwroot/icons/no_protection_from_shape_changers.png new file mode 100644 index 0000000000000000000000000000000000000000..242917cf965dd5496c4858804bad2294a459aeae GIT binary patch literal 1492 zcmeAS@N?(olHy`uVBq!ia0vp^{2>QApoXo(WF|l^ye(%E$ zGDqX6DAuor?j*{ zl;xnj!av4GOI|3c*6C|*>G=3y2mkwbw(ssS{;Qg~GOa)+!1T0->LVw$-C8C4lsfEM z47wCMXa1U_q4v;n-@Av8U&r>OSI+-kT%v6`nbEGXV%p0#*FBCldoy3o`QE9#Mnm(+ z^CQV@u@inwe7)&({v2+;-<4@cJeEJ}R6gRgu=lB1nya(wJf%LZRc=53^_=EE-!e6I-DMdUrtXL)4o0I@8Vh;24Wmqhe3oR`zk4WO@JDH9O3~B4 zg?RMI|KYDI&wi$^erHL6%!`VRZ~GG$6pLqE$@%^J#x`knhX;~7E=B$GlAZBWW$(31 zi`*T~n-vt^z4XNPK@t0l`b(+SgW%)e-!+ITNoVau~`*X|sD$vk1%x=H2- z4k{W1EqGJfUtYfT`?vQq)9URz=M-&tx8Py`Fg}=)yxmTT$X?><>&pI$MO@sPS3R)s{A1SOU$6cpvBW#*(RlvEa^DuCnD zqIYR|@PVxRVEiA<4GI}+NS^foRmv?#IkI9ubi;bRfYyqiDe?D|@-n{wrxJZ^bh zqVFF^#liDs$KP_^Z;_GjypgZABI#Kuqs;^3e`kN1tdPp;ufN6jEpi7#827n%tj~LI z=k-oLeAeZDe&+p@;ETa78SFaS)jtR_iO2gn9b4P$R;uA!Q{Mh-p<&9K*Z+HrorRjT z8TSc$)Td8)-Q0LUt1U1`Y@x=XH=SRk_z#8G88jT9T(N0kLWS^#Y_Cp^`K&V+7P@%Z zuTN|-`oGqvEnMH=WAxeL_p61znhBexf9!0GyC^9euCnCQM9rd|O&3eg+}@G-xSw<5 zjW4$izt@zoo9xbcm)qx3{b@y>v3^*$qQ}fe5u;|U?c#S^FZ!`e{lz1~*I1bSIYD#j zItw&p{;jmd z@)h&#>;H)qUHN6$zw*R~hn#!3&Cab{(Q|}Lm#L|DrK#J-oTt9onh!(|PCH}&V@t`W zhV}P2Qhjm{HE-Oz>~WyooC1bkuFKN-tT8>ND*~48?*8$tRkqG|*Rk|xd!N~G&sgBI zcK5{{#a~u9zC3F6cI^r6*at7F8_btI`^W!H^3_d-|HnVvk72Z0te=zA!!rZuAITEe zh!W@g+}zZ>5(ej@)Wnk16ovB4k_-iRPv3y>Mm}+%B2|#06rhwdLWiqS{WKc^d!jc)C1~~2I&E2Bdg^6g36-I^o$aQfYPL#%wz?Z{M^LM zyloQ=qk+nlV9HWbi<65o3raHc^B6#$Q%EY!%qh{$%u^^1a(D7ccN7My7KN$KP0TAz tOH3{)ElMo{EBBc<;S^8-A6!9xN@@-RNNaS0r!!E7!PC{xWt~$(696cgb$S2* literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_reflection.png b/NethackHelper/wwwroot/icons/no_reflection.png new file mode 100644 index 0000000000000000000000000000000000000000..270b6ffc878e38feb92a281107f19fdbb05bf355 GIT binary patch literal 1443 zcmeAS@N?(olHy`uVBq!ia0vp^{2>QApoXo(WF|l^ye(%E$ zGDqX6DAuor?j*{ zl;xnj!av4GOI|3c*6C|*>G=3y2mkwbw(ssS{;Qg~GOa)+!1T0->LVw$-C8C4lsfEM z47wCMXa1U_q4v;n-@Av8U&r>OSI+-kT%v6`nbEGXV%p0#*FBCldoy3o`QE9#Mnm(+ z^CQV@u@inwe7)&({v2+;-<4@cJeEJ}R6gRgu=lB1nya(wJf%LZRc=53^_=EE-!e6I-DMdUrtXL)4o0I@8Vh;24Wmqhe3oR`zk4WO@JDH9O3~B4 zg?RMI|KYDI&wi$^erHL6%!`VRZ~GG$6pLqE$@%^J#x`knhX;~7E=B$GlAZBWW$(31 zi`*T~n-vt^z4XNPK@t0l`b(+SgW%)e-!+ITNoVau~`*X|sD$vk1%x=H2- z4k{W1EqGJfUtYfT`?vQq)9URz=M-&tx8Py`Fg}=)yxmTT$X?><>&pI$MO@sPS3R)s{A1SOU$6cpvBW#*(RlvEa^DuCnD zqIYR|@PVxRVEiA<4GI}+NS^foRmv?#IkI9ubi;bRfYyqiDe?D|@-n{wrxJZ^bh zqVFF^#liDs$KP_^Z;_GjypgZABI#Kuqs;^3e`kN1tdPp;ufN6jEpi7#827n%tj~LI z=k-oLeAeZDe&+p@;ETa78SFaS)jtR_iO2gn9b4P$R;uA!Q{Mh-p<&9K*Z+HrorRjT z8TSc$)Td8)-Q0LUt1U1`Y@x=XH=SRk_z#8G88jT9T(N0kLWS^#Y_Cp^`K&V+7P@%Z zuTN|-`oGqvEnMH=WAxeL_p61znhBexf9!0GyC^9euCnCQM9rd|O&3eg+}@G-xSw<5 zjW4$izt@zoo9xbcm)qx3{b@y>v3^*$qQ}fe5u;|U?c#S^FZ!`e{lz1~*I1bSIYD#j zItw&p{;jm83m&CzbpFM z)HF7WHmd2#G1RngjLtU7mn>D$R(T+GgFpEs%eA7*zRaww@1%VHv@8`kcHd`9WNrS( z4fj@>1~Bw|J1WYhB)xT>DAS4bgH@jnvzRfj%T50#BmJ8>P)t*QtMuQ~K<7!8xJHyX z=jZ08=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~M))6r}*AtdhYh7>o>z%ybP*bd8Kd zjEt>J4Xg}}v<(cb3=Cw<8H`ahp;ya}g(3i#j(@>5cC7(iO16Fi-PG7O%selF{r5}E*19Z`S) literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_regeneration.png b/NethackHelper/wwwroot/icons/no_regeneration.png new file mode 100644 index 0000000000000000000000000000000000000000..4281cadedd746b161415cf1e1ded16cf1354f76b GIT binary patch literal 1450 zcmeAS@N?(olHy`uVBq!ia0vp^{2>QApoXo(WF|l^ye(%E$ zGDqX6DAuor?j*{ zl;xnj!av4GOI|3c*6C|*>G=3y2mkwbw(ssS{;Qg~GOa)+!1T0->LVw$-C8C4lsfEM z47wCMXa1U_q4v;n-@Av8U&r>OSI+-kT%v6`nbEGXV%p0#*FBCldoy3o`QE9#Mnm(+ z^CQV@u@inwe7)&({v2+;-<4@cJeEJ}R6gRgu=lB1nya(wJf%LZRc=53^_=EE-!e6I-DMdUrtXL)4o0I@8Vh;24Wmqhe3oR`zk4WO@JDH9O3~B4 zg?RMI|KYDI&wi$^erHL6%!`VRZ~GG$6pLqE$@%^J#x`knhX;~7E=B$GlAZBWW$(31 zi`*T~n-vt^z4XNPK@t0l`b(+SgW%)e-!+ITNoVau~`*X|sD$vk1%x=H2- z4k{W1EqGJfUtYfT`?vQq)9URz=M-&tx8Py`Fg}=)yxmTT$X?><>&pI$MO@sPS3R)s{A1SOU$6cpvBW#*(RlvEa^DuCnD zqIYR|@PVxRVEiA<4GI}+NS^foRmv?#IkI9ubi;bRfYyqiDe?D|@-n{wrxJZ^bh zqVFF^#liDs$KP_^Z;_GjypgZABI#Kuqs;^3e`kN1tdPp;ufN6jEpi7#827n%tj~LI z=k-oLeAeZDe&+p@;ETa78SFaS)jtR_iO2gn9b4P$R;uA!Q{Mh-p<&9K*Z+HrorRjT z8TSc$)Td8)-Q0LUt1U1`Y@x=XH=SRk_z#8G88jT9T(N0kLWS^#Y_Cp^`K&V+7P@%Z zuTN|-`oGqvEnMH=WAxeL_p61znhBexf9!0GyC^9euCnCQM9rd|O&3eg+}@G-xSw<5 zjW4$izt@zoo9xbcm)qx3{b@y>v3^*$qQ}fe5u;|U?c#S^FZ!`e{lz1~*I1bSIYD#j zItw&p{;jmY;kyjvQ>Jr*vu+pzwkp!=u3SsFhs2}qT? z*;UQ|vP1G@h0RRCyolSf)u3yrL2;{Dj19m zjLdWmOmvNmLyU~AObx6IjkFC6tPBif%o&VPH00)|WTsUjG#G(27@JrbTR=1%;gl8u zYS4h&P?DLOT3nKtTY%65vBc8K&={g8L3XDeP>(c74={6BCFd7Z7GtdQfX#RiEd_|LUEA0lTW&%Fi^E9 zOm%KzUTIola!F}XY7tnu&%6nzfC~8F3i4A@a~MEcqZ2%xfieu9u6{1-oD!M>QApoXo(WF|l^ye(%E$ zGDqX6DAuor?j*{ zl;xnj!av4GOI|3c*6C|*>G=3y2mkwbw(ssS{;Qg~GOa)+!1T0->LVw$-C8C4lsfEM z47wCMXa1U_q4v;n-@Av8U&r>OSI+-kT%v6`nbEGXV%p0#*FBCldoy3o`QE9#Mnm(+ z^CQV@u@inwe7)&({v2+;-<4@cJeEJ}R6gRgu=lB1nya(wJf%LZRc=53^_=EE-!e6I-DMdUrtXL)4o0I@8Vh;24Wmqhe3oR`zk4WO@JDH9O3~B4 zg?RMI|KYDI&wi$^erHL6%!`VRZ~GG$6pLqE$@%^J#x`knhX;~7E=B$GlAZBWW$(31 zi`*T~n-vt^z4XNPK@t0l`b(+SgW%)e-!+ITNoVau~`*X|sD$vk1%x=H2- z4k{W1EqGJfUtYfT`?vQq)9URz=M-&tx8Py`Fg}=)yxmTT$X?><>&pI$MO@sPS3R)s{A1SOU$6cpvBW#*(RlvEa^DuCnD zqIYR|@PVxRVEiA<4GI}+NS^foRmv?#IkI9ubi;bRfYyqiDe?D|@-n{wrxJZ^bh zqVFF^#liDs$KP_^Z;_GjypgZABI#Kuqs;^3e`kN1tdPp;ufN6jEpi7#827n%tj~LI z=k-oLeAeZDe&+p@;ETa78SFaS)jtR_iO2gn9b4P$R;uA!Q{Mh-p<&9K*Z+HrorRjT z8TSc$)Td8)-Q0LUt1U1`Y@x=XH=SRk_z#8G88jT9T(N0kLWS^#Y_Cp^`K&V+7P@%Z zuTN|-`oGqvEnMH=WAxeL_p61znhBexf9!0GyC^9euCnCQM9rd|O&3eg+}@G-xSw<5 zjW4$izt@zoo9xbcm)qx3{b@y>v3^*$qQ}fe5u;|U?c#S^FZ!`e{lz1~*I1bSIYD#j zItw&p{;jmQgvGSyZY^)^Yn$!hJN*3 z5a6Y`MKzUk&D+V-4qU&iXlRpv`f6H@)bEC$m*yHYyNY0+i&qAgeJ*3#zn zOEZ?1U%$KZ)3wls_Dk-If37!^wqM$M_!v7+p?PEQ*}C`a{|?CBTb3a78R$C664!_l z=ltB<)VvY~=c3falGGH1^30M91$R&1fbd2>aiAhqkfIczlvOfV1%r`+k(sW6iLQ}x zh>@|CsezTDk+y+>m4ShbIfF5ZhTQy=%(O~`1|yILV-qW53y6jzoYEpd4H|G8N-}d( zi%Sx73lMrBmRMRD8bkCX$nMkw>X8QN0cHxTH z6Ahz*%9LQrQc{bPi!uvJGV}8oK%P@bD$UF((ap?LC=POW@=13T2C5c?sm@KzD@{vG rE-5WaEdnd|nK$7SPyruYL4HbV4g*MQbb_ZdP=>+N)z4*}Q$iB}h@V*c literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_see_invisible.png b/NethackHelper/wwwroot/icons/no_see_invisible.png new file mode 100644 index 0000000000000000000000000000000000000000..a696abc163906d90063f8c544b1e9ee107e60945 GIT binary patch literal 1409 zcmeAS@N?(olHy`uVBq!ia0vp^{2>QApoXo(WF|l^ye(%E$ zGDqX6DAuor?j*{ zl;xnj!av4GOI|3c*6C|*>G=3y2mkwbw(ssS{;Qg~GOa)+!1T0->LVw$-C8C4lsfEM z47wCMXa1U_q4v;n-@Av8U&r>OSI+-kT%v6`nbEGXV%p0#*FBCldoy3o`QE9#Mnm(+ z^CQV@u@inwe7)&({v2+;-<4@cJeEJ}R6gRgu=lB1nya(wJf%LZRc=53^_=EE-!e6I-DMdUrtXL)4o0I@8Vh;24Wmqhe3oR`zk4WO@JDH9O3~B4 zg?RMI|KYDI&wi$^erHL6%!`VRZ~GG$6pLqE$@%^J#x`knhX;~7E=B$GlAZBWW$(31 zi`*T~n-vt^z4XNPK@t0l`b(+SgW%)e-!+ITNoVau~`*X|sD$vk1%x=H2- z4k{W1EqGJfUtYfT`?vQq)9URz=M-&tx8Py`Fg}=)yxmTT$X?><>&pI$MO@sPS3R)s{A1SOU$6cpvBW#*(RlvEa^DuCnD zqIYR|@PVxRVEiA<4GI}+NS^foRmv?#IkI9ubi;bRfYyqiDe?D|@-n{wrxJZ^bh zqVFF^#liDs$KP_^Z;_GjypgZABI#Kuqs;^3e`kN1tdPp;ufN6jEpi7#827n%tj~LI z=k-oLeAeZDe&+p@;ETa78SFaS)jtR_iO2gn9b4P$R;uA!Q{Mh-p<&9K*Z+HrorRjT z8TSc$)Td8)-Q0LUt1U1`Y@x=XH=SRk_z#8G88jT9T(N0kLWS^#Y_Cp^`K&V+7P@%Z zuTN|-`oGqvEnMH=WAxeL_p61znhBexf9!0GyC^9euCnCQM9rd|O&3eg+}@G-xSw<5 zjW4$izt@zoo9xbcm)qx3{b@y>v3^*$qQ}fe5u;|U?c#S^FZ!`e{lz1~*I1bSIYD#j zItw&p{;jm)|ch!W@g+}zZ>5(ej@)Wnk16ovB4k_-iRPv3y>Mm}+%B2|#0 z6rhwdLWiqS{WKc^d!jc)C1~~2I&E&d8_37g36-I z^o$aQfYPL#%wz?Z{M^LMyloQ=qk+nlV9HWbi<65o3raHc^B6#$Q%EY!%qh{$%u^^1 za(D7ccN7My7KN$KP0TAzOH3{)ElMo{EBBc<;S^8-A6!9xN@@-RNNaS0r!!E7!PC{x JWt~$(697|ION;;j literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_shock_resistance.png b/NethackHelper/wwwroot/icons/no_shock_resistance.png new file mode 100644 index 0000000000000000000000000000000000000000..4e95f398140824d9c27461b27138a31ff9e476ad GIT binary patch literal 1458 zcmeAS@N?(olHy`uVBq!ia0vp^{2>QApoXo(WF|l^ye(%E$ zGDqX6DAuor?j*{ zl;xnj!av4GOI|3c*6C|*>G=3y2mkwbw(ssS{;Qg~GOa)+!1T0->LVw$-C8C4lsfEM z47wCMXa1U_q4v;n-@Av8U&r>OSI+-kT%v6`nbEGXV%p0#*FBCldoy3o`QE9#Mnm(+ z^CQV@u@inwe7)&({v2+;-<4@cJeEJ}R6gRgu=lB1nya(wJf%LZRc=53^_=EE-!e6I-DMdUrtXL)4o0I@8Vh;24Wmqhe3oR`zk4WO@JDH9O3~B4 zg?RMI|KYDI&wi$^erHL6%!`VRZ~GG$6pLqE$@%^J#x`knhX;~7E=B$GlAZBWW$(31 zi`*T~n-vt^z4XNPK@t0l`b(+SgW%)e-!+ITNoVau~`*X|sD$vk1%x=H2- z4k{W1EqGJfUtYfT`?vQq)9URz=M-&tx8Py`Fg}=)yxmTT$X?><>&pI$MO@sPS3R)s{A1SOU$6cpvBW#*(RlvEa^DuCnD zqIYR|@PVxRVEiA<4GI}+NS^foRmv?#IkI9ubi;bRfYyqiDe?D|@-n{wrxJZ^bh zqVFF^#liDs$KP_^Z;_GjypgZABI#Kuqs;^3e`kN1tdPp;ufN6jEpi7#827n%tj~LI z=k-oLeAeZDe&+p@;ETa78SFaS)jtR_iO2gn9b4P$R;uA!Q{Mh-p<&9K*Z+HrorRjT z8TSc$)Td8)-Q0LUt1U1`Y@x=XH=SRk_z#8G88jT9T(N0kLWS^#Y_Cp^`K&V+7P@%Z zuTN|-`oGqvEnMH=WAxeL_p61znhBexf9!0GyC^9euCnCQM9rd|O&3eg+}@G-xSw<5 zjW4$izt@zoo9xbcm)qx3{b@y>v3^*$qQ}fe5u;|U?c#S^FZ!`e{lz1~*I1bSIYD#j zItw&p{;jmb@dH<<+$TE&9^Q$U95ZNP9WwMuYe0UxV5^Qn&$wk!x+T{x%9t3o05`((w?H_MM*R=qRj^Rm(}N5Yo> zKHC34r_S))p7QHApB*n}o0ahS*xl4winqQ%<38#Px_}~iiQ&MvnKw6^{Je`3u44$rj JF6*2UngE=^Wr_d* literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_sleep_resistance.png b/NethackHelper/wwwroot/icons/no_sleep_resistance.png new file mode 100644 index 0000000000000000000000000000000000000000..5fd7c7f27c19ec041c019446f1e0df6881e3eb56 GIT binary patch literal 1447 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 literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_speed.png b/NethackHelper/wwwroot/icons/no_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..87fb25fd32782403a7c2758fdee56ab0316c8916 GIT binary patch literal 1403 zcmeAS@N?(olHy`uVBq!ia0vp^{2>QApoXo(WF|l^ye(%E$ zGDqX6DAuor?j*{ zl;xnj!av4GOI|3c*6C|*>G=3y2mkwbw(ssS{;Qg~GOa)+!1T0->LVw$-C8C4lsfEM z47wCMXa1U_q4v;n-@Av8U&r>OSI+-kT%v6`nbEGXV%p0#*FBCldoy3o`QE9#Mnm(+ z^CQV@u@inwe7)&({v2+;-<4@cJeEJ}R6gRgu=lB1nya(wJf%LZRc=53^_=EE-!e6I-DMdUrtXL)4o0I@8Vh;24Wmqhe3oR`zk4WO@JDH9O3~B4 zg?RMI|KYDI&wi$^erHL6%!`VRZ~GG$6pLqE$@%^J#x`knhX;~7E=B$GlAZBWW$(31 zi`*T~n-vt^z4XNPK@t0l`b(+SgW%)e-!+ITNoVau~`*X|sD$vk1%x=H2- z4k{W1EqGJfUtYfT`?vQq)9URz=M-&tx8Py`Fg}=)yxmTT$X?><>&pI$MO@sPuTf1W0~mb=t3o15f)dLW3X1a6GILTDN-7Id6~OUn z(YrJ_x=%)t=g)Hy%chT;E%})52ED6ql;HV%>!!!-2&a*5|#q z^Li&AKI?KnKl6S{@Wo)440fIE>K_D|#N+*(j;-x=E7kC=DR2L^&@koA>;FB*&O%Mv zjQfN=>eDB@Zf-oF)fSi|wov2Ho6av%{D;Ep3>uD4uGq9Np+a~=wpS;|eAbx@3thbI z*C)0Z{a@?T7OrpbG5T!r`_)2U&4f+UKXx|8U6hm!S6T9DqGr*~ri-O#Ztuu^+|Rl3 z#+TcM-)l`SU;>=(PL(#h*7iFcJaHd7yVeK{^AkgYb?zEoS?aM z9oNJklfKP;_ie-db+X@P|5n=b-{XtckuU7?Zz%Y4M!rf1#&5Q#i(`ny<=hG0d`Ap8 zoZ}bGyV(9kGyNjdxh*;ZC+vkze7gMCXAMj5EMhn!rU`24 z`({iH0a`0r;u=xnoS&PUnpeW$T$GwvlA5AWo>`Ki;O^-g5Z=fq4pgKHQj`LevPuT4 zU@$T;GSf9M(KRv-F*3F?HLx-?(l#)#GBA)aXD~+5kei>9nO2F=U0nu=T zQ(6S5K?80>NoH zQch;Ff=hmGVrJg9iH6ZYWlAt*DXGQDMVSR9nfZAPAkQfzm1gFY=w{|A6bHFG`J_7v z167N{ROcqFN!D8u0C>gTe~DWM4f DeIHB) literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_stealth.png b/NethackHelper/wwwroot/icons/no_stealth.png new file mode 100644 index 0000000000000000000000000000000000000000..90617d0b92df66b6c5ae9d519dcb122630b2e896 GIT binary patch literal 1396 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 JF6*2UngB`8VvPU* literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/no_teleportitis.png b/NethackHelper/wwwroot/icons/no_teleportitis.png new file mode 100644 index 0000000000000000000000000000000000000000..dd35f676a9e01d5a26bb030024a1804f1afb0bab GIT binary patch literal 1482 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 S!P6Ni!{F)a=d#Wzp$P!#rA|cv literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/poison_resistance.png b/NethackHelper/wwwroot/icons/poison_resistance.png new file mode 100644 index 0000000000000000000000000000000000000000..acb6653fcb9006dcdb4b28eaee0d33fae712f965 GIT binary patch literal 865 zcmV-n1D^beP)EX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3_CX>@2HM@dakSAh-}0003vNklGwNSD-w1E=AMIAeK%imKqj3Qjm$MyV`cL1ejmaiZujeV{s-`V$ewdQwUBF`iPY>(K#iUc#O!~GWOm5XV=)m@lnnf-dpwV>b+e&TFfvbCXeI9e_z}v^m z#ulX2cBE1@#r1p%qeygv%;1uHP+FHISz>o+QLC#KenPCaR7zTU`_erZ!i7>>DwQ>p rM$;i&WY;sdg7i}S1^*`g=7;eKrfZ$o>6Po`00000NkvXXu0mjfwW)?n literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/polymorph_control.png b/NethackHelper/wwwroot/icons/polymorph_control.png new file mode 100644 index 0000000000000000000000000000000000000000..3a175661a860c81114964279e95a261ed5df2d82 GIT binary patch literal 694 zcmV;n0!jUeP)EX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3<@sP+92it000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0001uNkl9jKmK~oB#j-07*qoM6N<$f}~p|0ssI2 literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/polymorphitis.png b/NethackHelper/wwwroot/icons/polymorphitis.png new file mode 100644 index 0000000000000000000000000000000000000000..5b7537d96e63f9786972e963328f3cae0f830a09 GIT binary patch literal 671 zcmV;Q0$}}#P)EX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3_CX>@2HM@dakSAh-}0001XNkl$8*YKT6pEW&eVIfUderN$+=)@BVoxMDAPSUj5S2FI)#*F|c|0GJlu z)jPuQBE*20#ni}xs&c8&74B^1V8yt$2LHYDr)2x`t4;zEf?L<38L0pO002ovPDHLk FV1h!~AX5MU literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/prayer_timeout.png b/NethackHelper/wwwroot/icons/prayer_timeout.png new file mode 100644 index 0000000000000000000000000000000000000000..7e1f113cf4f71e0c11ed9c649f9cbad4f2f3f014 GIT binary patch literal 779 zcmV+m1N8ifP)EX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3=uOP>W8HO000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0002uNklfOm^rjTnCM968{wXgAlmfce(o#f(_$G+_~W6cG?u?WxIIB*W;d1 zb*wz$b&nZE~0V3bC#LUc4OOb|zK5GB~ebyiiY1=R@ zVRu3Q8uqoeXAzR&)(M21f5GorKkfo7Bu|c`>R3qT;(VBVamRr{MB2P&tj`*_b%MfZ zn@piuK%vZ2ke+LIKt!`YE-zbU4 literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/protection.png b/NethackHelper/wwwroot/icons/protection.png new file mode 100644 index 0000000000000000000000000000000000000000..eeec5606e5e375cad96917d355b5c0aebad10e6c GIT binary patch literal 746 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 literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/searching.png b/NethackHelper/wwwroot/icons/searching.png new file mode 100644 index 0000000000000000000000000000000000000000..77833afa911d7067a57b1dc7368e0f54f883ee2a GIT binary patch literal 763 zcmVEX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3_TJ!000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0002eNklZ9HLSGByVu6mG;B3Ya^Ue$^5-}l)3$3lF!DY2r<7%8z((uO#Jyb%Tt_0`lfZQZ tkjVF>*RrJGwES#G0o2mpV77{{dI0fTPB_k1rrrPm002ovPDHLkV1iW1OGy9# literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/see_invisible.png b/NethackHelper/wwwroot/icons/see_invisible.png new file mode 100644 index 0000000000000000000000000000000000000000..5578d93e7996d155bed3eabae2c68a1b23d8adfe GIT binary patch literal 706 zcmV;z0zLhSP)EX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3<(Rg^QU3}000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0001)NklgJzRm0>TKYcLWFhN0Pr>04_l^8Q~W6lXdmG;J0UaRQy+BxI+-DNdSg+yM0bI z&vbhFp&4tX3&;+Hpxij<4&rCgeLdd}9syq|0D1EXb-)}3-` oRz0?uTnHgDG>d6h*3xtP19O0RIi;$F=>Px#07*qoM6N<$g1-qaA^-pY literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/shock_resistance.png b/NethackHelper/wwwroot/icons/shock_resistance.png new file mode 100644 index 0000000000000000000000000000000000000000..a4a8f068175266e2ab205d584e3701c0099bba02 GIT binary patch literal 765 zcmVEX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3_CX>@2HM@dakSAh-}0002gNkl|5JcDMatuuAK6l{&6!a8S)O3^- zPLDVO2M7|Ri$sZYjFgkYU>Re`XCw=-cr)u=nbB6DeKFsM0h+d>EQ!73Q;l9DG;N2b z?GSK*fC~WJyVAVG5_Yn!vLvRWlGe^-Eg~MCSCts}e(Q~anqE%9;Rf6!ucgyyU|!G* z7nRgM4|6{*AXSf~>hUwYl<$g1f{uhVFLkGTf>BRq0(PhO&-|F5S4KP%&IAt911EX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3_CX>@2HM@dakSAh-}0002INklb?tsYgWey3b zz$Lf=cS8f0ED5*r%Na&m$t!tgXZ#RqF#4dhnGym6U>_o0+m@9N5kAChUpcK=N-t7A zL^jq5c@{R;Zixu%<0<|9cE#y@scg$;B9isT>fr%!>R=Z*0L@wOgt)KEIH~YdW@hG$ zP)0G<^=-G%h(hUP0svzjlwM%0lf&vcY7Q~h$(??=|1kljm+WDTKm>jzW&-~ZM}8RI XMl**wf9sfJ00000NkvXXu0mjflm|NW literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/slow_digestion.png b/NethackHelper/wwwroot/icons/slow_digestion.png new file mode 100644 index 0000000000000000000000000000000000000000..7a9308406396cc3db3a7dca77a0d3eddc90ff5c7 GIT binary patch literal 742 zcmVEX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3=s*~=3W;7000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0002JNklkI}XDj41JC|^a|;eD|F037#O>B&QUUV zVPxPiSu?VvxdNNJ6a?ZIOO}z~JwICyLOnP-Q|ZBg7TT%SHEy^bnUbquj#be8#Q5&+f;dE5D}} YKM32A`~Uh($ literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/speed.png b/NethackHelper/wwwroot/icons/speed.png new file mode 100644 index 0000000000000000000000000000000000000000..4a237e4d7c1796eee6a9f27d546065e0c0cc472f GIT binary patch literal 679 zcmV;Y0$BZtP)EX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3=KAj_bzt;000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0001fNklFzv{jC=)hp3Q&eZbdJ{KK%8YL;S^*egZ>BTKFhuE*<~? N002ovPDHLkV1jgyB0&HE literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/stealth.png b/NethackHelper/wwwroot/icons/stealth.png new file mode 100644 index 0000000000000000000000000000000000000000..3fa754f044f8ba4711204a2a7b50622c5a6e9a51 GIT binary patch literal 666 zcmV;L0%iS)P)EX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3=1CX7$FM)000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0001SNklE%=1 z2CKrfiOsvTRwR0qD4^_t@i*Dr&#_K~Cx()w3lbYd3j_+pu>b%707*qoM6N<$g3t9A Ay#N3J literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/telepathy.png b/NethackHelper/wwwroot/icons/telepathy.png new file mode 100644 index 0000000000000000000000000000000000000000..f167781246f9e3ef5a2466998788c2fd55b8fc07 GIT binary patch literal 831 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 Ef-KKvBLDyZ literal 0 HcmV?d00001 diff --git a/NethackHelper/wwwroot/icons/warning.png b/NethackHelper/wwwroot/icons/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..7a867ebfdbbde55935b771d2a5007d47d7cb7d72 GIT binary patch literal 706 zcmV;z0zLhSP)EX>4Tx04R}tk-tmBKpe$ie~3~l4i*t{2vT*iAS&XhRVYG*P%E_RU~=g%Xws0R zxHt-~1qXjDRvlcNb#-tR1i>F5{sH2o=prS4FDbN$@!+@*@9sVB-U0r4nW<)Q98fjO zNG0MzCc7$hz9NV|gfNOBiJAJGC??@KzV6}U>s^dzd7t}pbSpWN0X~6vmg$B?yg@v@ zY3ZEzi6g8iDa7Z*V+LK2_>t?f%Ws?u4*Pj##7L*+i6g{9p^fD>W<^6Ko+6Gasz&+# zjLQn=EzWAW%9{7&FAV3jm1VBe97F<(Sb_)vGO8${3=1(@HBwBZXg}`ZA8`C4xny#c zz{s(H3RFmrAN&t~cWdS+C)}iP9O!tl?T=xga~EjTZ2SAzwi_ov;2F5mTK-BMnE52V z*3zO!K+iUCaoy77J>YT&=zr2BLvo}5O@BTQyr0oGWr5yXAhhQ8*4)SG1CXY!k~hG? zAuv*)>~)WKceVHS@0n(QKZ%@ju#NA);s5{u24YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2kHbC3=IR`MCw!k000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0001)Nkl$Q*;&c;3!Eh z9H7Heq^Pcw)NKI|EsQGURP1CP_JqC$w|fWQyBASSdq<-aja7txZD8g z)tn^I#^kdz|BPK?H#Yeg4Q+rVB!MJ)1 + + + + Item Tracker + + + + + + + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + +
+ +
+ +
+ + + 0 + +
+
+ + + 0 + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + diff --git a/NethackHelper/wwwroot/tracker.js b/NethackHelper/wwwroot/tracker.js new file mode 100644 index 0000000..1078071 --- /dev/null +++ b/NethackHelper/wwwroot/tracker.js @@ -0,0 +1,48 @@ +const connection = + new signalR.HubConnectionBuilder() + .withUrl("/webview") + .build(); + +async function start() { + try { + await connection.start(); + } catch (err) { + console.log(err); + setTimeout(start, 2000); + } +} + +start(); + +connection.onclose(async () => setTimeout(start, 2000)); + +connection.on("UpdateProperty", updateProperty); +connection.on("UpdatePrayer", updatePrayer); +connection.on("UpdateProtection", updateProtection); +connection.on("UpdateAngry", updateAngry); + +function updateProperty(property, type, has) { + if (has) { + $(`.${type}.has[data-property='${property}']`).removeClass("hidden"); + $(`.${type}.has-not[data-property='${property}']`).addClass("hidden"); + } else { + $(`.${type}.has-not[data-property='${property}']`).removeClass("hidden"); + $(`.${type}.has[data-property='${property}']`).addClass("hidden"); + } +} + +function updatePrayer(last_prayer) { + $(".prayer-timeout").text(last_prayer); +} + +function updateProtection(protection) { + $(".protection-value").text(protection); +} + +function updateAngry(is_angry) { + if (is_angry) { + $("[data-property='angry_god']").removeClass("hidden"); + } else { + $("[data-property='angry_god']").addClass("hidden"); + } +}