Beispiel #1
0
    async def _interact_rotate(self):
        if self._has_rotated:
            await display_text(
                DisplayedText([
                    TextPage(
                        "Another day has passed, but nothing has really changed"
                    ),
                ]))
            return

        await display_text(
            DisplayedText([
                TextPage("A lamp in the room simulates the Sun"),
                TextPage(
                    "The day smoothly transforms into the evening, which, in turn, turns into the night"
                ),
                TextPage("Then, the morning emerges out of the dark..."),
                TextPage("... as the globe turns its side to the light"),
                TextPage("Globby seems to like this game very much"),
            ]))
        self._has_rotated = True
        if self.can_spare():
            await display_text(
                DisplayedText([
                    TextPage("It looks absolutely delighted"),
                ]))
Beispiel #2
0
    async def use_weapon(self, weapon):
        font = load_font(Path('.') / 'assets' / 'fonts' / 'default')
        damage = self.enemy.damage_by_weapon.get(weapon.name, 0)
        await self.enemy.hit(damage)

        await HitAnimation(self.enemy.sprite).animate()

        if damage == 0:
            txt = DisplayedText([
                TextPage("It wasn't effective", font),
            ])
        else:
            txt = DisplayedText([
                TextPage(f'Damage: {damage}', font),
            ])
        await display_text(txt)

        await self.on_hit(self.enemy.hp <= 0)

        if self.enemy.hp <= 0:
            txt = DisplayedText(
                [TextPage(f'{self.enemy.name} has been killed', font)])
            await self.enemy.on_disappear()
            await sleep(1.0)
            await display_text(txt)
            await self.on_kill()
Beispiel #3
0
 async def interact_jump(self):
     if self._has_jumped:
         await display_text(
             DisplayedText([
                 TextPage("... but Sportick is afraid that you can get an injury"),
             ])
         )
     elif self._has_run:
         await display_text(
             DisplayedText([
                 TextPage("... and your attempt is sucessful"),
                 TextPage("You lift yourself up, into the air"),
                 TextPage("Wow, you can jump really high!"),
                 TextPage("You remain in the air for a moment..."),
                 TextPage("But then it's time to fall down"),
                 TextPage("Regretting about the height of your jump, you begin your descent"),
                 TextPage("..."),
                 TextPage("Ouch!"),
             ])
         )
         self._has_jumped = True
         await display_text(load_text('fight/lyceum/sportick/player_jumped'))
     else:
         await display_text(
             DisplayedText([
                 TextPage("... but you haven't warmed up enough"),
             ])
         )
Beispiel #4
0
    async def process_enemy_attack(self):
        pic = self.textures['unknown']
        if self._num_attacks == 0:
            txt = DisplayedText([
                TextPage('Oh no! It has got out of control!', picture=pic),
                TextPage('This beast will destroy everything with its tears!', picture=pic),
            ])
            await display_text(txt)
        elif self._num_attacks == 1:
            txt = DisplayedText([
                TextPage("There's no way to stop this flood of tears", picture=pic),
                TextPage('Nothing we can do to save this place', picture=pic),
            ])
            await display_text(txt)
        elif self._num_attacks == 2:
            txt = DisplayedText([
                TextPage('Wait...', picture=pic),
                TextPage('It looks like a might know a way to stop this cry', picture=pic),
                TextPage('Just give me a sec...', picture=pic),
            ])
            await display_text(txt)
        elif self._num_attacks == 3:
            txt = DisplayedText([
                TextPage("I'll try now to neutralize the Crier", picture=pic),
                TextPage('Sooooo.... we just have to.... NONONONONONONO', picture=pic),
                TextPage("I MADE A SINGLE WRONG MOVE", picture=pic),
                TextPage("AND NOW IT'S EXPLODING!......", picture=pic, skippable=False),
            ])
            await display_text(txt)
            self._exploded = True
            return

        await super().process_enemy_attack()
        self._num_attacks += 1
Beispiel #5
0
    async def interact(self, interaction):
        await super().interact(interaction)

        if interaction.name == 'cry':
            await display_text(
                DisplayedText([
                    TextPage("... but Geoma doesn't care"),
                ]))
        elif interaction.name == 'circle':
            await display_text(
                DisplayedText([
                    TextPage("Geoma recognizes an old friend in your drawing"),
                    TextPage("She looks much happier now"),
                ]))
            self._can_spare = True
Beispiel #6
0
 async def interact_move(self):
     if self._has_moved:
         await display_text(
             DisplayedText([
                 TextPage("... but nothing changes"),
             ])
         )
     else:
         await display_text(
             DisplayedText([
                 TextPage("It turns out that this is a good warm-up exercise!"),
                 TextPage("Sportick now allows you to proceed with training"),
             ])
         )
         self._has_moved = True
Beispiel #7
0
 async def interact(self, interaction):
     await super().interact(interaction)
     if interaction.name == 'close_eyes':
         await display_text(
             DisplayedText([
                 TextPage('You wait a little and then open them up again'),
                 TextPage('Surprisingly, the problem is still here'),
             ])
         )
     elif interaction.name == 'cry':
         await display_text(
             DisplayedText([
                 TextPage('... but the problem absorbs your tears, making your cry worthless'),
             ])
         )
Beispiel #8
0
 async def spare(self):
     font = load_font(Path('.') / 'assets' / 'fonts' / 'default')
     if self.can_spare():
         txt = DisplayedText([
             TextPage(f'You spared {self.enemy.name}', font),
         ])
         await display_text(txt)
         self._has_spared = True
         await self.on_spare()
     else:
         txt = DisplayedText([
             TextPage(
                 f'{self.enemy.name} doesn\'t want to\nquit fighting with you',
                 font),
         ])
         await display_text(txt)
Beispiel #9
0
    async def attack_xxl(self):
        await self.enemy.hit(0)

        await HitAnimation(self.enemy.sprite).animate()

        await display_text(DisplayedText([TextPage('You start XXL and solve all the problems you can find')]))

        self._resolution = 'kill'

        inflash = Flash(size=(800, 600), length=1.0).start_animation()
        self.spawn(inflash)
        await sleep(1.5)
        inflash.kill()

        self.enemy.sprite.texture = self.enemy.wounded_texture

        outflash = Flash(size=(800, 600), length=0.3, is_reversed=True).start_animation()
        self.spawn(outflash)
        await sleep(0.31)
        outflash.kill()

        await sleep(1.0)
        await self.enemy.on_disappear()
        await sleep(1.0)

        await display_text(self.get_kill_text())

        disappear_animation = DisappearAnimation(
            pos = self.cariel_sprite.pos,
            texture = self.textures['cariel'],
            slowdown_factor = 4,
        )
        self.cariel_sprite.kill()
        await disappear_animation.animate()
        await sleep(1)

        txt = DisplayedText([
            TextPage('Cariel has been killed'),
        ])
        await display_text(txt)
        await self.on_kill()
        get_state()['cariel_fought'] = True
Beispiel #10
0
    async def interact(self, interaction):
        await super().interact(interaction)
        if interaction.name == 'get_scared':
            self.__is_player_scared = True

        await display_text(
            DisplayedText([
                TextPage(
                    'Algebroid feels that you are not dangerous and is likely to let you go now'
                ),
            ]))
Beispiel #11
0
    async def spare(self):
        if self._num_attacks > 0:
            await display_text(DisplayedText([TextPage('...?', picture=self.textures['cariel_neutral'])]))
            return

        self._num_spares += 1
        await display_text(self.get_text_for_current_spare())
        self._has_spared = self.check_if_has_spared()
        if self._has_spared:
            get_state()['cariel_fought'] = True
            await self.cariel_sprite.walk_x(-300)
            await self.on_spare()
Beispiel #12
0
 async def consume_food(self, food_consumption):
     food = food_consumption.food
     recovered = food.restores
     state = get_state()
     state['player_hp'] += recovered
     if state['player_hp'] >= state['player_max_hp']:
         state['player_hp'] = state['player_max_hp']
         txt = DisplayedText([
             TextPage(
                 f'You ate {food.inline_name} and recovered HP to the maximum'
             ),
         ])
     else:
         txt = DisplayedText([
             TextPage(
                 f'You ate {food.inline_name} and recovered {recovered} HP'
             ),
         ])
     await display_text(txt)
     inventory.remove_from_slot(inventory.get_inventory(),
                                food_consumption.inventory_slot)
Beispiel #13
0
 async def interact_run(self):
     if self._has_run:
         await display_text(
             DisplayedText([
                 TextPage("... but, having already ran recently, you feel too tired to do it again"),
             ])
         )
     elif self._has_moved:
         await display_text(
             DisplayedText([
                 TextPage("You begin to walk slowly first, but then start to increase your speed"),
                 TextPage("Sportick admits that your running skills are fine"),
                 TextPage("Also, you have warmed up even more"),
             ])
         )
         self._has_run = True
     else:
         await display_text(
             DisplayedText([
                 TextPage("... but, before you run, you have to make your first movements"),
             ])
         )
Beispiel #14
0
    async def _interact_water(self):
        if self._has_offered_water:
            await display_text(
                DisplayedText([
                    TextPage(
                        "Remembering how much water it already has, Globby politely refuses"
                    ),
                ]))
            return

        await display_text(
            DisplayedText([
                TextPage("Globby happily accepts your offering"),
                TextPage("You pour the water right onto it"),
                TextPage("..."),
                TextPage("Globby's ocean levels rise, but not too much"),
                TextPage("Globby admits you've done a fantastic job!"),
            ]))
        self._has_offered_water = True
        if self.can_spare():
            await display_text(
                DisplayedText([
                    TextPage("It looks absolutely delighted"),
                ]))
Beispiel #15
0
def load_text(name: str, fmt: Optional[Dict[str, str]] = None):
    if fmt is None:
        fmt = {}

    path = Path('.') / 'assets' / 'texts' / name

    with open(path / 'text.yml') as f:
        data = yaml.safe_load(f)

    pictures = {
        picture_name: _load_texture(path, picture_filename)
        for picture_name, picture_filename in data['pictures'].items()
    }

    pages: List[TextPage] = []
    for page in data['pages']:
        font_name = page.get('font', 'default')
        font = load_font(Path('.') / 'assets' / 'fonts' / font_name)
        delay = page.get('delay', 0.05)
        skippable = page.get('skippable', True)
        picture_name = page.get('picture', None)
        auto_advance = page.get('auto_advance', False)
        if picture_name is None:
            picture = None
        else:
            picture = pictures[picture_name]
        text = page['text'].format(**fmt)
        pages.append(
            TextPage(
                text,
                font=font,
                delay=delay,
                skippable=skippable,
                picture=picture,
                auto_advance=auto_advance,
            ))
    return DisplayedText(pages)
Beispiel #16
0
 def get_text_for_current_attack(self):
     if self._num_attacks == 1:
         return DisplayedText([
             TextPage('You beat up the keyboard'),
             TextPage('You have just typed complete nonsense'),
             TextPage('Yes, go on like that', picture=self.textures['cariel_smiling']),
         ])
     if self._num_attacks == 2:
         return DisplayedText([
             TextPage('You beat the keyboard harder'),
             TextPage('Wow, you\'ve calculated 5 - 3 = 2'),
             TextPage('Going in the right direction', picture=self.textures['cariel_smiling']),
         ])
     if self._num_attacks == 3:
         return DisplayedText([
             TextPage('You smash the keyboard at the full force'),
             TextPage('Surprisingly, something meaningful shows up on the screen'),
             TextPage('Wow, making progress!', picture=self.textures['cariel_smiling']),
         ])
     if self._num_attacks == 4:
         return DisplayedText([
             TextPage('You throw the mouse away'),
             TextPage('However, it manages to copy the cells exactly the way you need'),
             TextPage('Halfway through!', picture=self.textures['cariel_smiling']),
         ])
     if self._num_attacks == 5:
         return DisplayedText([
             TextPage('You shout at the screen'),
             TextPage('Voice recognition almost completes the formula'),
             TextPage('Almost done!', picture=self.textures['cariel_smiling']),
         ])
     if self._num_attacks == 6:
         return DisplayedText([
             TextPage('You create a macro written in VBA'),
             TextPage('Suddenly, something strange starts happening...'),
             TextPage('Wait, what is going on?', picture=self.textures['cariel_neutral']),
             TextPage(
                 'STOP, IT IS NOT SUPPOSED TO WORK THIS WAY, NOOOOOOO...',
                 picture = self.textures['cariel_frightened'],
             ),
         ])
Beispiel #17
0
 def get_kill_text(self):
     return DisplayedText([
         TextPage(
             '...',
             picture = self.textures['cariel_closed_eyes'],
             delay = 0.07,
         ),
         TextPage(
             'all...',
             picture = self.textures['cariel_closed_eyes'],
             delay = 0.07,
         ),
         TextPage(
             'my tasks...',
             picture = self.textures['cariel_closed_eyes'],
             delay = 0.07,
         ),
         TextPage(
             '... are solved?',
             picture = self.textures['cariel_closed_eyes'],
             delay = 0.07,
         ),
         TextPage(
             '...',
             picture = self.textures['cariel_closed_eyes'],
             delay = 0.07,
         ),
         TextPage(
             'That is what I was afraid of',
             picture = self.textures['cariel_desperate'],
             delay = 0.07,
         ),
         TextPage(
             'The only thing you do',
             picture = self.textures['cariel_desperate'],
             delay = 0.07,
         ),
         TextPage(
             '... is solving tasks and meeting deadlines',
             picture = self.textures['cariel_desperate'],
             delay = 0.07,
         ),
         TextPage(
             'And, as a result, destroying our minds and powers...',
             picture = self.textures['cariel_desperate'],
             delay = 0.07,
         ),
         TextPage(
             'DESTROYING OUR SOULS...',
             picture = self.textures['cariel_shouting'],
             delay = 0.3,
             skippable = False,
         ),
         TextPage(
             'It turned out that XXL was not meant as a means of self-defense for you...',
             picture = self.textures['cariel_desperate'],
             delay = 0.09,
         ),
         TextPage(
             'But instead, it was protecting us, teachers, from your destructive passions',
             picture = self.textures['cariel_desperate'],
             delay = 0.09,
         ),
         TextPage(
             'BUT YOU DESTROYED THIS PROTECTIVE BARRIER',
             picture = self.textures['cariel_shouting'],
             delay = 0.3,
             skippable = False,
         ),
         TextPage(
             '...',
             picture = self.textures['cariel_closed_eyes'],
             delay = 0.15,
         ),
         TextPage(
             'Please...',
             picture = self.textures['cariel_closed_eyes'],
             delay = 0.15,
         ),
         TextPage(
             'Do not be like that...',
             picture = self.textures['cariel_desperate'],
             delay = 0.2,
         ),
         TextPage(
             'I know you can be good...',
             picture = self.textures['cariel_closed_eyes'],
             delay = 0.25,
         ),
         TextPage(
             'My child...',
             picture = self.textures['cariel_closed_eyes'],
             delay = 0.4,
         ),
     ])
Beispiel #18
0
 def get_battle_entry_text(self):
     return DisplayedText([
         TextPage('Cariel is attacked by you'),
         TextPage('He looks terrified'),
     ])
Beispiel #19
0
 async def interact(self, interaction: Interaction):
     await display_text(DisplayedText([
         TextPage(interaction.description),
     ]))
Beispiel #20
0
 def get_spare_text(self):
     return DisplayedText([
         TextPage(
             '...',
             picture = self.textures['cariel_frightened'],
         ),
         TextPage(
             '...',
             picture = self.textures['cariel_neutral'],
         ),
         TextPage(
             'Oh...',
             picture = self.textures['cariel_neutral'],
         ),
         TextPage(
             'Despite being about to end all my problems and to take away my soul...',
             picture = self.textures['cariel_neutral'],
         ),
         TextPage(
             '... you decided to leave everything as it is',
             picture = self.textures['cariel_neutral'],
         ),
         TextPage(
             'I... I cannot find suitable words to express how I feel about that',
             picture = self.textures['cariel_smiling'],
         ),
         TextPage(
             'I feel... relief, joy...',
             picture = self.textures['cariel_smiling'],
         ),
         TextPage(
             '... care',
             picture = self.textures['cariel_smiling'],
         ),
         TextPage(
             '...',
             picture = self.textures['cariel_thinking'],
         ),
         TextPage(
             'To be honest, I thought initially that XXL may be a good way of self-defense against problems',
             picture = self.textures['cariel_neutral'],
         ),
         TextPage(
             'But now I am sure it can be misused too easily',
             picture = self.textures['cariel_neutral'],
         ),
         TextPage(
             "And I am extremely happy that you did not fall into this trap of destroying teachers' souls...",
             picture = self.textures['cariel_smiling'],
         ),
         TextPage(
             "... just because you wanted to show your proficience in solving various tasks",
             picture = self.textures['cariel_smiling'],
         ),
         TextPage(
             'You have expanded my mind very much, dear student',
             picture = self.textures['cariel_smiling'],
         ),
         TextPage(
             'So I will definitely stop blocking your way',
             picture = self.textures['cariel_smiling'],
         ),
         TextPage(
             'But...',
             picture = self.textures['cariel_neutral'],
         ),
         TextPage(
             'If you choose to return here...',
             picture = self.textures['cariel_neutral'],
         ),
         TextPage(
             'Please, do not try to find me',
             picture = self.textures['cariel_neutral'],
         ),
         TextPage(
             'I would have a lot of work to do and...',
             picture = self.textures['cariel_desperate'],
         ),
         TextPage(
             '... I would have to reconsider the values in my life',
             picture = self.textures['cariel_desperate'],
         ),
         TextPage(
             'Such as the value of teaching a student how to use XXL...',
             picture = self.textures['cariel_neutral'],
         ),
         TextPage(
             '...',
             picture = self.textures['cariel_thinking'],
         ),
         TextPage(
             'So...',
             picture = self.textures['cariel_neutral'],
         ),
         TextPage(
             'Goodbye, student!',
             picture = self.textures['cariel_smiling'],
         ),
     ])
Beispiel #21
0
 def get_battle_entry_text(self):
     return DisplayedText([
         TextPage(f'{self.enemy.name} attacks you'),
     ])
Beispiel #22
0
    async def attack_xxl(self):
        await self.enemy.hit(0)

        await HitAnimation(self.enemy.sprite).animate()

        self._num_attacks += 1
        await display_text(self.get_text_for_current_attack())
        if self.has_killed_xxl():
            inflash = Flash(size=(800, 600), length=1.0).start_animation()
            self.spawn(inflash)
            await sleep(1.5)
            inflash.kill()

            self.enemy.sprite.texture = self.enemy.wounded_texture

            outflash = Flash(size=(800, 600), length=0.3, is_reversed=True).start_animation()
            self.spawn(outflash)
            await sleep(0.31)
            outflash.kill()

            await sleep(1.0)
            await self.enemy.on_disappear()
            await sleep(1.0)

            await display_text(
                DisplayedText([
                    TextPage(
                        '...',
                        picture = self.textures['cariel_surprised'],
                    ),
                    TextPage(
                        'My problems...',
                        picture = self.textures['cariel_surprised'],
                    ),
                    TextPage(
                        'They are all... solved?',
                        picture = self.textures['cariel_surprised'],
                    ),
                    TextPage(
                        'You managed to do everything so easily?',
                        picture = self.textures['cariel_surprised'],
                    ),
                    TextPage(
                        'Oh my, oh no...',
                        picture = self.textures['cariel_desperate'],
                    ),
                    TextPage(
                        'This went further than it was supposed to...',
                        picture = self.textures['cariel_desperate'],
                    ),
                    TextPage(
                        'I lost my problems... I lost my powers...',
                        picture = self.textures['cariel_desperate'],
                    ),
                    TextPage(
                        'I lost the energy that kept me alive...',
                        picture = self.textures['cariel_closed_eyes'],
                    ),
                    TextPage(
                        '...',
                        picture = self.textures['cariel_closed_eyes'],
                    ),
                    TextPage(
                        'But...',
                        picture = self.textures['cariel_desperate'],
                    ),
                    TextPage(
                        'I still believe in you',
                        picture = self.textures['cariel_desperate'],
                    ),
                    TextPage(
                        'You are strong enough to survive, you have just proved it...',
                        picture = self.textures['cariel_closed_eyes'],
                        delay = 0.15,
                    ),
                    TextPage(
                        'My child.....',
                        picture = self.textures['cariel_closed_eyes'],
                        delay = 0.3,
                    ),
                ]),
            )

            disappear_animation = DisappearAnimation(
                pos = self.cariel_sprite.pos,
                texture = self.textures['cariel'],
                slowdown_factor = 4,
            )
            self.cariel_sprite.kill()
            await disappear_animation.animate()
            await sleep(1)

            txt = DisplayedText([
                TextPage('Cariel has been killed'),
            ])
            await display_text(txt)
            await self.on_kill()
            get_state()['cariel_fought'] = True
Beispiel #23
0
 async def _interact_map(self):
     await display_text(
         DisplayedText([
             TextPage("But you have no idea how to draw maps"),
         ]))
Beispiel #24
0
 def get_text_for_current_spare(self):
     if self._num_spares == 1:
         return DisplayedText([
             TextPage(
                 'Yes, exactly, you are not expected to fight with anyone',
                 picture = self.textures['cariel_smiling'],
             ),
             TextPage(
                 'Instead, let us open XXL',
                 picture = self.textures['cariel_smiling'],
             ),
         ])
     if self._num_spares == 2:
         return DisplayedText([
             TextPage(
                 'Yes, exactly, now copy these cells...',
                 picture = self.textures['cariel_smiling'],
             ),
         ])
     if self._num_spares == 3:
         return DisplayedText([
             TextPage(
                 '...',
                 picture = self.textures['cariel_neutral'],
             ),
         ])
     if self._num_spares == 4:
         return DisplayedText([
             TextPage(
                 'Wait, what are you trying to do?',
                 picture = self.textures['cariel_neutral'],
             ),
         ])
     if self._num_spares == 5:
         return DisplayedText([
             TextPage(
                 'What are you trying to achieve by this?',
                 picture = self.textures['cariel_dissat_c'],
             ),
         ])
     if self._num_spares == 6:
         return DisplayedText([
             TextPage(
                 'Please...',
                 picture = self.textures['cariel_dissat_r'],
             ),
             TextPage(
                 'Just open XXL',
                 picture = self.textures['cariel_begging'],
             ),
         ])
     if self._num_spares == 7:
         return DisplayedText([
             TextPage(
                 'I know it is not perfect, but...',
                 picture = self.textures['cariel_begging'],
             ),
             TextPage(
                 '... but please, just use it for me',
                 picture = self.textures['cariel_begging'],
             ),
         ])
     if self._num_spares == 8:
         return DisplayedText([
             TextPage(
                 '...',
                 picture = self.textures['cariel_neutral'],
             ),
             TextPage(
                 'Well, I understand',
                 picture = self.textures['cariel_neutral'],
             ),
             TextPage(
                 'Some people may not like certain tools or methods',
                 picture = self.textures['cariel_neutral'],
             ),
             TextPage(
                 'And this is why it was not right for me to force you to learn XXL',
                 picture = self.textures['cariel_neutral'],
             ),
             TextPage(
                 '...',
                 picture = self.textures['cariel_thinking'],
             ),
             TextPage(
                 'Dear student',
                 picture = self.textures['cariel_smiling'],
             ),
             TextPage(
                 'For your sake I will put my habits and favors aside',
                 picture = self.textures['cariel_smiling'],
             ),
             TextPage(
                 'XXL may indeed be too easy to misuse',
                 picture = self.textures['cariel_smiling'],
             ),
             TextPage(
                 'You may accidentally solve some problems, by which you will hurt someone or even...',
                 picture = self.textures['cariel_neutral'],
             ),
             TextPage(
                 '...',
                 picture = self.textures['cariel_desperate'],
             ),
             TextPage(
                 'Well, let us not think about it',
                 picture = self.textures['cariel_smiling'],
             ),
             TextPage(
                 'The thing is that... you should probably choose your tools yourself',
                 picture = self.textures['cariel_neutral'],
             ),
             TextPage(
                 'I should have respected your freedom from the very beginning',
                 picture = self.textures['cariel_neutral'],
             ),
             TextPage(
                 'So... I will cease blocking your path further now',
                 picture = self.textures['cariel_neutral'],
             ),
             TextPage(
                 'But...',
                 picture = self.textures['cariel_neutral'],
             ),
             TextPage(
                 'If you choose to return here...',
                 picture = self.textures['cariel_neutral'],
             ),
             TextPage(
                 'Please, do not try to find me',
                 picture = self.textures['cariel_neutral'],
             ),
             TextPage(
                 'I would have a lot of work to do and...',
                 picture = self.textures['cariel_desperate'],
             ),
             TextPage(
                 '... I would have to reconsider the values in my life',
                 picture = self.textures['cariel_desperate'],
             ),
             TextPage(
                 'Such as the value of teaching a student how to use XXL...',
                 picture = self.textures['cariel_neutral'],
             ),
             TextPage(
                 '...',
                 picture = self.textures['cariel_thinking'],
             ),
             TextPage(
                 'So...',
                 picture = self.textures['cariel_neutral'],
             ),
             TextPage(
                 'Goodbye, my child! :)',
                 picture = self.textures['cariel_smiling'],
             ),
         ])