Como o Tuning Mod v2 funciona?
Enviado: 30 Jun 2018, 13:52
v2, não v3
Eu ainda não atualizei este tópico para falar sobre a versão 3. Mas no download virá o source code pra v3, e eu fiz um vídeo mostrando todo o código:
Atenção
Este tópico é técnico e não serve muito bem para leigos, mesmo que ainda dá para entender algo mesmo quem não sabe de cleo.
Não é bem uma referência de qualidade
Eu criei o Tuning Mod v1 e resolvi criar o v2 pois o v1 era muito mal programado. No entanto, o v2 também foi mal programado e organizado!
A v3 dei uma melhorada, mas ainda é um frankstein. O código é grande demais para recriar do zero, então há partes bem programadas, enquanto outras são horríveis.
Um velho fumando um cigarro de palha
O Tuning Mod v2 foi criado totalmente no Sanny Builder, com somente algumas coisas em .asi, mas 99,9% do mod é em cleo, e pior, pelo Sanny Builder. O Tuning Mod v3 teve mais algumas coisas no .asi e o script de tuning nativo (como Transfender etc) é em GTA3script.
Na época do v2 ainda não existia GTA3script e muito menos MoonLoader, e eu também não sabia .asi, portanto o código foi criado da pior maneira possível! Low level (no sentido do trabalho, não do código fonte) e difícil de compreender. Foi realmente um gigante desafio, e continua sendo pois devido a má organização (não só minha, mas também com algumas culpas da limitação do Sanny Builder) é difícil atualizá-lo, sempre causa dores de cabeça quando tento mexer. Você vai entender.
Sanny Builder também foi o motivo das variáveis quase não serem nomeadas. No SB é como se as variáveis fossem um só escopo (nem isso na verdade), portanto, imagine só um código de mais de 40 mil linhas compartilhando os mesmos nomes de variáveis em diferentes ocasiões! Eu teria que usar nomes com prefixos em cada parte do código. Por isso eu não pude usar variáveis nomeadas, o que deixou o código ainda pior.
Olá
Eu só abri e comecei a escrever este tópico como se estivesse conversando, eu quase nem revisei, portanto não espere nada demais.
Você pode baixar o código-fonte do Tuning Mod v3 aqui.
Mas as explicações abaixo são para a versão v2.2, portanto são diferentes e falta muita coisa.
Eu decidi fazer um texto explicando o funcionamento do Tuning Mod pois é muito importante compartilhar conhecimento. Acredito que seria interessante mais modders fazendo tópicos como este.
Este tópico não é exatamente para ensinar como fazer certa coisa, acredito que o objetivo é mais sobre design, ou seja, como pensar e aplicar certas lógicas, além de curiosidades de como certas coisas foram feitas.
Tanto que eu só estou postando imagens de partes do código em vez do código em si, pois não importa as letrinhas e números, o que importa mais é como aquilo foi pensado, o design.
Primeiramente a organização do código é totalmente separada em arquivos, afinal, ninguém merece mexer num código de mais de 40 mil linhas no mesmo arquivo, ainda mais no Sanny Builder.

Assim eu deixo o
Há vários arquivos com nomes "Const" de constantes, onde uso como se fosse arquivos .h de programações como C.

Estão super mal organizados, mas não me importo pois são arquivos onde eu só abro, adiciono algo e fecho.
Na imagem acima tem comentários com outro endereço na frente, é o equivalente no GTA Vice City para quando eu fizer o Tuning Mod no GTA VC. Eu anotei faz muito tempo com ajuda do LINK/2012, acredito que não preciso mais pois o .idb do GTA VC hoje está bem completo já.
Inicialização
O arquivo

Devido ao mod ser muito usado e complexo, eu acho muito importante o próprio mod ter como manusear erros, assim informando ao jogador que ele instalou o mod incorretamente — por favor, mais mods assim!
É pra isso que serve o

Eu recomendo altamente que você faça algo assim em seus mods. Note que eu fiz um loop de alguns segundos mostrando o texto na tela sem parar, para realmente forçar o texto a aparecer, não deixar que o jogador deixe de ver a mensagem de erro devido a outros mods também mostrando outros textos.
Assim como a minha funçãozinha de mod multilíngue. É muito fácil implementar mais de um idioma no mesmo código, seria bom mais pessoas fazerem isso. Outro lado bom de fazer desta maneira é que você já vai traduzindo o mod enquanto o cria, o que é muito chato traduzi-lo no final — evite deixar as partes mais chatas para o final!!! É assim que projetos são cancelados!!! Tente deixar as partes legais para depois e cuide das chatas antes, isso ajudará sua produtividade de diversas formas.
E assim chegamos no
O conteúdo do loop é simples, se você está fora de um carro a única coisa que irá rodar é o comando
Utilizando o comando de checar se está no local, parado com um carro (eu poderia ter usado a versão de carro em vez de ped, né), com
Primeiro guarda o tipo de veículo (uma função um pouco maior do que a anterior, guardando todas as informações necessárias sobre que veículo é este). Guarda as dimensões do modelo do veículo (útil para por exemplo definir a distância de zoom do carro, posição da peça no chassis etc). Também marca o veículo como "Tuning Moded", indicando que foi um veículo utilizado pelo Tuning Mod, sendo útil para certas coisas (inclusive mods terceiros).
E chegamos no
Começa com armazenamento do local, veículo, carregamento de .txd e a introdução do mod (caso aplicável). E antes de tudo, a função

Acredite, essa função já foi reescrita umas 5 vezes, é uma das partes que mais me deram dores de cabeça no mod — algo que era para ser super simples.
Vou querer dar grande atenção à ela pois vai lhe ser muito útil para mods do gênero:
Logo no início temos várias desativações relacionadas ao gameplay para evitar coisas inexperadas:

Em seguida, dependente do local o veículo é colocado em tal lugar de certo modo:

Perceba que foi necessário umas gambiarras para fazer isso funcionar como devia. O problema mais chato que tive foi do veículo aparecendo escuro flutuando travado no ar, para tentar resolver eu tinha feito códigos absurdos, mas acredito que consegui uma solução simples já.
O código contrário (ou seja, de sair) é semelhante. Algo importante é que eu fiz um backup do

Sem isto o jogo facilmente causa crash ao entrar e sair da garagem, até mesmo durante a instalação de peças ao mover a câmera.
Ao sair da garagem o mod re-adiciona o backup do
Isto é algo muito importante para seus mods, se você quiser marcar um veículo já existente como "necessário por script" para evitar que ele seja deletado pelo jogo, você não pode em seguida desmarcar (
Voltando ao menu, bem, você já deve ter notado que quando você entra no menu do Tuning Mod a tela se abre como se fosse olhos abrindo.
Isso foi feito super facilmente:

Sim, só isso.
O processamento do menu é separado em arquivos, e este loop checa o tipo de veículo e mostra conforme necessário.

Esta parte foi bem merda de ser feita, pois é duplicação de código, mas sinceramente não encontrei uma maneira melhor e ainda agradável.
Há diversos arquivos de menu separados, cada um com seus itens e comandos por base do tipo de veículo.
Para determinar qual item está selecionado eu utilizei variáveis como se fosse uma tabela: uma variável informando qual linha está selecionada na primeira coluna, outra na segunda etc. Eu pensava ser uma má solução, mas na prática eu gostei, acredito ser um bom modo de fazer menus pop-ups.
Funcionamento do menu
Toda a interface do mod foi criada utilizando um sisteminha de interface que eu criei chamado Shine GUI. Não é tão simples para leigos mas é completamente personalizável e dinâmica.
Para ter a animação quando um item é selecionado eu utilizo um código que calcula uma variável usada para tamanho e posição vertical e renderizo o item usando ela a cada frame, juntamente com a variável de "progresso" sendo incrementada, assim causando uma animação aumentando de tamanho a cada frame.

Uma outra variável
O loop
A posição de cada item, tamanho etc estão todos em arquivos Const para fácil alteração.
Em outro arquivo há o processamento dos comandos, ou seja, é onde fica a quantia de itens de cada coluna.

Eu odeio este arquivo!
São 350 linhas disso, só nos carros (ainda tem a mesma coisa para motos, aviões, trailers, barcos...), eu sinceramente não sei outra solução boa e agradável de se fazer.
E continua, ainda temos o arquivo que transforma a junção das variáveis indicando cada linha de cada coluna em um número final, além de uns processamentos de interface.

Também odeio este arquivo.
Mas tudo dá para ficar pior:

Bem que o Sanny Builder poderia ter um
No código principal do menu temos isto, que aplica tal coisa caso tal item do menu esteja selecionado e você tenha pressionado
Note também que a mesma variável que diz qual item está selecionado, é a variável que diz qual ID da entrada GXT está selecionada para colocar o efeito de item selecionado no momento em que o tal item for renderizado.

O tal efeito de item selecionado é na verdade +1 no ID da formatação.
Ou seja, se a formatação da letra do menu é 10, o ID 11 é a formatação do item de menu selecionado, assim eu checo se o atual item para mostrar é o mesmo ID do atual item selecionado e adiciono +1 na variável do ID da formatação.
Foi uma boa gambiarra.
No momento há mais de 400 linhas de códigos de diferentes formatações de texto para diferentes itens, botões, cabeçalhos, descrições, janelas etc...

Prefiro nem comentar...
Mas se nota algo interessante ali, em certas formatações eu utilizo uma cor RGB anteriormente guardada ao pegar o tipo de veículo.
Ah, agora você entendeu como que o Tuning Mod tem diferentes cores de interface em cada tipo de veículo, né?

Algo interessante é como o efeito de pulsar do item selecionado funciona.
Vou deixar o código aqui para vocês usarem:
É bem simples na verdade.
Assim, basta ler o valor da label
Para o pulsar ser processado é necessário chamar a função acima em loop.
Use
Tuning
Vamos supor que escolhemos a instalação de um tuning, como turbo.
Devido a merdas do jogo, como crashes aleatórios após alterar a velocidade do carro, foi necessário eu alterar as propriedades físicas, como inércia e resistência do ar para fazer a velocidade aumentar...

Mas o que é interessante mesmo é como diabos eu fiz para mostrar as barrinhas de velocidade etc do carro mostrarem como elas serão após instalar o turbo (ou seja, a prévia de alteração de velocidade após instalar).
Exato, eu lhe pergunto, como diabos eu fiz? Eu também não sei.
Enquanto escrevo isto estou tentando entender. É um dos poucos sistema do TM v2 que continuaram iguais ao v1, pois eu peguei trauma e não quis recriar.
É sério, na época eu passei uma semana tentando fazer essa merda funcionar direito. Hoje se eu tentasse seria mais fácil, mas estou com trauma, se está funcionando bem é melhor eu nem mexer mais nisso!
Basicamente eu faço um reverso da instalação para simular:

Veja este código e o código de cima, eu não sei explicar a lógica, mas ta aí.
Assim quando mostrar os stats, a cada cálculo e desenho de cada barrinha, eu mostro a barrinha calculada no momento e a barrinha calculada no código acima, uma em cima da outra, onde a barrinha prévia vem por baixo e colorida.

Cada tuning instalado é armazenado no handling adicional do carro que funciona pelo IndieVehHandlings. Eu ainda pretendo fazer um tutorial desta API aqui, mas ainda penso em recriar o IndieVehHandlings em .asi...
Bem, assim por exemplo se eu instalo um turbo, será ligado um bit nas flags das peças instaladas para dizer que o tal turbo está instalado.
Isto é útil para saber se a tal peça já está instalada, assim como mods terceiros podem por exemplo adicionar um relógio de turbo no hud caso tenha um turbo instalado, coisa do tipo.
Para entender o funcionamento, no momento, basta abrir o IndieVehHandlings.cs com o Sanny Builder, lá há toda a documentação embutida.
Mais
A interface "Mais" foi criada para adicionar funcionalidades variadas de modo fácil ao mod. E eu falhei! Adicionar uma nova funcionalidade lá ficou bem chatinho. Na verdade, a chatice é igual ao menu principal (lá também está chato adicionar novos itens).
No entanto, não está tão ruim assim.
O funcionamento é semelhante ao menu principal, só que agora com novo design e somente uma coluna.
A cada item selecionado há códigos para a instalação do item.

Ou seja, é algo até bem agradável de se trabalhar, o lado ruim é adicionar o item à lista de itens válidos, afinal, vamos lembrar que o Tuning Mod não é só para carros, mas também para motos, aviões, barcos, quadriciclo e monster truck. Tudo tem que ser manuseado para mostrar os itens corretos para cada tipo de veículo.

Na parte 2 abaixo entraremos em detalhes mais avançados:
Eu ainda não atualizei este tópico para falar sobre a versão 3. Mas no download virá o source code pra v3, e eu fiz um vídeo mostrando todo o código:
Atenção
Este tópico é técnico e não serve muito bem para leigos, mesmo que ainda dá para entender algo mesmo quem não sabe de cleo.
Não é bem uma referência de qualidade
Eu criei o Tuning Mod v1 e resolvi criar o v2 pois o v1 era muito mal programado. No entanto, o v2 também foi mal programado e organizado!
A v3 dei uma melhorada, mas ainda é um frankstein. O código é grande demais para recriar do zero, então há partes bem programadas, enquanto outras são horríveis.
Um velho fumando um cigarro de palha
O Tuning Mod v2 foi criado totalmente no Sanny Builder, com somente algumas coisas em .asi, mas 99,9% do mod é em cleo, e pior, pelo Sanny Builder. O Tuning Mod v3 teve mais algumas coisas no .asi e o script de tuning nativo (como Transfender etc) é em GTA3script.
Na época do v2 ainda não existia GTA3script e muito menos MoonLoader, e eu também não sabia .asi, portanto o código foi criado da pior maneira possível! Low level (no sentido do trabalho, não do código fonte) e difícil de compreender. Foi realmente um gigante desafio, e continua sendo pois devido a má organização (não só minha, mas também com algumas culpas da limitação do Sanny Builder) é difícil atualizá-lo, sempre causa dores de cabeça quando tento mexer. Você vai entender.
Sanny Builder também foi o motivo das variáveis quase não serem nomeadas. No SB é como se as variáveis fossem um só escopo (nem isso na verdade), portanto, imagine só um código de mais de 40 mil linhas compartilhando os mesmos nomes de variáveis em diferentes ocasiões! Eu teria que usar nomes com prefixos em cada parte do código. Por isso eu não pude usar variáveis nomeadas, o que deixou o código ainda pior.
Olá
Eu só abri e comecei a escrever este tópico como se estivesse conversando, eu quase nem revisei, portanto não espere nada demais.
Você pode baixar o código-fonte do Tuning Mod v3 aqui.
Mas as explicações abaixo são para a versão v2.2, portanto são diferentes e falta muita coisa.
Eu decidi fazer um texto explicando o funcionamento do Tuning Mod pois é muito importante compartilhar conhecimento. Acredito que seria interessante mais modders fazendo tópicos como este.
Este tópico não é exatamente para ensinar como fazer certa coisa, acredito que o objetivo é mais sobre design, ou seja, como pensar e aplicar certas lógicas, além de curiosidades de como certas coisas foram feitas.
Tanto que eu só estou postando imagens de partes do código em vez do código em si, pois não importa as letrinhas e números, o que importa mais é como aquilo foi pensado, o design.
Primeiramente a organização do código é totalmente separada em arquivos, afinal, ninguém merece mexer num código de mais de 40 mil linhas no mesmo arquivo, ainda mais no Sanny Builder.

Assim eu deixo o
Tuning Mod (Junior_Djjr).txt aberto só para compilar, e nas outras guias vou abrindo os outros arquivos, após editar, eu salvo o arquivo, volto nesta guia e pressiono F6 para compilar.Há vários arquivos com nomes "Const" de constantes, onde uso como se fosse arquivos .h de programações como C.

Estão super mal organizados, mas não me importo pois são arquivos onde eu só abro, adiciono algo e fecho.
Na imagem acima tem comentários com outro endereço na frente, é o equivalente no GTA Vice City para quando eu fizer o Tuning Mod no GTA VC. Eu anotei faz muito tempo com ajuda do LINK/2012, acredito que não preciso mais pois o .idb do GTA VC hoje está bem completo já.
Inicialização
O arquivo
Script init.txt é a inicialização do mod.
Devido ao mod ser muito usado e complexo, eu acho muito importante o próprio mod ter como manusear erros, assim informando ao jogador que ele instalou o mod incorretamente — por favor, mais mods assim!
É pra isso que serve o
LoadFiles.txt, um arquivo de mais de 300 linhas só para carregar umas configurações e checar se o mod está corretamente instalado.
Eu recomendo altamente que você faça algo assim em seus mods. Note que eu fiz um loop de alguns segundos mostrando o texto na tela sem parar, para realmente forçar o texto a aparecer, não deixar que o jogador deixe de ver a mensagem de erro devido a outros mods também mostrando outros textos.
Assim como a minha funçãozinha de mod multilíngue. É muito fácil implementar mais de um idioma no mesmo código, seria bom mais pessoas fazerem isso. Outro lado bom de fazer desta maneira é que você já vai traduzindo o mod enquanto o cria, o que é muito chato traduzi-lo no final — evite deixar as partes mais chatas para o final!!! É assim que projetos são cancelados!!! Tente deixar as partes legais para depois e cuide das chatas antes, isso ajudará sua produtividade de diversas formas.
E assim chegamos no
Main - Check.txt, onde há um loop que fica rodando durante o gameplay fora do mod.O conteúdo do loop é simples, se você está fora de um carro a única coisa que irá rodar é o comando
T+L para abrir o spawner (viu só quem fica falando que o Tuning Mod tira FPS do jogo só de ter instalado??). E caso você estiver dentro de um carro o mod irá checar se o handling é independente (IndieVehHandlings.cs), pegar o tipo de veículo (se é carro, moto, bicicleta etc), pegar o trailer e com esses dados definir qual local o veículo tem que estar para abrir a garagem. Claro, há também a checagem da tecla TAB para mostrar as informações na tela.
Utilizando o comando de checar se está no local, parado com um carro (eu poderia ter usado a versão de carro em vez de ped, né), com
sphere 1 para mostrar a marca vermelha, assim entra numa sequência de ativação e desativação do mod.Primeiro guarda o tipo de veículo (uma função um pouco maior do que a anterior, guardando todas as informações necessárias sobre que veículo é este). Guarda as dimensões do modelo do veículo (útil para por exemplo definir a distância de zoom do carro, posição da peça no chassis etc). Também marca o veículo como "Tuning Moded", indicando que foi um veículo utilizado pelo Tuning Mod, sendo útil para certas coisas (inclusive mods terceiros).
E chegamos no
Main - Menu.txt, onde, como o nome diz, é o menu principal do mod.Começa com armazenamento do local, veículo, carregamento de .txd e a introdução do mod (caso aplicável). E antes de tudo, a função
Lock que é a função principal onde o veículo é "travado" no mapa.
Acredite, essa função já foi reescrita umas 5 vezes, é uma das partes que mais me deram dores de cabeça no mod — algo que era para ser super simples.
Vou querer dar grande atenção à ela pois vai lhe ser muito útil para mods do gênero:
Logo no início temos várias desativações relacionadas ao gameplay para evitar coisas inexperadas:

Em seguida, dependente do local o veículo é colocado em tal lugar de certo modo:

Perceba que foi necessário umas gambiarras para fazer isso funcionar como devia. O problema mais chato que tive foi do veículo aparecendo escuro flutuando travado no ar, para tentar resolver eu tinha feito códigos absurdos, mas acredito que consegui uma solução simples já.
O código contrário (ou seja, de sair) é semelhante. Algo importante é que eu fiz um backup do
CVehicle+CreatedBy (0x4A4, 1 byte) do veículo e troquei para 2 (para dizer que o veículo é controlado por script e assim evitar que o jogo o delete).
Sem isto o jogo facilmente causa crash ao entrar e sair da garagem, até mesmo durante a instalação de peças ao mover a câmera.
Ao sair da garagem o mod re-adiciona o backup do
CreatedBy, isto é, se o veículo era um carro aleatório qualquer, ele voltará a ser um, e se ele já era controlado por script, também voltará a ser, assim não causando problemas com missões e outros mods.Isto é algo muito importante para seus mods, se você quiser marcar um veículo já existente como "necessário por script" para evitar que ele seja deletado pelo jogo, você não pode em seguida desmarcar (
01C3: em Sanny Builder; MARK_CAR_AS_NO_LONGER_NEEDED em GTA3script), e sim voltar ao estado anterior, senão se o carro já era usado por missão ele se transformará num carro aleatório e dará missão fracassada ou atrapalhará o uso de algum mod, por exemplo causando crashes.Voltando ao menu, bem, você já deve ter notado que quando você entra no menu do Tuning Mod a tela se abre como se fosse olhos abrindo.
Isso foi feito super facilmente:

Sim, só isso.
O processamento do menu é separado em arquivos, e este loop checa o tipo de veículo e mostra conforme necessário.

Esta parte foi bem merda de ser feita, pois é duplicação de código, mas sinceramente não encontrei uma maneira melhor e ainda agradável.
Há diversos arquivos de menu separados, cada um com seus itens e comandos por base do tipo de veículo.
Para determinar qual item está selecionado eu utilizei variáveis como se fosse uma tabela: uma variável informando qual linha está selecionada na primeira coluna, outra na segunda etc. Eu pensava ser uma má solução, mas na prática eu gostei, acredito ser um bom modo de fazer menus pop-ups.
Funcionamento do menu
Toda a interface do mod foi criada utilizando um sisteminha de interface que eu criei chamado Shine GUI. Não é tão simples para leigos mas é completamente personalizável e dinâmica.
Para ter a animação quando um item é selecionado eu utilizo um código que calcula uma variável usada para tamanho e posição vertical e renderizo o item usando ela a cada frame, juntamente com a variável de "progresso" sendo incrementada, assim causando uma animação aumentando de tamanho a cada frame.

Uma outra variável
Processed* informa se o tal item terminou de ser processado, ou seja, se a animação já chegou ao tamanho necessário, assim o texto do item será mostrado e não terá mais cálculo de tamanho, o item será mostrado como algo estático.O loop
for to de cada item é o número da entrada GXT do arquivo .fxt do mod, como explicado no tutorial do Shine GUI. É deste modo que cada item da coluna é renderizado verticalmente.A posição de cada item, tamanho etc estão todos em arquivos Const para fácil alteração.
Em outro arquivo há o processamento dos comandos, ou seja, é onde fica a quantia de itens de cada coluna.

Eu odeio este arquivo!
São 350 linhas disso, só nos carros (ainda tem a mesma coisa para motos, aviões, trailers, barcos...), eu sinceramente não sei outra solução boa e agradável de se fazer.
E continua, ainda temos o arquivo que transforma a junção das variáveis indicando cada linha de cada coluna em um número final, além de uns processamentos de interface.

Também odeio este arquivo.
Mas tudo dá para ficar pior:

Bem que o Sanny Builder poderia ter um
switch, né?No código principal do menu temos isto, que aplica tal coisa caso tal item do menu esteja selecionado e você tenha pressionado
Y.Note também que a mesma variável que diz qual item está selecionado, é a variável que diz qual ID da entrada GXT está selecionada para colocar o efeito de item selecionado no momento em que o tal item for renderizado.

O tal efeito de item selecionado é na verdade +1 no ID da formatação.
Ou seja, se a formatação da letra do menu é 10, o ID 11 é a formatação do item de menu selecionado, assim eu checo se o atual item para mostrar é o mesmo ID do atual item selecionado e adiciono +1 na variável do ID da formatação.
Foi uma boa gambiarra.
No momento há mais de 400 linhas de códigos de diferentes formatações de texto para diferentes itens, botões, cabeçalhos, descrições, janelas etc...

Prefiro nem comentar...
Mas se nota algo interessante ali, em certas formatações eu utilizo uma cor RGB anteriormente guardada ao pegar o tipo de veículo.
Ah, agora você entendeu como que o Tuning Mod tem diferentes cores de interface em cada tipo de veículo, né?

Algo interessante é como o efeito de pulsar do item selecionado funciona.
Vou deixar o código aqui para vocês usarem:
Código: Selecionar tudo
:GUI_ItemMenuActive_PulseColor_Update {ResetPulse 0@}
0AC6: 11@ = label @GUI_Memory_ItemMenuActive_PulseColor offset
0AC6: 12@ = label @GUI_Memory_ItemMenuActive_PulseColor_Step offset
if 0@ == 1
then
0A8C: write_memory 11@ size 4 value 255.0 vp 0
0A8C: write_memory 12@ size 4 value 1 vp 0
else
0A8D: 21@ = read_memory 11@ size 4 vp 0
0A8D: 22@ = read_memory 12@ size 4 vp 0
if 22@ == 1
then //Down
007F: 21@ -= frame_delta_time * ItemPulseSpeed
if 21@ < 180.0
then
21@ = 180.0
22@ = 2
end
else //Up
0079: 21@ += frame_delta_time * ItemPulseSpeed
if 21@ > 255.0
then
21@ = 255.0
22@ = 1
end
end
0A8C: write_memory 11@ size 4 value 21@ vp 0
0A8C: write_memory 12@ size 4 value 22@ vp 0
end
0AB2: ret 0Assim, basta ler o valor da label
GUI_Memory_ItemMenuActive_PulseColor para retornar um valor entre 180.0 e 255.0 por base do progresso do pulsar.Para o pulsar ser processado é necessário chamar a função acima em loop.
Código: Selecionar tudo
0AB1: call_scm_func @GUI_ItemMenuActive_PulseColor_Update 1 ResetPulse falseResetPulse true para o pulso ser resetado. É importante para quando você altera o item selecionado, o pulso tem que ser reiniciado para dar um efeito conveniente.Tuning
Vamos supor que escolhemos a instalação de um tuning, como turbo.
Devido a merdas do jogo, como crashes aleatórios após alterar a velocidade do carro, foi necessário eu alterar as propriedades físicas, como inércia e resistência do ar para fazer a velocidade aumentar...

Mas o que é interessante mesmo é como diabos eu fiz para mostrar as barrinhas de velocidade etc do carro mostrarem como elas serão após instalar o turbo (ou seja, a prévia de alteração de velocidade após instalar).
Exato, eu lhe pergunto, como diabos eu fiz? Eu também não sei.
Enquanto escrevo isto estou tentando entender. É um dos poucos sistema do TM v2 que continuaram iguais ao v1, pois eu peguei trauma e não quis recriar.
É sério, na época eu passei uma semana tentando fazer essa merda funcionar direito. Hoje se eu tentasse seria mais fácil, mas estou com trauma, se está funcionando bem é melhor eu nem mexer mais nisso!
Basicamente eu faço um reverso da instalação para simular:

Veja este código e o código de cima, eu não sei explicar a lógica, mas ta aí.
Assim quando mostrar os stats, a cada cálculo e desenho de cada barrinha, eu mostro a barrinha calculada no momento e a barrinha calculada no código acima, uma em cima da outra, onde a barrinha prévia vem por baixo e colorida.

Cada tuning instalado é armazenado no handling adicional do carro que funciona pelo IndieVehHandlings. Eu ainda pretendo fazer um tutorial desta API aqui, mas ainda penso em recriar o IndieVehHandlings em .asi...
Bem, assim por exemplo se eu instalo um turbo, será ligado um bit nas flags das peças instaladas para dizer que o tal turbo está instalado.
Isto é útil para saber se a tal peça já está instalada, assim como mods terceiros podem por exemplo adicionar um relógio de turbo no hud caso tenha um turbo instalado, coisa do tipo.
Para entender o funcionamento, no momento, basta abrir o IndieVehHandlings.cs com o Sanny Builder, lá há toda a documentação embutida.
Mais
A interface "Mais" foi criada para adicionar funcionalidades variadas de modo fácil ao mod. E eu falhei! Adicionar uma nova funcionalidade lá ficou bem chatinho. Na verdade, a chatice é igual ao menu principal (lá também está chato adicionar novos itens).
No entanto, não está tão ruim assim.
O funcionamento é semelhante ao menu principal, só que agora com novo design e somente uma coluna.
A cada item selecionado há códigos para a instalação do item.

Ou seja, é algo até bem agradável de se trabalhar, o lado ruim é adicionar o item à lista de itens válidos, afinal, vamos lembrar que o Tuning Mod não é só para carros, mas também para motos, aviões, barcos, quadriciclo e monster truck. Tudo tem que ser manuseado para mostrar os itens corretos para cada tipo de veículo.

Na parte 2 abaixo entraremos em detalhes mais avançados:






















