Initial commit
This commit is contained in:
428
.gitignore
vendored
Normal file
428
.gitignore
vendored
Normal file
@@ -0,0 +1,428 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
*.env
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
|
||||
[Dd]ebug/x64/
|
||||
[Dd]ebugPublic/x64/
|
||||
[Rr]elease/x64/
|
||||
[Rr]eleases/x64/
|
||||
bin/x64/
|
||||
obj/x64/
|
||||
|
||||
[Dd]ebug/x86/
|
||||
[Dd]ebugPublic/x86/
|
||||
[Rr]elease/x86/
|
||||
[Rr]eleases/x86/
|
||||
bin/x86/
|
||||
obj/x86/
|
||||
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
[Aa][Rr][Mm]64[Ee][Cc]/
|
||||
bld/
|
||||
[Oo]bj/
|
||||
[Oo]ut/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Build results on 'Bin' directories
|
||||
**/[Bb]in/*
|
||||
# Uncomment if you have tasks that rely on *.refresh files to move binaries
|
||||
# (https://github.com/github/gitignore/pull/3736)
|
||||
#!**/[Bb]in/*.refresh
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
*.trx
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Approval Tests result files
|
||||
*.received.*
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.idb
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
# but not Directory.Build.rsp, as it configures directory-level build defaults
|
||||
!Directory.Build.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.tlog
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
|
||||
*.dsw
|
||||
*.dsp
|
||||
|
||||
# Visual Studio 6 technical files
|
||||
*.ncb
|
||||
*.aps
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
**/.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
**/.fake/
|
||||
|
||||
# CodeRush personal settings
|
||||
**/.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
**/__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
#tools/**
|
||||
#!tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
MSBuild_Logs/
|
||||
|
||||
# AWS SAM Build and Temporary Artifacts folder
|
||||
.aws-sam
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
**/.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
**/.localhistory/
|
||||
|
||||
# Visual Studio History (VSHistory) files
|
||||
.vshistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
**/.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
|
||||
# VS Code files for those working on multiple tools
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
!.vscode/*.code-snippets
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
|
||||
# Built Visual Studio Code Extensions
|
||||
*.vsix
|
||||
|
||||
# Windows Installer files from build outputs
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
25
NethackHelper.sln
Normal file
25
NethackHelper.sln
Normal file
@@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.5.33516.290
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NethackHelper", "NethackHelper\NethackHelper.csproj", "{551E16E7-B2D3-4143-AF0E-BE4691712B60}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{551E16E7-B2D3-4143-AF0E-BE4691712B60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{551E16E7-B2D3-4143-AF0E-BE4691712B60}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{551E16E7-B2D3-4143-AF0E-BE4691712B60}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{551E16E7-B2D3-4143-AF0E-BE4691712B60}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {0CE91709-1817-4270-943D-93170193950A}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
50
NethackHelper/Charisma.cs
Normal file
50
NethackHelper/Charisma.cs
Normal file
@@ -0,0 +1,50 @@
|
||||
namespace NethackHelper {
|
||||
using System.Collections.Generic;
|
||||
using System.Windows.Forms;
|
||||
|
||||
public struct CharismaClass {
|
||||
public string DisplayName { get; private set; } = string.Empty;
|
||||
public double Multiplier { get; private set; }
|
||||
|
||||
public CharismaClass() { }
|
||||
|
||||
public static List<CharismaClass> Classes = [
|
||||
new() {
|
||||
DisplayName = "CHA 5-",
|
||||
Multiplier = 2.0,
|
||||
},
|
||||
new() {
|
||||
DisplayName = "CHA 6 - 7",
|
||||
Multiplier = 1.5,
|
||||
},
|
||||
new() {
|
||||
DisplayName = "CHA 8 - 10",
|
||||
Multiplier = 1.3333,
|
||||
},
|
||||
new() {
|
||||
DisplayName = "CHA 11 - 15",
|
||||
Multiplier = 1.0,
|
||||
},
|
||||
new() {
|
||||
DisplayName = "CHA 16 - 17",
|
||||
Multiplier = 0.75,
|
||||
},
|
||||
new() {
|
||||
DisplayName = "CHA 18",
|
||||
Multiplier = 0.6667,
|
||||
},
|
||||
new() {
|
||||
DisplayName = "CHA 19+",
|
||||
Multiplier = 0.5,
|
||||
},
|
||||
];
|
||||
|
||||
public static readonly CharismaClass DefaultClass = Classes[3];
|
||||
}
|
||||
|
||||
public class CharismaSource : BindingSource {
|
||||
public CharismaSource() {
|
||||
this.DataSource = CharismaClass.Classes;
|
||||
}
|
||||
}
|
||||
}
|
||||
21
NethackHelper/Item.cs
Normal file
21
NethackHelper/Item.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
namespace NethackHelper {
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class Item {
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public int Cost { get; set; }
|
||||
public int Ink { get; set; }
|
||||
public string? Appearance { get; set; }
|
||||
}
|
||||
|
||||
public class ItemList {
|
||||
public List<Item> Items { get; set; } = new();
|
||||
}
|
||||
|
||||
public enum ItemAttribute {
|
||||
Name,
|
||||
Cost,
|
||||
Ink,
|
||||
Appearance,
|
||||
}
|
||||
}
|
||||
72
NethackHelper/ItemDisplay.Designer.cs
generated
Normal file
72
NethackHelper/ItemDisplay.Designer.cs
generated
Normal file
@@ -0,0 +1,72 @@
|
||||
namespace NethackHelper {
|
||||
partial class ItemDisplay {
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing) {
|
||||
if (disposing && (components != null)) {
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent() {
|
||||
itemListView = new System.Windows.Forms.ListView();
|
||||
nameColumn = new System.Windows.Forms.ColumnHeader();
|
||||
appearanceColumn = new System.Windows.Forms.ColumnHeader();
|
||||
SuspendLayout();
|
||||
//
|
||||
// itemListView
|
||||
//
|
||||
itemListView.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right;
|
||||
itemListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { nameColumn, appearanceColumn });
|
||||
itemListView.FullRowSelect = true;
|
||||
itemListView.Location = new System.Drawing.Point(0, 0);
|
||||
itemListView.MultiSelect = false;
|
||||
itemListView.Name = "itemListView";
|
||||
itemListView.Size = new System.Drawing.Size(610, 568);
|
||||
itemListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
|
||||
itemListView.TabIndex = 0;
|
||||
itemListView.UseCompatibleStateImageBehavior = false;
|
||||
itemListView.View = System.Windows.Forms.View.Details;
|
||||
itemListView.MouseDoubleClick += itemListView_MouseDoubleClick;
|
||||
//
|
||||
// nameColumn
|
||||
//
|
||||
nameColumn.Text = "Name";
|
||||
nameColumn.Width = 144;
|
||||
//
|
||||
// appearanceColumn
|
||||
//
|
||||
appearanceColumn.Text = "Appearance";
|
||||
appearanceColumn.Width = 144;
|
||||
//
|
||||
// ItemDisplay
|
||||
//
|
||||
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
Controls.Add(itemListView);
|
||||
Name = "ItemDisplay";
|
||||
Size = new System.Drawing.Size(613, 568);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.ListView itemListView;
|
||||
private System.Windows.Forms.ColumnHeader nameColumn;
|
||||
private System.Windows.Forms.ColumnHeader appearanceColumn;
|
||||
}
|
||||
}
|
||||
177
NethackHelper/ItemDisplay.cs
Normal file
177
NethackHelper/ItemDisplay.cs
Normal file
@@ -0,0 +1,177 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using static System.Windows.Forms.ListViewItem;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace NethackHelper {
|
||||
public partial class ItemDisplay : UserControl {
|
||||
public const string UNIDENTIFIED = "[randomized]";
|
||||
public static readonly Color SELECTED_COLOR = Color.Black;
|
||||
public static readonly Color UNSELECTED_COLOR = Color.Gray;
|
||||
|
||||
private static readonly Dictionary<ItemAttribute, Func<Item, string>> COLUMN_MAP = new() {
|
||||
[ItemAttribute.Name] = item => item.Name,
|
||||
[ItemAttribute.Cost] = item => item.Cost.ToString(),
|
||||
[ItemAttribute.Ink] = item => item.Ink.ToString(),
|
||||
[ItemAttribute.Appearance] = item => item.Appearance ?? UNIDENTIFIED,
|
||||
};
|
||||
|
||||
[Browsable(false)]
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
public Func<int, string> CostFormatter { get; set; } = cost => cost.ToString();
|
||||
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
|
||||
public List<ItemDisplayColumn> Columns { get; set; } = new();
|
||||
|
||||
private int[] GroupCosts { get; set; } = [];
|
||||
|
||||
private Dictionary<string, string?> AppearanceMap { get; set; } = new();
|
||||
|
||||
public ItemDisplay() {
|
||||
InitializeComponent();
|
||||
this.itemListView.ListViewItemSorter = Comparer<ListViewItem>.Create(CompareItems);
|
||||
}
|
||||
|
||||
protected override void OnLoad(EventArgs e) {
|
||||
base.OnLoad(e);
|
||||
if (this.Columns != null) {
|
||||
this.itemListView.Columns.Clear();
|
||||
foreach (var column in this.Columns) {
|
||||
this.itemListView.Columns.Add(column.Attribute.ToString(), column.Width);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void DisplayItemList(ItemList itemList, IdentificationRecord? idRecord) {
|
||||
this.itemListView.Groups.Clear();
|
||||
this.itemListView.Items.Clear();
|
||||
this.AppearanceMap.Clear();
|
||||
|
||||
this.GroupCosts = itemList.Items.Select(item => item.Cost).Distinct().Order().ToArray();
|
||||
var costDictionary = new Dictionary<int, ListViewGroup>();
|
||||
|
||||
foreach (var cost in this.GroupCosts) {
|
||||
var group = new ListViewGroup(this.CostFormatter.Invoke(cost), HorizontalAlignment.Center);
|
||||
this.itemListView.Groups.Add(group);
|
||||
costDictionary.Add(cost, group);
|
||||
}
|
||||
|
||||
foreach (var item in itemList.Items) {
|
||||
bool identified = false;
|
||||
ItemRecord record = default;
|
||||
if (idRecord != null) {
|
||||
if (idRecord.TryGetValue(item.Name, out var identity)) {
|
||||
record = identity;
|
||||
identified = true;
|
||||
}
|
||||
} else if (item.Appearance != null) {
|
||||
record = new ItemRecord() {
|
||||
Name = item.Name,
|
||||
Appearance = item.Appearance,
|
||||
};
|
||||
identified = true;
|
||||
}
|
||||
|
||||
AppearanceMap[item.Name] = record.Appearance;
|
||||
|
||||
var columns = this.Columns.Select(col => COLUMN_MAP[col.Attribute].Invoke(item)).ToArray();
|
||||
|
||||
var listViewItem = new ListViewItem(columns, costDictionary[item.Cost]);
|
||||
listViewItem.UseItemStyleForSubItems = false;
|
||||
var baseFont = new Font(this.itemListView.Font, FontStyle.Regular);
|
||||
var baseColor = UNSELECTED_COLOR;
|
||||
if (!identified) {
|
||||
baseFont = new Font(baseFont, FontStyle.Bold);
|
||||
baseColor = SELECTED_COLOR;
|
||||
}
|
||||
listViewItem.Checked = identified;
|
||||
listViewItem.Font = baseFont;
|
||||
listViewItem.ForeColor = baseColor;
|
||||
foreach (ListViewSubItem subItem in listViewItem.SubItems) {
|
||||
subItem.Font = baseFont;
|
||||
subItem.ForeColor = baseColor;
|
||||
}
|
||||
if (record.Appearance == null) {
|
||||
var fontStyle = FontStyle.Italic;
|
||||
if (!identified) {
|
||||
fontStyle |= FontStyle.Bold;
|
||||
}
|
||||
|
||||
for (var i = 0; i < this.Columns.Count; i++) {
|
||||
if (this.Columns[i].Attribute == ItemAttribute.Appearance) {
|
||||
listViewItem.SubItems[i].Font = new Font(baseFont, fontStyle);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.itemListView.Items.Add(listViewItem);
|
||||
}
|
||||
}
|
||||
|
||||
public IdentificationRecord Export() {
|
||||
List<ItemRecord> records = [];
|
||||
foreach (ListViewItem item in this.itemListView.Items) {
|
||||
if (item.Checked) {
|
||||
string? appearance = this.AppearanceMap[item.Text];
|
||||
records.Add(new() {
|
||||
Name = item.Text,
|
||||
Appearance = appearance,
|
||||
});
|
||||
}
|
||||
}
|
||||
return new(records);
|
||||
}
|
||||
|
||||
public void UpdateCostHeaders() {
|
||||
for (int i = 0; i < this.GroupCosts.Length; i++) {
|
||||
this.itemListView.Groups[i].Header = this.CostFormatter.Invoke(this.GroupCosts[i]);
|
||||
}
|
||||
}
|
||||
|
||||
private void itemListView_MouseDoubleClick(object sender, MouseEventArgs e) {
|
||||
if (this.itemListView.SelectedItems.Count == 1) {
|
||||
var item = this.itemListView.SelectedItems[0];
|
||||
item.Checked = !item.Checked;
|
||||
var baseFont = item.Font;
|
||||
foreach (ListViewSubItem subItem in item.SubItems) {
|
||||
if (item.Checked) {
|
||||
if (subItem.Font.Italic) {
|
||||
subItem.Font = new Font(baseFont, FontStyle.Italic);
|
||||
} else {
|
||||
subItem.Font = new Font(baseFont, FontStyle.Regular);
|
||||
}
|
||||
subItem.ForeColor = UNSELECTED_COLOR;
|
||||
} else {
|
||||
if (subItem.Font.Italic) {
|
||||
subItem.Font = new Font(baseFont, FontStyle.Bold | FontStyle.Italic);
|
||||
} else {
|
||||
subItem.Font = new Font(baseFont, FontStyle.Bold | FontStyle.Regular);
|
||||
}
|
||||
subItem.ForeColor = SELECTED_COLOR;
|
||||
}
|
||||
}
|
||||
this.itemListView.Sort();
|
||||
}
|
||||
}
|
||||
|
||||
private static int CompareItems(ListViewItem a, ListViewItem b) {
|
||||
if (a.Checked != b.Checked) {
|
||||
return a.Checked.CompareTo(b.Checked);
|
||||
} else {
|
||||
return a.Text.CompareTo(b.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class ItemDisplayColumn {
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
|
||||
public ItemAttribute Attribute { get; set; }
|
||||
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
|
||||
public int Width { get; set; }
|
||||
}
|
||||
}
|
||||
120
NethackHelper/ItemDisplay.resx
Normal file
120
NethackHelper/ItemDisplay.resx
Normal file
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
656
NethackHelper/MainForm.Designer.cs
generated
Normal file
656
NethackHelper/MainForm.Designer.cs
generated
Normal file
@@ -0,0 +1,656 @@
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace NethackHelper {
|
||||
partial class MainForm : Form {
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing) {
|
||||
if (disposing && (components != null)) {
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent() {
|
||||
components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
|
||||
CharismaClass charismaClass8 = new CharismaClass();
|
||||
CharismaClass charismaClass9 = new CharismaClass();
|
||||
CharismaClass charismaClass10 = new CharismaClass();
|
||||
CharismaClass charismaClass11 = new CharismaClass();
|
||||
CharismaClass charismaClass12 = new CharismaClass();
|
||||
CharismaClass charismaClass13 = new CharismaClass();
|
||||
CharismaClass charismaClass14 = new CharismaClass();
|
||||
mainTabControl = new TabControl();
|
||||
itemsTab = new TabPage();
|
||||
suckerBox = new CheckBox();
|
||||
saveSourceBindingSource = new BindingSource(components);
|
||||
shoppingTabControl = new TabControl();
|
||||
scrollPotionTab = new TabPage();
|
||||
potionDisplay = new ItemDisplay();
|
||||
scrollDisplay = new ItemDisplay();
|
||||
wandRingTab = new TabPage();
|
||||
ringDisplay = new ItemDisplay();
|
||||
wandDisplay = new ItemDisplay();
|
||||
charismaSelector = new ComboBox();
|
||||
charismaSourceBindingSource = new BindingSource(components);
|
||||
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();
|
||||
mainMenu = new MenuStrip();
|
||||
fileToolStripMenuItem = new ToolStripMenuItem();
|
||||
resetToolStripMenuItem = new ToolStripMenuItem();
|
||||
mainTabControl.SuspendLayout();
|
||||
itemsTab.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize) saveSourceBindingSource).BeginInit();
|
||||
shoppingTabControl.SuspendLayout();
|
||||
scrollPotionTab.SuspendLayout();
|
||||
wandRingTab.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize) charismaSourceBindingSource).BeginInit();
|
||||
intrinsicsTab.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize) lastPrayerPicker).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize) intrinsicsBindingSource).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize) protectionPicker).BeginInit();
|
||||
sokobanTab.SuspendLayout();
|
||||
mainMenu.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// itemsTab
|
||||
//
|
||||
itemsTab.Controls.Add(suckerBox);
|
||||
itemsTab.Controls.Add(shoppingTabControl);
|
||||
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;
|
||||
//
|
||||
// suckerBox
|
||||
//
|
||||
suckerBox.AutoSize = true;
|
||||
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";
|
||||
suckerBox.UseVisualStyleBackColor = true;
|
||||
suckerBox.CheckedChanged += suckerBox_CheckedChanged;
|
||||
//
|
||||
// saveSourceBindingSource
|
||||
//
|
||||
saveSourceBindingSource.DataSource = typeof(SaveSource);
|
||||
saveSourceBindingSource.Position = 0;
|
||||
//
|
||||
// shoppingTabControl
|
||||
//
|
||||
shoppingTabControl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||
shoppingTabControl.Controls.Add(scrollPotionTab);
|
||||
shoppingTabControl.Controls.Add(wandRingTab);
|
||||
shoppingTabControl.Location = new Point(6, 35);
|
||||
shoppingTabControl.Name = "shoppingTabControl";
|
||||
shoppingTabControl.SelectedIndex = 0;
|
||||
shoppingTabControl.Size = new Size(652, 555);
|
||||
shoppingTabControl.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;
|
||||
//
|
||||
// potionDisplay
|
||||
//
|
||||
potionDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
|
||||
potionDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("potionDisplay.Columns");
|
||||
potionDisplay.Location = new Point(325, 6);
|
||||
potionDisplay.Name = "potionDisplay";
|
||||
potionDisplay.Size = new Size(313, 515);
|
||||
potionDisplay.TabIndex = 1;
|
||||
//
|
||||
// scrollDisplay
|
||||
//
|
||||
scrollDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
|
||||
scrollDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("scrollDisplay.Columns");
|
||||
scrollDisplay.Location = new Point(6, 6);
|
||||
scrollDisplay.Name = "scrollDisplay";
|
||||
scrollDisplay.Size = new Size(313, 515);
|
||||
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;
|
||||
//
|
||||
// ringDisplay
|
||||
//
|
||||
ringDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
ringDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("ringDisplay.Columns");
|
||||
ringDisplay.Location = new Point(325, 6);
|
||||
ringDisplay.Name = "ringDisplay";
|
||||
ringDisplay.Size = new Size(313, 515);
|
||||
ringDisplay.TabIndex = 2;
|
||||
//
|
||||
// wandDisplay
|
||||
//
|
||||
wandDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
|
||||
wandDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("wandDisplay.Columns");
|
||||
wandDisplay.Location = new Point(6, 6);
|
||||
wandDisplay.Name = "wandDisplay";
|
||||
wandDisplay.Size = new Size(313, 515);
|
||||
wandDisplay.TabIndex = 1;
|
||||
//
|
||||
// charismaSelector
|
||||
//
|
||||
charismaSelector.DataBindings.Add(new Binding("SelectedItem", saveSourceBindingSource, "CharismaClass", true));
|
||||
charismaSelector.DataSource = charismaSourceBindingSource;
|
||||
charismaSelector.DisplayMember = "DisplayName";
|
||||
charismaSelector.FormattingEnabled = true;
|
||||
charismaSelector.Items.AddRange(new object[] { charismaClass8, charismaClass9, charismaClass10, charismaClass11, charismaClass12, charismaClass13, charismaClass14 });
|
||||
charismaSelector.Location = new Point(6, 6);
|
||||
charismaSelector.Name = "charismaSelector";
|
||||
charismaSelector.Size = new Size(121, 23);
|
||||
charismaSelector.TabIndex = 0;
|
||||
charismaSelector.ValueMember = "Multiplier";
|
||||
charismaSelector.SelectedIndexChanged += charismaSelector_SelectedIndexChanged;
|
||||
//
|
||||
// charismaSourceBindingSource
|
||||
//
|
||||
charismaSourceBindingSource.DataSource = typeof(CharismaSource);
|
||||
charismaSourceBindingSource.Position = 0;
|
||||
//
|
||||
// intrinsicsTab
|
||||
//
|
||||
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;
|
||||
//
|
||||
// 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";
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// 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";
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// 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;
|
||||
//
|
||||
// fileToolStripMenuItem
|
||||
//
|
||||
fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { resetToolStripMenuItem });
|
||||
fileToolStripMenuItem.Name = "fileToolStripMenuItem";
|
||||
fileToolStripMenuItem.Size = new Size(37, 20);
|
||||
fileToolStripMenuItem.Text = "File";
|
||||
//
|
||||
// resetToolStripMenuItem
|
||||
//
|
||||
resetToolStripMenuItem.Name = "resetToolStripMenuItem";
|
||||
resetToolStripMenuItem.Size = new Size(102, 22);
|
||||
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();
|
||||
shoppingTabControl.ResumeLayout(false);
|
||||
scrollPotionTab.ResumeLayout(false);
|
||||
wandRingTab.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize) charismaSourceBindingSource).EndInit();
|
||||
intrinsicsTab.ResumeLayout(false);
|
||||
intrinsicsTab.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize) lastPrayerPicker).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize) intrinsicsBindingSource).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize) protectionPicker).EndInit();
|
||||
sokobanTab.ResumeLayout(false);
|
||||
mainMenu.ResumeLayout(false);
|
||||
mainMenu.PerformLayout();
|
||||
ResumeLayout(false);
|
||||
PerformLayout();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private TabControl mainTabControl;
|
||||
private TabPage sokobanTab;
|
||||
private Label sokobanSolution;
|
||||
private ListBox sokobanLevelList;
|
||||
private Button sokobanPrev;
|
||||
private Button sokobanNext;
|
||||
private CheckBox sokobanVertical;
|
||||
private CheckBox sokobanHorizontal;
|
||||
private TabPage itemsTab;
|
||||
private ComboBox charismaSelector;
|
||||
private TabControl shoppingTabControl;
|
||||
private TabPage potionsTab;
|
||||
private TabPage scrollPotionTab;
|
||||
private ItemDisplay scrollDisplay;
|
||||
private ItemDisplay potionDisplay;
|
||||
private TabPage wandRingTab;
|
||||
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 Label label2;
|
||||
private NumericUpDown lastPrayerPicker;
|
||||
private Label label1;
|
||||
private NumericUpDown protectionPicker;
|
||||
private BindingSource intrinsicsBindingSource;
|
||||
private BindingSource saveSourceBindingSource;
|
||||
private BindingSource charismaSourceBindingSource;
|
||||
private MenuStrip mainMenu;
|
||||
private ToolStripMenuItem fileToolStripMenuItem;
|
||||
private ToolStripMenuItem resetToolStripMenuItem;
|
||||
}
|
||||
}
|
||||
180
NethackHelper/MainForm.cs
Normal file
180
NethackHelper/MainForm.cs
Normal file
@@ -0,0 +1,180 @@
|
||||
namespace NethackHelper {
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
|
||||
public partial class MainForm : Form {
|
||||
private readonly List<SokobanSolution> sokobans = new();
|
||||
private int sokobanStepIndex = 0;
|
||||
|
||||
private Dictionary<string, Version> versionMap = new();
|
||||
private Version defaultVersion;
|
||||
|
||||
public MainForm() {
|
||||
InitializeComponent();
|
||||
|
||||
this.scrollDisplay.CostFormatter = GetCostString;
|
||||
this.potionDisplay.CostFormatter = GetCostString;
|
||||
this.wandDisplay.CostFormatter = GetCostString;
|
||||
this.ringDisplay.CostFormatter = GetCostString;
|
||||
|
||||
foreach (var filename in Directory.EnumerateFiles("sokoban", "*.yaml")) {
|
||||
var sokoban = new SokobanSolution(YamlOptions.DeserializeFile<SokobanFile>(filename));
|
||||
this.sokobans.Add(sokoban);
|
||||
this.sokobanLevelList.Items.Add(sokoban.Name);
|
||||
}
|
||||
|
||||
var versions = YamlOptions.DeserializeFile<List<Version>>("items/versions.yaml");
|
||||
defaultVersion = versions[0];
|
||||
foreach (var version in versions) {
|
||||
ToolStripMenuItem toolStripItem = new(version.Name);
|
||||
toolStripItem.Click += (sender, e) => Reset(version);
|
||||
resetToolStripMenuItem.DropDownItems.Add(toolStripItem);
|
||||
versionMap[version.Name] = version;
|
||||
}
|
||||
|
||||
this.LoadSave();
|
||||
}
|
||||
|
||||
private void Reset(Version version) {
|
||||
SaveData.Instance.Reset(version.Name);
|
||||
this.LoadSave();
|
||||
}
|
||||
|
||||
private void LoadSave() {
|
||||
var save = SaveData.Instance;
|
||||
if (!versionMap.TryGetValue(save.Version, out Version version)) {
|
||||
version = defaultVersion;
|
||||
save.Version = version.Name;
|
||||
}
|
||||
|
||||
this.Text = "NethackHelper - " + version.Name;
|
||||
|
||||
intrinsicsBindingSource.DataSource = save.Intrinsics;
|
||||
saveSourceBindingSource.ResetItem(0);
|
||||
|
||||
var scrolls = YamlOptions.DeserializeFile<ItemList>(Path.Join("items", version.Scrolls));
|
||||
this.scrollDisplay.DisplayItemList(scrolls, save.Scrolls);
|
||||
|
||||
var potions = YamlOptions.DeserializeFile<ItemList>(Path.Join("items", version.Potions));
|
||||
this.potionDisplay.DisplayItemList(potions, save.Potions);
|
||||
|
||||
var wands = YamlOptions.DeserializeFile<ItemList>(Path.Join("items", version.Wands));
|
||||
this.wandDisplay.DisplayItemList(wands, save.Wands);
|
||||
|
||||
var rings = YamlOptions.DeserializeFile<ItemList>(Path.Join("items", version.Rings));
|
||||
this.ringDisplay.DisplayItemList(rings, save.Rings);
|
||||
}
|
||||
|
||||
private string GetCostString(int cost) {
|
||||
double buyModifier = (double) (charismaSelector.SelectedValue ?? 1.0);
|
||||
double sellModifier = 0.5;
|
||||
if (suckerBox.Checked) {
|
||||
sellModifier = 0.3333;
|
||||
buyModifier *= 1.3333;
|
||||
}
|
||||
|
||||
if (cost == 0) {
|
||||
return string.Format(
|
||||
"{0} - Buy: {1}/{2}",
|
||||
cost,
|
||||
Math.Round(5 * buyModifier),
|
||||
Math.Round(5 * buyModifier * 1.3333));
|
||||
}
|
||||
|
||||
return string.Format(
|
||||
"{0} - Buy: {1}/{2}, Sell: {3}/{4}",
|
||||
cost,
|
||||
Math.Round(cost * buyModifier),
|
||||
Math.Round(cost * buyModifier * 1.3333),
|
||||
Math.Round(cost * sellModifier),
|
||||
Math.Round(cost * sellModifier * 0.75));
|
||||
}
|
||||
|
||||
private void NextStep() {
|
||||
if (sokobanLevelList.SelectedIndex >= 0) {
|
||||
if (sokobanStepIndex < sokobans[sokobanLevelList.SelectedIndex].States.Count - 1) {
|
||||
sokobanStepIndex++;
|
||||
DisplaySokoban();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void PrevStep() {
|
||||
if (sokobanLevelList.SelectedIndex >= 0) {
|
||||
if (sokobanStepIndex > 0) {
|
||||
sokobanStepIndex--;
|
||||
DisplaySokoban();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void sokobanNext_Click(object sender, EventArgs e) {
|
||||
this.NextStep();
|
||||
}
|
||||
|
||||
private void sokobanPrev_Click(object sender, EventArgs e) {
|
||||
this.PrevStep();
|
||||
}
|
||||
|
||||
private void DisplaySokoban() {
|
||||
if (sokobanLevelList.SelectedIndex >= 0) {
|
||||
Reflection reflection = 0;
|
||||
if (sokobanHorizontal.Checked) {
|
||||
reflection |= Reflection.HORIZONTAL;
|
||||
}
|
||||
if (sokobanVertical.Checked) {
|
||||
reflection |= Reflection.VERTICAL;
|
||||
}
|
||||
sokobanSolution.Text = sokobans[sokobanLevelList.SelectedIndex].States[sokobanStepIndex].GetArrowString(reflection);
|
||||
} else {
|
||||
sokobanSolution.Text = "";
|
||||
}
|
||||
}
|
||||
|
||||
private void sokobanReflection_CheckedChanged(object sender, EventArgs e) {
|
||||
DisplaySokoban();
|
||||
}
|
||||
|
||||
private void sokobanLevelList_SelectedIndexChanged(object sender, EventArgs e) {
|
||||
this.sokobanStepIndex = 0;
|
||||
DisplaySokoban();
|
||||
}
|
||||
|
||||
private void UpdatePrices() {
|
||||
this.scrollDisplay.UpdateCostHeaders();
|
||||
this.potionDisplay.UpdateCostHeaders();
|
||||
this.wandDisplay.UpdateCostHeaders();
|
||||
this.ringDisplay.UpdateCostHeaders();
|
||||
}
|
||||
|
||||
private void charismaSelector_SelectedIndexChanged(object sender, EventArgs e) {
|
||||
this.UpdatePrices();
|
||||
}
|
||||
|
||||
private void suckerBox_CheckedChanged(object sender, EventArgs e) {
|
||||
this.UpdatePrices();
|
||||
}
|
||||
|
||||
private void sokobanLevelList_KeyDown(object sender, KeyEventArgs e) {
|
||||
if (e.KeyCode == Keys.Right) {
|
||||
this.NextStep();
|
||||
e.Handled = true;
|
||||
} else if (e.KeyCode == Keys.Left) {
|
||||
this.PrevStep();
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
|
||||
var save = SaveData.Instance;
|
||||
save.Potions = this.potionDisplay.Export();
|
||||
save.Rings = this.ringDisplay.Export();
|
||||
save.Scrolls = this.scrollDisplay.Export();
|
||||
save.Wands = this.wandDisplay.Export();
|
||||
|
||||
save.Save();
|
||||
}
|
||||
}
|
||||
}
|
||||
299
NethackHelper/MainForm.resx
Normal file
299
NethackHelper/MainForm.resx
Normal file
@@ -0,0 +1,299 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="saveSourceBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>410, 17</value>
|
||||
</metadata>
|
||||
<metadata name="saveSourceBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>410, 17</value>
|
||||
</metadata>
|
||||
<data name="potionDisplay.Columns" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAEROZXRoYWNrSGVscGVyLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1
|
||||
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
|
||||
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
|
||||
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAIAAAAIAAAA
|
||||
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
|
||||
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAA0C
|
||||
BQUAAAAfTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbgIAAAAaPEF0dHJpYnV0ZT5rX19CYWNr
|
||||
aW5nRmllbGQWPFdpZHRoPmtfX0JhY2tpbmdGaWVsZAQAG05ldGhhY2tIZWxwZXIuSXRlbUF0dHJpYnV0
|
||||
ZQQAAAAIBAAAAAX5////G05ldGhhY2tIZWxwZXIuSXRlbUF0dHJpYnV0ZQEAAAAHdmFsdWVfXwAIBAAA
|
||||
AAAAAACQAAAAAQYAAAAFAAAAAfj////5////AwAAAJAAAAAL
|
||||
</value>
|
||||
</data>
|
||||
<data name="scrollDisplay.Columns" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAEROZXRoYWNrSGVscGVyLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1
|
||||
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
|
||||
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
|
||||
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAAmAAAA
|
||||
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
|
||||
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAAkH
|
||||
AAAACgUFAAAAH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4CAAAAGjxBdHRyaWJ1dGU+a19f
|
||||
QmFja2luZ0ZpZWxkFjxXaWR0aD5rX19CYWNraW5nRmllbGQEABtOZXRoYWNrSGVscGVyLkl0ZW1BdHRy
|
||||
aWJ1dGUEAAAACAQAAAAF+P///xtOZXRoYWNrSGVscGVyLkl0ZW1BdHRyaWJ1dGUBAAAAB3ZhbHVlX18A
|
||||
CAQAAAAAAAAAcgAAAAEGAAAABQAAAAH3////+P///wIAAAAoAAAAAQcAAAAFAAAAAfb////4////AwAA
|
||||
AIYAAAAL
|
||||
</value>
|
||||
</data>
|
||||
<data name="ringDisplay.Columns" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAEROZXRoYWNrSGVscGVyLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1
|
||||
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
|
||||
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
|
||||
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAIAAAAIAAAA
|
||||
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
|
||||
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAA0C
|
||||
BQUAAAAfTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbgIAAAAaPEF0dHJpYnV0ZT5rX19CYWNr
|
||||
aW5nRmllbGQWPFdpZHRoPmtfX0JhY2tpbmdGaWVsZAQAG05ldGhhY2tIZWxwZXIuSXRlbUF0dHJpYnV0
|
||||
ZQQAAAAIBAAAAAX5////G05ldGhhY2tIZWxwZXIuSXRlbUF0dHJpYnV0ZQEAAAAHdmFsdWVfXwAIBAAA
|
||||
AAAAAACQAAAAAQYAAAAFAAAAAfj////5////AwAAAJAAAAAL
|
||||
</value>
|
||||
</data>
|
||||
<data name="wandDisplay.Columns" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAEROZXRoYWNrSGVscGVyLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1
|
||||
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
|
||||
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
|
||||
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAIAAAAIAAAA
|
||||
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
|
||||
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAA0C
|
||||
BQUAAAAfTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbgIAAAAaPEF0dHJpYnV0ZT5rX19CYWNr
|
||||
aW5nRmllbGQWPFdpZHRoPmtfX0JhY2tpbmdGaWVsZAQAG05ldGhhY2tIZWxwZXIuSXRlbUF0dHJpYnV0
|
||||
ZQQAAAAIBAAAAAX5////G05ldGhhY2tIZWxwZXIuSXRlbUF0dHJpYnV0ZQEAAAAHdmFsdWVfXwAIBAAA
|
||||
AAAAAACQAAAAAQYAAAAFAAAAAfj////5////AwAAAJAAAAAL
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="charismaSourceBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="intrinsicsBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>232, 17</value>
|
||||
</metadata>
|
||||
<metadata name="intrinsicsBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>232, 17</value>
|
||||
</metadata>
|
||||
<metadata name="mainMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>600, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAEAQEAAAAEACAAoFgAAFgAAACgAAABAAAAAgAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAADQ0NABYWFgAcHBwAIiIiACYmJgAqKioALi4uADIyMgA1NTUAODg4AEJCQgBFRUUAR0dHAElJ
|
||||
SQBLS0sAT09PAFFRUQBTU1MAWFhYAF1dXQBgYGAAYmJiAGNjYwBlZWUAZmZmAGhoaABpaWkAampqAGxs
|
||||
bABubm4AcXFxAHJycgBzc3MAdXV1AHZ2dgB3d3cAeXl5AHp6egB/f38AgICAAIODgwCFhYUAh4eHAImJ
|
||||
iQCLi4sAjo6OAJGRkQCSkpIAk5OTAJSUlACWlpYAl5eXAJmZmQCbm5sAnJycAJ2dnQCenp4An5+fAKGh
|
||||
oQCioqIAo6OjAKWlpQCmpqYAp6enAKioqACpqakAqqqqAK2trQCurq4Ar6+vALCwsACysrIAtLS0ALW1
|
||||
tQC2trYAt7e3ALi4uAC5ubkAurq6ALu7uwC8vLwAvb29AL+/vwDAwMAAwsLCAMTExADFxcUAx8fHAMjI
|
||||
yADJyckAysrKAMzMzADNzc0Az8/PANDQ0ADR0dEA0tLSANPT0wDU1NQA1dXVANbW1gDX19cA2NjYANnZ
|
||||
2QDa2toA29vbANzc3ADd3d0A3t7eAN/f3wDg4OAA4eHhAOLi4gDj4+MA5OTkAOXl5QDm5uYA5+fnAOnp
|
||||
6QDq6uoA6+vrAOzs7ADt7e0A7u7uAO/v7wDx8fEA8vLyAPPz8wD09PQA9fX1APb29gD39/cA+Pj4APn5
|
||||
+QD6+voA+/v7APz8/AD9/f0A/v7+AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAdUnGCiomDeGNGGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAABFhjIyMjIyMjIyMjIx1PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAB9+jIyMjIh7c3mEjIyMjH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAABOAjIyMdjYDAAAAABY+a4t+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAABrjIyMXQYAAAAAAAAAAAAYTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyjIyMZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc4yMgQ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIyMjEkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFGMjIYMAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzjIxlAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHioyMRAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJoyMjB8AAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADuMjIsFAAAAJWyH
|
||||
g2UbAAAjbYOEcDUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOjIx+AAAA
|
||||
H4eMjIyMghoQhYyMjIyMVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWoyM
|
||||
bwAAAGeMjIyMjIxzRoyMjIyMjIxDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AGOMjGYAAAqJjIyEOluMjH2MjGc1b4yMhA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAABrjIxgAAAojIyMVgAAZoyMjIwdAAuBjIxKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAb4yMXAAAN4yMjEIAABeKjIyMCwAAT4yMeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAHGMjFgAAECMjIw3AAAAZoyMjBIAAB6MjIwTAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAABujIxbAABAjIyMNQAAAFKMjIwhAAAAg4yMNgAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAaoyMXgAAOYyMjDoAAAA7jIyMMQAAAG6MjFMAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGaMjGMAADKMjIxCAAAAJ4yMjEcAAABajIxlAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABejIxuAAAkjIyMUgAAAA2MjIxaAAAAS4yMdgAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU4yMegAACIuMjGAAAAAAg4yMbQAAAECMjIAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAESMjIUAAAB8jIx6AAAAAHOMjH4AAAA0
|
||||
jIyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzjIyMEAAAXoyMjA4AAABfjIyM
|
||||
CAAAL4yMjAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG4yMjCwAADOMjIw9AAAA
|
||||
TYyMjCIAAC2MjIwJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGGjIxFAAAIh4yM
|
||||
bwAAADeMjIw2AAArjIyMCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcoyMYQAA
|
||||
AFuMjIwwAAAkjIyMTAAALoyMjAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWM
|
||||
jH8AAAAVh4yMhkY2aYyMjF4AADOMjIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAujIyMGQAAAEOMjIyMjIyMjIxzAAA4jIyGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAACIiMjEgAAAAAS4uMjIyMjIyMgwAARoyMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAABnjIxzAAAAAAAoZIGIe15LaYQOAFWMjHIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAANYyMjB0AAAAAAAAAAAAAAAABAgBijIxfAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAaDjIxYAAAAAAAAAAAAAAAAAAAAe4yMTwAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUYyMhhAAAAAAAAAAAAAAAAAADYyMjDIAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+GjIxYAAAAAAAAAAAAAAAAADaMjIsOAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUIyMiiMAAAAAAAAAAAAAAABpjIxwAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd7jIx5CAAAAAAAAAAAAAAcioyMPwAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKoqMjGcEAAAAAAAAAAAAboyM
|
||||
gAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDjIyMaA4AAAAAAAAB
|
||||
WYyMjD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFKMjIx/QQkA
|
||||
AAAla4yMjGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQoqM
|
||||
jIyIeXSBjIyMjG4KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAicIyMjIyMjIyMiVQFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAApWXeDioNxTxQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
35
NethackHelper/NethackHelper.csproj
Normal file
35
NethackHelper/NethackHelper.csproj
Normal file
@@ -0,0 +1,35 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net9-windows</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ImplicitUsings>disable</ImplicitUsings>
|
||||
<ApplicationIcon>icon.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="icon.ico" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="YamlDotNet" Version="15.1.6" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="items\*.yaml">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="sokoban\*.yaml">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Update="Form1.resx">
|
||||
<Generator></Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
17
NethackHelper/Program.cs
Normal file
17
NethackHelper/Program.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace NethackHelper {
|
||||
internal static class Program {
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main() {
|
||||
// To customize application configuration such as set high DPI settings or default font,
|
||||
// see https://aka.ms/applicationconfiguration.
|
||||
ApplicationConfiguration.Initialize();
|
||||
Application.Run(new MainForm());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
This file is automatically generated by Visual Studio. It is
|
||||
used to store generic object data source configuration information.
|
||||
Renaming the file extension or editing the content of this file may
|
||||
cause the file to be unrecognizable by the program.
|
||||
-->
|
||||
<GenericObjectDataSource DisplayName="CharismaSource" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
|
||||
<TypeInfo>NethackHelper.CharismaSource, NethackHelper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
|
||||
</GenericObjectDataSource>
|
||||
10
NethackHelper/Properties/DataSources/Intrinsics.datasource
Normal file
10
NethackHelper/Properties/DataSources/Intrinsics.datasource
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
This file is automatically generated by Visual Studio. It is
|
||||
used to store generic object data source configuration information.
|
||||
Renaming the file extension or editing the content of this file may
|
||||
cause the file to be unrecognizable by the program.
|
||||
-->
|
||||
<GenericObjectDataSource DisplayName="Intrinsics" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
|
||||
<TypeInfo>NethackHelper.Intrinsics, NethackHelper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
|
||||
</GenericObjectDataSource>
|
||||
10
NethackHelper/Properties/DataSources/SaveSource.datasource
Normal file
10
NethackHelper/Properties/DataSources/SaveSource.datasource
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
This file is automatically generated by Visual Studio. It is
|
||||
used to store generic object data source configuration information.
|
||||
Renaming the file extension or editing the content of this file may
|
||||
cause the file to be unrecognizable by the program.
|
||||
-->
|
||||
<GenericObjectDataSource DisplayName="SaveSource" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
|
||||
<TypeInfo>NethackHelper.SaveSource, NethackHelper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
|
||||
</GenericObjectDataSource>
|
||||
9
NethackHelper/Reflection.cs
Normal file
9
NethackHelper/Reflection.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
using System;
|
||||
|
||||
namespace NethackHelper {
|
||||
[Flags]
|
||||
internal enum Reflection {
|
||||
HORIZONTAL = 0x1,
|
||||
VERTICAL = 0x2,
|
||||
}
|
||||
}
|
||||
149
NethackHelper/SaveData.cs
Normal file
149
NethackHelper/SaveData.cs
Normal file
@@ -0,0 +1,149 @@
|
||||
namespace NethackHelper {
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
|
||||
public class SaveData {
|
||||
private const string SAVE_NAME = "savedata.yaml";
|
||||
|
||||
private static SaveData? _instance;
|
||||
|
||||
public static SaveData Instance {
|
||||
get {
|
||||
_instance ??= new();
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
private SaveData() {
|
||||
var fileName = Path.Combine(Application.UserAppDataPath, SAVE_NAME);
|
||||
var save = YamlOptions.DeserializeFileOrDefault<SaveFile>(fileName);
|
||||
|
||||
if (save != null) {
|
||||
this.Version = save.Version;
|
||||
this.CharismaClass = save.CharismaClass;
|
||||
this.Sucker = save.Sucker;
|
||||
this.Intrinsics = save.Intrinsics;
|
||||
if (save.Potions != null && save.Potions.Count > 0) {
|
||||
this.Potions = new(save.Potions);
|
||||
}
|
||||
if (save.Rings != null && save.Rings.Count > 0) {
|
||||
this.Rings = new(save.Rings);
|
||||
}
|
||||
if (save.Scrolls != null && save.Scrolls.Count > 0) {
|
||||
this.Scrolls = new(save.Scrolls);
|
||||
}
|
||||
if (save.Wands != null && save.Wands.Count > 0) {
|
||||
this.Wands = new(save.Wands);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Save() {
|
||||
var fileName = Path.Combine(Application.UserAppDataPath, SAVE_NAME);
|
||||
|
||||
var save = new SaveFile() {
|
||||
Version = this.Version,
|
||||
CharismaClass = this.CharismaClass,
|
||||
Sucker = this.Sucker,
|
||||
Intrinsics = this.Intrinsics,
|
||||
Potions = this.Potions?.Export() ?? [],
|
||||
Rings = this.Rings?.Export() ?? [],
|
||||
Scrolls = this.Scrolls?.Export() ?? [],
|
||||
Wands = this.Wands?.Export() ?? [],
|
||||
};
|
||||
|
||||
YamlOptions.SerializeToFile(fileName, save);
|
||||
}
|
||||
|
||||
public void Reset(string version) {
|
||||
this.Version = version;
|
||||
this.CharismaClass = CharismaClass.DefaultClass;
|
||||
this.Sucker = false;
|
||||
this.Potions = null;
|
||||
this.Rings = null;
|
||||
this.Scrolls = null;
|
||||
this.Wands = null;
|
||||
this.Intrinsics = 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 IdentificationRecord? Potions { get; set; }
|
||||
public IdentificationRecord? Rings { get; set; }
|
||||
public IdentificationRecord? Scrolls { get; set; }
|
||||
public IdentificationRecord? Wands { get; set; }
|
||||
}
|
||||
|
||||
public struct ItemRecord {
|
||||
public string Name { get; set; }
|
||||
public string? Appearance { get; set; }
|
||||
}
|
||||
|
||||
public class IdentificationRecord {
|
||||
private readonly Dictionary<string, ItemRecord> identifications = new();
|
||||
|
||||
public IdentificationRecord(List<ItemRecord> records) {
|
||||
this.identifications = records.ToDictionary(record => record.Name);
|
||||
}
|
||||
|
||||
public bool HasIdentified(string name) {
|
||||
return identifications.ContainsKey(name);
|
||||
}
|
||||
|
||||
public bool TryGetValue(string name, out ItemRecord record) {
|
||||
return identifications.TryGetValue(name, out record);
|
||||
}
|
||||
|
||||
public List<ItemRecord> Export() {
|
||||
return identifications.Values.ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public class SaveFile {
|
||||
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 List<ItemRecord> Potions { get; set; } = new();
|
||||
public List<ItemRecord> Rings { get; set; } = new();
|
||||
public List<ItemRecord> Scrolls { get; set; } = new();
|
||||
public List<ItemRecord> Wands { get; set; } = new();
|
||||
}
|
||||
|
||||
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 class IntrinsicsSource : BindingSource {
|
||||
public IntrinsicsSource() {
|
||||
this.DataSource = SaveData.Instance.Intrinsics;
|
||||
}
|
||||
}
|
||||
|
||||
public class SaveSource : BindingSource {
|
||||
public SaveSource() {
|
||||
this.DataSource = SaveData.Instance;
|
||||
}
|
||||
}
|
||||
}
|
||||
9
NethackHelper/SokobanFile.cs
Normal file
9
NethackHelper/SokobanFile.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NethackHelper {
|
||||
internal class SokobanFile {
|
||||
public string Name { get; set; } = "";
|
||||
public string Map { get; set; } = "";
|
||||
public List<string> Solution { get; set; } = new();
|
||||
}
|
||||
}
|
||||
196
NethackHelper/SokobanSolution.cs
Normal file
196
NethackHelper/SokobanSolution.cs
Normal file
@@ -0,0 +1,196 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace NethackHelper {
|
||||
internal class SokobanSolution {
|
||||
public string Name { get; }
|
||||
public List<SokobanState> States { get; }
|
||||
|
||||
public SokobanSolution(SokobanFile file) {
|
||||
Name = file.Name;
|
||||
States = new();
|
||||
SokobanState current = new(file.Map);
|
||||
States.Add(current);
|
||||
foreach (string step in file.Solution) {
|
||||
current = new SokobanState(current, step);
|
||||
States.Add(current);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal class SokobanState {
|
||||
private static readonly Dictionary<char, char> horizSubstitute = new() {
|
||||
['←'] = '→',
|
||||
['→'] = '←',
|
||||
['┌'] = '┐',
|
||||
['┐'] = '┌',
|
||||
['└'] = '┘',
|
||||
['┘'] = '└',
|
||||
['├'] = '┤',
|
||||
['┤'] = '├',
|
||||
};
|
||||
private static readonly Dictionary<char, char> vertSubstitute = new() {
|
||||
['↑'] = '↓',
|
||||
['↓'] = '↑',
|
||||
['┌'] = '└',
|
||||
['┐'] = '┘',
|
||||
['└'] = '┌',
|
||||
['┘'] = '┐',
|
||||
['┬'] = '┴',
|
||||
['┴'] = '┬',
|
||||
};
|
||||
|
||||
private char[,] Start { get; }
|
||||
private char[,] Arrows { get; }
|
||||
private char[,] End { get; }
|
||||
|
||||
public SokobanState(string map) {
|
||||
List<string> lines = new();
|
||||
int maxLen = 0;
|
||||
|
||||
using (StringReader reader = new(map)) {
|
||||
string? line;
|
||||
while ((line = reader.ReadLine()) is not null) {
|
||||
lines.Add(line);
|
||||
maxLen = Math.Max(maxLen, line.Length);
|
||||
}
|
||||
}
|
||||
|
||||
Start = new char[lines.Count, maxLen];
|
||||
for (int y = 0; y < lines.Count; y++) {
|
||||
for (int x = 0; x < lines[y].Length; x++) {
|
||||
Start[y, x] = lines[y][x];
|
||||
}
|
||||
for (int x = lines[y].Length; x < maxLen; x++) {
|
||||
Start[y, x] = ' ';
|
||||
}
|
||||
}
|
||||
|
||||
Arrows = Start;
|
||||
End = Start;
|
||||
}
|
||||
|
||||
public SokobanState(SokobanState prior, string step) {
|
||||
Start = prior.End;
|
||||
Arrows = (char[,]) Start.Clone();
|
||||
End = (char[,]) Start.Clone();
|
||||
|
||||
int height = Start.GetLength(0);
|
||||
int width = Start.GetLength(1);
|
||||
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
|
||||
char boulder = step[0];
|
||||
for (int i = 0; i < height; i++) {
|
||||
for (int j = 0; j < width; j++) {
|
||||
if (Start[i, j] == boulder) {
|
||||
x = j;
|
||||
y = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (char c in step[1..]) {
|
||||
switch (c) {
|
||||
case ' ':
|
||||
continue;
|
||||
case 'u':
|
||||
if (y == 0) { throw new SokobanError(); }
|
||||
SetEnd(y - 1, x, boulder);
|
||||
SetEmpty(y, x);
|
||||
Arrows[y, x] = '↑';
|
||||
y--;
|
||||
break;
|
||||
case 'd':
|
||||
if (y >= height - 1) { throw new SokobanError(); }
|
||||
SetEnd(y + 1, x, boulder);
|
||||
SetEmpty(y, x);
|
||||
Arrows[y, x] = '↓';
|
||||
y++;
|
||||
break;
|
||||
case 'l':
|
||||
if (x == 0) { throw new SokobanError(); }
|
||||
SetEnd(y, x - 1, boulder);
|
||||
SetEmpty(y, x);
|
||||
Arrows[y, x] = '←';
|
||||
x--;
|
||||
break;
|
||||
case 'r':
|
||||
if (x >= width - 1) { throw new SokobanError(); }
|
||||
SetEnd(y, x + 1, boulder);
|
||||
SetEmpty(y, x);
|
||||
Arrows[y, x] = '→';
|
||||
x++;
|
||||
break;
|
||||
default:
|
||||
throw new SokobanError();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SetEmpty(int y, int x) {
|
||||
switch (Start[y, x]) {
|
||||
case '>':
|
||||
End[y, x] = '>';
|
||||
break;
|
||||
default:
|
||||
End[y, x] = '.';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void SetEnd(int y, int x, char boulder) {
|
||||
switch (Start[y, x]) {
|
||||
case '.':
|
||||
case '>':
|
||||
End[y, x] = boulder;
|
||||
Arrows[y, x] = boulder;
|
||||
break;
|
||||
case '^':
|
||||
End[y, x] = '.';
|
||||
Arrows[y, x] = '*';
|
||||
break;
|
||||
default:
|
||||
throw new SokobanError();
|
||||
}
|
||||
}
|
||||
|
||||
public string GetArrowString(Reflection reflection) {
|
||||
return GetString(Arrows, reflection);
|
||||
}
|
||||
|
||||
public string GetEndString(Reflection reflection) {
|
||||
return GetString(End, reflection);
|
||||
}
|
||||
|
||||
private static string GetString(char[,] map, Reflection reflection) {
|
||||
StringBuilder sb = new();
|
||||
int height = map.GetLength(0);
|
||||
int width = map.GetLength(1);
|
||||
char c;
|
||||
|
||||
for (int i = 0; i < height; i++) {
|
||||
for (int j = 0; j < width; j++) {
|
||||
int mappedI = reflection.HasFlag(Reflection.VERTICAL) ? height - 1 - i : i;
|
||||
int mappedJ = reflection.HasFlag(Reflection.HORIZONTAL) ? width - 1 - j : j;
|
||||
c = map[mappedI, mappedJ];
|
||||
if (reflection.HasFlag(Reflection.HORIZONTAL)) {
|
||||
c = horizSubstitute.GetValueOrDefault(c, c);
|
||||
}
|
||||
if (reflection.HasFlag(Reflection.VERTICAL)) {
|
||||
c = vertSubstitute.GetValueOrDefault(c, c);
|
||||
}
|
||||
sb.Append(c);
|
||||
}
|
||||
sb.AppendLine();
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public class SokobanError : Exception { }
|
||||
}
|
||||
9
NethackHelper/Versions.cs
Normal file
9
NethackHelper/Versions.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
namespace NethackHelper {
|
||||
internal struct Version {
|
||||
public string Name { get; set; }
|
||||
public string Scrolls { get; set; }
|
||||
public string Potions { get; set; }
|
||||
public string Wands { get; set; }
|
||||
public string Rings { get; set; }
|
||||
}
|
||||
}
|
||||
28
NethackHelper/YamlOptions.cs
Normal file
28
NethackHelper/YamlOptions.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
namespace NethackHelper {
|
||||
using System.IO;
|
||||
using YamlDotNet.Serialization;
|
||||
using YamlDotNet.Serialization.NamingConventions;
|
||||
|
||||
internal class YamlOptions {
|
||||
private static readonly IDeserializer deserializer = new DeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build();
|
||||
private static readonly ISerializer serializer = new SerializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build();
|
||||
|
||||
public static T DeserializeFile<T>(string filename) {
|
||||
using var reader = new StreamReader(filename);
|
||||
return deserializer.Deserialize<T>(reader);
|
||||
}
|
||||
|
||||
public static T? DeserializeFileOrDefault<T>(string filename) {
|
||||
if (File.Exists(filename)) {
|
||||
using var reader = new StreamReader(filename);
|
||||
return deserializer.Deserialize<T>(reader);
|
||||
}
|
||||
return default;
|
||||
}
|
||||
|
||||
public static void SerializeToFile<T>(string filename, T value) {
|
||||
using var writer = new StreamWriter(filename);
|
||||
serializer.Serialize(writer, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
NethackHelper/icon.ico
Normal file
BIN
NethackHelper/icon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.6 KiB |
57
NethackHelper/items/potions-36.yaml
Normal file
57
NethackHelper/items/potions-36.yaml
Normal file
@@ -0,0 +1,57 @@
|
||||
items:
|
||||
- name: Water
|
||||
cost: 0
|
||||
appearance: clear
|
||||
- name: Booze
|
||||
cost: 50
|
||||
- name: Fruit Juice
|
||||
cost: 50
|
||||
- name: See Invisible
|
||||
cost: 50
|
||||
- name: Sickness
|
||||
cost: 50
|
||||
- name: Confusion
|
||||
cost: 100
|
||||
- name: Extra Healing
|
||||
cost: 100
|
||||
- name: Hallucination
|
||||
cost: 100
|
||||
- name: Healing
|
||||
cost: 100
|
||||
- name: Restore Ability
|
||||
cost: 100
|
||||
- name: Sleeping
|
||||
cost: 100
|
||||
- name: (Un)Holy Water
|
||||
cost: 100
|
||||
appearance: clear
|
||||
- name: Blindness
|
||||
cost: 150
|
||||
- name: Gain Energy
|
||||
cost: 150
|
||||
- name: Invisibility
|
||||
cost: 150
|
||||
- name: Monster Detection
|
||||
cost: 150
|
||||
- name: Object Detection
|
||||
cost: 150
|
||||
- name: Enlightenment
|
||||
cost: 200
|
||||
- name: Full Healing
|
||||
cost: 200
|
||||
- name: Levitation
|
||||
cost: 200
|
||||
- name: Polymorph
|
||||
cost: 200
|
||||
- name: Speed
|
||||
cost: 200
|
||||
- name: Acid
|
||||
cost: 250
|
||||
- name: Oil
|
||||
cost: 250
|
||||
- name: Gain Ability
|
||||
cost: 300
|
||||
- name: Gain Level
|
||||
cost: 300
|
||||
- name: Paralysis
|
||||
cost: 300
|
||||
57
NethackHelper/items/potions-37.yaml
Normal file
57
NethackHelper/items/potions-37.yaml
Normal file
@@ -0,0 +1,57 @@
|
||||
items:
|
||||
- name: Water
|
||||
cost: 0
|
||||
appearance: clear
|
||||
- name: Healing
|
||||
cost: 20
|
||||
- name: Booze
|
||||
cost: 50
|
||||
- name: Fruit Juice
|
||||
cost: 50
|
||||
- name: See Invisible
|
||||
cost: 50
|
||||
- name: Sickness
|
||||
cost: 50
|
||||
- name: Confusion
|
||||
cost: 100
|
||||
- name: Extra Healing
|
||||
cost: 100
|
||||
- name: Hallucination
|
||||
cost: 100
|
||||
- name: Restore Ability
|
||||
cost: 100
|
||||
- name: Sleeping
|
||||
cost: 100
|
||||
- name: (Un)Holy Water
|
||||
cost: 100
|
||||
appearance: clear
|
||||
- name: Blindness
|
||||
cost: 150
|
||||
- name: Gain Energy
|
||||
cost: 150
|
||||
- name: Invisibility
|
||||
cost: 150
|
||||
- name: Monster Detection
|
||||
cost: 150
|
||||
- name: Object Detection
|
||||
cost: 150
|
||||
- name: Enlightenment
|
||||
cost: 200
|
||||
- name: Full Healing
|
||||
cost: 200
|
||||
- name: Levitation
|
||||
cost: 200
|
||||
- name: Polymorph
|
||||
cost: 200
|
||||
- name: Speed
|
||||
cost: 200
|
||||
- name: Acid
|
||||
cost: 250
|
||||
- name: Oil
|
||||
cost: 250
|
||||
- name: Gain Ability
|
||||
cost: 300
|
||||
- name: Gain Level
|
||||
cost: 300
|
||||
- name: Paralysis
|
||||
cost: 300
|
||||
57
NethackHelper/items/rings.yaml
Normal file
57
NethackHelper/items/rings.yaml
Normal file
@@ -0,0 +1,57 @@
|
||||
items:
|
||||
- name: Adornment
|
||||
cost: 100
|
||||
- name: Hunger
|
||||
cost: 100
|
||||
- name: Protection
|
||||
cost: 100
|
||||
- name: Protection from Shape Changers
|
||||
cost: 100
|
||||
- name: Stealth
|
||||
cost: 100
|
||||
- name: Sustain Ability
|
||||
cost: 100
|
||||
- name: Warning
|
||||
cost: 100
|
||||
- name: Aggravate Monster
|
||||
cost: 150
|
||||
- name: Cold Resistance
|
||||
cost: 150
|
||||
- name: Gain Constitution
|
||||
cost: 150
|
||||
- name: Gain Strength
|
||||
cost: 150
|
||||
- name: Increase Accuracy
|
||||
cost: 150
|
||||
- name: Increase Damage
|
||||
cost: 150
|
||||
- name: Invisibility
|
||||
cost: 150
|
||||
- name: Poison Resistance
|
||||
cost: 150
|
||||
- name: See Invisible
|
||||
cost: 150
|
||||
- name: Shock Resistance
|
||||
cost: 150
|
||||
- name: Fire Resistance
|
||||
cost: 200
|
||||
- name: Free Action
|
||||
cost: 200
|
||||
- name: Levitation
|
||||
cost: 200
|
||||
- name: Regeneration
|
||||
cost: 200
|
||||
- name: Searching
|
||||
cost: 200
|
||||
- name: Slow Digestion
|
||||
cost: 200
|
||||
- name: Teleportation
|
||||
cost: 200
|
||||
- name: Conflict
|
||||
cost: 300
|
||||
- name: Polymorph
|
||||
cost: 300
|
||||
- name: Polymorph Control
|
||||
cost: 300
|
||||
- name: Teleport Control
|
||||
cost: 300
|
||||
68
NethackHelper/items/scrolls.yaml
Normal file
68
NethackHelper/items/scrolls.yaml
Normal file
@@ -0,0 +1,68 @@
|
||||
items:
|
||||
- name: Identify
|
||||
ink: 14
|
||||
cost: 20
|
||||
- name: Light
|
||||
ink: 8
|
||||
cost: 50
|
||||
- name: Enchant Weapon
|
||||
ink: 16
|
||||
cost: 60
|
||||
- name: Blank Paper
|
||||
ink: 0
|
||||
cost: 60
|
||||
appearance: unlabeled
|
||||
- name: Enchant Armor
|
||||
ink: 16
|
||||
cost: 80
|
||||
- name: Remove Curse
|
||||
ink: 16
|
||||
cost: 80
|
||||
- name: Confuse Monster
|
||||
ink: 12
|
||||
cost: 100
|
||||
- name: Destroy Armor
|
||||
ink: 10
|
||||
cost: 100
|
||||
- name: Fire
|
||||
ink: 8
|
||||
cost: 100
|
||||
- name: Food Detection
|
||||
ink: 8
|
||||
cost: 100
|
||||
- name: Gold Detection
|
||||
ink: 8
|
||||
cost: 100
|
||||
- name: Magic Mapping
|
||||
ink: 8
|
||||
cost: 100
|
||||
- name: Scare Monster
|
||||
ink: 20
|
||||
cost: 100
|
||||
- name: Teleportation
|
||||
ink: 20
|
||||
cost: 100
|
||||
- name: Amnesia
|
||||
ink: 8
|
||||
cost: 200
|
||||
- name: Create Monster
|
||||
ink: 10
|
||||
cost: 200
|
||||
- name: Earth
|
||||
ink: 8
|
||||
cost: 200
|
||||
- name: Taming
|
||||
ink: 20
|
||||
cost: 200
|
||||
- name: Charging
|
||||
ink: 16
|
||||
cost: 300
|
||||
- name: Genocide
|
||||
ink: 30
|
||||
cost: 300
|
||||
- name: Punishment
|
||||
ink: 10
|
||||
cost: 300
|
||||
- name: Stinking Cloud
|
||||
ink: 20
|
||||
cost: 300
|
||||
10
NethackHelper/items/versions.yaml
Normal file
10
NethackHelper/items/versions.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
- name: Vanilla 3.6
|
||||
scrolls: scrolls.yaml
|
||||
rings: rings.yaml
|
||||
potions: potions-36.yaml
|
||||
wands: wands.yaml
|
||||
- name: Vanilla 3.7
|
||||
scrolls: scrolls.yaml
|
||||
rings: rings.yaml
|
||||
potions: potions-37.yaml
|
||||
wands: wands.yaml
|
||||
49
NethackHelper/items/wands.yaml
Normal file
49
NethackHelper/items/wands.yaml
Normal file
@@ -0,0 +1,49 @@
|
||||
items:
|
||||
- name: Light
|
||||
cost: 100
|
||||
- name: Nothing
|
||||
cost: 100
|
||||
- name: Digging
|
||||
cost: 150
|
||||
- name: Enlightenment
|
||||
cost: 150
|
||||
- name: Locking
|
||||
cost: 150
|
||||
- name: Magic Missile
|
||||
cost: 150
|
||||
- name: Make Invisible
|
||||
cost: 150
|
||||
- name: Opening
|
||||
cost: 150
|
||||
- name: Probing
|
||||
cost: 150
|
||||
- name: Secret Door Detection
|
||||
cost: 150
|
||||
- name: Slow Monster
|
||||
cost: 150
|
||||
- name: Speed Monster
|
||||
cost: 150
|
||||
- name: Striking
|
||||
cost: 150
|
||||
- name: Undead Turning
|
||||
cost: 150
|
||||
- name: Cold
|
||||
cost: 175
|
||||
- name: Fire
|
||||
cost: 175
|
||||
- name: Lightning
|
||||
cost: 175
|
||||
- name: Sleep
|
||||
cost: 175
|
||||
- name: Cancellation
|
||||
cost: 200
|
||||
- name: Create Monster
|
||||
cost: 200
|
||||
- name: Polymorph
|
||||
cost: 200
|
||||
- name: Teleportation
|
||||
cost: 200
|
||||
- name: Death
|
||||
cost: 500
|
||||
- name: Wishing
|
||||
cost: 500
|
||||
30
NethackHelper/sokoban/1a.yaml
Normal file
30
NethackHelper/sokoban/1a.yaml
Normal file
@@ -0,0 +1,30 @@
|
||||
name: Sokoban Level 1a
|
||||
map: |
|
||||
┌─┬────┐ ┌────┐
|
||||
│<│>...└─┘....│
|
||||
│^├┐.AB....C..│
|
||||
│^││..DE│.F.G.│
|
||||
│^││....│.....│
|
||||
│^│└───┬┘H────┤
|
||||
│^│ │......│
|
||||
│^└────┘......│
|
||||
│..^^^^IJKL...│
|
||||
│??┌───┐......│
|
||||
└──┘ └──────┘
|
||||
solution:
|
||||
- A d
|
||||
- B rrrr
|
||||
- H dd
|
||||
- J u
|
||||
- I l
|
||||
- L u
|
||||
- K llll
|
||||
- L dlll lll
|
||||
- H dlll lll
|
||||
- J dlll llll u
|
||||
- F r
|
||||
- B ddld dddl llll lllu u
|
||||
- G dlll dddd llll llll uuu
|
||||
- F lldd dddl llll lllu uuu
|
||||
- C ddll dddd llll llll uuuu u
|
||||
- E urrr ddld dddl llll lllu uuuu u
|
||||
49
NethackHelper/sokoban/2a.yaml
Normal file
49
NethackHelper/sokoban/2a.yaml
Normal file
@@ -0,0 +1,49 @@
|
||||
name: Sokoban Level 2a
|
||||
map: |
|
||||
┌──┐ ┌─────────┐
|
||||
┌┘.>└──────┐ │.........│
|
||||
│..........│ │.........│
|
||||
│.A┌───┐B─.│ │.........│
|
||||
│..│...│.C.│ │....<....│
|
||||
│.D.E....F─┤ │.........│
|
||||
│.G..H..│..│ │.........│
|
||||
│.────I.└┐.│ │.........│
|
||||
│..J...K.│.└┐ │.........│
|
||||
│.──┐L─...M.└──┴────────+┤
|
||||
│...│..N─.O.^^^^^^^^^^^^.│
|
||||
│..P......┌──────────────┘
|
||||
└───┐..│..│
|
||||
└──┴──┘
|
||||
solution:
|
||||
- P rrru
|
||||
- O rr
|
||||
- N dlll ll
|
||||
- B dd
|
||||
- C l
|
||||
- M l
|
||||
- F u
|
||||
- B ll
|
||||
- K d
|
||||
- M rdrr r
|
||||
- N rrrr rrru urdr rrr
|
||||
- K ddll lll
|
||||
- K rrrr rrru urdr rrrr
|
||||
- L ddll l
|
||||
- L rrrr rrru urdr rrrr r
|
||||
- P rdrr uurd rrrr rrr
|
||||
- I drdd drru urdr rrrr rrr
|
||||
- C d
|
||||
- F l
|
||||
- A u
|
||||
- G r
|
||||
- D u
|
||||
- E r
|
||||
- B ddd
|
||||
- D d
|
||||
- A d
|
||||
- B rddd rruu rdrr rrrr rrr
|
||||
- E rddd rddd rruu rdrr rrrr rrrr
|
||||
- C lll
|
||||
- C rddd rddd rruu rdrr rrrr rrrr r
|
||||
- H rrdd dddr ruur drrr rrrr rrrr r
|
||||
- J rrrr dddr ruur drrr rrrr rrrr rr
|
||||
35
NethackHelper/sokoban/2b.yaml
Normal file
35
NethackHelper/sokoban/2b.yaml
Normal file
@@ -0,0 +1,35 @@
|
||||
name: Sokoban Level 2b
|
||||
map: |
|
||||
┌────┬────┐ ┌─────────┐
|
||||
│....│....└─┐ │.........│
|
||||
│..AB│CD...>│ │.........│
|
||||
│.....E...┌─┘ │.........│
|
||||
│....│....│ │....<....│
|
||||
├─.──┼────┴┐ │.........│
|
||||
│..F.│.....│ │.........│
|
||||
│.GH.│I.J.K│ │.........│
|
||||
│..L.....M.│ │.........│
|
||||
│.NOP│Q..R.└──────┴────────+┤
|
||||
│....│..S.T.^^^^^^^^^^^^^^^.│
|
||||
└────┴──────────────────────┘
|
||||
solution:
|
||||
- E lll
|
||||
- L rrrr r
|
||||
- R r
|
||||
- T rr
|
||||
- S rrrr r
|
||||
- M ddrr rrr
|
||||
- R drrr rr
|
||||
- K dddr rrrr r
|
||||
- L rrdd rrrr rrr
|
||||
- J dddr rrrr rrrr r
|
||||
- O urrr rrrr ddrr rrrr rrr
|
||||
- P urrr rrrd drrr rrrr rrr
|
||||
- G drrr rrrr rddr rrrr rrrr rr
|
||||
- H ldrr rrrr rrdd rrrr rrrr rrrr
|
||||
- N urrr rrrr rddr rrrr rrrr rrrr
|
||||
- Q ulll
|
||||
- Q rrrr rrrd drrr rrrr rrrr rrr
|
||||
- I dlll
|
||||
- I rrrr rrrd drrr rrrr rrrr rrrr
|
||||
- E lddd ddrr rrrr rddr rrrr rrrr rrrr rrrr
|
||||
33
NethackHelper/sokoban/3a.yaml
Normal file
33
NethackHelper/sokoban/3a.yaml
Normal file
@@ -0,0 +1,33 @@
|
||||
name: Sokoban Level 3a
|
||||
map: |
|
||||
┌─┬────┐
|
||||
┌─┘.│....│
|
||||
│...A....├─┬───────┐
|
||||
│.─.BC─DE│.│.......│
|
||||
│.FG─......│.......│
|
||||
│.─..H.│...│.......│
|
||||
│....─I└─J─┤...<...│
|
||||
│..KL..M...│.......│
|
||||
│.──...│...│.......│
|
||||
│....─N├───┤.......│
|
||||
└─┐..O.└───┴──────+┤
|
||||
│..P>^^^^^^^^^^^.│
|
||||
└────────────────┘
|
||||
solution:
|
||||
- O ll
|
||||
- P rr
|
||||
- N ddrr
|
||||
- L ddd
|
||||
- O u
|
||||
- L rrdr rr
|
||||
- O rddr rrrr r
|
||||
- K rddd drrr rrrr
|
||||
- G dddr dddd rrrr rrrr
|
||||
- F rddd rddd drrr rrrr rr
|
||||
- M rr
|
||||
- M llll lddd drrr rrrr rrr
|
||||
- J uu
|
||||
- I dddd drrr rrrr rr
|
||||
- H rddd dddr rrrr rrrr r
|
||||
- A rr
|
||||
- C ddrd dddd drrr rrrr rrrr
|
||||
32
NethackHelper/sokoban/3b.yaml
Normal file
32
NethackHelper/sokoban/3b.yaml
Normal file
@@ -0,0 +1,32 @@
|
||||
name: Sokoban Level 3b
|
||||
map: |
|
||||
┌────────┬───┬─────┐
|
||||
│........│...│.....│
|
||||
│.AB..─CD│.─.│.....│
|
||||
│..│.E.F.│GH.│.....│
|
||||
├─.│..─..│.─.│..<..│
|
||||
│...┌─.......│.....│
|
||||
│...│.I.─...┌┤.....│
|
||||
│.J.│K.│...┌┘│.....│
|
||||
├─L.│..└───┴─┴────+┤
|
||||
│..M....^^^^^^^^^^.│
|
||||
│...│.>┌───────────┘
|
||||
└───┴──┘
|
||||
solution:
|
||||
- M l
|
||||
- M rrrr rr
|
||||
- J r
|
||||
- L drrr rrrr
|
||||
- J ddrr rrrr r
|
||||
- A dddd dddr rrrr rrrr
|
||||
- B lddd dddd rrrr rrrr rr
|
||||
- E u
|
||||
- D dd
|
||||
- F lllu
|
||||
- E d
|
||||
- F lldd dddd drrr rrrr rrrr
|
||||
- E lull dddd dddr rrrr rrrr rrr
|
||||
- C dlll ulld dddd ddrr rrrr rrrr rrr
|
||||
- I dddr rrrr rrrr r
|
||||
- K ddll l
|
||||
- K rrrr rrrr rrrr rrr
|
||||
51
NethackHelper/sokoban/4a.yaml
Normal file
51
NethackHelper/sokoban/4a.yaml
Normal file
@@ -0,0 +1,51 @@
|
||||
name: Sokoban Level 4a
|
||||
map: |
|
||||
┌────────────────────────┐
|
||||
│>......^^^^^^^^^^^^^^^^.│
|
||||
│.......┌──────────────┐.│
|
||||
└┬─────.└────┐ │.│
|
||||
│...........│ │.│
|
||||
│.A.B.C.D.E.│ │.│
|
||||
┌┴──────.────┤ │.│
|
||||
│...F.G..H.I.│ │.│
|
||||
│...J........│ │.│
|
||||
└┬───.──────┬┘ ┌─────┤.│
|
||||
│..K.L.M...│ ┌─┤.....│.│
|
||||
│.....N....│ │.+.....│.│
|
||||
│.O.P...Q.┌┘ ├─┤.....│.│
|
||||
┌┴─────.─┬─┘ │.+.....+.│
|
||||
│..R.....│ ├─┤.....├─┘
|
||||
│........│ │.+.....│
|
||||
│...┌────┘ └─┤.....│
|
||||
└───┘ └─────┘
|
||||
solution:
|
||||
- K l
|
||||
- N rrr
|
||||
- R rrr
|
||||
- P rrdd dlll lur
|
||||
- F ll
|
||||
- J rddd drrd ddll lllu
|
||||
- G ll
|
||||
- H ll
|
||||
- D lddd llld dddr
|
||||
- C rddd llld dd
|
||||
- H ruuu luuu r
|
||||
- G rrrr uuul uuur r
|
||||
- F rrrr rruu uluu urrr
|
||||
- I lllu uulu uurr rr
|
||||
- C uuuu rrru uulu uurr rrr
|
||||
- K rruu urrr uuul uuur rrrr r
|
||||
- L luuu rrru uulu uurr rrrr r
|
||||
- M lllu uurr ruuu luuu rrrr rrrr
|
||||
- N llll luuu urrr uuul uuur rrrr rrrr
|
||||
- R ruuu ullu uurr ruuu luuu rrrr rrrr rr
|
||||
- P rrru uuul luuu rrru uulu uurr rrrr rrrr r
|
||||
- J rrrr ruuu ullu uurr ruuu luuu rrrr rrrr rrrr
|
||||
- D rddd llll lu
|
||||
- D rr rrru uuul luuu rrru uulu uurr rrrr rrrr rrr
|
||||
- B rrrd ddll lddd
|
||||
- B uuuu rrru uulu uurr rrrr rrrr rrrr
|
||||
- A rrrr rddd llld dd
|
||||
- A uu uurr ruuu luuu rrrr rrrr rrrr rrr
|
||||
- E llld ddll lddd
|
||||
- E uuuu rrru uulu uurr rrrr rrrr rrrr rr
|
||||
53
NethackHelper/sokoban/4b.yaml
Normal file
53
NethackHelper/sokoban/4b.yaml
Normal file
@@ -0,0 +1,53 @@
|
||||
name: Sokoban Level 4b
|
||||
map: |
|
||||
┌──────────────────────┐
|
||||
│..^^^^^^^^^^^^^^^^^^..│
|
||||
│..┌─────────────────┐.│
|
||||
┌─┴┐.│ ┌───┐ │.│
|
||||
│..│A└┐ ┌┘...│ │.│
|
||||
│.....├──┤.B..│ │.│
|
||||
│.CD..│..│..E.│ │.│
|
||||
└┐..FG│...HI.┌┘ │.│
|
||||
│J..K...│L..│ ┌─────┤.│
|
||||
│.MN.│..│..O│ ┌─┤.....│.│
|
||||
│.P.Q└──┤.R.│ │.+.....│.│
|
||||
│.......│..┌┘ ├─┤.....│.│
|
||||
└──┐.S..│.┌┘ │.+.....+.│
|
||||
└┬─.─┘.│ ├─┤.....├─┘
|
||||
│.T...│ │.+.....│
|
||||
│>.│..│ └─┤.....│
|
||||
└──┴──┘ └─────┘
|
||||
solution:
|
||||
- T rrru uuu
|
||||
- R u
|
||||
- O uu
|
||||
- I u
|
||||
- H lll
|
||||
- K ll
|
||||
- N d
|
||||
- F u
|
||||
- G u
|
||||
- C u
|
||||
- C d
|
||||
- A uuur
|
||||
- F dd
|
||||
- F uu uuuu urr
|
||||
- C u
|
||||
- D ruuu uurr r
|
||||
- C rruu uurr rr
|
||||
- N uuuu uuuu urrr rr
|
||||
- P ruuu uuuu uurr rrrr
|
||||
- M ruuu uuuu urrr rrrr
|
||||
- K uuur uuuu rrrr rrrr
|
||||
- J uuur ruuu urrr rrrr rr
|
||||
- H dlll uuuu uuur rrrr rrrr r
|
||||
- R d
|
||||
- L ulll dlll uuuu uuur rrrr rrrr rr
|
||||
- T uuul lldl lluu uuuu urrr rrrr rrrr r
|
||||
- R luuu llld lllu uuuu uurr rrrr rrrr rrr
|
||||
- B r
|
||||
- I dddl uull ldll luuu uuuu rrrr rrrr rrrr rr
|
||||
- E lldl lldl lluu uuuu urrr rrrr rrrr rrrr
|
||||
- B dlld llld lllu uuuu uurr rrrr rrrr rrrr rr
|
||||
- G ddlu uuuu uurr rrrr rrrr rrrr rrr
|
||||
- Q uulu uuuu uurr rrrr rrrr rrrr rrrr
|
||||
Reference in New Issue
Block a user