Fix rounding for pricing, add Crecelle variant

This commit is contained in:
2025-10-11 12:23:24 -05:00
parent 5169fabd44
commit 9538821bd9
15 changed files with 681 additions and 52 deletions
+36 -9
View File
@@ -4,44 +4,71 @@
public struct CharismaClass { public struct CharismaClass {
public string DisplayName { get; private set; } = string.Empty; public string DisplayName { get; private set; } = string.Empty;
public double Multiplier { get; private set; } public PriceModifier Modifier { get; private set; } = new(1, 1);
public CharismaClass() { } public CharismaClass() { }
public static List<CharismaClass> Classes = [ public readonly static List<CharismaClass> Classes = [
new() { new() {
DisplayName = "CHA 5-", DisplayName = "CHA 5-",
Multiplier = 2.0, Modifier = new(2, 1),
}, },
new() { new() {
DisplayName = "CHA 6 - 7", DisplayName = "CHA 6 - 7",
Multiplier = 1.5, Modifier = new(3, 2),
}, },
new() { new() {
DisplayName = "CHA 8 - 10", DisplayName = "CHA 8 - 10",
Multiplier = 1.3333, Modifier = new(4, 3),
}, },
new() { new() {
DisplayName = "CHA 11 - 15", DisplayName = "CHA 11 - 15",
Multiplier = 1.0, Modifier = new(1, 1),
}, },
new() { new() {
DisplayName = "CHA 16 - 17", DisplayName = "CHA 16 - 17",
Multiplier = 0.75, Modifier = new(3, 4),
}, },
new() { new() {
DisplayName = "CHA 18", DisplayName = "CHA 18",
Multiplier = 0.6667, Modifier = new(2, 3),
}, },
new() { new() {
DisplayName = "CHA 19+", DisplayName = "CHA 19+",
Multiplier = 0.5, Modifier = new(1, 2),
}, },
]; ];
public static readonly CharismaClass DefaultClass = Classes[3]; public static readonly CharismaClass DefaultClass = Classes[3];
} }
public struct PriceModifier {
public int Multiplier { get; set; } = 1;
public int Divisor { get; set; } = 1;
public PriceModifier() { }
public PriceModifier(int multiplier, int divisor) {
Multiplier = multiplier;
Divisor = divisor;
}
public readonly int Apply(int cost) {
int final = cost * this.Multiplier;
if (this.Divisor > 1) {
final = ((final * 10) / this.Divisor + 5) / 10;
}
if (final <= 0) {
final = 1;
}
return final;
}
public static PriceModifier operator *(PriceModifier lhs, PriceModifier rhs) {
return new(lhs.Multiplier * rhs.Multiplier, lhs.Divisor * rhs.Divisor);
}
}
public class CharismaSource : BindingSource { public class CharismaSource : BindingSource {
public CharismaSource() { public CharismaSource() {
this.DataSource = CharismaClass.Classes; this.DataSource = CharismaClass.Classes;
+2 -2
View File
@@ -19,8 +19,8 @@
} }
public class ItemList { public class ItemList {
public List<Item> Items { get; set; } = new(); public List<Item> Items { get; set; } = [];
public List<ItemAppearance> Appearances { get; set; } = new(); public List<ItemAppearance> Appearances { get; set; } = [];
} }
public enum ItemAttribute { public enum ItemAttribute {
+12 -11
View File
@@ -29,17 +29,17 @@ namespace NethackHelper {
public Func<int, string> CostFormatter { get; set; } = cost => cost.ToString(); public Func<int, string> CostFormatter { get; set; } = cost => cost.ToString();
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public List<ItemDisplayColumn> Columns { get; set; } = new(); public List<ItemDisplayColumn> Columns { get; set; } = [];
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public ItemAttribute Grouping { get; set; } = ItemAttribute.Cost; public ItemAttribute Grouping { get; set; } = ItemAttribute.Cost;
private List<int> GroupCosts { get; set; } = []; private List<int> GroupCosts { get; set; } = [];
private Dictionary<string, string?> AppearanceMap { get; set; } = new(); private Dictionary<string, string?> AppearanceMap { get; } = [];
private Dictionary<string, Item> ItemMap { get; set; } = new(); private Dictionary<string, Item> ItemMap { get; } = [];
private Dictionary<string, ContextMenuStrip> appearanceContextMenus = new(); private readonly Dictionary<string, ContextMenuStrip> appearanceContextMenus = [];
public ItemDisplay() { public ItemDisplay() {
InitializeComponent(); InitializeComponent();
@@ -114,17 +114,19 @@ namespace NethackHelper {
var columns = this.Columns.Select(col => COLUMN_MAP[col.Attribute].Invoke(item)).ToArray(); var columns = this.Columns.Select(col => COLUMN_MAP[col.Attribute].Invoke(item)).ToArray();
var groupName = COLUMN_MAP[this.Grouping].Invoke(item); var groupName = COLUMN_MAP[this.Grouping].Invoke(item);
var listViewItem = new ListViewItem(columns, groupDictionary[groupName]);
listViewItem.UseItemStyleForSubItems = false;
var baseFont = new Font(this.itemListView.Font, FontStyle.Regular); var baseFont = new Font(this.itemListView.Font, FontStyle.Regular);
var baseColor = UNSELECTED_COLOR; var baseColor = UNSELECTED_COLOR;
if (!identified) { if (!identified) {
baseFont = new Font(baseFont, FontStyle.Bold); baseFont = new Font(baseFont, FontStyle.Bold);
baseColor = SELECTED_COLOR; baseColor = SELECTED_COLOR;
} }
listViewItem.Checked = identified;
listViewItem.Font = baseFont; var listViewItem = new ListViewItem(columns, groupDictionary[groupName]) {
listViewItem.ForeColor = baseColor; UseItemStyleForSubItems = false,
Checked = identified,
Font = baseFont,
ForeColor = baseColor
};
foreach (ListViewSubItem subItem in listViewItem.SubItems) { foreach (ListViewSubItem subItem in listViewItem.SubItems) {
subItem.Font = baseFont; subItem.Font = baseFont;
subItem.ForeColor = baseColor; subItem.ForeColor = baseColor;
@@ -257,8 +259,7 @@ namespace NethackHelper {
if (this.appearanceContextMenus.TryGetValue(slot, out var menu)) { if (this.appearanceContextMenus.TryGetValue(slot, out var menu)) {
itemListView.ContextMenuStrip = menu; itemListView.ContextMenuStrip = menu;
var inUse = this.AppearanceMap.Values.Distinct().ToHashSet(); var inUse = this.AppearanceMap.Values.Distinct().ToHashSet();
string? appearance = null; if (this.AppearanceMap.TryGetValue(item.Text, out string? appearance) && appearance != null) {
if (this.AppearanceMap.TryGetValue(item.Text, out appearance) && appearance != null) {
inUse.Remove(appearance); inUse.Remove(appearance);
} }
foreach (ToolStripMenuItem menuItem in menu.Items) { foreach (ToolStripMenuItem menuItem in menu.Items) {
+1 -1
View File
@@ -275,7 +275,7 @@ namespace NethackHelper {
// //
toolDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; toolDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
toolDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("toolDisplay.Columns"); toolDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("toolDisplay.Columns");
toolDisplay.Grouping = ItemAttribute.Appearance; toolDisplay.Grouping = ItemAttribute.Slot;
toolDisplay.Location = new Point(6, 6); toolDisplay.Location = new Point(6, 6);
toolDisplay.Name = "toolDisplay"; toolDisplay.Name = "toolDisplay";
toolDisplay.Size = new Size(213, 515); toolDisplay.Size = new Size(213, 515);
+17 -15
View File
@@ -5,10 +5,10 @@ namespace NethackHelper {
using System.Windows.Forms; using System.Windows.Forms;
public partial class MainForm : Form { public partial class MainForm : Form {
private readonly List<SokobanSolution> sokobans = new(); private readonly List<SokobanSolution> sokobans = [];
private int sokobanStepIndex = 0; private int sokobanStepIndex = 0;
private Dictionary<string, Version> versionMap = new(); private readonly Dictionary<string, Version> versionMap = [];
private Version defaultVersion; private Version defaultVersion;
public MainForm() { public MainForm() {
@@ -28,7 +28,7 @@ namespace NethackHelper {
base.OnLoad(e); base.OnLoad(e);
this.charismaSelector.DataSource = this.charismaSourceBindingSource; this.charismaSelector.DataSource = this.charismaSourceBindingSource;
this.charismaSelector.DisplayMember = "DisplayName"; this.charismaSelector.DisplayMember = "DisplayName";
this.charismaSelector.ValueMember = "Multiplier"; this.charismaSelector.ValueMember = "Modifier";
foreach (var filename in Directory.EnumerateFiles("sokoban", "*.yaml")) { foreach (var filename in Directory.EnumerateFiles("sokoban", "*.yaml")) {
var sokoban = new SokobanSolution(YamlOptions.DeserializeFile<SokobanFile>(filename)); var sokoban = new SokobanSolution(YamlOptions.DeserializeFile<SokobanFile>(filename));
@@ -63,7 +63,8 @@ namespace NethackHelper {
this.Text = "NethackHelper - " + version.Name; this.Text = "NethackHelper - " + version.Name;
intrinsicsBindingSource.DataSource = save.Intrinsics; intrinsicsBindingSource.DataSource = save.Intrinsics;
saveSourceBindingSource.ResetItem(0);
charismaSelector.SelectedItem = save.CharismaClass;
var scrolls = YamlOptions.DeserializeFile<ItemList>(Path.Join("items", version.Scrolls)); var scrolls = YamlOptions.DeserializeFile<ItemList>(Path.Join("items", version.Scrolls));
this.scrollDisplay.DisplayItemList(scrolls, save.Scrolls); this.scrollDisplay.DisplayItemList(scrolls, save.Scrolls);
@@ -91,28 +92,29 @@ namespace NethackHelper {
} }
private string GetCostString(int cost) { private string GetCostString(int cost) {
double buyModifier = (double) (charismaSelector.SelectedValue ?? 1.0); var buyModifier = new PriceModifier(1, 1);
double sellModifier = 0.5; if (charismaSelector.SelectedValue is PriceModifier modifier) {
if (suckerBox.Checked) { buyModifier = modifier;
sellModifier = 0.3333;
buyModifier *= 1.3333;
} }
var sellModifier = suckerBox.Checked ? new PriceModifier(1, 3) : new PriceModifier(1, 2);
var randomUpcharge = new PriceModifier(4, 3);
var randomDownsell = new PriceModifier(3, 4);
if (cost == 0) { if (cost == 0) {
return string.Format( return string.Format(
"{0} - Buy: {1}/{2}", "{0} - Buy: {1}/{2}",
cost, cost,
Math.Round(5 * buyModifier), buyModifier.Apply(5),
Math.Round(5 * buyModifier * 1.3333)); (buyModifier * randomUpcharge).Apply(5));
} }
return string.Format( return string.Format(
"{0} - Buy: {1}/{2}, Sell: {3}/{4}", "{0} - Buy: {1}/{2}, Sell: {3}/{4}",
cost, cost,
Math.Round(cost * buyModifier), buyModifier.Apply(cost),
Math.Round(cost * buyModifier * 1.3333), (buyModifier * randomUpcharge).Apply(cost),
Math.Round(cost * sellModifier), sellModifier.Apply(cost),
Math.Round(cost * sellModifier * 0.75)); (sellModifier * randomDownsell).Apply(cost));
} }
private void NextStep() { private void NextStep() {
+3 -3
View File
@@ -144,14 +144,14 @@
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAAHAAAA c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAAPAAAA
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAAkH AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAAkH
AAAACgUFAAAAH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4CAAAAGjxBdHRyaWJ1dGU+a19f AAAACgUFAAAAH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4CAAAAGjxBdHRyaWJ1dGU+a19f
QmFja2luZ0ZpZWxkFjxXaWR0aD5rX19CYWNraW5nRmllbGQEABtOZXRoYWNrSGVscGVyLkl0ZW1BdHRy QmFja2luZ0ZpZWxkFjxXaWR0aD5rX19CYWNraW5nRmllbGQEABtOZXRoYWNrSGVscGVyLkl0ZW1BdHRy
aWJ1dGUEAAAACAQAAAAF+P///xtOZXRoYWNrSGVscGVyLkl0ZW1BdHRyaWJ1dGUBAAAAB3ZhbHVlX18A aWJ1dGUEAAAACAQAAAAF+P///xtOZXRoYWNrSGVscGVyLkl0ZW1BdHRyaWJ1dGUBAAAAB3ZhbHVlX18A
CAQAAAAAAAAAcgAAAAEGAAAABQAAAAH3////+P///wIAAAAoAAAAAQcAAAAFAAAAAfb////4////AwAA CAQAAAAAAAAAhQAAAAEGAAAABQAAAAH3////+P///wIAAAAcAAAAAQcAAAAFAAAAAfb////4////AwAA
ALgAAAAL ALEAAAAL
</value> </value>
</data> </data>
<data name="ringDisplay.Columns" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="ringDisplay.Columns" mimetype="application/x-microsoft.net.object.binary.base64">
+9 -9
View File
@@ -108,7 +108,7 @@
} }
public class IdentificationRecord { public class IdentificationRecord {
private readonly Dictionary<string, ItemRecord> identifications = new(); private readonly Dictionary<string, ItemRecord> identifications = [];
public IdentificationRecord(List<ItemRecord> records) { public IdentificationRecord(List<ItemRecord> records) {
this.identifications = records.ToDictionary(record => record.Name); this.identifications = records.ToDictionary(record => record.Name);
@@ -133,14 +133,14 @@
public bool Sucker { get; set; } public bool Sucker { get; set; }
public Intrinsics Intrinsics { get; set; } = new(); public Intrinsics Intrinsics { get; set; } = new();
public List<ItemRecord> Potions { get; set; } = new(); public List<ItemRecord> Potions { get; set; } = [];
public List<ItemRecord> Rings { get; set; } = new(); public List<ItemRecord> Rings { get; set; } = [];
public List<ItemRecord> Scrolls { get; set; } = new(); public List<ItemRecord> Scrolls { get; set; } = [];
public List<ItemRecord> Wands { get; set; } = new(); public List<ItemRecord> Wands { get; set; } = [];
public List<ItemRecord> Spellbooks { get; set; } = new(); public List<ItemRecord> Spellbooks { get; set; } = [];
public List<ItemRecord> Amulets { get; set; } = new(); public List<ItemRecord> Amulets { get; set; } = [];
public List<ItemRecord> Tools { get; set; } = new(); public List<ItemRecord> Tools { get; set; } = [];
public List<ItemRecord> Armor { get; set; } = new(); public List<ItemRecord> Armor { get; set; } = [];
} }
public class Intrinsics { public class Intrinsics {
+1
View File
@@ -36,3 +36,4 @@ appearances:
- appearance: octagonal - appearance: octagonal
- appearance: pentagonal - appearance: pentagonal
- appearance: cubical - appearance: cubical
- appearance: perforated
+132
View File
@@ -0,0 +1,132 @@
items:
- name: Cloak of Displacement
cost: 50
slot: cloak
- name: Cloak of Invisibility
cost: 60
slot: cloak
- name: Cloak of Magic Resistance
cost: 60
slot: cloak
- name: Cloak of Protection
cost: 50
slot: cloak
- name: Dunce Cap
cost: 1
appearance: conical hat
slot: helm
uniqueAppearance: false
- name: Cornuthaum
cost: 80
appearance: conical hat
slot: helm
uniqueAppearance: false
- name: Helmet
cost: 10
slot: helm
- name: Helm of Brilliance
cost: 50
slot: helm
appearance: crystal helmet
- name: Helm of Caution
cost: 50
slot: helm
- name: Helm of Opposite Alignment
cost: 50
slot: helm
- name: Helm of Telepathy
cost: 50
slot: helm
- name: Leather Gloves
cost: 8
slot: gloves
- name: Gauntlets of Dexterity
cost: 50
slot: gloves
- name: Gauntlets of Fumbling
cost: 50
slot: gloves
usuallyCursed: true
- name: Gauntlets of Power
cost: 50
slot: gloves
- name: Elven Boots
cost: 8
slot: boots
- name: Kicking Boots
cost: 8
slot: boots
- name: Fumble Boots
cost: 30
slot: boots
usuallyCursed: true
- name: Levitation Boots
cost: 30
slot: boots
usuallyCursed: true
- name: Jumping Boots
cost: 50
slot: boots
- name: Speed Boots
cost: 50
slot: boots
- name: Water Walking Boots
cost: 50
slot: boots
appearances:
- appearance: plumed helmet
slot: helm
- appearance: etched helmet
slot: helm
- appearance: crested helmet
slot: helm
- appearance: visored helmet
slot: helm
- appearance: frog-mouthed helm
slot: helm
- appearance: close helmet
slot: helm
- appearance: full helm
slot: helm
- appearance: horned helmet
slot: helm
notes: protectes against blinding attacks of ravens and venom-spitting attacks of cobras
- appearance: piece of cloth
slot: cloak
- appearance: opera cloak
slot: cloak
- appearance: ornamental cope
slot: cloak
- appearance: tattered cape
slot: cloak
- appearance: diaphanous veil
slot: cloak
- appearance: heavy mantle
slot: cloak
- appearance: voluminous shroud
slot: cloak
- appearance: old gloves
slot: gloves
- appearance: padded gloves
slot: gloves
- appearance: riding gloves
slot: gloves
notes: increases chance of successfully saddling a steed
- appearance: fencing gloves
slot: gloves
- appearance: mud boots
slot: boots
- appearance: buckled boots
slot: boots
- appearance: riding boots
slot: boots
notes: increases chance of successfully saddling a steed
- appearance: snow boots
slot: boots
notes: prevents fumbling effect of ice
- appearance: hiking boots
slot: boots
- appearance: combat boots
slot: boots
- appearance: jungle boots
slot: boots
+94
View File
@@ -0,0 +1,94 @@
items:
- name: Water
cost: 0
appearance: clear
- name: Healing
cost: 20
- name: Blood
cost: 50
appearance: blood red
- 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: Hazardous Waste
cost: 100
- name: Restore Ability
cost: 100
- name: Sleeping
cost: 100
- name: Teleportitis
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
appearances:
- appearance: ruby
- appearance: dark green
- appearance: purple-red
- appearance: smoky
notes: can summon djinni
- appearance: brown
- appearance: pink
- appearance: cyan
- appearance: puce
- appearance: cloudy
- appearance: fizzy
- appearance: orange
- appearance: sky blue
- appearance: milky
notes: can summon ghost
- appearance: effervescent
- appearance: dark
- appearance: yellow
- appearance: brilliant blue
- appearance: swirly
- appearance: black
- appearance: white
- appearance: emerald
- appearance: magenta
- appearance: bubbly
- appearance: golden
- appearance: murky
- appearance: turgid
- appearance: bilious
+119
View File
@@ -0,0 +1,119 @@
items:
- name: Identify
ink: 14
cost: 20
- name: Light
ink: 8
cost: 50
- name: Harmonize Weapon
ink: 40
cost: 60
- name: Blank Paper
ink: 0
cost: 60
appearance: unlabeled
- name: Harmonize Armor
ink: 40
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: Control Weather
ink: 12
cost: 300
- name: Erasure
ink: 30
cost: 300
- name: Maze
ink: 20
cost: 300
- name: Punishment
ink: 10
cost: 300
- name: Stinking Cloud
ink: 20
cost: 300
appearances:
- appearance: 4TN ETC MOTD
- appearance: ET ITANIS
- appearance: DR 0451
- appearance: UDLER BASTRI
- appearance: BOFH PFY
- appearance: FOOELS DAIYEN
- appearance: FUHUHUHUHU
- appearance: IFNDEF
- appearance: DOT ERSUS MOK
- appearance: VIBGYOR
- appearance: ORBITUS TERTIUS
- appearance: EERF MRD
- appearance: OM NOM NOM
- appearance: YADANI CHEAVE
- appearance: TRAESTO
- appearance: OOM KILAR
- appearance: LP0 ON FIRE
- appearance: NORMRF
- appearance: KTHXBYE
- appearance: VENVIDVIC
- appearance: EKDMOS
- appearance: WAREZ WALL DO
- appearance: FIZZ BUZZ
- appearance: OLEL UL ILAL
- appearance: ERMACS
- appearance: HERAKLES
- appearance: DOTNFO
- appearance: VEEBLUNK EN TRUPT
- appearance: DOLOR SIT AMET
- appearance: CQ CQ CQ
- appearance: ELOMCWE
- appearance: ALAKAZAM
- appearance: KOOP NAMTAR
- appearance: MLIT WVC TEKU SFC
- appearance: NARPAS SWORD
- appearance: BATTLE999
- appearance: SAZUN HERA DUODER
- appearance: BEN ZI BENA
- appearance: KRYPT3R
- appearance: TILTOWAIT
- appearance: VAS KAL CORP
- appearance: H POKE
- appearance: SQUEMISH OSIFRAGE
- appearance: FLVR TXT
+132
View File
@@ -0,0 +1,132 @@
items:
- name: Bag of Holding
slot: bag
cost: 100
- name: Bag of Tricks
slot: bag
cost: 100
- name: Oilskin Sack
slot: bag
cost: 100
- name: Sack
slot: bag
cost: 2
- name: Acoustic Guitar
cost: 50
appearance: guitar
slot: guitar
uniqueAppearance: false
- name: Electric Guitar
cost: 50
appearance: guitar
slot: guitar
uniqueAppearance: false
- name: Fire Horn
cost: 50
appearance: horn
slot: horn
uniqueAppearance: false
- name: Frost Horn
cost: 50
appearance: horn
slot: horn
uniqueAppearance: false
- name: Horn of Plenty
cost: 50
appearance: horn
slot: horn
uniqueAppearance: false
- name: Tooled Horn
cost: 15
appearance: horn
slot: horn
uniqueAppearance: false
- name: Magic Flute
cost: 36
appearance: flute
slot: flute
uniqueAppearance: false
- name: Wooden Flute
cost: 12
appearance: flute
slot: flute
uniqueAppearance: false
- name: Magic Harp
cost: 50
appearance: harp
slot: harp
uniqueAppearance: false
- name: Wooden Harp
cost: 50
appearance: harp
slot: harp
uniqueAppearance: false
- name: Drum of Earthquake
cost: 25
appearance: drum
slot: drum
uniqueAppearance: false
- name: Leather Drum
cost: 25
appearance: drum
slot: drum
uniqueAppearance: false
- name: Magic Whistle
cost: 10
appearance: whistle
slot: whistle
uniqueAppearance: false
- name: Tin Whistle
cost: 10
appearance: whistle
slot: whistle
uniqueAppearance: false
- name: Magic Lamp
cost: 50
appearance: lamp
slot: lamp
uniqueAppearance: false
- name: Oil Lamp
cost: 10
appearance: lamp
slot: lamp
uniqueAppearance: false
- name: Wax Candle
cost: 20
appearance: candle
slot: candle
uniqueAppearance: false
- name: Tallow Candle
cost: 10
appearance: candle
slot: candle
uniqueAppearance: false
- name: Loadstone
cost: 1
appearance: gray stone
slot: gray stone
uniqueAppearance: false
- name: Flint Stone
cost: 1
appearance: gray stone
slot: gray stone
uniqueAppearance: false
- name: Touchstone
cost: 45
appearance: gray stone
slot: gray stone
uniqueAppearance: false
- name: Luckstone
cost: 60
appearance: gray stone
slot: gray stone
uniqueAppearance: false
appearances:
- appearance: burlap bag
slot: bag
- appearance: canvas bag
slot: bag
- appearance: drawstring bag
slot: bag
- appearance: embroidered bag
slot: bag
+24
View File
@@ -2,96 +2,120 @@
- name: Bag of Holding - name: Bag of Holding
cost: 100 cost: 100
appearance: bag appearance: bag
slot: bag
uniqueAppearance: false uniqueAppearance: false
- name: Bag of Tricks - name: Bag of Tricks
cost: 100 cost: 100
appearance: bag appearance: bag
slot: bag
uniqueAppearance: false uniqueAppearance: false
- name: Oilskin Sack - name: Oilskin Sack
cost: 100 cost: 100
appearance: bag appearance: bag
slot: bag
uniqueAppearance: false uniqueAppearance: false
- name: Sack - name: Sack
cost: 2 cost: 2
appearance: bag appearance: bag
slot: bag
uniqueAppearance: false uniqueAppearance: false
- name: Fire Horn - name: Fire Horn
cost: 50 cost: 50
appearance: horn appearance: horn
slot: horn
uniqueAppearance: false uniqueAppearance: false
- name: Frost Horn - name: Frost Horn
cost: 50 cost: 50
appearance: horn appearance: horn
slot: horn
uniqueAppearance: false uniqueAppearance: false
- name: Horn of Plenty - name: Horn of Plenty
cost: 50 cost: 50
appearance: horn appearance: horn
slot: horn
uniqueAppearance: false uniqueAppearance: false
- name: Tooled Horn - name: Tooled Horn
cost: 15 cost: 15
appearance: horn appearance: horn
slot: horn
uniqueAppearance: false uniqueAppearance: false
- name: Magic Flute - name: Magic Flute
cost: 36 cost: 36
appearance: flute appearance: flute
slot: flute
uniqueAppearance: false uniqueAppearance: false
- name: Wooden Flute - name: Wooden Flute
cost: 12 cost: 12
appearance: flute appearance: flute
slot: flute
uniqueAppearance: false uniqueAppearance: false
- name: Magic Harp - name: Magic Harp
cost: 50 cost: 50
appearance: harp appearance: harp
slot: harp
uniqueAppearance: false uniqueAppearance: false
- name: Wooden Harp - name: Wooden Harp
cost: 50 cost: 50
appearance: harp appearance: harp
slot: harp
uniqueAppearance: false uniqueAppearance: false
- name: Drum of Earthquake - name: Drum of Earthquake
cost: 25 cost: 25
appearance: drum appearance: drum
slot: drum
uniqueAppearance: false uniqueAppearance: false
- name: Leather Drum - name: Leather Drum
cost: 25 cost: 25
appearance: drum appearance: drum
slot: drum
uniqueAppearance: false uniqueAppearance: false
- name: Magic Whistle - name: Magic Whistle
cost: 10 cost: 10
appearance: whistle appearance: whistle
slot: whistle
uniqueAppearance: false uniqueAppearance: false
- name: Tin Whistle - name: Tin Whistle
cost: 10 cost: 10
appearance: whistle appearance: whistle
slot: whistle
uniqueAppearance: false uniqueAppearance: false
- name: Magic Lamp - name: Magic Lamp
cost: 50 cost: 50
appearance: lamp appearance: lamp
slot: lamp
uniqueAppearance: false uniqueAppearance: false
- name: Oil Lamp - name: Oil Lamp
cost: 10 cost: 10
appearance: lamp appearance: lamp
slot: lamp
uniqueAppearance: false uniqueAppearance: false
- name: Wax Candle - name: Wax Candle
cost: 20 cost: 20
appearance: candle appearance: candle
slot: candle
uniqueAppearance: false uniqueAppearance: false
- name: Tallow Candle - name: Tallow Candle
cost: 10 cost: 10
appearance: candle appearance: candle
slot: candle
uniqueAppearance: false uniqueAppearance: false
- name: Loadstone - name: Loadstone
cost: 1 cost: 1
appearance: gray stone appearance: gray stone
slot: gray stone
uniqueAppearance: false uniqueAppearance: false
- name: Flint Stone - name: Flint Stone
cost: 1 cost: 1
appearance: gray stone appearance: gray stone
slot: gray stone
uniqueAppearance: false uniqueAppearance: false
- name: Touchstone - name: Touchstone
cost: 45 cost: 45
appearance: gray stone appearance: gray stone
slot: gray stone
uniqueAppearance: false uniqueAppearance: false
- name: Luckstone - name: Luckstone
cost: 60 cost: 60
appearance: gray stone appearance: gray stone
slot: gray stone
uniqueAppearance: false uniqueAppearance: false
+9
View File
@@ -16,3 +16,12 @@
amulets: amulets-37.yaml amulets: amulets-37.yaml
tools: tools-stones.yaml tools: tools-stones.yaml
armor: armor-37.yaml armor: armor-37.yaml
- name: CrecelleHack
scrolls: scrolls-crecelle.yaml
rings: rings.yaml
potions: potions-crecelle.yaml
wands: wands-crecelle.yaml
spellbooks: spellbooks-37.yaml
amulets: amulets-37.yaml
tools: tools-crecelle.yaml
armor: armor-crecelle.yaml
+88
View File
@@ -0,0 +1,88 @@
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: Water
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: Fecundity
cost: 200
- name: Polymorph
cost: 200
- name: Teleportation
cost: 200
- name: Death
cost: 500
- name: Wishing
cost: 500
appearances:
- appearance: aluminum
- appearance: bone
- appearance: curved
- appearance: iridium
- appearance: marble
notes: stone to flesh will make into a meat stick
- appearance: short
- appearance: uranium
- appearance: balsa
notes: requires only 5 strength to break
- appearance: ebony
- appearance: iron
- appearance: oak
- appearance: silver
- appearance: zinc
- appearance: brass
- appearance: forked
- appearance: jeweled
- appearance: pine
- appearance: spiked
- appearance: copper
- appearance: glass
notes: fragile
- appearance: long
- appearance: platinum
- appearance: steel
- appearance: crystal
notes: fragile
- appearance: hexagonal
- appearance: maple
- appearance: runed
- appearance: tin
- appearance: swishy
- appearance: solid ice