Escolhas, Condições e Variáveis

Isso é provavelmente o mais importante em uma visual novel, lembrar as escolhas que os personagens fizeram e dar-lhes "pontos de afeto", dinheiro, entre outros. Mais fácil aprender com a mão na massa, então aqui um passo-a-passo:


1)
Dê as escolhas pro personagem, usando o comando menu , como aprendemos na parte 1. Ex:
menu:

2)
Nada novo até agora, escreva a escolha que quiser, no meu exemplo: “Comprar um Iphone”.(Não esqueça dos espaços antes, e dos dois pontos “:” no final. Em seguida dê enter, vão ficar 8 espaços na próxima linha, não apague-os. Ex:
menu:
    "Comprar um Iphone":
        
3)
Agora é a parte boa, vamos definir uma variável. Calma, é moleza. Usaremos o comando de definir “$”. Ex:
menu:
    "Comprar um Iphone":
        $ presente =

Nesse exemplo, coloquei o nome da variável de “presente”, se eu quiser modifica-la depois, esse nome que vou usar.

4)
Vamos dar um valor para essa variável. Ex:
menu:
    "Comprar um Iphone":
        $ presente = "iphone"

Pronto, agora se eu escolher a opção “Comprar um Iphone”, a variável “presente” vai ser definida como “iphone”. Se quiser, pode até adicionar algumas falas que só vão aparecer se tomar essa escolha(8 espaços antes).  Ex:
menu:
    "Comprar um Iphone":
        $ presente = "iphone"
        me "Vou levar o Iphone!"

 Pô, legal, e vou fazer o que com isso? Calma amigo, você acabou de aprender uma nova habilidade! Agora pode lembrar escolhas que seu personagem realizou! Como? Vamos continuar a história:


Como podem ver, adicionei mais 2 escolhas, em seguida, vamos direto pra label casa, onde eu peço pra minha namorada abrir o presente que eu comprei.

Hora de aprender a lembrar as escolhas. Usaremos o comando “if que significa “se” seguido do nome da variável que escolheu. Ex:
label casa:
    "Você foi para casa, levando o presente para o aniversário de sua namorada. Chegando lá, entrega para ela."
    me "Abra, Kaoru!"
    if presente == "iphone":
        namo "Oh! Eu estava querendo um desses há muito tempo! Obrigada, amor!"

Agora, temos o “==” quer dizer que se a variável “presente” for igual a “iphone”, a namorada vai dizer aquela frase(nunca esqueça a quantidade de espaços antes). Outros exemplos:



Outro exemplo:


A escolha “Vamos jogar tênis!” só irá aparecer se você comprou uma raquete.


Vamos usar outro tipo agora, com números. Continuando a historinha, vocês decidem ir pro cinema!


Mesma coisa de antes, menu, escolhas, defina a variável. Porém, não coloque o número entre aspas.

Continuando:




 Complicou agora né? Que nada.

    if dinheiro >= 20:
Só vai acontecer se a variável “dinheiro” for maior ou igual à 20. Por isso o “>=”. Se substituir por “<=” só acontece se for menor ou igual à 20.

        me "Hum... eu tenho [dinheiro] reais. Aqui está."
[dinheiro] = vai informar o valor da variável, ou seja, no jogo vai aparecer assim:
Hum... eu tenho 20 reais. Aqui está. – isto é, se você escolheu pegar todo dinheiro da carteira.

        $ dinheiro -= 20
Simples, “-=” vai diminuir 20 dos 25 que estão na variável “dinheiro”. Se substituir por “+=” vai ganhar 20.


    elif dinheiro >= 10:
Só acontece se a variável “dinheiro” for maior ou igual à 10, porém, não maior que 20.


    else:
Só acontece se nenhuma das outras condições for cumprida. Ou seja, se “dinheiro” for menor que 10.

Há centenas de maneiras de usar esses comandos, só usar a imaginação.
Vou deixar aqui o código que usei nesse tutorial, para quem quiser testar.
[Código]


Qualquer dúvida, use os comentários.

29 comentários:

  1. Nossa!! Você ensina muito bem!! Valeu por todos esses tutoriais ^_^

    ResponderExcluir
  2. esses tuto são perfeito parabéns ,queria eu que os professores na faku ensinassem assim hehehehehe xD

    ResponderExcluir
  3. Pode me ajudar? Deu esse erro:
    I'm sorry, but errors were detected in your script. Please correct the
    errors listed below, and try again.


    File "game/script.rpy", line 131: choice menuitem expects a non-empty block.
    "Desculpa, não sei o que me deu a cabeça.":
    ^

    Ren'Py Version: Ren'Py 6.99.1.329

    Isso tem a ver que eu coloquei essa escolha apenas se fez outra escolha?

    ResponderExcluir
    Respostas
    1. Depois da escolha, você tem que dar enter, mais oito espaços e colocar o que vai acontecer se escolher ela, como pular pra uma label e etc, não pode deixar vazio.

      Excluir
    2. Se ainda não conseguir, vá até o fórum, lá posso ajudar melhor.

      Excluir
    3. Encontrei o erro ^_^
      Muito obrigada e desculpa por incomodar!

      Excluir
  4. Eu já tinha feito isso, continua não funcionando :/
    Vou no fórum então, obrigada!

    ResponderExcluir
  5. Socorro, não sei mexer no fórum ;-;

    ResponderExcluir
    Respostas
    1. É só se cadastrar, e depois postar no tópico de dúvidas. Caso precise de alguma ajuda de novo, só ir lá.

      Excluir
  6. Este comentário foi removido pelo autor.

    ResponderExcluir
  7. Estou tendo problemas com esse negócio da escolha e do menu , já tentei várias vezes mas continua a mesma coisa :/ a gente clica em uma escolha aí depois a outra que a gente não clicou aparece

    ResponderExcluir
    Respostas
    1. Apenas adicione um comando return depois, assim volta pro menu principal.

      Excluir
    2. E se eu quiser continuar a história?Tem outro comando?

      Excluir
    3. E se eu quiser continuar a história?Tem outro comando?

      Excluir
  8. Este comentário foi removido pelo autor.

    ResponderExcluir
    Respostas
    1. Elas já são globais. Podem ser usadas em qualquer label dentro do mesmo script.

      Excluir
    2. Ok, eu ja consegui consertar o erro, obrigado ^^

      Excluir
  9. Oi, eu de novo >.> então, você me disse que as variáveis eram globais. Eu criei uma variável chamada lucasaf antes da label start, e tentei chamar ela em outra label para alterar o seu valor, dá esse erro:

    [code]
    I'm sorry, but an uncaught exception occurred.

    While running game code:
    File "game/script.rpy", line 249, in script
    $ lucasaf -= 3
    File "game/script.rpy", line 249, in
    $ lucasaf -= 3
    NameError: name 'lucasaf' is not defined

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

    Full traceback:
    File "game/script.rpy", line 249, in script
    $ lucasaf -= 3
    File "D:\Users\HUGO\Desktop\Ren'Py engine\renpy\ast.py", line 805, in execute
    renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
    File "D:\Users\HUGO\Desktop\Ren'Py engine\renpy\python.py", line 1641, in py_exec_bytecode
    exec bytecode in globals, locals
    File "game/script.rpy", line 249, in
    $ lucasaf -= 3
    NameError: name 'lucasaf' is not defined

    Windows-7-6.1.7601-SP1
    Ren'Py 6.99.11.1749
    Gondate 1.0
    [/code]

    ResponderExcluir
    Respostas
    1. Variáveis criadas antes de label start precisam estar dentro de init: por isso. Experimente criar logo após o label start, então poderão ser usadas em todas as labels seguintes.

      Excluir
  10. Você pode me tirar uma dúvida? Como eu coloco um menu dentro de outro menu sem prejudicar as outras escolhas? Tipo, meu código tá assim:

    ---------------------//------------------
    "O Impressionismo é uma era pós-tradicionalismo, que usava formas e cores baseadas na luz solar nos objetos.": #faz parte do menu1
    lins "tá certo"
    lais "A gente precisa estudar mais matéria"
    menu: #agora esse é o menu2
    "Lais sinceramente eu to tacando o foda-se pra escola, o ano ta acabando a gente vai passar relaxa":
    $ laisaf -= 5
    lais "Porra Yve, a gente precisa estudar mano, o cara mesmo falou"
    menu: #esse o 3
    "Lais sinceramente eu to tacando o foda-se pra escola, o ano ta acabando a gente vai passar relaxa":
    lais "poxa"
    $ laisaf -= 5
    "Aff ta bom vamos":
    lais "agora vamos pro expressionismo"
    "Tá bom Lais vamo":
    $ laisaf += 3
    lais "Vai ser melhor mesmo"

    "Não sei": #faz parte do menu1, mas essa escolha não aparece no jogo
    lins "Como assim"
    ---------------------//------------------

    A última escolha do menu1 não aparece, eu colo um menu dentro de outro menu e as escolhas do primeiro menu não aparecem, só algumas, como arruma isso?

    ResponderExcluir
    Respostas
    1. Não tem como colocar menu dentro de menu. Assim que você começar outro, já não é possível adicionar opções para o primeiro.

      Excluir
    2. Já que não tem como, acho que a solução é criar labels mesmo

      Excluir
  11. Tem como deixar a variável pra verem? (Ex.: quero colocar no canto da tela quando dinheiro ou afinidade com tal personagem vc tem)

    ResponderExcluir
  12. Este comentário foi removido pelo autor.

    ResponderExcluir
  13. Eu gostaria de saber como se faz para deixar mais de uma escolha do jogador influenciar nas interações e final do jogo (Exemplo: certas escolhas dão uma interação diferente de outras durante o jogo, além de que, em um final, há coias diferentes de outros finais... Eu gostaria de saber como se faz isso.)

    ResponderExcluir
    Respostas
    1. Simplesmente crie variáveis do tipo: final ruim, final bom, e a cada escolha aumenta pontos nessas variaveis. Feito isso, pode checar com "if" essas variaveis para saltar para labels determinadas.

      Excluir
  14. Opa! Beleza?
    Mano, eu usei esse código aqui pra exibir as variáveis do meu personagem na tela. mas eu queria só na tela principal, e que ela ficasse oculta nas outras. Pode me ajudar?

    init -1 python :

    def stats_overlay():
    ui.vbox(xalign = 0.125, yalign = 0.022) # Mude os valores de xalign e yalign para modificar o local da variável
    ui.text ("{size=12}Johnah")

    ui.close()
    config.overlay_functions.append(stats_overlay)

    exDinheiro = False # definir sua variável = False
    def stats_overlay():
    if exDinheiro >=0:
    ui.vbox(xalign = 0.276, yalign = 0.025) # Mude os valores de xalign e yalign para modificar o local da variável
    ui.text ("{size=12}R$%d{/size}" %exDinheiro)

    ui.close()

    config.overlay_functions.append(stats_overlay)

    ResponderExcluir