Portrait Rework Project

If you liked this item, please rate it up on Steam Workshop page.

Author: Bryan

Last revision: 8 Jan at 00:40 UTC

File size: 1.84 MB

On Steam Workshop

Description:

Are you tired of 20-year-olds who look like they’re on their fifth divorce? And 10-year-olds who look like they should already be in elder care? Yeah. Me too.

Now, I know what some of you are saying, "Portrait Specification Framework already exists! And it’s great!" And to you I answer back, "Why use a perfectly fine wheel when we can reinvent the triangle?"


Introducing: Portrait Rework Project (PRP)

PRP allows you to customize how Elin assigns portraits to NPCs, by letting you define criteria that an NPC must meet to be assigned specific portraits. These are:
• title
• race
• sex
• age

PRP ships with a minimal configuration that makes vanilla portraits a bit more sensible, but it is NOT a magic ‘fix-all’ by itself. PRP is more like a framework, and shines when you add your own portraits and give them custom rules.

To make this process easier, PRP has a companion tool here: Elin Portrait Tool[anime-armada.neocities.org]

With it you can:
1) Drag & drop images
2) Assign tags (race / sex / title / age)
3) Export a ready-to-use .zip containing your images + rules

Warning

The tool runs entirely client-side, whether online or offline version, so do not move/rename/edit the images (or their folder paths) until you export. Otherwise you will end up with missing/corrupted data.


Defining Portrait Rules

PRP reads rule files named: portraitReworkRules.cfg
(From here on our referred to as "rules.cfg")

Key Behavior:
• Multiple mods can include their own rules.cfg
• PRP merges all rules automatically
• If rules conflict, the last loaded mod wins

PRP supports two methods for defining rules;

Method A (recommended): rules.cfg

You define portraits in a rules.cfg
In this method, filenames can be anything; the rules decide everything.

This is my personal preferred method, and is most easily done by using the companion tool.

Method B: "loose files" (filename as encoded rules)

If you don’t want to ship a rules.cfg, PRP can parse rules directly from filenames.

Example:
banker-mifu-female-adult-1.png

Format:
title-race-sex-age
Any missing segment is treated as Any.

Important: Filenames only matter when you’re not defining a portrait’s rules within rules.cfg.


Filename Formatting (only for Method B)

PRP supports:
New format: hyphens between sections
Legacy format: underscores _ between sections

Why the new format exists:
Titles can contain underscores (example: flower_girl), which can make legacy filenames hard to parse.

The new format also supports:
Comma-separated options inside a section
With arbitrary amounts of "–" separators between sections

Example of a comma-seperated filename:
flower_girl,banker,citizen-mifu,nefu-female-young,adult-1.png

Note that extremely long filenames might hit the Windows path limits.


Load Order & Conflicts

PRP automatically merges all available rules from active mods, and resolves potential conflicts on the basis that the last loaded mod wins.

Conflict example (rules.cfg vs rules.cfg)

Mod A: portrait-1 = male only
Mod B: portrait-1 = female only
• Whichever mod loads last will control portrait-1.

Conflict example (rules.cfg vs loose file)

Mod A (rules.cfg): defines mifu-female-1 for all mifu, regardless of sex
Mod B (loose file): has a loose file named mifu-female-1.png

If Mod A loads last, Mod A’s rules apply as defined in its rules.cfg.
If Mod B loads last, Mod B wins, and PRP uses the filename as the rule (because mod b was using loose files)

TL;DR

Just remember that the last loaded mod will win any conflicts, so sort your load order based on which mod’s Portraits you’d generally prefer to win in case of a conflict.


Unique NPCs & Special Portraits

PRP intentionally does not touch unique NPCs such as Fiama and Loytel.

It does this by automatically excluding any NPC whose ID or portrait contains "UN_".

Additionally, any portrait (not NPC!) starting with "special_" is skipped
Elin uses "special_" to designate portraits which players can use, and NPCs cannot.

However, some NPCs use "special_" portraits exclusively (like the little girls), and so PRP does allow you to affect them, but only if you explicitly match their title. For example, the little girls’s title is shojo


Extra: Cooldown System

PRP uses a "cooldown" system in an attempt to reduce repetitive portraits.

How it works:
• After a portrait is used, it goes on cooldown for a random 5–10 turns.
• Cooldown is a soft lock: PRP will prefer portraits not on cooldown.
• If every valid portrait is on cooldown, PRP will pick the one with the lowest cooldown.
• When a portrait could have been used but was skipped, its cooldown decreases by 1.


Workshop Uploads

PRP does not require that a mod which ships a rules.cfg be the one that contains the actual portraits.

This means:
• You can upload rule packs without redistributing other’s art
• You could, in theory, create a single rule.cfg for every single existing portrait mod. PRP will quietly ignore rules for portraits that aren’t installed.


Save compatibility

PRP does not automatically re-roll portraits in an existing save. Older versions did, but it was prone to issues.

Instead, PRP now adds a dialogue option: Regenerate Portrait w/PRP
This re-roll bypasses cooldown mechanics entirely.


Example Pack

I have a small example pack that includes portraits + a pre-made rules.cfg:
Example Pack

The example pack uses rules.cfg (Method A).

NSFW Warning: The example pack is NSFW. PRP itself is completely SFW.