Repository navigation
Skin System English
Ez2Lazer provides an independent skin system separate from the original, focusing on Mania scene performance and highly customizable HUD resources.
- More features can be explored in-game. These features are subject to continuous improvement. This page only describes some of the key features.
- Built-in EzPro Skin: The most comprehensive skin foundation with high customization capabilities, maintaining performance while offering rich extended features.
- Built-in SBI Skin: (Pure code-generated graphics) Power Bond skin, a solid-color skin suitable for top-tier minimalist players. Everything pursues simplicity and high performance, retaining only basic corner radius adjustment and note size adjustment capabilities.
- Built-in Ez2 Skin: (Pure code-generated graphics) The original Ez2Lazer built-in skin.
- All three built-in skins feature unique event subscription mechanisms that effectively reduce performance pressure in high KPS scenarios (e.g., 10k full key sound, Full LN charts, at peak 80 KPS, frame drop situations can be reduced by more than 50%).
- When entering the skin editor, the scene maintains the original display aspect ratio scaling for better layout organization.
- Opening the official skin editor from the main menu picks a preview beatmap for the active ruleset, so the intro does not switch the ruleset to osu!.
- Shared HUD settings include position sliders and a uniform scale slider (about 0.01–10).
- Added deserialization protection during skin loading to reduce failure prompts after version changes.
- The left picker writes the current skin config by component type: Note, Stage, Panel, EarlyLate, judgement, combo, ColumnLight.
- EarlyLate, judgement, and combo write that HUD widget's theme. They do not change the global GameTheme. The global theme remains the apply-to-all entry.
- Custom dynamic dropdown: Dynamically refreshes dropdown options based on resource pack content.
- Dedicated/global judgement line position, lane width, special lane width multiplier, etc.
- Throw-skin tail: enable the pseudo tail first, then pick a distance step (UI 0–8,
(step / 32) × BPM). 0 is off. The choice is locked when entering play. With dynamic throw off, the whole play uses the main BPM beat length; with it on, the distance follows the live beat length.
- Provides better custom skin color mechanisms, used in conjunction with column types.
- Column types: Configure classification for each column based on different KeyModes. For example, Type S columns are treated as special columns and affected by the special lane width multiplier.
- Background color blur and darkening for better background adaptation.
- Panel skew transformation for skewed track effects (usage results are not optimal yet; detailed tuning needed in the future).
EzResources Library — Custom Features
Skin resource pack path is located in the
EzResourcesfolder within the data directory. If you cannot find theEzResourcesfolder, refer to Installation Guide (English)
- Custom notes, judgement images, the stage plate, a Panel background, and column key lights.
-
EzResources/notefor notes. At minimum, one white note such asEzResources/note/air/whitenote/000.png. EzPro builds the long note from it, then applies column colours. -
EzResources/Stage/{stage}/is one foreground set. Folders directly underStage/can be renamed; nested folder and file names must match a built-in set. The list refreshes when settings open. -
EzResources/Panel/{name}.pngis one image for the whole stage. Only png is listed. When selected, it scales to the total column width, sits with its bottom on the judgement line, and draws under column blur. Column blur above 0 blurs the beatmap background and this image together; 0 draws it sharp. The colour setting includes alpha and is multiplied onto the image before blur. Default is opaque white. None draws nothing. -
EzResources/ColumnLight/{set}/is the key light. The oldColumn/path is no longer used. Lookup stays inside the selected subfolder: the column type first, then S, E, P, B, A, thenColumnLight. If none of those exist, nothing is shown. Built-in art is used only whenEzColumnLightstill has no match. -
EzResources/GameTheme/{theme}/holds judgement, combo, and Early/Late art. Theme names are a built-in enum. A new folder does not add a theme. Frame lookup is below.
With no frame template, lookup stops at the first hit. Notes, stage sequences, column lights, judgement, combo, and the full-combo clip all use this order.
- Bare frames in a subdirectory:
{name}/000(three digits), then{name}/0(one digit). - Hyphen frames inside that subdirectory:
{name}-, then{name}_, three digits before one digit. - Same-level hyphen frames in the parent directory:
{name}-, then{name}_, with the same digit order. - One still image under the resource name. For the same stem, png wins over jpg, jpeg, then gif. A gif keeps its extension, because the texture loader does not probe gif on its own.
Frame indices accept {0} and {000} only. {00} is not a frame index. Separators are - and _ only.
A non-empty frame template skips the four steps and looks up that one pattern. On a miss it takes one still image by resource name. A / before the placeholder is a subdirectory, so {result}/{000} only loads the sequence starting at name/000.
Judgement art has one name step before that: the current HitMode resource name is probed first, then the fallback name.
The list is read from disk when that settings section opens. A folder created while the game is running shows up after the section is opened again.
| List | Path | Can you add or remove entries? |
|---|---|---|
| Note Set | One folder level under EzResources/note/
|
Yes. The folder name is the entry. |
| Stage Set | One folder level under EzResources/Stage/
|
Yes, including renames. Files inside the set must still match a built-in set. |
| Panel | EzResources/Panel/*.png |
Yes. Only png is listed. The file name without the extension is the entry. |
| Column Set | One folder level under EzResources/ColumnLight/
|
Yes. |
| Modify path | Every subdirectory under EzResources/Modify/
|
Yes. Read when EzHUDSpritePlus settings open. |
| Modify sprite name | Images in the current Modify directory | Yes. Reread when the path or frame template changes. |
Lists that do not grow from a new folder:
-
GameTheme / judgement, combo, and EarlyLate fonts: the dropdown is a built-in enum. A folder under
EzResources/GameTheme/whose name the program does not already know does not become a theme. The left picker only shows enum names that also exist on disk. - Column width and the special-column factor also size the panel columns, the key counter, and the timing columns.
- For Ez Pro-based custom skins, see Video Introduction
Each stage set has EzResources/Stage/{stage}/Stage/layout.json. Without that file, or without meter, the stage plate is not drawn.
Coordinates are source pixels with Y up. Both X and Y are flipped when drawn.
| Field | Role |
|---|---|
body / back / grooveLight / overObject / character
|
Fixed slots. path is relative to Stage/{stage}/Stage. Omit it to keep that slot's original file. |
meter |
Health gauge. Includes gauge, bright, and mask, in the same coordinates as the body. |
parts |
Extra images outside the fixed slots. path is required. Names are not branched by skin. |
score / combo
|
Score and max combo printed on the stage (not the HUD live combo). Each has its own enabled. |
score / combo path is relative to Stage/{stage}. A shared glyph set uses number; split sets use number/score and number/combo. Glyphs are resolved by the body name. The units digit shares the body's coordinate space; the next digit is at x + spacing.
Key-count folders: use the folder that matches the current key count. If it is missing, search the same odd/even group first (down to 4K, then upward), and only then the other parity. 7K therefore falls back to 5K before 6K.
A single-frame GrooveLight or gauge light breathes in alpha. Multi-frame art still plays as a sequence.
- For example,
EzHUDSpritePlusallows custom sprite sheets with customizable dynamic frame filename templates, BPM-synchronized animation speed, etc. - This is just an example. Please check components starting with EzHUD in-game for more widgets. More customizable components will be gradually added in the future.
README:Scripted Skin Documentation Index
System Description and Naming/Loading Rules (Required Reading): Scripted Skin Overview Documentation
Interface and key class API reference: Scripted Skin API Documentation
Getting started and :Scripted Skin User Guide
-
Settings -> SkinandSkin Editor - Resource directories under
EzResourcespath (named according to component conventions)
- Some features are skin-specific. Pay attention to setting item prefixes or hover over components to view tooltip information for more details.
- Legacy imported skins have less extensibility compared to Ez Pro. Consider using Ez Pro as a base to create your own customized version.
- Ez Pro-based custom skin features are subject to modification and enhancement at any time. Refer to actual in-game content.
- If you see a "Failed to load skin configuration" prompt right after entering the game, it means your local skin configuration is outdated. You can ignore it and directly enter the skin editor to preview and save once (this usually resolves the issue).