v50 Steam/Premium information for editors
- v50 information can now be added to pages in the main namespace. v0.47 information can still be found in the DF2014 namespace. See here for more details on the new versioning policy.
- Use this page to report any issues related to the migration.
This notice may be cached—the current version can be found here.
User:Button/BAMM
Jump to navigation
Jump to search
About
Features
Planned Features
Usage Instructions
Download
You can download the script from GitHub.
Python 3
Configuration
Button's Workspace
Sometimes I'm on a computer I can't put a git client on.
# Modders' guide to BAMM! graphics references # Place your conversions in a file named bamm_gfx_<identifier here>.txt . The file should be encoded in codepage 437, the same as the Dwarf Fortress raws. # Start by defining names for your target graphics elements. # These names must always start with @. # So if you want to reference the background color being used for the Lion creature token, you can do that with this definition: # CREATURE:LION|COLOR::@lionbgcolor # or # CREATURE:LION|COLOR::@lionbgcolor: # If you want to reference the *whole* color of the lion tile, which is a 3-argument value, you can add a number after the @, like this: # CREATURE:LION|COLOR:@3lionfullcolor # Or you can declare references for each argument of the lion color individually: # CREATURE:LION|COLOR:@lionfgcolor:@lionbgcolor:@lionbrightness # The name is case-sensitive and can contain any character in the alphabet. Numbers are not allowed except immediately after the @. Special characters, including underscores, are not allowed. # You can also create generic all-graphics-belonging-to-this-object referents this way: # CREATURE:LION|@allLionTags # BE AWARE: trying to define non-graphics or partially non-graphic referents won't work. Referent declarations which include non-graphic information will simply be ignored. # OK, now that we have our referents, it's time to use them to modify raws. # creature_modded.txt # [CREATURE:MODDED_LION] # @allLionTags # This sets all of the modded lion's graphics equal to the lion's graphics, in any graphics set. # However, this "copy all" functionality couldn't be used to set properties belonging to a non-creature object: # [INORGANIC:LIONSTONE] This won't work # @allLionTags This won't work # In order to make lionstone the color of a lion, you'll need to reference the colors instead: # [INORGANIC:LIONSTONE] # [DISPLAY_COLOR:@3lionfullcolor] # NB. References are always made to graphics as declared in the graphics source raws. If you declare a lion to use a deer's graphics, and a deer to use a lion's graphics, they'll swap, not have the same graphics. # Eventually I intend to expand this to include the ability to apply these changes based on the properties of entries, but right now, this should be enough. # TODO docstring def handle_graphics_references(graphics_root,def_file): # Runs after the graphics source has been pulled in # Modifies same global graphics_referents if graphics_refs is None: graphics_refs = [] # This is meant to be a dict, check syntax definitions_over_yet = False for line in def_file: actline = line.split('#')[0].strip() if len(actline) == 0: continue elif actline == defs_over # TODO declare this as a constant definitions_over_yet = True elif not definitions_over_yet: # load referent definition # If the referent name already exists in graphics_refs, write an error to the log and continue to the next line. # Otherwise, match it against a template # Then match it against the GRAPHICS NODES that meet that template # Not the bound node or the target node. # (TODO make each template node hold lists of objects that refer to it, by function.) # If a partial definition matches more than one object, keep track of all of them so they can be narrowed down later # If a full definition matches more than one object, write a warning to the logfile and choose one arbitrarily to go with. # If a full definition matches no graphics object, write a warning to the log and try it on target objects. # If a full definition matches neither graphics nor target, write an error to the log. # Put the mapping of referent name to an object storing the reference info into graphics_refs else: # Get a collection of all the targets that meet the reference