Br:Plotscr

From OHRRPGCE-Wiki
Jump to navigation Jump to search
# PLOTSCR.HSD (rusalka) - baseado em serendipity+, esqueceram de atualizar
# Este arquivo contém a definição de linguagem para plotscripting OHRRPGCE.
# modificar este arquivo pode ter efeitos indesejados/desastrosos,
# mas lê-lo pode ser um tanto educacional. Especialmente as constantes.

# *Nota do tradutor: em programação, normalmente não se traduz nada, mas
# *o que está aqui pode ajudá-lo a entender um pouco melhor o funcionamento
# *dos scripts. Creio que as constantes possam ser modifificadas para
# *facilitar a escrita de scripts (para quem não entende inglês), mas não
# *testei nada. Faça por conta e risco. E me avise se der certo.


# funções marcadas com um x não foram implementadas ainda.
# funções marcadas com um ? estão implementadas mas não foram testadas.

#--------------------------------------------------------------------------
# hard coded functions - funções codificadas diretamente no programa

define function, begin
0,noop,0                    # nenhuma operação
1,wait,1,1                  # espera(ciclos)
2,waitforall,0              # espera que caminhadas e outras coisas relacionadas a script parem
3,waitforhero,1,0           # espera que o herói pare de se mover
4,waitfornpc,1,0            # espera que o npc pare de se mover
5,suspendnpcs,0             # para o movimento normal do NPC
6,suspendplayer,0           # para o jogador de controlar as coisas (exceto caixas de texto)
7,resumenpcs,0              # retoma a automação do NPC
8,resumeplayer,0            # destrava os controles do jogador
9,waitforkey,1,99           # espera por um pressionamento de tecla
10,walkhero,3,0,2,1         # anda herói(quem,direção,distância)
11,showtextbox,1,1          # mostra uma caixa de texto
12,checktag,1,0             # retorna o valor de uma etiqueta
13,settag,2,0,0             # define etiqueta(número,verdadeiro/falso)
15,usedoor,1,0              # use porta(número)
16,fightformation,1,0       # formação de batalha(número)
17,getitem,2,0,1            # pegue item(item,quantidade)
18,deleteitem,2,0,1         # deleta item(item,quantidade)
19,leader,0                 # retorna o líder atual
20,getmoney,1,0             # pegue dinheiro(quantia)
21,losemoney,1,0            #? perca dinheiro(quantia) sem checagem
22,paymoney,1,0             # retorna falso e subtrai nada se não puder comprar
23,unequip,2,0,1            # (quem,onde)
24,forceequip,3,0,1,0       # (quem,onde,item)
25,setheroframe,2,0,0       # (quem,quadro) quadro é 0 ou 1
26,setNPCframe,2,0,0        # (quem,quadro) quadro é 0 ou 1
27,suspendoverlay,0         # desliga tiras superiores
28,playsong,1,0             # toque música(números)
29,stopsong,0               # para a música
30,keyispressed,1,0         # checa tecla pelo código de escaneamento
31,rankincaterpillar,1,0    # encontra a posição dos heróis na fila
32,showbackdrop,1,0         # mostra fundo (número)
33,showmap,0                # cancela o mostra fundo
34,dismountvehicle,0        # desmonta de qualquer veículo que você possa estar montando
35,useNPC,1,0               # dispara um NPC remotamente
37,useshop,1,0              #? usa loja(número)
38,camerafollowshero,1,0    # faz a câmera seguir um herói
39,camerafollowsnpc,1,0     # faz a câmera seguir um NPC
40,pancamera,3,0,1,2        # gira camera(direção,distância,passopixel)
41,focuscamera,3,0,0,2      # focaliza camera(x,y,passopixel)
42,waitforcamera,0          # espera que um giro ou focalização termine
43,herox,1,0                # retorna a coordenada x do herói
44,heroy,1,0                # retorna a coordenada y do herói
45,npcx,1,0                 # retorna a coordenada x do npc
46,npcy,1,0                 # retorna a coordenada y do npc
47,suspendobstruction,0     # permite heróis andarem através de npcs e vice versa
48,resumeobstruction,0      # restaura o comportamento de obstrução normal
49,suspendherowalls,0       # permite heróis andarem através de paredes
50,suspendNPCwalls,0        # permite heróis e npcs andarem através de paredes
51,resumeherowalls,0        # restaura o comportamento de parede normal dos heróis
52,walknpc,3,0,2,1          # anda npc(quem,direção,distância)
53,setherodirection,2,0,2   # define direção herói(quem,direção)
54,setnpcdirection,2,0,2    # define direção npc(quem,distância)
55,getdefaultweapon,1,0     # (quem)
56,setdefaultweapon,2,0,0   # (quem,item)
57,suspendcatapillar,0      # apelido errado para compatibilidade
58,resumecatapillar,0       # apelido errado para compatibilidade
59,waitfortextbox,0         # espera que a caixa de texto se vá
60,equipwhere,2,0,0         #? (quem,item) retorna o slot [posição] onde um item pode ser equipado, ou falso se o herói não puder equipá-lo
61,teleporttomap,3,0,0,0    # teleporta para mapa (mapa,x,y)
62,suspendrandomenemys,0    # apelido errado para compatibilidade
63,resumerandomenemys,0     # apelido errado para compatibilidade
64,getherostat,3,0,0,1      # retorna o atributo de um herói (quem,atributo,atual/max)
65,resumeoverlay,0          # torna as tiras superiores ativas novamente
66,addhero,1,0              # adiciona um herói ao grupo
67,deletehero,1,0           # apaga um herói do grupo
68,swapouthero,1,0          # move um herói para fora do grupo ativo
69,swapinhero,1,0           # move um herói para o grupo ativo (se houver espaço lá)
70,roominactiveparty,0      # retorna o número de posições [slot] vazias no grupo ativo (0-3)
71,lockhero,1,0             # evita que um herói seja trocado
72,unlockhero,1,0           #? inverte trava herói [lockhero]
73,gameover,0               # retorna você para a tela de título
74,setdeathscript,1,0       # altera o script que é executado quando você morre
75,fadescreenout,3,0,0,0    # desbota tela (vermelho,verde,azul)
76,fadescreenin,0           # desbota de volta para a cor após desbota tela
77,showvalue,1,0            # mostra um número no canto inferior esquerdo
78,alterNPC,3,0,0,0         # substitui um dos atributos de um NPC
79,shownovalue,0            # esconde o número de mostra valor [showvalue]
80,currentmap,0             # retorna o número do mapa atual
81,setherospeed,2,0,4       # muda a velocidade de caminhada de um herói
82,inventory,1,0            # retorna a contagem de um dado item
83,setherostat,4,0,0,1,0    # altera o atributo de um herói (quem,atributo,atual/max,valor)
84,suspendboxadvance,0      # evita o usuário de avançar caixas de textos
85,resumeboxadvance,0       # inverte suspende avanço de caixa
86,advancetextbox,0         # como se o usuário tivesse pressionado uma tecla
87,setheroposition,3,0,0,0  # define arbitrariamente x,y
88,setNPCposition,3,0,0,0   # define arbitrariamente x,y
89,swapbyposition,2,0,0     # troca a posição de dois heróis
90,findhero,1,0             # localiza a posição do herói pelo nome do herói
91,checkequipment,2,0,1     # com o que está equipado o herói? (quem,onde)
#92,daysofplay,0             # retorna os dias, estas opções permanecem para compatibilidade
#93,hoursofplay,0            # retorna as horas
#94,minutesofplay,0          # retorna os minutos
95,resumeNPCwalls,0         # restaura o comportamente normal de paredes de NPC
96,setheroz,2,0,0           # determina a posição vertical do herói
97,readmapblock,2,0,0       # pega o bloco de mapa x,y
98,writemapblock,3,0,0,0    # determina o bloco de mapa x,y,valor
99,readpassblock,2,0,0      # pega o bloco de passabilidade x,y
100,writepassblock,3,0,0,0  # determina o bloco de passabilidade x,y,valor
101,NPCdirection,1,0        # retorna a direção de um NPC
102,herodirection,1,0       # retorna a direção de um herói
103,resetpalette,0          # retorna a paleta mestra para o padrão
104,tweakpalette,5,0,0,0,0,255 # altera a paleta mestra
105,readcolor,2,0,0         # retorna um valor de cor
106,writecolor,3,0,0,0      # altera um valor de cor
107,updatepalette,0         # aplica as mudanças feitas com escreve cor [writecolor]
108,seedrandom,1,0          #? inicializa o gerador de números aleatórios
109,greyscalepalette,2,0,255# converte a paleta para escala de cinza
110,setheropicture,3,0,0,1  # quem,figura,tipo
111,setheropalette,3,0,0,1  # quem,paleta,tipo
112,getheropicture,2,0,1    # quem,tipo
113,getheropalette,2,0,1    # quem,tipo
114,readglobal,1,0          # índice
115,writeglobal,2,0,0       # índice,valor
116,heroiswalking,1,0       # índice,valor
#117,NPCiswalking,1,0       #x obsoleto, compatibilidade apenas
118,suspendcaterpillar,0    # outros herói param de seguir o líder, e podem ser manipulados separadamente.
119,resumecaterpillar,0     # torna a fila do grupo ativa novamente
120,NPCreference,2,0,0      # pega uma referência NPC pelo número ID
121,NPCatspot,3,0,0,0       # pega uma referência NPC por X,Y
122,getNPCID,1,0            # pega o número ID de uma referência NPC
123,NPCcopycount,1,0        # encontra quantas cópias de um ID de NPC estão no mapa
124,changeNPCID,2,0,0       # dada uma referência NPC, muda seu ID
125,createNPC,4,0,0,0,2     # cria um NPC pelo ID em uma localização e retorna sua referência
126,destroyNPC,1,0          # destrói o NPC referenciado
127,teachspell,3,0,0,0      # (quem,magia,tipodeaprendizado) tenta ensinar uma magia a um herói
128,forgetspell,2,0,0       # (quem,magia) esquece uma magia aprendida
129,readspell,3,0,0,0       # (quem,lista,posição) retorna o número de uma magia em uma posição
130,writespell,4,0,0,0,0    # (quem,lista,posição,magia) força um herói a aprender uma magia
131,knowsspell,2,0,0        # (quem,magia)retorna verdadeiro se o herói já conhece essa magia
132,canlearnspell,3,0,0,0   # (quem,magia,tipodeaprendizado) retorna verdadeiro se o herói puder aprender a magia
133,herobyslot,1,0          # retorna o ID/nome do herói numa posição particular no grupo
134,herobyrank,1,0          # retorna o ID/nome do herói numa ordem particular na fila
135,puthero,3,0,0,0         #? (quem,x,y) determina a posição em pixels do herói
136,putnpc,3,0,0,0          # (quem,x,y) determina a posição em pixels do NPC
137,putcamera,2,0,0         # (x,y) determina a posição em pixels da tela
138,heropixelx,1,0          #? (quem) pega o pixel x do herói
139,heropixely,1,0          #? (quem) pega o pixel y do herói
140,npcpixelx,1,0           # (quem) pega o pixel x do npc
141,npcpixely,1,0           # (quem) pega o pixel y do npc
142,camerapixelx,0          #? pega o pixel x da câmera
143,camerapixely,0          #? pega o pixel y da câmera
144,loadtileset,1,-1        # carrega um novo conjunto de tiras para o mapa atual
145,pickhero,0              # permite você pegar um herói manualmente
146,renameherobyslot,1,0    # permite você renomear um herói manualmente
147,readgeneral,1,0         # lê diretamente de uma seqüencia de dados gerais de jogo em memória
148,writegeneral,2,0,0      # escreve diretamente de uma seqüencia de dados gerais de jogo em memória. Se você quebrar o seu jogo com este comando, não fique muito surpreso
150,statusscreen,1,0        # mostra a tela de atributos para um herói
151,showminimap,0           # mostra o mini-mapa
152,spellsmenu,1,0          # mostra o menu de magia para um herói
153,itemsmenu,0             # mostra o menu de itens
154,equipmenu,1,0           # mostra o menu de equipamento para um herói
#155,savemenu,0             # obsoleto em favor do ID 170
157,ordermenu,0             # mostra o menu de ordem
158,teammenu,0              # mostra o menu de grupo
159,initmouse,0             # inicializa o mouse, retorna verdadeiro se um mouse estiver instalado
160,mousepixelx,0           # retorna a coordenada x do mouse na tela
161,mousepixely,0           # retorna a coordenada y do mouse na tela
162,mousebutton,1,0         # retorna verdadeiro se o botão especificado estiver pressionado
163,putmouse,2,160,100      # coloca o mouse em um ponto na tela
164,mouseregion,4,0,318,0,198 # define o retângulo no qual o mouse pode mover-se (xmin, xmax, ymin, ymax)
165,npcatpixel,3,0,0,0      # retorna o NPC no pixel x,y, terceiro argumento é qual NPC (caso -1 returna o número de npcs no pixel)
166,saveinslot,1,0	    # salva jogo na posição [slot]
167,lastsaveslot,0	    # retorna a última posição de salvamento onde o jogo foi salvo, falso se não salvo
168,suspendrandomenemies,0  # evita que inimigos aleatórios ataquem
169,resumerandomenemies,0   # desfaz suspendeinimigosaleatórios [suspendrandomenemies]
170,savemenu,1,-1           # mostra o menu de salvamento
171,saveslotused,1,1        # retorna verdadeiro se um jogo salvo existe na posição especificada
172,importglobals,3,1,-1,-1 # (posição, primeiro, último) lê uma série de globais em uma posição de salvamento
173,exportglobals,3,1,0,1024 # (posição, primeiro, último) escreve uma série de globais para uma posição de salvamento
174,loadfromslot,1,1        # carrega um jogo salvo da posição
175,deletesave,1,1          # deleta (esconde da tela carregar/salvar - dados não são *realmente* apagados) posição especificada
176,runscriptbyid,9,0,0,0,0,0,0,0,0,0 # executa um script através de seu número ID e passa até 8 argumentos
177,NPCiswalking,1,0        # (quem) retorna verdadeiro se andando (de verdade, diferentemente da antiga implementação)
178,readgmap,1,0            # lê do vetor de dados gerais do mapa
179,writegmap,2,0,0         # escreve um item de dado gmap (???)
180,mapwidth,0              # retorna a altura do mapa em tiras
181,mapheight,0             # retorna a largura do mapa em tiras
182,readNPC,2,0,0           # Lê informação sobre um NPC no mapa atual (corresponde a alterNPC)
183,setherolevel,3,0,0,1    # muda o nível de um herói
184,giveexperience,2,-1,1   # (quem, quanto) dá experiência a um herói ou ao grupo ativo
185,herolevelled,1,0        # número de níveis ganhos com o último comando battle/giveexperience.
186,spellslearnt,2,0,0      # número de magias e ids das magias que o herói aprendeu no último comando battle/giveexperience.
187,getmusicvolume,0        # volume de música numa escala de 0-255 independente de implementação
188,setmusicvolume,1,128    # define o volume da música em uma escala de 0-255

200,system hour,0
201,system minute,0
202,system second,0
203,current song,0
204,get hero name,2,0,0	    # (string, hero) - coloca o nome do herói(hero) na string(string)
205,set hero name,2,0,0	    # (string, hero) - define o nome do herói(hero) para string(string)
206,get item name,2,0,0	    # (string, item) - coloca o nome do item(item) na string(string)
207,get map name,2,0,0	    # (string, map) - coloca o nome do mapa(map) na string(string)
208,get attack name,2,0,0   # (string, attack) - coloca o nome do ataque(attack) na string(string)
209,get global string,2,0,0 # (string, global) - coloca o nome da string global(global) na string(string)

210,showstring,1,0 		#mostra a string no fundo(stringID)
211,clearstring,1,0		#apaga dados da string(stringID)
212,appendascii,2,0,0		#adiciona ascii à string(stringID,ascii)
213,appendnumber,2,0,0		#adiciona número à string(stringID,number)
214,copystring,2,0,0		#copia string de uma para outra(sourceID,destinationID)
215,concatenatestrings,2,0,0	#adiciona duas strings(sourceID,destinationID)
216,stringlength,1,0		#retorna o tamanho da string(stringID)
217,deletechar,2,0,1		#apaga caractere da string(stringID,position)
218,replacechar,3,0,1,0		#substitui caracter na string especificada(stringID,position,ascii)
219,asciifromstring,2,0,1	#retorna o ascii na string(número ascii)(stringID,position)
220,positionstring,3,0,0,0      #move uma string para uma posição na tela(stringID,x,y)
221,setstringbit,3,0,0,0        #define um bit da string, como: visibilidade, stilo(stringID,bit,value)
222,getstringbit,2,0,0          #retorna um bit da string, como: visibilidade, stilo(stringID,bit)
223,stringcolor,3,0,15,0        #define a cor de uma string, e opcionalmente a cor de fundo(stringID,fColor,bColor)
224,stringx,1,0                 #retorna a posição X da string(stringID)
225,stringy,1,0                 #retorna a posição Y da string(stringID)
226,systemday,0                 #retorna o dia do sistema
227,systemmonth,0               #retorna o mês do sistema
228,systemyear,0                #retorna o ano do sistema
229,stringcompare,2,0,0		#retorna se duas strings são a mesma(stringID1, stringID2)
230,readenemydata,2,0,0         #lê dados do inimigo(enemy,dataposition)
231,writeenemydata,3,0,0,0      #escreve dados do inimigo(enemy,dataposition,value)
232,trace,1,0                   #escreve a string fornecida para G_DEBUG.txt
233,getsongname,2,0,0           #pega o nome da canção e armazena na string
end

#--------------------------------------------------------------------------
# soft coded functions - funções codificadas neste arquivo

define script,begin
autonumber,walkherotoX,2,0,0        # anda herói para X (quem,x)
autonumber,walknpctoX,2,0,0         # anda npc para X (quem,x)
autonumber,walkherotoY,2,0,0        # anda herói para Y (quem,y)
autonumber,walknpctoY,2,0,0         # anda npc para Y (quem,y)
autonumber,setNPCspeed,2,0,4        # determina a velocidade de caminhada do NPC
autonumber,swapbyname,2,0,0         # faz dois heróis nomeados mudarem de lugar
autonumber,getherolevel,1,0         # retorna o nível atual do herói
autonumber,renamehero,1,0           # renomeia um herói (use hero:nome)
autonumber,autosave,0               # salva automaticamente na posição mais recente
autonumber,stringtoglobals,3,0,0,0  #converte string para global(stringID,start,length)
autonumber,globalstostring,3,0,0,0  #monta strings de globais(stringID,start,length)
autonumber,showstringat,3,0,0,0     #posiciona uma string na tela e a torna visível(stringID,x,y)
autonumber,centerstringat,3,0,0,0   #posiciona uma string na tela e a torna visível(stringID,x,y)
autonumber,hidestring,1,0           #torna uma string invísivel(stringID)
autonumber,stringstyle,2,0,0        #muda o estilo de uma string: outline, flat(stringID,style)
autonumber,lastascii,0			#retorna o código ascii da tecla sendo pressionada
autonumber,inputstring,3,0,0,0	#permite o jogador entrar com uma string. Retorna falso caso ESC seja pressionado. (string,max len,use cur)
end

script,walkherotoX,who,n,begin
if (n<<heroX(who)) then(walk hero(who,west,heroX(who)--n))
if (n>>heroX(who)) then(walk hero(who,east,n--heroX(who)))
end

script,walkherotoY,who,n,begin
if (n<<heroY(who)) then(walk hero(who,north,heroY(who)--n))
if (n>>heroY(who)) then(walk hero(who,south,n--heroY(who)))
end

script,walkNPCtoX,who,n,begin
if (n<<NPCX(who)) then(walk NPC(who,west,NPCX(who)--n))
if (n>>NPCX(who)) then(walk NPC(who,east,n--NPCX(who)))
end

script,walkNPCtoY,who,n,begin
if (n<<NPCY(who)) then(walk NPC(who,north,NPCY(who)--n))
if (n>>NPCY(who)) then(walk NPC(who,south,n--NPCY(who)))
end

script,setNPCspeed,who,speed,begin
alterNPC(who,NPCstat:movespeed,speed)
end

script,swapbyname,hero1,hero2,begin
 hero1:=findhero(hero1)
 hero2:=findhero(hero2)
 if (hero1==-1,or,hero2==-1)
  then (return(false))
  else (return(true),swapbyposition(hero1,hero2))
end

script,renamehero,who,begin
  variable(slot)
  slot:=findhero(who)
  if(slot>=0)
    then(renameherobyslot(slot),return(true))
    else(return(false))
end

# isto aproveita-se de uma característica não documentada de getherostat [peganíveldoherói].
# Você pode também mudar o nível do herói usando setherostat [defineatributodoherói]
# no atributo 12, mas isto não é recomendado, já que não atualiza a
# experiência do herói
script,getherolevel,who,begin
  return(getherostat(who,12,currentstat))
end

script,autosave,begin
if (lastsaveslot==0)
  then(return(savemenu))
  else(saveinslot(lastsaveslot),return(lastsaveslot))
end

script,stringtoglobals,stringID,start,length,begin
  variable(temp)
  if (stringID>=0,and,stringID<=31) then(
    if (length>=1,and,length<=40) then(
      for (temp,1,length) do(
        writeglobal(start+(temp--1),asciifromstring(stringid,temp))
      )
    )
  )
end

script,globalstostring,stringID,start,length,begin
  variable(temp)
  variable(temp2)
  if (stringID>=0,and,stringID<=31) then(
    clearstring(stringid)
    if (length>=1,and,length<=40) then(
      for (temp,1,length) do(
        temp2:=readglobal(start+(temp--1))
        if (temp2>=0,and,temp2<=255) then(appendascii(stringid,temp2))
      )
    )
  )
end

script,showstringat,stringID,x,y,begin
  setstringbit(stringID,0,1)
  positionstring(stringID,x,y)
end

script,centerstringat,stringID,x,y,begin
  setstringbit(stringID,0,1)
  positionstring(stringID,x--(stringlength(stringID)*4),y)
end

script,hidestring,stringID,begin
  setstringbit(stringID,0,0)
end

script,stringstyle,stringID,style,begin
  setstringbit(stringID,1,style)
end

script, last ascii, begin
	variable(code, shift)

	shift := keyispressed(42)==true, or, keyispressed(54)==true

	if(keyispressed(30)) then (code := 65) #A...
	if(keyispressed(48)) then (code := 66)
	if(keyispressed(46)) then (code := 67)
	if(keyispressed(32)) then (code := 68)
	if(keyispressed(18)) then (code := 69)
	if(keyispressed(33)) then (code := 70)
	if(keyispressed(34)) then (code := 71)
	if(keyispressed(35)) then (code := 72)
	if(keyispressed(23)) then (code := 73)
	if(keyispressed(36)) then (code := 74)
	if(keyispressed(37)) then (code := 75)
	if(keyispressed(38)) then (code := 76)
	if(keyispressed(50)) then (code := 77)
	if(keyispressed(49)) then (code := 78)
	if(keyispressed(24)) then (code := 79)
	if(keyispressed(25)) then (code := 80)
	if(keyispressed(16)) then (code := 81)
	if(keyispressed(19)) then (code := 82)
	if(keyispressed(31)) then (code := 83)
	if(keyispressed(20)) then (code := 84)
	if(keyispressed(22)) then (code := 85)
	if(keyispressed(47)) then (code := 86)
	if(keyispressed(17)) then (code := 87)
	if(keyispressed(45)) then (code := 88)
	if(keyispressed(21)) then (code := 89)
	if(keyispressed(44)) then (code := 90)#...Z
	if(keyispressed(2)) then (if(shift) then (code :=33) else (code :=49)) # 1...
	if(keyispressed(3)) then (if(shift) then (code :=64) else (code :=50))
	if(keyispressed(4)) then (if(shift) then (code :=35) else (code :=51))
	if(keyispressed(5)) then (if(shift) then (code :=36) else (code :=52))
	if(keyispressed(6)) then (if(shift) then (code :=37) else (code :=53))
	if(keyispressed(7)) then (if(shift) then (code :=94) else (code :=54))
	if(keyispressed(8)) then (if(shift) then (code :=38) else (code :=55))
	if(keyispressed(9)) then (if(shift) then (code :=42) else (code :=56))
	if(keyispressed(10)) then (if(shift) then (code :=40) else (code :=57))
	if(keyispressed(11)) then (if(shift) then (code :=41) else (code :=48)) # ...0
	if(keyispressed(41)) then (if(shift) then (code :=126) else (code :=96)) # ` ~
	if(keyispressed(12)) then (if(shift) then (code :=95) else (code :=45)) # - _
	if(keyispressed(13)) then (if(shift) then (code := 43) else (code := 61)) # = +
	if(keyispressed(26)) then (if(shift) then (code := 123) else (code := 91)) # [ {
	if(keyispressed(27)) then (if(shift) then (code := 125) else (code := 93)) # ] }
	if(keyispressed(39)) then (if(shift) then (code := 58) else (code := 59)) # ; :
	if(keyispressed(40)) then (if(shift) then (code := 34) else (code := 39)) # ' "
	if(keyispressed(51)) then (if(shift) then (code := 60) else (code := 44)) # , <
	if(keyispressed(52)) then (if(shift) then (code := 62) else (code := 46)) # . >
	if(keyispressed(53)) then (if(shift) then (code := 63) else (code := 47)) # / ?
	if(keyispressed(43)) then (if(shift) then (code := 124) else (code := 92)) # \ |
	#if(keyispressed(40)) then (code := 47) # Num / WTF? Qual é o código para a outra "/"?
	if(keyispressed(55)) then (code := 42) # Num *
	if(keyispressed(71)) then (code := 55) # Num 7
	if(keyispressed(72)) then (code := 56) # Num 8
	if(keyispressed(73)) then (code := 57) # Num 9
	if(keyispressed(74)) then (code := 45) # Num -
	if(keyispressed(75)) then (code := 52) # Num 4
	if(keyispressed(76)) then (code := 53) # Num 5
	if(keyispressed(77)) then (code := 54) # Num 6
	if(keyispressed(78)) then (code := 43) # Num +
	if(keyispressed(79)) then (code := 49) # Num 1
	if(keyispressed(80)) then (code := 59) # Num 2
	if(keyispressed(81)) then (code := 51) # Num 3
	if(keyispressed(82)) then (code := 48) # Num 0
	if(keyispressed(83)) then (code := 46) # Num .
	if(keyispressed(57)) then (code := 32) # ESPAÇO


	if(code <= 90, and, code >= 65) then, begin
		if(shift == false) then (code += 32)
	end

	return (code)

end

script, input string, str, max len, useexist, begin
	variable(done, key,count)
	if(useexist==false) then (clear string(str))
	count := string length(str)
	while(done == false) do, begin
		center string at(str,160,110)
		wait for key
		if(key is pressed(28)) then (done := true, return(true)) else, begin
			if(key is pressed(14)) then (delete char(str,string length(str)))
			if(key is pressed(1)) then (done:=true,return(false)) else, begin
				key := last ascii
				if(last ascii, and, count << max len) then(append ascii(str,key), count += 1, show value(max len -- count))
			end
		end
	end
	show no value
	hide string
end

#--------------------------------------------------------------------------
#lê/escreve dados dos inimigos

define script(autonumber,getenemyname,2,0,0)
script,getenemyname,enemyID,stringID,begin
variable(t)
   for (t,1,readenemydata(enemyID,0))do(
     appendascii(stringID,readenemydata(enemyid,t))
   end
end

define script(autonumber,getenemystat,2,0,0)
script,getenemystat,enemyid,stat,begin
  return(readenemydata(enemyid,stat+62))
end

define script(autonumber,setenemystat,3,0,0,0)
script,setenemystat,enemyid,stat,value,begin
  writeenemydata(enemyid,stat+62,value)
end

define script(autonumber,setenemyname,2,0,0)
script,setenemyname,enemyid,stringid,begin
variable(t,t2)
if(stringlength(stringid)>=16)then(t2:=16)else(t2:=stringlength(stringid))
 writeenemydata(enemyid,0,t2)
 for(t,1,t2)do(
  writeenemydata(enemyid,t,asciifromstring(stringid,t))
  )
end

define script(autonumber,getenemyrewards,2,0,0)
script,getenemyrewards,enemyid,reward,begin
  return(readenemydata(enemyid,reward+56))
end

define script(autonumber,setenemyrewards,3,0,0,0)
script,setenemyrewards,enemyid,reward,value,begin
  writeenemydata(enemyid,reward+56,value)
end

define script(autonumber,getenemyappearance,2,0,0)
script,getenemyappearance,enemyid,appearance,begin
  return(readenemydata(enemyid,appearance))
end

define script(autonumber,setenemyappearance,3,0,0,0)
script,setenemyappearance,enemyid,appearance,value,begin
  writeenemydata(enemyid,appearance,value)
end

#--------------------------------------------------------------------------
# read/write general wrappers - lê/escreve dados gerais

define script(autonumber,set victory music,1,0)
script,set victory music,song,begin
  write general(3,song)
end

define script(autonumber,get death script,none)
script,get death script,begin
  return(read general(42))
end

define script(autonumber,get load script,none)
script,get load script,begin
  return(read general(57))
end

define script(autonumber,set load script,1,0)
script,set load script,ID,begin
  write general(57,ID)
end

define script(autonumber,set battle wait mode,1,0)
script,set battle wait mode,bit,begin
  if(bit) then(bit:=1)
  write general(101,(read general(101),and,32766)+bit)
end

define script(autonumber,set caterpillar mode,1,0)
script,set caterpillar mode,bit,begin
  if(bit) then(bit:=2)
  write general(101,(read general(101),and,32765)+bit)
end

define script(autonumber,set no HP level up restore,1,0)
script,set no HP level up restore,bit,begin
  if(bit) then(bit:=4)
  write general(101,(read general(101),and,32763)+bit)
end

define script(autonumber,set no MP level up restore,1,0)
script,set no MP level up restore,bit,begin
  if(bit) then(bit:=8)
  write general(101,(read general(101),and,32759)+bit)
end

define script(autonumber,set inn no revive mode,1,0)
script,set inn no revive mode,bit,begin
  if(bit) then(bit:=16)
  write general(101,(read general(101),and,32751)+bit)
end

define script(autonumber,set full hero swap mode,1,0)
script,set full hero swap mode,bit,begin
  if(bit) then(bit:=32)
  write general(101,(read general(101),and,32735)+bit)
end

define script(autonumber,hide battle ready meter,1,0)
script,hide battle ready meter,bit,begin
  if(bit) then(bit:=64)
  write general(101,(read general(101),and,32703)+bit)
end

define script(autonumber,hide battle health meter,1,0)
script,hide battle health meter,bit,begin
  if(bit) then(bit:=128)
  write general(101,(read general(101),and,32639)+bit)
end

define script(autonumber,set debug keys disable,1,0)
script,set debug keys disable,bit,begin
  if(bit) then(bit:=256)
  write general(101,(read general(101),and,32511)+bit)
end

define script(autonumber,suspend map music,0)
script,suspend map music, begin
 write general(44,read general(44),or,512)
end

define script(autonumber,resume map music,0)
script,resume map music, begin
 write general(44,read general(44),and,32255)
end

#--------------------------------------------------------------------------
# lê/escreve dados gmap

define script(autonumber,get map tileset,0)
script,get map tileset,begin
  return(read gmap(0))
end

define script(autonumber,get ambient music,0)
script, get ambient music, begin
  return (read gmap(1) -- 1)
end

define script(autonumber,set ambient music,1,-1)
script, set ambient music, song, begin
  write gmap(1,song + 1)
  if (song >= 0) then (play song (song)) else (stop song)
end

define script(autonumber,allow minimap,1,1)
script,allow minimap,setting,begin
  write gmap(2,setting)
end

define script(autonumber,allow save anywhere,1,1)
script,allow save anywhere,setting,begin
  write gmap(3,setting)
end

define script(autonumber,set map edge mode,2,0,0) #second argument only used with DefaultTile
script,set map edge mode,mode,tile,begin
  write gmap(5,mode)
  write gmap(6,tile)
end

define script(autonumber,get map edge mode,0)
script,get map edge mode,begin
  return(read gmap(5))
end

define script(autonumber,set harm tile damage,1,0)
script,set harm tile damage,damage,begin
  write gmap(9,damage)
end

define script(autonumber,set harm tile flash,1,0)
script,set harm tile flash,colour,begin
  write gmap(10,colour)
end

define script(autonumber,get footoffset,0)
script,get footoffset,begin
  return(read gmap(11))
end

define script(autonumber,set footoffset,1,0)
script,set footoffset,offset,begin
  write gmap(11,offset)
end

define script(autonumber,get instead of battle script,0)
script,get instead of battle script,begin
  return (read gmap(13))
end

define script(autonumber,set instead of battle script,1,0)
script,set instead of battle script,ID,begin
  write gmap(13,ID)
end

define script(autonumber,get each step script,0)
script,get each step script,begin
  return (read gmap(14))
end

define script(autonumber,set each step script,1,0)
script,set each step script,ID,begin
  write gmap(14,ID)
end

define script(autonumber,get on keypress script,0)
script,get on keypress script,begin
  return (read gmap(15))
end

define script(autonumber,set on keypress script,1,0)
script,set on keypress script,ID,begin
  write gmap(15,ID)
end

define script(autonumber,draw npcs above heroes,1,0)
script,draw npcs above heroes,setting,begin
  write gmap(16,setting)
end
define script(autonumber,get damage cap,0)
script,get damage cap,begin
	return(readgeneral(63))
end
define script(autonumber,set damage cap,1,0)
script,set damage cap,c,begin
	writegeneral(63,c)
end

#--------------------------------------------------------------------------
# novos dados/re-invenção da roda de comandos

define script, begin
	autonumber,days of play,0
	autonumber,hours of play,0
	autonumber,minutes of play,0
	autonumber,seconds of play,0
	autonumber,set days of play,1,0
	autonumber,set hours of play,1,0
	autonumber,set minutes of play,1,0
	autonumber,set seconds of play,1,0
end

script, days of play, begin
	return(read general(51))
end
script, hours of play, begin
	return(read general(52))
end
script, minutes  of play, begin
	return(read general(53))
end
script, seconds of play, begin
	return(read general(54))
end
script,set days of play,d, begin
	if(d >= 0) then (write general(51,d))
end
script,set hours of play,h, begin
	if(h >= 0, and, h << 24) then (write general(52,h))
end
script,set minutes  of play,m, begin
	if(m >= 0, and, m << 60) then (write general(53,m))
end
script,set seconds of play,s, begin
	if(s >= 0, and, s << 60) then (write general(54,s))
end

#--------------------------------------------------------------------------
# funções de dados appendascii
# $id="..." e $id+"..." são traduzidos para estas funções por HSpeak

define script,begin
autonumber,setstring,41,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
autonumber,appendstring,41,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
end

script,setstring,id,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20
a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,a40,begin
clearstring(id)
appendascii(id,a1)
appendascii(id,a2)
appendascii(id,a3)
appendascii(id,a4)
appendascii(id,a5)
appendascii(id,a6)
appendascii(id,a7)
appendascii(id,a8)
appendascii(id,a9)
appendascii(id,a10)
appendascii(id,a11)
appendascii(id,a12)
appendascii(id,a13)
appendascii(id,a14)
appendascii(id,a15)
appendascii(id,a16)
appendascii(id,a17)
appendascii(id,a18)
appendascii(id,a19)
appendascii(id,a20)
appendascii(id,a21)
appendascii(id,a22)
appendascii(id,a23)
appendascii(id,a24)
appendascii(id,a25)
appendascii(id,a26)
appendascii(id,a27)
appendascii(id,a28)
appendascii(id,a29)
appendascii(id,a30)
appendascii(id,a31)
appendascii(id,a32)
appendascii(id,a33)
appendascii(id,a34)
appendascii(id,a35)
appendascii(id,a36)
appendascii(id,a37)
appendascii(id,a38)
appendascii(id,a39)
appendascii(id,a40)
end

script,appendstring,id,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20
a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,a40,begin
appendascii(id,a1)
appendascii(id,a2)
appendascii(id,a3)
appendascii(id,a4)
appendascii(id,a5)
appendascii(id,a6)
appendascii(id,a7)
appendascii(id,a8)
appendascii(id,a9)
appendascii(id,a10)
appendascii(id,a11)
appendascii(id,a12)
appendascii(id,a13)
appendascii(id,a14)
appendascii(id,a15)
appendascii(id,a16)
appendascii(id,a17)
appendascii(id,a18)
appendascii(id,a19)
appendascii(id,a20)
appendascii(id,a21)
appendascii(id,a22)
appendascii(id,a23)
appendascii(id,a24)
appendascii(id,a25)
appendascii(id,a26)
appendascii(id,a27)
appendascii(id,a28)
appendascii(id,a29)
appendascii(id,a30)
appendascii(id,a31)
appendascii(id,a32)
appendascii(id,a33)
appendascii(id,a34)
appendascii(id,a35)
appendascii(id,a36)
appendascii(id,a37)
appendascii(id,a38)
appendascii(id,a39)
appendascii(id,a40)
end

#--------------------------------------------------------------------------
# betweenable operators - operadores do meio

define operator,begin
20 ^   exponent               # expoente
30,mod,modulus                # módulo (resto da divisão)
30 /   divide                 # divisão
30 *   multiply               # multiplicação
40 --  subtract               # subtração
40 +   add                    # adição
50 ==  equal                  # igual
50 <>  notequal               # diferente (literalmente, não-igual)
50 <<  lessthan               # menor que
50 >>  greaterthan            # maior que
50 <=  lessthanorequalto      # menor ou igual a
50 >=  greaterthanorequalto   # maior ou igual a
60,xor,xor                    # ou exclusivo
60,and,and                    # e
60,or, or                     # ou
70 :=  setvariable            # atribuição (define variável)
70 +=  increment              # incremento
70 -=  decrement              # decremento
70 $+  concatenatestrings     # concatena strings
70 $=  copystring             # copia strings
end

#--------------------------------------------------------------------------
# global constants - constantes globais

# *Nota do tradutor: esta é a parte que mais interessa alterar para facilitar
# *a escrita de seus scripts (se você pensa melhor em português do que em
# *inglês). Para fazê-lo, apague a cerquilha (#), mas mantenha a constante anterior,
# *pois ela é usada internamente.
# *Você poderia usar os números também, mas a idéia das constantes é facilitar as
# *coisas evitando decorar todos eles.
# *Você verá que nem todas valem a pena serem traduzidas.

define constant, begin
0,zero
       #0,zero
1,one
       #1,um
2,two
       #2,dois
3,three 
       #3,tres
4,four
       #4,quatro
5,five
       #5,cinco
6,six
       #6,seis
7,seven
       #7,sete
8,eight
       #8,oito
9,nine
       #9,nove
10,ten
       #10,dez
0,false
       #0,falso
1,true
       #1,verdadeiro
0,off
       #0,desligado
1,on
       #1,ligado
0,north
       #0,norte
1,east
       #1,leste
2,south
       #2,sul
3,west
       #3,oeste
0,up
       #0,cima
2,down
       #2,baixo
3,left
       #3,esquerda
1,right
       #1,direita
0,upkey
       #0,teclaacima
1,downkey
       #1,teclaabaixo
2,leftkey
       #2,teclaesquerda
3,rightkey
       #3,tecladireita
4,usekey
       #4,teclauso
5,cancelkey
       #5,teclacancelar
5,menukey
       #5,teclamenu
99,anykey
       #99,qualquertecla
0,me
       #0,me
0,none
       #0,nenhum ou nada
-1,autonumber
       #-1,autonumero
0,currentstat
       #0,atributoatual 
1,maximumstat
       #1,atributomaximo
1,northwall
       #1,paredenorte
2,eastwall
       #2,paredeleste
4,southwall
       #4,paredesul
8,westwall
       #8,paredeoeste
16,vehicleA
       #16,veiculoA
32,vehicleB
       #32,veiculoB
64,harmtile
       #64,tiradano
128,overheadtile
       #128,tirasuperior
0,inside battle
       #0,dentrodabatalha
1,outside battle
       #1,foradabatalha
0,NPCstat:picture
       #0,NPCatrib:figura   (nestes, não sei se vai funcionar)
1,NPCstat:palette
       #1,NPCatrib:paleta   (estas características estão no)
2,NPCstat:movetype
       #2,NPCatrib:tipodemovimento  (arquivo HSI do seu jogo)
  0,NPCmovetype:standstill
            #0,NPCtipmov:permaneceparado
  1,NPCmovetype:wander
            #1,NPCtipmov:andando (aqui é por sua conta e risco)
  2,NPCmovetype:pace
            #2,NPCtipmov:marcha
  3,NPCmovetype:rightturns
            #3,NPCtipmov:viradireita
  4,NPCmovetype:leftturns
            #4,NPCtipmov:viraesquerda
  5,NPCmovetype:randomturns
            #5,NPCtipmov:viraaleatorio
  6,NPCmovetype:chaseyou
            #6,NPCtipmov:seguevoce
  7,NPCmovetype:avoidyou
            #7,NPCtipmov:fogedevoce
3,NPCstat:movespeed
       #3,NPCatrib:velocidademovimento
4,NPCstat:displaytext
       #4,NPCatrib: mostratexto
5,NPCstat:whenactivated
       #5,NPCatrib:quandoativado
  0,NPCwhenactivated:changedirection
            #0,NPCqativ:mudadirecao
  1,NPCwhenactivated:faceplayer
            #1,NPCqativ:encarajogador
  2,NPCwhenactivated:donotfaceplayer
            #2,NPCqativ:naoencarajogador
6,NPCstat:giveitem
       #6,NPCatrib:daitem
7,NPCstat:pushability
       #7,NPCatrib:empurrabilidade
  0,NPCpush:off     
            #0,NPCemp:desligada
  1,NPCpush:full
            #1,NPCemp:total
  2,NPCpush:horizontal
            #2,NPCemp:horizontal
  3,NPCpush:vertical
            #3,NPCemp:vertical
  4,NPCpush:uponly
            #4,NPCemp:cimaapenas
  5,NPCpush:rightonly
            #5,NPCemp:direitaapenas
  6,NPCpush:downonly
            #6,NPCemp:baixoapenas
  7,NPCpush:leftonly
            #7,NPCemp:esquerdaapenas
8,NPCstat:activation
       #8,NPCatrib:ativacao (disparo)
  0,NPCactivation:use
            #0,NPCdisp:uso
  1,NPCactivation:touch
            #1,NPCdisp:toque
  2,NPCactivation:stepon
            #2,NPCdisp:pisanele 
12,NPCstat:script
       #12,NPCatrib:script (enredo)
13,NPCstat:scriptargument
       #13,NPCatrib:argumentoscript
14,NPCstat:vehicle
       #14,NPCatrib:veiculo
0,color:red
       #0,cor:vermelho
1,color:green
       #1,cor:verde
2,color:blue
       #2,cor:azul
0,leftbutton
       #0,botaoesquerdo
1,rightbutton
       #1,botaodireito
-1,getcount
       #-1,pegaconta
0,string:outline
       #0,string:linha_por_fora (seria sublinhado??)
1,string:flat
       #1,string:chata (achatada)
0,Enemy:Picture
       #0,Inimigo:Figura
1,Enemy:Palette
       #1,Inimigo:Paleta
2,Enemy:PictureSize
       #2,Inimigo:Tamanhodafigura
  0, EnemySize:small
           #0,Inimigo:pequeno
  1, EnemySize:medium
           #1,Inimigo:medio
  2, EnemySize:large
           #2,Inimigo:grande
56,Enemy:Gold
       #56,Inimigo:Ouro
57,Enemy:Experience
       #57,Inimigo:Experiencia
58,Enemy:Item
       #58,Inimigo:Item
59,Enemy:ItemPercent
       #59,Inimigo:PorcentagemdeItem
60,Enemy:RareItem
       #60,Inimigo:ItemRaro
61,Enemy:RareItemPercent
       #61,Inimigo:PorcentagemdeItemRaro
17,Stealability
       #17,Roubabilidade
   -1, IsNotStealable
           #-1,Naoroubavel
    0, StealableOnce
           #0,Apenasumavez
    1, StealableInfinity
           #1,Infinitamente
18, StealableItem
       #18,Itemroubavel
19, StealableItemChance
       #19,Chancederoubodeitem
20, StealableRareItem
       #20,itemRaroRoubavel
21, StealableRareItemchance
       #21,ChancederoubodeItemRaro
0, Crop
       #0,Normal (mapa travado) 
1, Wrap
       #1,Interligado (estilo mapa-mundi)
2, Defaulttile
       #2,Tirapadrao
-1,party
       #-1,Grupo
end