VGA – Tutorial 12 – Denthor

                       --==[ PARTE 12 ]==--

Para obter os programas mencionados neste tutorial, por favor baixe o zip com a versão antiga do tutorial, neste link.

Introdução

Alô! 🙂

Bem, muita coisa aconteceu desde o último tutorial, que é a razão pela demora assustadora. Primeiro, as eleições. Essas foram bem fáceis, na verdade, eu fui e assisti a um filme (Demolition Man) (especial Dia da Eleições, todos os filmes R2, cerca de 50 cents de dólar), então fomos e votamos depois de a maioria dos eleitores já terem ido pra casa, então não pegamos filas muito grandes ;-). Logo depois foram os exames. Essas não foram muito bem, e não estou animado com os resultados. Por fim, peguei sarampo e pneumonia ao mesmo tempo, e fui mandado pro hospital por uns dias. Resumindo, não são eventos que te levam a programar! Isso significou que o tutorial atrasou, e ASPHYXIA não pôde entrar no democomp local, Dexterity’94, que esperávamos entrar. Oh, bem, para o alto e avante!

Este tutorial está cheio de rolagem de tela inteira em Chain-4, a pedidos. Isso é realmente muito fácil de fazer (e sem problemas), e tem muito potencial, como você pode imaginar imediatamente, com certeza.

Mais umas coisinhas: as pessoas têm dito que estão com problemas para me enviar email, e descobri que isso é porque se esqueceram do número no meu nome. Elas enviaram email para smith@batis… que não existe, ou smith@beastie… que é a conta do meu irmão. Ele está ficando doente de tanto repassar meus emails para mim ;). Os dois endereços são:

smith9@batis.bis.und.ac.za
smith0@beastie.cs.und.ac.za

Eu perdi cerca de 200k valiosos de email, devido ao meu status de principiante em Unix. O teste pra saber se seu email chegou? Eu respondi todo email enviado para mim (tarefa não fácil), assim, se você não recebeu a resposta, por favor, reenvie a mensagem.

Agora você pode também mandar uma mensagem em grupo para todos os membros da Aspyxia. É só mandar um email para asphyxia@beastie.cs.und.ac.za e todos vamos receber uma cópia… o que significa várias respostas para uma pergunta 😉

Se você gostaria de me contactar, ou ao time, há muitos modos que você pode fazê-lo: 1) Escrever uma mensagem para Grant Smith/Denthor/Asphyxia em email privado na ASPHYXIA BBS.
2) Escrever para Denthor, Eze, Goth, Fubar ou Nobody na Connectix.
3) Escrever para:
Grant Smith
P.O.Box 270 Kloof
3640
Natal
África do Sul
4) Ligar para mim (Grant Smith) no número (031) 73 2129
(deixe uma mensagem se você ligar quando eu estiver na faculdade)
Ligue para +27-31-73-2129 se você está ligando de fora da
África do Sul (A conta é sua ;-))
5) Escrever para smith9@batis.bis.und.ac.za
6) Escrever para asphyxia@beastie.cs.und.ac.za

OBS1 : Se você é um representante de uma companhia ou BBS e quer que a ASPHYXIA faça um demo para você, mande um email pra mim; podemos discutir.
OBS2 : Se você fez/tentou fazer um demo, MANDE PARA MIM! Estamos nos sentindo muito solitários e queremos encontrar/ajudar/trocar código com outros grupos de demos. O que você tem a perder? Mande uma mensagem aqui e podemos ver como transferir. Nós realmente queremos ouvir de você.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

O que é rolagem de tela inteira?

Eu me lembro de ter feito isso num tutorial anterior, mas aqui vai de novo! Scroll de tela inteira é quando uma tela inteira se move numa direção específica, com a nova figura rolando na tela. Hmmm… pense nos créditos de um filme. A tela, cheia do texto, é rolada a partir do início do texto no alto, enquanto o novo texto é rolado a partir do fundo da tela. Isso é a rolagem da tela inteira – Full screen scrolling.

O Scroll da tela não é limitado a créditos de filmes. Jogos, como Raptor têm você voando por sobre uma paisagem rolando, enquanto você está atirando nos caras maus. Nesse tutorial vamos fazer scroll vertical, mas o código pode ser facilmente alterado para rolagem horizontal também.

Lembre que usaremos Chain-4 para fazer nosso scroll, então você pode querer dar uma olhada no tutorial 10 em que isso foi coberto. Vou assumir um conhecimento breve de como chain-4 funciona para esse tutorial.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

A Teoria

A teoria por trás da rolagem da tela toda em chain-4 é muito simples, na verdade.

Imagine, se puder, uma tela que tenha dois monitores de altura. Chain-4 na verdade tem 4, mas para isso vamos precisar só de duas. Agora, para essa tela que tem duas telas de altura, podemos ver apenas um monitor. Aqui está isso em ASCII

+-------------+  Tela com dois monitores de altura
|             |
|             |
|             |
|             |
|+-----------+|
||           ||
||           ||<- Esse é o pedaço que podemos ver, só um monitor
||           ||
|+-----------+|
+-------------+

Podemos mover o pedaço visível, para ver mais pra cima ou para baixo na tela grande. Assim, por exemplo, se a tela de dois monitores de altura tivesse uma figura nela, poderíamos mover o pedaço visível para cima e para baixo para ver a figura inteira. Pense desse modo: a tela é uma pintura grande, mas podemos ver apenas através de uma pequena lente. Podemos mover essa lente por toda a pintura, mas nunca vê-la toda de uma vez.

Isso na verdade funciona a nosso favor. Qualquer coisa feita fora do pedaço que estamos olhando não pode ser vista, então podemos fazer nosso trabalho sem mudar nossa tela.

Continuemos no scroll. O método que vamos usar dessa vez é como se segue:

1) Desenhe a próxima linha a ser vista logo acima e logo abaixo da parte que podemos ver.

  +------------+ A tela grande
  |            |
  |            |
  |111111111111|  A nova parte da figura
  |+----------+|
  ||          || O pedaço que podemos ver
  |+----------+|
  |111111111111|  A nova parte da figura
  +------------+  

2) Mova a visão um pixel para cima de modo que a nova parte da figura fique visível no topo da tela.

3) Repita os passos 1) e 2) até que a tela toda esteja cheia. Nossa tela vai se parecer com isso:

 +---------------+
 |+-------------+|
 ||3333333333333||
 ||2222222222222|| Tela de visão
 ||1111111111111||
 |+-------------+|
 |333333333333333|
 |222222222222222|
 |111111111111111|
 +---------------+

Cheque essa figura com os passos 1) e 2), você verá que isso está correto.

4) Defina nosso portal de visão no fundo da tela grande.

 +---------------+
 |333333333333333|
 |222222222222222|
 |111111111111111|
 |+-------------+|
 ||3333333333333||
 ||2222222222222|| Nova posição da tela de visão
 ||1111111111111||
 |+-------------+|
 +---------------+

Como você pode ver, o pedaço que estaremos olhando é exatamente o mesmo que antes, só que agora estamos no fundo da tela grande, ao invés do topo!

5) Pule de volta para 1). A sequência inteira pode começar de novo, e podemos ter scroll infinito no sentido para cima. Esperto, né?

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Nosso código

No código de amostra, temos 21 ícones diferentes. O que fazemos é decidir o que vamos colocar na próxima linha. Então desenhamos a próxima linha de pixels acima e abaixo da tela de visão de acordo com os ícones que estamos mostrando. Aí rolamos um pixel para cima e começamos de novo. Quando tivermos completado nossa linha de ícones, selecionamos aleatoriamente uma nova linha e começamos de novo. Nossos ícones são 16×16, então exatamente 20 cabem numa tela de 320 pixels.

Quando batemos no topo da tela grande, nós fazemos um flip para o fundo que se parece exatamente o mesmo da tela que acabamos de sair. Desse modo, obtemos uma tela deslizante infinita e “macia”!

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Dicas extras

Como você pode ver do código, poderia ser o trabalho de uns poucos minutos para estender nossa paisagem para as duas telas não usadas, permitindo assim movimento horizontal junto com nosso movimento vertical. Na verdade, a rotina inteira poderia ser facilmente feita como uma rotina de rolagem na horizontal.

Um mapa de tipos poderia ser gerado, com um byte significando um
tipo de terreno. Desse modo, o terreno em que se está rolando poderia ser setado, como num jogo de de vôo (flying Shark, Raptor, etc). O terreno poderia ser também facilmente substituído com letras para nossos créditos estilo filme.

Scroll de direção livre, isso é, scroll em todas as direções, é um assunto bem diferente, com muitos métodos diferentes de conseguir fazer funcionar. Talvez isso seja discutido num tutorial mais pra frente. Mas por enquanto, trabalhe com esse, conheça-o, entenda-o, e pense em muitas coisas grandiosas para fazer com ele! Que tal um scrolly de texto com a tela toda? Um jogo? Vai lá!

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Fechando

Bem, espero que você tenha gostado disso, o mais recente tutorial. O programa de amostra é um pouco pequeno, mas isso é por que o conceito é simples. Está em anexo um arquivo, PICCS.DAT, que contém o terreno e as letras para o programa. Eram arquivos .CEL, que eu carreguei na variável des^, e então dei um dump no disco, para acesso mais fácil depois. Os .CEL foram desenhados de forma simples, mas ainda produzem algum terreno legal.

Recebi pedidos para futuros tutoriais, e a maioria deles são para efeitos, então acho que isso é o que vai ser feito daqui em diante. Um número surpreendente de pessoas tem me dito para não fazer um tutorial de som, e continuar com as coisas sobre gráficos, com apenas alguns poucos pedindo coisas sobre som, então eu vou esperar até que haja mais demanda.

Eu ainda estou aberto para sugestões para futuros tutoriais, e é claro, sugestões para melhorar a série. Mande-me um email!

Hmm. uma quote? Ok, deixe-me pensar…

    [    O pequeno diabo sentou no alto de uma ladeira dos alpes, 
   brincando com a neve. Jogou uma bola de neve num esquilo por perto, e errou. A avalanche resultante disso enterrou duas vilas e um resort.
     O pequeno diabo estava assustado. Avalanches eram péssimas para o negócio. Os moradores da região iriam formar espírito de equipe, ser legais uns com os outros e trabalhar juntos e libertar
   aqueles presos na neve, que criaria ainda mais bondade. O homem
   no andar de baixo não gostava de bondade. Não gostava de jeito nenhum.
     Num piscar de olhos, o diabo estava no seu apartamento de 
   cobertura, vestido com seu terno. Pegou o telefone. Discar era
   para mortais. 
     "Alô, Micros..."
     "Aqui é o senhor Crowley", interrompeu o diabo.
     Houve sons de pancadas do outro lado do telefone, então houve 
   uma nova voz. "Alô, aqui é o Bill, não temos ouvido do
   você há um tempão, sr. Crowley." O medo do homem da outra 
   ponta era quase tangível. O diabo sorriu.
     "Olá Bill. Algo aconteceu."
     "Não!" O homem do outro lado quase gritou de terror. "Não o Win..."
     "Sim, Bill. Está na hora."
     "Eu não paguei o suficiente pelos meus pecados? Só aquela
   noite..."
   O homem estava quase chorando.
     "Você está me comovendo, Bill. Mas mesmo assim, está na hora."
     "Não." O homem pareceu abatido, sozinho.
     "Sim. Bill, está na hora de um novo update."

                                                                  ]
                                                  - Grant Smith
                                                      14:23
                                                        23-julho-94

Vejo você na próxima!

  • Denthor
  • Krull

A Nova Krull's HomePage