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

View File

@@ -4,44 +4,71 @@
public struct CharismaClass {
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 static List<CharismaClass> Classes = [
public readonly static List<CharismaClass> Classes = [
new() {
DisplayName = "CHA 5-",
Multiplier = 2.0,
Modifier = new(2, 1),
},
new() {
DisplayName = "CHA 6 - 7",
Multiplier = 1.5,
Modifier = new(3, 2),
},
new() {
DisplayName = "CHA 8 - 10",
Multiplier = 1.3333,
Modifier = new(4, 3),
},
new() {
DisplayName = "CHA 11 - 15",
Multiplier = 1.0,
Modifier = new(1, 1),
},
new() {
DisplayName = "CHA 16 - 17",
Multiplier = 0.75,
Modifier = new(3, 4),
},
new() {
DisplayName = "CHA 18",
Multiplier = 0.6667,
Modifier = new(2, 3),
},
new() {
DisplayName = "CHA 19+",
Multiplier = 0.5,
Modifier = new(1, 2),
},
];
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 CharismaSource() {
this.DataSource = CharismaClass.Classes;

View File

@@ -19,8 +19,8 @@
}
public class ItemList {
public List<Item> Items { get; set; } = new();
public List<ItemAppearance> Appearances { get; set; } = new();
public List<Item> Items { get; set; } = [];
public List<ItemAppearance> Appearances { get; set; } = [];
}
public enum ItemAttribute {

View File

@@ -29,17 +29,17 @@ namespace NethackHelper {
public Func<int, string> CostFormatter { get; set; } = cost => cost.ToString();
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public List<ItemDisplayColumn> Columns { get; set; } = new();
public List<ItemDisplayColumn> Columns { get; set; } = [];
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public ItemAttribute Grouping { get; set; } = ItemAttribute.Cost;
private List<int> GroupCosts { get; set; } = [];
private Dictionary<string, string?> AppearanceMap { get; set; } = new();
private Dictionary<string, Item> ItemMap { get; set; } = new();
private Dictionary<string, string?> AppearanceMap { get; } = [];
private Dictionary<string, Item> ItemMap { get; } = [];
private Dictionary<string, ContextMenuStrip> appearanceContextMenus = new();
private readonly Dictionary<string, ContextMenuStrip> appearanceContextMenus = [];
public ItemDisplay() {
InitializeComponent();
@@ -114,17 +114,19 @@ namespace NethackHelper {
var columns = this.Columns.Select(col => COLUMN_MAP[col.Attribute].Invoke(item)).ToArray();
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 baseColor = UNSELECTED_COLOR;
if (!identified) {
baseFont = new Font(baseFont, FontStyle.Bold);
baseColor = SELECTED_COLOR;
}
listViewItem.Checked = identified;
listViewItem.Font = baseFont;
listViewItem.ForeColor = baseColor;
var listViewItem = new ListViewItem(columns, groupDictionary[groupName]) {
UseItemStyleForSubItems = false,
Checked = identified,
Font = baseFont,
ForeColor = baseColor
};
foreach (ListViewSubItem subItem in listViewItem.SubItems) {
subItem.Font = baseFont;
subItem.ForeColor = baseColor;
@@ -257,8 +259,7 @@ namespace NethackHelper {
if (this.appearanceContextMenus.TryGetValue(slot, out var menu)) {
itemListView.ContextMenuStrip = menu;
var inUse = this.AppearanceMap.Values.Distinct().ToHashSet();
string? appearance = null;
if (this.AppearanceMap.TryGetValue(item.Text, out appearance) && appearance != null) {
if (this.AppearanceMap.TryGetValue(item.Text, out string? appearance) && appearance != null) {
inUse.Remove(appearance);
}
foreach (ToolStripMenuItem menuItem in menu.Items) {

View File

@@ -275,7 +275,7 @@ namespace NethackHelper {
//
toolDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
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.Name = "toolDisplay";
toolDisplay.Size = new Size(213, 515);

View File

@@ -5,10 +5,10 @@ namespace NethackHelper {
using System.Windows.Forms;
public partial class MainForm : Form {
private readonly List<SokobanSolution> sokobans = new();
private readonly List<SokobanSolution> sokobans = [];
private int sokobanStepIndex = 0;
private Dictionary<string, Version> versionMap = new();
private readonly Dictionary<string, Version> versionMap = [];
private Version defaultVersion;
public MainForm() {
@@ -28,7 +28,7 @@ namespace NethackHelper {
base.OnLoad(e);
this.charismaSelector.DataSource = this.charismaSourceBindingSource;
this.charismaSelector.DisplayMember = "DisplayName";
this.charismaSelector.ValueMember = "Multiplier";
this.charismaSelector.ValueMember = "Modifier";
foreach (var filename in Directory.EnumerateFiles("sokoban", "*.yaml")) {
var sokoban = new SokobanSolution(YamlOptions.DeserializeFile<SokobanFile>(filename));
@@ -63,7 +63,8 @@ namespace NethackHelper {
this.Text = "NethackHelper - " + version.Name;
intrinsicsBindingSource.DataSource = save.Intrinsics;
saveSourceBindingSource.ResetItem(0);
charismaSelector.SelectedItem = save.CharismaClass;
var scrolls = YamlOptions.DeserializeFile<ItemList>(Path.Join("items", version.Scrolls));
this.scrollDisplay.DisplayItemList(scrolls, save.Scrolls);
@@ -91,28 +92,29 @@ namespace NethackHelper {
}
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;
var buyModifier = new PriceModifier(1, 1);
if (charismaSelector.SelectedValue is PriceModifier modifier) {
buyModifier = modifier;
}
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) {
return string.Format(
"{0} - Buy: {1}/{2}",
cost,
Math.Round(5 * buyModifier),
Math.Round(5 * buyModifier * 1.3333));
buyModifier.Apply(5),
(buyModifier * randomUpcharge).Apply(5));
}
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));
buyModifier.Apply(cost),
(buyModifier * randomUpcharge).Apply(cost),
sellModifier.Apply(cost),
(sellModifier * randomDownsell).Apply(cost));
}
private void NextStep() {

View File

@@ -144,14 +144,14 @@
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAAHAAAA
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAAPAAAA
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAAkH
AAAACgUFAAAAH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4CAAAAGjxBdHRyaWJ1dGU+a19f
QmFja2luZ0ZpZWxkFjxXaWR0aD5rX19CYWNraW5nRmllbGQEABtOZXRoYWNrSGVscGVyLkl0ZW1BdHRy
aWJ1dGUEAAAACAQAAAAF+P///xtOZXRoYWNrSGVscGVyLkl0ZW1BdHRyaWJ1dGUBAAAAB3ZhbHVlX18A
CAQAAAAAAAAAcgAAAAEGAAAABQAAAAH3////+P///wIAAAAoAAAAAQcAAAAFAAAAAfb////4////AwAA
ALgAAAAL
CAQAAAAAAAAAhQAAAAEGAAAABQAAAAH3////+P///wIAAAAcAAAAAQcAAAAFAAAAAfb////4////AwAA
ALEAAAAL
</value>
</data>
<data name="ringDisplay.Columns" mimetype="application/x-microsoft.net.object.binary.base64">

View File

@@ -108,7 +108,7 @@
}
public class IdentificationRecord {
private readonly Dictionary<string, ItemRecord> identifications = new();
private readonly Dictionary<string, ItemRecord> identifications = [];
public IdentificationRecord(List<ItemRecord> records) {
this.identifications = records.ToDictionary(record => record.Name);
@@ -133,14 +133,14 @@
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 List<ItemRecord> Spellbooks { get; set; } = new();
public List<ItemRecord> Amulets { get; set; } = new();
public List<ItemRecord> Tools { get; set; } = new();
public List<ItemRecord> Armor { get; set; } = new();
public List<ItemRecord> Potions { get; set; } = [];
public List<ItemRecord> Rings { get; set; } = [];
public List<ItemRecord> Scrolls { get; set; } = [];
public List<ItemRecord> Wands { get; set; } = [];
public List<ItemRecord> Spellbooks { get; set; } = [];
public List<ItemRecord> Amulets { get; set; } = [];
public List<ItemRecord> Tools { get; set; } = [];
public List<ItemRecord> Armor { get; set; } = [];
}
public class Intrinsics {

View File

@@ -35,4 +35,5 @@ appearances:
- appearance: square
- appearance: octagonal
- appearance: pentagonal
- appearance: cubical
- appearance: cubical
- appearance: perforated

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

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

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

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

View File

@@ -2,96 +2,120 @@
- name: Bag of Holding
cost: 100
appearance: bag
slot: bag
uniqueAppearance: false
- name: Bag of Tricks
cost: 100
appearance: bag
slot: bag
uniqueAppearance: false
- name: Oilskin Sack
cost: 100
appearance: bag
slot: bag
uniqueAppearance: false
- name: Sack
cost: 2
appearance: bag
slot: bag
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

View File

@@ -15,4 +15,13 @@
spellbooks: spellbooks-37.yaml
amulets: amulets-37.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

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