Alright, I'm caught up and finally have time for a longish response.
I started by replying to individual posts, but that got too long and hard to follow; so instead it's organised by topic.
Quotes omitted due to length and duplication, so if I've missed or misrepresented anything let me know please!
And now, the essay:
I think we're actually discussing a couple of separate things together, and it would be useful to distinguish them.
Types of content (for things added by mods):
- Native DF creature graphics
- TwbT item and building overrides
- Stonesense content and other visualizers
Issues:
- Should graphics support for mods be part of the mod, or the graphics?
- What file structure or conventions should we use?
Where should graphics extensions be stored?Ruling:
A graphics pack should be for vanilla DF only. A mod in PyLNP format may include a "graphics extension" for one [or more] graphics packs.Rationale summary:
- There are very many more mods than there are graphics packs, and many people who use graphics do not use mods.
- Cumulative file size is a real issue and would affect many packages (including mine). This approach minimizes the impact on people who will not use graphics extensions.
- The graphics maintainer and the modder providing a graphics extension will often be different people. This minimizes my concern about 'spreading the art out' - that's actually the point, as it allows anyone to add some graphics to their mod without a gatekeeper or single point of failure.
- I would like mods to support multiple graphics extensions, but this may overcomplicate the format (hence the [brackets] in the ruling). See format discussion below.
TwbT extensionsThese are actually pretty tricky right now, given that they should be flexible in PyLNP but also work when drag-and-dropped.
Support will be very easy if/when Mifki supports multiple overrides files, or changes to the alternative sprite-per-file filename-based scheme he mentioned a while ago.
@Rydel: items
can in fact be referenced by name, so we can avoid the problem of numeric IDs changing. Perhaps we (or Mifki) should detect use of numbers and issue a deprecation warning?
Stonesense content is out of scope for this discussion. We can - and I intend to - consider supporting utilities
after native creature graphics and TwbT support works. Armok Vision plans to use Stonesense format directly, when customization creatures are added, so no extra work will be required there. Other utilities are further away still - let's get the basics nailed down first!
Format Ideas and ConstraintsI'll list some contraints that our format must satisfy (non-negotiable); then features that would be nice if someone can work out how, and last describe a starting point for more discussion.
Constraints:
- It MUST be possible to install a mod in any proposed format simply by drag-and-drop over DF. This promotes accessibility for anyone who (for some reason) doesn't use PyLNP. It also means that PyLNP can use content that wasn't explicitly designed for it, massively expanding the catalog. (Rubble takes the opposite approach; fantastic technical basis but relatively little content)
- It must be possible to make a Graphics extension compatible with an arbitrary graphics pack, without the cooperation of the graphics maintainer. I understand that most of the people in this thread fill both roles, but the format we choose should work for more casual creators too - or we'll never see much takeup! (ie: mods mst be entirely self-contained)
Nice (but optional) features:
- Support multiple graphics extensions in a single mod. Easy to store in a subfolder; but how would you flexibly decide which to install? Possible: categories like MIME types, regular expressions, something else. (Must support a default for drag-and-drop install)
Suggested starting point:
- (recap:) A mod in PyLNP format is simply a DF install with the vanilla files removed. We then merge the raw/ and data/speech/ files.
- To support graphics, mods just include graphics raws and images. As long as they don't have the same name as a file in the graphics pack, this already works! (I just checked the code - apparently I thought of this two years ago )
- Support for data/art and data/init/<overrides files> will be added once Mifki supports multiple overrides files.
- (for discussion) How should non-default graphics extensions be stored? How should PyLNP choose which to install? Does this work with multiple mods?
Other CommentsA few other things came up in the discussion; here are some replies.
- Graphics packs need to be bundled due to Pidgeot's (IMO reasonable) policy that PyLNP should work in offline mode by default. I've done some work on auto-downloader scripts for my own work on the pack, but while that may eventually provide a way to download-on-demand it's a long way off and doesn't solve the more fundamental problems. "prefetch a curated subset" will continue to be the default in my pack for a variety of reasons.
- I do actually pull and preprocess graphics for my own pack, but for this discussion I'm mostly thinking with my 'PyLNP developer' and 'DFgraphics coordinator' hats on, rather than 'Starter Pack' or other roles - so the important bit is simplicity and usability for other users. I'm not designing the format solely for my own use!
- I don't currently include mods in my pack because it's targeted at new players, but may eventually - likely via a fecth-on-install system and online list of sources. But that's far-future stuff...
- I think the two perspectives are summarised well by @Dirst and @Rydel. I tend to agree with Dirst, and think that this is more representative of most players.
- Separate downloads are certainly not painless, which is the whole point of (switching hats briefly) a newb pack. It kills the whole "here's a USB" model, for example...
- It's now 2am here, so I'm done writing for the day. See you later!
So, uh, I hope that makes sense! I know I'm coming across as the no-fun-guy in a few places, and maybe acting on authority I don't really have - but I hope you can see there's some reasons behind this, and I'm still happy to hear other opinions. And frankly if anyone else wants to code up a better system they're entirely welcome to; and it's not like the format is enforcable in any way other than compatibility with the PyLNP code...
Regardless, keep up the discussion - I've already learned a lot!