jueves, 28 de febrero de 2013

[Renpy] Inventario sencillo en pantalla

Este código añade un simple inventario de items que permanecerá en pantalla hasta que se asigne a la variable: $ showitems = False

init python:   
    showitems = True
   
    def display_items_overlay():
        if showitems:
            inventory_show = "Inventario: "
            for i in range(0, len(items)):
                item_name = items[i].title()
                if i > 0:
                    inventory_show += ", "
                inventory_show += item_name
            ui.frame()
            ui.text(inventory_show)
    config.overlay_functions.append(display_items_overlay)

##
$ items.append("piedra") #cuando quieras añadir items
$ items.remove("piedra")#cuando quieras remover items
$ showitems = False #cuando no quieras mostrar el inventario en pantalla (cutscenes, etc)
$ showitems = True #cuando quieras mostrar el inventario de nuevo


Con algunos cambios podemos usar este código para mostrar la cantidad de dinero que tengamos o un "Medidor de afecto" en juegos en los que nos sea útil.

Medidor de afecto

init python:
    showaffection= False
    affection = 0
    def display_affection():
        if showaffection:   
            ui.frame() #Esto es opcional. Añade una ventana alrededor del texto.
            ui.text("Afecto: %d" %affection)
    config.overlay_functions.append(display_affection)

###

$ showaffection = False #Oculta la caja de "Afecto"
$ affection +=5 #Añade 5 puntos de afecto a la puntuación de afecto actual
$ affection -=5 #Del mismo modo, resta 5 puntos de afecto a la puntuación de afecto actual. 

Un contador de dinero es prácticamente lo mismo

init python:
    showmoney= False
    money = 0
    def display_affection():
        if showmoney:   
            ui.frame() #This is optional. It adds a frame around the text.
            ui.text("$ %d" %money)
    config.overlay_functions.append(display_money)

###

$ showmoney = False #Oculta la caja de "Dinero"
$ money +=5 #Añade 5$ a la puntuación actual
$ money -=5 #Resta 5$ a la puntuación actual this subtracts $5 from the current score
Esta es una traducción del texto que se puede encontrar en la wiki de Renpy en la siguiente dirección: http://www.renpy.org/wiki/renpy/doc/cookbook/Simple_Onscreen_Inventory

3 comentarios:

  1. y donde pongo el codigo?....en script.rpy? o en screen.rpy?

    ResponderEliminar
  2. lo puse y me marca este error:

    I'm sorry, but an uncaught exception occurred.

    While running game code:
    File "game/script.rpy", line 67, in script
    n "Estas a punto de poder tener una cita.!!
    File "game/script.rpy", line 9, in display_items_overlay
    for i in range(0, len(items)):
    NameError: global name 'items' is not defined

    -- Full Traceback ------------------------------------------------------------

    Full traceback:
    File "game/script.rpy", line 67, in script
    n "Estas a punto de poder tener una cita.!!
    File "C:\Users\sebastian\Documents\renpy-6.18.3-sdk\renpy\ast.py", line 593, in execute
    renpy.exports.say(who, what, interact=self.interact)
    File "C:\Users\sebastian\Documents\renpy-6.18.3-sdk\renpy\exports.py", line 999, in say
    who(what, interact=interact)
    File "C:\Users\sebastian\Documents\renpy-6.18.3-sdk\renpy\character.py", line 826, in __call__
    self.do_display(who, what, cb_args=self.cb_args, **display_args)
    File "C:\Users\sebastian\Documents\renpy-6.18.3-sdk\renpy\character.py", line 688, in do_display
    **display_args)
    File "C:\Users\sebastian\Documents\renpy-6.18.3-sdk\renpy\character.py", line 491, in display_say
    rv = renpy.ui.interact(mouse='say', type=type, roll_forward=roll_forward)
    File "C:\Users\sebastian\Documents\renpy-6.18.3-sdk\renpy\ui.py", line 247, in interact
    rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
    File "C:\Users\sebastian\Documents\renpy-6.18.3-sdk\renpy\display\core.py", line 2149, in interact
    repeat, rv = self.interact_core(preloads=preloads, **kwargs)
    File "C:\Users\sebastian\Documents\renpy-6.18.3-sdk\renpy\display\core.py", line 2278, in interact_core
    self.compute_overlay()
    File "C:\Users\sebastian\Documents\renpy-6.18.3-sdk\renpy\display\core.py", line 1919, in compute_overlay
    i()
    File "game/script.rpy", line 9, in display_items_overlay
    for i in range(0, len(items)):
    NameError: global name 'items' is not defined

    Windows-post2008Server-6.2.9200
    Ren'Py 6.18.3.761
    practicas 0.0


    Ayudame!!!!!

    ResponderEliminar
  3. Anónimo, el código se pondría en script.rpy.

    Arath, falta declarar la variable item de la siguiente forma antes del código:

    $ items = []

    En cualquier caso, este código se ejecutaba en versiones muy antiguas de Renpy. En la actualidad, con la salida de nuevas versiones del software, creo que han cambiado algunas cosas y no estoy seguro de que funcionara.

    Gracias por la visita.

    ResponderEliminar

Speak freely, friend.

Backside Games Studios

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