My Stuff

domingo, 22 de fevereiro de 2009

Dev-C++ com loucura

Abri o Dev C++ só pra compilar o programinha abaixo e alterar um detalhe.

Compilava normal da ultima vez q abri, desinstalei, instalei novamente e ele insistia em dar um erro assim:

"undefined reference to `__cpu_features_init'"

O que pra mim era muito estranho, já que tecnicamente eu não estava usando nenhuma função além das 'funções-padrão' do C.

Pesquisei e verifiquei que era so remover as entradas de 'libs' e o problema ia embora.

Então compartilho aqui:

Tools->Compiler Options->Directories->Libraries
Apague todas as entradas, inclusive se tiver algo assim: C:\dev-cpp\lib.

Estranho, mas é isso.

sexta-feira, 7 de novembro de 2008

Patch winrar 0.2

Eu detesto aquela telinha do winrar que eh um 'reminder' dizendo que você tem que registrar.

Fiz um programinha pra fazer o winrar pular essa parte.

Aqui está o link (8Kb), os detalhes sórdidos vão depois pra quem gosta das explicações:
Versão 0.2

Fiz um patch pro winrar NAO chamar a funcão DialogBoxParam no momento exato em que vai mostrar aquela caixa de diálogo. Na minha versão 3.7.0, isso se dá no endereço
(0x0043f952) => offset real no arquivo (0x0003ef52).

EDIT 26.02.09
Na versão 3.8.0, as informações são essas:
(0x00441214) => offset real no arquivo (0x00040814).

Junto com o programinha vai o fonte. A maior parte dele é o cáclculo de crc, pra garantir que a versão correta do winrar está sendo escrita. Logo, se sua versão for diferente, não vai acontecer nada.

Para rodar, basta copiar o programa para a pasta do winrar (provavelmente c:\arquivos de programa\winrar) e dar um duplo clique. Enjoy.

Marcadores:

quinta-feira, 14 de agosto de 2008

FreeMC Boot 1.5.1 - não oficial

Prometi um post sobre o FreeMCBoot, acabei escrevendo um tutorial:

http://rapidshare.com/files/137399500/tutorial-jogar-backup-ps2-travado-by-probert-cpturbo-v.1.1.rar

O bônus é uma versão personalizada em português do FMCB 1.5. ;-)

segunda-feira, 4 de agosto de 2008

Desventuras em Disgaea - PAL2NTSC

Essa foi a primeira vez que tentei fazer uma alteraçao em ISO de playstation 2.
Já tinha feito uma graça no psx (ps1), mas minha estréia no ps2 tinha que ser algo bem simples.

Instalei o FreeMCBoot no ps2 de um amigo meu travado (fico devendo um post sobre isso).
O problema é que ele não reconhece DVDs do sistema PAL automaticamente. Ao tentarmos jogar Tomb Rider, por exemplo, fomos salvos pela opção de escolha de sistema NSTC.

Em disgaea (o 1º jogo) foi diferente.
O jogo é PAL, e sem um seletor, ele fica com a imagem horrível. Listrada, em preto e branco com uma cor meio marrom.

Já tinha ouvido falar de uns programas que convertiam pal para ntsc (o nome? aháaa pal2ntsc yfix). O yfix no nome se deve ao fato de ter que "adivinhar" o valor de y para "fixar" a tela. Se não me engano, o sistema PAL tem mais linhas. Quando se converte para NTSC, a imagem fica aparecendo um pouco embaixo. O y serve para "fixar" a tela. Centralizar, digamos assim.

Foi aí que eu pensei. Se for pra adivinhar, prefiro fuçar eu mesmo na ISO para descobrir como fazer isso. De quebra eu iria descobrir como o pal2ntsc patcheava a ISO.

Procurei alguma coisa que me indicasse uma direção, mas não encontrei nada. Encontrei um programa que fazia algo parecido com o que eu queria. Forçava o jogo a usar o modo 480i. Usei essa informação pra começar meus testes.

No final, acabei conseguindo descobrir os valores, após perder alguns cds e começar a usar cd-rws. ;)

O próximo passo era transformar o ISO em CD para DVD.
O último jogo que tinha feito isso foi Breath of Fire - Dragon Quarter. Deu o maior trabalho, porque tive que patchear fisicamente a tabela de LBA do executável do jogo. Mas no fim, deu tudo certo (perdi uns bons 3 dias só nisso).
Em disgaea, funcionou de primeira. \o/
Só tive que acrescentar um arquivo dummy de 800MB para completar o DVD e criar o ISO/UDF pelo ImgBurn e voilá.

Usei as seguintes configurações:

interlace = 0
ntsc = 2
frame = 1

dy = 1 (tentei com 0 (zero) e parece que ficou melhor) ;)

Coloco à disposição, o arquivo que faz o patch... Pode ser rodada na ISO de CD e DVD.
O arquivo executável é o SLES_524.58.

http://rapidshare.com/files/134872434/disgaea-pal2ntsc.rar

Rom Hacking & Patching

O que é patching?

Patching é o ato de alterar algum arquivo, executável, ou de recursos, a fim de dar a ele uma funcionalidade diferente da original.

Quando você (você... eu não, que eu não pego programa pirata. Kkkkkk foi boa essa hein?) pega um programa e crackeia, você está patchando/patcheando um arquivo do programa para eliminar o limite de tempo de 30 dias.

O ato de rom hacking em si é um patching... é alterar o rom (jogo em formato binário) para dar a ele alguma funcionalidade não prevista ou simplesmente para deixar o jogo mais fácil ou mais difícil. É onde eu geralmente gasto um tempo livre. Hobby de geek tem que ser geek.

Existem basicamente dois tipos de patching. O patch físico, no qual você altera o arquivo em disco, e a partir daí ele executa já modificado. Provavelmente, esse tipo é mais comum. Exemplo: alterar o arquivo tcpip.sys do windows xp para aceitar mais de 10 conexões simultaneamente.

Um outro tipo de patching comum é o on-the-fly... ele altera o arquivo-destino em memória, enquanto o patch está rodando. Se ele não rodar, o arquivo-destino executa normalmente. Um exemplo bastante conhecido desse tipo é o msn plus (embora eu ache que ele altera o msn fisicamente tb, de alguma forma). O antigo tradutor (alguém ainda usa isso?) Lingoware traduzia alguns programas enquanto ele estava executando. Era uma droga, dava um bando de tilt nos programas, mas é também um bom exemplo de patch. Até mesmo para alertar porque essa operação é bastante suscetivel a erros.

Na maioria das vezes, o patching é motivado pela ausência de código-fonte do arquivo-destino. Caso tivéssemos o código fonte e pudéssemos compilar novamente, poderíamos fazer a alteração mais rapidamente ao invés de perder horas e horas debugando tudo para descobrir que aquela seção que você perdeu mais tempo, nada tem a ver com o que você quer alterar no arquivo. Mas quem disse que a vida tem que ser fácil? E se fosse, que graça teria? :)

sexta-feira, 1 de agosto de 2008

RomHacking: Side Pocket - 2 Players

Motivação do RomHacking:

JOGAR no modo 2 players mesmo que o emulador "não diga pro jogo"que o joystick 2 está conectado.

Data:

16.07.08

Detalhes:

* Se o registrador $4017 retornar $00 significa que o 2º joystick não está habilitado.
* Se retornar $01 é porque o 2º joystic está disponível.

Acontece que o emulador de XBOX (xSnes9x) não 'avisa' que o
segundo joystick esteja conectado. Até porque o emulador espera um controle de SNES.

O jogo testa esse valor em 3 lugares(pode até testar em mais, mas esses 3 locais
foram suficientes para o que eu queria fazer).

1º No menu onde você escolhe o modo de jogo, quando tecla 'pra baixo' (avança opção).
2º No mesmo menu do no 1, quando você tecla 'pra cima' (volta opção).
3º Após escolher um jogo de 2 jogadores (2ª e 3ª opções do menu).

A solução é forçar o valor (registrador A) a ser $01 onde for necessário,
utilizando a instrução OR.

1º local
81/f603 AD 17 40 LDA $4017 [$80:4017]
81/f606 29 01 AND #$01 => OR $01

2º local
$81/F63E AD 17 40 LDA $4017 [$80:4017]
$81/F641 29 01 AND #$01 => OR $01

3º local
$81/F68F AD 17 40 LDA $4017 [$80:4017]
$81/F692 29 01 AND #$01 => OR $01

Testes:

Testei no emulador Geiger Snex9x e o jogo aceitou eu escolher
a modalidade 2playters (antes do hack, não aceitava).

Funcionou com sucesso no emulador xSnes9x do XBOX.
Rodou também no emulador snes-station do ps2. Antes da alteração, era impossível
jogar de 2 com a rom original nesses emuladores.

Link para a rom modificada: http://rapidshare.com/files/134124525/Side_Pocket__probert_2players_Hack_.rar

quinta-feira, 17 de abril de 2008

Projeto antigo - parte I

Cards.dll - Card Image Saver - VB.NET

Este não é um projeto que podemos chamar de útil, mas podemos classificá-lo, pelo menos, como interessante.
Nele, você pode escolher o naipe da carta e o "número" e logo após clicar o botão Draw para desenhar a carta na tela.

A idéia inicial foi chamar as funções de desenho da carta de Cards.dll que a microsoft expõe para os programadores através das funções crtInit, crtDraw, crtDrawEx, crtAnimate e crtTerm.

Essa alternativa se tornou inviável na medida em que teríamos que obter o contexto de dispositivo (hDC) do Picture Box, desenhar o bitmap em memória e para salvá-lo, teríamos que obter o bitmap em memória, ou seja fazer o caminho inverso.

Só que, pesquisando pela net, descobri que podemos obter os bitmaps diretamente das DLL's através de seus ID's, os quais variam de #1 a #64.
A nossa classe Cards abre a DLL e lê as imagens diretamente da DLL e as armazena em um array.

Então, igualamos a propriedade Image do PictureBox ao bitmap, facilitando assim na hora de salvá-lo.

Download: cards.zip