Allow setting appearances

This commit is contained in:
2025-09-25 01:09:09 -05:00
parent 22e529f222
commit 9b9e922f35
16 changed files with 461 additions and 46 deletions

View File

@@ -12,8 +12,14 @@
public string Slot { get; set; } = string.Empty;
}
public class ItemAppearance {
public string Appearance { get; set; } = string.Empty;
public string Slot { get; set; } = string.Empty;
}
public class ItemList {
public List<Item> Items { get; set; } = new();
public List<ItemAppearance> Appearances { get; set; } = new();
}
public enum ItemAttribute {

View File

@@ -41,6 +41,7 @@
itemListView.TabIndex = 0;
itemListView.UseCompatibleStateImageBehavior = false;
itemListView.View = System.Windows.Forms.View.Details;
itemListView.SelectedIndexChanged += itemListView_SelectedIndexChanged;
itemListView.MouseDoubleClick += itemListView_MouseDoubleClick;
//
// nameColumn

View File

@@ -6,7 +6,6 @@ using System.Linq;
using System.Windows.Forms;
using static System.Windows.Forms.ListViewItem;
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace NethackHelper {
public partial class ItemDisplay : UserControl {
@@ -34,11 +33,13 @@ namespace NethackHelper {
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public ItemAttribute Grouping { get; set; } = ItemAttribute.Cost;
private int[] GroupCosts { get; set; } = [];
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, ContextMenuStrip> appearanceContextMenus = new();
public ItemDisplay() {
InitializeComponent();
this.itemListView.ListViewItemSorter = Comparer<ListViewItem>.Create(this.CompareItems);
@@ -63,12 +64,24 @@ namespace NethackHelper {
this.itemListView.Items.Clear();
this.AppearanceMap.Clear();
this.ItemMap.Clear();
this.appearanceContextMenus.Clear();
if (this.Grouping == ItemAttribute.Cost) {
this.GroupCosts = itemList.Items.Select(item => item.Cost).Distinct().Order().ToArray();
var appearanceSlots = itemList.Appearances.Select(app => app.Slot).Distinct().ToList();
foreach (var slot in appearanceSlots) {
ContextMenuStrip contextMenuStrip = new();
var appearances = itemList.Appearances.Where(app => app.Slot == slot).Select(app => app.Appearance).Order().ToList();
foreach (var appearance in appearances) {
contextMenuStrip.Items.Add(appearance, null, (sender, e) => this.PickAppearance(appearance));
}
this.appearanceContextMenus.Add(slot, contextMenuStrip);
}
var groups = itemList.Items.Select(item => COLUMN_MAP[this.Grouping].Invoke(item)).Distinct().Order().ToList();
if (this.Grouping == ItemAttribute.Cost) {
this.GroupCosts = itemList.Items.Select(item => item.Cost).Distinct().Order().ToList();
groups = this.GroupCosts.Select(cost => cost.ToString()).ToList();
}
var groups = itemList.Items.Select(item => COLUMN_MAP[this.Grouping].Invoke(item)).Distinct().Order();
var groupDictionary = new Dictionary<string, ListViewGroup>();
foreach (var group in groups) {
@@ -125,6 +138,12 @@ namespace NethackHelper {
listViewItem.SubItems[i].Font = new Font(baseFont, fontStyle);
}
}
} else {
for (var i = 0; i < this.Columns.Count; i++) {
if (this.Columns[i].Attribute == ItemAttribute.Appearance) {
listViewItem.SubItems[i].Text = record.Appearance;
}
}
}
this.itemListView.Items.Add(listViewItem);
}
@@ -148,18 +167,22 @@ namespace NethackHelper {
public void UpdateCostHeaders() {
if (this.Grouping == ItemAttribute.Cost) {
for (int i = 0; i < this.GroupCosts.Length; i++) {
for (int i = 0; i < this.GroupCosts.Count; i++) {
this.itemListView.Groups[i].Header = this.CostFormatter.Invoke(this.GroupCosts[i]);
}
}
}
private void itemListView_MouseDoubleClick(object sender, MouseEventArgs e) {
if (!e.Button.HasFlag(MouseButtons.Left)) {
return;
}
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) {
for (var i = 0; i < this.Columns.Count; i++) {
var subItem = item.SubItems[i];
if (item.Checked) {
if (subItem.Font.Italic) {
subItem.Font = new Font(baseFont, FontStyle.Italic);
@@ -168,7 +191,9 @@ namespace NethackHelper {
}
subItem.ForeColor = UNSELECTED_COLOR;
} else {
if (subItem.Font.Italic) {
if (this.Columns[i].Attribute == ItemAttribute.Appearance && this.ItemMap[item.Text].Appearance == null) {
this.AppearanceMap[item.Text] = null;
subItem.Text = UNIDENTIFIED;
subItem.Font = new Font(baseFont, FontStyle.Bold | FontStyle.Italic);
} else {
subItem.Font = new Font(baseFont, FontStyle.Bold | FontStyle.Regular);
@@ -177,6 +202,27 @@ namespace NethackHelper {
}
}
this.itemListView.Sort();
this.ProcessCurrentItemContextMenu();
}
}
private void PickAppearance(string appearance) {
if (itemListView.SelectedItems.Count == 1) {
var item = this.itemListView.SelectedItems[0];
var name = item.Text;
this.AppearanceMap[name] = appearance;
item.Checked = true;
var baseFont = item.Font;
for (var i = 0; i < this.Columns.Count; i++) {
var subItem = item.SubItems[i];
subItem.Font = new Font(baseFont, FontStyle.Regular);
subItem.ForeColor = UNSELECTED_COLOR;
if (this.Columns[i].Attribute == ItemAttribute.Appearance) {
subItem.Text = appearance;
}
}
this.itemListView.Sort();
this.ProcessCurrentItemContextMenu();
}
}
@@ -189,6 +235,34 @@ namespace NethackHelper {
return a.Text.CompareTo(b.Text);
}
}
private void ProcessCurrentItemContextMenu() {
if (itemListView.SelectedItems.Count == 1) {
var item = this.itemListView.SelectedItems[0];
if (this.ItemMap[item.Text].Appearance == null) {
var slot = this.ItemMap[item.Text].Slot;
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) {
inUse.Remove(appearance);
}
foreach (ToolStripMenuItem menuItem in menu.Items) {
menuItem.Enabled = !inUse.Contains(menuItem.Text);
menuItem.Checked = menuItem.Text == appearance;
}
return;
}
}
}
itemListView.ContextMenuStrip = null;
}
private void itemListView_SelectedIndexChanged(object sender, EventArgs e) {
this.ProcessCurrentItemContextMenu();
}
}
[Serializable]

View File

@@ -170,9 +170,9 @@ namespace NethackHelper {
potionDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
potionDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("potionDisplay.Columns");
potionDisplay.Grouping = ItemAttribute.Cost;
potionDisplay.Location = new Point(325, 6);
potionDisplay.Location = new Point(375, 6);
potionDisplay.Name = "potionDisplay";
potionDisplay.Size = new Size(313, 515);
potionDisplay.Size = new Size(263, 515);
potionDisplay.TabIndex = 1;
//
// scrollDisplay
@@ -182,7 +182,7 @@ namespace NethackHelper {
scrollDisplay.Grouping = ItemAttribute.Cost;
scrollDisplay.Location = new Point(6, 6);
scrollDisplay.Name = "scrollDisplay";
scrollDisplay.Size = new Size(313, 515);
scrollDisplay.Size = new Size(363, 515);
scrollDisplay.TabIndex = 0;
//
// wandRingTab
@@ -202,9 +202,9 @@ namespace NethackHelper {
ringDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right;
ringDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("ringDisplay.Columns");
ringDisplay.Grouping = ItemAttribute.Cost;
ringDisplay.Location = new Point(325, 6);
ringDisplay.Location = new Point(301, 6);
ringDisplay.Name = "ringDisplay";
ringDisplay.Size = new Size(313, 515);
ringDisplay.Size = new Size(337, 515);
ringDisplay.TabIndex = 2;
//
// wandDisplay
@@ -214,7 +214,7 @@ namespace NethackHelper {
wandDisplay.Grouping = ItemAttribute.Cost;
wandDisplay.Location = new Point(6, 6);
wandDisplay.Name = "wandDisplay";
wandDisplay.Size = new Size(313, 515);
wandDisplay.Size = new Size(289, 515);
wandDisplay.TabIndex = 1;
//
// spellbookTab

View File

@@ -129,32 +129,16 @@
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAIAAAACAAAA
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAIAAAAFAAAA
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAA0C
BQUAAAAfTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbgIAAAAaPEF0dHJpYnV0ZT5rX19CYWNr
aW5nRmllbGQWPFdpZHRoPmtfX0JhY2tpbmdGaWVsZAQAG05ldGhhY2tIZWxwZXIuSXRlbUF0dHJpYnV0
ZQQAAAAIBAAAAAX5////G05ldGhhY2tIZWxwZXIuSXRlbUF0dHJpYnV0ZQEAAAAHdmFsdWVfXwAIBAAA
AAAAAACQAAAAAQYAAAAFAAAAAfj////5////AwAAAJAAAAAL
AAAAAAB3AAAAAQYAAAAFAAAAAfj////5////AwAAAHcAAAAL
</value>
</data>
<data name="scrollDisplay.Columns" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEROZXRoYWNrSGVscGVyLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAADAAAA
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
@@ -166,8 +150,24 @@
AAAACgUFAAAAH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4CAAAAGjxBdHRyaWJ1dGU+a19f
QmFja2luZ0ZpZWxkFjxXaWR0aD5rX19CYWNraW5nRmllbGQEABtOZXRoYWNrSGVscGVyLkl0ZW1BdHRy
aWJ1dGUEAAAACAQAAAAF+P///xtOZXRoYWNrSGVscGVyLkl0ZW1BdHRyaWJ1dGUBAAAAB3ZhbHVlX18A
CAQAAAAAAAAAhgAAAAEGAAAABQAAAAH3////+P///wUAAAAUAAAAAQcAAAAFAAAAAfb////4////AwAA
AIYAAAAL
CAQAAAAAAAAAcgAAAAEGAAAABQAAAAH3////+P///wIAAAAoAAAAAQcAAAAFAAAAAfb////4////AwAA
ALgAAAAL
</value>
</data>
<data name="ringDisplay.Columns" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEROZXRoYWNrSGVscGVyLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAATAAAA
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAAkH
AAAACgUFAAAAH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4CAAAAGjxBdHRyaWJ1dGU+a19f
QmFja2luZ0ZpZWxkFjxXaWR0aD5rX19CYWNraW5nRmllbGQEABtOZXRoYWNrSGVscGVyLkl0ZW1BdHRy
aWJ1dGUEAAAACAQAAAAF+P///xtOZXRoYWNrSGVscGVyLkl0ZW1BdHRyaWJ1dGUBAAAAB3ZhbHVlX18A
CAQAAAAAAAAAwAAAAAEGAAAABQAAAAH3////+P///wUAAAAUAAAAAQcAAAAFAAAAAfb////4////AwAA
AGQAAAAL
</value>
</data>
<data name="wandDisplay.Columns" mimetype="application/x-microsoft.net.object.binary.base64">
@@ -176,13 +176,13 @@
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAIAAAACAAAA
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAIAAAAIAAAA
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAA0C
BQUAAAAfTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbgIAAAAaPEF0dHJpYnV0ZT5rX19CYWNr
aW5nRmllbGQWPFdpZHRoPmtfX0JhY2tpbmdGaWVsZAQAG05ldGhhY2tIZWxwZXIuSXRlbUF0dHJpYnV0
ZQQAAAAIBAAAAAX5////G05ldGhhY2tIZWxwZXIuSXRlbUF0dHJpYnV0ZQEAAAAHdmFsdWVfXwAIBAAA
AAAAAACQAAAAAQYAAAAFAAAAAfj////5////AwAAAJAAAAAL
AAAAAACQAAAAAQYAAAAFAAAAAfj////5////AwAAAHgAAAAL
</value>
</data>
<data name="amuletDisplay.Columns" mimetype="application/x-microsoft.net.object.binary.base64">

View File

@@ -20,3 +20,13 @@
cost: 150
- name: Versus Poison
cost: 150
appearances:
- appearance: circular
- appearance: triangular
- appearance: concave
- appearance: spherical
- appearance: pyramidal
- appearance: hexagonal
- appearance: oval
- appearance: square
- appearance: octagonal

View File

@@ -24,3 +24,15 @@
cost: 150
- name: Versus Poison
cost: 150
appearances:
- appearance: circular
- appearance: triangular
- appearance: concave
- appearance: spherical
- appearance: pyramidal
- appearance: hexagonal
- appearance: oval
- appearance: square
- appearance: octagonal
- appearance: pentagonal
- appearance: cubical

View File

@@ -69,3 +69,42 @@
- 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: piece of cloth
slot: cloak
- appearance: opera cloak
slot: cloak
- appearance: ornamental cope
slot: cloak
- appearance: tattered cape
slot: cloak
- appearance: old gloves
slot: gloves
- appearance: padded gloves
slot: gloves
- appearance: riding gloves
slot: gloves
- appearance: fencing gloves
slot: gloves
- appearance: mud boots
slot: boots
- appearance: buckled boots
slot: boots
- appearance: riding boots
slot: boots
- appearance: snow boots
slot: boots
- appearance: hiking boots
slot: boots
- appearance: combat boots
slot: boots
- appearance: jungle boots
slot: boots

View File

@@ -73,3 +73,42 @@
- 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: piece of cloth
slot: cloak
- appearance: opera cloak
slot: cloak
- appearance: ornamental cope
slot: cloak
- appearance: tattered cape
slot: cloak
- appearance: old gloves
slot: gloves
- appearance: padded gloves
slot: gloves
- appearance: riding gloves
slot: gloves
- appearance: fencing gloves
slot: gloves
- appearance: mud boots
slot: boots
- appearance: buckled boots
slot: boots
- appearance: riding boots
slot: boots
- appearance: snow boots
slot: boots
- appearance: hiking boots
slot: boots
- appearance: combat boots
slot: boots
- appearance: jungle boots
slot: boots

View File

@@ -55,3 +55,29 @@
cost: 300
- name: Paralysis
cost: 300
appearances:
- appearance: ruby
- appearance: dark green
- appearance: purple-red
- appearance: smoky
- appearance: brown
- appearance: pink
- appearance: cyan
- appearance: puce
- appearance: cloudy
- appearance: fizzy
- appearance: orange
- appearance: sky blue
- appearance: milky
- 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

View File

@@ -55,3 +55,29 @@
cost: 300
- name: Paralysis
cost: 300
appearances:
- appearance: ruby
- appearance: dark green
- appearance: purple-red
- appearance: smoky
- appearance: brown
- appearance: pink
- appearance: cyan
- appearance: puce
- appearance: cloudy
- appearance: fizzy
- appearance: orange
- appearance: sky blue
- appearance: milky
- 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

View File

@@ -59,3 +59,32 @@
cost: 300
- name: Teleport Control
cost: 300
appearances:
- appearance: pearl
- appearance: engagement
- appearance: silver
- appearance: clay
- appearance: jade
- appearance: diamond
- appearance: iron
- appearance: shiny
- appearance: gold
- appearance: coral
- appearance: agate
- appearance: ivory
- appearance: twisted
- appearance: bronze
- appearance: wooden
- appearance: black onyx
- appearance: topaz
- appearance: emerald
- appearance: steel
- appearance: brass
- appearance: granite
- appearance: moonstone
- appearance: sapphire
- appearance: wire
- appearance: copper
- appearance: opal
- appearance: tiger eye
- appearance: ruby

View File

@@ -66,3 +66,45 @@
- name: Stinking Cloud
ink: 20
cost: 300
appearances:
- appearance: ZELGO MER
- appearance: JUYED AWK YACC
- appearance: NR 9
- appearance: XIXAXA XOXAXA XUXAXA
- appearance: PRATYAVAYAH
- appearance: DAIYEN FOOELS
- appearance: LEP GEX VEN ZEA
- appearance: PRIRUTSENIE
- appearance: ELBIB YLOH
- appearance: VERR YED HORRE
- appearance: VENZAR BORGAVVE
- appearance: THARR
- appearance: YUM YUM
- appearance: KERNOD WEL
- appearance: ELAM EBOW
- appearance: DUAM XNAHT
- appearance: ANDOVA BEGARIN
- appearance: KIRJE
- appearance: VE FORBRYDERNE
- appearance: HACKEM MUCHE
- appearance: VELOX NEB
- appearance: FOOBIE BLETCH
- appearance: TEMOV
- appearance: GARVEN DEH
- appearance: READ ME
- appearance: ETAOIN SHRDLU
- appearance: LOREM IPSUM
- appearance: FNORD
- appearance: KO BATE
- appearance: ABRA KA DABRA
- appearance: ASHPD SODALG
- appearance: MAPIRO MAHAMA DIROMAT
- appearance: GNIK SISI VLE
- appearance: HAPAX LEGOMENON
- appearance: EIRIS SAZUN IDISI
- appearance: PHOL ENDE WODAN
- appearance: GHOTI
- appearance: ZLORFIK
- appearance: VAS CORP BET MANI
- appearance: STRC PRST SKRZ KRK
- appearance: XOR OTA

View File

@@ -122,3 +122,44 @@
- name: Blank Paper
appearance: plain
cost: 0
appearances:
- appearance: parchment
- appearance: stained
- appearance: red
- appearance: dark green
- appearance: indigo
- appearance: plaid
- appearance: dusty
- appearance: glittering
- appearance: vellum
- appearance: cloth
- appearance: orange
- appearance: turquoise
- appearance: magenta
- appearance: light brown
- appearance: bronze
- appearance: shining
- appearance: ragged
- appearance: leather
- appearance: yellow
- appearance: cyan
- appearance: purple
- appearance: dark brown
- appearance: copper
- appearance: dull
- appearance: dog eared
- appearance: white
- appearance: velvet
- appearance: light blue
- appearance: violet
- appearance: gray
- appearance: silver
- appearance: thin
- appearance: mottled
- appearance: pink
- appearance: light green
- appearance: dark blue
- appearance: tan
- appearance: wrinkled
- appearance: gold
- appearance: thick

View File

@@ -125,3 +125,45 @@
- name: Blank Paper
appearance: plain
cost: 0
appearances:
- appearance: parchment
- appearance: stained
- appearance: red
- appearance: dark green
- appearance: indigo
- appearance: plaid
- appearance: dusty
- appearance: glittering
- appearance: vellum
- appearance: cloth
- appearance: orange
- appearance: turquoise
- appearance: magenta
- appearance: light brown
- appearance: bronze
- appearance: shining
- appearance: ragged
- appearance: leather
- appearance: yellow
- appearance: cyan
- appearance: purple
- appearance: dark brown
- appearance: copper
- appearance: dull
- appearance: dog eared
- appearance: white
- appearance: velvet
- appearance: light blue
- appearance: violet
- appearance: gray
- appearance: silver
- appearance: thin
- appearance: mottled
- appearance: pink
- appearance: light green
- appearance: dark blue
- appearance: tan
- appearance: wrinkled
- appearance: gold
- appearance: thick
- appearance: checkered

View File

@@ -47,3 +47,31 @@
cost: 500
- name: Wishing
cost: 500
appearances:
- appearance: aluminum
- appearance: curved
- appearance: iridium
- appearance: marble
- appearance: short
- appearance: uranium
- appearance: balsa
- appearance: ebony
- appearance: iron
- appearance: oak
- appearance: silver
- appearance: zinc
- appearance: brass
- appearance: forked
- appearance: jeweled
- appearance: pine
- appearance: spiked
- appearance: copper
- appearance: glass
- appearance: long
- appearance: platinum
- appearance: steel
- appearance: crystal
- appearance: hexagonal
- appearance: maple
- appearance: runed
- appearance: tin