Devlog – ABI_ShinySpawn v2.0 Making Shinies Feel… Shiny (Randomization + Better Integration)


In this update, ABI_ShinySpawn grew up from “works great, but a bit predictable” into a proper, production-ready shiny system that feels fair, exciting, and flexible.

🎲 1. Randomized Shiny Selection (No More “Always the First One”)

Old behavior:

  • When multiple enemies in a troop had <Shiny: x, y>, the plugin checked them in a fixed order (left-to-right in the troop).

  • With 100% odds, the same slot would always become shiny (e.g., Slime A was always the shiny, Slime B never was).

New behavior in v2.0:

  • On battle setup, the plugin now:

    1. Takes the troop member list.

    2. Makes a copy.

    3. Shuffles that list using a proper Fisher–Yates shuffle.

    4. Decides shinies based on this randomized order.

Result:

  • With two Green Slimes and <Shiny: 511, 100%>, only one will be shiny per battle (same as before)…
    but which one it is changes from battle to battle.

  • Even at lower odds, shiny choices feel more natural and less “scripted.”

🎯 2. One Shiny Per Battle… Unless You Say Otherwise

The original design intention was “one shiny per battle” to keep encounters special. That’s still the default:

  • The plugin picks the first eligible enemy (in the shuffled order) whose roll succeeds.

  • Once one shiny is chosen, later rolls are skipped, so you don’t end up with a full field of shinies by accident.

But for testing or special events, there’s now:

  • Force Shiny Switch ID (plugin parameter)

If that switch is ON:

  • The one-shiny limit is ignored.

  • Every enemy with <Shiny: x, y> is evaluated normally.

  • You can do “all-shiny” showcase battles or test graphics without editing the database.

🧠 3. Smarter Odds Parsing (Multiple Styles Supported)

The plugin’s odds system was cleaned up and clarified. It now supports:

✅ Integer odds (1 in y)

<Shiny: 511, 128>   <!-- 1 in 128 chance --> <Shiny: 511, 1>     <!-- 1 in 1, always shiny --> 

✅ Fraction odds (a in b)

<Shiny: 511, 1:4096> 

✅ Percentage odds

<Shiny: 511, 3%>    <!-- 3% chance --> <Shiny: 511, 0.5%>  <!-- 0.5% chance --> <Shiny: 511, 100%>  <!-- Always shiny --> 

Clarification:

  • <Shiny: 511, 100> = 1 in 100 chance (1%), not 100%.
    Use:

    • 1

    • 1:1

    • 100%
      for guaranteed shinies.

If odds parse to 0 or an invalid format, the tag is quietly ignored and logged in Debug Mode.

🪧 4. ShinyFound Switch for Battle Events & Animations

To make the plugin play nicely with battle events and other systems, there’s a new parameter:

  • Shiny Found Switch ID

Behavior:

  • At the start of each battle, that switch is set to OFF.

  • If at least one enemy becomes shiny, the switch is set to ON.

  • You can now:

    • Use Turn 0 / Span: Battle battle events

    • Condition: Switch [ShinyFound] == ON

    • Show animations, messages, or do anything else you want.

This switch is also what makes the new companion plugin ABI_EnemySpawnAnimation feel so powerful when combined with shinies.

💬 5. Cleaner Message Behavior

Shiny messages have been polished:

  • The message string is configurable:
    A shiny %1 has appeared!
    (%1 = enemy name)

  • If multiple shinies share the same name (e.g., two Shiny Green Slimes), the message is only shown once per unique name, not spammed.

  • Messages are injected after battle starts, once sprites and UI are ready.

You can toggle the message system on/off in the plugin parameters.

🧪 6. Debug Mode for Tuning & Testing

Debug Mode has been kept and enhanced to help you tune odds and confirm behavior.

When DebugMode = ON, the console will show:

  • Which enemy’s <Shiny: x, y> tag was parsed

  • How odds were interpreted (rawOddschance)

  • The randomized troop order used for shiny selection

  • Each roll, compared against the calculated chance

  • Which enemy actually became shiny

  • When the ShinyFound switch is flipped

Perfect for balancing rare encounter rates or making sure your tags are set up correctly.

✅ 7. Compatibility & Intended Use

This version is built to be:

  • Friendly with VisuStella Battle Core

  • Friendly with event battles and random encounters

  • Friendly with spawn animation plugins and battle events

Recommended workflow:

  • Base enemy (e.g., Green Slime) gets:

    <Shiny: 511, 1:512> 
    
  • Shiny enemy (e.g., Shiny Green Slime) is a separate database entry with:

    • Its own graphic

    • Its own stats/drops

    • Optional <SpawnAnimation: x> (via companion plugin)

  • Optional:

    • Use ShinyFoundSwitchId to trigger special events or visuals.

🧾 Summary of Changes in v2.0

  • ✅ Randomized shiny target selection (no more fixed order)

  • ✅ Stronger, clearer odds parsing (integer, fraction, percentage)

  • ✅ ShinyFound switch integration with clean ON/OFF behavior

  • ✅ One-shiny-per-battle logic preserved, with an override switch for “force all shiny”

  • ✅ Debug logs expanded and clarified

  • ✅ Help text and parameters updated and fully documented

If you’re updating from an older version:

  1. Replace your old ABI_ShinySpawn.js with v2.0.

  2. Double-check your plugin parameters in Plugin Manager (especially ShinyFoundSwitchId and ForceShinySwitchId).

  3. Confirm your notetags—no syntax changes, just more flexibility and less predictability in who becomes shiny.

Files

ABI_ShinySpawn.js 14 kB
24 days ago

Get ABI_ShinySpawn v1.3 — Shiny Monster System for RPG Maker MZ

Leave a comment

Log in with itch.io to leave a comment.