Artisanal Reskins: Assets API

by Kirazy

The main entry-point to the Artisanal Reskin asset mods. Provides convenience methods for creating Factorio data structures to support reskinning items, technologies, and entities.

Internal
a day ago
2.0 - 2.1
2.01K

Changelog

Version: 0.2.1
Date: 2026-11-09
  Features:
    - Added sprite sets for most remaining entities and equipment, as well as the corresponding applicators.
    - Added `defines.get_belt_sprites` to select a BeltSprites enum value based on the specified `speed`.
    - Added fluid box and heat buffer graphics to sprite sets
    - Added modules `api.fluid-boxes`, `api.heat-buffers`, `api.connection-matching`, and `api.assignment` to facilitate working with fluid boxes and heat buffers dynamically.
    - Added `api.energy-sources`, with methods for zeroing light flickers emitted by energy sources.
    - Added `use_mirroring` to crafting machine sprite sets.
    - Added a conversion from valve to storage tank sprite sets.
    - Added the dying explosions, particles, and corpse fields of the base game to `assets.base`.
    - Added `defines.generic_remnants` to resolve the generic remnants of the base game that fit an entity.
    - Added `apply_corpse_and_explosion` to update the corpse and explosion assigned to an entity without adjusting its configured sprites.
    - Added item and technology icon modules corresponding to artwork in the asset mods.
    - Added the GUI sprites of the circuits and the bulk inserter effect to `assets.bobs.ui-sprites`.
    - Added ore stages and fluid resources to `assets.bobs.entities.ores`.
    - Added `IconBuilderFactory:collection` alongside picture variations, glow, and mipmap counts to the icon builders, with a default of 4 mipmaps.
    - Added `IconBuilderFactory.dispatch_composition`, and a `get_*icon_composition` creator beside each `get_*icon` creator.
    - Added methods to `icons` for retrieving technology constants, equipment overlays and backgrounds, and the overlays of minified machines.
    - Added `icons.classify_symbol_layers`, which places symbol and letter layers in the symbol group of an icon composition.
  Changes:
    - Applying a sprite set now automatically creates and associates a correctly configured corpse, dying explosion, and particles.
      - This now correctly sets up the death spiral for flying robots.
    - Sprite sets now include water reflections, circuit connectors, frozen sprites, integration patches, heat pictures and pipe covers, drawing box extensions, and light flickers as appropriate.
    - Sprite sets with the artwork of an earlier Factorio release now use the circuit connectors, frozen sprites, and water reflections of that release.
    - `apply_sprite_set` now applies the `fluid_boxes`, `heat_buffers`, and `pipe_material` of every sprite set.
      - Any existing pipe pictures are removed from fluid boxes when not provided by the sprite set.
    - The `corpse` and `dying_explosion` of a sprite set now accept a definition or a prototype name.
    - Added additional fields to `CorpseSpriteSet`, such as its flags and lifetime.
    - The transport belt, underground belt, and splitter sprite sets now include the belt reader sprites and frozen patches.
    - The pump, boiler, lab, heat exchanger, distillery, and Angel's sprite sets now validate their parameters.
    - Changed the blend_mode of all highlights layers from `"additive-soft"` to `"additive"`.
  Bugfixes:
    - Fixed that the electric mining drill sprite sets were not correctly configured with animation waypoints.
    - Fixed the Angel's filtration unit and hydro plant pipe pictures.
    - Fixed the positioning of the lab sprites and frozen patch.
    - Fixed that pumps did not include a shadow due to changes to the base sprites in Factorio 2.1.
    - Fixed that remnant variations in several instances were not correctly configured, resulting in entities having only a single remnant variation instead of 2, 3, and 4 variations as intended.
    - Fixed that the boiler applicator did not set the fire flicker.
    - Fixed that the Angel's gas refinery, advanced gas refinery, and steam cracker sprite sets referenced a fire sprite that Factorio 2.1 removed.
    - Fixed that the Angel's ore leaching plant had smoke.
    - Fixed that the tall electric mining drill sprite set draw order for the north wet window was incorrect.
  Breaking Changes:
    - Renamed `defines.sprite_set_type.flying_robot_sprite_set` to `combat_robot_sprite_set`.
    - Renamed `assets.angels.entities.assorted.loader` to `loader-1x2`, and `assets.assorted.entities.vanilla-loader` to `vanilla-loader-1x2`.
    - Removed `apply_to_explosion` from `SpriteSetApplicator`, and the `include_frozen_pictures` parameter and `fluid_box` field from the pipe sprite sets.
    - Removed the radius visualisation from the beacon and mining drill sprite sets.
    - Removed `assets.base.items.icons`, and `research_speed` from `assets.base.technologies.icons`; use the sprite set modules and the catalog modules instead.
    - `transport_belt_sprite_set` now applies only to transport belts.
    - The transport belt, underground belt, and splitter applicators now set the `belt_animation_set` of the given prototype.
      - `apply_sprite_set` no longer scales `belt_animation_set` automatically.
Version: 0.2.0
Date: 2026-11-01
  Features:
    - Updated for Factorio 2.1.
    - Added the applicator framework: `api.applicators` applies a sprite set to a prototype in one call, handling routing, sprite set type conversion, and scaling on the caller's behalf.
      - `applicators.apply_sprite_set(prototype, definition, params)` routes on `prototype.type` to the applicator that applies it; a `corpse` prototype instead applies the fields of `definition.set.corpse` directly.
      - `defines.sprite_set_type` names the sprite set types, each recording the prototype types that consume it.
      - Sprite data is scaled to the target prototype automatically, comparing the set's `nominal_width` and `nominal_height` against the prototype's inferred scale; `params.scale` and `params.scale_factor` override that directly, the latter relative to the nominal dimensions.
      - `definition` is never modified, so one sprite set may be applied to an entity and to its corpse.
      - Applicators ship for accumulators, beacons, boilers, crafting machines, electric poles, generators, inserters, and many others.
    - Added the entity asset modules under `assets`: one flat module per entity family, each exporting `get_sprite_set` and `get_icon`.
      - Modules are filed by the asset mod that adds the entity, under `assets.base.entities`, `assets.angels.entities`, `assets.bobs.entities`, and `assets.hurricane.entities`.
      - A `nil` tint omits the tintable layers from a sprite set or icon rather than drawing them untinted.
    - Added `api.converters`, the registry of conversions between sprite set types, so a sprite set need not already be of the type the applicator applying it consumes.
      - `converters.resolve(definition, to_sprite_set)` returns the set of the target sprite set type, preferring a conversion defined on `definition.converters` over the registered ones.
      - Conversions compose: registering `A` to `B` and `B` to `C` is enough to get `A` to `C`, along the shortest chain of conversions connecting them.
      - Ships a conversion from `BoilerSpriteSet` to `CraftingMachineSpriteSet`.
    - Added `api.applicator-registry` and `api.converter-registry`, whose `new` mints an empty registry of its kind.
    - Added `api.validation`, a catalog of ready-made validators for the values this API works with: symbols, letters, pipe materials, prototypes, bounding boxes, sprite set types, sprite sets, and sprite set definitions.
      - Entries are validator implementations extending the Artisanal Reskins: Sprite Utils `validation` module.
    - Added `icons.get_tinted_icon`, returning a two-layer icon for a given file: an untinted base, and a copy of it tinted at 75% opacity over the top. Both layers come back with `icon_size` and `scale` filled in, from the optional `icon_size` and `defaults_type` given.
      - This is the effect `icons.get_symbol` and `icons.get_letter` are built from.
    - Added two new symbols: aperture-closed and aperture-open, denoting an open and closed iris.
    - Added `api.icon-catalog`, the `IconCatalog` class, for building the functions that draw icons from a folder of artwork.
      - `IconCatalog:create` creates a catalog with a folder, icon defaults type, and icon size; `:flat`, `:layers`, and `:tinted` create a builder for an icon.
      - `IconBuilder` methods `base`, `mask`, `highlights`, `layer`, `tinted_layer`, `tinted_part`, and `keyed` add layers and parameters; `build` returns a function that draws the icon for a table of parameters.
      - `IconCatalog.dispatch` creates a function that selects an icon by one parameter.
      - `build_composition` on every builder returns a function that draws the icon as an `IconComposition` from Artisanal Reskins: Sprite Utils
    - Added `defines.light`, the names of the light artwork.
  Changes:
    - Icon and sprite methods now validate their arguments through the Artisanal Reskins: Sprite Utils `validation` module; a failure names the function, the parameter, and the path within it, and reports every bad argument at once.
    - `icons.get_symbol` and `icons.get_letter` now throw when `tint` is not a `Color`, rather than building an icon around an invalid tint.
    - `icons.is_icons_using_reskins_images`, `icons.remove_symbols_from_icons`, and `icons.remove_letters_from_icons` now throw when given something that is not a layered icon; `icons.is_icons_using_reskins_images` previously answered `false` for `nil`.
    - `sprites.get_sprite_light_layer` now throws when `light_name` is not the name of a light sprite, rather than returning a sprite pointing at a file that does not exist.
  Bugfixes:
    - Fixed that the boiler sprite set did not include the structure patch, fire, or fire glow elements.
  Breaking Changes:
    - `defines.assets` has changed to `defines.assets_source`.
    - The defines, icons, and sprites modules no longer automatically include the Artisanal Reskins: Sprite Utils equivalents. They must be required and used separately.
    - The graphics pack framework and all implementations have been removed.
Version: 0.1.2
Date: 2026-06-08
  Changes:
    - Electric furnace fluid box sprites are now available if a fluid box requires them, rather than when a particular sprite set is requested.
  Bugfixes:
    - Fixed that fluid boxes were not properly isolated from entity to entity when reskinned.
    - Fixed that solar panel sprite scaling did not handle small and large sprite variants correctly.
Version: 0.1.1
Date: 2026-06-07
  Bugfixes:
    - Fixed startup crash due to several files that were required with wrong-case, when loading mods from zipped files is case-sensitive.
Version: 0.1.0
Date: 2026-06-07
  Features:
    - Initial release.