diff --git a/NS.py b/NS.py index e82be71..18f99a8 100644 --- a/NS.py +++ b/NS.py @@ -1727,6 +1727,10 @@ class Chemtrails(Sprite): for directory in sorted(iglob(join(self.get_resource("littleSlimeGoop"), "[0-9]_*/"))): self.add_frameset(switch=True) self.load_from_path(directory, True) + self.add_frameset(name="hurt", switch=True) + self.load_from_path("littleSlimeGoop/Hurt", True) + self.set_frameset(NS.N) + self.register(self.cancel_hurt) self.life = Life(self) self.boys = Boys(self) self.timer = Timer(self) @@ -1739,6 +1743,7 @@ class Chemtrails(Sprite): self.life.reset() self.boys.reset() self.timer.reset() + self.set_frameset(NS.N) def deactivate(self): self.active = False @@ -1753,6 +1758,20 @@ class Chemtrails(Sprite): self.timer.reset() self.queue_index = 0 + def display_hurt(self): + """ + Show hurt animation and trigger it to end after a delay + """ + self.set_frameset("hurt") + self.play(self.cancel_hurt, delay=1000, play_once=True) + + def cancel_hurt(self): + """ + Reset to a non-hurt frameset + """ + self.set_frameset(NS.N) + self.orient() + def update(self): if self.active: self.orient() @@ -1808,7 +1827,8 @@ class Chemtrails(Sprite): edge = self.get_game().platform.get_edge_pressed() dy = -Light.TITLE_OFFSET if self.get_game().title.active else 0 if edge is not None: - self.set_frameset(edge + 1) + if self.get_current_frameset().name != "hurt": + self.set_frameset(edge + 1) self.unhide() else: self.hide() @@ -1816,24 +1836,19 @@ class Chemtrails(Sprite): self.location.center = ds.get_width() / 2, NS.FRONT + dy - 10 self.orientation = NS.N elif edge == NS.E: - self.location.center = ds.get_width() / 2 + NS.FRONT_WIDTH / 2 - 85, \ - NS.FRONT + NS.LENGTH * NS.STEP - 40 + dy + self.location.center = ds.get_width() / 2 + NS.FRONT_WIDTH / 2 - 85, NS.FRONT + NS.LENGTH * NS.STEP - 40 + dy self.orientation = NS.E elif edge == NS.S: - self.location.center = ds.get_width() / 2, \ - NS.FRONT + NS.LENGTH - NS.LENGTH * NS.STEP - 65 + dy + self.location.center = ds.get_width() / 2, NS.FRONT + NS.LENGTH - NS.LENGTH * NS.STEP - 65 + dy self.orientation = NS.S elif edge == NS.W: - self.location.center = ds.get_width() / 2 - NS.FRONT_WIDTH / 2 + 85, \ - NS.FRONT + NS.LENGTH * NS.STEP - 40 + dy + self.location.center = ds.get_width() / 2 - NS.FRONT_WIDTH / 2 + 85, NS.FRONT + NS.LENGTH * NS.STEP - 40 + dy self.orientation = NS.W elif edge == NS.NW: - self.location.center = ds.get_width() / 2, \ - NS.FRONT + NS.LENGTH * NS.STEP + dy - 45 + self.location.center = ds.get_width() / 2, NS.FRONT + NS.LENGTH * NS.STEP + dy - 45 self.orientation = NS.NW elif edge == NS.NE: - self.location.center = ds.get_width() / 2 - 5, \ - NS.FRONT + NS.LENGTH * NS.STEP - 45 + dy + self.location.center = ds.get_width() / 2 - 5, NS.FRONT + NS.LENGTH * NS.STEP - 45 + dy self.orientation = NS.NE else: self.orientation = None @@ -2330,6 +2345,7 @@ class Boss(Animation): else: self.level_sprite().set_frameset("normal") self.play(self.flash_player_damage) + self.get_game().chemtrails.set_frameset("hurt") self.player_defeated = not win self.kills += not win self.play(self.show_end_dialogue, delay=3000, play_once=True) @@ -2813,6 +2829,7 @@ class Sword(Animation): sprite.hide() self.get_game().boss.start_player_damage() self.get_audio().play_sfx("damage", x=sprite.location.centerx) + self.get_game().chemtrails.display_hurt() else: center_save = sprite.location.center sprite.set_frameset("explode")