H-Mode7 Engine
Versão: 1.4.4
Versão: 1.4.4
Introdução
Este motor é uma alternativa ao motor NeoMode7.
Embora o objetivo do NeoM7 seja emular o recurso Mode7 do NES, este novo motor vai mais longe na sensação 3D.
A principal causa de feedbacks negativos em relação ao NeoM7 é que o mapa parece muito plano, como uma folha de papel.
O motor HM7 é uma resposta a essas críticas. Ele lida com mapas de altura para que o mapa renderizado seja em relevo.
O relevo não é muito pronunciado, então este mecanismo é mais adequado para mapas do tipo world maps, onde os elementos gráficos são pequenos.
O script pode ser difícil de dominar, porque requer gráficos específicos e é importante entender como os elementos são desenhados para criá-los corretamente.
Recursos
- mais 3D, mais lag (nem tente este motor se achar o NeoM7 muito lento)
- ângulo de inclinação ajustável
- Rotação de 360°
- aumentar e diminuir zoom
- autotiles animados
- provavelmente uma multidão de bugs, já que é a primeira versão
- funciona com mapas de 200 * 200 tiles² (HM7 não será ativado se a largura ou altura exceder 200 tiles)
- código-fonte aberto para a dll necessária agora disponível
Screenshots
Download
H-Mode7 V1.4.4
MGC Hmode7 1.4.4
Como funciona?
Este script modifica um objeto Bitmap que representa a tela.
É um objeto Bitmap 640 * 480/480 * 360/320 * 240 (dependendo da resolução escolhida), contido em um sprite que é exibido sobre o panorama, mas abaixo de todos os outros sprites.
Para cada pixel deste bitmap é calculado um pixel de mapa correspondente a ser exibido, por uma projeção 3D de um polígono texturizado (o mapa).
Em seguida, um deslocamento vertical é determinado dependendo da inclinação, os mapas de altura do solo e os mapas de altura dos ladrilhos para as três camadas.
Todos os pixels entre a posição original e seu deslocamento são desenhados: isso torna o mapa "em relevo".
Mapas de altura:
Um mapa de altura é uma imagem em tons de cinza que contém dados de alturas para cada pixel.
As áreas pretas significam nenhum deslocamento de altura, enquanto as áreas brancas significam um deslocamento de altura máximo.
O deslocamento de altura máximo tem um valor fixo de 32 pixels, portanto, um bloco com um mapa de altura totalmente branco será renderizado como um cubo.
- mapa de altura do solo
Você pode associar um mapa de altura a um mapa RMXP (opcional) que será usado para adicionar um efeito de relevo independentemente aos ladrilhos de 3 camadas.
O mapa de altura é automaticamente estendido para as dimensões do mapa RMXP, usando uma interpolação linear.
Os arquivos de mapas de altura do solo, denominados "Heightmap_XXX" (XXX representando um número de identificação), devem ser colocados na pasta "Imagens".
- mapas de altura de blocos
Eles são reunidos em um conjunto semelhante ao conjunto de blocos do mapa. Um "heightmapset", denominado "[nome do tileset] _Hmap" e colocado na pasta "Tilesets", é obrigatório para cada tileset usado em um mapa HM7.
- mapas de altura autotiles
É o mesmo sistema aqui. Um mapa de altura que corresponde graficamente ao arquivo autotile, denominado "[nome do autotile] _Hmap", pode ser colocado na pasta "Autotiles" (é opcional).
Existe uma maneira fácil de criar mapas de altura?
Não.
Para padrões simples, você pode usar seu programa de manipulação de imagens favorito.
Para objetos mais complexos, uma solução é usar um modelador 3D, em seguida, aplicar uma textura gradiente e recuperar uma imagem de vista superior.
Texturas verticais:
Por padrão, ao desenhar um pixel da tela, todos os pixels entre o "solo" (altitude 0) e a altitude calculada são preenchidos com a cor do pixel de destino.
Quando a inclinação é muito importante (paredes verticais, por exemplo), é deselegante:
Para resolver este problema, você pode usar um mapa de textura por bloco: é uma imagem composta por cinco áreas de 32 * 32 px²: um mapa de cores e quatro texturas verticais diferentes (uma para cada lado).
O mapa de cores é uma área de quatro cores (vermelho, verde, azul, preto) que coincide com o bloco: para um pixel da tela, quando o pixel de origem do mapa é determinado, o pixel correspondente no mapa de cores indica qual textura vertical deve ser aplicada (vermelho => primeira textura, verde => segunda textura, azul => terceira textura, preto => quarta textura).
Um pixel transparente em um mapa de textura significa que a cor do pixel de origem do mapa será usada.
Os conjuntos de texturas devem ser colocados em uma pasta "Tilesets/[nome do tileset] _Textures" e devem ser nomeados "Texture_ [índice do tile]".
O índice do tile representa sua posição no tileset (o primeiro índice é 0).
NOVO (01/01/2011): Arquivo de ajuda do DerVVulman para texturas: Arquivo de ajuda
- texturas autotiles
Existe apenas um mapa de cores para todos os autotiles, denominado "Texture_Auto". Deve ser colocado em uma pasta "Autotiles/Textures" (é obrigatório).
Conjuntos de texturas, contendo apenas as quatro texturas verticais, também devem ser colocados nessa pasta. Eles devem ser nomeados "Texture_ [autotile name]".
Diversos:
- O efeito de iluminação automática não é ajustável no momento (mas você pode desativá-lo). Isso significa que as sombras têm sempre a mesma orientação e comprimento.
- Como os sprites de personagens estão sempre acima do sprite HM7, eles não são usados para exibir personagens (caso contrário, os personagens não poderiam estar atrás dos elementos do mapa).
Os caracteres são renderizados diretamente no bitmap HM7 e, portanto, existem limitações: a transparência e o tipo de mesclagem são ignorados.
- Por padrão, os caracteres são desenhados na altitude máxima de suas coordenadas: solo + 3 camadas.
Você pode ativar a bandeira bush na guia tilesets do banco de dados para que a altitude do tile seja ignorada ao desenhar personagens.
Instruções
O que é pedido :
- o script (acima de Main, como de costume)
- o arquivo MGC_Hmode7.dll na pasta raiz do seu projeto
- autotiles, tilesets, texturas e mapas de altura específicos
Para ativar o H-Mode7, você deve adicionar [HM7] ao nome do mapa.
As seguintes tags são opcionais:
[HMAPXXX]: XXX é o identificador do mapa de altura do solo que deve ser usado para o mapa
[#XX]: XX é o ângulo de inclinação (em graus): 0 -> 80, 0 por padrão
[% XXX]: XXX é o ângulo de rotação (em graus): 0 -> 359, 0 por padrão
[X]: habilitar o loop do mapa horizontal
[Y]: permite o loop vertical do mapa
[DA]: desativar autotiles animados
[AFXXX]: XXX é o período de animações para autotiles animados: 1 -> 999, 20 quadros por padrão
[DL]: desativa os efeitos de iluminação automáticos
[RX]: X = 1 -> alta resolução (padrão)
X = 2 -> resolução média (para aumentar o desempenho)
X = 3 -> baixa resolução (para aumentar drasticamente o desempenho)
[CX]: X = 0 -> sem deslocamento vertical (padrão)
X = 1 -> deslocamento vertical para que a câmera não corte o solo na parte inferior da tela.
Deve ser usado apenas quando o horizonte é visível.
X = 2 -> deslocamento vertical para que a câmera não corte o mapa na parte inferior da tela.
Deve ser usado apenas quando o horizonte é visível.
X = 3 -> deslocamento vertical para que o jogador esteja sempre no centro da tela.
[DF]: desativa o filtro (melhor qualidade, diminui drasticamente o desempenho)
[HF]: atualiza o mapa a cada dois quadros (menos fluente, aumenta o desempenho)
[E] (V.1.2.1): solicitação de edmhotta para ter menos elementos cortados na parte inferior da tela. Pode causar um grande atraso, especialmente ao girar.
[DB] (V.1.2.1): os elementos cortados na parte inferior da tela não são preenchidos com preto (mas ainda são cortados).
Você também pode associar uma palavra-chave a uma configuração no início do script.
Por exemplo, com o seguinte comando:
HM7::Maps_Settings["MyKeyword"] = ["# 60", "X", "HMAP3"]
se um nome de mapa contém "MyKeyword", então o HM7 será ativado, com um ângulo de inclinação de 60 graus, loop horizontal,
e usando a imagem "Heightmap_003" como mapa de altura do solo.
Comandos
- Para definir um novo ângulo de inclinação (0 ~ 80):
$ scene.hm7_set_alpha(novo ângulo)
Para deslizar progressivamente para um novo ângulo de inclinação:
$ scene.hm7_to_alpha(novo ângulo, velocidade)
Para aumentar/diminuir a inclinação:
$ scene.hm7_increase_alpha (valor)
- Para definir um novo ângulo de rotação (0 ~ 379):
$ scene.hm7_set_theta(novo ângulo)
Para deslizar progressivamente para um novo ângulo de rotação:
$ scene.hm7_to_theta(ângulo, velocidade, direção)
Para aumentar/diminuir o ângulo de rotação:
$ scene.hm7_increase_theta(valor)
- Para definir um novo nível de zoom (em porcentagem - padrão = 100):
$ scene.hm7_set_zoom(novo valor)
Para deslizar progressivamente para um novo nível de zoom:
$ scene.hm7_to_zoom(valor, velocidade)
Para aumentar/diminuir o nível de zoom:
$ scene.hm7_increase_zoom (valor)
- Para alterar o desbotamento da luz do horizonte:
$ scene.hm7_set_fading(vermelho, verde, azul, bandeira)
bandeira = 1: a cor determinada por (vermelho, verde, azul) será adicionada à linha do horizonte
flag = 0: a cor determinada por (vermelho, verde, azul) será subtraída à linha do horizonte
- Para definir a altitude de um evento:
adicione um comentário na lista de comandos com: "Altitude X", onde X é o
valor de altura ("Altitude 64" desenhará o evento 64 pixels acima de sua posição original)
- Para definir a altitude do jogador:
use: $ game_player.altitude = X
- Ter uma altitude fixa para um evento (independente das alturas dos mapas):
adicione o comentário "Flutuante" na lista de comandos
- Para ter uma altitude fixa para o jogador:
use: $ game_player.floating = true
Versão 1.3 :
- eventos de "parede": a classe HM7::Surface tem algumas mudanças importantes, e a parte DLL foi totalmente reescrita.
Adicione um comentário "Parede" na lista de comandos (e verifique o sinalizador "Correção de direção")
Você pode especificar o ângulo com o comentário "Angle X", onde XX é um valor de ângulo em graus.
Exemplo: "Angle 30"
Por padrão, o personagem é desenhado no centro do ladrilho.
Você pode especificar novas coordenadas para o meio do caractere com o comentário "Pos X Y", onde X e Y são respectivamente as posições horizontal e vertical em pixels (entre 0 e 32 - os valores padrão são X = 16 e Y = 16-)
Exemplo: nada especificado, então "Pos 32 0"
- texturas verticais animadas: use uma imagem com largura de n * 160px (ou 128px para autotiles) para a textura vertical.
exemplo (normal e depois automático):
- manuseio de resoluções menores: para quem usa resoluções menores (usuários de PSPDS, por exemplo), agora você pode especificar a parte da tela que será usada para renderizar o HM7. Na parte inferior da parte "---- MGC: H-Mode7 ----", você pode encontrar as constantes WIDTH, HEIGHT, X e Y. Elas especificam as dimensões e a posição da renderização HM7.
Por exemplo :
WIDTH = 288
HEIGHT = 216
X = 200
Y = 100
- Usar uma resolução pequena pode diminuir muito o atraso.
- incluiu o recurso [OV]: adicione [OV] no nome do mapa, e adicione um comentário "OV" nos eventos que deseja redimensionar.
O valor do zoom pode ser definido com OV_ZOOM, na parte inferior da parte "---- MGC: H-Mode7 ----" - consertou um bug com vários eventos translúcidos
- manipulação de pivô incluída (um recurso NeoM7):
$scene.hm7_set_pivot(new value)
$scene.hm7_to_pivot(new value, speed)
$scene.hm7_increase_pivot(value)
Notas do autor
No momento, há apenas um punhado de elementos tileset compatíveis com este script.
Seria ótimo se alguém que cria esses elementos decidisse compartilhá-los.
DLL de código aberto!
Agora disponível, o código-fonte para a DLL que lida com o especialmente renderizado gráficos já estão disponíveis. A solicitação do código-fonte foi feita por
finalholylight, e agora está disponível no link aqui, e logo abaixo do próprio demo
MGC Hmode7 1.4.4
Tópico original: https://save-point.org/thread-3151.html