-
Modification Installation, Configuration and Development Augmentation Application
("micadaa" - I like that better)
Currently available mods:
- Martial Arts+: included
- Minerals+: included
- TYE:Things You Eat (by Deon): forum thread (http://www.bay12games.com/forum/index.php?topic=19760.0)
- Dwarmin's Hat Mod (remake by Deon): download (http://dffd.wimbli.com/file.php?id=247)
- Luggage's Instruments (remake by Deon): download (http://dffd.wimbli.com/file.php?id=248)
- Uncutter and Deblocker (remake by Deon): download (http://dffd.wimbli.com/file.php?id=249)
- Compound mod (by Deon): download (http://dffd.wimbli.com/file.php?id=250)
- Mega Toy Mod (remake by Deon): download (http://dffd.wimbli.com/file.php?id=251)
- Botany/Angler/Zoo mods (remake by Deon): download (http://dffd.wimbli.com/download.php?id=252)
- Dr.More-Oh mod (by me, experimental): included
- Clockwork Race mod (remade by Deon): download (http://dffd.wimbli.com/file.php?id=260)
- Umiman's 10sec mods (prefstring and engraving) (remake by Fleari): download (http://dffd.wimbli.com/file.php?id=271)
Modbase Cumulative Modpack
NOTICE: Modbase no longer comes bundled with the mods!
MCM allows you to get all existing mods in one easy to setup package.
It contains all currently available mods for Modbase.
The last version is 1.02 as of 31.07.2008
DFFD download page (http://dffd.wimbli.com/file.php?id=301)
"Mod Base"
Functional release 0.95yy as of 24.08.2008
DFFD download page (http://dffd.wimbli.com/file.php?id=220).
NOTICE: You have to download the Cumulative Modpack, because the main archive no longer contains any mods!
Also, the source is a separate archive. Link at the bottom of the post.
I would like to encourage readers and users to express any ideas you might have on how to improve the program's operations, or what functions to add.
Author: Sean Mirrsen
====================
Description:
ModBase is, ultimately, a program to aid DF mod makers and DF mod users alike.
Its functionality is frustratingly simple in principle. It takes the original set of DF raws, and superimposes any mods you feed it onto them. You can download a mod package, unzip it, then run the program and effortlessly install and configure the mod to work with any others you might have.
====================
Installation:
Extract the contents of the archive so that ModBase.exe ends up in your main DF directory. If you had any previous version of ModBase, it would be prudent to delete the "original", "martmod" and "minmod" folders from the "raw" folder beforehand.
====================
Use - User side
On starting ModBase, you will see a panel with two selectable tabs labelled "Mods" and "Settings".
Before you begin, verify that you have started the program from the directory of the DF copy that you wish to set up. Use the Change Directory button if the path displayed at the bottom of the Mods tab does not match the one you want.
From here, there are several things you can do.
If you want to install or configure mods, click the "Load Mods" button on the Mods tab. After a brief loading sequence, the mods you have present will be displayed in the Mods list. If any of the mods were previously used and configured, their order and active state will match those that were saved last.
When you select a mod in the mod list, its description, if any was provided, will be displayed in the greyed-out panel under the lists.
You can change the order of the mods in the list (this influences mods that change the same things), and you can disable them entirely, or disable their individual parts from the Components list.
After you have done this, you can press "!!!ACTIVATE!!!" to compile all the mods into a single set that will be readable by DF. The program will warn you if any mods cannot find any other mods they require, or if any such mods are present, but disabled.
If you want to configure DF settings, or change tilesets, click the Settings tab. You will see two lists, a set of buttons, and a panel on the right.
Click the "Load Init Settings" button. The upper list will display the current settings of DF, as lines from the current "init.txt" file.
Double-clicking any item on the upper list will bring up a dialog box that allows to edit the selected parameter, with any optional values selectable from a drop-down list, and any numeric values manually entered into a separate field. The bottom line of the dialog will provide guidelines for editing non-evident tags.
The dialog box will prevent manual editing of settings pertaining to tilesets, as those are handled by a separate part of the program. On the right side of the window, you can see a drop-down list, a button, two radio buttons, and a panel. When the init settings are loaded, clicking either radio button will display the current tileset set for windowed or fullscreen mode. You can select another present tileset from the drop-down and click the "apply tileset" button to append relevant lines to the list of pending init settings changes.
Once you are happy with your changes, you can click the small "S" button to the right of the lower list, which will save the init settings changes to a separate file. Clicking the "L" button will load a saved set, if one exists, and clicking "X" will clear the current list. After you save your changes, click "Apply Init Settings" to save the changes to the main init file.
NOTE: It is advised to save a backup copy of init.txt if you plan to ever edit it manually later, because the program will not save any comments that were present in the original file.
If you select a module in the Component List, the Edit Mod button will light up. It currently has no function other than showcasing the mod editor interface and letting you see everything that comprises the selected module.
Important note: The program will now save your init configuration to the DF main folder, as "init.cfg", and you can now place tilesets in the "raw\tilesets" folder to easier carry them over to a new DF version.
Once you switch to the new DF version, just copy the init.cfg and your tilesets dir, then run Modbase, click Load Init, click the little "L" button, and then Save Init.
Yet another note: Modbase will now contain most of its data in the "modbase" directory, instead of "raw". When you switch to a new DF version, copy that directory, Modbase.exe, modbase.cfg, and init.cfg to the new version's directory, then go to the modbase directory and delete the "original" directory there. When you run modbase, you will be prompted to copy the contents of the new version's raws to the original mod directory.
And yet another note: You can now place .PNG files straight off the wiki into the Tilesets folder, and modbase will convert them to DF-usable BMPs.
====================
Use - Modder side
The files provided with the program should be clear enough.
To add a mod to ModBase, you need to add a folder, and a text file to the DF\raw folder. The folder should have a reasonably unique name that represents your mod. In that folder should be the files that make up your mod. The descriptor text file you place in the DF\raw folder should have its name beginning with "dfmod_". As with normal DF raws, the first line of the file should be its name without extension, and following that, an [OBJECT:MOD] entry.
Each mod has a set of individual tags that describe it, and a set of tag arrays that point to the files used by the mod. Here they all are:
[MOD:<id>] - the standard ID of the mod. The ID must be unique.
[NAME:<string variable>] - the name of the mod as it will be displayed in the selector list in ModBase.
[DIRECTORY:<string variable>] - the name of the directory you placed in the DF\raw folder, that contains the mod's files.
[REQUIRES:<string variable>] - used to specify mods that this mod will not function without. The variable is the exact NAME: string of the required mod. Any number of these tags can be included.
[DESCRIPTION:<string variable>] - is used to display a description of the mod's functions. The string will include any linefeeds, so format the text as you wish here. Note, however, that you must use semicolons instead of colons - otherwise the parser will freak out. The semicolons will be automatically replaced with colons.
[VERSION:<string variable>] - version of the mod. No particular meaning at the moment, but may later be used to determine compatibility.
[MSECT:<string variable>:<optional flag>] - the mod component separator tag. The variable is the name of the component displayed in the component list.
If you include no optional flag, do not include the separating colon also.
The optional variables are:
MAIN - if a module marked with this is turned off, the mod itself is turned off. Module has "(required)" added to it in the component display.
OPT - if you enable a module marked with this, any other modules with this mark will be turned off. In the component list it will be preceded by a "(o)".
OFF - the module with this parameter will be inactive by default.
[FILE:<string variable>] - the name of the file. Each [MSECT] tag can be followed by any number of [FILE] tags, but no [FILE] will take effect before any [MSECT] tags, and a [MSECT] tags with no following [FILE]s might crash the prog.
Additional tags have been introduced to MSECT entries:
[SPEECH:<string variable>] - the name of the file containing strings to be added to the DF speech files. The file can have any name, and the first line of it must be the name of the file in DF's data\speech folder that the other lines are added to.
[TILESET:<string variable>] - the name of the file contained in the mod's folder, that will be copied and set as the default windowed tileset. The file may be missing from the folder, in which case it must already be installed by other means. The file name must be supplied with an extension!!!
[TILEMOD:<string variable>] - the name of the file that contains a modification to an existing tileset. The file name must be supplied with an extension!!! The tileset must be already installed - the modder may use the previous function to accomplish that. The tilemod itself must contain a field of true blue, 0.0.255 color, in which individual tiles must be wholely painted in accordance with DF standards. The name of the tilemod file must be the same as the file being edited, but the original tileset is not overwritten - instead, a modded version is saved as a new file.
[INIT:<string variable>] - the name of the .txt file that contains any changes you want to do to the game's init settings, like color schemes. You can use any file name, thus, for example, providing several optional schemes.
The raws syntax for ModBase-compliant mods is not different from original DF. However, there are certain features many major modders will find useful. The original DF rules for file names and contents still apply:
All files must begin with their name without extension, followed by an [OBJECT:<type>] reference tag, that describes the type of entries present in the file. Entries of nonmatching type might not crash the program, but they sure will mess up DF.
Including an entry with a type and name matching an already existing one (either from original DF or introduced by a mod) will add its content to that entry. Tags that are supposed to be singular will be overwritten, like NAME tags, while multiple tags like ATTACK will be added.
Including an entry with a unique type and name will create a new file if it doesn't exist, and write that entry to it. The name of that file matches the name of the source file the entry is in.
A [!DEL!] tag directly following the entry declaration marks the entry for deletion. Adding a new entry with the same type and name afterwards is one way of completely overwriting an existing entry.
A normal tag with an extra "!" parameter (like [WEAPON:ITEM_WEAPON_SWORD_SHORT:!]) will mark the tag for removal. The system is flexible enough to support multiple removals of similar tags that match on all arguments preceding the "!". So, an [ATTACK:!] tag will remove all attacks from a creature, while [ATTACK:MAIN:!] will only remove the main attacks.
Tag flags, like those used by ATTACK and BP tags, cannot be modified separately, as they are saved and deleted with the tag they belong to. To modify a tag like that, you have to delete it (you only need to specify the tag itself, without flags) and put it back the way you want to.
Be advised that language modding is a complicated task in itself. I don't think anything severely awful may come of it, but don't try deleting tags from words in the language_words file. Use full entry deletion instead.
New feature! - entry referencing. By adding a [!REF:<entryname>] tag as the firstmost tag of an entry (immediatly following the [type:ID] tag), you will force the current entry's contents to be copied from another tag, before any following tags are added. This is useful for setting up multiple similar creatures with minimum effort, or make creatures based on others.
New feature! - tag referencing. Using a special syntax, you can specify parameters relative to other entries of the same type.
Example: [ATTACK@:MAIN:BYTYPE:$HUMAN:$HUMAN:$HUMAN:%HUMAN*2:%HUMAN*2:$HUMAN] will copy the contents of the last attack tag in the HUMAN creature entry, and multiply the damage values by two. The syntax is: first tag argument must have a "@" at the end to indicate the tag uses referencing. Any further argument in the tag can have "$" or "%" at the start, indicating copying a string (or a number without changing), or a number, with optional "+","-","*" and "/" modifiers to alter the value. Optionally, adding a number after the "@" in the tag name, like this: "[ATTACK@2:" will load the tag arguments from a specific instance of the tag in the target creature. If the number is omitted, or exceeds the number of such tags in the target creature, the last tag in the target creature will be used as the source.
NOTE: Numeric parameter designation changed from "#" to "%"
New feature! - optional entry appending. By adding a [!REPLACE] as the first tag of an entry, you will ensure that ModBase will not try to create a new entry with this name, so the contents will not be applied anywhere unless it already exists.
This is useful for making alterations to modular mods, or general alterations for many mods.
New feature! - Overwrite tag. Adding [!OVER] as the first tag in an entry clears all tags from the original entry (if it existed anymays), so that all following tags will be written anew.
Both tags can be used at once, like this: [!REPLACE:!OVER], but not as separate tags.
Also, reference or delete tags cannot be used with these. Not that there's a reason to, anyway. :)
New feature! - conditional entry overwriting/adding. The syntax is fairly incomprehensible, but to append a change to all entries of a certain type, you make an entry called [CREATURE:#] or some other type like ENTITY, etc. To specify which entries to use, [COND:] tags are used. Use [COND:<tagname>] to check for tag presence, [COND:<tagname>!] to check for absence. Use [COND:<tagname>@<argnumber>#<argvalue>] to check for a specific argument's value in a specific tag, or add an exclamation to the end to check for anything but that value in that tag.
Some other functions don't work with this, namely entry and possibly tag referencing. Value modification via arithmetics works.
=======================================
CAUTION
=======================================
As a precautionary measure, I will clarify.
This is a functional test release. Which means that while the functions of the program are proven to be working, but the details of its operation may royally screw up the game. I want this program to get a very thorough crash-test.
Known bug: going overboard with modding will crash the app when compiling with an overflow error. Don't make my variables exceed integer limits. :) Specifically, be careful with conditional entries.
I'm now looking for ideas to further improve the program.
Have fun!
Bugs fixed:
Fixed a stupid issue with init modding. It'll now actually revert to the saved copy before applying any mods. I think I should check if it does it with speech...
Modbase Source Code
If you need it, it's here:
DFFD download page (http://dffd.wimbli.com/file.php?id=328)
-
Nice util, but who really needs a mod swapper, I just use separate installations.
-
It's not just a swapper, it's able to configure the mods as well - for example, people have been wondering "how do I only have stuff related to martial arts in the mod" - now they can, without any manual labor.
I understand that for a game like DF, you don't usually configure your mod layout more than once per copy, but I wanted to have a nice single distribution package that came with its own instructions on how to do stuff.
In addition to that, I'm at work, and I'm bored out of my mind. I'm sitting at a table waiting for a customer who a) has available money, b) has the will to spend that money, c) has the brain to understand that THAT CHAIR IS INDEED WORTH THAT PRICE, and d) doesn't have to "go fetch a husband/wife to come over and have a look too". I just had to do something that would occupy me enough. DF itself is fun, but this particular issue with modding has bothered me before, so I decided to deal with it...
-
I think something like this would come in handy for the entire community if a standard could be made that all mod developers could adhere to allowing their mods to be added to df easily. would be especially good were it to be able to install tilesets and edit your init.txt file everytime a new version came out
-
Heh, that kind of functionality seems WAY beyond commandline programming.
Tilesets should be easy though, they're mostly just file replacements.I am familiar with programming though, or I should say I was. I can hardly remember anything but the basics of the basics now.
Speaking of basics, I've got this here Blitz Basic thing... could suffice for our needs. :)
Now, it would need to behave like Conflict Crusher for TA, it would have to scan all raws and parse them by itself, then see what mods add what changes to the originals, and add them all together. Or something. Damn large amount of work for a programmer out of practice...
-
heh my experience with programming was merely vb6 and even then that was about 3 years ago. regarding changes to the init.txt file is it possible to be able to create a new init.txt that would replace the original one that could be made using a variety of checkboxes and text input areas (for writing the various graphics bits if needed)
theoretically, you could still call various batch files (I think :S) to do things such as moving files and installing certain mods
I should really get back into programming, I used to love it so :')
-
Um, the CHOICE command doesn't seem to exist on Windows XP (and 2000), and so your batch file won't run on these operating systems. I doesn't run on my windows XP install, at least. According to this site, it has to be replaced with the SET command.
-
Hm? I remember the choice command from when I was learning to do this stuff on WinME...
I guess I'll look into it..
-
I suggest Python. It's like pure sex condensed into a programming language.
Also, unlike sex, you can actually be half-decent at it after only a few hours practice.
-
Python, hm? Don't you need a special package to run something made with it, kinda like Java environment? I would want to have something independent. For now I'm bashing Blitz Basic into shape.
Btw, making a parser for DF mods is quite a task, just by the sheer size. I haven't written a line of actual code yet, and the code's already up to 270 lines... of type field definitions for tags. And I didn't even finish copying them creature tags yet, and didn't start the rest....
-
I suggest looking around for py2exe and py2app - those convert Python programs to .exe (for our Windows and WINE friends) and .apps (for our Mac friends), respectively.
Plus, Python is awesome enough to have it anyway. I <3 Python.
-
Python is like a pure sex... in a strange form =).
I mean formatting.
I like it but it was a bit strange to see TABulations instead of something less problem-causing like "{}".
-
<cleared>
[ May 29, 2008: Message edited by: Sean Mirrsen ]
-
<cleared>
[ May 29, 2008: Message edited by: Sean Mirrsen ]
-
<cleared>
Somebody delete all the cleareds please... we really need more moderators here.[ May 29, 2008: Message edited by: Sean Mirrsen ]
-
Alright, MSVS2k8 didn't work out as planned, so I got the old 2k3 version from up on the high shelf. Added bonus of not requiring .Net framework 2.0.
The prototype, so far, can only load the raws, and with a lot of creaking and leaking at that. I'll need to find a way to optimize, the darn routine takes longer than generating a standard world...
Also, so far conflict crushing works in reverse. As in, any erratic tag placement will most likely crash the thing. 'm working on it....
-
Cut down startup time to 8 seconds by forcing the program to skip the language raws. I guess I'll leave language modding a strictly manual task.
Stuff left to do:
- ensure that all tags are read correctly.
- concatenate special tag cases, like attack flags.
- make double sure comments don't end up mistaken for tags.
- devise a way to keep curly brackets without disturbing purring maggots.
- if that fails, devise a new way to indicate entry or tag removal within a mod.
- start on raws compilation.
- handle problems that will undoubtedly arise.
- make it so DF can run with generated raws.
In other words, as we russians say, "All that's left to do is start and finish." :)
-
Changed thread title again. I think it's the fourth already.
Listed details on the project in the first post.
Got the program to load all raws, including language, in under two seconds in debug mode. I guess that's about as fast as DF would load them.
Next up is some more interface work and starting on generating output.
-
Bump without content. Still working on basics for raws recompilation.
By the way, is it really that much of a worthless idea, or are people here just genuinely not interested in this kind of program?
-
I'm interested. I've been watching the thread to see how it develops. It seems like it could be a very useful program.
-
This seems really useful. Please keep up the good work.
-
Whee, I'd almost forgotten how hard it was for me to code something from scratch, even a little proggie such as this. :) That with my lack of concentration and all..
Nevertheless, there is progress.
The program's functionality is at zero-zero level, which means it can output the same stuff it takes in. I've successfully made it eat DF raws and then put them back, almost the way they were. Almost, because I didn't want to concern with the aesthetic aspect of the raws, so all NOPAIN, NOFEAR and the like are written in column. All comments are gone, too. I successfully got an adventurer killed by elves with a set of raws produced by the program. One small misstep for man.... one giant feast for the elfkind. :)
Next up on the agenda.
-Get the program to merge several raw sets into one.
-Polish the stuff so that removing an [ATTACK] tag will also remove any trailing flags, same with bodyparts.
-Think of at least SOMETHING to prevent the program from crashing in the presence of the smallest typo. (it can close forgotten closing brackets though.. I think)
Also, the program is now running very very fast. I made some design alterations, particularly altering my over-ambitious "single-file-mod" concept. Mods will now be loaded from folders in the \raws directory, with description files in the same directory providing pointers to load them. Current startup time in release is still around two seconds. The entire DF raws are written in less than a second. Fast enough, methinks.
If this is ever completed (was any of my projects ever?.. lemme think... hm, I guess not..), it will become my second greatest coding achievement, replacing that rotating buildings extension for TASpring. The first was a zombie attack simulator, with an open space where zombies were catching the people, the people were running away, and marines were shooting the zombies, giving weapons to civilians and injecting infected ones with the cure... was slow as hell and with more bugs than Daggerfall at release...
-
Is source available?
EDIT: Also, Mono can't run VB.NET worth a crap. You really should look into porting to C# so Mac/Linux users can use the app. I could help with this. (And sticking to .NET 1.1 is kind of silly these days, FWIW.)
[ June 09, 2008: Message edited by: Blacken ]
-
Bump with content. :)
Porting to C# might be easy, because almost every time I see an explanation for something in MSDN, it's usually VB and C# at the same time, with vaguely similar syntax. I just think better in VB. :)
Also, pic:
(http://i217.photobucket.com/albums/cc135/controllersean/ModBasePanel.jpg)
-
With the forums going down tomorrow, I probably won't be able to update the prog until they come back up. At least, through normal means.
So if you have some comment on the prog, you should post it as soon as possible.
Right now I found another oversight on my part - removing a parent [ATTACK] or [BP] tag will not remove the trailing tags that are part of the tag's composure. So using the removal method on these two tags is not advised.
Also, I think I know of another one, at least I speculate that it might cause a problem - removing all entries from a file will not remove the file itself, though AFAIK, DF expect each file to have at least one entry.
If you have anyhting to add, make it quick!
-
You've finally done it! Your first release, congratulations on this. I was waiting for this utility. Now, to the new DF version, and I will convert my mods to this standard =). Thanks for your work.
-
Can you kinda, uh, playtest the raws the program outputs? There's a set of original DF raws provided, so if you disable the Martial Arts mockup thing when you assemble, it should make basically a machine copy of the vanilla DF raws. Try loading a save long into the game with those raws and see if any errors creep up.
Then try making mods in this new standard as well. I basicaly want to know if there are more special tag placement cases than I accounted for.
Also, Blacken or any other "Sharp-C'ing" individual out there, I need some manner of help in traversing the C# bog. Specifically, the most annoying instances are being unable to call a struct's internal functions before all internal variables are set (I suppose it means "initialized" though, so it's probably less of a problem than I think), and the lack of a "ReDim Preserve" equivalent. Is there any direct way of taking an array and resizing it? Also, switch-cases accepting one argument per case == bad when you've got a few dozen cases per effect...
-
Khrm... No way I'm going to make it work in see-sharp on my own...
I'll just concentrate on the version that already works and leave porting to whoever needs it most. Sorry, C# is beyond my current skills and comprehension, the sheer amount of declaration differences is killing me. Or maybe it's the VS version that's so old, because it doesn't have autocompleting functions for C#.
Btw, I'm not specifically evading the need to use framework 2.0 or higher, it's just that I can't get MSVS2005 with MSDN, and 2008 needs 3.5 framework that I can't install for some reason.
I've spent most of the day trying to do that thing, so there was little progress on the actual working prog.
-
Alright, now it's merely hours till these forums begin the scheduled one-way trip into the nether regions, BUT!!
A new version of my prog has crept up! :D
Now it's lacking only the reference-a-tag feature, which isn't all that required.
And thanks to the raws Toady made available, it's actually new-version-ready! I added a few more repeating tags from the entities, and it's all set!
The program will now delete a file that doesn't have any entries, and will warn the user if any sub-module can't find a file, though it will not crash in those circumstances.
I also added a progress meter for those people with slow machines (though how slow they would have to be to make use of it, I don't know).
I'll upload the raws when I get home. VB.Net.
-
Bump with loads of content!!!
First off, many blatantly obvious (now) bugs have been fixed, namely the program omitting the last file in each mod module, checkboxes in the component list having no effect, and several crash bugs.
Then, I added two very nice features - entry referencing that allows you to make one entry a carbon copy of another and then edit it, and tag referencing that allows you to make a weapon have for example twice the damage of another weapon. The latter seems not very useful, but if you want to make a shitload of weapons that have to have properties based on those of another weapon, you will love this.
And finally, I converted the latest versions of the Minerals and Martial Arts mods into this format, and included them in the pack. I'll work on further making use of the new features.
-
Alright, found another blatantly obvious crash bug...
For some reason I only find bugs like these after I release something, and that's despite having run successful test several times.
Anyways, the current version is pretty much unusable. Due to a misplaced variable. Why do I always get lucky with such schroedinbugs? Updated version coming up.
-
Please check your post box Sean.
-
Ah. Thanks. They'll be 'right' in the next pack update. :)
-
I'm all for this tbh, as I mentioned earlier on in this thread I thought something like this was needed by the community. I've still yet to get back into vb myself to take a look at doing these things. I'd like to see it catching on and becoming the norm :) Hopefully I can provide a tad more input further down the road, I'm also yet to use the app I must admit. I'm waiting for the next version of df to come out to really get back into it all (Been playing other games would you believe :o)
-
zomg a bit off topic but is this thread all backwards?
edit: Realised the error of my ways, it was a setting in profile settings. Panic over ^_^
-
Looks like a good utility!
A few people who have played my mod have mentioned they played without my custom entities, with modbase it will be easier for people to pick and choose what they want. :)
-
Indeed it will. I'm now working on a few more features, like mod dependency tags (so a mod will notify the user if it's in front of a mod it's supposed to base on, or if that mod is entirely missing) and remembering the state and order of mods you last selected.
If you have any ideas for modder-side or user-side features the prog could have, don't hesitate to post. I could use inspiration. :)
-
Alright, mod dependency is implemented via a [REQUIRES:] tag in the mod descriptor. Put the exact name of the needed mod in that tag. You can have as many REQUIRES tags as you require. :)
Also, the program will now remember the last mod setup you saved, and will load it exactly the same way. New mods added to the fray will, or should, be added fully active, and at the bottom of the list.
Now I can start figuring out the graphics sets, and maybe that issue with bodyglosses...
edit: just to clarify, I have not updated the version yet. The latest is still 0.6b
-
If anyone wants current mods to be made compatible with mod base, please tell me so I can make it compatible.
also, you might want to consider splitting out anything with things that would be popularly modded in, such as dragon types and such, to different components in your mods. This would prevent people from having three different variations for phoenixes because of different people's mods not having it split up so you can un-check them.
-
Blah.
EDIT: Language_words editing is broken. Hard.
If you add anything to a custom one, whether it have a copy of the original in it or not, only the additions will be left in your compiled version.
VERY painful.
-
Laguage_words is a special file that has to be the only one so named. I might have screwed something up in checking for available files when compiling, I'll look into it.
-
Some kind of error when trying to !!!Activate!!! DF original
EDIT: Never mind, I've got .4a instead .6b!
-
Hm. Odd. Alright, I'll keep testing. Never got that on clean original...
-
Erm, are you sure you want to bother with that? It is from an older release, isn't it? And 0.6b worked just fine when I downloaded it.
-
I replied before you edited. :)
-
Bump with content. Updated to 0.74c, fixed a rather dumb bug on my part, plus started on some other functions that don't work yet, so don't touch them.
-
Allrighty, I got the init file settings management covered, including a manner of a WYSIWIG tileset swapper. Graphics sets are another matter entirely, since they aren't modded per se, but entirely replaced. I might get to someting of that sort, but don't know how to approach that yet.
Insofar, the program provides the following functions:
- Installing and congifuring compatible mods, including merging different mods together.
- Creating mods based on other mods with less effort.
- Editing the init file settings, including saving change lists for re-use at version switches.
- Easy selection of non-graphic tilesets.
The general question is, what else?
Right now I've got two major ideas, but I'm likely to get bogged down in them.
One is a function to compare two sets of raws, one from current selection, another from a special folder, and save the reverse comparison result, providing an easy-to-use guideline for major mod spinoffs. I've already started this one, but the progress is already slower than the annual tectonic plate shift.
The other is a spore-inspired mod editor, which will allow a less experienced user to grab the program, select a creature/item/whatever from the list and make any changes needed, with a special "tree view" constructor for creatures and extensive explanations for most of the tags. This one was planned from the beginning, but I never got to start it, more or less daunted by the sheer amount of work it will take to even write out all the available tags.
Any comments, opinions on where I should head next? The proggie's turned out to be working quite well, despite the periodic outcroppings of ridiculous bugs.
I'll probably have the latest version up this evening (evening being 10pm and now being 6pm) so you can see what I've done there. I'm afraid that due to some of the intervening changes the loading of the mods got a little slower, but I don't think that's entirely uncureable.
-
Huzzah, wonderful progress you're making.
For the "compare" will it require a hard coded folder, or will it allow you to choose a folder a la an "Open File" command in other programs?
I foresee the 'spore'-mod-editor bit being the most difficult of the entire thing, but also possibly the best selling point of the program. The easiest bit will be the [body] tags since they're fairly modular to begin with. In fact, you could even have it create new parts on the fly with a simple wizard.
Most other tags are described in the Wiki (here (http://www.dwarffortresswiki.net/index.php/Creature_tokens)) but will still need to be divided into categories for ease of use.
The whole thing is just a big can of worms that you should probably develop separately from Mod Base.
-
Bumpity. 0.76a up.
I didn't find any obvious bugs, so keep looking for them.
As the "compare" is a strictly modder thing (specifically, a seriously determined modder thing), it will probably just use one folder. Not like you are going to do many massive comparations an hour. :)
The "spore-editor" is now less dificult, now that I've done init file editing, because it will be largely in similar lieu. The most difficult part of course is having detailed tooltips and specific placement cases for specific tags or tag groups. I'm thinking to do "a mod in a mod", as in make a specialized kind of mod that will be read by ModBase, which will use entry names and specific tags to define tags, tag groups, descriptions, and other stuff, so I could offload some of this to other people who could be willing to help.
-
I thought a utility like this would be a good tool for DF almost immediately after I started playing and looking around at mods.
My only major concern is the work required to convert mods into a form that is compatible with the program, which (correct me if I'm wrong) seems to burden mod creators or altruistic third parties with converting a mod into something your utility can work with.
Other utilities that have done similar things for other games (the Oblivion Mod Manager, for example), made the process of converting a game-ready mod to a utility-enabled mod much, much easier.
As-is it seems like the end user, with the lack of technical skill that might prompt them to use such a program, becomes dependant on someone else making a mod compatible with the utility. If nobody does that, they may not be able to understand how to do it themself, which defeats the purpose of that particular subset of potential beneficiaries.
-
Y'see, the program can work with just about anything, all you need to do is point it to the files. All the deletion/referencing/stuff tags are just to ensure maximum compatibility and lack of hideous errors. I can list the things you need to watch for, mainly, when converting a mod to ModBase:
Body files. Anything that changes original bodies must be converted in full, using deletion and replacement.
Creatures - attacks. Attack tags are not replaced, but added. Since a creature is not limited in those, this will not cause major problems in the game, except unwanted attags popping up if the purpose of a mod was to remove attacks.
Creatures - singular tags. The program regards most tags equally, so if a mod changes [NOCTURNAL] to [DIURNAL], that bit must be converted.
Stone - environment placement. You basically run into the same problem as with attacks here.
Language - words. Editing words is not recommended. Adding words is allowed, however.
Reactions - reagents and products. Again same issues as attacks.
Most of the rest is easy. The program overwrites identical single tags, so sticking two identical creature entries on top of each other will yield two sets of attacks, prefstrings and biomes, but nothing of that will crash the game. In any case, using full-overwrite, just including an empty entry with a [!DEL!] tag before the one you are going to add, is enough to ensure compatibility with an older mod. (hm, I might add a special tag for full-overwrite so that no clutter is made)
It is very hard to automate conversion of mods in DF. Whereas other games already use modular languages like LUA for modding, DF uses very straightforward parsed text. Yes, I could theoretically add a function to replace mods as-is. That is, it would function much like the commandline utility I made when I first conceived the project. But that would kinda defeat the purpose of the program, it would no longer be a mod merger. Any mods would be plain overwritten by any following mods, and all but the lastmost mod would be severely use-impaired. The DF community has gotten used to normal replace-all mods, but all modern-day moddable games allow just saying "modify that".
Final note: Converting both my mods (Martial Arts and Minerals, both quite extensive) took just under an hour of my dedicated looking at the screen and tormenting the arrow keys and the delete button. :)
-
Her's a small component for modbase I've made:
TYE:Things You Eat (http://www.bay12games.com/forum/index.php?topic=19760.0).
Add this in the 1st post if you seem it's appropriate.
It's discussion thread and details are here (http://www.bay12games.com/forum/index.php?topic=19760.0).
(http://img247.imageshack.us/img247/1563/saladlx4.th.jpg) (http://img247.imageshack.us/my.php?image=saladlx4.jpg)
About modbase: I didn't read the whole thread, it's too late here. But I noted that "strange" symbols from language files are just ignored which leads to unappropriate naming.
And this tool is GREAT! Thanks =).
-
Hm, wow, never noticed that effect. I guess I'll have to figure out something smart...
Your mod's at the top of the first page, Deon. Thanks. :)
In other news: mod editor interface is complete, for what it's worth. Now I need at least unordered and uncommented lists of tags for all possible entries. Then I can start working on adding them.
-
ugh that's quite a project you asked for.. I assume this is just for the object:creature tags and not the entity ones.
Or are you saying you'll make the list? I can whip one up fairly quick...
One thing I just thought about, getting all possible values for some of the tags would be.. interesting.
-
Er, no. The interface I thought up allows instantly adding any single-parameter tag (like [STOUT]), and for any tag that takes a value a window will pop up asking to enter the value(s). For more complicated tags like BODY or ATTACK, a special constructor window will be present.
And I do believe that for the moment, I can handle the list myself. I've still not finalized the concept of "tag descriptor" mods I'm going to have, so I'm going to work on that before I ask for contributions.
-
Righto, was looking through the raws anyway.. Figured I'd ask. :)
-
Thanks for adding the component. I think I should mention that you must regenerate the world for food to work.
I think I'll need to add more components which require world regen. to make it ready for the upcoming release. Everyone will start anew anyway :).
Wait... Does it merge different entities files if they have the same tag? I.e. the way you add new items to [GOODPLAINS].
This means... I can make a file with ENTITY:MOUNTAIN and nothing but new item tokens and they'll be added to the standart dwarves?
-
Yeah, it works =).
Here's the conversion of Dwarmin hatmod I've made.
It adds a nice variety of new headwear types.
http://dffd.wimbli.com/file.php?id=247
Here's the conversion of Luggage's Instrument mod.
It adds A LOT of new instruments.
http://dffd.wimbli.com/file.php?id=248
Here's the conversion of uncutter and deblocker mods (now 2 components of one mod) which were made by Metalax.
It allows you to convert cut gems -> rough gems and blocks -> rough stone to allow you to turn those bought at caravan items to useful for moods items.
http://dffd.wimbli.com/file.php?id=249
Also I've edited the wiki so now it contains some info on Modbase (Utilities page, Modding guide page and Mod list page).
Don't be lazy, you could do it yourself :). Consider it a joke, you've already done a great work for the community. Goood job :).
-
Tank you. :)
Hm, "Psychic Peasant"? There was a certain "Psychic PeeWee" back on the TAUniverse boards.. you sure you're not him?
I've fixed the language issue by switching the raws reader into binary mode. Surprisingly, the text-mode writer handles writing non-standard characters fine...
Do you think I should update right away, or wait until the editor is more or less operational?
And Deon, the "Does it merge different entities files if they have the same tag?" was kinda the point of the whole app. ;)
Btw, you've given me an idea. "Conditional append" will be very useful. As it is, a mod component that appends, say, instruments, to a certain modded race that is not present, will actually create that race's entry, which will more likely than not spam the errorlog or cause trouble in the game. I could add a conditional append tag, so that an entry will try to append it data if, and only if, an entry with the same name already exists.
-
I've got it, it's a great breakthrough.
Also there's a small component with a loud name : compound mod (http://dffd.wimbli.com/file.php?id=250), I will add here different small features from my other mods as components.
For now it has only 3 components, but it's 0.1:
-Ironwood trees, can be hardened in smelter to gain sharp "ironwood" stone to make stone weapons.
-Hunt pack 1 - small pack of different trainable domestic creatures (cave bat, hawk, monitor lizard)
-Stone weapons - crude axes, spears and clubs craftable from sharp stone (obsidian, ironwood [1st component here]).
And no, I'm not that fellow. It's just a random line I've added after uploading this funny avatar (at least it's funny for me).
And your editor IS very useful already, so update it please.
-
Alright, got conditional append in, at least it should work as I expect it to.
Add a [!REPLACE!] tag at the beginning of your entry to avoid it creating an unfinished entry with just your changes, in case the target entry does not exist. This would be prudent for any changes being done to modded creatures, weapons, or races.
-
How is it used? A correct example please :).
-
Well, suppose you are adding a piano to dark elves. In the current version, adding a
[ENTITY:DARKFOREST]
[INSTRUMENT:ITEM_INSTRUMENT_PIANO] without the MA+ mod selected will very likely create an entry for the darkelven entity, and though they would not spawn, it could cause errors.
In the new version, doing this:
[ENTITY:DARKFOREST]
[!REPLACE]
[INSTRUMENT:ITEM_INSTRUMENT_PIANO] will not create a darkelven entity entry, and will only append the piano if they already exist - i.e. the MA+ mod has been installed and placed before this one in order.
Please note that I settled for only one exclamation mark now. It's not like it's on fire or anything. :)
-
Hm. Oh wow, I solved the bodyglosses case. I just couldn't understand where the error was coming from until I remembered just now that the syntax for the creature's bodygloss tag, and the header for the bodygloss entry are the same, and the replace-parser tries to append a new tag to the entry, and crashes.
I patched a loophole for that one, so that if ever the tag name equals the entry header type, the tag is always replaced, not added.
Hm, that's the last known bug squished. It can't be this easy.
I was working on the idea of conditional entry creation.
Let's take a very stupid idea and a very stupid implementation.
Make a "-man" version of every non-mega quadruped creature.
[@CREATURE:#_MAN]
[COND:BODY@1&QUADRUPED][COND:MEGABEAST!][COND:SEMIMEGABEAST!][COND:POWER!]
[NAME:#man:@1#men]
[CAN_SPEAK][CAN_LEARN]
[CANOPENDOORS]
[BODY:QUADRUPED!!HUMANOID:##]
[ATTACK:MAIN:BYTYPE:GRASP:punch:punches:1:2:BLUDGEON][ATTACKFLAG_WITH]
The syntax is:
@ in the header marks conditional creation.
# represents a copied string. Any following text is added at the end.
COND tags represent conditions for inclusion. An entry must match all conditions to be referenced for the final result.
@ in COND tags follows a target tag name, and represents a check on a specific argument in a tag, followed by the target argument index (0-based), and either # or &, for exact match or "includes" match of the following string.
! in COND tags follows a target tag name, and represents a check for the absence of a tag, as opposed to checking for presence, when no modifiers are present.
After the COND tags, semi-normal replacement tags are listed.
# in these tags means that a string value is copied from the current value of the target entry, and any following text is added to it.
@ followed by a number means copying a value from another argument in the same tag, and the following modifiers are then applied to that value.
!! in a tag means a value is replaced by another. Optionally, providing a value before the !! will only replace the value if the target entry's value equals that.
## as the last argument of a tag will replace all nonaffected argument values with those taken from the target entry.
Gee, that's a mighty fine gigantic wall of text I made there.
How's the idea sound?
-
Sounds cool though I may get something wrong (these are obviously easy things but I can just misunderstand something), and for that ## in the body string, does it mean that all the organs after mew humanoid body are fully taken from the vanilla creature?
Also the main question is what does the 1 in the @1#men do?
And the 1st condition... In [@CREATURE:#_MAN], what does it check?
Also where do you exactly define the value of "#"?
Men, I need some explanation ;).
-
@ in the header marks conditional placement. # in the header name means the string will be taken from any matching creatures, and the text following the # will be added to form the new entry name.
## indeed means all organs after those (or if possible, all except those replaced) will be taken from the original creature.
# takes the value from the tag present on the original creature, specifically in the same argument of the same tag as # is used in. [NAME:#:#:#] used when the dog creature is the target, will get the same NAME tag as that of the dog. You can get the same using [NAME:##], but if you're not changing it, you don't need to include it.
"@ in COND tags follows a target tag name, and represents a check on a specific argument in a tag, followed by the target argument index (0-based), and either # or &, for exact match or "includes" match of the following string." means that if you place a @ at the start of a tag argument, the value of the argument will be taken from another argument in the tag, starting at zero for the tag name. So in this case, [NAME:#man:@1#men] applied to [NAME:dog:dogs] will make [NAME:dogman:dogmen]. I actually forgot the third value in the tag, the adjective, but it will in such cases be equal to the first constructed one, "dogman" in this case.
It might actually be possible to do [SPECNAME:FEMALE:NAME@1#girl:NAME@1#girls:NAME@1#girl] to get catgirls and the like... :D
And bear in mind, none of this is possible yet. I'm just theoretizing, basing on previous experiments with conditions and replacement.
-
Well, now it's clear.
However this will need a talented guide-writer, or many people will turn from this in such form.
You'll need a guide which consists of "@ does X and Y in Z" as clear as possible =).
Nice idea. Will you try to make it or "you're just theoretizing"? :)
-
Seeing how bored I am, this will be the next item on the to-do list after I'm done with either of the current two.
As for the syntax - it's not meant to be easily decipherable, rather usable. # always points to the current value except in COND tags where it references a whole string. @ (pronounced "at" btw) points to a different value in the tag, or to a value in another tag, depending on placement.A trailing ! is negation, a !! is replacement, etc, etc. This isn't LUA, so I try to work with what I have.
-
Buump-bu-bu-bump-bump-buh-buuump! :)
Aanyways. The new update includes several bug fixes and a handful of new functions, plus a showcase of the upcoming (hopefully) mod editor interface.
One function I forgot to mention - Overwrite tag. Adding [!OVER] as the first tag in an entry will completely overwrite whatever entry was supposed to be edited with the contents of this new one. It's possible to use the replace and overwrite tags together, like this: [!REPLACE:!OVER], but not as two separate tags, and using the other two tags, delete and reference, is impossible with them.
-
http://dffd.wimbli.com/file.php?id=251
Mega toy mod [MODBASE] :).
I separated some of the toys in different categories and made them modcomps (i.e. "creatures", "boats", "figurines" etc.).
The Other category hosts everything I was lazy to move/unable to determine.
Also I think it'd be more authentic to call the mods in the first post not "compatible mods" but "additional modbase components". Also you are free to ignore this suggestion without causing any pain to me :).
-
By Armok the two of you are fast. I checked this thread yesterday and it seems you've already cranked out a new version and several more "compatible" mods. Anyway I love the work being done with this as I've always been the type to love elements of different mods and had to pick and choose the hard way.
-
http://dffd.wimbli.com/download.php?id=252
A conversion 3-in-1: Botany/Angler/Zoo mod (or in short BAZ), mods which were made by Chariot.
There're 2 interface suggestions:
1. Make a "description" window and add a description text file to the mod folder.
2. Make a new not necessarry tag [AUTHOR:] and let it place author's name in the Modbase Window.
You have on the "grey panel" of the window a free space under the list of included components of the chosen mod. If you don't have it reserved for something it's a perfect place for "Author: ***" string.
Example:
(http://i31.tinypic.com/2rp8r3r.jpg)
Ignore the "ironwood mod" here, it's my bug, I removed it because it's a part of the compound mod.
By the way, this setup works very fine! I didn't test it with full Martial Arts but I'm sure it works fine too.
Anyway with partial MA (without new entities) I managed to run it smoothly.
Added: I've managed to run the full list of mods. They are fully compatible.
By the way, Sean, could you implement the system to place specified items in EVERY entity but specified?
I.e. for now we should specify [ENTITY:MOUNTAIN] when we want to add a specific item to the entity. And I want you to add something like [ENTITY:!] or [ENTITY:!MOUNTAIN]. In first case it'll look for all entities, in 2nd case it'll ignore dwarves upon item placement.
Is it possible that you'll make it (with possible multi-values like [ENTITY:!EVIL:!SKULLKING] or in 2 raws)? It will allow item mods to be implemented to entities from other mods without a re-writing of the mod code for every new entity. I want to play as dark elves with funny caps from Dwarmin and power toys from I3erent :D.
-
My final (for now) interface suggestion (you may like it or not).
(http://i28.tinypic.com/fc8ri0.jpg)
Explanation:
Rep: 0 - mod replaces 0 original files.
Amp: 1 - mod amplifies 1 original file (entity_default.txt for new toys).
Del: 0 - mod deletes 0 original files.
If you manage to do the rep/amp/del system, it'll be possible to make a compatibility check before applying mods. If there's some mod which replaces/deletes some files which are replaced/amplified by other mods, the selection has compatibility problem and BAM a popup appears notifying it (and problematic mods).
-
Just noticed, glad to see my hat mod getting some use haha
-
I've been thinking of adding multiconditional append, yes, along the same lines in fact.
As for more details... well, it's possible to add "author" and "description", sure. I'll think on how to add individual module checks.
Btw, do you people get all correct strings with the latest version? Because I think I saw some mangled names here and there, specifically because some "strange symbols" were replaced by even stranger symbols. I saw a table in a world name once. Weird stuff.
edit: In fact, multiconditional append will work exactly like the conditional entry append I described:
[@ENTITY:#]
[COND:ENTITY&PLAINS!][COND:ENTITY&FOREST!]
[WEAPON:ITEM_WEAPON_ANVIL]
Read as "For every "ENTITY" with no "PLAINS" or "FOREST" in any part of the "ENTITY" tag, create an "ENTITY" entry with the name exactly matching the source entry and append "WEAPON:ITEM_WEAPON_ANVIL" to it."
Since entities with the same name are merged, having a set of entities with the same names as other entities will effectively add the anvil to every entity excluding elves, darkelves, humans, and kentaurs.
-
Yes I am getting a few dwarves with gears and tables in their names.
-
Alright then, try redownloading the new new version. The saving has gotten a whole lot slower (I even had to rig the progressbar to show progress), but as far as I could tell, the weird symbols display properly...
Also, a question - how about a dialog instead of a mere message, at the end of compiling mods? The options being "Reload", "Exit" and "Launch DF"?
-
Hey sean mate,
Got knows what Im doing wrong here but I get this to do anything!
I create the back-up no probs. Open the modbase setup and it loads as I imagine it should gives me three options Mart mod, min mod or exit below that It's got a error message stating it dosen't recognise "choice"
Below that a picture of a dwarf in text and "Press any key to exit"
No matter what I try that happens.
Trying to select the min/mart mod in the rows brings up a box telling me its not installed but as I say the setup won't let me do *anything* let alone install the mod in question :-(
Absolutely no idea what the problem is, I've tried multiple times from scratch using both the .rar and zip versions from the depot.
To make matters worse for some reason Mart mod on it's own no longer seems to be working for me. It installs ok but creating a new word dosen't create the new civs/options for embarking it should do.
Any ideas whats up?
-
Tested with 78c and names are fixed. I can't see any glitched text at the moment :)
PS: the Exit and Launch DF options sound useful but im not sure they are totally necessary considering you run Modbase from the DF base directory
-
Saaaaaaaaaaay what? I've long abandoned that commandline app. Download the Visual Basic one from the link in the first post.
-
Sorted, got it working, well still no idea what was wrong with MA+ on its own but works through the base.
Fun times ahead!
-
There, I deleted the listing for the old ModBase from DFFD. The new one should be much better. :)
Edit: Exit and Launch DF wouldn't be much use unless you consider that the program has to reload the mods after compiling, spending time.
-
True that would get rid of that 5 second "freeze" after you activate.
-
Alright, I got that in for the next version.
*YAAAAAAWN*
Alright, time for me to doze off. 2AM.... that's 8 hours till work, and 6 hours till waking up. Ouch.
-
I understand this condition. No time to sleep because of hobbies, eh? :)
That's actually what I mean, good to see that you use the same system so it won't require even more coding.
I'm not sure if the "Run" button is THAT necessary but it will definitely save some clicks to close app and start dwarfort.exe (hey, what are some manipulations for DF! player which can build grand castles tile-by-tile?).
But this will help anyway for "comfort" and "good sense" values. I mean, there's never enough of perfection, every thing could be made better, so why not to make so if it's not very complicated.
So if it's in plans I'll be glad to see it.
If the version is fine with custom symbols then OK.
If not, they could be replaced with common letters. All these things are used for is just a "DF feel". We don't even know how do they sound right.
Thumbs up for everything you suggest and plan.
-
I said "got that in" meaning "already got that in". As in, already implemented. :) And the new 78c version seems to work with those symbols alright.
-
Aye, that's good to hear.
Also you've finally made not only a very useful tool, but a very clever move.
I already see most important mods to be converted or primary made for your modbase.
This means... Yeah, no more tree-huggling copies of your ideas.
I mean... Yeah, I have an "utilii stillarii" modpack with different things, one of them is "custom bodies". And now, how do I add this feature? "Custom bodies #2"? "Not another Sean's custom bodies"? I'll do it anyway, maybe someone will like my idea of 3 part upperbody (you remember, left side/chest/right side) body and maybe not, but everyone will know that the primary author of the idea is you.
"I saw what you did there." Good job :).
Just a couple of thoughts in the "morning" (I usually wake up at 10-11 AM).
It's a bit strange that noone still tried to make a universal mod merger. It says you're one of the most dedicated modders here, if not the #1. ;D
-
I vowed to myself this morning (or yesterday evening, I forget) that I wouldn't log on to internet from work today. (The damn cellphone yeat up money like popcorn - my week's allotment of money for talking gets gobbled up in a day!)
I just couldn't hold it any longer. I'm bursting apart. From laughter.
...
I made the conditional append/create/whatever function work. And I made the one-entry mod I mentioned earlier.
Anybody seen a groundhogman? Or a grizzly bearman? :D :D :D :D :D
It did take me the whole day though, 7 hours straight.
For you modders that want to start right away - this is the syntax that works:
[CREATURE:#_MAN]
[COND:BODY@1&QUADRUPED][COND:MEGABEAST!][COND:SEMIMEGABEAST!][COND:POWER!]
[NAME:#man:@1#men:@1#man]
[CAN_SPEAK][CAN_LEARN][CANOPENDOORS]
[SIZE:#+1]
[BODY:QUADRUPED!!HUMANOID:>>]
[CHILDNAME:NAME@1#man child:NAME@1#man children]
[ATTACK:MAIN:BYTYPE:GRASP:punch:punches:1:2:BLUDGEON][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:STANCE:kick:kicks:1:3:BLUDGEON][ATTACKFLAG_WITH]
I'll explain in more detail later.
-
Bumperty.
Am I updating a tad too fast? :)
Anyway, the conditional modification/creation now works, at least it did for me when I tested. You can't use some other functions with it, like explicit tag or entry referencing, but it provides some similar functions on its own. Arithmetics can be used to modify numeric values, although the "-" minus needs to be replaced with "\" backslash, because the hyphen is present in names like "one-humped camel" and messes with the parser.
I also fixed a bug nobody seems to have noticed (check your body raws... all flags are doubled, or at least I think so) and redid the loader/saver so that they work faster again.
If you want to see, here's what the entry I posted above does:
creature_awfulman
[OBJECT:CREATURE]
[CREATURE:DOG_MAN]
[NAME:dogman:dogmen:dogman]
[TILE:'d']
[COLOR:6:0:0]
[PETVALUE:30]
[NATURAL]
[BUTCHERABLE_NONSTANDARD]
[LARGE_ROAMING]
[COMMON_DOMESTIC]
[TRAINABLE]
[PET]
[BONECARN]
[PREFSTRING:loyalty]
[BODY:HUMANOID2:TAIL_SMALL:2EYES:2EARS:NOSE:2LUNGS:HEART:GUTS:ORGANS:NECK:THROAT:SPINE:BRAIN:MOUTH]
[BODYGLOSS:PAW]
[SIZE:6]
[MAXAGE:10:20]
[ATTACK:MAIN:BYTYPE:GRASP:punch:punches:1:2:BLUDGEON][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:STANCE:kick:kicks:1:3:BLUDGEON][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:MOUTH:bite:bites:1:6:GORE][ATTACKFLAG_CANLATCH]
[CHILD:1]
[CHILDNAME:dogman child:dogman children]
[FAT:1]
[DIURNAL]
[STANDARD_FLESH]
[HOMEOTHERM:10070]
[LAYERING:100]
[SWIMS_INNATE]
[SWIM_SPEED:2500]
[CAN_SPEAK]
[CAN_LEARN]
[CANOPENDOORS]
[CREATURE:CAT_MAN]
[NAME:catman:catmen:catman]
[TILE:'c']
[COLOR:0:0:1]
[VERMINHUNTER]
[PETVALUE:20]
[BUTCHERABLE_NONSTANDARD]
[CARNIVORE]
[NATURAL]
[PET]
[LARGE_ROAMING]
[COMMON_DOMESTIC]
[BENIGN]
[PREFSTRING:aloofness]
[BODY:HUMANOID2:TAIL_SMALL:2EYES:2EARS:NOSE:2LUNGS:HEART:GUTS:ORGANS:NECK:THROAT:SPINE:BRAIN:MOUTH]
[BODYGLOSS:PAW]
[SIZE:4]
[MAXAGE:10:20]
[ATTACK:MAIN:BYTYPE:STANCE:claw:claws:1:2:GORE][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:GRASP:punch:punches:1:2:BLUDGEON][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:STANCE:kick:kicks:1:3:BLUDGEON][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:MOUTH:bite:bites:1:6:GORE][ATTACKFLAG_CANLATCH]
[CHILD:1]
[CHILDNAME:catman child:catman children]
[FAT:1]
[DIURNAL]
[STANDARD_FLESH]
[HOMEOTHERM:10070]
[LAYERING:100]
[SWIMS_INNATE]
[SWIM_SPEED:2500]
[CAN_SPEAK]
[CAN_LEARN]
[CANOPENDOORS]
[CREATURE:MULE_MAN]
[NAME:muleman:mulemen:muleman]
[TILE:'M']
[COLOR:6:0:0]
[PETVALUE:200]
[PREFSTRING:stubborness]
[LARGE_ROAMING]
[COMMON_DOMESTIC]
[PACK_ANIMAL]
[BENIGN]
[MEANDERER]
[PET]
[BODY:HUMANOID2:TAIL_SMALL:2EYES:2EARS:NOSE:2LUNGS:HEART:GUTS:ORGANS:NECK:THROAT:SPINE:BRAIN:MOUTH]
[BODYGLOSS:HOOF]
[NATURAL]
[SIZE:9]
[ATTACK:MAIN:BYTYPE:GRASP:punch:punches:1:2:BLUDGEON][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:STANCE:kick:kicks:1:3:BLUDGEON][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:STANCE:kick:kicks:1:2:BLUDGEON][ATTACKFLAG_WITH]
[FAT:4]
[DIURNAL]
[STANDARD_FLESH]
[HOMEOTHERM:10068]
[LAYERING:100]
[SWIMS_INNATE]
[SWIM_SPEED:2500]
[TRADE_CAPACITY:2000]
[CAN_SPEAK]
[CAN_LEARN]
[CANOPENDOORS]
[CHILDNAME:muleman child:muleman children]
[CREATURE:DONKEY_MAN]
[NAME:donkeyman:donkeymen:donkeyman]
[TILE:'D']
[COLOR:6:0:0]
[PETVALUE:200]
[PREFSTRING:stubborness]
[LARGE_ROAMING]
[COMMON_DOMESTIC]
[PACK_ANIMAL]
[BENIGN]
[MEANDERER]
[PET]
[BODY:HUMANOID2:TAIL_SMALL:2EYES:2EARS:NOSE:2LUNGS:HEART:GUTS:ORGANS:NECK:THROAT:SPINE:BRAIN:MOUTH]
[BODYGLOSS:HOOF]
[NATURAL]
[SIZE:8]
[ATTACK:MAIN:BYTYPE:GRASP:punch:punches:1:2:BLUDGEON][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:STANCE:kick:kicks:1:3:BLUDGEON][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:STANCE:kick:kicks:1:2:BLUDGEON][ATTACKFLAG_WITH]
[CHILD:1]
[CHILDNAME:donkeyman child:donkeyman children]
[FAT:4]
[DIURNAL]
[STANDARD_FLESH]
[HOMEOTHERM:10068]
[LAYERING:100]
[SWIMS_INNATE]
[SWIM_SPEED:2500]
[TRADE_CAPACITY:1500]
[CAN_SPEAK]
[CAN_LEARN]
[CANOPENDOORS]
-
Did you forget to change the modbase ver. in the modbase window title or is there something wrong? It says 0.78c for me.
-
Hm. I thought I forgot something. Yes, I'll reupload the thing now.
edit: ok, done.
Also, Deon, you might want to check your mod conversions. The Toymod specifically, you have OBJECT:CREATURE in some entity files, and ENTITY:MOUNTAINS instead of ENTITY:MOUNTAIN for dwarves in a few places.
-
Oops.
.
.
Fixed
Is there a way to remove specific token from the file? I.e. if I want to remove the [STOUT] from dwarves.
<cut, understood>
-
[STOUT:!]
-
Ok, so the code:
[@ENTITY:#]
[COND:ENTITY&MOUNTAIN!][COND:ENTITY&FOREST!][COND:ENTITY&PLAINS!]
[HELM:!][WEAPON:!][ARMOR:!][PANTS:!][SHIELD:!][GLOVES:!][SHOES:!][DIGGER:!]
will strip all avaliable entities but 3 main friendly ones if I get it right, do I?
I'm not at home but at work and I want to make some small minimods and see which of them could be useful as components.
-
In this case you need COND:ENTITY#MOUNTAIN!, etc, because "&" checks inclusively, so you will gather up "DARKFOREST" and "GOODPLAINS" into the ignored list.
Otherwise, yeah, pretty much it. You forgot trapcomps, toys, and instruments though.
Hm, I think you edited an "@" into the [ENTITY:] header. You don't need that, it was playing tricks with the entry parser, so I made it check for a "#" in the name instead.
And if you want to replace the three main entities' items with other items, would it not be easier to just use the three separate entries, since you are going to add them unique items anyway?
yetAnotherEdit: And I suspect the system might not work that way... I'm going to make a few tests, but if the way I set up the procedures indeed works like I think it does, the conditional append will be working last, not in the middle of the mod. I'll try to reconfigure it.
-
Yeah, the thing I wrote gave me an error which in a word was about "cannot convert from ENTITY to integer" when I tried to activate the mod.
Also [HELM:!] doesn't do anything for obvious reasons. It should be something like [HELM:ITEM_HELM_CAP!] i think.
By the way, I dled DF at work... x_x
-
No, HELM:! should work. Try it with any normal entry and you'll see. It's the process ordering, as I suspected.
-
[HELM:ITEM_HELM_CAP!] is not working, it adds another entry called [HELM:ITEM_HELM_CAP!].
And it's strange:
[ENTITY:MOUNTAIN]
[HELM:!]
Removes 2 of 3 helms. ITEM_HELM_CAP stays...
Also multiple tokens do nothing.
[ENTITY:MOUNTAIN]
[HELM:!][ARMOR:!]
removes every cap but said ITEM_HELM_CAP and [ARMOR:!] does nothing to armors.
-
Hey, I was wondering if someone could make the "Civilization Forge" mod compatible with this...I'd like to test out both that mod and the mod base. I would try to do it myself but my coding ability quite frankly, is terrible, and I would most likely mess things up until I'm way to frustrated with it and give up.
On another note, if I remember correctly, there is/was a problem with using plants in reactions...something having to do with them not referencing properly I think. There was a work around of sorts involving using different material tags or something. My question is, would this be capable of fixing that? Like taking the original coding and change it into the hacked version that actually works? I know it can't right now, just wondering if this would be a capability in the future, or if this is more trouble than its worth.
PS - I've been using the mineral mod, and have enjoyed it immensely, thanks :) .
-
Hey Sean, I'm one of those Linux users that play DF in wine.
Question is, do you feel like deciding on an open source license for your program so I (or anyone else) possibly attempt to hack up a Mono based version of it?
-
What open source license? The thing's free. I don't care about licensing at this point. The source is bundled with the program, it's somewhat commented and reasonably incomprehensible. It's also in Visual Basic. If you want to, you are free to do anything with it.
I'm not aware of any implications of any license or lack thereof, but I doubt the program has any use outside of the DF community, or any possible derivation of it, so there's no reason to worry about someone editing it and claiming it to be his own creation, because everyone here knows where this one came from.
In other news, internet connection at my home has miraculously been restored. I don't have much in terms of good news.
I've been plagued by ludicrous shroedinbugs (the kind that pop up and you wonder how in the nine levels of hell did the program even work before), and I'm absolutely baffled as to why does the seemingly fail-proof script such as the tag deleter manage to fail so consistently. I've gotten a wee bit closer to deciphering the problems though, and I'll try to get an update out ere the week ends.
And I most certainly won't be able to fix any coding errors in DF. I don't know anything regarding memory editing or reverse engineering.
-
So, can you provide a code to strip the entity from all equipment? As I wrote before, I don't manage to do it.
-
Theoretically, adding a new entry named exactly like the target one and adding [tagname:!] will strip an entry of all such tags. That's theoretically. In practice, it leaves a few entries behind for some reason...
-
So the thing is not working as I said.
Is there another way to do it or should we just wait for you to fix this error?
-
What open source license?
Any you like. BSD / GPLv2/3 and Creative Commons are good because most programmers know them. Just stick one into the archive and it is done.
I'm not aware of any implications of any license or lack thereof [...]
Going by common (legal / social) standard, having a program that was published without any license means that you can only use it exactly as it was provided. Redistribution, alterations and reusing parts of the code in other things aren't automatically included without the authors prior consent.
So there's at least the politeness in not going against what authors of code would generally regard as their own and at most the fear of getting hammered because a noble author decided that his program shouldn't be downloaded except from his homepage where he has got his own countenance engraved with giant proportions. Or something like that.
-
...am I the only one to notice that it's "hoary marmot" and not "hoary martmot"?
-
Also I've found that your body_advanced.txt has body_advanced_martmod on the 1st string. Fix it =).
P.S. May I make a request? There's a "requires" token. I think we may need a "disable" token for inner components.
I.e.
[MSECT:1:(Standalone race) or][FILE:creature_newrace][FILE:entity_newrace][DISABLE:2:3:4]
[MSECT:2:(replace dwarves) or][FILE:creature_newrace][FILE:entity_newrace2][DISABLE:1:3:4]
[MSECT:3:(replace humans) or][FILE:creature_newrace][FILE:entity_newrace3][DISABLE:1:2:4]
[MSECT:4:(replace elves)][FILE:creature_newrace][FILE:entity_newrace4][DISABLE:1:2:3]
This will appear this way: when you check the component from components list the ones it disables will be automatically unchecked.
-
http://dffd.wimbli.com/file.php?id=260
Clockwork mod which adds new mechanical race. A fun one.
Mod thread: http://www.bay12games.com/forum/index.php?topic=19876.0
-
Sean, i really enjoy your Mod Base, but i have a problem. Whenever i load any of the basic mods(the pre-packaged mods) I get weird body parts....like [lowerbody upperbody]. [left upper arm, upper body] etc etc, I have a fresh install and no tilesets or custom mods. Thanks again for the great tool :)
-
Which pack did this error? Do you mean conversions made by me or in-built (prepackaged?) Sean's minerals/MA mods?
Anyway I play with them fine.
Do you have errorlog.txt on startup?
-
How exactly does that Moreau mod work, anyways? Does it add just a select, random few, or does it add a new *man for every animal currently in the game?
-
It adds a new biped *man creature for every non-megabeast quadruped in the game up to the point of the mod's inclusion. Or it should.
-
It does it fine.
Any news about item striptease upgrade, Sean? =)
-
If any of you feel like it, you can leap for joy.
I THINK[/i][/size] I fixed most of the errors I introduced with my reckless typing and thoughtless planning. Heh. I wouldn't say I was any less reckless or thoughtless when doing the fixing, but as far as I can see, it does most of what it couldn't, and still does what it could.
I also added these feats:
Description panel in the UI.
DESCRIPTION field in the mod files.
VERSION field in the mod files. - no real use now, but later might affect compatibility.
MAIN optional flag for MSECT tags - will disable the whole mod when module is disabled. Also has "(required)" added to the name in the listing.
OPT optional flag for MSECT tags - will turn off any modules with the same flag in the mod when turned on. Only one such set of "radio flags" is allowed per mod.
Also, "awfulmen" now work properly, and stripping all entities of items with a conditional entry added somewhere in the end of the modlist is now possible.
-
Grats, Sean. Thank you for your work :).
-
Ye might want to update all your mods to have version numbers, descriptions, and stuff. Also the toy and instrument mods can now take advantage of the conditional placement, I specifically tested those so they should work right.
-
Alrighty, I'm resuming progress here.
The current target, unless any major bugs get in the way, is the mod constructor.
I still can't get my head around the proper way to describe entries and tags, especially with some of the flags having multiple values as well. I suppose we will have a separate "modbase" folder in which there will be three files, for entries, tags, and flags. The tags one will be by far the longest.
-
I'm converting the Small Things mod to ModBase format, since the author of that mod doesn't seem to be getting around to it. As I'm doing so, question: the [!REPLACE] tag... am I correct in that it doesn't actually replace anything, it just makes it so that if the creature (or whatever) doesn't already exist, it won't do anything?
Also, is there any way to make the modbase also allow additions to the speech files under data?
EDIT: I finished the conversion, and it seems to work. Here (http://dffd.wimbli.com/file.php?id=271).
-
Nice, I will update the things I converted today.
Fieari, did you convert the contents to different components? I'm at work now and I don't have time to check.
-
I split it between the Engraving component and the Prefstring component.
-
Yes, it's possible to add that functionality. Those aren't in the same format though, they're just strings separated by linefeeds, so I'll have to make a new parser for them. (the current system basically works off one big entry parser) Or just not bother and have it stick all available content in those into the existing files, making sure there are no empty strings.
-
Hows the mod-comparer function coming? It think it would b awesome to get Legendary Lands into ModBase, but it's not only huge, it moves creatures between files, and utilizes the martial arts mod. With the comparer, the martial arts mod could be stripped from it (and thus be applied separately) and the moving of data around could be dealt with.
-
A small problem with description I noticed: you cannot use ":" in the description.
It makes impossible to include links to dwarffortresswiki userpages and such. Can you make the parser to ignore the ":" inside the description, please?
-
Read the first page and the readme carefully. The parser will automatically replace any ";" with a ":", because it is impossible to omit colons.
-
Yeah I've found this, thanks -).
-
Finally I've got my hands on the mods I converted. I've reuploaded them with description.
I didn't upload the Compound mod still because I'm currently updating it with a new component.
-
Wow, wow! Fix it as soon as possible please =)
Your file body_advanced (which has "body_advanced_martmod" instead of body_advanced as the first string for some reason) does not overwrite the NECK, MOUTH etc., it REMOVES them for some reason.
So if I switch enew bodies on, my creatures miss mouths, necks etc.
EDIT: Further research showed me that if I remove !OVER it works.
And is it intentional that when you press "edit" for the "new bodies and attacks" component it shows [!OVR] instead of [!OVER]?
-
It uses [!OVR] as a redundant fail-safe, it replaces [!OVER] once the entry is checked to avoid additional markup inconsistencies.
NECK, MOUTH, NOSE, and stuff were used before the modbase's inception, for compatibility with creatures from other mods. It makes certain assumptions that it probably shouldn't.
I'll look into the overwriting thing though. As a quick fix, replace all instances of [!OVER] with [BP:!] in the body files. I'll fix it when I figure out what causes it. In the meantime, there's another bug I found. Even deactivated mods will look for their prerequisites, and won't let you compile the mods unless those are met, effectively making creation of total conversions impossible.
-
Well, for now the fastest way to fix it is to remove [!OVER] from the neck, nose, mouth and such as long as usually DF base files use it anyway. At least it is the way I do it. Because OVER someway acts as DEL there.
-
Yeah, for some reason. If you do remove it though, you'll get duplicate necks and noses on creatures. Replace with a [BP:!] instead, that will wipe the tags from the entry, as intended.
Alright, I fixed it. It was some weird problem with the program trying to replace content over an empty entry, so I made it reinitialize with the source entry's material instead.
-
If you do remove it though, you'll get duplicate necks and noses on creatures.
I don't get duplicated bodyparts without !OVER. The modbase just overwrites the content of [BODY:] for them totally.
-
Well, no. But, in my mod, there's this here NECK bodypart that's a separate part between the head and the upper body. The NECK package is thus replaced with a package of vital organs, specifically the neck spine and the cervic joint. If you keep the original content of NECK, you'll get two necks - one that connects to the upper body and has the head on it, and one that connects to the head and dangles from there.
I don't now how the game would interpret that, but I'd rather be on the safe side.
-
I get no duplicated necks.
Look. I've removed "!over". I've activated ALL mods. I get the fully playable world without errors and duplicated bodyparts.
I have the installation of 89b.
-
Check the raws once they're generated. You'll see a NECK bodypart in the NECK package of the body_standard file. Now look in the body_advanced file, at the HUMANOID2 package - it also has a NECK. It might not register with the game properly (and it might not appear until damaged), but the fact that it's there is what I don't like.
-
Ah I see.
But if it removes the NECK from body_standard then you'll have no NECK body for other creatures like eagles and other ones.
I guess it removes it because there's already a NECK in HUMANOID2.
-
That wasn't the point - I altered bodies for ALL relevant vanilla creatures. Besides, I keep the NECK_BASE bodypart for when I need a standard neck. In retrospect, I might have done it the other way around. :) But now it'll break everyone's saves if I change it.
-
I activate main mod + new body and attacks. I get it:
Unrecognized Creature Body Token: DOG : NOSE
Unrecognized Creature Body Token: DOG : NECK
Unrecognized Creature Body Token: DOG : THROAT
Unrecognized Creature Body Token: DOG : SPINE
Unrecognized Creature Body Token: DOG : MOUTH
Unrecognized Creature Body Token: CAT : NOSE
Unrecognized Creature Body Token: CAT : NECK
Unrecognized Creature Body Token: CAT : THROAT
Unrecognized Creature Body Token: CAT : SPINE
Unrecognized Creature Body Token: CAT : MOUTH
Unrecognized Creature Body Token: MULE : NOSE
Unrecognized Creature Body Token: MULE : NECK
Unrecognized Creature Body Token: MULE : THROAT
Unrecognized Creature Body Token: MULE : SPINE
Unrecognized Creature Body Token: MULE : MOUTH
Unrecognized Creature Body Token: DONKEY : NOSE
Unrecognized Creature Body Token: DONKEY : NECK
Unrecognized Creature Body Token: DONKEY : THROAT
Unrecognized Creature Body Token: DONKEY : SPINE
Unrecognized Creature Body Token: DONKEY : MOUTH
Unrecognized Creature Body Token: HORSE : NOSE
Unrecognized Creature Body Token: HORSE : NECK
Unrecognized Creature Body Token: HORSE : THROAT
Unrecognized Creature Body Token: HORSE : SPINE
Unrecognized Creature Body Token: HORSE : MOUTH
Unrecognized Creature Body Token: COW : NOSE
Unrecognized Creature Body Token: COW : NECK
Unrecognized Creature Body Token: COW : THROAT
Unrecognized Creature Body Token: COW : SPINE
Unrecognized Creature Body Token: COW : MOUTH
Unrecognized Creature Body Token: GOAT_MOUNTAIN : NOSE
Unrecognized Creature Body Token: GOAT_MOUNTAIN : NECK
Unrecognized Creature Body Token: GOAT_MOUNTAIN : THROAT
Unrecognized Creature Body Token: GOAT_MOUNTAIN : SPINE
Unrecognized Creature Body Token: GOAT_MOUNTAIN : MOUTH
Unrecognized Creature Body Token: MARMOT_HOARY : NOSE
Unrecognized Creature Body Token: MARMOT_HOARY : NECK
Unrecognized Creature Body Token: MARMOT_HOARY : THROAT
Unrecognized Creature Body Token: MARMOT_HOARY : SPINE
Unrecognized Creature Body Token: MARMOT_HOARY : MOUTH
Unrecognized Creature Body Token: BIRD_EAGLE_GIANT : NECK
Unrecognized Creature Body Token: BIRD_EAGLE_GIANT : THROAT
Unrecognized Creature Body Token: BIRD_EAGLE_GIANT : SPINE
Unrecognized Creature Body Token: GNOME_MOUNTAIN : NOSE
Unrecognized Creature Body Token: GNOME_MOUNTAIN : NECK
Unrecognized Creature Body Token: GNOME_MOUNTAIN : THROAT
Unrecognized Creature Body Token: GNOME_MOUNTAIN : SPINE
Unrecognized Creature Body Token: GNOME_MOUNTAIN : MOUTH
Unrecognized Creature Body Token: GNOME_DARK : NOSE
Unrecognized Creature Body Token: GNOME_DARK : NECK
Unrecognized Creature Body Token: GNOME_DARK : THROAT
Unrecognized Creature Body Token: GNOME_DARK : SPINE
Unrecognized Creature Body Token: GNOME_DARK : MOUTH
Unrecognized Creature Body Token: WALRUS : NOSE
Unrecognized Creature Body Token: WALRUS : NECK
Unrecognized Creature Body Token: WALRUS : THROAT
Unrecognized Creature Body Token: WALRUS : SPINE
Unrecognized Creature Body Token: WALRUS : MOUTH
Unrecognized Creature Body Token: WHALE : NECK
Unrecognized Creature Body Token: WHALE : SPINE
Unrecognized Creature Body Token: FISH_LAMPREY_SEA : NECK
Unrecognized Creature Body Token: FISH_LAMPREY_SEA : SPINE
Unrecognized Creature Body Token: FISH_LAMPREY_SEA : MOUTH
Unrecognized Creature Body Token: SHARK_GREAT_WHITE : NECK
Unrecognized Creature Body Token: SHARK_GREAT_WHITE : SPINE
Unrecognized Creature Body Token: SHARK_FRILL : NECK
Unrecognized Creature Body Token: SHARK_FRILL : SPINE
Unrecognized Creature Body Token: SHARK_SPINY_DOGFISH : NECK
Unrecognized Creature Body Token: SHARK_SPINY_DOGFISH : SPINE
Unrecognized Creature Body Token: SHARK_SPINY_DOGFISH : MOUTH
Unrecognized Creature Body Token: SHARK_WOBBEGONG_SPOTTED : NECK
Unrecognized Creature Body Token: SHARK_WOBBEGONG_SPOTTED : SPINE
Unrecognized Creature Body Token: SHARK_WOBBEGONG_SPOTTED : MOUTH
Unrecognized Creature Body Token: SHARK_WHALE : NECK
Unrecognized Creature Body Token: SHARK_WHALE : SPINE
Unrecognized Creature Body Token: SHARK_WHALE : MOUTH
Unrecognized Creature Body Token: SHARK_BASKING : NECK
Unrecognized Creature Body Token: SHARK_BASKING : SPINE
Unrecognized Creature Body Token: SHARK_NURSE : NECK
Unrecognized Creature Body Token: SHARK_NURSE : SPINE
Unrecognized Creature Body Token: SHARK_MAKO_SHORTFIN : NECK
Unrecognized Creature Body Token: SHARK_MAKO_SHORTFIN : SPINE
Unrecognized Creature Body Token: SHARK_MAKO_LONGFIN : NECK
Unrecognized Creature Body Token: SHARK_MAKO_LONGFIN : SPINE
Unrecognized Creature Body Token: SHARK_TIGER : NECK
Unrecognized Creature Body Token: SHARK_TIGER : SPINE
Unrecognized Creature Body Token: SHARK_BULL : NECK
Unrecognized Creature Body Token: SHARK_BULL : SPINE
Unrecognized Creature Body Token: SHARK_REEF_BLACKTIP : NECK
Unrecognized Creature Body Token: SHARK_REEF_BLACKTIP : SPINE
Unrecognized Creature Body Token: SHARK_REEF_WHITETIP : NECK
Unrecognized Creature Body Token: SHARK_REEF_WHITETIP : SPINE
Unrecognized Creature Body Token: SHARK_BLUE : NECK
Unrecognized Creature Body Token: SHARK_BLUE : SPINE
Unrecognized Creature Body Token: SHARK_HAMMERHEAD : NECK
Unrecognized Creature Body Token: SHARK_HAMMERHEAD : SPINE
Unrecognized Creature Body Token: SHARK_ANGEL : NECK
Unrecognized Creature Body Token: SHARK_ANGEL : SPINE
Unrecognized Creature Body Token: FISH_SKATE_COMMON : NECK
Unrecognized Creature Body Token: FISH_SKATE_COMMON : SPINE
Unrecognized Creature Body Token: FISH_SKATE_COMMON : MOUTH
Unrecognized Creature Body Token: FISH_RAY_MANTA : NECK
Unrecognized Creature Body Token: FISH_RAY_MANTA : SPINE
Unrecognized Creature Body Token: FISH_RAY_MANTA : MOUTH
Unrecognized Creature Body Token: FISH_STINGRAY : NECK
Unrecognized Creature Body Token: FISH_STINGRAY : SPINE
Unrecognized Creature Body Token: FISH_STINGRAY : MOUTH
Unrecognized Creature Body Token: FISH_COELACANTH : NECK
Unrecognized Creature Body Token: FISH_COELACANTH : SPINE
Unrecognized Creature Body Token: FISH_STURGEON : NECK
Unrecognized Creature Body Token: FISH_STURGEON : SPINE
Unrecognized Creature Body Token: FISH_CONGER_EEL : NECK
Unrecognized Creature Body Token: FISH_CONGER_EEL : SPINE
Unrecognized Creature Body Token: FISH_CONGER_EEL : MOUTH
Unrecognized Creature Body Token: FISH_MILKFISH : NECK
Unrecognized Creature Body Token: FISH_MILKFISH : SPINE
Unrecognized Creature Body Token: FISH_COD : NECK
Unrecognized Creature Body Token: FISH_COD : SPINE
Unrecognized Creature Body Token: FISH_OPAH : NECK
Unrecognized Creature Body Token: FISH_OPAH : SPINE
Unrecognized Creature Body Token: FISH_GROUPER_GIANT : NECK
Unrecognized Creature Body Token: FISH_GROUPER_GIANT : SPINE
Unrecognized Creature Body Token: FISH_BLUEFISH : NECK
Unrecognized Creature Body Token: FISH_BLUEFISH : SPINE
Unrecognized Creature Body Token: FISH_SUNFISH_OCEAN : NECK
Unrecognized Creature Body Token: FISH_SUNFISH_OCEAN : SPINE
Unrecognized Creature Body Token: FISH_SUNFISH_OCEAN : MOUTH
Unrecognized Creature Body Token: FISH_SWORDFISH : NECK
Unrecognized Creature Body Token: FISH_SWORDFISH : SPINE
Unrecognized Creature Body Token: FISH_SWORDFISH : MOUTH
Unrecognized Creature Body Token: FISH_MARLIN : NECK
Unrecognized Creature Body Token: FISH_MARLIN : SPINE
Unrecognized Creature Body Token: FISH_MARLIN : MOUTH
Unrecognized Creature Body Token: FISH_HALIBUT : NECK
Unrecognized Creature Body Token: FISH_HALIBUT : SPINE
Unrecognized Creature Body Token: FISH_BARRACUDA_GREAT : NECK
Unrecognized Creature Body Token: FISH_BARRACUDA_GREAT : SPINE
Unrecognized Creature Body Token: FISH_TUNA_BLUEFIN : NECK
Unrecognized Creature Body Token: FISH_TUNA_BLUEFIN : SPINE
Unrecognized Creature Body Token: HIPPO : NOSE
Unrecognized Creature Body Token: HIPPO : NECK
Unrecognized Creature Body Token: HIPPO : THROAT
Unrecognized Creature Body Token: HIPPO : SPINE
Unrecognized Creature Body Token: HIPPO : MOUTH
Unrecognized Creature Body Token: FISH_GAR_LONGNOSE : NECK
Unrecognized Creature Body Token: FISH_GAR_LONGNOSE : SPINE
Unrecognized Creature Body Token: FISH_GAR_LONGNOSE : MOUTH
Unrecognized Creature Body Token: FISH_CARP : NECK
Unrecognized Creature Body Token: FISH_CARP : SPINE
Unrecognized Creature Body Token: FISH_CARP : MOUTH
Unrecognized Creature Body Token: FISH_TIGERFISH : NECK
Unrecognized Creature Body Token: FISH_TIGERFISH : SPINE
Unrecognized Creature Body Token: FISH_TIGERFISH : MOUTH
Unrecognized Creature Body Token: FISH_PIKE : NECK
Unrecognized Creature Body Token: FISH_PIKE : SPINE
Unrecognized Creature Body Token: FISH_PIKE : MOUTH
Unrecognized Creature Body Token: BEAR_GRIZZLY : NOSE
Unrecognized Creature Body Token: BEAR_GRIZZLY : NECK
Unrecognized Creature Body Token: BEAR_GRIZZLY : THROAT
Unrecognized Creature Body Token: BEAR_GRIZZLY : SPINE
Unrecognized Creature Body Token: BEAR_BLACK : NOSE
Unrecognized Creature Body Token: BEAR_BLACK : NECK
Unrecognized Creature Body Token: BEAR_BLACK : THROAT
Unrecognized Creature Body Token: BEAR_BLACK : SPINE
Unrecognized Creature Body Token: DEER : NOSE
Unrecognized Creature Body Token: DEER : NECK
Unrecognized Creature Body Token: DEER : THROAT
Unrecognized Creature Body Token: DEER : SPINE
Unrecognized Creature Body Token: DEER : MOUTH
Unrecognized Creature Body Token: FOX : NOSE
Unrecognized Creature Body Token: FOX : NECK
Unrecognized Creature Body Token: FOX : THROAT
Unrecognized Creature Body Token: FOX : SPINE
Unrecognized Creature Body Token: FOX : MOUTH
Unrecognized Creature Body Token: RACCOON : NOSE
Unrecognized Creature Body Token: RACCOON : NECK
Unrecognized Creature Body Token: RACCOON : THROAT
Unrecognized Creature Body Token: RACCOON : SPINE
Unrecognized Creature Body Token: RACCOON : MOUTH
Unrecognized Creature Body Token: MACAQUE_RHESUS : NOSE
Unrecognized Creature Body Token: MACAQUE_RHESUS : NECK
Unrecognized Creature Body Token: MACAQUE_RHESUS : THROAT
Unrecognized Creature Body Token: MACAQUE_RHESUS : SPINE
Unrecognized Creature Body Token: MACAQUE_RHESUS : MOUTH
Unrecognized Creature Body Token: COUGAR : NOSE
Unrecognized Creature Body Token: COUGAR : NECK
Unrecognized Creature Body Token: COUGAR : THROAT
Unrecognized Creature Body Token: COUGAR : SPINE
Unrecognized Creature Body Token: WOLF : NOSE
Unrecognized Creature Body Token: WOLF : NECK
Unrecognized Creature Body Token: WOLF : THROAT
Unrecognized Creature Body Token: WOLF : SPINE
Unrecognized Creature Body Token: GROUNDHOG : NOSE
Unrecognized Creature Body Token: GROUNDHOG : NECK
Unrecognized Creature Body Token: GROUNDHOG : THROAT
Unrecognized Creature Body Token: GROUNDHOG : SPINE
Unrecognized Creature Body Token: GROUNDHOG : MOUTH
Unrecognized Creature Body Token: ALLIGATOR : NOSE
Unrecognized Creature Body Token: ALLIGATOR : NECK
Unrecognized Creature Body Token: ALLIGATOR : THROAT
Unrecognized Creature Body Token: ALLIGATOR : SPINE
Unrecognized Creature Body Token: ALLIGATOR : MOUTH
Unrecognized Creature Body Token: ELEPHANT : NECK
Unrecognized Creature Body Token: ELEPHANT : THROAT
Unrecognized Creature Body Token: ELEPHANT : SPINE
Unrecognized Creature Body Token: ELEPHANT : MOUTH
Unrecognized Creature Body Token: WARTHOG : NOSE
Unrecognized Creature Body Token: WARTHOG : NECK
Unrecognized Creature Body Token: WARTHOG : THROAT
Unrecognized Creature Body Token: WARTHOG : SPINE
Unrecognized Creature Body Token: WARTHOG : MOUTH
Unrecognized Creature Body Token: LION : NOSE
Unrecognized Creature Body Token: LION : NECK
Unrecognized Creature Body Token: LION : THROAT
Unrecognized Creature Body Token: LION : SPINE
Unrecognized Creature Body Token: LEOPARD : NOSE
Unrecognized Creature Body Token: LEOPARD : NECK
Unrecognized Creature Body Token: LEOPARD : THROAT
Unrecognized Creature Body Token: LEOPARD : SPINE
Unrecognized Creature Body Token: JAGUAR : NOSE
Unrecognized Creature Body Token: JAGUAR : NECK
Unrecognized Creature Body Token: JAGUAR : THROAT
Unrecognized Creature Body Token: JAGUAR : SPINE
Unrecognized Creature Body Token: TIGER : NOSE
Unrecognized Creature Body Token: TIGER : NECK
Unrecognized Creature Body Token: TIGER : THROAT
Unrecognized Creature Body Token: TIGER : SPINE
Unrecognized Creature Body Token: CHEETAH : NOSE
Unrecognized Creature Body Token: CHEETAH : NECK
Unrecognized Creature Body Token: CHEETAH : THROAT
Unrecognized Creature Body Token: CHEETAH : SPINE
Unrecognized Creature Body Token: GAZELLE : NOSE
Unrecognized Creature Body Token: GAZELLE : NECK
Unrecognized Creature Body Token: GAZELLE : THROAT
Unrecognized Creature Body Token: GAZELLE : SPINE
Unrecognized Creature Body Token: GAZELLE : MOUTH
Unrecognized Creature Body Token: MANDRILL : NOSE
Unrecognized Creature Body Token: MANDRILL : NECK
Unrecognized Creature Body Token: MANDRILL : THROAT
Unrecognized Creature Body Token: MANDRILL : SPINE
Unrecognized Creature Body Token: MANDRILL : MOUTH
Unrecognized Creature Body Token: CHIMPANZEE : NOSE
Unrecognized Creature Body Token: CHIMPANZEE : NECK
Unrecognized Creature Body Token: CHIMPANZEE : THROAT
Unrecognized Creature Body Token: CHIMPANZEE : SPINE
Unrecognized Creature Body Token: CHIMPANZEE : MOUTH
Unrecognized Creature Body Token: BONOBO : NOSE
Unrecognized Creature Body Token: BONOBO : NECK
Unrecognized Creature Body Token: BONOBO : THROAT
Unrecognized Creature Body Token: BONOBO : SPINE
Unrecognized Creature Body Token: BONOBO : MOUTH
Unrecognized Creature Body Token: GORILLA : NOSE
Unrecognized Creature Body Token: GORILLA : NECK
Unrecognized Creature Body Token: GORILLA : THROAT
Unrecognized Creature Body Token: GORILLA : SPINE
Unrecognized Creature Body Token: GORILLA : MOUTH
Unrecognized Creature Body Token: ORANGUTAN : NOSE
Unrecognized Creature Body Token: ORANGUTAN : NECK
Unrecognized Creature Body Token: ORANGUTAN : THROAT
Unrecognized Creature Body Token: ORANGUTAN : SPINE
Unrecognized Creature Body Token: ORANGUTAN : MOUTH
Unrecognized Creature Body Token: GIBBON_SIAMANG : NOSE
Unrecognized Creature Body Token: GIBBON_SIAMANG : NECK
Unrecognized Creature Body Token: GIBBON_SIAMANG : THROAT
Unrecognized Creature Body Token: GIBBON_SIAMANG : SPINE
Unrecognized Creature Body Token: GIBBON_SIAMANG : MOUTH
Unrecognized Creature Body Token: GIBBON_WHITE_HANDED : NOSE
Unrecognized Creature Body Token: GIBBON_WHITE_HANDED : NECK
Unrecognized Creature Body Token: GIBBON_WHITE_HANDED : THROAT
Unrecognized Creature Body Token: GIBBON_WHITE_HANDED : SPINE
Unrecognized Creature Body Token: GIBBON_WHITE_HANDED : MOUTH
Unrecognized Creature Body Token: GIBBON_BLACK_HANDED : NOSE
Unrecognized Creature Body Token: GIBBON_BLACK_HANDED : NECK
Unrecognized Creature Body Token: GIBBON_BLACK_HANDED : THROAT
Unrecognized Creature Body Token: GIBBON_BLACK_HANDED : SPINE
Unrecognized Creature Body Token: GIBBON_BLACK_HANDED : MOUTH
Unrecognized Creature Body Token: GIBBON_GRAY : NOSE
Unrecognized Creature Body Token: GIBBON_GRAY : NECK
Unrecognized Creature Body Token: GIBBON_GRAY : THROAT
Unrecognized Creature Body Token: GIBBON_GRAY : SPINE
Unrecognized Creature Body Token: GIBBON_GRAY : MOUTH
Unrecognized Creature Body Token: GIBBON_SILVERY : NOSE
Unrecognized Creature Body Token: GIBBON_SILVERY : NECK
Unrecognized Creature Body Token: GIBBON_SILVERY : THROAT
Unrecognized Creature Body Token: GIBBON_SILVERY : SPINE
Unrecognized Creature Body Token: GIBBON_SILVERY : MOUTH
Unrecognized Creature Body Token: GIBBON_PILEATED : NOSE
Unrecognized Creature Body Token: GIBBON_PILEATED : NECK
Unrecognized Creature Body Token: GIBBON_PILEATED : THROAT
Unrecognized Creature Body Token: GIBBON_PILEATED : SPINE
Unrecognized Creature Body Token: GIBBON_PILEATED : MOUTH
Unrecognized Creature Body Token: GIBBON_BILOU : NOSE
Unrecognized Creature Body Token: GIBBON_BILOU : NECK
Unrecognized Creature Body Token: GIBBON_BILOU : THROAT
Unrecognized Creature Body Token: GIBBON_BILOU : SPINE
Unrecognized Creature Body Token: GIBBON_BILOU : MOUTH
Unrecognized Creature Body Token: GIBBON_WHITE_BROWED : NOSE
Unrecognized Creature Body Token: GIBBON_WHITE_BROWED : NECK
Unrecognized Creature Body Token: GIBBON_WHITE_BROWED : THROAT
Unrecognized Creature Body Token: GIBBON_WHITE_BROWED : SPINE
Unrecognized Creature Body Token: GIBBON_WHITE_BROWED : MOUTH
Unrecognized Creature Body Token: GIBBON_BLACK_CRESTED : NOSE
Unrecognized Creature Body Token: GIBBON_BLACK_CRESTED : NECK
Unrecognized Creature Body Token: GIBBON_BLACK_CRESTED : THROAT
Unrecognized Creature Body Token: GIBBON_BLACK_CRESTED : SPINE
Unrecognized Creature Body Token: GIBBON_BLACK_CRESTED : MOUTH
Unrecognized Creature Body Token: CAMEL_1_HUMP : NOSE
Unrecognized Creature Body Token: CAMEL_1_HUMP : NECK
Unrecognized Creature Body Token: CAMEL_1_HUMP : THROAT
Unrecognized Creature Body Token: CAMEL_1_HUMP : SPINE
Unrecognized Creature Body Token: CAMEL_1_HUMP : MOUTH
Unrecognized Creature Body Token: CAMEL_2_HUMP : NOSE
Unrecognized Creature Body Token: CAMEL_2_HUMP : NECK
Unrecognized Creature Body Token: CAMEL_2_HUMP : THROAT
Unrecognized Creature Body Token: CAMEL_2_HUMP : SPINE
Unrecognized Creature Body Token: CAMEL_2_HUMP : MOUTH
Unrecognized Creature Body Token: CROCODILE_SALTWATER : NOSE
Unrecognized Creature Body Token: CROCODILE_SALTWATER : NECK
Unrecognized Creature Body Token: CROCODILE_SALTWATER : THROAT
Unrecognized Creature Body Token: CROCODILE_SALTWATER : SPINE
Unrecognized Creature Body Token: CROCODILE_SALTWATER : MOUTH
Unrecognized Creature Body Token: MUSKOX : NOSE
Unrecognized Creature Body Token: MUSKOX : NECK
Unrecognized Creature Body Token: MUSKOX : THROAT
Unrecognized Creature Body Token: MUSKOX : SPINE
Unrecognized Creature Body Token: MUSKOX : MOUTH
Unrecognized Creature Body Token: ELK : NOSE
Unrecognized Creature Body Token: ELK : NECK
Unrecognized Creature Body Token: ELK : THROAT
Unrecognized Creature Body Token: ELK : SPINE
Unrecognized Creature Body Token: ELK : MOUTH
Unrecognized Creature Body Token: BEAR_POLAR : NOSE
Unrecognized Creature Body Token: BEAR_POLAR : NECK
Unrecognized Creature Body Token: BEAR_POLAR : THROAT
Unrecognized Creature Body Token: BEAR_POLAR : SPINE
Unrecognized Creature Body Token: SNAILMAN : MOUTH
Unrecognized Creature Body Token: SLUGMAN : MOUTH
Unrecognized Creature Body Token: LEECHMAN : MOUTH
Unrecognized Creature Body Token: LION_GIANT : NOSE
Unrecognized Creature Body Token: LION_GIANT : NECK
Unrecognized Creature Body Token: LION_GIANT : THROAT
Unrecognized Creature Body Token: LION_GIANT : SPINE
Unrecognized Creature Body Token: LEOPARD_GIANT : NOSE
Unrecognized Creature Body Token: LEOPARD_GIANT : NECK
Unrecognized Creature Body Token: LEOPARD_GIANT : THROAT
Unrecognized Creature Body Token: LEOPARD_GIANT : SPINE
Unrecognized Creature Body Token: JAGUAR_GIANT : NOSE
Unrecognized Creature Body Token: JAGUAR_GIANT : NECK
Unrecognized Creature Body Token: JAGUAR_GIANT : THROAT
Unrecognized Creature Body Token: JAGUAR_GIANT : SPINE
Unrecognized Creature Body Token: TIGER_GIANT : NOSE
Unrecognized Creature Body Token: TIGER_GIANT : NECK
Unrecognized Creature Body Token: TIGER_GIANT : THROAT
Unrecognized Creature Body Token: TIGER_GIANT : SPINE
Unrecognized Creature Body Token: CHEETAH_GIANT : NOSE
Unrecognized Creature Body Token: CHEETAH_GIANT : NECK
Unrecognized Creature Body Token: CHEETAH_GIANT : THROAT
Unrecognized Creature Body Token: CHEETAH_GIANT : SPINE
Unrecognized Creature Body Token: TIGERMAN : NOSE
Unrecognized Creature Body Token: TIGERMAN : NECK
Unrecognized Creature Body Token: TIGERMAN : THROAT
Unrecognized Creature Body Token: TIGERMAN : SPINE
Unrecognized Creature Body Token: DWARF : NOSE
Unrecognized Creature Body Token: DWARF : NECK
Unrecognized Creature Body Token: DWARF : THROAT
Unrecognized Creature Body Token: DWARF : SPINE
Unrecognized Creature Body Token: DWARF : MOUTH
Unrecognized Creature Body Token: HUMAN : NOSE
Unrecognized Creature Body Token: HUMAN : NECK
Unrecognized Creature Body Token: HUMAN : THROAT
Unrecognized Creature Body Token: HUMAN : SPINE
Unrecognized Creature Body Token: HUMAN : MOUTH
Unrecognized Creature Body Token: ELF : NOSE
Unrecognized Creature Body Token: ELF : NECK
Unrecognized Creature Body Token: ELF : THROAT
Unrecognized Creature Body Token: ELF : SPINE
Unrecognized Creature Body Token: ELF : MOUTH
Unrecognized Creature Body Token: GOBLIN : NOSE
Unrecognized Creature Body Token: GOBLIN : NECK
Unrecognized Creature Body Token: GOBLIN : THROAT
Unrecognized Creature Body Token: GOBLIN : SPINE
Unrecognized Creature Body Token: GOBLIN : MOUTH
Unrecognized Creature Body Token: KOBOLD : NOSE
Unrecognized Creature Body Token: KOBOLD : NECK
Unrecognized Creature Body Token: KOBOLD : THROAT
Unrecognized Creature Body Token: KOBOLD : SPINE
Unrecognized Creature Body Token: KOBOLD : MOUTH
Unrecognized Creature Body Token: GREMLIN : NOSE
Unrecognized Creature Body Token: GREMLIN : NECK
Unrecognized Creature Body Token: GREMLIN : THROAT
Unrecognized Creature Body Token: GREMLIN : SPINE
Unrecognized Creature Body Token: GREMLIN : MOUTH
Unrecognized Creature Body Token: WIZARD : NOSE
Unrecognized Creature Body Token: WIZARD : NECK
Unrecognized Creature Body Token: WIZARD : THROAT
Unrecognized Creature Body Token: WIZARD : SPINE
Unrecognized Creature Body Token: WIZARD : MOUTH
Unrecognized Creature Body Token: FROGMAN : NOSE
Unrecognized Creature Body Token: FROGMAN : NECK
Unrecognized Creature Body Token: FROGMAN : THROAT
Unrecognized Creature Body Token: FROGMAN : SPINE
Unrecognized Creature Body Token: FROGMAN : MOUTH
Unrecognized Creature Body Token: LIZARDMAN : NOSE
Unrecognized Creature Body Token: LIZARDMAN : NECK
Unrecognized Creature Body Token: LIZARDMAN : THROAT
Unrecognized Creature Body Token: LIZARDMAN : SPINE
Unrecognized Creature Body Token: LIZARDMAN : MOUTH
Unrecognized Creature Body Token: SNAKEMAN : NOSE
Unrecognized Creature Body Token: SNAKEMAN : NECK
Unrecognized Creature Body Token: SNAKEMAN : THROAT
Unrecognized Creature Body Token: SNAKEMAN : SPINE
Unrecognized Creature Body Token: SNAKEMAN : MOUTH
Unrecognized Creature Body Token: RATMAN : NOSE
Unrecognized Creature Body Token: RATMAN : NECK
Unrecognized Creature Body Token: RATMAN : THROAT
Unrecognized Creature Body Token: RATMAN : SPINE
Unrecognized Creature Body Token: RATMAN : MOUTH
Unrecognized Creature Body Token: BATMAN : NOSE
Unrecognized Creature Body Token: BATMAN : NECK
Unrecognized Creature Body Token: BATMAN : THROAT
Unrecognized Creature Body Token: BATMAN : SPINE
Unrecognized Creature Body Token: BATMAN : MOUTH
Unrecognized Creature Body Token: ANTMAN : MOUTH
Unrecognized Creature Body Token: TROLL : NOSE
Unrecognized Creature Body Token: TROLL : NECK
Unrecognized Creature Body Token: TROLL : THROAT
Unrecognized Creature Body Token: TROLL : SPINE
Unrecognized Creature Body Token: TROLL : MOUTH
Unrecognized Creature Body Token: OGRE : NOSE
Unrecognized Creature Body Token: OGRE : NECK
Unrecognized Creature Body Token: OGRE : THROAT
Unrecognized Creature Body Token: OGRE : SPINE
Unrecognized Creature Body Token: OGRE : MOUTH
Unrecognized Creature Body Token: UNICORN : NOSE
Unrecognized Creature Body Token: UNICORN : NECK
Unrecognized Creature Body Token: UNICORN : THROAT
Unrecognized Creature Body Token: UNICORN : SPINE
Unrecognized Creature Body Token: UNICORN : MOUTH
Unrecognized Creature Body Token: DRAGON : NOSE
Unrecognized Creature Body Token: DRAGON : NECK
Unrecognized Creature Body Token: DRAGON : THROAT
Unrecognized Creature Body Token: DRAGON : SPINE
Unrecognized Creature Body Token: SATYR : NOSE
Unrecognized Creature Body Token: SATYR : NECK
Unrecognized Creature Body Token: SATYR : THROAT
Unrecognized Creature Body Token: SATYR : SPINE
Unrecognized Creature Body Token: SATYR : MOUTH
Unrecognized Creature Body Token: DEMON : NOSE
Unrecognized Creature Body Token: DEMON : NECK
Unrecognized Creature Body Token: DEMON : THROAT
Unrecognized Creature Body Token: DEMON : SPINE
Unrecognized Creature Body Token: DEMON : MOUTH
Unrecognized Creature Body Token: FROG_DEMON : NOSE
Unrecognized Creature Body Token: FROG_DEMON : NECK
Unrecognized Creature Body Token: FROG_DEMON : THROAT
Unrecognized Creature Body Token: FROG_DEMON : SPINE
Unrecognized Creature Body Token: FROG_DEMON : MOUTH
Unrecognized Creature Body Token: TENTACLE_DEMON : NOSE
Unrecognized Creature Body Token: TENTACLE_DEMON : NECK
Unrecognized Creature Body Token: TENTACLE_DEMON : THROAT
Unrecognized Creature Body Token: TENTACLE_DEMON : SPINE
Unrecognized Creature Body Token: TENTACLE_DEMON : MOUTH
Unrecognized Creature Body Token: TITAN : NOSE
Unrecognized Creature Body Token: TITAN : NECK
Unrecognized Creature Body Token: TITAN : THROAT
Unrecognized Creature Body Token: TITAN : SPINE
Unrecognized Creature Body Token: TITAN : MOUTH
Unrecognized Creature Body Token: COLOSSUS_BRONZE : NOSE
Unrecognized Creature Body Token: GIANT : NOSE
Unrecognized Creature Body Token: GIANT : NECK
Unrecognized Creature Body Token: GIANT : THROAT
Unrecognized Creature Body Token: GIANT : SPINE
Unrecognized Creature Body Token: GIANT : MOUTH
Unrecognized Creature Body Token: CYCLOPS : NOSE
Unrecognized Creature Body Token: CYCLOPS : NECK
Unrecognized Creature Body Token: CYCLOPS : THROAT
Unrecognized Creature Body Token: CYCLOPS : SPINE
Unrecognized Creature Body Token: CYCLOPS : MOUTH
Unrecognized Creature Body Token: ETTIN : NOSE
Unrecognized Creature Body Token: ETTIN : SPINE
Unrecognized Creature Body Token: ETTIN : MOUTH
Unrecognized Creature Body Token: MINOTAUR : NOSE
Unrecognized Creature Body Token: MINOTAUR : NECK
Unrecognized Creature Body Token: MINOTAUR : THROAT
Unrecognized Creature Body Token: MINOTAUR : SPINE
Unrecognized Creature Body Token: MINOTAUR : MOUTH
Unrecognized Creature Body Token: SASQUATCH : NOSE
Unrecognized Creature Body Token: SASQUATCH : NECK
Unrecognized Creature Body Token: SASQUATCH : THROAT
Unrecognized Creature Body Token: SASQUATCH : SPINE
Unrecognized Creature Body Token: SASQUATCH : MOUTH
Unrecognized Creature Body Token: BLIZZARD_MAN : NOSE
Unrecognized Creature Body Token: BLIZZARD_MAN : NECK
Unrecognized Creature Body Token: BLIZZARD_MAN : THROAT
Unrecognized Creature Body Token: BLIZZARD_MAN : SPINE
Unrecognized Creature Body Token: BLIZZARD_MAN : MOUTH
Unrecognized Creature Body Token: WOLF_ICE : NOSE
Unrecognized Creature Body Token: WOLF_ICE : NECK
Unrecognized Creature Body Token: WOLF_ICE : THROAT
Unrecognized Creature Body Token: WOLF_ICE : SPINE
Unrecognized Creature Body Token: BEAK_DOG : NOSE
Unrecognized Creature Body Token: BEAK_DOG : NECK
Unrecognized Creature Body Token: BEAK_DOG : THROAT
Unrecognized Creature Body Token: BEAK_DOG : SPINE
Unrecognized Creature Body Token: WEREWOLF : NOSE
Unrecognized Creature Body Token: WEREWOLF : NECK
Unrecognized Creature Body Token: WEREWOLF : THROAT
Unrecognized Creature Body Token: WEREWOLF : SPINE
Unrecognized Creature Body Token: BLENDEC_FOUL : NOSE
Unrecognized Creature Body Token: BLENDEC_FOUL : NECK
Unrecognized Creature Body Token: BLENDEC_FOUL : THROAT
Unrecognized Creature Body Token: BLENDEC_FOUL : SPINE
Unrecognized Creature Body Token: BLENDEC_FOUL : MOUTH
Unrecognized Creature Body Token: STRANGLER : NOSE
Unrecognized Creature Body Token: STRANGLER : NECK
Unrecognized Creature Body Token: STRANGLER : THROAT
Unrecognized Creature Body Token: STRANGLER : SPINE
Unrecognized Creature Body Token: STRANGLER : MOUTH
Unrecognized Creature Body Token: NIGHTWING : NOSE
Unrecognized Creature Body Token: NIGHTWING : NECK
Unrecognized Creature Body Token: NIGHTWING : SPINE
Unrecognized Creature Body Token: NIGHTWING : MOUTH
Unrecognized Creature Body Token: HARPY : NOSE
Unrecognized Creature Body Token: HARPY : SPINE
Unrecognized Creature Body Token: HARPY : MOUTH
Unrecognized Creature Body Token: HYDRA : SPINE
Unrecognized Creature Body Token: MERPERSON : NOSE
Unrecognized Creature Body Token: MERPERSON : NECK
Unrecognized Creature Body Token: MERPERSON : THROAT
Unrecognized Creature Body Token: MERPERSON : SPINE
Unrecognized Creature Body Token: MERPERSON : MOUTH
Unrecognized Creature Body Token: SEA_SERPENT : NECK
Unrecognized Creature Body Token: SEA_SERPENT : THROAT
Unrecognized Creature Body Token: SEA_SERPENT : SPINE
Unrecognized Creature Body Token: SEA_SERPENT : MOUTH
Unrecognized Creature Body Token: SEA_MONSTER : NECK
Unrecognized Creature Body Token: SEA_MONSTER : THROAT
Unrecognized Creature Body Token: SEA_MONSTER : SPINE
Unrecognized Creature Body Token: SEA_MONSTER : MOUTH
Unrecognized Creature Body Token: CROCODILE_CAVE : NOSE
Unrecognized Creature Body Token: CROCODILE_CAVE : NECK
Unrecognized Creature Body Token: CROCODILE_CAVE : THROAT
Unrecognized Creature Body Token: CROCODILE_CAVE : SPINE
Unrecognized Creature Body Token: TOAD_GIANT : NOSE
Unrecognized Creature Body Token: TOAD_GIANT : NECK
Unrecognized Creature Body Token: TOAD_GIANT : THROAT
Unrecognized Creature Body Token: TOAD_GIANT : SPINE
Unrecognized Creature Body Token: TOAD_GIANT : MOUTH
Unrecognized Creature Body Token: OLM_GIANT : NOSE
Unrecognized Creature Body Token: OLM_GIANT : NECK
Unrecognized Creature Body Token: OLM_GIANT : THROAT
Unrecognized Creature Body Token: OLM_GIANT : SPINE
Unrecognized Creature Body Token: OLM_GIANT : MOUTH
Unrecognized Creature Body Token: BAT_GIANT : NOSE
Unrecognized Creature Body Token: BAT_GIANT : NECK
Unrecognized Creature Body Token: BAT_GIANT : THROAT
Unrecognized Creature Body Token: BAT_GIANT : SPINE
Unrecognized Creature Body Token: BAT_GIANT : MOUTH
Unrecognized Creature Body Token: RAT_GIANT : NOSE
Unrecognized Creature Body Token: RAT_GIANT : NECK
Unrecognized Creature Body Token: RAT_GIANT : THROAT
Unrecognized Creature Body Token: RAT_GIANT : SPINE
Unrecognized Creature Body Token: RAT_GIANT : MOUTH
Unrecognized Creature Body Token: RAT_LARGE : NOSE
Unrecognized Creature Body Token: RAT_LARGE : NECK
Unrecognized Creature Body Token: RAT_LARGE : THROAT
Unrecognized Creature Body Token: RAT_LARGE : SPINE
Unrecognized Creature Body Token: RAT_LARGE : MOUTH
Unrecognized Creature Body Token: MOLE_DOG_NAKED : NOSE
Unrecognized Creature Body Token: MOLE_DOG_NAKED : NECK
Unrecognized Creature Body Token: MOLE_DOG_NAKED : THROAT
Unrecognized Creature Body Token: MOLE_DOG_NAKED : SPINE
Unrecognized Creature Body Token: MOLE_DOG_NAKED : MOUTH
Unrecognized Creature Body Token: TROGLODYTE : NOSE
Unrecognized Creature Body Token: TROGLODYTE : NECK
Unrecognized Creature Body Token: TROGLODYTE : THROAT
Unrecognized Creature Body Token: TROGLODYTE : SPINE
Unrecognized Creature Body Token: TROGLODYTE : MOUTH
Unrecognized Creature Body Token: MOLE_GIANT : NOSE
Unrecognized Creature Body Token: MOLE_GIANT : NECK
Unrecognized Creature Body Token: MOLE_GIANT : THROAT
Unrecognized Creature Body Token: MOLE_GIANT : SPINE
Unrecognized Creature Body Token: MOLE_GIANT : MOUTH
Unrecognized Creature Body Token: IMP_FIRE : NOSE
Unrecognized Creature Body Token: IMP_FIRE : NECK
Unrecognized Creature Body Token: IMP_FIRE : THROAT
Unrecognized Creature Body Token: IMP_FIRE : SPINE
Unrecognized Creature Body Token: IMP_FIRE : MOUTH
Unrecognized Creature Body Token: OLMMAN : NOSE
Unrecognized Creature Body Token: OLMMAN : NECK
Unrecognized Creature Body Token: OLMMAN : THROAT
Unrecognized Creature Body Token: OLMMAN : SPINE
Unrecognized Creature Body Token: OLMMAN : MOUTH
Unrecognized Creature Body Token: CAVE_SWALLOWMAN : NECK
Unrecognized Creature Body Token: CAVE_SWALLOWMAN : THROAT
Unrecognized Creature Body Token: CAVE_SWALLOWMAN : SPINE
Unrecognized Creature Body Token: BIRD_SWALLOW_CAVE_GIANT : NECK
Unrecognized Creature Body Token: BIRD_SWALLOW_CAVE_GIANT : THROAT
Unrecognized Creature Body Token: BIRD_SWALLOW_CAVE_GIANT : SPINE
-
In 89b? 88d really was deleting entries marked for overwriting.
-
Maaaan. Thanks, sorry for the confusion. I someway managed not to update from 88d.
-
Oh, you didn't know that humanoids have two necks? :P
-
Bumpity for new DF version. All should be well.
-
I got some sort of error when I tried to install some things onto the new version just now.
************** Exception Text **************
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at ModBase.Form1.CompileMods_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
ModBase
Assembly Version: 1.0.3117.38081
Win32 Version: 1.0.3117.38081
CodeBase: file:///I:/Program%20Files/Dwarf%20Fortress/ModBase.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
Microsoft.VisualBasic
Assembly Version: 7.0.5000.0
Win32 Version: 7.10.3052.4
CodeBase: file:///c:/windows/assembly/gac/microsoft.visualbasic/7.0.5000.0__b03f5f7f11d50a3a/microsoft.visualbasic.dll
----------------------------------------
************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the machine
rather than being handled by this dialog.
-
Hm. It seems the More-Oh mod is causing this. Disable it until I figure out what's happening.
-
Alright, I figured out what was happening. Hang in there while I make updates.
I will also update the MA mod, changing the red-back spiders to be savage, and adding a few more megabeast civ options.
In other news, I realised the error of my ways. Tilesets will now be loadable and selectable if copied to the "raw\tilesets" folder.
I will update once I make sure MA does not cause constant lock-up during worldgen.
-
Other than that, is everything working the same way? I mean, if I update my components to follow the new version, should I leave the dfmod_***.txt file and file structure alone?
-
The Mod Salad now uses ModBase for its many and varied modifications.
-
Aye, Deon, everything will be the same, but now when you update DF, you can find your init settings and tilesets much much easier.
Btw, the program reads required resolution directly from the image. I don't know how to allow custom resolutions except allowing to edit the entries afterwards.
-
Bump with the new version.
A word of warning, or something - with the Megabeast Civilizations extension of the MA mod turned on, you should generate your worlds with no specific limit on megabeasts. The worldgen does not count the megabeasts inside civs, so you will get a world with a few hundred dragons after three of the only four "true" megas in the world are killed.
-
I get this error every time I try to scan for mods now.
************** Exception Text **************
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at ModBase.DFFile.parseFile(String source)
at ModBase.DFFile..ctor(String strsource, Boolean cleanfile, String nfile)
at ModBase.DFMod..ctor(String source)
at ModBase.DFModFile..ctor(String strsource)
at ModBase.Form1.LoadFilesToList(String dir1)
at ModBase.Form1.Button1_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
ModBase
Assembly Version: 1.0.3118.32152
Win32 Version: 1.0.3118.32152
CodeBase: file:///I:/Program%20Files/Dwarf%20Fortress/ModBase.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
Microsoft.VisualBasic
Assembly Version: 7.0.5000.0
Win32 Version: 7.10.3052.4
CodeBase: file:///c:/windows/assembly/gac/microsoft.visualbasic/7.0.5000.0__b03f5f7f11d50a3a/microsoft.visualbasic.dll
----------------------------------------
-
What's your mod layout? I thought I plugged most holes in the parser...
-
Hey, I think the modbase of my mod works. Not sure what happened initially. Well.. I think.
-
@Nonanonymous: Judging by what I see in the code, it's probably a missing or erraneous bracket somewhere in a mod. Either check your mods, or give me the list and I'll check and update them myself.
-
The folders holding the raw files, or the files that Modbase uses to figure out what mods it has access to?
-
The list of mods you have activated, as seen in the Modbase mod list panels.
It only saves the mod configuration if it actually manages to compile the mods.
-
I don't even get that far, though. :-\
-
Oh. :\
*me feels stupid.
Alright, what mods are you trying to load then? The contents of the raws dir is what I'm looking for.
Also, I suppose the program was working at some point? Did you change anything except switching the version?
-
Bump with content. No new Modbase version, but I released MCM, the Modbase Cumulative Modpack. The modpack contains all the mods I'm aware of that are modbase-compatible.
The MCM's release was caused by the need to update the Martial Arts mod.
The Martial Arts mod now allows you to install JUST the martial arts, as opposed to making other races playable at the same time.
It also now has a module with a set of religion and ethic modifications I made to have worldgen races be a little less insane.
-
Hello. I'm here. Mod Salad works with Mod Base now. Hello. Hi there.
-
Aside from what you have on the first post, and a lack of the clockwork race mod, I'm trying to use versions of Age of Shadows and Legendary Lands, Teldin's Mod, Utilli Stillari, and a few homebrew creatures, one civ, and a few items all of which I've tried to make compatible with each other and Modbase. Maybe it's just too much stuff?
-
There's never "too much stuff". Like I said, the error you encountered is most probably the result of either a missing bracket, or an extra bracket somewhere. I'll have a look at AoS,LL and others, providing I can find those versions, and you look through your homebrew stuff.
Zaratustra - I'll look at it and add it to the first post and MCM.
-
I think you'd have a hard time finding them, I downloaded the latest releases and then picked through them all for things that would conflict with each other myself, and then wrote up some files to allow Modbase to read what was left over.
EDIT: Found the problem, it was those damned reckless vegetation that were screwing things up.
-
for some reason with only the basic part of martial arts on (required part only, none of the extras, including none of the playable race addons), and the base minerals+ (no extras save for selectable stone), I wound up playing as goblins.
Not sure what went on there, but it confused me greatly since I took care not to install anything that would cause that sort of thing.
-
That's not a glitch, the Martial Arts Mod adds [CIV_CONTROLLABLE] and [INDIV_CONTROLLABLE] to goblins.
-
No, in the latest revision I separated playable races into a separate module. I have to note that the latest revision is in the MCM, not the main Modbase package.
-
Alright, I'm back on track developing Modbase, though I'll still often be drawn sideways by RL.
The next version will have several major changes, that I hope to implement.
First - complete modding support, including adding lines to speech, and any other files.
Second - graphics set support, similar to the current tilesets.
Third - even simpler version switching - all mods and all settings will now be stored in the "modbase" folder instead of the raws folder.
Raws comparing function is a long ways off, because after I updated the cycles of the main program, what I did for that function became obsolete. Mod constructor is facing some problems, and a few pending design decisions.
-
Edit:
Correction Finding and replacing '#' DOES work :D! Somehow I ended up with copies of the objects .txt files in /raw/graphics/objects and was looking at those to see if they had been changed by the mod manager, instead of the correct ones in /raw/objects... Oops. However, I do still wonder about this:
New feature! - conditional entry overwriting/adding. The syntax is fairly incomprehensible, but to append a change to all entries of a certain type, you make an entry called [CREATURE:#] or some other type like ENTITY, etc. To specify which entries to use, [COND:] tags are used. Use [COND:<tagname>] to check for tag presence, [COND:<tagname>!] to check for absence. Use [COND:<tagname>@<argnumber>#<argvalue>] to check for a specific argument's value in a specific tag, or add an exclamation to the end to check for anything but that value in that tag.
Some other functions don't work with this, namely entry and possibly tag referencing. Value modification via arithmetics works.
creature_awfulman.txt has "[COND:BODY@1&QUADRUPED]" - & where that post says to use # - and I'm wondering which is correct? Do they both work, or was it changed from # because it's used for other things, or what? (& seems to work anyhow)
I'm intending to use this feature to change the font character of all the rock types which have a few particular characters. However, some of them use a number, some of them use a character... One of those characters which I want to replace is #. I had some difficulty at first, but that was my fault. It seems to be working now - Example of what I'm using it to do:
replacestuff.txt:
replacestuff
[OBJECT:MATGLOSS]
[MATGLOSS_STONE:#]
[COND:TILE@1&'#']
[TILE:158]
Changes all matgloss_stone entries whose tile is '#' to 158.
Also, I got this exception + stack trace once (but only once, it's worked fine the other 8 or so times) when I clicked the continue and reload button:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at ModBase.Form1.Moddown_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2407
CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
ModBase
Assembly Version: 1.0.3118.32152
Win32 Version: 1.0.3118.32152
CodeBase: file:///C:/Games/Dwarf%20Fortress%2028.181.39c/ModBase.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2407
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
Microsoft.VisualBasic
Assembly Version: 7.0.5000.0
Win32 Version: 7.10.6001.4
CodeBase: file:///c:/windows/assembly/gac/microsoft.visualbasic/7.0.5000.0__b03f5f7f11d50a3a/microsoft.visualbasic.dll
----------------------------------------
************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the machine
rather than being handled by this dialog.
Edit: See the top of the post for a correction.
-
Well, the exception is thrown by the moddown button. Which should not happen. Maybe some weird stuff is happening when the click from the modal "exit menu" gets past into the moddown button while the thing is reloading. I'll just disable those buttons when the mod compilation starts, and only reactivate them when the mods are reloaded.
BODY@1 in COND means the first parameter (the BODY itself being zeroth) in the BODY tag.
# means "exact match", while & means "inclusive match". I'm not exactly sure how it will react to [COND:TILE@1#'#'], but since you are unlikely to get any TILE tags with '#' as only a part, using & is perfectly allowable.
The reason it uses & in the "awfulman" mod, is because it must work on both standard DF and my Martial Mod - in the MA mod, standard body sets like HUMANOID and QUADRUPED are replaced by HUMANOID2 and QUADRUPED2 - so I need an inclusive match.
-
A couple feature requests:
Could it be possible in the future to include a user character set with a mod? (treating them just like other files that get checkboxes in the mod enable screen)
Also, could it also be possible to have files which specify to replace particular tiles of a user character set with an image? E.G. If I want to allow users to optionally replace the shrub graphic with a different graphic which makes live and dead shrubs look distinct, but only looks decent if the brown color has a bunch of red and little green (e.g. the user would probably only want to use it if they are using a particular color scheme or something).
P.S. Although you said there would be, there doesn't appear to be any source code in the package :P.
I already effectively have all the classes written for reading in bmps (which consists of delegating that responsibility to .net ;)), splitting apart the images into tiles, possibly replacing some images, writing them back into a bmp, etc - these are all things the DF map compressor does - although the code is written in c# and requires .net 2.0. So compiling it with vb.net 2003 would be a bit unlikely to work. Also, I used generics. So it'd definitely require .net 2.0.
However I could perhaps repackage those classes to be public (instead of internal) accessible so that they can be used for this sort of thing, and release a dll containing them, and/or release their source. (Right now, you could add the map compressor as a reference and access public classes and members, but the ones that deal with bitmap splitting and stuff are internal instead of public - you can't use them from another assembly yet unless you use reflection to bypass the access restriction.)
(Let me know if you want that. At the moment, I'm working on a different DF-related project, which is a user character set + ModBase mod, and so it could use the two features I just asked about :P, particularly being able to include the user character set as part of the mod)
-
I seem to be running into a bizarre problem.
At the moment, I'm trying to get ModBase to modify or replace certain words in language files. It looked like it would be easy:
filename was here
[OBJECT:LANGUAGE]
[trANSLATION:DWARF]
[T_WORD:APPLE:bemong]
[T_WORD:AWE-INSPIRING:gostang]
[T_WORD:BITCH:shimbil]
etc
But I ended up with language_dwarf.txt being filled with [T_WORD:BULWARK:rithzam] (which is the last entry in the ModBase mod's language replace file).
So then I tried
[COND:T_WORD@1#APPLE][T_WORD:APPLE:bemong]
[COND:T_WORD@1#AWE-INSPIRING][T_WORD:AWE-INSPIRING:gostang]
[COND:T_WORD@1#BITCH][T_WORD:BITCH:shimbil]
But that did exactly the same thing. Does it think every T_WORD in language_dwarf is part of the same word, instead of each being their own word, or what?
-
Hmm. I'll have to look into that. I might have overlooked the T_WORD when making the multi tag list. Each T_WORD in a TRANSLATION entry is a tag. The thing is that if the tag is not a multi tag, the parser will go through any tags of matching type (the first element of a tag) and replace it with the source tag. As per your description, this is exactly what's happening, since it goes through all tags in sequence and in the end, replaces everything with the last tag.
I'll make a fix for it, but I won't release until I've at least got it to mod language files.
As for the requests - it's possible to do this in a rather non-flexible way. Specifically, the MSECT entry in the mod descriptor can be made to accept more tags. Right now it only knows FILE. It can be made to understand TILESET. Actually, that's what I'm doing now to have it understand speech files. For the other request, it might be possible, I just haven't fiddled around with that stuff yet. But if I remember right, there are some functions for image editing, and I could make use of those.
-
Alright, I did overlook the T_WORD when making the list. Fixed now.
I did preliminary testing of the tileset merger - seems to work fine. You need to provide a "true blue" - 0-0-255 - background for whatever tiles you don't want overwritten. The prog looks through the top left pixel of each tile - if it's not blue, it copies the tile over from your image to the target tileset (no true masking - it will copy the blue in the tile). The file you specify has to be the same name as the one you edit - I found no way to do otherwise without adding more description files. The program will not overwrite the existing tileset though, it will instead create a new one with a "mod_" added to the filename, and automatically set it as the Windowed mode tileset.
Of course, the tileset adding part of the thing also works. I'll now test the speech files some more, and look again for any obvious bugs, and probably release. I'll update the MCM with the new mod placement standart, too. Also, Modbase distribution will no longer house mods, only the program itself, and the source.
-
Bump't. Added some new tags to the mod files, and shoved most of the program's data into a separate folder. I'll do that a few more times, I think, until I reach an acceptable state of it.
Keep in mind, mods are no longer bundled with the 'base!
-
Moved the download links for Modbase and MCM to the top of the first post.
Any comments yet?
-
I'm getting an an exception upon clicking the scan mods button when my mod is in the modbase folder along with only the 'original' and 'testmod' mods, or when there's only a couple other mods (some seem to still trigger it, some don't). (Mine's named 'sl_tilemod')
It's occurring inside Form1's LoadFilesToList. I loaded the source up and ran it through visual basic 2005 express edition's debugger and:
It's occurring in this line (line 576 of Form1.vb): mods(CInt(md.args(2))).order = mods(x).order
md.args(2) is "4". mods.Length is NOT 4 or higher... It's trying to set mods(4).order when mods.Length is below 4! It seems to be reading md (from modcfg) from a config file which remembers mods that I've removed the .txt files for, and is presumably remembering the former position of my mod in the list of mods, or something like that, and trying to force it into it again.
Haven't had a chance to try any of the new stuff yet, or test the t_word fix, since this problem cropped up. :P
Edit: Fixed it for you (I've included some of the code around it in this snippet) - this gets rid of the crashing anyhow. I don't know if it's what you'd prefer it to do. :P
If md.args(1) = mods(x).name Then
Dim pos As Integer
pos = CInt(md.args(2))
If pos >= 0 And pos < mods.Length Then
mods(pos).order = mods(x).order
mods(x).order = CInt(md.args(2))
mods(x).active = CBool(md.args(3))
For t As Integer = 4 To md.args.Length - 1 Step 2
mods(x).setmodulestate(md.args(t), CBool(md.args(t + 1)))
Next
sortModsByOrder()
End If
End If
How is the sorting *supposed* to work? It doesn't look alphabetical, or is that because I just screwed it up and the screwed up version borked the normal version too? (I just loaded the non-fixed version to check and see if it was sorted alphabetically with all the mods in the list, and it wasn't)
Edit again:
Okay, on T_WORD, I can't seem to get it to do what I want: replace, or remove and recreate, words in each language - I'm removing some accent marks. Here's some things I've tried (using FOO and bar as examples, though I used the actual dwarf language files instead - I just don't want to mess with accent marks here):
I've tried just specifying [T_WORD:BULWARK:rithzam] etc. That makes a new word and leaves the old one.
I've tried putting [!REPLACE] before the [T_WORD:FOO:bar], and after, and in both cases it had no effect.
I've tried [COND:T_WORD@1#FOO][T_WORD:FOO:bar], but that still only makes a new word and leaves the old one.
I've tried [T_WORD:FOO:#][!DEL!][T_WORD:FOO:bar]. That adds a verbatim [T_WORD:FOO:#] entry in addition to the [T_WORD:FOO:bar] entry, and still leaves the original accent-marked version T_WORD version of FOO.
Finally I tried [T_WORD:FOO][!DEL!][T_WORD:FOO:bar] and that resulted in: [T_WORD:FOO:bar] [T_WORD:FOO] along with the original accented version of [T_WORD:FOO:bar] still being in the file.
Edit again:
About the tileset var:
I can't say I like ModBase deleting all the comments from init.txt, and not backing it up, or warning it was going to do that D: (I use winmerge to migrate my init.txt changes to new versions of DF, and having the comments missing would be a nuisance)
Also, ModBase's new tileset var doesn't appear to work with graphical mode - it's not changing the graphical mode tileset, only the non-graphical one.
Otherwise, looks cool!
-
Yeah, graphics mode tilesets are another thing. I'll add that, since I don't think it will hurt.
I presume you changed "CInt(md.args(2))" to "pos", but that variable gets the same value assigned right before. I did copypaste that, probably, but I see no reason for one to work while another crashes. The sorting is not alphabetical, it follows the order in which the mods are loaded. When mods are loaded, the subroutine that throws you the error goes through each mod and each entry in the modbase.cfg, performing an operation similar to swapping channels on an auto-tuned TV. If it does not find a mod in the config, it will not touch it. Likewise, if a mod is in the config but not in your folder, nothing will happen.
T_WORDs are tags. If you want to replace multi-tags, the only sure way is deleting those you want deleted, and adding the changed ones. Basically, the only way right now is add [T_WORD:FOO:!] for every word you want edited, and add your own entries.
If all you want to do is replace accent marks, try something akin to this:
[trANSLATION:#]
[COND:<whatever can be used to identify the language you want>]
[T_WORD:#:<accent-marked letter>!!<normal letter>] - repeat for every accent mark
I'm not sure HOW this will work, but it might.
For init - I don't really know how to handle comments in parsed files. I do warn to create a copy of the init in the readme, though. And you can use Modbase itself to carry over init settings.
-
Hm. A bit of personal impression. All I did for this version was copy over the 3 files, and the modbase dir from my current version to the new version. Then I deleted the "original" dir, just in case, and ran Modbase. The entire setup took me... let's see.. 1, 2, 3, 4, 5, 6, 7. Seven clicks, plus one to close the program. :) Version changing has never been easier.
-
I presume you changed "CInt(md.args(2))" to "pos", but that variable gets the same value assigned right before. I did copypaste that, probably, but I see no reason for one to work while another crashes.
It doesn't crash because I added this check: If pos >= 0 And pos < mods.Length Then
The statement which attempts to write to mods(pos).order (along with the other statements after it, although they likely didn't need to be), got put inside that if/then/endif. So, it doesn't crash because if it's out of bounds it doesn't get run.
Okay, I'll try [T_WORD:FOO:!]. I thought they were entries instead of tags, but hadn't noticed the bit in the readme about deleting tags yet either.
And done: It worked! :D
What does !! do? Search and replace inside the current tag? Let's try that now...
Hmm, that doesn't seem to want to work, or I'm doing something wrong.
language_sl_tileset
[OBJECT:LANGUAGE]
[trANSLATION:#]
[COND:LANGUAGE@1#ELF]
[T_WORD:#:ƒ!!a]
[T_WORD:#:‡!!c]
[T_WORD:#:Œ!!i]
[T_WORD:#:“!!o]
[T_WORD:#:•!!o]
[T_WORD:#:–!!u]
[T_WORD:#:—!!u]
[T_WORD:#:¢!!o]
I tried without [OBJECT:LANGUAGE] as well. If it were working, it would be acting on [T_WORD:ACT:ar¢], I think. (It isn't)
(Not that I need that now, since the other method is working and I already generated all the fixed word lists and such :P)
On comments in init.txt: Anything that isn't inside a [] block is a comment, so you can just read those in when you're not in an [ block, store them when you reach a [ or the end, and spit them back out when you write out the file. I can't say for raws, since I don't know what format comments are supposed to be in for them (or if they're even allowed).
Did you notice the new options in init.txt? That's why I use winmerge to move my init.txt settings to new versions. ;)
Edit: Here's a nice one, click a mod to get its list of components open, then hit Scan, notice that it doesn't close the list or anything, and then try to check or uncheck one of them. CRASH BANG.
-
Modbase cares not about new options in init. Unless those options have unique placement rules, they're all the same to it, and any changes you do will be added, like to any other entry.
And in your example, the cause is the LANGUAGE condition. There's no language tag in the TRANSLATION entry. You could check for the TRANSLATION itself though.
edit: tried the setup myself. It doesn't seem to work, but it might be me messing something up when copying your text. It still causes multiple tags though... I need to find a way to fix that.
-
Whoops at that. *changes it to [COND:TRANSLATION@1#ELF]*
*tries it again*
What the...
[trANSLATION:ELF]
[T_WORD:TREE:thelire]
[T_WORD:TREE:thelire]
[T_WORD:TREE:thelire]
[T_WORD:TREE:thelire]
[T_WORD:TREE:thelire]
[T_WORD:TREE:thelire]
[T_WORD:TREE:thelire]
[T_WORD:TREE:thelire]
[T_WORD:ABBEY:cebela]
[T_WORD:ACE:adi]
[T_WORD:ACT:ar¢]
[T_WORD:AFTER:ifife]
[T_WORD:AGE:eyo]
[...and through the rest of the file as normal until it ends with:]
[T_WORD:ATTACK:irithe]
[T_WORD:ONSLAUGHT:pal¢thi]
[T_WORD:TREE:thelire]
-
Yeah, graphics mode tilesets are another thing. I'll add that, since I don't think it will hurt.
In case we weren't talking about the same thing, what I meant was that I have [GRAPHICS:YES] in my init.txt, and when I tested Modbase's tileset feature, it only changed FONT, not GRAPHICS_FONT, so it did not appear to work.
(The actual mob graphics stuff is all well and good too, of course... :P)
P.S. Here's a better fix for the crash I mentioned and fixed before:
if md.args(1) = mods(x).name Then
Dim pos As Integer
pos = CInt(md.args(2))
If pos >= 0 And pos < mods.Length Then
mods(pos).order = mods(x).order
mods(x).order = pos
End If
mods(x).active = CBool(md.args(3))
For t As Integer = 4 To md.args.Length - 1 Step 2
mods(x).setmodulestate(md.args(t), CBool(md.args(t + 1)))
Next
sortModsByOrder()
End If
Now it remembers whether the mod (if its saved list position # or whatever was >= the number of mods now) was active and what components of it were enabled still, whereas my quick fix didn't. It just stops it from trying to swap position with a nonexistant mod now. (I had just woken up an hour or so earlier when I did the first fix. :P)
-
Quick feature request: The ability to make an MSECT default to unchecked instead of checked, e.g. [MSECT:Tilemod Flower quotes:DEFAULTOFF][FILE:flower_quotes_fixeyes][TILEMOD:flower_quotes]
Edit: Noticed a bug: When an OPT component is enabled, it disables *all* other components, not just other OPT components. Furthermore, as a result of this, when a mod is scanned and loaded, all components loaded prior to the last opt component will be disabled (or so it appears).
Edit #2: Slight problem with the tileset feature: It doesn't put the mod_bmpfilename.bmp file in data/art, so DF ends up with a completely black screen. Actually, I don't see the mod_bmpfilename.bmp file anywhere... Maybe it isn't writing it out at all.
-
Yeah, now I noticed the oversight on my part - while usually it won't happen, but if a mod's saved order is such that the program tries to swap it with a mod outside of the mods array, it will crash. I'm thinking of better ways to solve the thing. Yours looks good, but I want to see if I can do better. ;)
Added the :OFF optional parameter, also fixed another oversight that disallowed having both MAIN and OPT as parameters.
Added the graphics mode switch to init editor and tileset mods.
About the tileset feature - you mean the "TILESET" fraction of a mod module, the tileset swapper screen, or the "TILEMOD" fraction of a mod module? The first two don't create a "mod_*.bmp", only the third does - the first two just copy the tileset as it is. I might have made an error with the first though, lemme check... no, I see no error. In the tilemod case, you have to have your modded tileset image have the same name as the image you're altering through the mod. I've tried the thing several times and it worked for me.
-
About the tileset feature - you mean the "TILESET" fraction of a mod module, the tileset swapper screen, or the "TILEMOD" fraction of a mod module? The first two don't create a "mod_*.bmp", only the third does - the first two just copy the tileset as it is. I might have made an error with the first though, lemme check... no, I see no error. In the tilemod case, you have to have your modded tileset image have the same name as the image you're altering through the mod. I've tried the thing several times and it worked for me.
That confuses me. I have a tileset bmp in my mod folder, and some optional tilemod bmps which could be applied to it. The instructions and what you've said here both seem to be saying that I need to name every tilemod bmp the exact same thing as the tileset bmp, which makes no sense at all. I figured I must have been misunderstanding the instructions, since it seemed to be rather impossible to do what it seemed to be saying that I should do, so I tried to do what seemed the most sensible thing instead, but it didn't work. (But you just said basically the same thing as the instructions, so now I'm even more confused)
Here's how it looks:
This is in the mod's .txt file:
[MSECT:Tileset][TILESET:SL_square_16x16]
[MSECT:Tilemod Green/brown trees][FILE:matgloss_sl_green_brown_trees][TILEMOD:green_brown_trees]
[MSECT:Tilemod Flower quotes][FILE:flower_quotes_fixeyes][TILEMOD:flower_quotes]
[MSECT:Tilemod Winter Trees][TILEMOD:wintertrees]
In the mod's folder, there exists SL_square_16x16.bmp, green_brown_trees.bmp, flower_quotes.bmp, and wintertrees.bmp. The tilemod bmps do have the pure blue background (RGB 0,0,255) except for the tiles which are to be replaced.
It did change the init.txt to say mod_SL_square_16x16.bmp when I had the tileset and a tilemod checked, but no such file was created anywhere on the computer (I had windows search all three partitions for it while I was off doing something else).
P.S. It didn't seem to restore the init.txt's font and stuff when I unchecked the tileset and tilemod and re-applied, although I kind of figured that might happen.
-
Hm. Yeah, I need to think of a way to have the thing discern files of that sort. I can probably add a check for a part of the filename after the last underscore, would that suffice?
addendum: Had no time to type longer, cellphone keyboard. :)
Basically, I can (probably) make it read files like "stuff_stuff_1.bmp" and "stuff_stuff_2.bmp" as one file "stuff_stuff.bmp", though there may be complications with simple files without additions, where "stuff_stuff.bmp" will be read as "stuff.bmp". Maybe a double underscore? Those are rarely present in filenames...
-
So the tilemod bmp filenames would then be something like SL_square_16x16_greenbrowntrees.bmp, SL_square_16x16_flowerquotes.bmp, and SL_square_16x16_wintertrees.bmp? That sounds fine to me.
(Why's that a requirement anyhow?)
-
I'd need to keep the filename to replace somewhere. So it's either a separate definition file, or a system like this.
-
I had figured that it would require the mod to also include an active tileset component, and that would be what would get replaced.
-
If you include your own tileset anyway, why bother with "mods"?
Anyway, I think I handled that issue, plus a handful of other ones.
The program will now attempt to create (and use) copies of init and speech files, rather than the originals.
The originals will be copied over at program start, if they weren't present before, so it's advised to install the thing over a clean DF copy.
I'll attempt to do a bit of testing here at work, and maybe release .94b when I get home.
-
To give the user the option of using particular art or not - a simple example would be the " symbol. Normally the " symbol is used for shrubs as well as quotes in text. Flying Mage made a nice flower icon for shrubs, but having it show up in text where " is supposed to be is kind of annoying.
So, I'd want to make the " symbol normally have the normal " art, but to give people the option of using the flower icon if they choose to do so, and the logical way to do that would be with a tilemod (and a file to remap the glow-in-the-dark-eyes, which I also did).
-
Hm. Alright.
I'm more or less content with testing results now, with some more additions squeezed in. Now, it's possible to have "main optional" components - that is, a set of "MAIN" components that can be selected one at a time, but turning off the last one will turn off the mod. It's also possible to have init mods as part of your mod, so you can change colors and stuff.
I've also made a few internal and interface changes regarding progress display when compiling mods.
This originated from my experiments with the Metamagic Weapons section of my MA+ mod. The new variant, called Metamagic Megaweapons, uses the Modbase conditional creation features. I don't know exactly how many weapons it creates, but the resulting raws file is 1.2Megabytes, for the weapons alone. Thankfully, I don't have to place them anywhere - they'll only come up for moods or drops from magic chests. During experimentation, I got a Freezing Mudstone Greatsword of Blizzards - that one was fun. I did get a Dull Dagger of Slicing too, though.
Well, the net result of all this was that Modbase suddenly had to spend some 10-20 seconds in complete limbo, eventually becoming "Not responding" while compiling mods. So I expanded the progressmeter (hitting an overflow error in the process), and added a scrolling ">> Working >>" sign that appears on the Activate button, to show that the process hasn't locked up.
-
About the tileset problems again:
I just tried:
1. Extract DF from zip file into a new folder
2. Extract ModBase into that new DF folder
3. Copy the mod I'm working on into the modbase folder. Nothing was copied into art or the init folder or anything like that.
4. Start ModBase, scan, disable the test mod, make sure the tileset component is enabled, and all the tilemod components are disabled.
5. !!! ACTIVATE !!!
6. Start the game. DF asks for fullscreen or windowed, select windowed.
I got a black screen. I went and checked the art folder and the init: ModBase did copy the font bmp correctly (SL_square_16x16.bmp), but it set the init file to use mod_SL_square_16x16.bmp, which it did not create.
I tried this with tilemod components in the mod, all disabled, and I tried removing the tilemod components from the mod to see if disabled tilemods were confusing ModBase, but it still set the init file to use mod_SL_square_16x16.bmp instead of SL_square_16x16.bmp.
(I tried this again because my tileset/mod is basically ready for release, except that I had been intending to have ModBase handle installing the tileset. So I had been hoping for the next version of ModBase to be released, or hoping that this version would turn out to be able to do it after all. The alternative, of course, is giving instructions for installing the tileset just like all the normal tilesets. :P )
-
I've been a little engulfed by various affairs (mostly concerning my relatives areound here, who seem to see laziness as a capital offence), so I wasn't able to do any specific stuff on the new release yet. I can put it together and upload it now, but odds are that without testing it'll be worse than the current one.
edit: hm, wow. Just now I looked at the relevant portion of the code for the n-ty-nth time, and only now I noticed that I have indeed been keeping the "mod_" addition to the filename, only I couldn't see it because it was in one string with the [FONT: line, not separated as it is in file copying lines. Fixed now. I'll pack it up and put it up on DFFD, but I won't update the front page yet, I'm too tired from all the work today (dacha... I never want to hear the word again... :)).
-
Alright, bump. 0.94b (dubbed "bug fest galore") is released, virtually without testing of the modified features.
I recommend either installing over a clean DF install, or making sure your init settings suit you before running this new Modbase, because it will make a copy of your current init.txt and speech files.
The list of changes is probably this:
Added :OFF parameter to MSECT module descriptors - makes module inactive by default.
Added INIT section to MSECT module descriptors - allows adding a text file modifying init settings.
Allowed the program to read tileset files differing by text after a double underscore as one file.
Modified progress meter and button visuals during mod compilation.
I wanted to make some experiments with adding .jpg, .gif and .png tileset compatibility (technically the language allows that), but I didn't have any time. I did punch my keyboard hard enough for at least half of the required creature tags to magically appear in the mod constructor definition files though...
Also, Martial Arts mod updated. Look for it in the MCM pack. Added some new megabeasts, tuned existing ones (to the point that I consistently run worldgen past 200 on mediums), and added the awe-inspiring MegaMagicWeapons mod, that can replace the normal Magic Weapons. Take note, the MMW will take a while to compile, especially if you put weapon mods of your own before MA+.
-
Okay, the first bug I ran into was:
It's throwing an overflow exception while trying to activate a mod with an enabled tileset component (it happens on the modbase test mod, so it should be pretty easy for you to reproduce).
System.OverflowException: Arithmetic operation resulted in an overflow.
at ModBase.Form1.CompileMods_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
(And so on.)
-
While !REPLACE says "add this only if this object already exists," I don't see any way to flag an object with "add this only if this object doesn't already exist."
Such a thing might be useful if, say, you have two different plant mods that add a VINE_TOMATO. The results might get pretty strange if two tomatoes with wildly different definitions both get installed.
While I'm here, I'd like to request a means to install creature graphics via Modbase. Also, this is another situation where "add this only if this object doesn't already exist" would be useful. For example, you may be installing two different graphics sets for dwarves, but one is more complete than the other (and you don't mind mixing styles).
-
Bumpy-ho. The tileset-only mods were causing a divide by zero in progressmeter calculations, because the length of the "files" array is zero, and it doesn't check the additional files like tilesets. Fixed now, though it raised another bug elsewhere in the code (or rather made it surface), and that had to be fixed as well.
An add-only-if-doesnt-exist tag sounds useful, and definetly possible. I wonder why didn't I do it before?... :)
Anyway, new version up with some changes. You now have to include the file extension for tilesets and tilemods. Specifically because the program will now convert PNGs and GIFs into BMPs. Not guaranteed to work with GIFs, but PNGs straight off the wiki work fine.
I'm thinking to add full masking with 0.0.255 for tilemods. Think it might be useful? You'll still have to make each top-left pixel of each modded tile non-blue, but you'll be able to make "decorations" regardless of actual tileset. I'm actually thinking about a feature like "add this tilemod to whatever tileset is active now if it matches the resolution".
-
Well, now that I've downloaded the latest version, it's telling me that "I:\Program Files\Dwarf Fortress" isn't a DF install directory when I try to scan for mods. Was working just fine before.
-
I have downloaded Modbase 0.94e and the Modbase cumulative 1.02, but it doesn't work with DF 39e (details below), and there are many confusing things:
- There's no mention of which DF version this release of Modbase is supposed to work with.
- The mods themselves don't tell you which version of DF they are designed to work with.
- The included raws are not the same version as .39e, however since the Modbase version number finishes by e, it suggests it targets that version.
- If I just extract modbase and the modpack into the DF folder, taking care that all files are in the right place, Modbase fails to install any mod.
- If I then delete everything, reinstall, and replace the raws included in Modbase by the ones from DF 39e, I'm able to activate one mod (I don't remember which one), but trying to activate more crashes Modbase. I don't have time to do methodical troubleshooting to find out exactly which mods don't work - the program runs pretty slow and tests take a lot of time.
- There's no readme for your Minerals and Martial Arts mods, and they don't have their thread anymore: I suggest you include one, so we can have more detail about the parts of the mods we can install.
- Finally, it would be nice to be able to resize Modbase's window, to be able to display a larger part of the description at a time.
I look forward to using this tool whenever these quirks are fixed.
-
Hm. I think I shouldn't have included the raws together with the 'base... I mean, I did put the raws copier func there for a reason, right? :P
Modbase is DF version-independent, and all of its mods are therefore version-independent, unless they become outdated because new tags are required, or old tags become unused. The Minerals and Martial Arts mod still have their threads, but you can get the most basic info about what the mods do through the description field when you highlight the mod.
I'll look into the problem you describe right away. It seems serious. Nonanonymous reported the same thing, I think, but I was much too occupied with RL issues to remember that. :\
-
Alright. I figured out the problem (I need a better fix for it), it happens when a lot of mods are activated and the progressmeter gets swamped with integer division and multiplication inaccuracies. I will update Modbase, this time without the original raws dir supplied. You'll have to press "OK" a few times during the first launch from a clean DF install, but afterwards it'll work normally.
-
Triple-post yeah! Anyway, .95a up. Fixed the overflow error by subtracting 1 from all int division lines for progressbar step calculations. Somehow fixed (I think...) a lockup error when trying to load all mods at once.
Added: Tilemods will now do masked tiles, using the same 0.0.255 color. Also, tilemods will stack if several are applied to one tileset. Also also, using CURRENT_ACTIVE as a part of the tilemod's filename will overwrite whatever tileset is currently active, providing it matches dimensions.
-
Wow, that was quick!! Thanks, I'm trying this out, and I'll let you know if there are anymore problems.
Hm. I think I shouldn't have included the raws together with the 'base... I mean, I did put the raws copier func there for a reason, right? :P
Modbase is DF version-independent, and all of its mods are therefore version-independent, unless they become outdated because new tags are required, or old tags become unused. The Minerals and Martial Arts mod still have their threads, but you can get the most basic info about what the mods do through the description field when you highlight the mod.
I'll look into the problem you describe right away. It seems serious. Nonanonymous reported the same thing, I think, but I was much too occupied with RL issues to remember that. :\
You might want to put that information on the OP, so that people don't get confused as I did.
-
Here's a few extra Awful-men for those who're using the Martial Arts Mod along side it.
[CREATURE:#_MAN]
[COND:BODY@1&FISH2][COND:MEGABEAST!][COND:SEMIMEGABEAST!][COND:POWER!][COND:NAME]
[NAME:#man:@1#men:@1#man]
[CAN_SPEAK][CAN_LEARN][CANOPENDOORS]
[SIZE:#+3]
[BODY:FISH2!!HUMANOID:>>:SIDE_FINS:TAIL:]
[MUNDANE:!]
[PET:!]
[COMMON_DOMESTIC:!]
[IMMOBILE_LAND:!]
[NATURAL]
[AMPHIBIOUS]
[PREFSTRING:mystery]
[CHILDNAME:NAME@1#man child:NAME@1#man children]
[ATTACK:MAIN:BYTYPE:GRASP:claw:claws:1:5:BLUDGEON][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:STANCE:kick:kicks:1:3:BLUDGEON][ATTACKFLAG_WITH]
[CREATURE:#_MAN]
[COND:BODY@1&FISH][COND:MEGABEAST!][COND:SEMIMEGABEAST!][COND:POWER!][COND:NAME]
[NAME:#man:@1#men:@1#man]
[CAN_SPEAK][CAN_LEARN][CANOPENDOORS]
[SIZE:#+2]
[BODY:FISH!!HUMANOID:>>:SIDE_FINS:TAIL:DORSAL_FIN:]
[MUNDANE:!]
[PET:!]
[COMMON_DOMESTIC:!]
[IMMOBILE_LAND:!]
[NATURAL]
[AMPHIBIOUS]
[PREFSTRING:mystery]
[CHILDNAME:NAME@1#man child:NAME@1#man children]
[ATTACK:MAIN:BYTYPE:GRASP:claw:claws:1:5:BLUDGEON][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:STANCE:kick:kicks:1:3:BLUDGEON][ATTACKFLAG_WITH]
EDIT: Errgh, I'm finding some things wrong with this already. Will these changes to the body line add the fins and tail along with turning it into a humanoid? And the reason for using two is that carp and other river fish use FISH2, and don't have dorsal fins in vanilla DF.
-
Er, um, you don't need two entries if the difference is just FISH and FISH2. I mean, the original Dr.More-Oh doesn't need two, it uses one. The & symbol, inclusive checking, takes care of that.
That is to say, the first entry with FISH2 is redundant. The second entry with FISH will work on its own. In conditions, & makes both FISH and FISH2 pass, and in replacement, FISH replaced by HUMANOID will make FISH2 into HUMANOID2, it doesn't replace the entire value, it runs a string replace function and gets the result.
I'll test that and add it to the mod if it works right.
-
It looks like it wouldn't, since there's a few creatures, namely rays and skates, that use the FISH body, but don't have dorsal fins.
-
Does Modbase not work under Vista? I've been sadly crippled with it on my laptop, and Modbase simply will not Activate mods. My most "promising" run so far has been running as an administrator, without compatibility settings on, which has resulted in an "Activate!" process that is now going on an hour long. At least when I ran it in XP mode I got error messages.
Is there a way to install the Cumulative Mod Pack manually? I've spent five hours trying to make the program work and would enjoy playing at some point.
EDIT: Apparently it stopped without changing the button back to Activate or making any sort of announcement. Which is just as well, because I notice it's managed to delete the entire contents of my raw/objects folder.
-
Well, the crashes under XP I've recently noticed. I have no idea why doesn't "1.1" qualify as a properly formatted string for conversion to Single.
It deletes the files right before starting to save the mods, so that's normal. Try turning off mods one at a time (or turning them ON one at a time) to see which mod causes the crash - it's not an omnipresent bug. Sadly, it's probably caused by the Martial Arts mod. Switch from Megamagic weapons to simple Magic weapons (or turn them off) and try then.
If it just stopped without changing the Activate button back, some error occured that dropped the cycle out of the function. It should never happen, not without exceptions. I'd rather believe it hung up, which isn't unheard of.
-
Alright, I've got this one working properly now.
[CREATURE:#_MAN]
[COND:BODY@1#FISH2][COND:MEGABEAST!][COND:SEMIMEGABEAST!][COND:POWER!][COND:NAME]
[NAME:#man:@1#men:@1#man]
[CAN_SPEAK][CAN_LEARN][CANOPENDOORS]
[SIZE:#+3]
[BODY:FISH2!!HUMANOID:DORSAL_FIN:SIDE_FINS:TAIL:>>]
[MUNDANE:!]
[PET:!]
[COMMON_DOMESTIC:!]
[IMMOBILE_LAND:!]
[NATURAL]
[PREFSTRING:mystery]
[CHILDNAME:NAME@1#man child:NAME@1#man children]
[ATTACK:MAIN:BYTYPE:GRASP:claw:claws:1:5:GORE][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:STANCE:kick:kicks:1:3:BLUDGEON][ATTACKFLAG_WITH]
But I can't get this to work right. [CREATURE:#_MAN]
[COND:BODY@1#FISH:DORSAL_FIN][COND:MEGABEAST!][COND:SEMIMEGABEAST!][COND:POWER!][COND:NAME]
[NAME:#man:@1#men:@1#man]
[CAN_SPEAK][CAN_LEARN][CANOPENDOORS]
[SIZE:#+2]
[BODY:FISH!!HUMANOID:SIDE_FINS:TAIL:DORSAL_FIN:>>]
[MUNDANE:!]
[PET:!]
[COMMON_DOMESTIC:!]
[IMMOBILE_LAND:!]
[NATURAL]
[PREFSTRING:mystery]
[CHILDNAME:NAME@1#man child:NAME@1#man children]
[ATTACK:MAIN:BYTYPE:GRASP:claw:claws:1:5:GORE][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:STANCE:kick:kicks:1:3:BLUDGEON][ATTACKFLAG_WITH]
[COND:BODY@1#FISH:DORSAL_FIN] doesn't seem to make sure it picks out only the ones that have dorsal fins, and [COND:BODY@1#FISH] along with [COND:BODY@1#DORSAL_FIN] doesn't find anything at all.
-
I've had horrible bugs with the last 2 versions that prevent me from using modbase. I've kind of taken just about any mod i liked and thrown it in with some modifications to make them fit together a bit better, but whenever i click the activate button, it will work for a little while, and then throw an exception at me.
It says: A generic error occurred in GDI+.
Also, it throws another exception when I click the edit mod button: Cast from string "STR" to type 'Integer' is not valid. ---> System.FormatException: Input string was not in a correct format.
I never got these errors in the .93 versions.
By the way, will something like this work?
[ENTITY:#]
[COND:CREATURE]
[MAX_SITE_POP:300]
-
I was getting that, when I realized I had the test mod activated along with everything else. ::)
That might be your problem.
-
Oh that worked, i still cant view mod files in modbase's handy dandy viewer though. Even if it can't edit yet, its very useful for viewing individual entries in a raw file neatly listed.
-
It's because the mod editor is WIP, there's probably some stuff I left unfinished at the time.
Nonanonymous, you're forgetting one thing - the @1 points to a value index. So, by using two COND:BODY@1 lines, you try to search for something that has BOTH values in one tag value - which is somewhat impossible. Instead, use COND:BODY@2#DORSAL_FIN, or whatever the position is where the part is usually included. I might rig something to check for "general availability" regardless of position in the tag..
Ashnal, yes that will work. Or it's supposed to, at least. :P
-
Well I hope you make it at least viewable again soon, I liked it just for the organized view even without editing abilities.
-
Alright, new update.
- Made mod viewer available, by commenting out the placeholder code that was blocking it.
- Fixed the tilemod-caused GDI error bug that came out from the deeps beneath the mountains.
- Tilesets now track the GRID parameter when installed either way, and set resolution accordingly.
- Unlocked resolution lines for direct init editing - if you have problems with squashed fullscreen or get a "mode switch failed".
- Added a "general search" parameter for conditional entry conditions - specify 0 as the index to search the entirety of the tag, as in "[COND:BODY@0#FISH]"
- Optimized saving and loading mods a bit. I need to test some more, see if you get errors in output.
I think that's it for this one.
The GDI error and the format errors are something I don't understand. For a while the way I used - creating new bitmap from file->modify bitmap->save bitmap to same file - worked flawlessly. Now it appears the bitmap can't save the file because it's already in use - by the same bitmap. I worked around it by saving to a temp file, then freeing the handle and moving the result, but it's hackish and inefficient.
The format errors I got in XP are the worst thing, because I can't see the reason for their appearance. It says to me, "1.1" is not a properly formatted string for conversion to Single. Then I look in MSDN, and it says "The string must have an optional decimal delimiter and trailing digits behind it.". Isn't "1.1" just that?...
-
Sadly, it's probably caused by the Martial Arts mod. Switch from Megamagic weapons to simple Magic weapons (or turn them off) and try then.
Yes, shutting off magic weapons entirely seems to have worked.
If it just stopped without changing the Activate button back, some error occured that dropped the cycle out of the function. It should never happen, not without exceptions. I'd rather believe it hung up, which isn't unheard of.
Further testing reveals there was an error window I clicked past without seeing.
But my confusing new fort options are all in there, so here's hoping. Mostly I wanted the all stones economic and wooden weapons parts. =)
-
You should try again in this version, it has improvements in that regard.
-
If I get around to updating my copy of DF - the changes are minor as regards my play, that I can see, and I -just- found one of my obsidian/magma/river/woodland/flux embark sites - I will at that.
-
Hello, Sean.
I'm currently making a fallout post-apocalyptic mod, can you share your minerals from the Minerals mod?
You've made a great work and since the mod is currently a total conversion and cannot go with other components I can't use it in modbase. Could you contribute, please?
-
Why can't you use it in modbase? Hm, I'll probably have to make another switch for this, but in the meantime all you have to do is turn off the Original DF mod and stick yours up top. Since most mods for modbase have REQUIRES fields, they will not function with Original DF turned off, and if I make the switches, you won't be able to have more than one TC active at a time.
-
Well, it's a nice option. I didn't think about it. Should I make it in the same syntax? I will convert it when I finish.
I asked 'bout that because I plan to play with different minerals/fuel types which are in your mod already when I checked it.
But I have a lot of things to add after so for now the conversion is not my primary goal. Well, it will come later then.
-
That's a nice new layout for the viewer
-
Deon, if you make it a TC, then you won't NEED to convert it, just stick it into a folder of its own, and supply all the raws you need for it. Make a dfmod file, and if I manage to get the TC functions working by then, you won't have too much problem, just clicking the TC mod will deactivate all other TCs and stick the mod up top automatically. (the big funny thing is, I can't get it to do that consistently - for some reason the mod up top stays up top no matter what, and trying to swap places with it creates weird menu glitches that I can't fix...)
-
I'm getting an error message when loading init settings. It doesn't seem to affect anything other than tileset installations, everything else still works, however bugs is bugs.
(http://i38.tinypic.com/29zcw77.png)
Here's the text from the message:
************** Exception Text **************
System.IO.IOException: The process cannot access the file "F:\Dwarf Fortress\Game\Modded\39f Modbase\data\art\Herrbdog_960x300.bmp" because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String str)
at System.IO.File.Delete(String path)
at ModBase.Form1.Button4_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2407
CodeBase: file:///f:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
ModBase
Assembly Version: 1.0.3144.28730
Win32 Version: 1.0.3144.28730
CodeBase: file:///F:/Dwarf%20Fortress/Game/Modded/39f%20Modbase/ModBase.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///f:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2407
CodeBase: file:///f:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///f:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
Microsoft.VisualBasic
Assembly Version: 7.0.5000.0
Win32 Version: 7.10.6001.4
CodeBase: file:///f:/windows/assembly/gac/microsoft.visualbasic/7.0.5000.0__b03f5f7f11d50a3a/microsoft.visualbasic.dll
----------------------------------------
-
Gah. Hrm. I fixed that bug for tileset and tilemod mods, but forgot to check the actual tile installer. I don't think I got the error myself, but I'll apply the same fix anyways.
-
i have this error too and every time i change mod settings (wich i want to use) it remakes me the original setting of tileset wich i dont want to use ...(it migth be not related to the previus one tougth but it is also around tilesets)
-
Uh, again please and in (more) proper english. :)
Every time you click "ACTIVATE", you get a file access error popping up, and the prog resets your init settings to the last saved instance?
-
yes the init settings go back to the default
the other thing i dont know how to make is that my dwarfs don't look like they used to be i copyed the files in raw/graphics but they stil get they colored wersions ... and cats and dogs too what shoudl i do?
-
Hey Sean, I encountered a slight installation problem. My question is, do I require any specific software to install it? Because it looks like I need a special unzipper. Thanks.
-
Did you try a common Winrar?
-
Thanks, the one I found has a 40 day trial period though, so are there any that are 100% free?
-
Okay, I successfully installed it into a clean DF. When I try to scan for mods, it says 'df_original.txt not located'. How do I fix this? Also, the DF folder's name is not the default installation name, if that matters.
-
Here are the things that matter:
(the folder where the Modbase.exe is located is <root>)
These folders exist: <root>\raw, <root>\raw\objects, <root>\modbase, <root>\data, <root>\data\init.
These files exist: <root>\modbase\df_original.txt, <root>\data\init\init.txt, all files in <root>\raw\objects.
If you extracted everything as it were, everything should work fine.
-
how do you migrate maydays graph set to the modpack?
-
No way yet, at least no modbase-specific way. I didn't get around to adding graphic packs support yet. You can add tilesets, but you'll need to set up graphic tiles the old manual way.
-
sigh... I unzipped it like normal. All of that is accurate EXCEPT the Modbase>df_original.txt.
-
Can you check that the file is in the archive? I'm asking because I know it is. I simply want to know what kind of crazy extraction method you are using that doesn't place all files in folder trees. I'm using an expired trial of WinRar (which does nothing to prevent you from working, it just pops a message that you need to register every time you open it), and extracting to folder trees is the default setting, just right click the file -> Extract Here.
-
No way yet, at least no modbase-specific way. I didn't get around to adding graphic packs support yet. You can add tilesets, but you'll need to set up graphic tiles the old manual way.
i dont know what i am doing wrong, i copied all the bmp and the graphics_example.txt and it still don't work ...
-
Thanks, the one I found has a 40 day trial period though, so are there any that are 100% free?
It says trial period but it lasts forever anyway.
-
Got it! It works now!! THANK YOU SO MUCH SEAN! I can't wait to try the Min+ and Martial Arts mods!!
-
No way yet, at least no modbase-specific way. I didn't get around to adding graphic packs support yet. You can add tilesets, but you'll need to set up graphic tiles the old manual way.
i dont know what i am doing wrong, i copied all the bmp and the graphics_example.txt and it still don't work ...
Well, you need to enable graphics, via the builtin editor - open the second tab, find the GRAPHICS line in the upper list, double-click it, select YES, click Done, then Apply Init Settings.
-
it made me a message of eror i think but i will retry when i go home
whatever the thing wath would be cool is to have a third tab in wich you can select for all creatures (mod activated too) to wich picture it uses
-first you should add the image files and say the coordinates and it would parse it for you to select
-then you select a creatur entitie and you add to its DEFAULT, PROFESSION, ZOMBI, CHILD... entities an apropriate image.
if you like this idee i can explain it better with images of the window if you want ...
-
I know, you want a separate tab for graphics set editing. I didn't get to that yet.
-
if i can help you in anything just say ...
i can plan it for you ... for coding it i am less sure becouse i am not so god in it but i can try to help if your code is well commented ...
-
I'm not so "god" in coding either. I wouldn't be so sure for Toady though. :)
No, I have everything planned out mostly, I even have the basic tile-generating routines figured out, I just don't have enough free time currently, to work on most of this stuff. I still can't figure out the problems I have with setting up Total Conversions.
-
in what are you writing it?
-
Well, it's written in the first post..... as well as the download link for the source...
It's VB.NET.
-
Maybe I'm just being my usual newb self, but I can't see the modbase.exe inside the rar.
<edit> I also seem to lack the df_original.txt file.. </edit>
-
Maybe you downloaded the wrong rar. There are three - one has the modbase.exe and such, one has the mods, and one has the source code.
Also, could we please have an option for ModBase that says "Please do not touch my init.txt" ?
-
An option that means "do not touch my init.txt"? Well, it does copy your original init file into the modbase folder, so unless you use the built-in editor afterwards, it will not be changed.
And it messing with inits during normal work is a necessary evil. Until I think of a way to reset tileset configs (so that tileset mods can be disabled) without copying over a backup copy, it will have to be done.
-
Ka-SLAP!
This is a temporary release to fix the issue with tilemods. SL's tileset mod should now work correctly.
I just hope nothing got broken in the process.
A proper version using the additions of the latest DF release should be done in a few days if I have the time.
-
By the way...
Have I said "thanks" yet?
This seriously is a majorly useful service to the player community.
-
Does the Y version work for you still? I had to hammer away some of the unfinished contraptions in the code so it would work the same.
And thanks for the thanks, but the service is still wildly underused. The previous release only had some 150 downloads, so unless it's being mirrored somewhere, its popularity is still meager at best. Seeing as it was meant to promote the use of mods and all... ;)
-
Oh, right on. Thanks Shadowlord, I have an aweful habit of only looking for the first download in a thread..
The modbase works quite nicely, Sean.
-
I love this thing so much. As soon as I get some free time I want to start making some mods for it. THanks for all the hard work everyone has out into it.
-
I can confim that SL's Tilemod works completely correct with version 0.95y. Good job Sean. :)
-
I had an unfortunate realization... If I install the new version of DF will I have to reinstall Modbase? I am pretty lazy... :P
-
Reinstall, as in how? Just extract the modbase archive, the modpack (or all the mods in your modbase dir except the original one - the new update will take care of that bit), copy over modbase.cfg and init.cfg, and rerun modbase. All setting should be there, just save mods again and run the usual init routine. Which is further simplified by the fact that it loads init.cfg into the lower screen as soon as you open the tab. So you just open the tab and click save settings.
-
I'm still getting the same error message as I posted before whenever loading init settings with modbase. I can still load them and alter them, however.
-
Ka-SLAP!
This is a temporary release to fix the issue with tilemods. SL's tileset mod should now work correctly.
I just hope nothing got broken in the process.
A proper version using the additions of the latest DF release should be done in a few days if I have the time.
Oh no! Don't tell me that you watch 2x2 too...
And by the way I'm back to gaming, so I take this and putting different things in =).
Also as long as ModBase becomes the Universal game files controller I'd suggest to add a soundrack selection option. There're a few melodies (by me (http://dffd.wimbli.com/category.php?id=6&sort=file_timestamp&order=desc&limit=10&page=2) and others) which fit for DF well and they could be downloaded as a separate pack and could be managed by the ModBase.
I.e. there're 100+ downloads for Diablo game theme and it's quite popular, so I think it would be a nice addition to the tool.
-
I actually planned this one, and Modbase actually understands MUSIC tags in mods, but I never got to add the actual functionality in. I suppose I can make it copy the original music files in addition to all the other things it backs up, and have it restore from there if needed, but then I run into problems with excessive copying over - unlike init tags that I can check without changing (I figured that one out), music files are all the same name...
And I don't know what 2x2 is. :\
-
2x2 is a "adult cartoon" channel.
There's a funny and not very clever show KA-BLAM! =).
-
2x2 is a "adult cartoon" channel.
There's a funny and not very clever show KA-BLAM! =).
Is that the same show with the Action League on it, or something different entirely?
-
Ka-Slappety-SLAP!!! :P
I rummaged through the code for the init settings tab. It shouldn't crash now, on loading or saving init settings.
Mental note - when coding anything on anything made by Microsoft, plug all leaks with utmost determination, or it'll burst under pressure. The problem was that the arrays set up for tileset lists hogged up the image file access for themselves, so I had to completely wipe and dispose them every time the lists reloaded.
-
An option that means "do not touch my init.txt"? Well, it does copy your original init file into the modbase folder, so unless you use the built-in editor afterwards, it will not be changed.
And it messing with inits during normal work is a necessary evil. Until I think of a way to reset tileset configs (so that tileset mods can be disabled) without copying over a backup copy, it will have to be done.
The reason is that I don't have ModBase loading any mod components which actually change the font bmp here. Those are disabled because I copied the font bmp into the folder it goes in to avoid having ModBase delete the comments in the init file and stuff. But it deletes them anyways even though there isn't anything in the init file for it to change, so I have to overwrite the stripped init file with a backed-up init file, and if I change an option in the init file directly later (rather than figuring out how to use ModBase's editor), and then have ModBase apply changes to a mod, ModBase overwrites the init file and deletes the changes because of its own backed-up init file. For a while while I was working on my mod it kept changing the window size back to 80x50 when I wanted 80x25 just because I happened to have been trying 80x50 when I ran ModBase for the first time with that version of DF (until I hunted down where it stored the original init file, and fixed it).
(Yes, the init file comments really are that important to me)
-
Sean, are you sure you got the right version of Modbase into the zip file? I'm asking because when I start the Modbase I got from the 0.95yy zip, the window title is 0.95y. And it's still erroring whenever I "Load init settings" or "Apply init settings." Better check on that, 'K.
-
Hmm... Well, I did forget to update the window title for that version, but I'll check it again, sure.
-
Alright, I looked into it. Please check that the crash behaves like this:
1) You load MB, click the Init tab. The Init list appears, the current tileset it shown, no crash.
2) You load MB, click the Init tab. After the Init list appears, you click the Load Init Settings button. No crash.
3) You load MB, click the Init tab, select a different tileset than the one shown, click load or save. Crash.
I now found and eliminated the cause of that. One more leak, I needed to "rinse and repeat" the same process for the image display itself. Sometimes I wonder how the hell did the whole thing work, and flawlessly, before all these fixes.
I'll now throw in the init-check (assuming it does work like I think it should) so that the init is untouched if its contents are the same as the backup, but generally I think it might be a good idea to find a way to preserve the between-tag comments. I can't promise that I'll find a way, considering how the program handles the raws text, but it's possible.
-
2x2 is a "adult cartoon" channel.
There's a funny and not very clever show KA-BLAM! =).
Is that the same show with the Action League on it, or something different entirely?
Right... The most funny part for me was "Prometheus and Bob".
Sean, I like how it's going. I wasn't using the modbase for a while and now it has really nice new features. Also I like the moving text on the button :).
-
2x2 is a "adult cartoon" channel.
There's a funny and not very clever show KA-BLAM! =).
Is that the same show with the Action League on it, or something different entirely?
Right... The most funny part for me was "Prometheus and Bob".
I haven't seen that show in a looooong time. I don't even know if it still airs on anything I get, and if it does at a ridiculously late time. I really need to get a Free to Air setup, that'd probably have it on there somewhere.
Anyway, I'm not sure why I delayed for so long, but I've finally got those fish men to work right.
[CREATURE:#_MAN]
[COND:BODY@1#FISH2][COND:MEGABEAST!][COND:SEMIMEGABEAST!][COND:POWER!][COND:NAME]
[NAME:#man:@1#men:@1#man]
[CAN_SPEAK][CAN_LEARN][CANOPENDOORS]
[SIZE:#+3]
[BODY:FISH2!!HUMANOID:DORSAL_FIN:SIDE_FINS:TAIL:>>]
[MUNDANE:!]
[PET:!]
[COMMON_DOMESTIC:!]
[IMMOBILE_LAND:!]
[NATURAL]
[PREFSTRING:mystery]
[CHILDNAME:NAME@1#man child:NAME@1#man children]
[ATTACK:MAIN:BYTYPE:GRASP:claw:claws:1:5:GORE][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:STANCE:kick:kicks:1:3:BLUDGEON][ATTACKFLAG_WITH]
[CREATURE:#_MAN]
[COND:BODY@1#FISH][COND:BODY@2#DORSAL_FIN][COND:MEGABEAST!][COND:SEMIMEGABEAST!][COND:POWER!][COND:NAME]
[NAME:#man:@1#men:@1#man]
[CAN_SPEAK][CAN_LEARN][CANOPENDOORS]
[SIZE:#+2]
[BODY:FISH!!HUMANOID:SIDE_FINS:TAIL:DORSAL_FIN:>>]
[MUNDANE:!]
[PET:!]
[COMMON_DOMESTIC:!]
[IMMOBILE_LAND:!]
[NATURAL]
[PREFSTRING:mystery]
[CHILDNAME:NAME@1#man child:NAME@1#man children]
[ATTACK:MAIN:BYTYPE:GRASP:claw:claws:1:5:GORE][ATTACKFLAG_WITH]
[ATTACK:MAIN:BYTYPE:STANCE:kick:kicks:1:3:BLUDGEON][ATTACKFLAG_WITH]
You might want to change that to where it adds the [AMPHIBIOUS] tag, and removes [AQUATIC], because they aren't very likely to leave the water in the current setup.
-
Alright, I looked into it. Please check that the crash behaves like this:
1) You load MB, click the Init tab. The Init list appears, the current tileset it shown, no crash.
2) You load MB, click the Init tab. After the Init list appears, you click the Load Init Settings button. No crash.
3) You load MB, click the Init tab, select a different tileset than the one shown, click load or save. Crash.
OK, that isn't that bug that I'm experiencing. The one I'm getting is when I click "load init settings" or "apply init settings," and an "unhandled exception" error box pops up. Now, I can click the "Continue" button in the box, and Modbase keeps going, but then I can't get the tileset dropdown to show anything, and the tileset image preview is empty.
I think it's 'cause the error that's given is that Modbase can't access one of the tilesets in /data/art, 'cause another program is using it. Well, the file the error gave was CSJM_micro_4x4.bmp, which I didn't install, but Modbase included in it's own tileset folder. I took that out of the Modbase tileset folder, and it threw the same error for Herrbdog_960x300.bmp; Took that out, and Modbase didn't error.
My best guess is Modbase is tripping over it's own feet when it's loading the tileset list, detecting that a program is using the file, but not that that program is itself. :D I'll leave the Modbase tileset folder empty for now, and eagerly await the next version of Modbase. :)
-
Well, I think I obliterated that bug entirely, by doing the image-wiping for the display itself.
-
Hm, wow. I actually made it preserve the comments, and DF even didn't crash when I started it afterwards. There's a side effect though, now it goes all wacky with linefeeds when saving for some reason, so it makes all output files very uniform, but very much hell to read. I guess it doesn't matter if you don't want to read the raws afterwards, but I'll have to seek a way to fix that.
I won't do another slap-patch and instead release 0.96 when it's done.
-
export/import mod settings migth be a helpfull addition to modbase some time if you have time ...
-
Hm. Probably. I might add save management, too, though I can't fathom how I will store it all...
-
just store the modes activated(like 1 option 1 suboption activated 2 option 1,4,6 suboption activeted ...or even better, this just with names ...->all in a txt) and the eventual modbase changes are not so importent i think it is normal that people should have the same mods to activate the same settings ...
-
Wait, what? Modbase already saves its mod config. I thought you meant saving several separate configs...?
-
it is not the init config that it saves? cool wich file is the mod config save? so i could show that with my worldgen settings if someone want to recreate the same ...
-
It saves init settings into init.cfg, and it saves mods settings into modbase.cfg... I suppose I could have made those just one file...
-
no it is better if separate ... so i can put the contenu of this cfg with my worldgen params and so they will shos all needed for remake :D
-
The worldgen params are in DF's data/init/world_gen.txt, if that's what you mean.
-
meta-megamagic weapons give me this error
System.InvalidCastException: Приведение строки "1.1" к типу 'Single' является недопустимым. ---> System.FormatException: Входная строка имела неверный формат.
в Microsoft.VisualBasic.CompilerServices.DoubleType.Parse(String Value, NumberFormatInfo NumberFormat)
в Microsoft.VisualBasic.CompilerServices.SingleType.FromString(String Value, NumberFormatInfo NumberFormat)
--- Конец трассировки внутреннего стека исключений ---
в Microsoft.VisualBasic.CompilerServices.SingleType.FromString(String Value, NumberFormatInfo NumberFormat)
в Microsoft.VisualBasic.CompilerServices.SingleType.FromString(String Value)
в ModBase.Form1.stringEvalToInt(String str)
в ModBase.Form1.CompileMods_Click(Object sender, EventArgs e)
в System.Windows.Forms.Control.OnClick(EventArgs e)
в System.Windows.Forms.Button.OnClick(EventArgs e)
в System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ButtonBase.WndProc(Message& m)
в System.Windows.Forms.Button.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Загруженные сборки **************
mscorlib
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
ModBase
Версия сборки: 1.0.3144.28730
Версия Win32: 1.0.3144.28730
CodeBase: file:///C:/Program%20Files/DwarfFortress/ModBase.exe
----------------------------------------
System.Windows.Forms
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Microsoft.VisualBasic
Версия сборки: 8.0.0.0
Версия Win32: 8.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualBasic/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
mscorlib.resources
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
Microsoft.VisualBasic.resources
Версия сборки: 8.0.0.0
Версия Win32: 8.0.50727.312 (rtmLHS.050727-3100)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualBasic.resources/8.0.0.0_ru_b03f5f7f11d50a3a/Microsoft.VisualBasic.resources.dll
----------------------------------------
System.Windows.Forms.resources
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.312 (rtmLHS.050727-3100)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
************** Оперативная отладка (JIT) **************
Для подключения оперативной (JIT) отладки файл .config данного
приложения или компьютера (machine.config) должен иметь
значение jitDebugging, установленное в секции system.windows.forms.
Приложение также должно быть скомпилировано с включенной
отладкой.
Например:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
При включенной отладке JIT любое необрабатываемое исключение
пересылается отладчику JIT, зарегистрированному на данном компьютере,
вместо того чтобы обрабатываться данным диалоговым окном.
Also init.txt someway doesn't want to load and it says that "herbblog_*.bmp" is already busy while I don't use this tileset.
-
"Herrbdog". :)
I try to iron out the errors with file access, but they keep popping up and I don't know what to do with them. Progress is slow.
The "1.1 to single" conversion error has had me stumped ever since it appeared. I mean, "1.1" is a Single by definition, one-point-one, it even matches the description given in MSDN for the conversion requirements. It also only appears on my XP desktop. On this VistaHP laptop, the error does not appear. What's your .NET framework version?
-
Vista laptop (Vista Home), .NET 3.5 frameworks.
Also I see a lot of "unknown creature" kills in dragons' entities (and others) in legends. What are they?
-
Are you really Deon? :P I mean, unknown creatures were in the legends since the first army arc release. They're historical figures that did nothing of importance and got culled - this only happens on Large worlds unless you set your custom settings otherwise.
-
I guessed so. I just didn't see them before :).
-
Err, hey Sean. I probably should have asked before I went ahead and included them, but can I have your permission to add the Martmod's body files to this? (http://www.bay12games.com/forum/index.php?topic=24163.0)
-
Are there graphic sets for the Kentauri/Dark Elves/Dark Outcasts/All the other races added in the modbase? I imagine it'd be a ton of work, so I wouldn't be surprised if there aren't. Thing is, my brother has no access to gaming for a couple of years, and I've been mailing him stories of my fortresses for his entertainment. I saw these mods and thought that I'd have even better, more varied stories to tell, but I think seeing my dwarves attacked by letters/placeholder art would kill a little of it for him. Is there such a graphics set, or should I just continue with vanilla?
I tried a search for this, but came up empty. Sorry if this kind of question has been posted ad nauseum.
-
Can anyone please help me as to how to install the mod? Im confused horribaly. o.o And i got the all in one pack, And i extracted it to my DF folder, But i dont know which directorys to put them in, Like which in raws, And so fourth. =/
-
Unless something got horribly confused, you should extract all archives into the same directory, that is the same directory where "dwarfort.exe" is that you run DF with.
-
Ok thank you very much :D
-
In converting some of my personal mods (as well as various mods from the forums) to Mod Base format for ease of maintenance (i.e. when a mod I'm using/tweaking is updated), I've come across some implementation problems, if not outright bugs.
My feature wish list remains about the same as it was in my earlier post to this thread, but in addition to that I find myself having to compile many mods into one single megamod to get around certain issues (defeating the purpose of Mod Base).
For example, it seems that regardless of whether or not I flag an entry to !REPLACE, any token it contains will overwrite existing tokens of that type. When I try to add slag (METAL_ORE:SLAG:50) as a potential additional product to all metal ores, all existing METAL_ORE tokens are instead converted to METAL_ORE:SLAG:50. There's no way to simply add that token to existing ores. The same problem affects many other attempts at modular additions to existing entries (all currency for dwarves became PLATINUM rather than adding PLATINUM as an additional form of currency, etc).
I also seem to be struggling with the syntax for conditional statements, but that's probably just the learning curve rather than a deficiency in the system. I'll keep working at it and might add more details on that if I still can't sort things out.
-
Hm. I think I just forgot that METAL_ORE is a multipresent tag.
I don't know if I'll release a version just to fix that, I'm more or less overhauling the entire thing. Among other things, it should be able to read tag definitions from external files, so I don't have to recompile the exe every time some tags change.
-
I can't get the thing to work. No matter what I do.
Fresh install of DF. Then I extract Mod Base into the DF folder, along with the mod package.
I double-check that the directory is right. I scan the mods. I click on !!! ACTIVATE !!! and it always crashes. Error is either: "Index was outside the bounds of array." or "Conversion from string "1.1" to type 'Single' is not valid.". The latter comes every time you try to activate the mods for the first time. The former if you try it again after the first unhandled exception. Anyways, the raw\objects directory is completely void of any files after it crashes. The progress bar runs till the end, then it jumps back a few notches and crash.
-
You must be running XP. The "index out of bounds" can be related to the test mod, and the "1.1" error is something I was not yet able to solve. It's in the Martial Arts mod, additional items section. For some reason, even though "1.1" is a perfectly valid Single type value, XP (and Vista in some cases) will not let it work. All I can suggest you try is installing either the latest .NET framework (if yours is below 2.0), or the 1.1 or 2.0 if yours is 3.0 or 3.5.
Part of this whole overhaul effort is installing MSVS 2008 and seeing if it works after being compiled with it, but I wasn't able to install the darn thing either, because the 3.5 .NET framework doesn't install for some reason.
-
Yeah, Windows XP. And 64 bit version, even.
I just installed 3.5, I guess I'll have to try to revert back to 2.0 or such.
-
Couple of things, there are a few animals that use the [RECKLESS] tag, which has been removed, and the lizardmen and tigermen use [LOW_SKILL], which also has been removed.
Also for some reason making hardened bone mass doesn't require bones, only ashes. I fixed that by replacing:
[REAGENT:1:BONES:NO_SUBTYPE]
with
[REAGENT:1:BONES:NO_SUBTYPE:BONE:NO_MATGLOSS]
-
I suppose that should work in the new DF version. I think I completely forgot about my poor lil' MA mod... :-\
-
Extract the contents of the archive so that ModBase.exe ends up in your main DF directory.
Installation of this mod really needs to be clarified.
I haven't installed any mods before, and this has got me going "hunh?"
The mod download doesn't have a modbase.exe in it, and even if it did, this doesn't say if everything is just put into the main dwarf fortress folder, or if it gets sorted into different folders. It merely specifies that modbase.exe should be in the DF folder.
(http://img440.imageshack.us/img440/5753/63821218ox0.th.jpg) (http://img440.imageshack.us/my.php?image=63821218ox0.jpg) (http://img185.imageshack.us/img185/2871/30095912vi9.th.jpg) (http://img185.imageshack.us/my.php?image=30095912vi9.jpg)
So for someone who hasn't done this before, what am I doing wrong?
Edit: I found the culprit - PEBKAC
Even so, the OP's post is a mite confusing, in that the actual mod is not the first thing available for download, rather the modpack is. Also, modbase.exe doesn't detect any of the mods. Oh well, back to normal dwarf fortress for me!
-
You need the files from the modbase file in a folder called modbase.
-
and to think...none of this could of been possible without Dwarmins hat mod.... :P
-
Bump for everyone to know. Where're you, Sean?
-
Bumping just to say that Modbase is discontinued. New developments in this direction will be a part of a new project, Fort Knox. Old Modbase mods will be compatible with Fort Knox (probably), but will certainly not be compatible with the new version of DF. As such, this topic gets the padlock.
*clank*