sábado, 26 de dezembro de 2009

GTA2 GH v1.5 lançada

Quem já jogou o GTA2 no multiplayer via GTA2 Game Hunter sabe do q estou falando. A versão estável mais recente (e a que todo mundo tem) é a versão 1.491:


clique na imagem para ver em tamanho maior

O programador e modder Sektor, que faz o GTA2 Game Hunter, estava trabalhando no GTA2 GH v1.5 há um tempo, e acaba de lançá-lo numa versão beta (GTA2 GH v1.5 beta 28):


clique na imagem para ver em tamanho maior

Legenda:


  1. Opção pra escolher o "tema" do GH: Custom (vc escolhe as cores), BM (BenMillard, que fez uma versão do GH, esse tema fica com a cara dessa versão. Pra tê-la, vc tem q mandar um email pro Ben) ou Sektor (o tema que o próprio criador do GH usa, fundo preto com chat geral branco)

  2. Agora tem abas para chat global e chat privado

  3. Vc nao pode mais ver jogos da versão 1.491 e anteriores nem vice-versa

  4. A parte do comentário do jogo não aparece mais na lista, mas vc ainda recebe o comentário qdo tenta entrar no jogo



Há modificações na janela do Create Game e Settings também, baixe o GH 1.5 e veja.
Download
Lista de mudanças recentes (em inglês)
Lista de afazeres(em inglês)


Edit:


Já mudou pra versão 1.5 beta 29.
Modificações:

  • Seu país agora é detectado com a ajuda de http://geoloc.daiguo.com/?self

  • Se seu nome no GTA2 está em branco então ele é automaticamente colocado como o seu nome no GH

  • Movida a caixa "Timestamp" pro seleção de tema Custom

  • Foi adicionado código pra ajudar a achar o que está causando um bug de display das bandeiras



Fique de olho no primeiro post desse tópico para atualizações do GH 1.5 beta

Read more...

sexta-feira, 25 de dezembro de 2009

FELIZ NATAL! =D

Feliz Natal a todos que lêem meu blog :). Td de bao para voces e obrigado pelas visitas :P

Comentem dando feliz Natal também XDXD

Read more...

quinta-feira, 24 de dezembro de 2009

Cranes & Crushers

tutcrusherbase 

Um car crusher eh uma combinação de vários objetos no script, incluindo o crusher, os guindastes e as esteiras.

Lista de características

 

tutcrushercomplt Antes de vc poder criar um car crusher completo, vc primeiro deve entender como ele funciona:
  1. Um carro é estacionado abaixo do crane/guindaste 1
  2. O crane 1 pega o carro e o coloca no crusher
  3. O crusher destrói o carro
  4. O crane 2 pega o carro e o coloca no conveyor belt/esteira 1
  5. O wreck passa por um scanner, entra no prédio 1 e desaparece
  6. No outro lado do prédio, uma recompensa é criada no conveyor belt 2 e sai do prédio
  7. Se a recompensa não é coletada, ela entra no prédio 2 e desaparece

Crusher

Vamos começar com o crusher em si. A base deve consistir de 5 blocos dispersados em um sinal de +; nos distritos, as beiradas sao preenchidas com paredes diagonais, formando um octagono. A base não precisa ser elevada, mas tenha certeza que é impossivel chegar nela. O crusher em si é colocado no script com o seguinte comando:

CRUSHER nome = ( X.x , Y.y )

 

nome Um nome único pro crusher
( X.x , Y.y ) As coordenadas do crusher. A coordenada Z.z não é necessária, pois o jogo coloca o crusher no ponto mais alto do lugar, por isso vc nao pode colocar nada em cima do crusher

 

Cranes/guindastes

Próximo do crusher, vc precisa de dois cranes. No mapa, o crane consiste simplesmente de 2 blocos um acima do outro; o guincho dele é feito no script. Há vários tiles pra cranes, como o 878. Não coloque um crane muito proximo do outro, pois será estranho se um crane se mover através do outro.

Primeiro crane

Para o primeiro crane, vc precisará deste comando:

CRANE_DATA nome = ( X.x , Y.y ) rotação_crane NO_HOMECRANE FIRST ( X.x , Y.y 2) rotação_carro

nome Um nome unico. Vc vai precisar dele dps
( X.x , Y.y ) As coordenadas do crane. De novo, sem a coordenada Z
rotação_crane A rotação do guincho do crane qdo ele está parado.
( X.x , Y.y 2 ) As coordenadas do lugar no qual o crane deve colocar o carro. Neste caso, o centro do crusher.
rotação_carro A rotação do carro na hora que ele é posicionado no crusher. Ela deve ser 0 ou 180 qdo o carro será colocado num crusher

 

Segundo crane

O segundo crane pega o wreck do crusher e o coloca no conveyor belt 1. Isso eh feito com o seguinte comando:

CRANE_DATA nome = ( X.x , Y.y ) rotação_crane nome_primeiro_crane SECOND ( X.x , Y.y 2)
rotação_carro
nome O nome unico do crane
( X.x , Y.y ) As coordenadas do crane
rotação_crane A rotação do guincho na posição inicial
nome_primeiro_crane O nome do primeiro crane
( X.x , Y.y 2 ) As coordenadas do lugar que o crane deveria colocar o wreck, no caso o conveyor belt
rotação_carro A rotação que o wreck devera ter em relação ao conveyor belt. Ela deve estar alinhada ao rumo que o conveyor vai

Crane básico

O crane básico é um crane que pega os carros e os coloca nos Transporters/Transportadores/Trailers e vice-versa. Esse tipo de crane não é usado para crushers

CRANE_DATA nome ( X.x , Y.y ) rotação_crane NO_HOMECRANE
nome Um nome único pro crane
( X.x , Y.y ) As coordenadas do crane
rotação_crane A rotação do guindaste na posição inicial

Esteira/Conveyor Belt

Os conveyor belts transportam o wreck dentro de um predio e a recompensa fora de outro prédio. Eles são feitos com tiles animados e um comando. Qdo fazendo o conveyor belt, vc deve extendê-los ao menos dois blocos dentro dos prédios para ter espaço o suficiente pra fazer os objetos aparecerem e desaparecerem fora do campo de visão. No arquivo de texturas bil.sty, os tiles usados para os conveyor belts são os 309, 313, 317 e 318. Dê a animação a “frame rate” de 2 pra eles ficarem com a mesma velocidade que a dos objetos se movendo.

P/ fazer os objetos se moverem qdo colocados nos tiles animados, vc tem q colocar o seguinte comando no seu script:

CONVEYOR nome = ( X.x , Y.y , Z.z ) ( X.x , Y.y 2 ) X Y

nome Um nome único pro conveyor
( X.x , Y.y , Z.z ) As coordenadas do centro do conveyor
( X.x , Y.y 2 ) A largura e o comprimento do conveyor
X O movimento de acordo com o eixo X: 1 é pro leste, 0 é parado e –1 é pro oeste
Y O movimento de acordo com o eixo Y: 1 é pro sul, 0 é parado e –1 é pro norte

 

Scanner

Scanners são objetos invisiveis que detectam qual era o modelo do wreck ou veículo que passou por ele e diz ao GENERATOR qual é a recompensa que deve ser dada. Note que o scanner pode escanear wrecks, mas tbm veículos não-compactados, fazendo com que seja possível pular o processo do crusher e criando um sistema no qual os carros são “entregues” em troca de uma recompensa

DECLARE_CRANE_POWERUP ( nome_crane , nome_generator , X , Y , Z )
nome_crane O nome do crane que poe o wreck no conveyor.
nome_generator O nome do generator que cria a recompensa (ver abaixo)
X , Y , Z As coordenadas do scanner. O lugar ideal é logo antes do DESTRUCTOR (veja abaixo), pq aí vc tem certeza q o wreck q vc colocou ali é escaneado antes de ser deletado

Destructor

Os DESTRUCTORs são objetos invisíveis que deletam qualquer coisa que passa por eles. Vc precisará de um no final de cada conveyor: um pra remover os wrecks e um pra remover as recompensas não utilizadas. Os DESTRUCTORS devem estar escondidos dentro de um prédio, pra mascarar o fato que os objetos desaparecem do nada no ar.

DESTRUCTOR nome = ( X.x , Y.y , Z.z ) ( X.x , Y.y 2)
nome Um nome único pro destructor.
( X.x , Y.y , Z.z ) As coordenadas do centro do destructor.
( X.x , Y.y 2 ) A largura e comprimento do destructor (deixe como “1.0 , 1.0”)

GENERATOR

No começo do segundo conveyor, na localização onde as recompensas devem ser criadas, vc precisa criar um GENERATOR. Não importa qual OBJECT/objeto vc coloca no generator, e vc nao tem q ativá-lo com um SWITCH_GENERATOR. O tempo que tem que demorar pra aparecer uma recompensa qdo o wreck passa pelo scanner pode ser “setado” com o tempo_min e tempo_max.

Lista de recompensas

Finalmente, vc deve escolher qual carro da qual recompensa. Isso eh feito com o seguinte comando:

DECLARE_POWERUP_CARLIST ( CARRO1 , CARRO2 , … , CARRO18 , CARRO19 )
Recompensas do Car Crusher
CARRO1 , CARRO2 , … , CARRO18 , CARRO19 A lista de carros correspondentes a lista de recompensas abaixo (em ordem). CARRO1 da uma metralhadora, CARRO2 uma Rocket Launcher, CARRO3 uma Electrogun, etc. Armas vem em
sets de 3x5 de munição. Carros não mencionados nessa lista darão uma metralhadora
1 Metralhadora
2 Rocket Launcher
3 Electrogun
4 Molotov Cocktails
5 Grenades
6 Shotgun
7 Electro Baton (coloque um veiculo pesado aqui ou um veículo ja colocado pra evitar que os jogadores peguem o Electro Baton
8 Flamethrower
9 Silenced Machine Gun
10 Health
11 Armour
12 Get Outta Jail FreeCard
13 Cop Bribe
14 Invulnerability*
15 Double Damage
16 Fast Reload
17 Electrofingers
18 Respect!
19 Invisibility

Exemplo

Abaixo está um exemplo de um car crusher funcional e completo.

CRANE_DATA crushera = ( 67.5 , 84.5 ) 0 NO_HOMECRANE FIRST ( 65.5 , 86.5 ) 180
CRANE_DATA crusherb = ( 44.5 , 21.5 ) 283 crushera SECOND ( 43.5 , 21.5 ) 0
CRUSHER crusherc = ( 65.5 , 86.5 )
CONVEYOR crusherd = ( 67.0 , 81.5 , 3.0 ) ( 8.0 , 1.0 ) -1 0
DESTRUCTOR crushere = ( 70.5 , 81.5 , 3.0 ) ( 1.0 , 1.0 )
CONVEYOR crusherg = ( 73.5 , 87.0 , 3.0 ) ( 1.0 , 8.0 ) 0 1
GENERATOR crusherf = ( 73.5 , 83.5 , 3.0 ) 0 COLLECT_06 300 300 5
DESTRUCTOR crusherh = ( 73.5 , 90.5 , 3.0 ) ( 1.0 , 1.0 )
LEVELSTART
DECLARE_CRANE_POWERUP ( crusherb , crusherf , 69.5 , 81.5 , 3.0 )
DECLARE_POWERUP_CARLIST ( ALFA , DART , EDSEL , FIAT , GRAHAM , JEFFREY , JEFFREY , MORGAN , MORRIS , SPIDER , STINGRAY , STYPE , STYPECAB , VESPA , WBTWIN , XK120 , MIURA , EDSELFBI , ISETTA )
LEVELEND

 

Notas

  • Vc só pode fazer 10 crushers. Nenhum a mais
  • Vc só pode usar uma lista de recompensas, todo car crusher dará as mesmas recompensas.

Read more...

quinta-feira, 3 de dezembro de 2009

Car Shops

Car shops como o Max Paynt, Red Army Surplus e Hell Oil são muito fáceis de adicionar a seu mapa.

O prédio


Primeiro, vc precisa de colocar um predio no mapa pra colocar os car shops nele. Vc pode copiar-colar um dos mapas originais ou desenhar seu proprio predio. Lembre-se que os prédios tem que ser cobertos, pra mascarar o fato que os carros mudam de cor do nada. E também lembre-se de fazer seus carshops reconhecíveis, aí os jogadores podem achá-los

Nesse tutorial eu fiz meu próprio prédio de carshop, mas vcs podem simplesmente abrir um dos distritos ou qualquer mapa com um carshop, selecionar o car shop e apertar CTRL+C, abrir seu mapa e apertar CTRL+V para colar o prédio onde quer que vc queira colocá-lo. Vc pode mover o predio selecionando-o e apertando Alt+setas (norte,sul,leste,oeste)/Q(acima)/A(abaixo). Tenha certeza que há espaço suficiente para as ruas que entram no carshop. Seu carshop se parecerá com isso:



Agora nos temos um prédio para nosso CarShop. Mas naturalmente nada acontecerá quando vc passar pelas ruas dele. Os CarShops verdadeiros são criados com o comando OBJ_DATA no script. Abra seu script e coloque isso na parte de programação (após LEVELSTART) do seu script:



OBJ_DATA name = ( X.x , Y.y , Z.z ) 0 CAR_SHOP tipo_shop







NomeUm nome único
X.x , Y.y , Z.zAs coordenadas do carshop
0A rotação do carshop. Deixe-a em 0 pois carshops nao devem ser rotacionados
tipo_shopO tipo de carshop que vc qr adicionar. Há quatro tipos de carshop: MACHINEGUN_SHOP, BOMB_SHOP, MINES_SHOP e OILSLICK_SHOP. O quinto carshop, o Max Paynt, não tem um código, ele é feito adicionando o remap no qual o carro vai ser pintado (lista aqui)


Pra criar um Red Army Surplus em 87,65,2, um Hell Oil em 89,65,2, um Max Paynt preto em 91,65,2, um Gold Mines em 93,65,2 e um Smith & Heston's em 95,65,2, o código se parecerá com isso:



OBJ_DATA machinegunshop1 = ( 95.5 , 65.5 , 2.0 ) 0 CAR_SHOP MACHINEGUN_SHOP
OBJ_DATA minesshop1 = ( 93.5 , 65.5 , 2.0 ) 0 CAR_SHOP MINES_SHOP
OBJ_DATA sprayshop1 = ( 91.5 , 65.5 , 2.0 ) 0 CAR_SHOP 2
OBJ_DATA oilslickshop1 = ( 89.5 , 65.5 , 2.0 ) 0 CAR_SHOP OILSLICK_SHOP
OBJ_DATA bombshop1 = ( 87.5 , 65.5 , 2.0 ) 0 CAR_SHOP BOMB_SHOP

Read more...

quarta-feira, 2 de dezembro de 2009

Adicionando luzes

Se vc quiser jogar seu mapa no modo dusk, vc tera q adicionar várias luzes pelo mapa inteiro, ou entao ele ficará todo escuro.

As luzes podem ser feitas no map editor criando light markers. Pra fazer isso, vc tem q selecionar o bloco onde vc qr colocar a luz. Isso pode ser em qqr lugar, ate mesmo dentro de predios.


^selecionando o bloco para adicionar a luz^

Vá em Edit>Lights>Add selection ou aperte Alt + L. Essa janela vai aparecer:



Essa janela eh usada pra alterar todas as caracteristicas da luz q vc vai adicionar. Vc pode mudá-las dps clicando duas vezes num light marker existente. Vc pode remover luzes criadas clicando em "Del".

A luz no exemplo vai ficar num sinal de neon vermelho/marrom, entao a luz tem q ser um vermelho escuro. As cores podem ser escolhidas em Colour > Choose. A intensidade da luz pode ser alterada em intensity, e o tamanho em Radius. Vc pode tbm fazer luzes que piscam com Timing, mas não eh mto usada e causa desynch no multiplayer.

Crie a luz qdo todas as configuraçoes estão corretas clicando em OK. Um light marker vai aparecer no bloco selecionado. Se não, vá em Edit > Lights > View Markers pra mostrar todos os light markers


^um light marker^

Para ver como seria seu mapa no modo dusk, clique em Edit > Lights > View.



Notas



  • Não use apenas luz branca. Luzes na cor do tile no qual ela vai ser colocada geralmente cria um efeito legal.

  • Tente usar cores diferentes. Cores brilhantes sao boas p/ sinais de neon, vermelho cria uma atmosfera escura e sombria, amarelo cria uma atmosfera sóbria, etc.

  • É importante criar luzes o suficiente sobre as ruas, assim os jogadores podem ver (p/) onde eles estao dirigindo

Read more...

domingo, 8 de novembro de 2009

THREAD_TRIGGERs

Um THREAD_TRIGGER eh, como o nome indica, um comando que faz uma subroutine funcionar qdo um char (geralmente o jogador) atende um telefone ou entra num certo carro. Existem 5 THREAD_TRIGGERs diferentes:



THREAD_TRIGGER nome = THREAD_WAIT_FOR_CHAR_IN_CAR ( nome_char , nome_carro , subroutine: )
THREAD_TRIGGER nome = THREAD_WAIT_FOR_CHAR_IN_BLOCK (nome_char , X.x , Y.y , Z.z , subroutine: )

THREAD_TRIGGER nome = THREAD_WAIT_FOR_CHAR_IN_AREA (nome_char , X.x , Y.y , Z.z , taman_X , taman_Y , subroutine: )

THREAD_TRIGGER nome = THREAD_WAIT_FOR_CHAR_IN_AREA_ANY_MEANS (nome_char , X.x , Y.y , Z.z , taman_X , taman_Y , subroutine: )

THREAD_TRIGGER nome = THREAD_WAIT_FOR_ANSWER_PHONE ( nome_char , nome_telef , subroutine: )










nomeUm nome único pro TT
nome_charO nome do char
nome_carroO nome do carro que o char deve entrar
X.x , Y.y , Z.zAs coordenadas do bloco ou área q o char deve entrar
taman_X , taman_YA largura (eixo X) e o comprimento (eixo Y) da área em blocos (coloque 1.0 e 1.0 pra apenas um bloco)
nome_telefO nome de um telefone.
subroutine:O nome da subroutine que deve começar a funcionar qdo as condiçoes estiverem corretas (nao se esqueça do ":" no fim do nome dela!)


O THREAD_WAIT_FOR_CHAR_IN_AREA_ANY_MEANS eh mto parecido com o THREAD_WAIT_FOR_CHAR_IN_AREA, mas ele checa pelo char entrando na area tanto por carro como de a pé, enqto que o segundo checa pelo char entrando na área apenas de a pé.

Os TTs sao sempre "setados" e criados antes do LEVELSTART ao mesmo tempo, mas eles podem ser ativados e desativados no meio do jogo:



DISABLE_THREAD_TRIGGER ( nome_do_tt )
ENABLE_THREAD_TRIGGER ( nome_do_tt )

Read more...

Subrotinas/Subroutines

um post sobre uma coisa que nem eu sei direito lol

Subrotinas/subroutines sao usadas pra facilmente "pular" pra um set de comandos no script.

Subroutine:


Uma subroutine eh criada com o seguinte comando:



nome:
//O código vai aqui
RETURN





nome:Um nome unico pra subroutine. Note o ":" no fim dele.
RETURNToda subroutine termina com um RETURN


FORWARD


P/ ativar uma subroutine no começo do jogo, use o seguinte comando:



FORWARD nome:


O FORWARD deve ser antes do LEVELSTART

GOSUB


P/ ativar uma subroutine no meio do jogo, use o seguinte comando:



GOSUB nome:


E lembre-se de nunca esquecer de colocar o ":" no fim do nome da subroutine!

Read more...

sábado, 24 de outubro de 2009

COUNTERs

Os COUNTERs são vitais p/ scripts complexos, mas eles sao muito faceis pra se trabalhar. Como o nome sugere, o COUNTER simplesmente "conta": ele mantem o controle de valores. Vc pode usá-los como o contador de alguma coisa aparecendo na tela ou como um simples "liga/desliga" de um IF ou WHILE.

COUNTER


Pra usar um COUNTER vc primeiro precisa declará-lo antes do LEVELSTART. Isso eh feito com o comando:



COUNTER nome


Isso cria um COUNTER com o valor 0. Vc pode aumentar esse valor extendendo o comando:



COUNTER nome = valor


Note q os COUNTERs nao podem ter um valor menor que -32768 nem maior que 32767 e esses valores devem ser inteiros.

SAVED_COUNTERs


Os SAVED_COUNTERs funcionam do mesmo jeito que os COUNTERs, com a diferença de q os SAVED_COUNTERs tem seu valor salvo quando o jogo eh salvo. Os COUNTERs normais terão seu valor voltados ao normal quando o jogo eh salvo e recarregado

SET


Pra mudar um counter no meio do jogo, vc tem q usar o seguinte comando dps do LEVELSTART:



SET nome = novo_valor


O novo valor pode ser um número normal ou uma das seguintes expressoes:



SET nome = counter2
SET nome = ( counter2 + counter3 )
SET nome = ( counter2 - counter3 )
SET nome = ( counter2 * counter3 )
SET nome = ( counter2 / counter3 )
SET nome = ( counter2 + valor )
SET nome = ( counter2 - valor )
SET nome = ( counter2 * valor )
SET nome = ( counter2 / valor )


Usando um COUNTER dentro de um IF


Normalmente os COUNTERs sao usados como a expressao p/ um IF. Usando um IF, vc pode ativar certo comando qdo o COUNTER atinge certo valor. Geralmente esse valor eh 1, o que significa q o COUNTER atua como um simples "liga/desliga" (no qual 1 eh "ligado/verdadeiro" e 0 eh "desligado/falso")



COUNTER counter1
COUNTER counter2 = 3

LEVELSTART

IF ( counter1 = 1 ) //Se o counter1 esta com o valor 1...
SET counter2 = 5 //Dê ao counter2 o valor 5
ENDIF

LEVELEND


Vc tbm pode usar varias comparaçoes entre outros COUNTERs pra usar como expressao:



IF ( counter1 < valor ) //Se o counter1 eh menor q tal valor...
IF ( counter1 < counter2 ) //Se o counter1 eh menor q counter2...
IF ( counter1 > valor ) //Se o counter1 eh maior q tal valor...
IF ( counter1 > counter2 ) //Se o counter1 eh maior q counter2...
IF ( counter1 = valor ) //Se o counter1 eh igual a tal valor...
IF ( counter1 = counter2 ) //Se o counter1 eh igual ao counter2...

Read more...

sexta-feira, 23 de outubro de 2009

10º Aniversário do GTA2

Hj (23/10/09) faltam 4 dias (27/10/09) para o 10º aniversário do GTa2 (e para o meu tbm :P) :). Nesse dia o jogador e modder [DAFE], Ontario, Canadá lançará a mais nova versão do seu mapa, DAFE's Death Valley (a mais da hora ate agora :P, atualmente em fase de testes com certos jogadores) e, provavelmente, o programador e modder Sektor lançará a mais nova versão do GTA2 Game Hunter (GH), a 1.5. Junto com o GH 1.5 será lançada a versão do Vike (jogador e modder tbm) do GTA2.exe, a 11.0, a qual o GH vai, tecnicamente, obrigar os jogadores a usar. Eu tbm lançarei a mais nova versao de um dos meus mapas: Gustavob's RC Race, com o conserto de vários bugs

Read more...

WHILE

Os WHILE são quase identicos aos IFs, mas os comandos num WHILE vão se repetir enquanto a expressao for verdade, enquanto q os IFs serão executados apenas uma vez.



WHILE ( expressão )
//comandos
ENDWHILE






expressaoA situaçao que faz os comandos entre WHILE e ENDWHILE acontecerem
//comandosOs comandos que terão que acontecer repetidamente quando "expressao" é verdade
ENDWHILETodo WHILE deve terminar com um ENDWHILE


WHILE_EXEC


Para ativar todos os comandos de WHILE necessários duma vez, ao invés de um por um, existe o comando WHILE_EXEC. Tenha cuidado quando usando eles, pois muitos WHILE_EXEC deixarão o jogo mais lento. Normalmente o tempo que os comandos no WHILE normal é bem notável



WHILE_EXEC ( expressão )
//comandos
ENDWHILE


WHILEs e WHILE_EXECs podem ser extendidos com AND, OR e NOT do mesmo jeito que o IF.

Read more...

quarta-feira, 14 de outubro de 2009

IF

Primeiro post da parte de Programaçao na área Script(ing)

IF


O IF eh usado pra ativar certos comandos quando tal situaçao ocorre. Tecnicamente: "SE(IF) X é verdade, entao faça Y acontecer". Vc pode fazer o jogador ganhar uma arma qdo chega num carro ou bloco, por exemplo.

O IF eh usado desse jeito:




IF ( expressao )
//comando
ENDIF







expressaoA situaçao q faz o comando entre IF e ENDIF acontecer. Pode ser um COUNTER (explicado mais tarde) ou um check como HAS_CHARACTER_DIED (TAL_CHAR_MORREU, uma lista desses checks pode ser encontrada no GTA2 Scripting.doc)
comandoO comando que acontece quando o q ta dentro do IF ( ) eh verdade
ENDIFO final do IF. Todo IF deve terminar com um ENDIF


Variáveis


Os IFs podem ser usados de tudquantéjeito. Por exemplo, vc pode criar um IF dentro de um IF:


IF ( X )
//Esses comandos acontecem qdo X é verdade
 IF ( Y )
//Esses comandos acontecem qdo X e Y acontecem no jogo
ENDIF
ENDIF



Note que o segundo IF esta identado. Isso nao eh necessário, mas deixa o Script mais facil de se ler.

Vc tbm pode adicionar mais checks:



IF ( NOT ( X ) )
//Esses comandos acontecem qdo X não eh verdade
ENDIF



IF ( X )
//Esses comandos acontecem qdo X eh verdade
ELSE
//Esses comandos acontecem qdo X não eh verdade
ENDIF



IF ( ( X ) AND ( Y ) )
//Esses comandos acontecem qdo X e Y acontecem
ENDIF



ENDIF
IF ( ( ( X ) AND ( Y ) AND ( Z ) )
//Esses comandos acontecem qdo X, Y e Z sao verdade



IF ( ( X ) AND ( Y ) ) OR ( Z ) )
//Esses comandos acontecem qdo X e Y, ou apenas Z sao verdade
ENDIF



IF ( ( X ) OR ( Y ) )
//Esses comandos acontecem qdo X ou Y sao verdade
ENDIF



IF ( ( ( X ) AND ( Y ) ) AND ( Z ) )
//Esses comandos acontecem qdo X, Y e Z sao verdade
ENDIF


Há varias outras combinaçoes possiveis. Preste atençao ao colocamento dos parenteses: deve haver um fecha parenteses pra cada abre parenteses e só é possivel combinar duas situaçoes por vez.
Portanto isto está errado:



IF ( ( X ) AND ( Y ) AND ( Z ) )

Mas isto está correto:


IF ( ( ( X ) AND ( Y ) ) AND ( Z ) )

Read more...

sexta-feira, 9 de outubro de 2009

“carinhas”/characters

Os “carinhas”/characters (tbm chamados de chars, bots, pedestres ou peds, dos quais os dois ultimos representam os pedestres normais do jogo) especiais (pedestres sao criados automaticamente nas areas de pavement do map editor) sao mto importantes qdo vc esta criando missoes ou estruturas de codigo similares. Vc pode dar varios objetivos a eles

criando os chars

Os chars sao criados no script com o seguinte comando:
CHAR_DATA nome ( X.x , Y.y , Z.z ) //Comando Declare
nome = CREATE_CHAR ( X.x , Y.y , Z.z ) remap rotação ocupaçao END
//Comando Set
CREATE_CHAR nome ( X.x , Y.y , Z.z ) remap rotação ocupaçao //Comando Declare & Set

 

nome O nome único do char
( X.x , Y.y , Z.z ) As coordenadas onde ele deve ser criado
remap A cor da roupa dele. Cada remap tem um numero q esta listado no link q sera mostrado no fim do post
rotação A rotaçao do char (0 é sul)
ocupaçao A ocupaçao do char (veja link no fim do post)

Dando objetivos ao char

So criar um char nao tem mta graça; na maioria das vezes vc vai ter so um char parado sem fazer nada. Por isso vc tem q dar objetivo(s) ao(s) char(s) pra deixar ele mais interessante.

SET_CHAR_OBJECTIVE ( nome , objetivo )
SET_CHAR_OBJECTIVE ( nome , objetivo , segundo_item )
SET_CHAR_OBJECTIVE ( nome , objetivo , X.x , Y.y , Z.z )
SET_CHAR_OBJECTIVE ( nome , objetivo , X.x , Y.y , Z.z , rotaçao , distancia )

 

nome o nome do char pra dar objetivo
objetivo o objetivo do char
segundo_item Usado dependendo do obj do char
X.x , Y.y , Z.z "         "                 "     "   "
rotaçao "         "                 "     "   "
distancia "         "                 "     "   "

Exemplo

Vamos criar um policial q qr matar o player a qualquer custo

CHAR_DATA policia ( 126.5 , 112.5 , 2.0 ) 0 0 POLICE
SET_CHAR_OBJECTIVE ( policia , KILL_CHAR_ANY_MEANS , player1 )

Se vc fizer isso, ele vai te atacar socando vc, o q nao combina mto com um policial. Portanto vamos dar a ele uma arma. E tbm, ele vai te perseguir com um Benson marrom, o q tbm nao combina mto com ele. Vamos dá-lo um Cop Car.

GIVE_WEAPON ( policia , PISTOL )
SET_FAVOURITE_MODEL ( policia , COPCAR )

 

Remaps & Ocupaçoes

Aqui vc pode achar uma lista completa de remaps e ocupaçoes de chars.

Read more...

sábado, 3 de outubro de 2009

Sons

Os sons no GTA2 são feitos quase do mesmo jeito que objetos, mas com um comando diferente:

SOUND nome = ( X.x , Y.y , Z.z ) som
PLAY_INSTANT/PLAY_FOREVER



























nome O nome unico do som
( X.x , Y.y , Z.z ) As coordenadas do som
som O tipo de som (ver tabela no fim do post)
PLAY_INSTANT/PLAY_FOREVER Escolher entre tocar uma vez so ou pra sempre, respectivamente




Exemplo


Se vc quiser criar o barulho do órgão da igreja de salvar o jogo nas coords 121.5 , 56.5 , 2.0, tocando pra sempre, o comando vai se parecer com isso:

SOUND orgao ( 121.5 , 56.5 , 2.0 ) CHURCH_SINGING
PLAY_FOREVER


Lista de sons



























































































































































































































































































































Som
Código
Nada WIND
Música com batida forte NIGHT_CLUB
Música com batida forte BAR
Zumbido industrial GENERATOR_RUMBLE
Work shop WORKSHOP
Órgão da igreja CHURCH_SINGING
Mantra Krishna TEMPLE_CHANT
Zumbido industrial INDUSTRIAL_HIGH
Vários gritos de pedestres HUMAN_ABATTOIR
Várias risadas loucas FUNNY_FARM
Alarme de banco BANK_ALARM
Zumbido industrial INDUSTRAL_LOW
Água borbulhando e suspiro PORTA_LOO
Água caindo WATERFALL
Trinado de grilo CRICKETS
Nada PRISON
Alarme de prisão PRISON_ALARM
Gangue gritando “Let us out!” GANG_DUMPED
Várias risadas SMUG_LAUGH
Nada PRISON_YARD
Distúrbio PRISON_RIOT
Gangue gritando “Let us out!” GANG_LOCKED_IN_BUS
Barulho de shopping SHOPPING_MALL
Barulho de relogio CLOCK_TOWER
WHOO! YEEHEEE! (INSTANT apenas) YEEHA_BOMB
Jogo de boliche BOWLING_ALLAY
Nada CROWD_NOISE
Ventilador industrial FAN_NOISE
Nada GENERATOR_LOSE_POWER
Grito (apenas INSTANT) SCREAM
Tic tac” de bomba BOMB_TICK
Merda!/Shit!” BOMB_TICK_SHIT!
Nada DETECTED_MUMBLE
Canto Krishna (do GTA1) KRISHNA_CHANT
Choro (apenas INSTANT) CRYING
Gatilho preso (INSTANT) ROCKET_LAUNCH_FAIL_CLICK
Risada (INSTANT) ROCKET_FAIL_LAUGH
Pedestre envenenado (INSTANT) POISONED
Zumbido industrial POWER_PLANT
Murmuro MUMBLE
Música c/ saxofone JAZZ_CLUB
Música c/ violão COUNTRY_CLUB
Barulho com som de “tic tac” BAR_2
Música com piano profundo STRIP_CLUB
Canto Krishna TEMPLE_2
Garagem abrindo GARAGE_OPEN
Garagem fechando GARAGE_CLOSE
Pessoas gritando “Let us out!” LET_ME_OUT
Água borbulhando VAT
Zumbido industrial PYLON
Nada SKID

Read more...

sábado, 26 de setembro de 2009

Criando objetos, armas e powerups/pickups

Aqui vai ser falado sobre como vc cria armas, powerups ou objetos genericos como cones.

OBJ_DATA




OBJ_DATA nome ( X.x , Y.y , Z.z ) rotação objeto [munição]








nomeUm nome único pro objeto
( X.x , Y.y , Z.z )As coordenadas
rotaçaoA rotaçao do objeto, veja o post do script principal
objetoO tipo de objeto, veja a tabela abaixo
[munição]A munição (so funciona se vc criar uma arma com o comando OBJ_DATA)


Exemplos


Se vc quiser criar uma Rocket Launcher/Bazooka nas coords 85.5 , 79.5 , 2.0, o comando vai se parecer com isso:




OBJ_DATA zooka ( 85.5 , 79.5 , 2.0 ) 0 COLLECT_02 10



E se vc quiser criar um banco nas coords 98.5 , 80.5 , 2.0, virado pro oeste, o comando seria ± assim:




OBJ_DATA banco ( 98.5 , 80.5 , 2.0 ) 270 BENCH



GENERATORs


Vc provavelmente vai querer criar armas e powerups q reaparecem, pra isso existe o comando GENERATOR. Os GENERATORs sao um pouco mais complicados q os OBJ_DATA, pois consistem de duas partes: o GENERATOR em si e o comando que o liga. A primeira parte eh mais ou menos assim:



GENERATOR nome = ( X.x , Y.y , Z.z ) rotaçao tipopickup tmpomin 
tmpomax muniçao











nome
O nome único do GENERATOR. Vc vai precisar dele dps, portanto escolha um nome lembrável
( X.x , Y.y , Z.z )As coordenadas
rotaçaoA rotaçao do pickup/arma
tipopickupO tipo de " / "
tmpominO tempo mínimo que o pickup demora pra reaparecer
tmpomaxO tempo máximo que o pickup demora pra reaparecer
muniçãoA muniçao q vc recebe qdo vc pega a arma


Essa parte do comando apenas declara onde o pickup deve ser colocado, e o q o jogo deve criar, portanto vem antes do LEVELSTART. Agora vc tem q usar o comando SWITCH_GENERATOR, q liga e desliga os GENERATORs. Todos os GENERATORs sao automaticamente colocados como desligados (OFF) e vc tem q ligá-los com o comando SWITCH_GENERATOR depois do levelstart




SWITCH_GENERATOR nomegnrtor ON/OFF






nomegnrtorO nome do generator q vc usou antes
ON/OFFO valor q define se o GENERATOR está ligado (ON) ou desligado (OFF)


Note q o GTA2 nao aguenta mais q 120 GENERATORs

Exemplos


Se vc qr criar uma S-Uzi Machine Gun (SMG/Metralhadora) nas coords 114.5 , 83.5 , 2.0, com 10 de munição, q reaparece a cada mais ou menos um minuto, o código se parecerá com isso:



GENERATOR smg ( 114.5 , 83.5 , 2.0 ) 0 COLLECT_01 1600 1800 10



Lista de codigos


Essa pagina contem uma lista de todos os objetos/armas/powerups q podem ser usados no GTA2. Varios objetos sao feitos de outras coisas retiradas do jogo antes do lançamento e podem ter falhas. O GTA2 Scripting.doc menciona tbm os objetos CROSS, GRAVE e FBI BLOCK, mas esses objetos nao sao reconhecidos pelo Script Compiler.

Read more...

sexta-feira, 25 de setembro de 2009

Criando veiculos

O GTA2 automaticamente cria os veiculos andando nas ruas, apenas os veiculos estacionados e de missoes q tem q ser postos no script.

O comando


Pra criar um carro no script vc usa o seguinte comando:



PARKED_CAR_DATA nome ( X.x , Y.y , Z.z ) remap rotaçao modelo








nomeO nome unico pro carro
( X.x , Y.y , Z.z )As coordenadas nas quais o carro vai ser colocado
remapA cor do carro (veja a lista abaixo)
rotaçaoA rotaçao do veículo (veja o compasso no post do Script principal)
modeloEh o nome do veículo usado no script (nao o do jogo, p.ex. "Panto"; veja a tabela abaixo)


Exemplo


Se vc quiser criar um Z-Type preto nas coords 108.5 , 80.5 , 2.0, rotacionado 45° (virado pra sudeste), o comando se pareceria com isso:



PARKED_CAR_DATA ztype1 ( 108.5 , 80.5 , 2.0 ) 2 VTYPE


Cores e nomes dos veículos no script

















































































































































Veículo
  ↓
Codigo
  ↓
Aniston BD4
AMDB4
Arachnid
SPIDER
Armed Land Roamer
GUNJEEP
A-Type
RTYPE
Beamer

BMW
Benson
MERC
Box Truck
BOXTRUCK
Big Bug
MONSTER
B-Type
STYPE
Bug
BUG
Bus
BUS
Bulwark

BUICK
Container
TRUKCONT
Cop Car
COPCAR
Dementia
ISETTA
Dementia Limousine
ISETLIMO
Eddy
EDSEL
Fire Truck
FIRETRUK
Furore GT

ZCX5
G4 Bank Van
BANKVAN
Garbage Truck
GTRUCK
GT-A1
GT24640
Hachura
STRIPETB
Hot Dog Van
HOTDOG
Ice Cream Van
ICECREAM
Jagular XK

XK120
Jefferson
JEFFREY
Karma Bus
KRSNABUS
Land Roamer
JEEP
Maurice
MORRIS
Medicar
MEDICAR
Meteor
STRATOS
Meteor

STRATOSB
Miara
MIURA
Michelli Roadster
T2000GT
Minx
DART
Morton
MORGAN
Pacifier
APC
Panto
FIAT
Pickup

PICKUP
Romero
ALFA
Rumbler
WBTWIN
Schmidt
MESSER
Shark
GRAHAM
Special Agent Car
EDSELFBI
Sports Limousine
LIMO2
Spritzer

SPRITE
Stinger
STINGRAY
Stretch Limousine
LIMO
SWAT Van
SWATVAN
Tank
TANK
Tanker
TANKER
Taxi
TAXI
Taxi Xpress

STYPECAB
Tow Truck
TOWTRUCK
Trance Am
TRANCEAM
Transporter
TRUKTRNS
T-Rex
TBIRD
Truck Cab
TRUKCAB1
Truck Cab SX
TRUKCAB2
TV Van

TVVAN
U-Jerk Truck
VESPA
Van
VAN
Wellard
ALLARD
Z-Type
VTYPE


Vehicle colors



















































































Cor
  ↓
Codigo
  ↓
14Marrom

0
(Cor padrao, podera ser diferente qdo usada com outros carros como o Eddy)
61Roxo escuro
1
71Preto
2
591Azul

3
57Azul acinzentado
4
41Verde "brilhante"
5
22Vermelho brilhante
6
17Marrom
7
18Marrom
8
56Azul prateado
9
31Amarelo

10
12Creme
11
52Ciano
12
44Bege escuro
13
59Azul escuro
14
58Azul profundo
15
43Verde escuro
16
21Vermelho escuro

17
16Cor-de-ferrugem escura
18
13Dourado
19
42Verde
20
72Cinza
21
32Verde amarelado
22
45Oliva
23
24Laranja

24
54Azul pálido
25
23Cor-de-rosa
26
62Roxo
27
23Vermelho
28
15Cor-de-ferrugem
29
73Prata
30
53Azul céu

31
51Turqueza
32
74Cinza claro
33
75Branco
34
11Amarelo
35
55Azul claro
36
(Só da pra usar com a G4 Bank Van [van do banco])

Read more...

Lista de códigos e comandos

Essa página contém uma lista com os codigos de cores de veículos estacionados (script), remaps de chars (script), nomes dos carros no script, nomes de sons, objetos, armas e powerups pra colocar no script e essa contém todos os comandos usados no script de GTA2 (que estão no documento GTA2 Scripting.doc pela R* Games)

Read more...

domingo, 20 de setembro de 2009

Script compiler (compilador de scripts)

O compilador de scripts eh um programa oficial da DMA Design (atual Rockstar North) q eh usado pra converter arquivos *.mis pra arquivos *.SCR

Compilando um script


Os scripts sao geralmente feitos em editores de texto normais. Pra criar um script usável, vc tem q salvá-lo como um arquivo *.mis. É bom nomear o seu script com o mesmo nome do seu mapa, entao o script de exemplo será chamado MapaTeste.mis. Abra o Script Compiler e carregue seu script em File > Load. O compiler deve se parecer com isso:



Vá em Run > Parser e o compiler imediatamente ira começar a compilar seu script. Nosso script de exemplo so tem tres linhas, entao a conversão irá levar apenas uma fraçao de segundo. Qdo ela estiver pronta, o compiler vai se parecer com isso:



Se há um erro no seu script, o compiler nao conseguira converter o arquivo e mostrará um erro:



Na maioria das vezes é apenas um simples errinho no seu código, como um typo ou um simbolo esquecido. O compiler vai mostrar onde ele encontrou o erro ("Current token") e o q foi feito errado. No exemplo o compiler "encontrou um símbolo desconhecido no script" perto de um "(" na primeira linha.

Qdo o script eh compilado, os novos arquivos ficarao na mesma pasta q o seu arquivo *.mis e com o mesmo nome. perto do *.scr, haverá tbm um arquivo *.tmp. Esse arquivo nao eh importante. Note q o Windows reconhecerá os arquivos *.scr como Proteções de tela (screensavers)

Qdo vc tem o arquivo *.scr, vc pode instalá-lo (veja Pondo uma fase no jogo) e jogar com o seu mapa.

Outra maneira de compilar seu script eh baixando o GTA2 MISPad, um editor e compilador de scripts de GTA2 feito por JernejL. Na parte superior do MISPad vc encontra os botoes de abrir scripts nao compilados, salvar seu script, compilar e varios outros; enquanto que na parte inferior vc encontra o log do compilador do MISPad.

Read more...

sábado, 19 de setembro de 2009

Script principal

Primeiro post na categoria GTA2 Scripting, onde vcs aprenderao sobre o Script do GTA2 =D

Script principal


Toda fase de GTA2 precisa de seu proprio script pra rodar. Os scripts sao vistos como os arquivos *.scr na pasta [...]\GTA2\data

LEVELSTART e LEVELEND


Antes de vc poder começar a fazer um script pro seu novo mapa, vc deve primeiro entender como eles funcionam. Os scripts de GTA2 sao divididos em duas partes: a parte de "declaraçao" e a parte de "programaçao". Essas partes sao separadas uma da outra com o comando LEVELSTART: td antes desse comando eh a parte de declaraçao, e td dps dele eh a parte de programaçao. Já q há um comando LEVELSTART, entao tbm deve ter um comando LEVELEND. Esse comando vai no finzim do script.

Entao a base de todo script deve se parecer com isso:






LEVELSTART

LEVELEND


Esse script ainda eh inutil, pq a gente nao tem um "carinha" pra controlar no jogo. Entao a proxima coisa a fazer no script eh um "Playerped". Isso eh feito com esse comando:





PLAYER_PED nome = ( X.x , Y.y , Z.z ) remap rotaçao












Nome:
O nome no script do playerped. Tudo q vc cria no script precisa de um nome unico, entao vc pode referir a essa coisa dps. Tenha certeza q vc da um nome reconhecivel a tudo, entao vc pode facilmente achá-lo qdo seu mapa começa a ficar grande
( X.x , Y.y , Z.z ):
As coordenadas nas quais o playerped aparece no começo do jogo. As coordenadas podem ser achadas selecionando um bloco no map editor e vendo o canto inferior direito do editor. Lembre-se que as coordenadas de dentro de um bloco sao mostradas. Entao, qdo vc clica num bloco no chao, o bloco abaixo do nível do chao vai ser selecionado. Usar essas coordenadas significa q o playerped vai aparecer abaixo do chao! As coordenadas X e Y tambem tem uma divergência de 0.5. Se vc qr seu playerped em 91, 84, 2, suas coordenadas serão ( 91.5 , 84.5 , 2.0 ).
Remap:
O remap eh a aparencia do playerped. Todo remap tem um numero, q sao listados abaixo.












NW

N

NE

225°
180°
135°

W
270°
X

90°
E

315°

45°

SW

S

SE


Rotação:
A direçao q o playerped deve estar virado, em graus de 0 a 359. 0 é o Sul (veja o compasso ao lado)


Esse eh um comando de declaraçao, portanto vem antes do LEVELSTART. Esse eh um dos primeirissimos comandos q vc coloca no seu script

Exemplo


Se vc qr um playerped padrao nas coordenadas ( 91.5 , 84.5 , 2.0 ), olhando pro leste, o comando vai se parecer com isso:


PLAYER_PED player1 = ( 91.5 , 84.5 , 2.0 ) 25 90


Qdo colocado no script, ele se parecerá com isso:


PLAYER_PED player1 = ( 91.5 , 84.5 , 2.0 ) 25 90

LEVELSTART

LEVELEND


"Declare" e "Set"


O comando PLAYER_PED é um comando chamado de "comando declare & set", o q significa q ele cria e coloca o playerped ao mesmo tempo no começo do jogo. No entanto, vc pode querer criar no meio do jogo ao inves de no começo. Pra fazer isso, vc tem q usar comandos separados de "declare" (declara o que vai ser criado) e "set" (que coloca o objeto no meio do jogo no lugar definido)

Isso nao eh possivel com o comando PLAYER_PED (pq vc nao pode criar mais jogadores no meio do jogo), entao nesse tutorial a gente usa o comando CHAR_DATA, q eh usado pra criar alguns chars (esse tema será mais aprofundado em posts futuros)

Declare & set


Um comando declare & set padrao deve se parecer com isso:


CHAR_DATA ped1 = ( 126.5 , 112.5 , 2.0 ) 21 270 DUMMY


Esse comando eh usado pra criar um pedestre no começo do jogo. O comando vai antes do LEVELSTART

Set


Se vc qr criar o pedestre no meio do jogo, por exemplo, durante uma missao, vc tem q usar esse comando:


ped1 = CREATE_CHAR ( 126.5 , 112.5 , 2.0 ) 21 270 DUMMY END


Esse comando "set" deve ser posicionado onde vc qr q o script coloque o pedestre, num IF (explicado em posts [bem] futuros), por exemplo. Ele tem q ser dps do LEVELSTART!

Declare


Se vc usa um comando set, vc tbm precisa "declarar" o pedestre com um comando "declare". Ele diz ao script para reservar "espaço" pra um pedestre q sera criado depois. Um comando "declare" se parece com isso:


CHAR_DATA ped1


Como vc vê, eh um comando mto curto. A única coisa q vc tem q adicionar eh o nome (nesse caso "ped1"), q tem q combinar com o nome no comando "set". Os comandos "declare" tem q ser antes do levelstart.

Adicionando notas ao script


Seu script eh mto basico no momento, mas qdo ele ficar maior e mais complexo vc pode querer colocar notas para nao se confundir no meio de tantas linhas de codigo. Pra prevenir o compilador de ver suas notas (o q causaria o compilador a dar um erro), vc tem q usar /*, */ e //.

Tudo numa linha dps do // sera ignorado pelo compilador. Texto numa nova linha (dps de um enter) será compilado d nv. Esse método eh mto util pra adicionar notas simples dps de um comando

Tudo entre /* e */ tbm será ignorado, mas isso inclui novas linhas. Esse método pode ser usado pra adicionar multiplas linhas de notas ou pra (temporariamente) desativar grandes partes de código.

Exemplos



PLAYER_PED player1 = ( 91.5 , 84.5 , 2.0 ) 25 90
//PLAYER_PED player1 = ( 87.5 , 84.5 , 2.0 ) 25 180 //Possível alternativa de ponto de início

LEVELSTART

/*Um monte de código vai ser adicionado aqui mais tarde.
Por enquanto ainda está vazio*/

LEVELSTART


Remaps


0
Policial


1
Policial da SWAT vermelho


2
Policial da SWAT verde


3
Policial da SWAT amarelo



4
Soldado


5
Redneck #1


6
Redneck #2



7
SRS Scientist


8
Zaibatsu


9
Hare Krishna



10
Membro da Russian Mafia


11
Loonie


12
Elvis


13
Yakuza



14
Bombeiro


15
Ladrao de carros


16
Medico


17
Pickpocket/ladrao de dinheiro



18
Pedestre azul


19
Pedestre azul claro


20
Pedestre verde


21
Pedestre



22
Prisioneiro


23
Pedestre envenenado


24
Pedestre envenenado #2


25
Claude Speed (playerped padrao)



26
Pedestre pelado


De 27 ate 52
Outros pedestres normais

Read more...