martes, 5 de marzo de 2013

[Renpy] Usar el Código Konami en nuestros juegos

Este código ejecuta la etiqueta konami_code cuando se introduce el Código Konami desde el teclado. El código consiste en la siguiente secuencia de teclas:

Arriba
Arriba
Abajo
Abajo
Izquierda
Derecha
Izquierda
Derecha
b
a

Es fácil cambiar el código y la etiqueta asignada a él.


# Este código añade fácilmente el Código Konami a tu juego Ren'Py. Cuando
# el Código Konami (arriba arriba abajo abajo izquierda derecha izquierda derecha a b) ha 
# sido introducid, se llama a la etiqueta konami_code (en un nuevo contexto de forma
# que el estado actual del juego no se pierde.

init python hide:

    class KonamiListener(renpy.Displayable):

        def __init__(self, target):

            renpy.Displayable.__init__(self)

            import pygame
            
            # La etiqueta a la que saltamos cuando usamos el Código Konami.
            self.target = target

            # Este es el índice (en self.code) de la tecla que
            # esperamos.
            self.state = 0

            # El código mismo.
            self.code = [
                pygame.K_UP,
                pygame.K_UP,
                pygame.K_DOWN,
                pygame.K_DOWN,
                pygame.K_LEFT,
                pygame.K_RIGHT,
                pygame.K_LEFT,
                pygame.K_RIGHT,
                pygame.K_b,
                pygame.K_a,
                ]

        # Esta función "escucha" en busca de eventos.
        def event(self, ev, x, y, st):
            import pygame

            # Solo nos preocuparemos de eventos de tecla pulsada (KEYDOWN).
            if ev.type != pygame.KEYDOWN:
                return

            # Si no es la tecla que queremos, volvemos al principio de
            # la máquina de estados.
            if ev.key != self.code[self.state]:
                self.state = 0
                return

            # En otro caso, ve al siguiente estado.
            self.state += 1

            # Si estamos al final del código, entonces llamamos a la etiqueta objetivo en
            # el nuevo contexto. (Después reseteamos la máquina de estados.)
            if self.state == len(self.code):
                self.state = 0
                renpy.call_in_new_context(self.target)

            return

        # Devuelve un pequeño render vacío, de forma que podremos conseguir eventos.
        def render(self, width, height, st, at):
            return renpy.Render(1, 1)


    # Crea un KonamiListener para "escuchar" el código.
    store.konami_listener = KonamiListener('konami_code')

    # Esto añade konami_listener a cada interacción.
    def konami_overlay():
        ui.add(store.konami_listener)

    config.overlay_functions.append(konami_overlay)


# Se llama en un nuevo contexto cuando el código Konami es usado.
label konami_code:

    "¡Acabas de ganar 30 vidas extra!"

    "Aunque puede que no sean muy útiles en un juego de citas. ¡Bien por ti!"

    return


0 comentarios:

Publicar un comentario

Speak freely, friend.

Backside Games Studios

Backside Games Studios © 2014 - Designed by Templateism.com, Plugins By MyBloggerLab.com | Published By Gooyaabi Templates