diff --git a/src/plugin/boss/barrage.ts b/src/plugin/boss/barrage.ts
index 76d5352..df0ea4a 100644
--- a/src/plugin/boss/barrage.ts
+++ b/src/plugin/boss/barrage.ts
@@ -2,9 +2,15 @@ import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d';
 import { RenderItem, RenderItemPosition } from '@/core/render/item';
 import { Transform } from '@/core/render/transform';
 import { IStateDamageable } from '@/game/state/interface';
+import EventEmitter from 'eventemitter3';
 import { Ticker } from 'mutate-animate';
 
-export abstract class BarrageBoss {
+interface BarrageBossEvent {
+    end: [];
+    start: [];
+}
+
+export abstract class BarrageBoss extends EventEmitter<BarrageBossEvent> {
     ticker: Ticker = new Ticker();
     /** 这个boss的所有弹幕 */
     projectiles: Set<Projectile> = new Set();
diff --git a/src/plugin/boss/index.ts b/src/plugin/boss/index.ts
index 7b18e39..85b3ea0 100644
--- a/src/plugin/boss/index.ts
+++ b/src/plugin/boss/index.ts
@@ -1,13 +1,22 @@
 import { BarrageBoss } from './barrage';
 import { TowerBoss } from './towerBoss';
 
-let boss: BarrageBoss;
+let boss: BarrageBoss | null;
 
 export function startTowerBoss() {
     boss = new TowerBoss();
     boss.start();
+    boss.once('end', () => {
+        boss = null;
+    });
 }
 
-export function getBoss<T extends BarrageBoss>(): T {
+export function getBoss<T extends BarrageBoss>(): T | null {
     return boss as T;
 }
+
+Mota.require('var', 'hook').on('reset', () => {
+    if (boss) {
+        boss.end();
+    }
+});