Krabbe: ASCII-only, weiter sichtbar; Taucher (Scuba-Diver) neu

- Krabben-Zeichen von '°' (non-ASCII, wide-char-Problem) auf '.' umgestellt
- steps_out 14→22: Krabbe läuft weiter aus dem Schloss heraus
- add_diver(): Scuba-Taucher mit 2-Frame-Animation, Sauerstoffblasen beim Tod
This commit is contained in:
rene 2026-03-29 10:19:34 +02:00
parent 566bbd9d0e
commit 1f053822ff

View file

@ -301,7 +301,7 @@ class Aquarium:
fns = [self.add_whale, self.add_monster, self.add_swan, fns = [self.add_whale, self.add_monster, self.add_swan,
self.add_ducks, self.add_dolphins, self.add_ducks, self.add_dolphins,
self.add_seahorse, self.add_squid] self.add_seahorse, self.add_squid, self.add_diver]
if not self.cfg.no_ship: if not self.cfg.no_ship:
fns.append(self.add_ship) fns.append(self.add_ship)
if not self.cfg.no_shark and not self.cfg.vegan: if not self.cfg.no_shark and not self.cfg.vegan:
@ -1355,6 +1355,60 @@ mmmmmm
death_cb=lambda e, aq: aq.random_object(e), death_cb=lambda e, aq: aq.random_object(e),
)) ))
# ── Diver (Taucher) ──────────────────────────────────────────────────────
def add_diver(self, dead=None):
diver_r0 = _p(r"""
O
\-|>
/\
""")
diver_r1 = _p(r"""
O
/-|>
\/
""")
diver_l0 = _p(r"""
O
<|-/
/\
""")
diver_l1 = _p(r"""
O
<|-\
\/
""")
mask_r = _p("""
y
wccy
gg
""")
mask_l = _p("""
y
yccw
gg
""")
going_right = random.random() < 0.5
speed = random.uniform(0.5, 1.0) * (1 if going_right else -1)
if going_right:
x, frames, mask = -6, [diver_r0, diver_r1], mask_r
else:
x, frames, mask = self.cols - 2, [diver_l0, diver_l1], mask_l
y = random.randint(9, max(10, self.rows - 5))
def on_death(e, aq):
aq.add_bubble(e)
aq.random_object(e)
self._add(Entity(
frames=frames, masks=[mask, mask],
x=x, y=y,
cb_args=[speed, 0, 0, 0.2],
default_color='c',
die_offscreen=True,
death_cb=on_death,
))
# ── Predation (--bloody) ───────────────────────────────────────────────── # ── Predation (--bloody) ─────────────────────────────────────────────────
def _check_predation(self): def _check_predation(self):
@ -1407,8 +1461,9 @@ mmmmmm
elif st == 1: # opening elif st == 1: # opening
if self._cs_portcullis and not self._cs_portcullis.alive: if self._cs_portcullis and not self._cs_portcullis.alive:
gx, gy = self._gate_pos() gx, gy = self._gate_pos()
crab_f0 = ['(°w°)', '/| |\\'] # ASCII-only crab to avoid wide-char rendering issues
crab_f1 = ['(°w°)', '\\| |/'] crab_f0 = ['(._.)', '/| |\\']
crab_f1 = ['(._.)', '\\| |/']
mask = [' yWy ', ' '] mask = [' yWy ', ' ']
c = CrabEntity( c = CrabEntity(
frames=[crab_f0, crab_f1], masks=[mask, mask], frames=[crab_f0, crab_f1], masks=[mask, mask],
@ -1416,7 +1471,7 @@ mmmmmm
cb_args=[-1, 0, 0, 0.25], cb_args=[-1, 0, 0, 0.25],
default_color='y', default_color='y',
die_offscreen=False, die_offscreen=False,
steps_out=14, steps_out=22, # walk further so crab is clearly visible
entity_type='crab', entity_type='crab',
) )
self._add(c) self._add(c)