Lustomizer
World of Warcraft Addon for Retail 12.0.1

Overview
Lustomizer is a configurable alert addon for Bloodlust / Heroism effects and
experimental Power Infusion alerts.

It can play sounds or TTS, show image overlays, display animated text overlays,
and load additional sounds/images/fonts from optional media plugins.


Main Features
- Bloodlust / Heroism style alerts
- Configurable sound or TTS output
- Image overlays
- Animated text overlays with optional countdowns
- Power Infusion receiver alerts
- Power Infusion request alerts (experimental)
- Media plugin support for additional sounds, images, and fonts
- Animated image overlay support via sprite-sheet / stop-motion style textures


Important Notes
- Bloodlust-style debuffs are tracked strictly by spell ID
- Power Infusion features are still experimental
- Existing user settings are preserved unless media is no longer available
- If a selected sound or image is missing, Lustomizer falls back to a valid default


Slash Commands
- /lustomizer
- /lusto
- /lust
- /lust help

Useful Commands
- /lust test
- /lust testpi
- /lust testpireq
- /lust stop
- /lust image
- /lust text
- /lust pi
- /lust pitrack
- /lust pirequest


Bundled Public Media
This release is intended to ship with:
- Lustomizer
- Lustomizer_DefaultMedia

Private or guild-specific media can be moved into separate optional addons so
they do not need to be part of the public CurseForge release.


How Media Works
Lustomizer can load media from separate addon plugins through the shared media API.

This means you can:
- keep the public addon clean
- add your own sounds and images
- create guild-only or private media packs
- share optional media without changing the core addon


Option 1: Use Existing Shared Media Libraries
If another addon registers sounds or fonts through LibSharedMedia, Lustomizer can
pick them up automatically in the selection lists.

This is the easiest option when you already use a media addon that provides fonts
or sounds through LibSharedMedia.


Option 2: Create Your Own Lustomizer Media Plugin
Create a separate addon folder, for example:

MyLustomizerMedia/
  MyLustomizerMedia.toc
  MyLustomizerMedia.lua
  sounds/
  images/

Example TOC:

## Interface: 120001
## Title: My Lustomizer Media
## Notes: Extra media pack for Lustomizer.
## Dependencies: Lustomizer

MyLustomizerMedia.lua

Example Lua registration:

local mediaAPI = _G.LustomizerMediaAPI

if mediaAPI and type(mediaAPI.RegisterPlugin) == "function" then
    mediaAPI:RegisterPlugin("MyLustomizerMedia", {
        sounds = {
            {
                source = "custom",
                key = "mysound",
                name = "My Sound",
                file = "Interface\\AddOns\\MyLustomizerMedia\\sounds\\mysound.ogg",
            },
        },
        images = {
            {
                key = "myimage",
                name = "My Image",
                file = "Interface\\AddOns\\MyLustomizerMedia\\images\\myimage.tga",
            },
        },
        fonts = {
            {
                key = "myfont",
                name = "My Font",
                file = "Interface\\AddOns\\MyLustomizerMedia\\fonts\\myfont.ttf",
            },
        },
    })
end


Media Rules
- Sounds are identified by source + key
- Images are identified by key
- Fonts are identified by key
- Use unique keys to avoid collisions with other plugins
- Keep private media in a separate addon if it should not be publicly distributed


Animated Images
Lustomizer supports animated TGA sprite sheets.

Animated image metadata can be encoded in the filename, for example:

myimage.x8y4f32w192h192W1024H2048.tga

This tells Lustomizer how many rows, columns, and frames the sprite sheet has.

General format:

.xROWSyCOLUMNSfFRAMESwFRAMEWIDTHhFRAMEHEIGHTWFILEWIDTHHFILEHEIGHT.tga

Example:
- x8 = 8 rows
- y4 = 4 columns
- f32 = 32 total frames
- w192 = frame width 192
- h192 = frame height 192
- W1024 = file width 1024
- H2048 = file height 2048


Recommended File Types
- Sounds: .ogg
- Static images: .tga
- Animated sprite sheets: .tga
- Fonts: .ttf


Troubleshooting
- If a sound or image does not appear, check that the path is correct
- If a media plugin does not load, make sure it has:
  - a valid .toc
  - ## Dependencies: Lustomizer
  - a Lua file that calls LustomizerMediaAPI:RegisterPlugin(...)
- If a selected medium disappears because a plugin was removed, Lustomizer will
  automatically fall back to a valid default


Credits
Thanks to:
- the authors and maintainers of the libraries used by this addon
- the WeakAuras team
- Maks and fratzi on Wago for the original Pedro Lust and Shia LaBeouf inspiration
- the testers from Teroos Meisterverband
- especially Telenda-Proudmoore for testing the Power Infusion functionality
