Mostrando postagens com marcador ScriptRGSS12. Mostrar todas as postagens
Mostrando postagens com marcador ScriptRGSS12. Mostrar todas as postagens

segunda-feira, 1 de novembro de 2010

BMP writer

BMP writer
por zecomeia

Introdução

Método implementado na classe IO para escrever um arquivo de imagem do tipo bmp truecolor de 24bits a partir de um objeto da classe Bitmap usada no RGSS.

Características

  • bmp truecolor 24bits
  • resolução vertical e horizontal de 96dpi
  • utiliza um objeto da classe Bitmap do RGSS para gerar o arquivo de imagem

Como Usar

*Ao abrir o arquivo para a escrita, use o modo BINÁRIO.
file = File.new('image.bmp','wb')

Para gravar a imagem no arquivo, use o metodo bmp_write após abrir o arquivo.
file.bmp_write(aBitmap_obj)

Feche o arquivo.
file.close

OBS: A escrita é um pouco demorada, dependendo tamanho da imagem pode levar alguns segundos. Veja a técnica de uso do script a seguir para resolver o problema.


Usando o BMP writer num processor paralelo

O script não utliza bibliotecas externas. Foi escrito totalmente em Ruby baseando-se no objeto Bitmap usado em RGSS/2. Mesmo sendo feito para ter um bom desempenho com relação ao tempo de escrita de arquivo, para empregá-lo em jogos o tempo de escrita pode acabar sendo longo. Por exemplo, em uma máquina com Core 2 Duo o script levou 2 segundos para gravar um bitmap de 640x480, o que parece rápidos, mas pode ser um incmodo no meio de um jogo.

Então resolvi usar o metodo de escrita em um processo paralelo para não ocorrer aquela pausa no jogo enquanto a gravação do arquivo está em andamento. O problema é que leva mais tempo para o arquivo ser salvo(seguindo mesmo exemplo anterior, levou 1 minuto e meio para a gravação), isso significa que não é possível visualizar/utilizar o arquivo gerao enquanto não terminar essa gravação, e também caso o jogo seja fechado antes do término o arquivo fica corrompido.

Para criar nosso processo paralelo usaremos uma Thread. Basicamente uma thread é um bloco de código que é executado em paralelo com o programa principal. A técnica não é muito complicada nem ocupa muito espaço. Primeiro vamos carregar um Bitmap para usar na gravação:

data_system = load_data("Data/System.rxdata")
aBitmap_obj = RPG::Cache.title(data_system.title_name)


As linhas acima irão carregar a imagem de título na variável aBitmap_obj.

Agora vamos à Thread:

thread_bmp = Thread.new(aBitmap_obj) do
begin
file = File.new('image.bmp','wb')
file.bmp_write(aBitmap_obj)
file.close
rescue
print 'Erro ao gravar um bitmap'
end
end


a linha:

thread_bmp = Thread.new(aBitmap_obj) do

Cria nossa Thread. Observe que já passamos como argumentoda Thread o Bitmap que criamos antes. O "do" define o nosso bloco de código que termina no último "end".

O "begin" é um outro bloco que criei dentro da threadsó para poder usar o tratamentos de exceções(erros) da clausula "rescue". Isso porque quando ocorre um erro dentro da Thread o Game.exe fecha sem nem um aviso. Então se acontecer algum erro na Thread o que está entre o recue e o end será executado. No exemplo só cooquei uma mensagem, o que não é muito correto, porque se aconteceu algum erro a thread para mas o programa continua sem tratar do problema.

Entre o begin e o rescue deve entrar aquelas três linhas que já usavamos para gravar o arquivo antes.

file = File.new('image.bmp','wb')
file.bmp_write(aBitmap_obj)
file.close


Abre o arquivo para leitura, escreve o BMP no arquivo e fecha o arquivo quando terminar a escrita.

Basicamente é isso. Teste a técnica e qualquer dúvida fique a vontade.

Script




Créditos e Agradecimentos
  • Feito por zecomeia

domingo, 28 de fevereiro de 2010

Module VirtualKeys

Module VirtualKeys
por zecomeia

Introdução

Além de habilitar todas as teclas para o uso no RPGMaker, também é acompanhado de métodos que ajudaram na utilização das teclas, alguns tentam baseados em métodos já existentes no módulo Input, e outros totalmente novo ou incrementados.

Características

  • método #press?;
  • método #trigger?;
  • método #repeat?;
  • método #dir4 com algumas novidades;
  • método #dir8 com algumas novidades;
  • métodos para manipulação das funções GetKeyState e GetAsyncKeyState, usados na construção dos outros;
  • método #get_char que retorna a tecla pressionada(seguindo o padrão ABNT);
  • todas as características anteriores foram construídas em um módulo à parte e são totalmente independentes do módulo Input.
  • Não precisar usar um método de atualização como o módulo Input.
     
Como usar

Instale o script acima de qualquer script que o use.

*Caso use funções desse script em uma scene, de preferência não use atualize módulo Input no loop principal de sua scene, para evitar conflitos ou má performance deste script. Para isso, basta não colocar o método de módulo #update no loop da scene, veja:

RGSS:

Como no RGSS2 o método #main fica na superclasse de todas scenes, Scene_Base, então será preciso alterar o método #main na própria scene ao invés de modificar o método #main em Scene_Base(para não interferir nas outras, a menos que queira isso). Veja como ficaria:


Para usar os métodos de verificação #press?, #trigger?, #repeat? siga o exemplo:


*O argumento é um número inteiro, e segue a tabela das Virtual Keys encontrada no próprio módulo com todas as contantes definidas(seguindo valores hexadecimais).

Veja um exemplo do método #get_char :


Os métodos #dir4 e #dir8 têm o mesmo comportamento, porem, enquanto #dir4 analiza apenas as 4 direcionais para retornar um valor, #dir8 analiza também combinações entre as direções desde que não sejam opostas. Até aí sem novidades. Mas no módulo VirtualKeys ele agora recebeu 2 parâmetros de entrada, type e ignore_numpad. O primeiro pode ter 2 possíveis valores: 0=#press? ou 1=#trigger?. Isso vai mudar o método usado para analizar as teclas que movimentam o personagem. o argumento ignore_numpad quando true, não avaliará as teclas direcionais que compartilham espaço com os números no teclado numérico(1,2,3,4,6,7,8 e 9). Exemplo:


*Os valores padrões dos argumentos são (0,false).

Os métodos que chamam as funções GetKeyState e GetAsyncKeyState são, respectivamente, #gks e #gaks, onde #gks analisa o estado da tecla levando em consideração que pressionar a tecla uma vez ativa a tecla e outra desativa(ex: CAPS LOCK), enquanto #gaks analisan se a tecla está sendo pressionada(segurando a tecla). Para ambos, quando a tecla não está ativa o valor retornado é 0, caso contráro será retornado um número qualquer que não é possível prever.

Demo

RMVX
RMXP

Script



Créditos e Agradecimentos
Feito por zecomeia 
Constantes retiradas/pesquisadas de:
http://msdn.microsoft.com/en-us/library/ms927178.aspx
http://www.kbdedit.com/manual/low_level_vk_list.html

 

domingo, 20 de dezembro de 2009

C-RS(Colméia - Rotate Sprite)




C-RS(Colméia - Rotate Sprite)
por zecomeia

Introdução

Este script é direcionado à scripters, porque adiciona uma função à classe sprite que pode ser usado na criação de scripts.
O efeito que ele oferece é de "rotação 3D" para a imagem. É preciso definir um segundo bitmap alem do padrão(explicações a seguir) que servirá como imagem de verso, ou seja, dará a impressão da imagem ter dois lados.

Características

    * Possibilidade de inverter a imagem de verso também;
    * Velocidade do "giro" controlável.

atualização 31/01/2010

    * O efeito está mais fiel(sem excentricidade, a menos que o usuário queira alterar a propriedade ox2) independente do RPGMaker usado;
    * Consertado para pode modificar a posição X, o zoom horizontal e a origem do mapa;
    * Consertado o erro que gerava ao reiniciar o jogo(apertar F12);
    * Modificação na opção de invertar horizontalmente(agora funciona ao contrário e teve mudança no nome);
    * Agora o script não altera a classe Sprite, mas sim cria uma classe chamada Rotate que estende a classe Sprite para evitar de fazer modificações em uma classe importante como essa;

Videos



Como usar

Coloque o script acima de main.


Para que o efeito funcione corretamente é preciso usar o método update.
Também é preciso definir o parâmetro "bitmap2" que recebe um bitmap para a imagem de verso, e definir o parâmetro "ppf", que define a velocidade do "giro". Configure a situação inicial dos parâmetros(se precisar) x2, ox2 e zoom_x2 antes de definir bitmap2 para evitar transtornos com o efeitos no seu primeiro frame.

*OBS: "ppf" = pixels per frame

Demo

Download da demo RMXP
Download da demo RMVX

Script


Créditos e Agradecimentos
  •      Feito por zecomeia

sexta-feira, 18 de dezembro de 2009

BUG do Pulo

BUG do Pulo
por zecomeia

Introdução

Conserta um BUG do comando de pulo. Na verdade é apenas uma trava de segurança, porque no RMVX não existe essa trava que impeça o jogador pular em cima de um tile não passável e ficar preso, ou pular perto dos limites do mapa ultrapassando esses limites também fazendo com que o jogador fique preso. No RMXP a trava impede que o evento de pular aconteça nas situações descritas anteriormente, já com esse script para qualquer um dos doi (RMVX ou RMXP), caso as coordenadas de destino do pulo causem problemas, as mesmas são recauculadas de forma a diminuir a distância do pulo em 1 quadro até ser possível o evento de pulo ser concretizado sem possíveis problemas. Alguns costumam aproveitar deste "BUG" para fazer cut scenes "passando por cima" de tiles não passáveis, pensando nisso o script te dá a opção de ativar ou desativar o script de conserto a qualquer momento.

Características

    * Conserta o BUG do pulo do RMVX
    * Causa o mesmo efeito para o RMXP, mesmo não havendo BUG

Screenshots

Nenhuma

Como usar

Coloque o script acima de main.

Para deixar o BUG use o código, no comando "chamar script":

$BUGpulo = true

Para retirar o BUG use o código, no comando "chamar script":

$BUGpulo = nil

Sinta-se à vontade para colocar ou tirar o BUG quando quiser.

Demo

Download da demo RMXP
Download da demo RMVX

Script



Créditos e Agradecimentos
  •      Feito por zecomeia