Bay 12 Games Forum

Please login or register.

Login with username, password and session length
Advanced search  
Pages: [1] 2 3 ... 9

Author Topic: ☼MASTERWORK☼ DF - Teamspeak  (Read 19627 times)

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
☼MASTERWORK☼ DF - Teamspeak
« on: September 20, 2012, 09:41:41 am »

Due to lack of time and proper organization from my side it seems that there is a bit of chaos. To help the entire progress I think it would be best to collect all the work, names or helpers, and current projects here. I know that there are several people doing things for the mod.

Everyone who wants to help and/or take on a project should post here and say what exactly he or she does. I will keep this sorted, and see that everyone is helped when help is needed.

Participants


Meph - Masterwork DF modder.
Started this madness, mostly does Raws, a bit of VB and Html.

Zenerbufen - Linux & Mac compatible versions & Python
Zenerbufen leads the official succession forts and did updates for mac and linux. He is also working on a python GUI, together with other people.

Arclance - Raws & Python
Working on a pythong GUI, together with other people. Also gave the idea for the bloodwinery.

Roses - Python
Did write the working back end of the Python GUI.

smakemupagus - Raws
Started the Orc fortress Plugin. It is well advanced and playable. It has its own thread and many unique features. Major addition.

Shingy - Raws
Started a human fortress Plugin. I got some reports, but havent seen any raws yet. No playable version exists yet.

Oliverosky - Raws
Started a lizard fortress Plugin. I got some reports, and there is an alpha to download, but not many additions so far.

mechanixm - Raws
Repeatetly offered help, mostly with testing, balancing and bugfinding in raws. Havent heard from him in a while.

expwnent - C++
Wrote the custom dfhack plugins that allow dwarves to run them by reactions. Proposed many new and unique ideas, both for the mod and his own project. Havent heard from him in a while.

socrates27 - All kinds of progamming languages
Offered help and portait some interest in MDF. Nothing further has been discussed so far. If you want to add something, please let me know.

wrex - Raws and testing
Wrex has done a lot of arena testing and proposed changes to the weapons attack ratings. Was working together on smake on that.

Poonyen - Music
Made DF specific songs and offered me to include them with custom soundsense packs for the music stage system. Busy in RL, and I havent started this project yet.

godlysockpuppet - Html
Helped settings up the basis for the new manual.

Vherid - Weird text formatting
Helped my understanding the wtf formats and modding of those. Pleasently surprised me with a selfmade tutorial on those. Has nothing further to do with the mod, just wanted to mention it.

Projects
Mod - Masterwork DF2 Alpha Download
Manual Download


There is a big pile of unfinished business floating around. The mod itself, the manual, the dfhack plugins, soundsense plugins, possible tilesets, possible stonesense sprites, and most of all: The new python gui. I just want to sort this in an orderly fashion, and assign people to it. If everyone knows who is doing what, and how far each different part is, the better. I will start adding projects to this section as soon as I hear from people in this thread. There is also the chance that I exaggerate because all this is not necessary for a DF mod, but somehow it feels like it indeed is. ;)

There is also a long list of people that have helped me with raws, or whose work I was allowed to add to the mod. I will not name them here, because the dont work on MDF, but on their own, more modular mods, that just happen to add to the bigger project. Thanks to everyone.

More mod specific is the continious interest of ishar, panopticum and firehawk in the succession forts, and the old graphical guides done by flobulon. (havent heard from him in ages)
« Last Edit: September 20, 2012, 04:51:48 pm by Meph »
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 :::

IamanElfCollaborator

  • Bay Watcher
  • Resident Shipper God and Freyjapiller
    • View Profile
Re: ☼MASTERWORK☼ DF - Teamspeak
« Reply #1 on: September 20, 2012, 09:50:06 am »

Hm. I'm considering making either a moogle plugin or just adding in some new megas (Not FF,Kaiju or Persona related)in. Perhaps make a sort of plugin tutorial? Or do I just make a plugin as I would any mod?

Shingy

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF - Teamspeak
« Reply #2 on: September 20, 2012, 09:55:55 am »

Good idead Meph! Indeed, it will make it easier as we are many modders trying to help!
About my project, I currently paused it because the alpha is kind of bugged. It's too early to start working on some of the major improvements.
Anyway, I have some raws for the moment (mostly related to steel production, plants, nobles and a bit of metal working).
I don't think that I can give out anything yet, as it is very early alpha.
Logged

arclance

  • Bay Watcher
    • View Profile
Re: ☼MASTERWORK☼ DF - Teamspeak
« Reply #3 on: September 20, 2012, 10:03:51 am »

Roses and I have gotten most of the features of his first GUI recreated with PyQt so they can be used with zenerbufens main GUI.

zenerbufen has the list section imported into his main GUI but I don't think the buttons are in there yet.

This is the code we have now for the screenshot I posted.
Code: [Select]
from PyQt4 import QtCore, QtGui
import time, os.path
###
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
####################################################
#DEBUG_LEVEL = 3 # How Much Debug Information To Ouput.
## 0 Disables Debug Output.
## Higher Numbers Produce More Output, Max Value is 6.
## DEBUG_LEVEL Higher Than 1 May Cause Lag And Graphics Glitches.
## DEBUG_LEVEL 3 or 4 is recommeded.
## DEBUG_LEVEL 6 is for debugging parseNestedList3()
####################################################
#style = "Plastique" #acceptable values:Cleanlooks Plastique CDE Motif Windows Macintosh GTK+
####################################################
if __name__ == '__main__':
import sys
DEBUG_LEVEL = 3
style = "Plastique"
loadState = True # not working
saveStateDir = "./stateSaves/"

import traceback # also need sys for error handler
# pre-alocate memory for use in debugging "out of memory" errors.
rainydayfund = [[] for x in range(16*1024)]  # or however much you need
def handle_exception(exc_type, exc_value, exc_traceback):
""" handle all exceptions """
if DEBUG_LEVEL >= 1:
print("###### Exception Handler ###############")
#endif - DEBUG
### setup for "out of memory" errors
global rainydayfund
del rainydayfund
## KeyboardInterrupt is a special case.
## We don't raise the error dialog when it occurs.
if issubclass(exc_type, KeyboardInterrupt):
if QtGui.qApp:
QtGui.qApp.quit()
#endif
return
#endif

filename, line, dummy, dummy = traceback.extract_tb( exc_traceback ).pop()
filename = os.path.basename( filename )
error = "%s: %s" % ( exc_type.__name__, exc_value )

#QtGui.QMessageBox.critical(None,"Error", "<html>A critical error has occured.<br/> " + "<b>%s</b><br/><br/>" % error + "It occurred at <b>line %d</b> of file <b>%s</b>.<br/>" % (line, filename) + "</html>")
print("Closed due to an error. This is the full error report:\n" + "".join(traceback.format_exception(exc_type, exc_value, exc_traceback)))
sys.exit(1)
#enddef

# install handler for exceptions
sys.excepthook = handle_exception
#endif
if not 'DEBUG_LEVEL' in locals(): # set DEBUG_LEVEL when imported if it is not set by the importer
DEBUG_LEVEL = 0
#endif

####################################################
class mainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(mainWindow, self).__init__(parent)
########################################
self.resize(400, 350)
font = QtGui.QFont()
font.setFamily(_fromUtf8("Liberation Sans"))
font.setPointSize(10)
font.setBold(False)
font.setItalic(False)
font.setWeight(50)
self.setFont(font)
"""
iconSize = QtCore.QSize()
iconSize.setHeight(16)
iconSize.setWidth(16)
self.setIconSize(iconSize)
"""
if sys.platform == "linux2":
QtGui.QApplication.syncX()
#endif
QtGui.QApplication.setStyle(QtGui.QStyleFactory.create(style))
QtGui.QApplication.setPalette(mainPallet())
###########################################
self.mainWidget = QtGui.QWidget()
self.setCentralWidget(self.mainWidget)
self.mainGrid = QtGui.QGridLayout()
self.mainWidget.setLayout(self.mainGrid)
self.treeView = CheckBoxTreeView(self)
self.mainGrid.addWidget(self.treeView, 1, 0)
self.mainGrid.setRowMinimumHeight(0, 20)
self.buttonGrid = QtGui.QGridLayout()
self.mainGrid.addLayout(self.buttonGrid, 0, 0)
self.buttonLoad = Button_Load()
self.buttonLoad.clicked.connect(self.treeView.loadButton)
self.buttonGrid.addWidget(self.buttonLoad, 0, 0)
self.buttonSave = Button_Save()
self.buttonSave.clicked.connect(self.treeView.saveButton)
self.buttonGrid.addWidget(self.buttonSave, 0, 1)
self.buttonWrite = Button_Write()
self.buttonWrite.clicked.connect(self.treeView.write) # Need to assign
self.buttonGrid.addWidget(self.buttonWrite, 0, 2)
#self.closeEvent(self.treeView.saveState())
#enddef

def closeEvent(self, event):
self.treeView.saveState()
#enddef
#endclass

class Button_Load(QtGui.QPushButton):
def __init__(self, parent = None):
super(Button_Load, self).__init__(parent)
self.setText("Load")
self.setMinimumSize(30,20)
self.setStyleSheet(_fromUtf8(" background-color: rgb(51, 51, 51);  "))
#enddef
#endclass

class Button_Save(QtGui.QPushButton):
def __init__(self, parent = None):
super(Button_Save, self).__init__(parent)
self.setText("Save")
self.setMinimumSize(30,20)
self.setStyleSheet(_fromUtf8(" background-color: rgb(51, 51, 51);  "))
#enddef
#endclass

class Button_Write(QtGui.QPushButton):
def __init__(self, parent = None):
super(Button_Write, self).__init__(parent)
self.setText("Write")
self.setMinimumSize(30,20)
self.setStyleSheet(_fromUtf8(" background-color: rgb(51, 51, 51);  "))
#enddef
#endclass

##### TreeView ##########
class StdItemModel(QtGui.QStandardItemModel):
def __init__(self, parent = None):
super(StdItemModel, self).__init__(parent)
#enddef
#endclass

class CheckBoxTreeView(QtGui.QTreeView):
def __init__(self, parent = None, altered_dir = './alteredraws/', game_dir = '../df/'):
super(CheckBoxTreeView, self).__init__(parent)
self.setSelectionMode(3) ### Makes Shift Click And Ctrl Click Work (Toggling Multiple Selections Does Not Work Yet)
self.setAlternatingRowColors(True)
self.setUniformRowHeights(True)
###########################################
self.altered_dir = altered_dir
self.game_dir = game_dir
###########################################
timeStart = time.time()
self.parseRaws()
self.stdmodel = StdItemModel()
###########################################
self.MainUI3()
###########################################
self.stdmodel.itemChanged.connect(self.on_itemChanged) # Send Signal to self.on_itemChanged when a checkbox is clicked
self.setModel(self.stdmodel) # Add Elements
self.selModel = self.selectionModel()
###### Setup Control Variables #########
self.multiSelect = False
self.clickInSelection = False
if DEBUG_LEVEL >= 1:
print("timeDiff: " + str(time.time() - timeStart) + "\n" + "#" * 40)
#endif - DEBUG
#enddef

def setModel(self, model):
super(CheckBoxTreeView, self).setModel(model)
self.connect(self.selectionModel(), QtCore.SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), self.on_selectionChanged)
#enddef

def loadButton(self):
if DEBUG_LEVEL >= 3:
print("###### Load Button #####################")
#endif
dialog = QtGui.QFileDialog()
dialog.ViewMode(QtGui.QFileDialog.Detail)
dialog.setFileMode(QtGui.QFileDialog.AnyFile)
filename = dialog.getOpenFileName(self, 'Open File', '.')
if filename != '':
if DEBUG_LEVEL >= 3:
print(str(filename))
#endif
self.load(filename)
self.stdmodel = StdItemModel()
self.MainUI3()
self.stdmodel.itemChanged.connect(self.on_itemChanged) # Send Signal to self.on_itemChanged when a checkbox is clicked
self.setModel(self.stdmodel) # Add Elements
self.selModel = self.selectionModel()
else:
if DEBUG_LEVEL >= 2:
print("No File Selected")
#endif - DEBUG
#endif
#enddef

def saveButton(self):
if DEBUG_LEVEL >= 3:
print("###### Save Button #####################")
#endif
dialog = QtGui.QFileDialog()
dialog.ViewMode(QtGui.QFileDialog.Detail)
dialog.setFileMode(QtGui.QFileDialog.AnyFile)
filename = dialog.getSaveFileName(self, 'Save File', '.')
if filename != '':
if DEBUG_LEVEL >= 3:
print(str(filename))
#endif
self.save(filename)
self.MainUI3()
else:
if DEBUG_LEVEL >= 2:
print("No File Selected")
#endif - DEBUG
#endif
#enddef

def loadState(self):
if loadState == True:
if DEBUG_LEVEL >= 3:
print("###### Loading Save State ##############")
#endif - DEBUG
if os.path.exists(saveStateDir + 'saveState.txt') == True:
self.load(saveStateDir + 'saveState.txt')
elif DEBUG_LEVEL >= 2:
print("Save State Not Found")
#endif
#endif
#endif

def saveState(self):
if loadState == True:
if DEBUG_LEVEL >= 3:
print("###### Saving State ####################")
#endif - DEBUG
self.save(saveStateDir + 'saveState.txt')
#endif
#endif

def MainUI3(self):
orderedList = []
currentgroup = ""
oldGroup = " "
groupIndex = -1
for i in range(len(self.ddtot)):
if len(self.ddtot[i]) != 0:
currentGroup = self.ddtot[i][0][0].split(".")[0]
if currentGroup != oldGroup:
groupIndex += 1
orderedList.append([currentGroup])
oldGroup = currentGroup
#endif
fileContents = []
isOff = False
isOn = False
for j in range(len(self.ddtot[i])):
fileContents.append(self.ddtot[i][j][0].split(".")[2] + "|" + self.ddtot[i][j][3].replace("UNCHECKED","0").replace("CHECKED","2")) # had to fix this (UNCHECKED must be first Because it is longer and containse the word CHECKED)
if self.ddtot[i][j][3] == "CHECKED":
isOn = True
elif self.ddtot[i][j][3] == "UNCHECKED":
isOff = True
#endif  
#endfor
if ((isOn == True) and (isOff == True)): # Only some settings have been disabled
checkState = "1"
elif isOn == True:
checkState = "2"
elif isOff == True:
checkState = "0"
#endif
currentFile = [(self.ddtot[i][0][0].split(".")[1] + "|" + checkState), fileContents]
orderedList[groupIndex].append(currentFile)
#endif
#endfor
"""
f = open("parseOutput.txt", "w")
f.write(str(orderedList))
f.close()
"""
for entry in orderedList:
self.parseNestedList3(entry, -1)
#endfor
#enddef

def parseNestedList3(self, nest, nestLevel):
nestLevel += 1
subFound = 0
for k in range(len(nest)):
if len(nest[k][0]) != 0:
if ((type(nest[k]) != list) and (type(nest[k]) != dict)):
if DEBUG_LEVEL >= 6:
print(str(nest[k]) + " - " + str(nestLevel) + " - " + str(k))
#enif - DEBUG
if ((nestLevel == 0)):
if DEBUG_LEVEL >= 6:
print("Top Level")
#endif - DEBUG
self.upItem = QtGui.QStandardItem(nest[k])
"""
self.upItem.setCheckable(True)
if (("|" in nest[k]) and (nest[k].split("|")[1] == "CHECKED")):
self.upItem.setCheckState(2)
else:
self.upItem.setCheckState(0)
#endif
"""
self.upItem.setEditable(False)
self.stdmodel.appendRow([self.upItem])
else:
if nestLevel == 1:
if DEBUG_LEVEL >= 6:
print("Parent - Top")
#endif - DEBUG
parentItem = self.upItem
else:
if DEBUG_LEVEL >= 6:
print("Parent - " + str(nestLevel - 1))
#endif - DEBUG
parentItem = eval("self.subItem" + str(nestLevel - 1))
#endif
exec("self.subItem" + str(nestLevel) + " = QtGui.QStandardItem(nest[k].split('|')[0])")
exec("self.subItem" + str(nestLevel) + ".setCheckable(True)")
exec("self.subItem" + str(nestLevel) + ".setSelectable(True)")
exec("self.subItem" + str(nestLevel) + ".setEditable(False)")
if (("|" in nest[k]) and (nest[k].split("|")[1] == "CHECKED")):
checked = 2
else:
checked = 1
#endif
exec("self.subItem" + str(nestLevel) + ".setCheckState(int(nest[k].split('|')[1]))") # 0 = uchecked, 1 = paritally checked, 2 = fully checked
if subFound != 0:
rowNum = k - subFound
else:
rowNum = k
#endif
exec("parentItem.insertRow(rowNum, self.subItem" + str(nestLevel) + ")")
#endif
else:
if DEBUG_LEVEL >= 6:
print("Has Child")
#endif
subFound += 1
self.parseNestedList3(nest[k], nestLevel)
#endif
#endif
#endfor
#enddef

#@pyqtSlot(QStandardItem)
def on_itemChanged(self, itemIn):
if DEBUG_LEVEL >= 3:
print("###### Start Check Handler #############")
#endif - DEBUG
#### Toggle Selections #######################################
selectedItems = self.selectedIndexes()
if ((len(selectedItems) > 1) and (itemIn.checkState() != 1)): # Check if there is more than one item selected
self.multiSelect = False
self.clickInSelection = False
if DEBUG_LEVEL >= 3:
print("Multiple Selected")
#endif - DEBUG
self.multiSelect = True
clickedText = itemIn.text()
self.itemsSelected = []
for i in range(len(selectedItems)):
self.itemsSelected.append(self.stdmodel.itemFromIndex(selectedItems[i])) # remember which items are selected (changing the checkboxes screws up "selectedItems")
text = self.itemsSelected[i].text()
if DEBUG_LEVEL >= 3:
print(str(text))
#endif - DEBUG
if text == clickedText: # Check if the last click/button press was in the selection
self.clickInSelection = True
#endif
#endfor
if self.clickInSelection == True:
for i in range(len(self.itemsSelected)):
self.itemsSelected[i].setCheckState(itemIn.checkState()) # toggle the items in the selection
#endfor
else:
self.selModel.clearSelection()
#endif
elif (itemIn.checkState() != 1):
if DEBUG_LEVEL >= 3:
print("Single Selection")
#endif - DEBUG
#endif
##############################################################
#### Also Toggle Children Of The Clicked Checkbox ############
if ((itemIn.checkState() != 1) and (itemIn.hasChildren() == True) and (self.multiSelect == False) and (self.clickInSelection == False)):
if DEBUG_LEVEL >= 3:
print("Toggle Children")
#endif - DEBUG
itemIn.setTristate(False)
stop = False
row = -1
while stop == False:
try:
row += 1
child = itemIn.child(row)
child.setCheckState(itemIn.checkState())
child.setTristate(False)
except Exception as e:
stop = True
#endtry
#endwhile
else:
##############################################################
#### Set Parent Checkboxes To Half State If Only Some Of Their Children Are Deactivated #####
#### Reset The Parent Checkbox When All Of It Children Are Reactivated ######################
if DEBUG_LEVEL >= 3:
print("Toggle Parents")
#endif - DEBUG
stop = False
item = itemIn
while stop == False:
try:
item = item.parent()
stop2 = False
row = -1
allOn = True
allOff = True
while stop2 == False:
try:
row += 1
child = item.child(row)
checkSetting = child.checkState()
if checkSetting != 2:
allOn = False
elif checkSetting != 0:
allOff = False
#endif
except Exception as e:
stop2 = True
#endtry
#endwhile
#print(str(row))
if item.isCheckable() == True:
if allOn == True:
if DEBUG_LEVEL >= 3:
print("ALL ON")
#endif - DEBUG
item.setCheckState(2)
elif allOff == True:
if DEBUG_LEVEL >= 3:
print("ALL OFF")
#endif - DEBUG
item.setCheckState(0)
elif itemIn.checkState() == 0: # Only Set Tristate if child changed to off
item.setCheckState(1)
#endif
#endif
except Exception as e:
stop = True
#endtry
#endwhile
#endif
############################################################################################
#### Update ddtot Table To Match Changes Made In The GUI
state = ['UNCHECKED', 'TRISTATE',  'CHECKED'][itemIn.checkState()]
lineage = [itemIn.text()]
stop = False
item = itemIn
while stop == False:
try:
item = item.parent()
lineage.append(item.text())
except Exception as e:
stop = True
#endtry
#endwhile
lineage.reverse()
nametag = ".".join(lineage)
for i in range(len(self.ddtot)):
for j in range(len(self.ddtot[i])):
if nametag == self.ddtot[i][j][0]:
self.ddtot[i][j][3] = str(state)
#endif
#endfor
#endfor
#### Debugging - Show Which Checkboxes Have Been Toggled #####
if DEBUG_LEVEL >= 3:
print(nametag + " | " + str(state))
#endif - DEBUG
##############################################################
#enddef

def on_selectionChanged(self, newSelection, oldSelection): # called when a selction is changed
newIndexes = newSelection.indexes()
if DEBUG_LEVEL >= 3:
print("###### Selection Changed ###############")
if len(newIndexes) == 0:
newItems = ["None"]
else:
newItems = []
for i in range(len(newIndexes)):
newItems.append(self.stdmodel.itemFromIndex(newIndexes[i]).text())
#endfor
#endif
oldIndexes = oldSelection.indexes()
if len(oldIndexes) == 0:
oldItems = ["None"]
else:
oldItems = []
for i in range(len(oldIndexes)):
oldItems.append(self.stdmodel.itemFromIndex(oldIndexes[i]).text())
#endfor
#endif
print("Old: " + ", ".join(oldItems) + " \nNew: " + ", ".join(newItems))
#endif - DEBUG
if len(newIndexes) == 0:
###### Reset Multiselection After Cleared By Click ################
if DEBUG_LEVEL >= 3:
print("MS: " + str(self.multiSelect) + " |CIS: " + str(self.clickInSelection))
#endif - DEBUG
if ((self.multiSelect == True) and ((self.clickInSelection == False) or (self.clickInSelection == True))):
if DEBUG_LEVEL >= 3:
print("Reset Selection After Multiselect")
#endif - DEBUG
for i in range(len(self.itemsSelected)):
text = self.itemsSelected[i].text()
if DEBUG_LEVEL >= 3:
print(str(text))
#endif - DEBUG
self.selModel.select(self.itemsSelected[i].index(), self.selModel.Select)
#endfor
#self.selModel.update()
#self.update()
#self.multiSelect = False
#self.clickInSelection = False
else:
pass
#self.update()
#endif
#endif
#enddef

if DEBUG_LEVEL >= 5:
def currentChanged(self, newCurrent, oldCurrent): # called when the current Item is changed
if ((self.stdmodel.itemFromIndex(oldCurrent)) != None):
print("Current Item Changed\nOld: " + str(self.stdmodel.itemFromIndex(oldCurrent).text()) + " | New: " + str(self.stdmodel.itemFromIndex(newCurrent).text()))
else:
print("Current Item Changed\nOld: None | New: " + str(self.stdmodel.itemFromIndex(newCurrent).text()))
#endif
#enddef
#endif - DEBUG

def save(self, fn):
#fn = 'testing.txt'
wf = open(fn, 'w', buffering=1, encoding="ISO-8859-1")
for i in range(len(self.ddtot)):
for j in range(len(self.ddtot[i])):
wf.write(self.ddtot[i][j][0]+'#'+self.ddtot[i][j][3]+'\n')
#endfor
#endfor
wf.close()
#enddef

def load(self, fn):
#fn = 'testing.txt'
wf = open(fn, buffering=1, encoding="ISO-8859-1")
dat = []
for row in wf:
dat.append(row)
#endfor
wf.close()
for i in range(len(dat)):
for j in range(len(self.ddtot)):
for k in range(len(self.ddtot[j])):
if dat[i].partition('#')[0] == self.ddtot[j][k][0]:
self.ddtot[j][k][3] = dat[i].partition('#')[2].partition('\n')[0]
#endif
#endfor
#endfor
#endfor
#enddef

def write(self):
if DEBUG_LEVEL >= 3:
print("###### Write Button ####################")
#endif
for i in range(len(self.files)):
wf = open(self.dir2 + self.files[i], 'w', buffering=1, encoding="ISO-8859-1")
#print("################")
#print(str(i) + " - " + str(len(self.ddtot[i])))
if len(self.ddtot[i]) != 0: # might fix crash - Not sure - need confirmation from Roses
#if True:
for k in range(self.ddtot[i][0][1]):
wf.write(self.totdat[i][k])
#endfor
for j in range(len(self.ddtot[i])):
for z in range(self.ddtot[i][j][1],self.ddtot[i][j][2]):
if self.ddtot[i][j][3] == 'UNCHECKED':
wf.write(self.totdat[i][z].replace('[','!!!'))
elif self.ddtot[i][j][3] == 'CHECKED':
wf.write(self.totdat[i][z].replace('!!!','['))
#endif
#endfor
#endfor
#endif
wf.close()
#endfor
if DEBUG_LEVEL >= 3:
print("Write Finished")
#endif
#enddef

def parseRaws(self):
import os
import fnmatch
self.dir1 = self.altered_dir + 'raw/objects/'
self.dir2 = self.game_dir + 'raw/objects/'

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

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

self.ddtot = [[]]*len(self.totdat)
for j in range(len(self.totdat)):
d = []
for i in range(len(self.totdat[j])):
par = self.totdat[j][i].partition(':')[0]
if (par == '[CREATURE') or (par == '!!!CREATURE'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[REACTION') or (par == '!!!REACTION'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[INORGANIC') or (par == '!!!INORGANIC'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[PLANT') or (par == '!!!PLANT'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ITEM_AMMO') or (par == '!!!ITEM_AMMO'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ITEM_ARMOR') or (par == '!!!ITEM_ARMOR'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ITEM_FOOD') or (par == '!!!ITEM_FOOD'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ITEM_GLOVES') or (par == '!!!ITEM_GLOVES'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ITEM_HELM') or (par == '!!!ITEM_HELM'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ITEM_INSTRUMENT') or (par == '!!!ITEM_INSTRUMENT'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ITEM_PANTS') or (par == '!!!ITEM_PANTS'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ITEM_SHIELD') or (par == '!!!ITEM_SHIELD'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ITEM_SHOES') or (par == '!!!ITEM_SHOES'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ITEM_SIEGEAMMO') or (par == '!!!ITEM_SIEGEAMMO'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ITEM_TOOL') or (par == '!!!ITEM_TOOL'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ITEM_TOY') or (par == '!!!ITEM_TOY'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ITEM_TRAPCOMP') or (par == '!!!ITEM_TRAPCOMP'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ITEM_WEAPON') or (par == '!!!ITEM_WEAPON'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
elif (par == '[ENTITY') or (par == '!!!ENTITY'):
d.append([self.totdat[j][i].partition(':')[2].partition(']')[0], i, 'CHECKED'])
#endif
#endfor
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]])
#endfor
dd.append([d[-1][0], d[-1][1], len(self.totdat[j]), d[-1][2]])
self.ddtot[j] = dd
#endif
#endfor
for i in range(len(self.files)):
A = self.files[i].partition('_')[0]
B = self.files[i].partition('_')[2].partition('.')[0]
for j in range(len(self.ddtot[i])):
C = self.ddtot[i][j][0]
self.ddtot[i][j][0] = A+'.'+B+'.'+C
#endfor
#endfor
#print(len(self.ddtot))
#enddef
#endclass

def mainPallet():
palette = QtGui.QPalette()
brush = QtGui.QBrush(QtGui.QColor(238, 238, 238))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
brush = QtGui.QBrush(QtGui.QColor(23, 23, 23))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(28, 28, 28))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Light, brush)
brush = QtGui.QBrush(QtGui.QColor(203, 199, 196))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Midlight, brush)
brush = QtGui.QBrush(QtGui.QColor(19, 19, 19))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Dark, brush)
brush = QtGui.QBrush(QtGui.QColor(184, 181, 178))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Mid, brush)
brush = QtGui.QBrush(QtGui.QColor(238, 238, 238))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 254))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.BrightText, brush)
brush = QtGui.QBrush(QtGui.QColor(238, 238, 238))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush)
brush = QtGui.QBrush(QtGui.QColor(23, 23, 23))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(23, 23, 23))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(17, 17, 17))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Shadow, brush)
brush = QtGui.QBrush(QtGui.QColor(15, 15, 15))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Highlight, brush)
brush = QtGui.QBrush(QtGui.QColor(220, 164, 13))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.HighlightedText, brush)
brush = QtGui.QBrush(QtGui.QColor(0, 0, 254))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Link, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 0, 254))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.LinkVisited, brush)
brush = QtGui.QBrush(QtGui.QColor(30, 30, 30))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.AlternateBase, brush)
brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.NoRole, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 219))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipBase, brush)
brush = QtGui.QBrush(QtGui.QColor(16, 16, 15))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipText, brush)
brush = QtGui.QBrush(QtGui.QColor(238, 238, 238))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
brush = QtGui.QBrush(QtGui.QColor(23, 23, 23))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(28, 28, 28))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Light, brush)
brush = QtGui.QBrush(QtGui.QColor(203, 199, 196))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Midlight, brush)
brush = QtGui.QBrush(QtGui.QColor(19, 19, 19))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Dark, brush)
brush = QtGui.QBrush(QtGui.QColor(184, 181, 178))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Mid, brush)
brush = QtGui.QBrush(QtGui.QColor(238, 238, 238))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 254))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.BrightText, brush)
brush = QtGui.QBrush(QtGui.QColor(238, 238, 238))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush)
brush = QtGui.QBrush(QtGui.QColor(23, 23, 23))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(23, 23, 23))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(17, 17, 17))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Shadow, brush)
brush = QtGui.QBrush(QtGui.QColor(15, 15, 15))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Highlight, brush)
brush = QtGui.QBrush(QtGui.QColor(220, 164, 13))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.HighlightedText, brush)
brush = QtGui.QBrush(QtGui.QColor(0, 0, 254))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Link, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 0, 254))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.LinkVisited, brush)
brush = QtGui.QBrush(QtGui.QColor(30, 30, 30))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.AlternateBase, brush)
brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.NoRole, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 219))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipBase, brush)
brush = QtGui.QBrush(QtGui.QColor(16, 16, 15))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipText, brush)
brush = QtGui.QBrush(QtGui.QColor(238, 238, 238))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
brush = QtGui.QBrush(QtGui.QColor(23, 23, 23))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(28, 28, 28))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Light, brush)
brush = QtGui.QBrush(QtGui.QColor(203, 199, 196))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Midlight, brush)
brush = QtGui.QBrush(QtGui.QColor(19, 19, 19))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Dark, brush)
brush = QtGui.QBrush(QtGui.QColor(184, 181, 178))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Mid, brush)
brush = QtGui.QBrush(QtGui.QColor(238, 238, 238))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 254))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.BrightText, brush)
brush = QtGui.QBrush(QtGui.QColor(238, 238, 238))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush)
brush = QtGui.QBrush(QtGui.QColor(23, 23, 23))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(23, 23, 23))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(17, 17, 17))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Shadow, brush)
brush = QtGui.QBrush(QtGui.QColor(171, 171, 171))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Highlight, brush)
brush = QtGui.QBrush(QtGui.QColor(220, 164, 13))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.HighlightedText, brush)
brush = QtGui.QBrush(QtGui.QColor(0, 0, 254))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Link, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 0, 254))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.LinkVisited, brush)
brush = QtGui.QBrush(QtGui.QColor(30, 30, 30))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.AlternateBase, brush)
brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.NoRole, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 219))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipBase, brush)
brush = QtGui.QBrush(QtGui.QColor(16, 16, 15))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipText, brush)
return(palette)
#enddef

if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
#test = CheckBoxTreeView()
test = mainWindow()
test.show()
#QtGui.QApplication.instance().processEvents()
sys.exit(app.exec_())
#endif
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

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
Re: ☼MASTERWORK☼ DF - Teamspeak
« Reply #4 on: September 20, 2012, 10:48:59 am »

This screenshot is amazing to see. I almost thought you guys had real trouble.

Quote
Or do I just make a plugin as I would any mod?
Yes, adding anything to this mod is the same as for any other. I might have to do some fine-tuning, because of the standardized materials, but that is quickly done with find and replace.

@shingy: is noted.
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 :::

IamanElfCollaborator

  • Bay Watcher
  • Resident Shipper God and Freyjapiller
    • View Profile
Re: ☼MASTERWORK☼ DF - Teamspeak
« Reply #5 on: September 20, 2012, 10:56:25 am »

Yay, good. Would a bunch of new domestic animals and megas count as a plugin?

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
Re: ☼MASTERWORK☼ DF - Teamspeak
« Reply #6 on: September 20, 2012, 11:07:08 am »

Well, I usually would just add them into the mod. Someone writes a farming mod? Sure, goes into Masterwork. The only plugin that currently exists is orc fortress, because it is mutually exclusives. You can either play the dwarves I wrote, or the Orcs from smakemupagus. Not both. This is why it is not part of the main download package.
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☼ DF - Teamspeak
« Reply #7 on: September 20, 2012, 11:09:16 am »

This screenshot is amazing to see. I almost thought you guys had real trouble.
We were for a little bit but we had a breakthrough.
The "metatags.txt" functionality is not in there yet but you can make changes in the treeview list and save them to the raws or a loadable GUI settings file right now.

I think a good goal for the future of the GUI would be to have a plugin loading system.
It would need a list of which plugins were incompatible with each other.
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

IamanElfCollaborator

  • Bay Watcher
  • Resident Shipper God and Freyjapiller
    • View Profile
Re: ☼MASTERWORK☼ DF - Teamspeak
« Reply #8 on: September 20, 2012, 11:09:26 am »

Ah, so if I were to replace your dwarves with moogles, for instance (I won't, but in case you might, may I, in theory?) then that would be a plugin? I mean, obviously with new workshops, but would it count?

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
Re: ☼MASTERWORK☼ DF - Teamspeak
« Reply #9 on: September 20, 2012, 11:14:27 am »

I consider the mod to be open source. So if you want to copy the entire thing, replace dwarves with moogles as playble race, and then release the "masterwork moogle fortress mod" then that is entirely up to you ;) I might also not quite understand what you are asking. ^^
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 :::

IamanElfCollaborator

  • Bay Watcher
  • Resident Shipper God and Freyjapiller
    • View Profile
Re: ☼MASTERWORK☼ DF - Teamspeak
« Reply #10 on: September 20, 2012, 11:18:15 am »

Bah, never would I do that. If I did want moogles as playable Masterwork races then I'd put it in a plugin. Besides, I'd come under fire anyway. Most people here are relatively civil, though you never know.

smakemupagus

  • Bay Watcher
  • [CANOPENDOORS]
    • View Profile
Re: ☼MASTERWORK☼ DF - Teamspeak
« Reply #11 on: September 20, 2012, 12:34:28 pm »

Cool, thanks for setting this up.  A project that Meph and I have talked about taking on one day could be to merge Orc Fortress in with the GUI.  I've done some preliminary work, organizing the Orc Fort files so that the add-on files vs. the overwriting files are clearly separated and I try to make sure it's all commented clearly.  Now it's up to the point where I would need to coordinate with you guys.  A simple start would be to make a button that toggles the existence of Tiaga Orcs' creature and entity. 

The next level will be go through the list of changes I have made to MW files and discuss whether they should be (a) rolled into the main, (b) made toggleable in the GUI, (c) discarded.  And then for the ones that are "(b - toggleable)" I'll have to ask you guys to teach me what syntax to use in the code to make that work.  Perhaps it's as simple as adding the YESORCFORT token or whatever we decide to call it?

Here's some examples of what I mean. 

Code: [Select]
0.2.0 RC1
* Merge into MWDF195
* Separate core "Plug in" files from "Overwriting" files
>> Overwriting files inlude
* Orc themed "embark" text screen
* Polehammer fix
* Elf entity and reaction:elf change (not all mithril, progress_triggers)
* Dwarf entity changes (new buildings and reactions, progress triggers)
* Very minor entity change to Elven Outlaws (trade goods)
* Minor entity changes to Deep Drow, Bandits (trade goods, ethics)
* Major entity changes Chaos Dwarves (progress triggers, trade goods, ethics, prune old reactions)
* Put Lead back in galena ore, as it is in vanilla, since it is the only source
* Differentiate 'evil' vs. 'good' graphic sprites for elves, dwarves, humies, etc.
0.2.0
* Tanning oil quickfix
* bugfix: Taiga Orcs no longer TRAPAVOID
0.2.1a
* UdV's Obsidian cutting stuff work around

For example, Meph can clarify whether it is on purpose that he took the lead ore out of Galena in the main mod.  If not then he can fix it.  If yes then I'll propose an edit to the entry like so

[INORGANIC:GALENA]
[USE_MATERIAL_TEMPLATE:STONE_TEMPLATE]
[STATE_NAME_ADJ:ALL_SOLID:galena][DISPLAY_COLOR:7:7:1][TILE:156]
[ENVIRONMENT:IGNEOUS_EXTRUSIVE:VEIN:100]
[ENVIRONMENT:IGNEOUS_INTRUSIVE:VEIN:10]
[ENVIRONMENT:METAMORPHIC:VEIN:100]
[ENVIRONMENT_SPEC:GRANITE:VEIN:100]
[ENVIRONMENT_SPEC:LIMESTONE:VEIN:100]
[ITEM_SYMBOL:'*']
YESORCFORT[METAL_ORE:LEAD:100]
[METAL_ORE:SILVER:50]
[METAL_ORE:IRIDIUM:1]
YESSMELTING[METAL_ORE:VIOLENT_REACTION:1]

and maybe you guys can work the GUI magic to make a button that toggles the YESORCFORT items.

....


Re: "New mod" vs. "Plug in"

I consider Orc Fortress a plug in in the sense that I try use Masterwork assets whenever possible.  Mostly files only get added, I only overwrite/change Masterwork files when I can't help it (or on express orders from the wife, such as in the case galena ;) ).  With the ultimate goal being that nothing gets overwritten except maybe a few lines here and there, maybe toggled by the GUI. 

An example is that when I wanted a strong industry for the Orcs based on organic materials.  Rather than creating new materials, I used bloodsteel, ironbone, and lamellar leather because those materials were already in Masterwork.  The Orcs have different workshops and new ways of making these materials and so on, but I don't mess with the materials' strength, color or appearance, name, etc.  Obviously this puts some constraints, but it definitely makes things easier both for me, and I think gameplay wise it's worth it too in that they feel like they're part of the same world.

Other times it is a pitfall like when I grabbed the goblin "tattered armor" and didn't initially realize that it's actually incredibly powerful (covers the entire body) because it was meant only for NPCs.  A more current example I am thinking about now is that I think of giving the Orcs some new plants for above ground, but I don't know exactly how to handle since so many plants are already in Flora & Fauna.  I don't want to make new plants with the same name, possible for duped raws or just player confusion.  But on the other hand I don't want to have the whole F&F as a dependency for any core Orc features. 
« Last Edit: September 20, 2012, 12:38:07 pm by smakemupagus »
Logged

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
Re: ☼MASTERWORK☼ DF - Teamspeak
« Reply #12 on: September 20, 2012, 12:41:49 pm »

Adding it will be easy. I just add all the files, since the reactions, materials etc are not used by dwarves anyway. then the only optional thing would be the entity file, which can easily be toggled, and the wtf (weird text format) file I wrote for you, the embark screen.  I disagree with the changes to the dwarves you made, as you know, because I dont want changes that are not orc-specific.

I should really work more on the mod, but ahhh, the distractions...
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☼ DF - Teamspeak
« Reply #13 on: September 20, 2012, 12:45:21 pm »

smakemupagus
I think that for plugins in the GUI we need to expand the metatags system that we have now.
Metatags work like "YESORCFORT" but only specify things to add to the mod or modifications to existing files.
This works for turning built in features on and off but you need more for plugins.

I think the plugin system would need to define three things.

1. A Metatag for things to add or modify.
2. A Metatag for things to remove, like removing CIV_PLAYABLE from Dwarves (or completely removing Dwarves) when using the Orc mod if you only want one playable civ at a time.
3. A List of Plugins and Metatags that are incompatible with the plugin.
« Last Edit: September 20, 2012, 01:01:32 pm by arclance »
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

Rumrusher

  • Bay Watcher
  • current project : searching...
    • View Profile
Re: ☼MASTERWORK☼ DF - Teamspeak
« Reply #14 on: September 20, 2012, 12:57:03 pm »

Really remove Dwarves from play when using the orc mod? I was wondering why I can't play either orc and or dwarves when I downloaded that patch.
Logged
I thought I would I had never hear my daughter's escapades from some boy...
DAMN YOU RUMRUSHER!!!!!!!!
"body swapping and YOU!"
Adventure in baby making!Adv Homes
Pages: [1] 2 3 ... 9