Ok, I wrote more code and now I got a problem, but with ` comment. I put big comments at the error.
`Project: Shooter
`Created: 14/2/2006 00:15:39
`***** Main Source File *****
`Atualiza tela o mais rápido possível
sync on : sync rate 0
`Esconde o mouse
hide mouse
`Desativar o auto posicionamento da camera em cada objeto que criamos
autocam off
`Vamos criar duas constantes - Largura e Altura do mapa
#constant MLargura = 25
#constant MAltura = 16
`Tamanho dos Tiles
#constant TileTamanho = 50
`Array bidimensional para armazenar os tiles das paredes
dim Mapa$(MLargura, MAltura)
`Para teste de colisão
make object cube 5, 15
set object collision to boxes 5
hide object 5
`Texturas do cenário
load image "Media\grass.jpg", 1
load image "Media\wall.jpg", 2
`CarregaMapa
CarregaMapa("teste2.txt")
gosub CriaMapa
gosub CriaTerreno
`#############################################################
`#############################################################
`#############################################################
` IF I DON'T COMMENT THE LINES BELOW,
`THE COMPILER SHOW THIS ERROR: Unknown command in SELECT statement at line 183
`Cria arma
`Carrega a textura
load image "Media\weapon.jpg", 3
`Cria a bazuca
make object cylinder 6, 2
`Gira para ficar deitado
xrotate object 6, 90
`Aplica textura
texture object 6, 3
`Aumenta o tamanho
scale object 6, 200, 800, 200
`Posiciona
position object 6, 0, -10, 20
`"Tranca" o objeto na tela (como se fosse uma imagem)
lock object on 6
`So, what the hell is that???
`#############################################################
`#############################################################
`#############################################################
`Cria a bala e deixa ela invisível
make object sphere 7, 2
hide object 7
VidaTiro = 0
`Loop principal
do
`Obter ângulo da câmera
cAY# = camera angle y()
`Atira
if mouseclick() = 1 and VidaTiro = 0
`Posiciona a bala de acordo com o jogador
position object 7, pX#, pY#+40, pZ#
`Aponta bala para onde o jogador estiver virado
set object to camera orientation 7
`Cria vida
VidaTiro = 30
`Mostra bala
show object 7
endif
`Faz a bala voar
if VidaTiro > 0
`Move o objeto
move object 7, 20
`Diminui a vida
dec VidaTiro
`Verifica vida
if VidaTiro = 0 then hide object 7
endif
`Verifica Cima-Baixo
if upkey() = 1
`pTesteX# e pTesteY# vão ser usados no teste de colisão
pTesteX# = newxvalue(pX#, cAY#, 1)
pTesteZ# = newzvalue(pZ#, cAY#, 1)
gosub ChecaColisao
else
if downkey() = 1
pTesteX# = newxvalue(pX#, wrapvalue(cAY#-180), 1)
pTesteZ# = newzvalue(pZ#, wrapvalue(cAY#-180), 1)
gosub ChecaColisao
endif
endif
`Verifica Direita-Esquerda
if rightkey() = 1
pTesteX# = newxvalue(pX#, wrapvalue(cAY#+90), 1)
pTesteZ# = newzvalue(pZ#, wrapvalue(cAY#+90), 1)
gosub ChecaColisao
else
if leftkey() = 1
pTesteX# = newxvalue(pX#, wrapvalue(cAY#-90), 1)
pTesteZ# = newzvalue(pZ#, wrapvalue(cAY#-90), 1)
gosub ChecaColisao
endif
endif
`Posiciona jogador em cima do do terreno
pY# = get ground height(1, pX#, pZ#)
`Rotaciona a camera com o mouse
cAY# = camera angle y() + mousemovex() * 0.2
cAX# = camera angle x() + mousemovey() * 0.2
`Vamos limitar o ângulo da câmera para não virar de cabeça para baixo.
if wrapvalue(cAX#) > 60 and wrapvalue(cAX#) < 180 then cAX# = 60
if wrapvalue(cAX#) > 180 and wrapvalue(cAX#) < 280 then cAX# = 280
rotate camera cAX#, cAY#, camera angle z()
`Após passar pelo teste de colisão, vamos posicionar a camera
`na sua nova posição
position camera pX#, pY#, pZ#
`Atualiza tela
sync
loop
ChecaColisao:
`Posicionamos o cubo de colisão em pTesteX# e com o pZ#
`para primeiro verificar se colidir com a parede na nova
`coordenada X
position object 5, pTesteX#, 0, pZ#
`Caso a nova posição X não se encontre em colisão com a parede,
`ela é aceita
if object collision(5, 0) = 0 then pX# = pTesteX#
`Vamos agora testar a coordenada Z
position object 5, pX#, 0, pTesteZ#
if object collision(5, 0) = 0 then pZ# = pTesteZ#
return
CriaTerreno:
`Para criar um terreno randômico novo a cada execução do jogo
randomize timer()
`Cria a matriz de tamanho 1000x1000 com tiles 50x50
make matrix 1, 2000, 2000, 50, 50
`Posiciona
position matrix 1, 0, -(TileTamanho*0.5), 0
`Cria um terreno com diferentes alturas
randomize matrix 1, 15
`Aplica textura ao terreno
prepare matrix texture 1, 1, 1, 1
`Atualiza terreno
update matrix 1
return
`Cria os objetos do tilemap
CriaMapa:
`Numero do objeto
ObjNum = 1000
`Vamos percorrer o mapa (linha-por-linha)
for y = 1 to MAltura
for x = 1 to MLargura
select Mapa$(x, y)
`Paredes horizontais
case "H"
`Cria o plano
make object plain ObjNum, TileTamanho, TileTamanho
`Posiciona objeto
position object ObjNum, x*TileTamanho, 0, y*TileTamanho
`Aciona colisão
set object collision to boxes ObjNum
`Aplica textura ao objeto
texture object ObjNum, 2
`Incrementa contador de objetos
inc ObjNum
endcase
`Paredes verticais
case "V"
`Cria o plano
make object plain ObjNum, TileTamanho, TileTamanho
`Posiciona objeto
position object ObjNum, x*TileTamanho, 0, y*TileTamanho
`Gira 90 graus
yrotate object ObjNum, 90
`Aciona colisão
set object collision to boxes ObjNum
`Aplica textura ao objeto
texture object ObjNum, 2
`Incrementa contador de objetos
inc ObjNum
endcase
case "X"
`Cria o primeiro plano
make object plain ObjNum, TileTamanho*0.5, TileTamanho
`Posiciona o primeiro plano
position object ObjNum, x*TileTamanho-TileTamanho*0.25, 0, y*TileTamanho
`Aciona colisão
set object collision to boxes ObjNum
`Aplica textura ao objeto
texture object ObjNum, 2
`Incrementa contador de objetos
inc ObjNum
`Cria o segundo plano
make object plain ObjNum, TileTamanho*0.5, TileTamanho
`Posiciona o segundo plano
position object ObjNum, x*TileTamanho, 0, y*TileTamanho+TileTamanho*0.25
`Gira 90 graus para ligar com a outra ponta
yrotate object ObjNum, 90
`Aciona colisão
set object collision to boxes ObjNum
`Aplica textura ao objeto
texture object ObjNum, 2
`Incrementa contador de objetos
inc ObjNum
endcase
case "Z"
`Cria o primeiro plano
make object plain ObjNum, TileTamanho*0.5, TileTamanho
`Posiciona o primeiro plano
position object ObjNum, x*TileTamanho+TileTamanho*0.25, 0, y*TileTamanho
`Aciona colisão
set object collision to boxes ObjNum
`Aplica textura ao objeto
texture object ObjNum, 2
`Incrementa contador de objetos
inc ObjNum
`Cria o segundo plano
make object plain ObjNum, TileTamanho*0.5, TileTamanho
`Posiciona o segundo plano
position object ObjNum, x*TileTamanho, 0, y*TileTamanho+TileTamanho*0.25
`Gira 90 graus para ligar com a outra ponta
yrotate object ObjNum, 90
`Aciona colisão
set object collision to boxes ObjNum
`Aplica textura ao objeto
texture object ObjNum, 2
`Incrementa contador de objetos
inc ObjNum
endcase
case "Q"
`Cria o primeiro plano
make object plain ObjNum, TileTamanho*0.5, TileTamanho
`Posiciona o primeiro plano
position object ObjNum, x*TileTamanho-TileTamanho*0.25, 0, y*TileTamanho
`Aciona colisão
set object collision to boxes ObjNum
`Aplica textura ao objeto
texture object ObjNum, 2
`Incrementa contador de objetos
inc ObjNum
`Cria o segundo plano
make object plain ObjNum, TileTamanho*0.5, TileTamanho
`Posiciona o segundo plano
position object ObjNum, x*TileTamanho, 0, y*TileTamanho-TileTamanho*0.25
`Gira 90 graus para ligar com a outra ponta
yrotate object ObjNum, 90
`Aciona colisão
set object collision to boxes ObjNum
`Aplica textura ao objeto
texture object ObjNum, 2
`Incrementa contador de objetos
inc ObjNum
endcase
case "W"
`Cria o primeiro plano
make object plain ObjNum, TileTamanho*0.5, TileTamanho
`Posiciona o primeiro plano
position object ObjNum, x*TileTamanho+TileTamanho*0.25, 0, y*TileTamanho
`Aciona colisão
set object collision to boxes ObjNum
`Aplica textura ao objeto
texture object ObjNum, 2
`Incrementa contador de objetos
inc ObjNum
`Cria o segundo plano
make object plain ObjNum, TileTamanho*0.5, TileTamanho
`Posiciona o segundo plano
position object ObjNum, x*TileTamanho, 0, y*TileTamanho-TileTamanho*0.25
`Gira 90 graus para ligar com a outra ponta
yrotate object ObjNum, 90
`Aciona colisão
set object collision to boxes ObjNum
`Aplica textura ao objeto
texture object ObjNum, 2
`Incrementa contador de objetos
inc ObjNum
endcase
case "P"
pX# = x*TileTamanho
pZ# = y*TileTamanho
endcase
endselect
next x
next y
`Retorna para o comando gosub que chamou CriaMapa
return
`Rotina para carregar o mapa
function CarregaMapa(Arquivo$)
`Abre arquivo para leitura
open to read 1, Arquivo$
`y é o número da linha
`x é o número da coluna
for y = 1 to MAltura
for x = 1 to MLargura
`Le proximo byte do arquivo (1 byte = 1 letra(char))
read byte 1, temp
`Não ler caracteres de nova linha
while (temp = 10) or (temp = 13)
read byte 1, temp
endwhile
`Poe temp em Mapa$, convertendo o valor do byte em uma letra
Mapa$(x, y) = chr$(temp)
next x
next y
`Fecha arquivo
close file 1
endfunction