diff --git a/src/assets/ba_data/python/bascenev1lib/actor/flag.py b/src/assets/ba_data/python/bascenev1lib/actor/flag.py index 79ac4486..29f2a127 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/flag.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/flag.py @@ -144,6 +144,9 @@ class FlagDiedMessage: flag: Flag """The `Flag` that died.""" + self_kill: bool = False + """If the `Flag` killed itself or not.""" + @dataclass class FlagDroppedMessage: @@ -283,7 +286,9 @@ class Flag(bs.Actor): ) self._counter.text = str(self._count) if self._count < 1: - self.handlemessage(bs.DieMessage()) + self.handlemessage( + bs.DieMessage(how=bs.DeathType.LEFT_GAME) + ) else: assert self._counter self._counter.text = '' @@ -337,7 +342,11 @@ class Flag(bs.Actor): if self.node: self.node.delete() if not msg.immediate: - self.activity.handlemessage(FlagDiedMessage(self)) + self.activity.handlemessage( + FlagDiedMessage(self, ( + msg.how is bs.DeathType.LEFT_GAME + )) + ) elif isinstance(msg, bs.HitMessage): assert self.node assert msg.force_direction is not None diff --git a/src/assets/ba_data/python/bascenev1lib/game/football.py b/src/assets/ba_data/python/bascenev1lib/game/football.py index 34765d5a..0fd603fa 100644 --- a/src/assets/ba_data/python/bascenev1lib/game/football.py +++ b/src/assets/ba_data/python/bascenev1lib/game/football.py @@ -331,7 +331,10 @@ class FootballTeamGame(bs.TeamGameActivity[Player, Team]): # Respawn dead flags. elif isinstance(msg, FlagDiedMessage): if not self.has_ended(): - self._flag_respawn_timer = bs.Timer(3.0, self._spawn_flag) + if msg.self_kill: + self._spawn_flag() + else: + self._flag_respawn_timer = bs.Timer(3.0, self._spawn_flag) self._flag_respawn_light = bs.NodeActor( bs.newnode( 'light', @@ -879,8 +882,7 @@ class FootballCoopGame(bs.CoopGameActivity[Player, Team]): ) self._time_text_input.node.timemax = self._final_time_ms - # FIXME: Does this still need to be deferred? - bs.pushcall(bs.Call(self.do_end, 'victory')) + self.do_end('victory') def do_end(self, outcome: str) -> None: """End the game with the specified outcome.""" @@ -931,7 +933,10 @@ class FootballCoopGame(bs.CoopGameActivity[Player, Team]): # Respawn dead flags. elif isinstance(msg, FlagDiedMessage): assert isinstance(msg.flag, FootballFlag) - msg.flag.respawn_timer = bs.Timer(3.0, self._spawn_flag) + if msg.self_kill: + self._spawn_flag() + else: + msg.flag.respawn_timer = bs.Timer(3.0, self._spawn_flag) self._flag_respawn_light = bs.NodeActor( bs.newnode( 'light', @@ -948,7 +953,7 @@ class FootballCoopGame(bs.CoopGameActivity[Player, Team]): self._flag_respawn_light.node, 'intensity', {0: 0, 0.25: 0.15, 0.5: 0}, - loop=True, + loop=(not msg.self_kill), ) bs.timer(3.0, self._flag_respawn_light.node.delete) else: