Page 1 of 1

[SOLVED] Failing at adding variables in a search items mini-game

Posted: Wed Feb 26, 2020 1:49 pm
by Venecho
Hi!

I've found, in the cookbook section, a free to use search items mini-game, and I wanted to use the base code to create a mini game when you can take care of your pets by simply clicking on some part of the screen (clicking on a fork clean the place, clicking on a manger feed them, etc.)

So, I thought I would use variables for that : when you click on a certain spot, it changes the variable's value.

The thing is, I know almost nothing in python, and I just can't seem to make it work. That's why I'm asking here for your help today.

Here's what the script.rpy file looks like :

Code: Select all

image bg locker = "locker_empty.png"

init python:
    locker_items = []
    locker_items.append(Item("Food", 240,454,56,101))
    locker_items.append(Item("Clean",189,112,167,63))
    locker_items.append(Item("Pet 1",528,73,91,129))
    locker_items.append(Item("Pet 2",515,296,98,99))

##
# The game starts here.
label start:

    $ foodg = 0

    $ start = renpy.time.time()
    # this sets all the items back to not found
    $ resetItems(locker_items)
    # which image set to use
    $ hidden_files = "locker_%s.png"
    # randomize the list and pick 5 items
    $ hidden_items = renpy.random.sample(locker_items,4)
    # set number of hints
    $ num_hints = 3
    # set number of extra clicks
    $ num_clicks = 0


    scene bg locker
    "Test" "test"

    $ showitems = True
    call screen hidden_object

label result:

    if foodg == 1:
        "test" "animals fed"
    else:
        "test" "animals not fed"

return
and here's the hidden_code.rpy associated:

Code: Select all

init python:
    class registerClick(Action):
        def __call__(self):
            global num_clicks
            num_clicks += 1
            renpy.restart_interaction()


    class getHint(Action):
        def __call__(self):
            global num_hints
            num_hints -= 1
            for index,i in enumerate(hidden_items):
                if i.found == False and i.hint == False:
                    i.hint = True
                    break
            renpy.restart_interaction()

        def get_sensitive(self):
            global num_hints
            return num_hints > 0

    class SetItem(Action):

        def __init__(self, object, field, value):
            self.object = object
            self.field = field
            self.value = value

        def __call__(self):
            setattr(self.object, self.field, self.value)
            renpy.restart_interaction()

        def get_selected(self):
            return getattr(self.object, "hint") == True

    class Item:
        def __init__(self, name, x,y,w,h,hint=False):
            self.name = name
            self.x = x
            self.y = y
            self.w = w
            self.h = h
            self.found = False
            self.hint = hint

    showitems = False


    def is_all_found():
        for i in hidden_items:
            if i.found == False:
                return False
        return True

    def resetItems(in_items):
        for i in in_items:
            i.found = False

screen hidden_object:
    tag hidden

    imagemap:
        auto hidden_files
        cache False
        imagebutton auto "empty_%s.png" action registerClick()
        for index, item in enumerate(hidden_items):
            hotspot (item.x,item.y,item.w,item.h) action If(hidden_items[index].found==False, SetItem(hidden_items[index],"found",True), None)
        if locker_items[1]==True:
            $ foodg = 1
        textbutton "Done" xalign 1.0 yalign 0.1 action Jump("result")
As you can see, I tried to change foodg value here :

Code: Select all

 if locker_items[1]==True:
            $ foodg = 1
I tried many things but I think I'm just not comprehending python enough do that on my own.

Thank you for taking the time to read it all, and thank you in advance if you decide to help me!

(and sorry for the broken english, it's not my native language, I'm trying my best!)

Re: Failing at adding variables in a search items mini-game

Posted: Wed Feb 26, 2020 4:32 pm
by Alex
If you need some active parts of screen, then try imagemap or a number of imagebuttons - they are suit well for player's interaction with the game.

Check tutorial game - section about screens and screen language, and some documentation
https://www.renpy.org/doc/html/screens.html
https://www.renpy.org/doc/html/screens. ... statements
https://www.renpy.org/doc/html/screens.html#imagebutton
https://www.renpy.org/doc/html/screen_actions.html

Also, this might help you too - viewtopic.php?f=51&t=18047

Re: Failing at adding variables in a search items mini-game

Posted: Thu Feb 27, 2020 4:06 am
by Venecho
So, you think I should start from scrap again because this code isn't appropriate for what i'm trying to do?
I'm very new to this so using the previous code seemed easier - well, if you tell me there's no way I can make this code work, I'll try understanding screens then!

Thanks for all the links and your help!

Re: Failing at adding variables in a search items mini-game

Posted: Thu Feb 27, 2020 2:39 pm
by gas
Some more hint.

Create all the needed variables and assign them a default value (you can change it later).
Create a loop (that's mean a label that jump back on itself, or exit away on an input)
Call a screen with interaction buttons, that Return() an action.
Have your code manage the Return() value (for example, determine the clean if the action Return("clean"))


A very proxy code to indepth:

Code: Select all

label grooming:
    call screen dog_grooming
    $ act = _return
    if act == "clean":
        # do something
    if act == "play":
        # do something
    if act == "exit":
        jump away # go to another label and end the minigame
    jump grooming

screen dog_grooming():
    vbox:
        imagebutton auto "clean_%s.png" action Return("clean")
        imagebutton auto "play_%s.png" action Return("play")
        imagebutton auto "exit_%s.png" action Return("exit")

Re: Failing at adding variables in a search items mini-game

Posted: Sat Feb 29, 2020 12:43 am
by Venecho
Thank you so very much!

Thanks to your code (which I reshaped a bit, using while as you suggested and ui.imagebutton) and the tutorials Alex provided, I managed to write a script that works perfectly (and now, I understand screens, so that's definitely for the better).

Again, thank you both for your time and effort, it was really much appreciated!