
Hakuen Studio Secret/Passive Effects for RPG Maker MZ
A downloadable RPG Maker Plugin
Introduction
By default, skills and items apply their effects to the targets selected by the item or skill scope in the database. These effects can recover HP or MP, add states, remove states, add buffs, remove debuffs, and more. Sometimes, you may want a skill to hit one target while one of its effects is applied to a different target. For example, a fireball can damage an enemy while also giving a buff to the user.
With this plugin, you can choose one or multiple targets for each item or skill effect. These effects are applied in a secret/passive way, without being shown in the battle log.
Features
- Skills and items can apply his effects to custom/multiple targets in battle!
- Secret/Passive effects do not show on the battle log window!
- Only works on Battle Scene.
- Supports two note tag formats: compact and block.
- The block format can use a condition for each Secret Effect.
- Supports predefined target types for alive/dead members, friends, opponents, and the action user.
How to use
First, create the effects you want to use as a secret/passive way on the skill or item you want:

After creating the effects, add a note tag to the skill or item to tell the plugin which effect indexes must be applied as Secret Effects.
- <SecretEffects: EffectIndex:TargetType:TargetId>
Effect Index
Effect indexes start at 0. The first effect in the Effects list is index 0, the second effect is index 1, and so on.
For example, if the first effect in the list is Add State, then Effect Index 0 refers to that effect.
Compact note tag format
Use this format for simple Secret Effects without conditions:
- <SecretEffects:EffectIndex:TargetType:TargetId>
Examples:
- <SecretEffects:0:PARTY:0,1>
- <SecretEffects:1:USER>
In the compact format, TargetId is a comma-separated list. It may contain numbers, formulas, or \v[ID]. The plugin wraps this value inside an array automatically.
For example, this applies effect 0 to party battle members 0 and 1:
- <SecretEffects:0:PARTY:0,1>

If you want to make more than one Secret Effect on the same item or skill using the compact format, separate each entry with # inside the same note tag:
- <SecretEffects:0:PARTY:0,1 # 2:ENEMY:1>
The example above turns effect 0 and effect 2 into Secret Effects. Effect 0 targets party battle members by index, and effect 2 targets enemies by enemy database ID.

The compact format does not support custom conditions. Use the block format when you need a condition.
Block note tag format
Use this format when you need a formula-based TargetId or a condition:

<SecretEffects> Index: 0 TargetType: PARTY TargetId: return [0, 1] Condition: return true </SecretEffects>
- Index is required.
- TargetType is required.
- TargetId is required only for target types that need IDs or indexes. In the block format, TargetId is always a formula body and must return an array. It is ignored for target types that do not need IDs, such as USER, ALLPARTY, ALLTROOP, ALIVEPARTY, DEADPARTY, ALIVETROOP, DEADTROOP, FRIENDS, and OPPONENTS.
- Condition is optional. If omitted, the condition will always be true.
Multiple Secret Effects with block note tags
To configure multiple Secret Effects with the block format, repeat the whole block:
<SecretEffects> Index: 0 TargetType: USER </SecretEffects>
<SecretEffects> Index: 1 TargetType: ALIVEPARTY Condition: return this.subject().hpRate() < 0.5 </SecretEffects>
<SecretEffects> Index: 1 TargetType: TROOP TargetId: return [0,1] Condition: return this.subject().hpRate() < 0.5 </SecretEffects>
<SecretEffects> Index: 2 TargetType: CUSTOM TargetId: return $gameTroop.members().filter(enemy => enemy.isAlive()) Condition: return $gameSwitches.value(10) </SecretEffects>
TargetType
TargetType tells the plugin how it must read the TargetId and which battlers can receive the effect.
- ACTOR → TargetId must return actor database IDs. Only battle party members are checked.
- ENEMY → TargetId must return enemy database IDs from the current troop.
- PARTY → TargetId must return party battle member indexes.
- TROOP → TargetId must return troop member indexes.
- ALLPARTY → Targets all party battle members. TargetId is ignored.
- ALLTROOP → Targets all troop members. TargetId is ignored.
- ALIVEPARTY → Targets alive party battle members. TargetId is ignored.
- DEADPARTY → Targets dead party battle members. TargetId is ignored.
- ALIVETROOP → Targets alive troop members. TargetId is ignored.
- DEADTROOP → Targets dead troop members. TargetId is ignored.
- FRIENDS → Targets the action user's unit members. If the user is an actor, this means the party. If the user is an enemy, this means the troop. TargetId is ignored.
- OPPONENTS → Targets the action user's opponent unit members. TargetId is ignored.
- USER → Targets the battler using the skill or item. TargetId is ignored.
- CUSTOM → TargetId must return an array of battlers.
TargetId
TargetId works according to the TargetType.
In the compact format, TargetId is a comma-separated list. The plugin wraps it inside an array automatically.
- <SecretEffects:0:PARTY:0,1>
- <SecretEffects:1:ACTOR:\v[3]>
- <SecretEffects:2:CUSTOM:$gameParty.battleMembers()[0], $gameTroop.members()[0]>
In the block format, TargetId must be a formula body and must return an array.
- TargetId: return [0, 1]
- TargetId: return [$gameVariables.value(10), $gameVariables.value(11)]
- TargetId: return $gameParty.battleMembers().map(member => member.index())
When TargetType is CUSTOM, the returned array must contain battlers instead of numbers:
- TargetType: CUSTOM
- TargetId: return $gameParty.battleMembers().filter(member => member.hpRate() < 0.5)
Condition
Condition is available only in the block note tag format.
It is a JavaScript function body that runs in the Game_Action context. It must return true or false.
If Condition returns true, the Secret Effect is applied. If it returns false, the Secret Effect is skipped.
If Condition is omitted, it acts as return true.
Examples:
- Condition: return true
- Condition: return this.subject().hpRate() < 0.5
- Condition: return $gameSwitches.value(10)
- Condition: return $gameVariables.value(5) >= 3
Useful script calls
Formulas used by TargetId and Condition run in the Game_Action context. This means you can use this to access the current action.
- this.subject() → Returns the battler using the skill or item.
- this.friendsUnit().members() → Returns the user's unit members.
- this.opponentsUnit().members() → Returns the user's opponent unit members.
- this.item() → Returns the skill or item being used.
- $gameParty.battleMembers()[index] → Replace index with a number starting from 0 to get a party battle member.
- $gameTroop.members()[index] → Replace index with a number starting from 0 to get an enemy from the troop.
- $gameVariables.value(id) → Returns the value of a game variable.
- $gameSwitches.value(id) → Returns the value of a game switch.
Observations
- If the plugin cannot find a target, it will skip that target.
- Secret Effects are not shown on the battle log when applied.
- Secret Effects only work during battle.
- Common Event effects will work the same as the RPG Maker MZ default behavior. There is no point in using them as secret effects.
- If the same effect index is configured more than once, the last parsed Secret Effect for that index will be used.
Help file | Terms of use | Sample Project
| Status | Released |
| Category | Tool |
| Rating | Rated 5.0 out of 5 stars (1 total ratings) |
| Author | Hakuen Studio |
| Made with | RPG Maker |
| Tags | hakuen-studio, hidden-effect, mz, No AI, plugins, RPG Maker, RPG Maker MZ, rpg-maker-plugin, secret-effect, tools |
| Average session | A few seconds |
| Languages | English |
| Content | No generative AI was used |
Purchase
In order to download this RPG Maker Plugin you must purchase it at or above the minimum price of $8 USD. You will get access to the following files:
Development log
- Secret Effects 1.1.1 - Bug fixesJun 24, 2026
- Secret Effects 1.1.0 - New features and bug fixes!Jun 24, 2026
- Version 1.0.0 - Plugin release!Aug 25, 2023


