Resource Packs
In Phira, you can use custom resource packs. A resource pack can include note skins, particle effects, hit sounds, and more. You can find resource packs in test groups or community channels, or make your own. This page explains the file structure of a resource pack.
Structure
A resource pack is a single zip archive containing a config file named info.yml plus other resource files. Some files are required, while others are optional.
Resource Files
Required files:
click.pngandclick_mh.png: skins for Click notes;mhindicates multi-note;drag.pnganddrag_mh.png: skins for Drag notes;mhindicates multi-note;flick.pngandflick_mh.png: skins for Flick notes;mhindicates multi-note;hold.pngandhold_mh.png: skins for Hold notes;mhindicates multi-note;hit_fx.png: Hit effect image.
Optional (defaults used if missing):
click.ogg,drag.ogg,flick.ogg: hit sounds for the corresponding note types. The sample rate must be 44100 Hz, otherwiseprpr-rendermay crash during rendering;ending.ogg: Result screen background music.
Configuration
The config file uses YAML. Required fields are shown below, using the default resource pack as an example:
yml
name: Default
author: "Mivik & MisaLiu"
hitFx: [5, 6]
holdAtlas: [50, 50]
holdAtlasMH: [50, 110]name: resource pack name;author: resource pack author;description: resource pack description;hitFx: frame count of the hit effect image, in[width, height]. The hit effect stores multiple animation frames in a single image, so you need to specify how many frames there are horizontally and vertically. For example, in this imageⓘ, the horizontal and vertical frame counts are 5 and 6 respectively. The last row is hard to see, but it does exist. The example image uses a black background for clarity; when making a resource pack, you should use a transparent background instead;
holdAtlas: tail and head heights of the Hold texture. A Hold skin is a single image whose tail, body, and head are arranged from top to bottom. The two numbers inholdAtlasspecify the tail height and head height. For example, in this imageⓘ, both values are 50 pixels;
holdAtlasMH: similar to the previous item, but for multi-note Holds.
Optional fields:
hitFxDuration(float, default0.5): duration of the hit effect, in seconds;hitFxScale(float, default1.0): scale of the hit effect;hitFxRotate(bool, defaultfalse): whether the hit effect rotates with the note;hitFxTinted(bool, defaulttrue): whether the hit effect is tinted according to the judge line color;hideParticles(bool, defaultfalse): whether to hide the square particle effect on hit;holdKeepHead(bool, defaultfalse): whether to keep showing the Hold head after it reaches the line;holdRepeat(bool, defaultfalse): whether the middle part of the Hold uses repeated stretching. In this image setⓘ, from left to right you can see the Hold texture image, the Hold body with
holdRepeatdisabled, and the Hold body withholdRepeatenabled;holdCompact(bool, defaultfalse): whether to overlap the Hold head and tail with the Hold body by centering the anchor point. Using the same exampleⓘ, if
holdCompactis disabled, the Hold head and tail are separated from the middle section as shown in the left image. The two images on the right both show the effect withholdCompactenabled;colorPerfect(hex color, default0xe1ffec9f): Judge line color for AP (All Perfect);colorGood(hex color, default0xebb4e1ff): Judge line color for FC (Full Combo).