As emocionantes aventuras de um sysadmin linux na procura pelo uptime perfeito!

A interface do WoW e a boa programação

Posted: dezembro 22nd, 2006 | Author: coredump | Filed under: Gaming, Programação | Tags: ,

Primeiro, vejam o screenshot abaixo, é a última versão da minha UI (User Interface) no World of Warcraft:

From Screenshots

Se você der uma olhada no álbum inteiro, tem alguns screenshots das versões anteriores, ou de como eu fui adaptando até chegar ai. Eu mudei muita coisa pelo simples fato de não conseguir enxergar bem a interface padrão da Blizzard: Fonte muito ruim, items mal colocados, informação escondida…

Aos interessados, os addons que eu uso neste screenshot são:

  • ag_UnitFrames (Barras de Health/etc..)
  • Bartender3 (Barra de Botões)
  • Cartographer
  • Chronometer (Timer de habilidades como Polymorph)
  • Clearfont2 (Coloca uma fonte legível no jogo)
  • DeuceCommander
  • eePanels (Cria painíes como o atrás dos botões e do chat)
  • ElkBuffBars (Mostra os buffs como barras de progresso)
  • EQCompare
  • Fubar com vários ‘fu’ (Barra no topo com informações)
  • oCB (Casting Bar)
  • oCD (Cooldown Count)
  • Prat (Chat com cores, nome de canais abreviados, etc…)
  • SimpleCombatLog (Combat Log mostra informações de forma legível)
  • simpleMiniMap (Mini Mapa quadrado, sem bordas)
  • TinyTip (Tip com detalhes mais legíveis)
  • Cryolisis (A bolota no meio com um monte de coisas legais pra Mage)

Quem conhece o WoW sabe que uma das grandes sacadas do jogo são os Addons, que são mini-programas para manipular aspectos e a interface do jogo. Esses addons são limitados e por isso não chegam a ser cheating porque não conseguem fazer coisas milagrosas ou quebrar regras.
Uma coisa interessante sobre os addons de World of Warcraft é que eles são programados numa linguagem chamada Lua, criada e mantida na PUC-Rio.

A biblioteca Ace2

Sempre que eu me referir a “Ace2″, considere que eu estou falando da Ace versão 2 e de sua versão anterior, “Ace1″ ou simplesmente “Ace”.

Depois de algum tempo, as pessoas que programam começam a notar que várias coisas que elas fazem são repetidas, e como em todo ambiente onde se compartilha código, começam a notar que existem formas melhores de fazer de tudo. O pessoal da Ace2 fez exatamente isso: pegou um monte de funções que a maioria dos addons precisa usar e criou uma biblioteca. Isso inicialmente criou um monte de reclamações: para se instalar um determinado addon, era necessário baixar DUAS coisas (a biblioteca e o addon propriamente dito) e ainda tinha de se manter as versões de tudo sincronizado, além disso, certos jogadores acham que biblioteca é desperdício de memória. E pode ser, se usado incorretamente como veremos daqui a pouco…

Então o pessoal da Ace2 provou ser realmente hacker de respeito. Criaram um programa rodando em windows para cuidar de baixar, atualizar e remover os addons baseados em sua biblioteca, e criou um ambiente de desenvolvimento com fórum, servidor svn e trac para todos que fossem usar a biblioteca. Assim, eles foram criando novos addons e, quando necessário, clonando addons famosos usando a Ace2.

From Screenshots

Mas porquê, você pergunta? Se já existe um addon que faz o trabalho, porque esta cisma em criar um novo, só pra usar a Ace2?

World of Warcraft, Lua e o Garbage Collection

Addons são programas que rodam dentro do jogo. Ou seja, eles gastam memória. Quanto mais dados ou imagens um addon gerencia, mais memória ele usa. Para gerenciar esta memória, a linguagem Lua inclui (como toda linguagem moderna) o recurso de Garbage Collection. Além disso, estamos falando de código reentrante, que é uma coisa velha como a serra (existe desde os anos 80).

O maior motivo que se tem para que vários addons sejam portados ou clonados usando a Ace2 é simplesmente pelo uso de memória. Um exemplo:

Usando addons independentes:

Addon 1 – 100 kb
Addon 2 – 100 kb
Addon 3 – 100 kb

Suponhamos (hipoteticamente) que estes 3 addons tenham cerca de 20% de código parecido, ou seja: todos precisam manipular texto, todos precisam mostrar mensagens na tela e todos precisam criar uma janela colorida em alguma parte da tela. Mesmo assim, eles estão implementando estas funções de forma diferente, cada um usando seu próprio código, e mesmo que eles copiem o código entre si, os addons são compartimentos diferentes. Assim sendo, o total seria de 300 kb de uso de memória.

Usando uma biblioteca:

Biblioteca 1 – 20 kb
Addon 1 – 80 kb
Addon 2 – 80 kb
Addon 3 – 80 kb

O que acontece? Os 20% de código ‘parecido’ foi movido para uma biblioteca compartilhada pelos 3 addons. As funções de texto, mensagens na tela e janelas são comuns e por isso precisam ser criadas apenas 1 vez. A utilização total da memória é de 260 kb.

Então, por isso as pessoas pedem tanto para que (se possível) todos os addons usem a Ace2: eles podem chegar a economizar 40% de memória. Toda a minha interface acima gasta 24MB, contra quase 40MB que ela utilizava antes, usando addons similares, não-Ace2.

Então, se você estiver interessado em testar, dê uma passada na página do Ace2, nos fórums, leia sobre os addons disponíveis e você vai ver que até os grandes famosos como o CT_Raid tem contrapartes mais leves e tão boas quanto usando o Ace2.

Se você não é nerd, hacker, ou curioso, o post acabou aqui.

Mas…

Se você é…

Como a Ace2 usa o Garbage Collector do WoW de forma inteligente.

Pois é. Isso aqui:

Biblioteca 1 – 20 kb
Addon 1 – 80 kb
Addon 2 – 80 kb
Addon 3 – 80 kb

É a situação ideal que acontece DEPOIS da primeira passagem do Garbage Collector do WoW. A Ace2, para evitar problemas, inclui SUAS bibliotecas (porque Ace2 é na verdade um conjunto de mini-bibliotecas) em todos os addons que usam ela. Na verdade, quando você inicia o jogo, é mais isso aqui que acontece:

Biblioteca X do Addon 1 – 20 kb
Addon 1 – 80 kb
Biblioteca X do Addon 2 – 20 kb
Addon 2 – 80 kb
Biblioteca X do Addon 3 – 20 kb
Addon 3 – 80 kb

Para um total de 300kb, como no caso anterior. WTF!!! Como eu disse, para cada addon, a biblioteca foi incluida para evitar dores de cabeça. Só que eles são muito expertos. Como as bibliotecas tem as mesmas assinaturas, o Garbage Collector sabe que na verdade isso tudo é cópia de uma mesma biblioteca. Na primeira passagem ele passa o rodo na memória duplicada e deixa apenas uma versão ativa, chegando no cenário ideal. Isso acontece de forma transparente para o jogador, de tempos em tempos, mas é uma informação interessante de saber… Principalmente porque existem alguns addons, como o Warmup que medem a “velocidade” da carga de addons, e eles podem ser enganados por esta característica da Ace2. Ele acha que esta memória toda que está sendo usada vai ser desperdiçada, enquanto na verdade ela vai ser aproveitada na primeira passagem do Garbage Collector.

Então, se você nerdou até aqui, o post acabou e você já descobriu algo novo, eu espero. :)

intel

Compartilhe:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Slashdot
  • StumbleUpon
  • Technorati
  • TwitThis
  • Identi.ca
  • Twitter

Posts relacionados:

  1. Mais sobre WoW e Interfaces. Então, recebi alguns comentários e emails sobre meu post passado...
  2. Classificado: Vendo meu desktop Então. To vendendo meu desktop. Long story short, o meu...

5 Comments »

5 Comments on “A interface do WoW e a boa programação”

  1. 1 André Paiva said at 19:54 on dezembro 30th, 2006:

    Execelente trabalho José!!! Eu sempre admirei este tipo de interface por se limpa e muito funcional. No entanto, sempre tive receio em tentar fazer uma e não conseguir achar um pacote adequado…ou simplesmente ferrar meu atual pacote devido a add ons fazendo as mesmas funções.
    Bom, graça a vc, estarei trabalhando na minha interface agora.

    Um abraço!

  2. 2 Eduardo Duca said at 23:08 on março 8th, 2007:

    Olha… eh um tipo de Ragnarok
    ehhehehe
    calma.. to so zuando

  3. 3 Gaios said at 10:24 on maio 1st, 2007:

    Muito bo mtrabalho, vc tirou grandes duvidas neste lance, nunca entendi este negócio de ACE2, mas agora sei o quanto é vital o uso desta biblioteca.

    Tb gostei da sua interface, ja tnetei uma com um addon mas ficou horrível e o addon n era la grandes coisas, vou tentar com os que vc postou, só um detalhe, vc falou de addons pra mage, poderia postar uns bons pra hunter e warrior por favor?

  4. 4 the brain is a machine » Mais sobre WoW e Interfaces. said at 18:45 on maio 1st, 2007:

    [...] recebi alguns comentários e emails sobre meu post passado sobre interfaces do WoW, addons e etc… Só um update para os que perguntaram, minha UI [...]

  5. 5 Rodrigo said at 17:12 on setembro 3rd, 2007:

    Me ajudo muito!!!
    Eu tinha o SimpleMiniMap, mas esqueci de anotar o nome e perdi quando reparei meu wow.
    vlw ^^


Leave a Reply