Tutorial 8: Encontrando e Prevenindo LEAKS
(Retirado de arquivo.mataleone.com)

Lei de Murphy associada a edicao de mapas:
Paragrafo 1o: "Se voce nuca viu um LEAK, nao se preocupe, cedo ou tarde voce vera."
Paragrafo 2o: "Voce achou o seu leak facilmente? Entao quando o seu mapa estiver grande o suficiente voce tera outro, e perdera horas procurando-o."

O que eh um LEAK?

LEAK significa vazamento. Ou seja, tem um buraco no seu mapa. Os mapas para Half-Life devem ser totalmente fechados, se em alguma parte do mapa houver uma fresta minima que seja, o hlbsp ja vai acusar leak.

Se voce ver este erro no hlbsp na hora de compilar o seu mapa, voce tem um leak, e vai precisar corrigi-lo:

Warning: LEAK LEAK LEAK

Uma mensagem de erro como a seguir no hlbsp eh causada por um LEAK como outro qualquer, e nao quer dizer que suas luzes ou entidades estao com problemas, apenas que foi uma delas que detectou o leak, portanto nao precisa apagar ou editar nenhuma entidade, basta achar o leak:

Warning: === LEAK in hull 0 ===
Entity light_spot @ (-112,-688, 424)
Leak pointfile generated
Warning: === LEAK in hull 1 ===
Entity info_player_start @ (-352,-736, 320)
Warning: === LEAK in hull 2 ===
Entity info_player_start @ ( 416,-736, 320)
Warning: === LEAK in hull 3 ===
Entity game_text @ (-1056, 960, 48)

Mas mesmo com leak voce pode jogar o mapa, so que ele fica sem luz, entao porque nao deixar assim mesmo? Porque vai ficar lentissimo e feio! Afinal quando ha leak, a compilacao termina no bsp, entao o vis nao roda, o que faz o seu mapa inteiro ser desenhado a todo momento, e o rad tambem nao roda, deixando o seu mapa brilhante e feio, sem nenhum efeito de luz. (para saber mais sobre compilacao, veja este tutorial)

Como achar LEAKS

  • Metodo 1: Procurar visualmente, na raca
  • Mude a sua janela 3D para o modo Flat, e saia navegando por ela ate achar o buraco. Se nao achar facilmente, use outro metodo.

    Um leak visto na janela 3D flat:
    http://arquivo.mataleone.com/tut/pic/mbtut08-01.jpg>

  • Metodo 2: Blocaum
  • Se voce tem uma ideia de onde o leak pode estar, mas nao consegue acha-lo, crie um brush cobrindo toda a area onde voce acha que o leak pode estar. Compile. Se nao der erro de leak, quer dizer que voce o cobriu com o bloco, se der leak, quer dizer que voce nao o cobriu com o bloco, portanto nao esta onde voce pensava, entao aumente ou mova o bloco. Quando voce conseguir cobrir o leak, va diminuindo o tamanho do bloco e compilando. A ideia eh fazer o bloco cobrir o leak e deixa-lo com o menor tamanho possivel, isolando a area do leak. Ai eh so apagar o bloco e voce vai achar facilmente o leak naquela area que ele estava cobrindo.

  • Metodo 3: Usando PointFiles
  • Mesmo com leak, o arquivo BSP eh gerado, junto com um arquivo .PTS. Este arquivo .PTS eh chamado de PointFile, e contem informacoes de como o leak foi encontrado pelo hlbsp. No WorldCraft, voce pode carregar este arquivo atraves do menu Map -> Load PointFile. O que eh mostrado eh como se fosse o caminho que o WorldCraft usou para chegar ao leak, mas raramente da para tirar alguma conclusao do que eh mostrado. Para descarregar o PointFile, Map -> Unload PointFile.

    PointFile carregado no WorldCraft:
    http://arquivo.mataleone.com/tut/pic/mbtut08-02.jpg>

    O Arquivo PointFile tambem pode ser carregado no Half-Life, o que fica bem mais facil para seguir, pois aparecera uma linha pontilhada percorrendo o seu mapa que vai dar direto no leak. Para fazer isso, voce deve:

  • Copiar o arquivo .bsp e .pts para o diretorio valve/maps, dentro do diretorio do Half-Life (eu recomendo incluir comandos para copiar estes arquivos no seu esquema de compilacao).
  • Rodar o HL com a seguinte linha de comando "hl.exe -dev -console -particles 10000" (eu recomendo criar um atalho com esta linha de comando no seu desktop para ser usado apenas para testes de mapas).
  • Entrar no console e digitar "map nomedomapa" (sem o .bsp).
  • Se voce estiver em modo OpenGL Default, digite no console "gl_clear 1" para preencher os espacos fora do mapa com uma cor solida, nao com HOM (Hall Of Mirrors, aquele efeito que fica repetindo a imagem como se estivesse num espelho)
  • No console de novo, digitar "pointfile"
  • Opcionalmente, digite "noclip" no console para poder atravessar paredes e voar (fica mais facil para seguir a linha).
  • Agora de uma andada pelo mapa ate achar uma linha pontilhada voando. Esta linha passa por dentro e por fora do mapa.
  • Va seguindo esta linha ate que uma hora ela passa pelo leak.
  • Volte pro WorldCraft e conserte o leak :)
  • Este metodo eh rapido e eficiente. Se apos corrigir o buraco continuar dando erro de leak, refaca todo o processo novamente, pois certamente voce tem mais leaks, em outros lugares.

    A linha pontilhada saindo pelo buraco no Half-Life:
    http://arquivo.mataleone.com/tut/pic/mbtut08-03.jpg>

  • Metodo 4: Envolver o mapa numa caixa
  • O pior jeito de contornar leaks eh fazer uma caixa em volta do seu mapa inteiro. NUNCA faca isso. Deixe de ser preguicoso. O seu tempo de compilacao vai aumentar e este tempo poderia ser gasto procurando o leak usando PointFiles, o que deixa o seu mapa menor, mais simples, mais rapido de compilar e mais "certo". Falo, mano?

    O que pode causar um LEAK

  • Descuido
  • Um leak pode aparecer por um simples descuido de nao fechar uma certa parte do mapa. Por exemplo, voce pode ter criado um brush para ser o chao que nao chega ate a parede, deixando um buraco entre a parede e o chao.

  • Mexer com grupos ou varios brushs de uma vez
  • Ao mexer no tamanho de grupos ou de varios brushes juntos, tome cuidado para que todos os brushes tenham a mesma dimensao no eixo em que voce esta mexendo. As vezes voce pode estar aumentando o tamanho de varios brushes ao mesmo tempo e sem querer abrir um buraco num lugar inesperado sem perceber, como no exemplo abaixo.

    Grupo selecionado que sera editado, sem leaks:
    http://arquivo.mataleone.com/tut/pic/mbtut08-04a.jpg>
    Apos mudar o tamanho, aparece um leak inesperado:
    http://arquivo.mataleone.com/tut/pic/mbtut08-04b.jpg>

  • Entidades brush nao fecham buracos!
  • Outro erro comum eh usar uma entidade brush para cobrir um buraco, como uma grade ou vidro numa janela. Se voce quer criar uma janela com grade que de para o ceu, por exemplo, nao basta coloca-la cobrindo o buraco porque entidades nao fecham buracos. Voce deve criar um brush de ceu (com a textura SKY) do lado de fora da parede para fechar o buraco corretamente e ver o ceu quando olhar pela janela.

    Janela sem ceu atras (vai dar leak):
    http://arquivo.mataleone.com/tut/pic/mbtut08-05a.jpg>
    Janela fechada corretamente com um brush de ceu:
    http://arquivo.mataleone.com/tut/pic/mbtut08-05b.jpg>

    por - Mataleone -