Wild Witch Project - Um game que você nunca viu

Neste jogo você precisa ajudar uma bruxa adolescente a salvar seu mundo da Mortífera Bunda Assassina do Espaço Sideral

Revisão do instalador para Windows

O feedback que recebi me deu umas orientações boas. Bom até alguns comentários bizarros apareceram, fazer oque faze de testes é sempre um momento tenso.
Estou contente com a velocidade do feedback. Segue agora um relato do impacto disso tudo.
O usuário Jëff Leadmann da GameDeve me lembrou do UPX, destinado a aprimorar o empacotamento de softwares ele tem versões para Win, Linux e Mac.
Ele representou uma boa economia no produto final do instalador. tipo comeu 20% do total oque me permitiu passar para um passo mais ousado: incorporar compressão LZMA ao projeto. A imagem abaixo mostra o resultado do produto final com uma economia de 27%.

Vírus
O meu aplicativo em estado bruto também chegou a ser considerado vírus pelo Norton. Provavelmente pelo tamanho pequeno e pela capacidade de acessar a Internet e escrever no disco o mecanismo identificou características de vírus.
Para me assegurar fiz uma verificação extra com o ClanAV e nada. A maquina virtual que usei para a produção parece estar limpa.
Também ando ouvindo relatos do UPX ter sido identificado como vírus! Justamente por alguns usarem ele para compactar seus trojans mau feitos.

Continuando os feedbacks... (cuidado a linguagem agora será quase algorítmica)

Foco da janela e arrastar
Eu tirei muito código de fóruns e colei no corpo da WindowProcedure, prático e rápido mas pelo visto não respondia a tudo.
Consegui ver o problema na máquina virtual e estou localizando os suspeitos de fazer a janela ficar sempre no topo (não era para isso estar acontecendo) e eliminando por tentativa e erro.


WindowProcedure
Aqui que rola a maioria dos pepinos, essa é uma função do tipo "Gigante Guerreiro" que por mais que você subdivida seu fluxo com mais funções ela vai ser extensa e confusa.
Para quem não conhece essa é a função base de uma janela do Windows e nela são tratadas todas as mensagens recebidas do sistema e dela própria. Por exemplo se o mouse passa perto ou se um Pendrive for inserido na USB alguma coisa passa por aqui.

Uma preocupação que parecia desnecessária no inicio foi quanto ao usuário poder arrastar e soltar a janela. Já que o código que tirei dos fóruns fazia isso fiquei despreocupado. No entanto esse código fazia que o usuário arrastasse a janela e ela só aparecesse na posição que ele soltava o mouse.
Mas isso não estava dando uma aparência natural e os usuários começaram a reclamar.

Agora ignorei o drag and drop natural e criei um novo temporizador dentro da janela que é ativado quando o mouse é pressionado sobre ela. Assim a janela segue o mouse ao arrastar. Ao invés de só aparecer quando você solta o mouse.
Nota: o temporizador esta marcado em 30 fps para não sobrecarregar o sistema.

Piscadela nas barras de progresso
Reclamaram de umas piscadelas nas barras de progresso, achei estranho pois vi algumas no texto e não nelas.
Suspeitei de alguma conta errada na hora de mandar os dados e adicionei umas variáveis extras, antes de mudar o tamanho da barra eu sempre verifico se o tamanho novo é maior que o anterior.

Velocidade das imagens
O deslizar das imagens também incomodou um pouco pois o pessoal não estava conseguindo ler e apreciar as imagens ao mesmo tempo, então reduzi a velocidade.

Imagens
Tive também reclamações curiosas, basta lembrar aqui que o estilo base é o mangá. Mesmo que no futuro eu consiga patrocínio para alguma coisa e consiga um desenhista fodão tudo será nesse estilo.

Finarsmentes
Por fim troquei o download do Wild.rar por um conjunto de media kit, já tinha gente querendo jogar!
Calma que o primeiro beta esta saindo, já estou produzindo o roteiro da fase.


Coisas legais que descobri

Outro teste pra reduzir o tamanho, como eu não sei tudo que um compilador faz resolvi fazer assim:
Tirei as definições estáticas como: unsigned char tela[WxHx3]; e troquei por um unsigned char* tela; onde eu crio o buffer na hora de iniciar o programa. O resultado foi NADA! O compilador já é bonitinho ^_^

Agora o golpe de misericordia: Compressão 7Z (LZMA)
Fiquei curioso com a economia usando o UPX, e no tempo livre baixei o source do 7Z.
7Z é realmente potente basta olhar a tabela de comparação de resultados:

O próprio UPX usa o 7Z, basta que você use --lzma no lugar de -9 na hora de comprimi.


Peguei o exemplo em C puro e desmontei, extraindo o mínimo que eu queria apenas para descompactar as coias e tirei os includes desnecessários. Na verdade dos quase 80 MB só 150KB é onde está o código propriamente dito.

Aconteceu uma coisa "bizonha" durante a incorporação no instalador, ao compilar o MinGW pirava parava na metade do processo pois perdia a referência aos arquivo principal mas não dava nenhuma mensagem de erro, só warnings!

Optei pela prática padrão nesses casos: chutei o balde, fui fazer café, coxilar, jogar joguinho... para depois voltar no dia seguinte com a cabeça fresca.
Não achei o motivo, e resolvi apelar para brutalidades: De novo montei uma lib estática.
Funcionou ^^
30Kb a mais que passam a ser 15.3Kb depois do UPX (compressão -9).

Pronto, era o ultimo elemento que faltava para esse modulo do projeto,  e já deixo o extrator 7Z pronto, pois apartir da primaria instalação o usuário conta com updates apartir do próprio jogo.