Skip to content

Commit 1f74406

Browse files
committed
Miku: reworked Tainted Miku's design & note system
1 parent 99d156a commit 1f74406

46 files changed

Lines changed: 688 additions & 289 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,62 @@
11
# Hatsune Miku (+Tainted)
22

3-
[![Build](https://github.com/vulpya/isaac-miku/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/vulpya/isaac-miku/actions/workflows/build.yml) ![Isaac](https://img.shields.io/badge/Game-The%20Binding%20of%20Isaac-darkred) ![Character Mod](https://img.shields.io/badge/Type-Character%20Mod-blue) ![Miku](https://img.shields.io/badge/Vocaloid-Hatsune%20Miku-39C5BB)
3+
[![Build](https://github.com/vulpya/isaac-miku/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/vulpya/isaac-miku/actions/workflows/build.yml)
44

5-
A standalone character mod for The Binding of Isaac featuring Hatsune Miku and her tainted counterpart.
5+
A character mod for **The Binding of Isaac: Repentance** featuring Hatsune Miku and her Tainted counterpart.
66

7-
## Features
7+
## Miku
88

9-
### Miku
9+
Miku attacks by singing, firing musical **Notes** at her enemies.
1010

11-
Attacks with her Voice in form of Note Tears.
12-
Notes may charm enemies.
11+
### Charming
1312

14-
With **Birthright**, charmed enemies may become Fans.
13+
Miku's notes have a chance to **charm enemies**, causing them to fight alongside her temporarily.
1514

16-
Use her **Microphone** to inspire your audience!
15+
With **Birthright**, charmed enemies can become permanent **Fans**, joining Miku as allies and fighting alongside her.
1716

18-
### Tainted Miku
17+
### Microphone
1918

20-
**Tainted Miku is Work in Progress and not really balanced / fletched out!**
19+
Miku starts with her **Microphone**, which can be used to inspire her audience and support her unique playstyle.
2120

22-
Due to losing her voice, she starts with only Glitch Notes.
21+
## Tainted Miku
2322

24-
Enemies may drop **Lost Notes** when slain.
25-
Each **Lost Note** grants a **different effect**.
23+
> **Work in progress**
2624
27-
Use the **Broken Microphone** to switch melodies.
25+
Tainted Miku's voice has been broken, leaving her unable to produce ordinary Notes. Instead, she attacks with **Bloody Notes**.
2826

29-
With **Birthright** she loses even more control of her broken voice, firing multiple Lost Notes at onces.
27+
### Lost Notes
28+
29+
Enemies can drop one of **8 unique Lost Notes**.
30+
31+
Each **Lost Note** changes the properties of Miku's tears, giving her a different way to fight. Collecting **Lost Notes** temporarily repairs her broken voice and builds her moveset throughout the basement.
32+
33+
### Special Synergy Notes
34+
35+
Certain items are transformed into **Special Synergy Notes**, granting unique effects based on the item they replace.
36+
37+
### Birthright
38+
39+
With **Birthright**, Tainted Miku further distorts her fractured melody, causing multiple **Lost Note**
40+
effects to trigger with each shot.
3041

3142
## Mod Compatibility
3243

3344
### External Item Descriptions Support
3445

3546
This mod includes support for External Item Descriptions.
3647

37-
For missing or wrong descriptions, please open a new Issue.
48+
For missing or incorrect descriptions, please open a new Issue.
49+
50+
### Mod Config Menu Support
51+
52+
This mod includes support for Mod Config Menu.
53+
54+
MCM options include:
3855

39-
## Roadmap
56+
- **Show Note Counter** — Show or hide the counter of the selected Note above Tainted Miku.
57+
- **Note Drop Chance** — Configure the drop chance of Lost Notes from 0% to 100%.
4058

41-
- Finish Tainted Miku.
42-
- Sound Effects.
43-
- More Miku-themed items.
44-
- Improved sprites and animations.
45-
- Better visual effects.
59+
For MCM-related issues, please open a new Issue.
4660

4761
## Disclaimer
4862

cspell.config.jsonc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,14 @@
3030
"mod/resources/rooms/**",
3131
],
3232
"words": [
33+
"Vulpya",
3334
"Arexz",
3435
"Charmable",
3536
"Fearable",
3637
"Hatsune",
3738
"Miku",
3839
"mikub",
3940
"Vocaloid",
41+
"moveset",
4042
],
4143
}

mod/content/costumes2.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
<costumes anm2root="gfx/characters/">
22
<costume id="1000" anm2path="virtual_idol.anm2" type="passive" priority="0" />
3+
<costume id="1001" anm2path="pink_hair.anm2" type="passive" priority="101" />
34
<costume anm2path="Character_MikuHead.anm2" type="none" priority="100" />
5+
<costume anm2path="Character_MikuHead_b.anm2" type="none" priority="100" />
46
</costumes>

mod/content/entities2.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
<entity anm2path="tears/musical_note.anm2" baseHP="0" boss="0" champion="0" collisionDamage="0" collisionMass="8" collisionRadius="7" friction="1" id="2" name="Musical Note" numGridCollisionPoints="8" shadowSize="8" stageHP="0" variant="8000">
44
<gibs amount="0" blood="0" bone="0" eye="0" gut="0" large="0" />
55
</entity>
6-
<entity anm2path="tears/glitch_note.anm2" baseHP="0" boss="0" champion="0" collisionDamage="0" collisionMass="8" collisionRadius="7" friction="1" id="2" name="Glitch Note" numGridCollisionPoints="8" shadowSize="8" stageHP="0" variant="8001">
6+
<entity anm2path="tears/blood_note.anm2" baseHP="0" boss="0" champion="0" collisionDamage="0" collisionMass="8" collisionRadius="7" friction="1" id="2" name="Blood Note" numGridCollisionPoints="8" shadowSize="8" stageHP="0" variant="8001">
7+
<gibs amount="0" blood="0" bone="0" eye="0" gut="0" large="0" />
8+
</entity>
9+
<entity anm2path="tears/lost_note.anm2" baseHP="0" boss="0" champion="0" collisionDamage="0" collisionMass="8" collisionRadius="7" friction="1" id="2" name="Lost Note" numGridCollisionPoints="8" shadowSize="8" stageHP="0" variant="8002">
710
<gibs amount="0" blood="0" bone="0" eye="0" gut="0" large="0" />
811
</entity>
912
<!-- PICKUPS -->
-2 Bytes
Loading

mod/content/items.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<passive id="1000" gfx="virtual_idol.png" name="Virtual Idol" description="Idol Charm" quality="3" />
33
<passive gfx="virtual_idol.png" name="Encore!" description="Another One!" quality="3" />
44
<passive gfx="brimstone_note.png" name="Brimstone Note" description="Replacement Item for Brimstone" quality="4" />
5-
<passive gfx="rubber_note.png" name="Rubber Note" description="Replacement Item for Eraser" quality="4" />
5+
<passive id="1001" gfx="rubber_note.png" name="Rubber Note" description="Replacement Item for Eraser" quality="4" />
66
<passive gfx="dr_fetus_note.png" name="Dr. Fetus Note" description="Replacement Item for Dr. Fetus" quality="4" />
77
<active gfx="microphone.png" name="Microphone" description="Sing your heart out" quality="4" maxcharges="8" chargetype="normal" />
88
<active gfx="microphone.png" name="Broken Voice" description="Switch between silence and voices" quality="4" maxcharges="60" chargetype="timed" />

mod/content/players.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<players root="gfx/characters/costumes/" portraitroot="gfx/ui/stage/" nameimageroot="gfx/ui/boss/">
2-
<player name="Miku" skin="Character_Miku.png" nameimage="PlayerName_Miku.png" hp="6" portrait="PlayerPortrait_Miku.png" skinColor="-1" costume="104" costumeSuffix="miku" birthright="Lucky idol" />
3-
<player name="Miku" skin="Character_Miku_b.png" nameimage="PlayerName_Miku.png" hp="2" armor="4" keys="1" portrait="PlayerPortrait_Miku.png" skinColor="-1" bSkinParent="Miku" costume="104" costumeSuffix="mikub" birthright="Broken Encore" />
2+
<player name="Miku" skin="Character_Miku.png" nameimage="PlayerName_Miku.png" hp="6" portrait="PlayerPortrait_Miku.png" skinColor="-1" costumeSuffix="miku" birthright="Lucky idol" />
3+
<player name="Miku" skin="Character_Miku_b.png" nameimage="PlayerName_Miku.png" hp="2" armor="4" keys="1" portrait="PlayerPortrait_Miku_b.png" skinColor="-1" bSkinParent="Miku" costume="104" costumeSuffix="mikub" birthright="Broken Encore" />
44
</players>
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<AnimatedActor>
2+
<Info CreatedBy="Vulpya" CreatedOn="18/08/2026 01:44:52" Version="153" Fps="30"/>
3+
<Content>
4+
<Spritesheets>
5+
<Spritesheet Path="costumes\Character_MikuHead_b.png" Id="0"/>
6+
</Spritesheets>
7+
<Layers>
8+
<Layer Name="head0" Id="0" SpritesheetId="0"/>
9+
</Layers>
10+
<Nulls/>
11+
<Events/>
12+
</Content>
13+
<Animations DefaultAnimation="HeadDown">
14+
<Animation Name="HeadDown" FrameNum="4" Loop="false">
15+
<RootAnimation>
16+
<Frame XPosition="0" YPosition="0" XScale="100" YScale="100" Delay="4" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
17+
</RootAnimation>
18+
<LayerAnimations>
19+
<LayerAnimation LayerId="0" Visible="true">
20+
<Frame XPosition="0" YPosition="-8" XPivot="32" YPivot="44" XCrop="0" YCrop="0" Width="64" Height="64" XScale="100" YScale="100" Delay="2" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
21+
<Frame XPosition="0" YPosition="-8" XPivot="32" YPivot="44" XCrop="64" YCrop="0" Width="64" Height="64" XScale="100" YScale="100" Delay="2" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
22+
</LayerAnimation>
23+
</LayerAnimations>
24+
<NullAnimations/>
25+
<Triggers/>
26+
</Animation>
27+
<Animation Name="HeadRight" FrameNum="4" Loop="false">
28+
<RootAnimation>
29+
<Frame XPosition="0" YPosition="0" XScale="100" YScale="100" Delay="4" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
30+
</RootAnimation>
31+
<LayerAnimations>
32+
<LayerAnimation LayerId="0" Visible="true">
33+
<Frame XPosition="1" YPosition="-8" XPivot="32" YPivot="44" XCrop="128" YCrop="0" Width="64" Height="64" XScale="100" YScale="100" Delay="2" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
34+
<Frame XPosition="1" YPosition="-8" XPivot="32" YPivot="44" XCrop="192" YCrop="0" Width="64" Height="64" XScale="100" YScale="100" Delay="2" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
35+
</LayerAnimation>
36+
</LayerAnimations>
37+
<NullAnimations/>
38+
<Triggers/>
39+
</Animation>
40+
<Animation Name="HeadUp" FrameNum="4" Loop="false">
41+
<RootAnimation>
42+
<Frame XPosition="0" YPosition="0" XScale="100" YScale="100" Delay="4" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
43+
</RootAnimation>
44+
<LayerAnimations>
45+
<LayerAnimation LayerId="0" Visible="true">
46+
<Frame XPosition="0" YPosition="-8" XPivot="32" YPivot="44" XCrop="256" YCrop="0" Width="64" Height="64" XScale="100" YScale="100" Delay="2" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
47+
<Frame XPosition="0" YPosition="-8" XPivot="32" YPivot="44" XCrop="320" YCrop="0" Width="64" Height="64" XScale="100" YScale="100" Delay="2" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
48+
</LayerAnimation>
49+
</LayerAnimations>
50+
<NullAnimations/>
51+
<Triggers/>
52+
</Animation>
53+
<Animation Name="HeadLeft" FrameNum="4" Loop="false">
54+
<RootAnimation>
55+
<Frame XPosition="0" YPosition="0" XScale="100" YScale="100" Delay="4" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
56+
</RootAnimation>
57+
<LayerAnimations>
58+
<LayerAnimation LayerId="0" Visible="true">
59+
<Frame XPosition="-1" YPosition="-8" XPivot="32" YPivot="44" XCrop="384" YCrop="0" Width="64" Height="64" XScale="100" YScale="100" Delay="2" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
60+
<Frame XPosition="-1" YPosition="-8" XPivot="32" YPivot="44" XCrop="448" YCrop="0" Width="64" Height="64" XScale="100" YScale="100" Delay="2" Visible="true" RedTint="255" GreenTint="255" BlueTint="255" AlphaTint="255" RedOffset="0" GreenOffset="0" BlueOffset="0" Rotation="0" Interpolated="false"/>
61+
</LayerAnimation>
62+
</LayerAnimations>
63+
<NullAnimations/>
64+
<Triggers/>
65+
</Animation>
66+
</Animations>
67+
</AnimatedActor>
6.98 KB
Loading
6.97 KB
Loading

0 commit comments

Comments
 (0)