Br:Tutorial Plotscripting

From OHRRPGCE-Wiki
Jump to navigation Jump to search

PlotScripting (Construção de Enredo) - tutorial para iniciantes

O que é plotscripting? Pela perspectiva mais simples plotscripting é onde o computador toma controle dos personagens em seu RPG, move-os sozinhos, e os faz dizer coisas. Qualquer um que tenha jogado RPGs populares como Final Fantasy terá familiaridade com este conceito.

Plotscripting é atualmente capaz de fazer mais que isto, igualmente permitindo que você crie quebra-cabeças, mini-games, e efeitos especiais em seu jogo, mas este tipo de coisa não é coberto neste tutorial. Pessoas que quiserem usar linguagem de programação com características de plotscripting devem ler o Dicionário de Comandos PlotScripting e o Especificação HamsterSpeak


Iniciando[edit]

Antes de tudo, você precisa ter certeza de que você tem a última versão do OHRRPGCE (que você pode baixar na seção de downloads). Versões mais antigas que Novembro de 1999 não possuem plotscripting.

Certo. Este tutorial vai guiá-lo através da escrita de um script, compilando-o com HSPEAK.EXE, importando-o no CUSTOM.EXE, dizendo a seu arquivo RPG quando e onde rodá-lo, e testando o script finalizado no GAME.EXE. Os exemplos usarão o PSTUTOR.RPG (incluído no CUSTOM.ZIP) mas se você já tiver um arquivo RPG em progresso, você pode querer adaptar estas instruções para seu próprio jogo. Estes exmplos assumirão que você instalou o O.H.R.RPG.C.E em C:\OHRRPGCE\ se você o colocou em algum outro lugar, apenas substitua seu diretório nos exemplos.

Para ter certeza que você tem o OHRRPGCE instalado e rodando certo, execute GAME.EXE e selecione PSTUTOR.RPG da lista. Pressione uma tecla para pular a tela de título , e você deve ver um pequeno robô aparentemente tonto parado em uma pequena plataforma no espaço. Este é o arquivo no qual você vai adicionar plotscripts conforme você segue este tutorial. Pressione ESC e saia.


Criando um Arquivo de Script[edit]

Plotscripts são apenas textos planos que você pode criar com qualquer editor de textos, mas você provavelmente vai querer usar HssEd, que possui ajuda embutida, e fácil compilação. Há também um editor terceirizado feito por IronHoof7. Ambos os editores são para Windows apenas, então se você é um usuário DOS, eu recomendo usar o EDIT.COM para escrever seus scripts.

Abra um novo arquivo texto no editor, e salve-o como C:\OHRRPGCE\PSTUTOR.HSS A extensão .HSS significa Script do HamsterSpeak . (isto é apenas sugestão. Você pode usar qualquer extensão que quiser, mesmo .TXT)

No topo de seu script, digite as duas linhas seguintes:

 include, plotscr.hsd
 include, pstutor.hsi

plotscr.hsd possui as definições de todos os comandos Plotscripting. pstutor.hsi contém informaçães sobre PSTUTOR.RPG. Este tutorial vai explicar mais tarde como criar um arquivo HSI (HamsterSpeak Include)


Seu Primeiro Script[edit]

Certo, agora é hora de escrever um script. O primeiro passo é definir o script.

 include, plotscr.hsd
 include, pstutor.hsi

 define script (1,Hello World,none)

Isto diz ao compilador que o número ID de seu script é 1, e ele será chamado "Hello World" e que ele não necessita de nenhum argumento. (argumentos serão explicados depois)

Agora, você escreve o corpo do script.

 include, plotscr.hsd
 include, pstutor.hsi

 define script (1,Hello World,none)

 script, Hello World, begin
 show text box (1)
 end

Este script possui apenas um comando, "show text box". Quando o script é ativado, ele vai mostrar a caixa de texto numerada entre parênteses (1) como se você tivesse falado com um NPC. (Caixa de Texto 1 no PSTUTOR.RPG já foi feita para você, e tudo que ela diz é "Hello world!")

Salve seu script


Compilando seu Script[edit]

Agora é hora de compilar seu plotscript. Isto pega o script que você acabou de escrever, e o converte em um arquivo binário que pode ser usado pelo OHRRPGCE.

Se você estiver usando o HssEd, pressione F5 ou escolha "Compile" do menu "Script". (A primeira vez que você faz isto, ele deve pedir para você localizar HSPEAK.EXE, mas uma vez que você o tenha localizado, HssEd vai lembrar onde ele está)

Se você estiver usando DOS, ou um prompt do DOS no Windows, vá para C:\OHRRPGCE e digite: HSPEAK PSTUTOR.HSS

Se você for uma daquelas pessoas apontar-e-clicar:

  • use o Windows Explorer ou Meu Computador para abrir a pasta OHRRPGCE no drive C:
  • Dê um clique duplo em PSTUTOR.HSS
  • A janela "Abrir com" vai aparecer, perguntando qual aplicação você quer usar para arquivos .HSS
  • Clique "outros" e digite o caminho para HSPEAK.EXE (provavelmente C:\OHRRPGCE\HSPEAK.EXE)
  • Clique "OK", Tenha certeza que o "Usar sempre este programa para abrir esse arquivo" está checada, e clique "OK" novamente
  • Da próxima vez, tudo que você precisa fazer é dar um duplo clique no arquivo HSS
  • Outro truque do Windows que têm o mesmo resultado é arrastar e soltar seu arquivo HSS no HSPEAK.EXE

Agora, você deve ter um arquivo chamado PSTUTOR.HS. Este é o plotscript compilado.


Importando seu Script no CUSTOM.EXE[edit]

Agora é hora de importar seu script para seu RPG.

Execute CUSTOM.EXE e abra PSTUTOR.RPG Do menu principal, escolha Script Management Escolha Import Compiled Plotscripts Encontre PSTUTOR.HS no visualizador de arquivos Quando você escolhe PSTUTOR.HS, você vai ver o nome do script, "helloworld", e ele vai dizer "1 script imported sucessfully" Não saia do CUSTOM.EXE ainda, nós precisamos fazer alguma coisa chamar o script


Chamando seu Script[edit]

Então quando seu script vai funcionar? Há várias maneiras de chamar um script em seu RPG. Você pode fazer seu script funcionar automaticamente quando você começa um novo jogo, quando você entra em um mapa, quando você fala com um NPC, quando você usa um item, quando você morre em batalha, quando você usa uma hospedaria, e possivelmente alguns outros lugares que eu não implementei ainda ou não consiga lembrar :)

Para o momento, nós vamos usar o script de auto-funcionamento que funciona quando você começa um novo jogo

Do menu principal em CUSTOM.EXE, pegue Edit General Game Data Pegue Special Plotscripts Para new game script escolha helloworld Saia, e salve suas mudanças no PSTUTOR.RPG


Rodando seu Script[edit]

Execute GAME.EXE Abra PSTUTOR.RPG Pressione qualquer tecla quando preparado Conforme você começa, o script vai rodar, e você vai ver imediatamente a caixa de texto "Hello World" Congratulações! Você acaba de rodar seu primeiro plotscript! "Mas isto é tão maçante!" você diz. Bem, leia adiante. Vamos fazer seu script mais interessante


Fazendo o Herói Andar[edit]

Mostrar caixas de texto é bom e apropriado, mas você pode fazer isto sem plotscripting. Agora vamos tentar fazer algo que você não pode fazer sem plotscripting; fazendo seu herói se mover em um padrão pré-definido.

 include, plotscr.hsd
 include, pstutor.hsi

 define script (1,Hello World,none)

 script, Hello World, begin
 show text box (1)
 wait for text box
 walk hero (me,north,3)
 wait for hero (me)
 set hero direction (me,south)
 end

Adicione estes quatro novos comandos para seu script "Hello World". Isto é o que os comandos fazem:

  • show text box (1) mostra uma caixa de texto, como antes
  • wait for text box espera que você aperte uma tecla para avançar a caixa de texto
  • walk hero (me,north,3) faz seu herói andar três espaços para o norte. me é um nome especial que se refere ao seu herói principal
  • wait for hero (me) espera o herói principal (me) terminar de andar
  • set hero direction (me,south) faz o herói principal olhar para o sul


Salve as mudanças em seu script. Recompile seu script. Desta vez, HSPEAK.EXE vai perguntar se você quer sobrescrever o arquivo PSTUTOR.HS. Aperte Y para sim. Execute CUSTOM.EXE e abra PSTUTOR.RPG Do menu principal, escolha Script Management Escolha Import Compiled Plotscripts Escolha PSTUTOR.HS no visualizador de arquivos Saia, e salve as mudanças em PSTUTOR.RPG Execute GAME.EXE e abra PSTUTOR.RPG Depois que começar, a caixa de texto "Hello World" vai surgir, e depois que você apertar um tecla, o herói vai andar para o norte, e então virar em sua direção.


Interrompendo Controles Normais[edit]

Tente executar seu script novamente, mas desta vez, aperte esquerda ou direita conforme o robô se move. Como você pode ver, o jogador pode interferir com o plotscript. Como nós evitamos isto?

Volte para seu plotscript, e adicione os seguintes comandos:

 include, plotscr.hsd
 include, pstutor.hsi

 define script (1,Hello World,none)

 script, Hello World, begin
 suspend player
 show text box (1)
 wait for text box
 walk hero (me,north,3)
 wait for hero (me)
 set hero direction (me,south)
 resume player
 end

O comando suspend player no início evita que o jogador mova o herói ou acesse o menu. Isto bloqueia efetivamente todos os controles do jogador (exceto que ele ainda os permitem avançarem caixas de texto). O comando resume player no fim de seu script devolve o controle do herói ao jogador. Quase todo script que você escrever vai começar com suspend player, e terminar com resume player

Agora recompile seu script, reimporte-o, e teste ele de novo. Desta vez, você não vai poder interferir quando o robô andar três espaços para o norte.


Começando um Script com um NPC[edit]

Provavelmente a maneira mais comum pela qual você vai querer começar seus scripts é falando com NPCs. Vamos adicionar um novo script, e mostrar a você como começá-lo com um NPC

Defina um novo script chamado "Robot Dance"

 include, plotscr.hsd
 include, pstutor.hsi

 define script (1,Hello World,none)
 define script (2,Robot Dance,none)

 script, Hello World, begin
 suspend player
 show text box (1)
 wait for text box
 walk hero (me,north,3)
 wait for hero (me)
 set hero direction (me,south)
 resume player
 end

Agora, vamos escrever o script.

 include, plotscr.hsd
 include, pstutor.hsi

 define script (1,Hello World,none)
 define script (2,Robot Dance,none)

 script, Hello World, begin
 suspend player
 show text box (1)
 wait for text box
 walk hero (me,north,3)
 wait for hero (me)
 set hero direction (me,south)
 resume player
 end

 script, Robot Dance, begin
 suspend player
 walk NPC (0,west,1)
 wait for NPC (0)
 walk NPC (0,east,2)
 wait for NPC (0)
 walk NPC (0,west,1)
 wait for NPC (0)
 set NPC direction (0,north)
 wait (4)
 set NPC direction (0,east)
 wait (4)
 set NPC direction (0,south)
 resume player
 end

Olhe os comandos que este script utiliza. NPC zero (o primeiro NPC) vai andar para a esquerda, então para a direita, então de volta para o centro, e depois girar em um círculo. Os comandos wait (4) são para ter certeza de que ele não vai girar tão rápido que você não possa ver isto acontecer.

Recompile o script, E importe-o em PSTUTOR.RPG. Desta vez, quando você importar o arquivo .HS, CUSTOM.EXE vai dizer a você que importou com sucesso 2 scripts, e ele vai mostrar os nomes "helloworld" e "robotdance"

Agora, volte para o menu principal escolha Edit Map Data escolha Map 00 escolha Edit NPCs Eu já criei o NPC 0 para você. Ele é o que tem pés verdes. Escolha ele, e edite suas propriedades Observe que ele possui uma walking speed de 4 mesmo que seu movement type seja "stand still". Isto é porque o comando Walk NPC não vai funcionar em um NPC com velocidade 0 Mude sua propriedade Run Script: de [none] para "robotdance" Aperte ESC duas vezes para sair do editor de NPC Escolha Place NPCs e coloque o robô de pés verdes em algum lugar da plataforma Saia, e salve as mudanças em PSTUTOR.RPG Execute GAME.EXE, abra PSTUTOR.RPG, e fale com o NPC O robô de pés verdes deve fazer uma dança quando você fala com ele


Deixando seu Script Fácil de Ler[edit]

Conforme um script torna-se maior, ele pode ficar difícil de ler. Para fazer as coisas mais fáceis para você, você pode adicionar comentários, entradas, e espaços para tornar seu script mais limpo.

Comentários são notas para você mesmo que o lembram como seu script funciona. Comentários são ignorados pelo compilador. Para fazer um comentário, apenas comece uma linha com um #

 # Este é meu script de treino. É para utilizar com o PSTUTOR.RPG

 include, plotscr.hsd
 include, pstutor.hsi

 define script (1,Hello World,none)
 define script (2,Robot Dance,none)

 #---------------------------------------------
 #este script faz o robô dizer "Hello World"
 #e então andar três espaços para o norte

 script, Hello World, begin
   suspend player
   show text box       (1)
   wait for text box
   walk hero           (me,north,3)
   wait for hero       (me)
   set hero direction  (me,south)
   resume player
 end

 #---------------------------------------------
 #Este script faz um NPC dançar

 script, Robot Dance, begin
   suspend player
   walk NPC            (0,west,1)
   wait for NPC        (0)
   walk NPC            (0,east,2)
   wait for NPC        (0)
   walk NPC            (0,west,1)
   wait for NPC        (0)
   set NPC direction   (0,north)
   wait                (4)
   set NPC direction   (0,east)
   wait                (4)
   set NPC direction   (0,south)
   resume player
 end

Aí. Agora não é mais fácil de olhar?


Dando argumentos a um script[edit]

Argumentos são uma maneira de passar informação extra para um script. Eu sei que isto é um nome estúpido, mas isto é uma coisa de programação, então o que você esperava? :)

E se você quiser poder fazer vários NPCs diferentes fazerem a dança NPC? Da maneira que temos o Robot Dance escrito agora, o script vai apenas funcionar no NPC número 0. E se Nós quisermos que os NPCs 1, 2 e 3 façam a mesma dança quando você fala com eles? Teríamos que fazer três cópias do script e dar a cada um deles novos nomes e números ID? Não. Este seria uma maneira muito trabalhosa. O que nós queremos fazer é dar um argumento ao script Robot Dance.

 # Este é meu script de treino. É para utilizar com o PSTUTOR.RPG

 include, plotscr.hsd
 include, pstutor.hsi

 define script (1,Hello World,none)
 define script (2,Robot Dance,1,0)
 # o Robot Dance possui 1 argumento que é 0 por padrão se for deixado vazio

 #---------------------------------------------
 #este script faz o robô dizer "Hello World"
 #e então andar três espaços para o norte

 script, Hello World, begin
   suspend player
   show text box       (1)
   wait for text box
   walk hero           (me,north,3)
   wait for hero       (me)
   set hero direction  (me,south)
   resume player
 end

 #---------------------------------------------
 #Este script faz um NPC dançar

 script, Robot Dance, who, begin
 # o nome do argumento é "who"
   suspend player
   walk NPC            (who,west,1)
   wait for NPC        (who)
   walk NPC            (who,east,2)
   wait for NPC        (who)
   walk NPC            (who,west,1)
   wait for NPC        (who)
   set NPC direction   (who,north)
   wait                (4)
   set NPC direction   (who,east)
   wait                (4)
   set NPC direction   (who,south)
   resume player
 end

Recompile seu script, e reimporte-o em CUSTOM.EXE Vá até o editor de mapas e pegue Map 00 Vá no editor de NPC, e veja o robô de pés verdes Logo abaixo do nome do script que ele executa, você vai ver um número para o Script Argument. Qualquer valor que você colocar ali será usado como o argumento who no script. O robô de pés verdes deve usar 0 como seu argumento porque ele é o NPC número 0 Edite o segundo NPC, número 1. Dê a ele o script Robot Dance, e deixe seu argumento como 1 Coloque o novo NPC no mapa Saia de CUSTOM.EXE e salve Carregue PSTUROR.RPG em GAME.EXE e teste ambos os NPCs. Desde que os dois usam extamente o mesmo script, o argumento permite a um script fazer duas coisas levemente diferentes.


Outras Maneiras de Iniciar um Script[edit]

Até agora você sabe como começar um script como o script "New-game" para seu RPG, e falando com um NPC, mas há muitas outras maneiras de disparar plotscripts em seu jogo. Aqui está uma lista.

Script de Novo Jogo (New-Game Script) Em "Special Plotscripts" no editor "General Game Data" você pode ajustar o script que vai rodar sempre que você começar um novo jogo. Isto é excelente para contar a história, mostrando uma sequência de introdução, definindo o grupo inicial, e equipando seus heróis com o equipamento inicial

Script de Fim de Jogo (Game-Over Script) Em "Special Plotscripts" no editor "General Game Data" você pode ajustar o script "Game-over". Normalmente quando você morre em batalha, o jogo volta para a tela de título, mas se você tiver definido um script de fim de jogo, então ele será executado. Talvez você queira restaurar à vida os heróis mortos com o comando set hero stat. Talvez você queira mostrar uma tela de "game over" com o show backdrop antes de resetar o jogo com o comando game over (que pode ser chamado de qualquer plotscript, não apenas de plotscript de fim de jogo). Ou talvez você queira usar declarações if e fazer coisas diferentes dependendo do valor de etiquetas.

Script de carregamento de Jogo (Load-Game Script) em "Special Plotscripts" no editor "General Game Data" você pode definir um script que será executado sempre que o jogador carregar um jogo salvo. Se você escrever seu script para aceitar um argumento, será passado o número do slot do qual o jogador carregou o jogo, de 0,2,3, ou 4. (ou -1 se você carregar um jogo de debug salvo com F3)

Scripts de Caixa de Texto (Text Box Scripts) No editor de caixa de texto você pode selecionar um script que vai ser executado depois da caixa de texto. Se você editar as condicionais da caixa de texto você terá um pouco mais de controle sobre este script. Você o faz rodar dependendo de uma etiqueta, e você pode fazê-lo rodar ao invés da caixa de texto em vez de depois da caixa de texto.

Scripts de Itens (Item Scripts) Já que você não pode chamar um script diretamente de um item, você pode chamar uma caixa de texto do item, e anexar o script àquela caixa de texto

Scripts de NPC (NPC Scripts) No editor de NPC você pode associar um script para ser disparado com um NPC. Você também tem a opção de associar um argumento que será passado àquele script. Também, se seu script está definido para aceitar um segundo argumento, ele vai passar automaticamente uma NPC reference

Script de Veículos (Vehicle Scripts) No editor de veículos você pode associar scripts que irão rodar quando você montar o veículo, quando você desmontar o veículo, ou quando você pressionar o botão de uso or cancelar

Script de Hospedaria (Inn Script) No editor de lojas, você pode definir um script que vai rodar quando você dormir na hospedaria.

Script automático de Mapa (Map Autorun Script) No menu "General Map Data" do editor de Mapa, você pode definir um script que vai rodar automaticamente sempre que você entrar em um mapa. Você pode também associar um argumento para ser passado para este script

Script Pós-Batalha (After-Battle Script) No menu "General Map Data" do editor de Mapa, você pode definir um script que vai rodar depois de cada batalha no mapa. Ele vai automaticamente passar um argumento com um valor de verdadeiro se você vencer a batalha e falso se você morrer ou fugir

Script ao Invés de Batalha (Instead-of-Battle Script) No menu "General Map Data" do editor de Mapa, você pode definir um script que vai rodar sempre que uma batalha aleatória deveria acontecer. Ele automaticamente adquire dois argumentos passados a ele, o primeiro é o número da formação de batalha que você deveria enfrentar (no caso de você querer ir em frente e disparar a batalha de seu script com o comando fight formation), e o segundo argumento é o número do conjunto de formação de batalha do qual a batalha aleatória foi escolhida.

Script de Passo (Each-Step Script) No menu "General Map Data" do editor de Mapa, você pode definir um script que será chamado toda vez que o herói dar um passo no mapa. A ele é passado automaticamente três argumentos, a posição horizontal do herói (X), a posição vertical do herói (Y), e a direção atual do herói, norte, sul, leste, ou oeste. Desde que este script será chamado frequentemente, é uma boa idéia não usar nehum comando tipo wait nele

Script de Pressionamente de Tecla (On-Keypress Script) No menu "General Map Data" do editor de mapa, você pode definir um script que vai rodar toda vez que o jogador pressionar uma tecla no mapa. Isto se aplica a cada tecla do teclado, não apenas a aquelas que normalmente fazem alguma coisa. Dentro de seu script você pode usar o comando key is pressed para ver se uma tecla pré-definida foi apertada. Por segurar uma tecla pressionada poder fazer este script ser rápida e repetidamente chamado, não o faça muito longo ou verá seu jogo travar (slow down). Também, tenha cuidado usando comandos do tipo wait neste tipo de script.