Most of the code is from the tutorial itself. Init and classes:
Code: Select all
init -1 python:
import renpy.store as store
import renpy.exports as renpy # we need this so Ren'Py properly handles rollback with classes
inv_page = 0 # initial page of teh inventory screen
item = None
filter = "1"
class Player(store.object):
def __init__(self, name, max_hp=0, max_mp=0, element=None):
self.name=name
self.max_hp=max_hp
self.hp=max_hp
self.max_mp=max_mp
self.mp=max_mp
self.element=element
class Item(store.object):
def __init__(self, name, player=None, hp=0, mp=0, element="", image="", cost=0, type=""):
self.name = name
self.player=player # which character can use this item?
self.hp = hp # does this item restore hp?
self.mp = mp # does this item restore mp?
self.element=element # does this item change elemental damage?
self.image=image # image file to use for this item
self.cost=cost # how much does it cost in shops?
self.type=type
def use(self): #here we define what should happen when we use the item
if self.hp>0: #healing item
player.hp = player.hp+self.hp
if player.hp > player.max_hp: # can't heal beyond max HP
player.hp = player.max_hp
inventory.drop(self) # consumable item - drop after use
elif self.mp>0: #mp restore item
player.mp = player.mp+self.mp
if player.mp > player.max_mp: # can't increase MP beyond max MP
player.mp = player.max_mp
inventory.drop(self) # consumable item - drop after use
else:
player.element=self.element #item to change elemental damage; we don't drop it, since it's not a consumable item
class Inventory(store.object):
def __init__(self, money=10):
self.money = money
self.items = []
def add(self, item): # a simple method that adds an item; we could also add conditions here (like check if there is space in the inventory)
self.items.append(item)
def drop(self, item):
self.items.remove(item)
def buy(self, item):
if self.money >= item.cost:
self.items.append(item)
self.money -= item.cost
def item_use():
item.use()
Code: Select all
screen inventory_screen:
add "gui/inventory.png" # the background
modal True #prevent clicking on other stuff when inventory is shown
#use battle_frame(char=player, position=(.97,.20)) # we show characters stats (mp, hp) on the inv. screen
#use battle_frame(char=dog, position=(.97,.50))
hbox align (.95,.895):
textbutton "Close Inventory" action [Hide("inventory_screen"), Show("inventory_button"), Return(None)]
$ x = 200 # coordinates of the top left item position
$ y = 25
$ i = 0
$ next_inv_page = inv_page + 1
if next_inv_page > int(len(inventory.items)/24):
$ next_inv_page = 0
for item in inventory.items:
if filter == item.type:
if i+1 <= (inv_page+1)*24 and i+1>inv_page*24:
$ x += 300
if i%6==0:
$ y += 200
$ x = 200
$ pic = item.image
$ my_tooltip = "tooltip_inventory_" + pic.replace("gui/inv_", "").replace(".png", "") # we use tooltips to describe what the item does.
imagebutton idle pic hover pic xpos x ypos y action [Hide("gui_tooltip"), Show("inventory_button"), SetVariable("item", item), Hide("inventory_screen"), item_use] hovered [ Play ("sound", "sfx/click.wav"), Show("gui_tooltip", my_picture=my_tooltip, my_tt_ypos=693) ] unhovered [Hide("gui_tooltip")] at inv_eff
if player.element and (player.element==item.element): #indicate the selected gun
add "gui/selected.png" xpos x ypos y anchor(.5,.5)
$ i += 1
if len(inventory.items)>24:
textbutton _("Turn Page") action [SetVariable('inv_page', next_inv_page), Show("inventory_screen")] xpos .475 ypos .85
Code: Select all
label start:
python:
player = Player("Derp", 100, 50)
player.hp = 50
player.mp = 10
filter = "1"
chocolate = Item("Chocolate", hp=40, image="gui/inv_chocolate.png", type="1")
banana = Item("Banana", mp=20, image="gui/inv_banana.png", type="2")
gun = Item("Gun", element="bullets", image="gui/inv_gun.png", type="3")
laser = Item("Laser Gun", element="laser", image="gui/inv_laser.png", type="4")
inventory = Inventory()
#add items to the initial inventory:
inventory.add(chocolate)
inventory.add(banana)
inventory.add(gun)
inventory.add(banana)
inventory.add(laser)
scene sidewalk
show screen inventory_button
"Me" "Lalala~"
"You found a laser gun!"
$inventory.add(gun)
$inventory.add(laser)
"The end"
Thank you!