Bay 12 Games Forum

Please login or register.

Login with username, password and session length
Advanced search  

Poll

One or the other... vote once for #1 and once for #2.

#1: Put the Alarm Siren in the Military Garrison, it fits and is one buildings less.
#1: Keep the Alarm Siren seperate, I want to have it near my other levers.
#2: I have traded with Gnomes, build Artificer and Weather Control Station.
#2: I have NOT traded with Gnomes, did not have the chance to build their buildings.

Pages: 1 ... 458 459 [460] 461 462 ... 749

Author Topic: ☼MASTERWORK-DF☼ V.3 - New release and old post. This will be locked later.  (Read 1855899 times)

zenerbufen

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6885 on: September 16, 2012, 05:07:26 pm »

Remember that this is Alpha! that means it's a pre-release preview of unfinished work. There are still things missing that are still planned. Any serious towers should still be built with 1.9.5!

Shingy

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6886 on: September 16, 2012, 05:45:46 pm »

Indeed.
Got some bug-reports for Meph:
I tried the arena.
I found:
Dynamite weapons and armors. Yep.
Manticore armors and weapons.
Runic wooden weapons.
The leather and wood are now local:mat, I mean there are goblin leather, giant panda leather, etc. Same for meat and bones.
Lay Pewter, Fine pewter etc... Weapons and armors. Is this intended?
No more "Berserker" in arena. Did you remove them?
"Unknown frozen creature substance pouch"
It seems that some raws are duplicated.

I'll edit if I find more in fortress mode.

Oh, also I found a "rusty steel" material. Seems interesting.

Edit: The leather and meat is only in the arena. In fact, I'm not sure, I didn't butcher anything yet. I just noticed two more wood types in the embark, which are quite expensive.
Problem:
You can get "blessing of armok" gems for 0 pts in the embark. You can also embark with fossils and such. Also, you can't embark with crates.
I'm doing this so Meph can sort out bugs and unfinished work.

Edit 2: I butchered a faedog corpse corpse. Its meat is called "meat", same for the rest eatable things, his skin is "faedog corpse corpse skin", same for the spin tissue and his bones.
« Last Edit: September 16, 2012, 06:19:14 pm by Shingy »
Logged

arclance

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6887 on: September 16, 2012, 06:04:29 pm »

Traceback (most recent call last):
  File "C:\Users\user\Downloads\MDF2\MasterworkDF Settings.py", line 110, in <module>
    dd.append([d[-1][0], d[-1][1], len(totdat[j]), d[-1][2]])
IndexError: list index out of range
I found another problem with the same cause as this bug.
The write button will fail partway through when it gets to the file that caused the earlier bug.
This does not crash the GUI so you would not notice it unless you were running the GUI in a terminal.
Not all of the raws will be updated when this happens and could be why people are seeing raw duplication bugs.

Here is a new version of the GUI code with that bug fixed.
Code: [Select]
from tkinter import *
import os
import fnmatch
from tkinter import tix
from tkinter import filedialog

dir1 = 'MasterworkDwarfFortress/raw/objects/'
dir2 = 'Dwarf Fortress/raw/objects/'

match = ['creature*','item*','inorganic*','reaction*','plant*','entity*']
files = []
for m in match:
for file in os.listdir(dir1):
if fnmatch.fnmatch(file, m):
files.append(file)

totdat = [[]]*len(files)
for i in range(len(files)):
f = open(dir1+files[i], mode="rt", buffering=1, encoding="ISO-8859-1")
dat = []
for row in f:
dat.append(row)
totdat[i] = dat
f.close()

ddtot = [[]]*len(totdat)
for j in range(len(totdat)):
d = []
for i in range(len(totdat[j])):
par = totdat[j][i].partition(':')[0]
if (par == '[CREATURE') or (par == '!!!CREATURE'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[REACTION') or (par == '!!!REACTION'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[INORGANIC') or (par == '!!!INORGANIC'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[PLANT') or (par == '!!!PLANT'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[ITEM_AMMO') or (par == '!!!ITEM_AMMO'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[ITEM_ARMOR') or (par == '!!!ITEM_ARMOR'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[ITEM_FOOD') or (par == '!!!ITEM_FOOD'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[ITEM_GLOVES') or (par == '!!!ITEM_GLOVES'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[ITEM_HELM') or (par == '!!!ITEM_HELM'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[ITEM_INSTRUMENT') or (par == '!!!ITEM_INSTRUMENT'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[ITEM_PANTS') or (par == '!!!ITEM_PANTS'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[ITEM_SHIELD') or (par == '!!!ITEM_SHIELD'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[ITEM_SHOES') or (par == '!!!ITEM_SHOES'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[ITEM_SIEGEAMMO') or (par == '!!!ITEM_SIEGEAMMO'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[ITEM_TOOL') or (par == '!!!ITEM_TOOL'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[ITEM_TOY') or (par == '!!!ITEM_TOY'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[ITEM_TRAPCOMP') or (par == '!!!ITEM_TRAPCOMP'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
elif (par == '[ITEM_WEAPON') or (par == '!!!ITEM_WEAPON'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!1') != 0:
d[-1][2] = 'off'
elif (par == '[ENTITY') or (par == '!!!ENTITY'):
d.append([totdat[j][i].partition(':')[2].partition(']')[0], i, 'on'])
if par.count('!!!') != 0:
d[-1][2] = 'off'
if len(d) != 0:
dd = []
for i in range(len(d)-1):
dd.append([d[i][0], d[i][1], d[i+1][1], d[i][2]])
dd.append([d[-1][0], d[-1][1], len(totdat[j]), d[-1][2]])
ddtot[j] = dd

if os.path.exists('configuration.txt'):
pass
else:
for i in range(len(files)):
A = files[i].partition('_')[0]
B = files[i].partition('_')[2].partition('.')[0]
for j in range(len(ddtot[i])):
C = ddtot[i][j][0]
ddtot[i][j][0] = A+'.'+B+'.'+C

def save():
fn = filedialog.asksaveasfilename()
wf = open(fn, 'w')
for i in range(len(ddtot)):
for j in range(len(ddtot[i])):
wf.write(ddtot[i][j][0]+'#'+ddtot[i][j][3]+'\n')
wf.close()

def load():
fn = filedialog.askopenfilename()
wf = open(fn)
dat = []
for row in wf:
dat.append(row)
wf.close()
for i in range(len(dat)):
for j in range(len(ddtot)):
for k in range(len(ddtot[j])):
if dat[i].partition('#')[0] == ddtot[j][k][0]:
ddtot[j][k][3] = dat[i].partition('#')[2].partition('\n')[0]

def write():
for i in range(len(files)):
if len(ddtot[i]) != 0:
wf = open(dir2 + files[i], 'w')
for k in range(ddtot[i][0][1]):
wf.write(totdat[i][k])
for j in range(len(ddtot[i])):
for z in range(ddtot[i][j][1],ddtot[i][j][2]):
if ddtot[i][j][3] == 'off':
wf.write(totdat[i][z].replace('[','!!!'))
elif ddtot[i][j][3] == 'on':
wf.write(totdat[i][z].replace('!!!','['))
wf.close()

if __name__ == '__main__':
root = tix.Tk()

canvas = tix.Canvas(root, width = 500, height=500)
canvas.grid(row=0, column=0, sticky=N+S+E+W)
root.grid_rowconfigure(0,weight=1)
frame = tix.Frame(canvas)
frame.rowconfigure(1,weight=1)
frame.columnconfigure(1,weight=1)

class states:

def __init__(self,ty):
self.t =Toplevel(root)
self.ty = ty
self.top = []
self.ord = []
self.sub = []
self.tot =  []
self.base = []
self.makelist()
cls = tix.Button(self.t, text='Close', command=self.close)
cls.grid()

def close(self):
self.t.destroy()

def update(self,item):
if len(item.split('.')) == 2:
for i in range(len(ddtot)):
for j in range(len(ddtot[i])):
val = ddtot[i][j][0].split('.')[0]+'.'+ddtot[i][j][0].split('.')[1]
if val == item:
if self.cl.getstatus(item) == 'off':
self.cl.setstatus(ddtot[i][j][0], 'off')
ddtot[i][j][3] = 'off'
elif self.cl.getstatus(item) == 'on':
self.cl.setstatus(ddtot[i][j][0], 'on')
ddtot[i][j][3] = 'on'
elif len(item.split('.')) == 3:
for i in range(len(ddtot)):
for j in range(len(ddtot[i])):
if item == ddtot[i][j][0]:
ddtot[i][j][3] = self.cl.getstatus(item)

def update2(self,item):
if len(item.split('.')) == 2:
meti = item.partition('.')[2]
for i in range(len(self.ord)):
if self.ord[i].count(meti) != 0:
for j in range(len(self.sub)):
if (self.ord[i][1] == self.sub[j][0]) and (self.ord[i][0] == item.partition('.')[0]):
temp = self.ord[i][0]+'.'+self.ord[i][1]+'.'+self.sub[j][1]
if self.cl.getstatus(item) == 'off':
self.cl.setstatus(temp, 'off')
elif self.cl.getstatus(item) == 'on':
self.cl.setstatus(temp, 'on')
for k in range(len(ddtot)):
for l in range(len(ddtot[k])):
if ddtot[k][l][0] == temp:
ddtot[k][l][3] = self.cl.getstatus(temp)
elif len(item.split('.')) == 3:
for i in range(len(ddtot)):
for j in range(len(ddtot[i])):
if item == ddtot[i][j][0]:
ddtot[i][j][3] = self.cl.getstatus(item)

def makelist(self):
if os.path.exists('configuration.txt'):
self.cl = tix.CheckList(self.t, width=500, height=400, browsecmd=self.update2)
self.cl.grid()
f = open('configuration.txt')
conf = []
for row in f:
conf.append(row)
f.close()
for i in range(len(conf)):
if conf[i].partition(' ')[0] == 'BASE':
self.base.append([conf[i].partition(' ')[2], i, 0])
for i in range(len(self.base)-1):
self.base[i][2] = self.base[i+1][1]
self.base[-1][2] = len(conf)
for vl in self.base:
if vl[0].partition('\n')[0] == self.ty.upper():
for val in conf[vl[1]:vl[2]]:
if val.partition(' ')[0] == 'TOP':
self.top.append(val.partition(' ')[2].partition('\n')[0])
self.cl.hlist.add(self.top[-1], text=self.top[-1])
if val.partition(' ')[0] == 'ORD':
self.ord.append([self.top[-1], val.partition(' ')[2].partition('\n')[0]])
self.cl.hlist.add(self.top[-1]+'.'+self.ord[-1][1], text=self.ord[-1][1])
self.cl.setstatus(self.top[-1]+'.'+self.ord[-1][1], 'on')
if val.partition(' ')[0] == 'SUB':
self.sub.append([self.ord[-1][1],val.partition(' ')[2].partition('\n')[0]])
self.cl.hlist.add(self.ord[-1][0]+'.'+self.ord[-1][1]+'.'+self.sub[-1][1], text=self.sub[-1][1])
self.tot.append(self.ord[-1][0]+'.'+self.ord[-1][1]+'.'+self.sub[-1][1])
self.cl.autosetmode()
for i in range(len(ddtot)):
for j in range(len(ddtot[i])):
for k in range(len(self.sub)):
if self.sub[k][1] == ddtot[i][j][0]:
ddtot[i][j][0] = self.tot[k]
self.cl.setstatus(ddtot[i][j][0], ddtot[i][j][3])
elif ddtot[i][j][0] == self.tot[k]:
self.cl.setstatus(ddtot[i][j][0], ddtot[i][j][3])
else:
self.cl = tix.CheckList(self.t, width=500, height=400, browsecmd=self.update)
self.cl.grid()
self.cl.hlist.add(self.ty, text=self.ty + 's')
for i in range(len(files)):
if files[i].partition('_')[0] == self.ty:
self.top.append([files[i].partition('_')[0],files[i].partition('_')[2].partition('.')[0]])
self.cl.hlist.add(self.top[-1][0] +'.'+ self.top[-1][1], text=self.top[-1][1])
self.cl.setstatus(self.top[-1][0] +'.'+ self.top[-1][1], "on")
for j in range(len(ddtot[i])):
if ddtot[i][j][0].partition('.')[0] == self.top[-1][0]:
self.cl.hlist.add(ddtot[i][j][0], text=ddtot[i][j][0].partition('.')[2].partition('.')[2])
else:
self.sub.append(ddtot[i][j][0])
self.cl.hlist.add(self.top[-1][0] +'.'+ self.top[-1][1] + '.' + self.sub[-1], text=ddtot[i][j][0])
ddtot[i][j][0] = self.top[-1][0] +'.'+ self.top[-1][1] + '.' + self.sub[-1]
self.cl.setstatus(ddtot[i][j][0], ddtot[i][j][3])
self.cl.autosetmode()

canvas.create_window(0,0,anchor=NW,window=frame)
frame.update_idletasks()
canvas.config(scrollregion=canvas.bbox('all'))

def creatures():
states('creature')
def items():
states('item')
def reactions():
states('reaction')
def entities():
states('entity')
def inorganics():
states('inorganic')
def plants():
states('plant')

########################################################################
if os.path.exists('metatags.txt'):

def func(q):
if textvar[q].get() == txt[q] + ' Off':
for i in range(len(ddtot)):
for j in range(len(ddtot[i])):
for k in range(ddtot[i][j][1],ddtot[i][j][2]):
totdat[i][k] = totdat[i][k].replace('NO'+tag[q]+'![','NO'+tag[q]+'!!')
totdat[i][k] = totdat[i][k].replace('YES'+tag[q]+'!!','YES'+tag[q]+'![')
textvar[q].set(txt[q] + ' On')
elif textvar[q].get() == txt[q] + ' On':
for i in range(len(ddtot)):
for j in range(len(ddtot[i])):
for k in range(ddtot[i][j][1],ddtot[i][j][2]):
totdat[i][k] = totdat[i][k].replace('NO'+tag[q]+'!!','NO'+tag[q]+'![')
totdat[i][k] = totdat[i][k].replace('YES'+tag[q]+'![','YES'+tag[q]+'!!')
textvar[q].set(txt[q] + ' Off')

f = open('metatags.txt')
tags = []
txt = []
tag = []
textvar = []
b = []
z = 0
for row in f:
tags.append(row)
f.close()
for val in tags:
txt.append(val.partition('/')[2].partition('\n')[0])
tag.append(val.partition('/')[0])
textvar.append(StringVar())
textvar[z].set(txt[z] + ' On')
b.append(tix.Button(frame, textvariable=textvar[z], command=lambda z=z:func(z)))
b[z].grid()
z = z + 1

########################################################################

b1 = tix.Button(frame, text='Creatures', command=creatures)
b2 = tix.Button(frame, text='Reactions', command=reactions)
b3 = tix.Button(frame, text='Entities', command=entities)
b4 = tix.Button(frame, text='Items', command=items)
b5 = tix.Button(frame, text='Plants', command=plants)
b6 = tix.Button(frame, text='Inorganics', command=inorganics)
b7 = tix.Button(frame, text='Load', command=load)
b8 = tix.Button(frame, text='Save', command=save)
b9 = tix.Button(frame, text='Write', command=write)
b1.grid()
b2.grid()
b3.grid()
b4.grid()
b5.grid()
b6.grid()
b7.grid()
b8.grid()
b9.grid()
root.update()
root.mainloop()
I you used the GUI you should rerun it using the new code and regen your world.
Logged
I think that might be one of the most dwarfen contraptions I've ever seen the blueprints of.
The Bloodwinery v1.3.1 | Dwarven Lamination v1.5 | Tileset Resizer v2.5 - Mac Beta Tester Needed
Sigtext

Shingy

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6888 on: September 17, 2012, 04:03:53 am »

I used the new version of your gui arclance, and I noticed nothing new in the parameters. Perhaps it didn't cause raw duplication, perharps it's already in the game. For now, I noticed nothing.
Still, this is strange. The leather and fur I get are common (no faedog leather), unlike in the arena. That's strange.
I hope that one day Meph will add an option to have it like vanilla df. I like giant panda leather coat.
Logged

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6889 on: September 17, 2012, 08:53:04 am »

The arena and the stockpile menu take directly from the raws, the "wombat leather" etc still exists, there is simply no way to create it in fortress mode, so no worries, all this still works. I will most definetly not include an option for this, since it is a crucial component. The rest, dynamite and manticore is ok, works like intended. Did you test them, they make quite a mess... :) and thanks for the blessing of armok report, I forgot to remove gem_pref from the entity.

The gui has no special settings, since I dont want to use/work with a version that is unfinished. I hope that any of the more then willing volunteers here manage a working python gui for all platforms, then I will start adding the settings and tilesets.

Quote
@ Meph
Do you want me to upload a new archive with the fixed version of the GUI since you are stuck in the Internet Stone Age?
Yes please. :)

I havent been home yesterday, just got back right now, so no new progress.
Logged
::: ☼Meph Tileset☼☼Map Tileset☼- 32x graphic sets with TWBT :::
::: ☼MASTERWORK DF☼ - A comprehensive mod pack now on Patreon - 250.000+ downloads and counting :::
::: WorldBicyclist.com - Follow my bike tours around the world - 148 countries visited :::

arclance

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6890 on: September 17, 2012, 09:34:20 am »

I used the new version of your gui arclance, and I noticed nothing new in the parameters.
The second fix is entirely invisible to the user.
What happened was that the script stopped partway through saving your settings in the game raw files which is a good way to mess up the raws
It does not do that anymore all the changes you make in the GUI will be successfully save now.

Quote
@ Meph
Do you want me to upload a new archive with the fixed version of the GUI since you are stuck in the Internet Stone Age?
Yes please. :)
I will do that after I eat breakfast.
Logged
I think that might be one of the most dwarfen contraptions I've ever seen the blueprints of.
The Bloodwinery v1.3.1 | Dwarven Lamination v1.5 | Tileset Resizer v2.5 - Mac Beta Tester Needed
Sigtext

arclance

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6891 on: September 17, 2012, 10:53:29 am »

Logged
I think that might be one of the most dwarfen contraptions I've ever seen the blueprints of.
The Bloodwinery v1.3.1 | Dwarven Lamination v1.5 | Tileset Resizer v2.5 - Mac Beta Tester Needed
Sigtext

Teach

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6892 on: September 17, 2012, 12:31:49 pm »

Repeats the body type in the description of the dwarf. 
ex.
 He is scrawny.  His long hair is neatly combed. He is scrawny.
Logged

Shingy

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6893 on: September 17, 2012, 01:30:03 pm »

The new workshops seem good. I'll try the reactions when I get them.
Just a little thing: in my opinion, heartwood and elderwood might be too common. I can build everything with them.

Edit: By the way, is it normal that the grazer tag is back?
Edit2: Sad, I wanted to test the magic system but there are no reactions yet.
« Last Edit: September 17, 2012, 01:46:14 pm by Shingy »
Logged

Purgatory

  • Bay Watcher
  • Many Questions Asked
    • View Profile
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6894 on: September 18, 2012, 03:49:46 am »

You should make needing the crucible to refine iron more obvious, because some people (like me) dont know and end up not being able to use iron.
Logged
Signature Is Here.

Panopticon

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6895 on: September 18, 2012, 04:44:26 am »

When I run into a block like that, I just start building workshops until one of them does the stuff I want.
Logged

Firehawk45

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6896 on: September 18, 2012, 09:39:32 am »

When I run into a block like that, I just start building workshops until one of them does the stuff I want.

Thats pretty much how i learned DF :D
Logged

Shingy

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6897 on: September 18, 2012, 02:27:29 pm »

What.
A sea lamprey (a vermin fish) got back to life in my fort (terrifying biome) and attacked a giant sponge.
I... never thought this could happen. It the reports, it's called "sea lamprey corpse", on its tile too, but it's not in the units list.
What? I think it's related to masterwork, did you do anything that could have caused it Meph?
Anyway, very good alpha, I didn't run in any problem.

Edit: It's attacking a giant sponge.
Logged

dead

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6898 on: September 18, 2012, 03:26:33 pm »

i havent checked the forums in about a month and look at all these deliciousness that you have given me. i shall slaughter many dwarfs with magma in thy name tonight...
Logged

Torgan

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF2 - Alpha
« Reply #6899 on: September 18, 2012, 04:09:46 pm »

This isn't from the alpha but just regular Masterwork, but my armourer mood just got me an iridum Indestructible Armour! Is that wearable by dwarves as I'm having some problems equipping it for some reason. Awesome name if nothing else, and makes up for all those times my armourer has made a legendary copper boot or something equally useless.
Logged
Pages: 1 ... 458 459 [460] 461 462 ... 749