@@ -13,7 +13,6 @@ import {
1313} from "isaac-typescript-definitions" ;
1414import type { SaveData } from "isaacscript-common" ;
1515import {
16- addCollectibleCostume ,
1716 anyPlayerIs ,
1817 Callback ,
1918 CallbackCustom ,
@@ -25,11 +24,11 @@ import {
2524 jsonEncode ,
2625 ModCallbackCustom ,
2726 ReadonlyMap ,
28- removeCollectibleCostume ,
2927 spawnEffect ,
3028 VectorZero ,
3129} from "isaacscript-common" ;
3230import type { EIDExtended } from "../../compat/EID" ;
31+ import { appendToDescription } from "../../compat/EID" ;
3332import { spawnNotePickup } from "../../entities/pickups/helper" ;
3433import type { NoteInstance } from "../../entities/pickups/NotePickup/NotePickup" ;
3534import {
@@ -41,6 +40,7 @@ import type { GlitchNoteTearData } from "../../entities/tears/GlitchNoteTear/Gli
4140import { CollectibleTypeCustom } from "../../items/enum" ;
4241import { mod } from "../../mod" ;
4342import { getFireRateMultiplier , setFireRate } from "../../util/calc" ;
43+ import { updateCollectibleCostumes } from "../../util/costumes" ;
4444import { getData } from "../../util/data" ;
4545import { Debugger } from "../../util/debug" ;
4646import { setTearColor } from "../../util/effects" ;
@@ -72,6 +72,11 @@ const ITEM_REPLACEMENTS: Partial<Record<CollectibleType, CollectibleType>> = {
7272 [ CollectibleType . DR_FETUS ] : CollectibleTypeCustom . DR_FETUS_NOTE ,
7373} as const ;
7474
75+ const ITEM_COSTUMES : Partial < Record < CollectibleType , CollectibleType > > = {
76+ [ CollectibleTypeCustom . BRIMSTONE_NOTE ] : CollectibleType . BRIMSTONE ,
77+ [ CollectibleTypeCustom . DR_FETUS_NOTE ] : CollectibleType . DR_FETUS ,
78+ } as const ;
79+
7580const FIRE_RATE_ITEM_MULTIPLIERS : Partial < Record < CollectibleType , number > > = {
7681 [ CollectibleType . MONSTROS_LUNG ] : 0.35 ,
7782} as const ;
@@ -90,7 +95,7 @@ export class MikuTaintedCharacter extends Character {
9095 /** Font for the uses text of the notes. */
9196 private font : Font | undefined = undefined ;
9297
93- @CallbackCustom ( ModCallbackCustom . POST_GAME_STARTED_REORDERED , true )
98+ @CallbackCustom ( ModCallbackCustom . POST_GAME_STARTED_REORDERED , undefined )
9499 override onGameStart ( isContinued : boolean ) : void {
95100 if ( ! isContinued || ! mod . HasData ( ) ) {
96101 return ;
@@ -166,6 +171,7 @@ export class MikuTaintedCharacter extends Character {
166171 */
167172 @Callback ( ModCallback . POST_PLAYER_INIT , PlayerVariant . PLAYER )
168173 override postPlayerInit ( player : EntityPlayer ) : void {
174+ super . postPlayerInit ( player ) ;
169175 if ( ! isMiku ( player , true ) ) {
170176 return ;
171177 }
@@ -179,6 +185,8 @@ export class MikuTaintedCharacter extends Character {
179185 playerData . erased = saved . erased ;
180186 playerData . notes = saved . notes ;
181187 playerData . useNotes = saved . useNotes ;
188+
189+ this . postPlayerInit ( player ) ;
182190 }
183191
184192 @CallbackCustom (
@@ -226,8 +234,7 @@ export class MikuTaintedCharacter extends Character {
226234 FIRE_RATE_ITEM_MULTIPLIERS ,
227235 ) ;
228236
229- // If no item with extra multiplier was found, return to default item eval.
230- if ( multiplier === 1 ) {
237+ if ( multiplier === - 1 ) {
231238 return ;
232239 }
233240
@@ -326,8 +333,11 @@ export class MikuTaintedCharacter extends Character {
326333 const isRightSide = controllerSides [ index ] ?? false ;
327334
328335 // HUD layout config
329- const startX = isRightSide ? 300 : 45 ;
330- const startY = 45 ;
336+ const hudOffset = Options . HUDOffset ;
337+ const hudX = hudOffset * 20 ;
338+
339+ const startX = isRightSide ? 300 - hudX : 45 + hudX ;
340+ const startY = 60 ;
331341 const spacing = 16 ;
332342 const baseSize = 14 ;
333343 const maxPerRow = 5 ;
@@ -478,17 +488,7 @@ export class MikuTaintedCharacter extends Character {
478488 }
479489 }
480490
481- if ( player . HasCollectible ( CollectibleTypeCustom . BRIMSTONE_NOTE ) ) {
482- addCollectibleCostume ( player , CollectibleType . BRIMSTONE ) ;
483- } else {
484- removeCollectibleCostume ( player , CollectibleType . BRIMSTONE ) ;
485- }
486-
487- if ( player . HasCollectible ( CollectibleTypeCustom . DR_FETUS_NOTE ) ) {
488- addCollectibleCostume ( player , CollectibleType . DR_FETUS ) ;
489- } else {
490- removeCollectibleCostume ( player , CollectibleType . DR_FETUS ) ;
491- }
491+ updateCollectibleCostumes ( player , ITEM_COSTUMES ) ;
492492 }
493493 }
494494
@@ -585,6 +585,12 @@ export class MikuTaintedCharacter extends Character {
585585 const synergyNote = ITEM_SYNERGIES [ itemID ] ;
586586 const replaceItem = ITEM_REPLACEMENTS [ itemID ] ;
587587
588+ // FIXME: Solution until I find a better one...
589+ if ( itemID === CollectibleType . LUDOVICO_TECHNIQUE ) {
590+ player . AddCollectible ( CollectibleType . TECH_5 ) ;
591+ return undefined ;
592+ }
593+
588594 if ( synergyNote === undefined || replaceItem === undefined ) {
589595 return undefined ;
590596 }
@@ -640,5 +646,22 @@ export class MikuTaintedCharacter extends Character {
640646 `${ NAME } (Tainted)` ,
641647 "Add description and birthright description." ,
642648 ) ;
649+
650+ // TODO: Implement with loop.
651+ appendToDescription (
652+ eid ,
653+ "Brimstone" ,
654+ PlayerTypeCustom . MIKU_B ,
655+ `#{{Player${ PlayerTypeCustom . MIKU_B } }} Replaces {{Collectible118}} Brimstone#{{Collectible${ CollectibleTypeCustom . BRIMSTONE_NOTE } }} Brimstone Notes can now drop from enemies` ,
656+ ( ) => anyPlayerIs ( PlayerTypeCustom . MIKU_B ) ,
657+ ) ;
658+
659+ appendToDescription (
660+ eid ,
661+ "Dr. Fetus" ,
662+ PlayerTypeCustom . MIKU_B ,
663+ `#{{Player${ PlayerTypeCustom . MIKU_B } }} Replaces {{Collectible52}} Dr. Fetus#{{Collectible${ CollectibleTypeCustom . DR_FETUS_NOTE } }} Dr. Fetus Explosive Notes can now drop from enemies` ,
664+ ( ) => anyPlayerIs ( PlayerTypeCustom . MIKU_B ) ,
665+ ) ;
643666 }
644667}
0 commit comments