Página 1 de 2
[SA] Plane & Heli volume effect level [WIP]
Enviado: 16 Ago 2019, 16:52
por Ruben Viera
Um mod para reducir o volume dos efeitos enquanto o player esteja dentro de algum helicoptero ou avião
Vem com um ini onde pode configurar o volume máximo (foras desses vehiculos) e mínimo (ao entrar neles)
Source
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_INT scplayer
LVAR_FLOAT volume,backup,temp
//Created by Angelomon
READ_FLOAT_FROM_INI_FILE "cleo/SFXLvl.ini" "MAIN" "Volume" volume
GET_PLAYER_CHAR 0 (scplayer)
main_loop:
WAIT 0
IF IS_CHAR_IN_FLYING_VEHICLE scplayer
READ_MEMORY 0x00B5FCCC 4 FALSE (backup)
IF backup > volume
WRITE_MEMORY 0x00B5FCCC 4 volume FALSE
WHILE IS_CHAR_IN_FLYING_VEHICLE scplayer
WAIT 0
ENDWHILE
READ_MEMORY 0x00B5FCCC 4 FALSE (temp)
IF temp = volume
WRITE_MEMORY 0x00B5FCCC 4 backup FALSE
ENDIF
ENDIF
ENDIF
GOTO main_loop
GOTO main_loop
}
SCRIPT_END
Download
Plane & Heli volume effect level
PD: obrigado pelas sugestões Israel, vou ter em conta de agora em diante com outros projetos
Re: [SA] Plane & Heli volume effect level
Enviado: 16 Ago 2019, 17:44
por Israel
Código: Selecionar tudo
IF IS_CHAR_IN_ANY_PLANE scplayer
OR IS_CHAR_IN_ANY_HELI scplayer
IS_CHAR_IN_FLYING_VEHICLE scplayer
Do jeito que você fez, o script vai ficar setando o volume o tempo todo. O certo seria setar quando o player entrasse num avião ou helicóptero e depois esperar até que ele saísse.
Você está lendo o arquivo INI dentro do loop.
Prefixos para comentários em arquivos INI são
; e
#, não
// e
/*.
E esse mod não tá funcionando aqui. Na verdade, ao abrir o jogo, ele fica completamente mudo. Provavelmente porque você usou
0x00BA6797 (CMenuManager->m_nSfxVolume) que é na verdade o valor da
barra de volume
, o volume em si fica em
0x00B5FCCC (CAEAudioHardware->m_fEffectMasterScalingFactor).
Re: [SA] Plane & Heli volume effect level [WIP]
Enviado: 16 Ago 2019, 19:03
por Ruben Viera
Israel escreveu: ↑16 Ago 2019, 17:44
0x00B5FCCC (CAEAudioHardware->m_fEffectMasterScalingFactor).
Onde você sacou esse valor? Fiu ver no Memory Addesses e não encontrei.
Re: [SA] Plane & Heli volume effect level [WIP]
Enviado: 16 Ago 2019, 19:07
por Israel
Ruben Viera escreveu: ↑16 Ago 2019, 19:03
Israel escreveu: ↑16 Ago 2019, 17:44
0x00B5FCCC (CAEAudioHardware->m_fEffectMasterScalingFactor).
Onde você sacou esse valor? Fiu ver no Memory Addesses e não encontrei.
Engenharia reversa usando .idb.
Edit:
f15-tutoriais/t1215-engenharia-reversa-para-iniciantes
Re: [SA] Plane & Heli volume effect level [WIP]
Enviado: 16 Ago 2019, 19:11
por Ruben Viera
Lastima que o ida64 não funciona aqui, mais vou tentar de novo
Re: [SA] Plane & Heli volume effect level [WIP]
Enviado: 16 Ago 2019, 19:15
por Israel
Ruben Viera escreveu: ↑16 Ago 2019, 19:11
Lastima que o ida64 não funciona aqui, mais vou tentar de novo
Você tem que usar o ida32 para abrir binários 32 bits e o ida64 para binários 64 bits, o inverso não dá certo.
Re: [SA] Plane & Heli volume effect level [WIP]
Enviado: 16 Ago 2019, 21:06
por Ruben Viera
Acho que isto ficara parado até conseguir o ida32, busquei por varias horas é nao encontrei instalador do ida32, na web oficial somente tem a versão de 64 bits, busquei em outros lados mais não achei nada
Re: [SA] Plane & Heli volume effect level [WIP]
Enviado: 16 Ago 2019, 21:17
por Israel
Ruben Viera escreveu: ↑16 Ago 2019, 21:06
Acho que isto ficara parado até conseguir o ida32, busquei por varias horas é nao encontrei instalador do ida32, na web oficial somente tem a versão de 64 bits, busquei em outros lados mais não achei nada
Você tá confundindo as coisas, são apenas executáveis diferentes pra cada um (um pra 32 bits e outro pra 64 bits), mas eles vêm juntos.
Veja essa minha mensagem no forum da BMS.
Re: [SA] Plane & Heli volume effect level [WIP]
Enviado: 17 Ago 2019, 01:33
por Ruben Viera
Lendo no IDA até agora achei 3 coisas, 1 é que a variavel vai pulando de um registro a outro, 2 tenho que melhorar meus conhecimentos em assembly, 3 a variavel somente fica en variaveis locais dentro de um metodo
Re: [SA] Plane & Heli volume effect level [WIP]
Enviado: 17 Ago 2019, 10:35
por Israel
Ruben Viera escreveu: ↑17 Ago 2019, 01:33
Lendo no IDA até agora achei 3 coisas, 1 é que a variavel vai pulando de um registro a outro, 2 tenho que melhorar meus conhecimentos em assembly, 3 a variavel somente fica en variaveis locais dentro de um metodo
Não é bem assim. Se trata de um membro de uma classe, ela é usada globalmente através de ponteiros.
Re: [SA] Plane & Heli volume effect level [WIP]
Enviado: 17 Ago 2019, 21:23
por Ruben Viera
Atualizado, agora com download; aparentemente o memory address 0x00B5FCCC somente funciona com o SA ScrDebug instalado, vou tentar ver se é possivel fazê-lo funcionar sem o ScrDebug
Re: [SA] Plane & Heli volume effect level [WIP]
Enviado: 17 Ago 2019, 21:59
por Junior_Djjr
Ruben Viera escreveu: ↑17 Ago 2019, 21:23
Atualizado, agora com download; aparentemente o memory address 0x00B5FCCC somente funciona com o SA ScrDebug instalado, vou tentar ver se é possivel fazê-lo funcionar sem o ScrDebug
Você tá enganado, eu não uso ScrDebug e eu postei VÁRIOS mods usando isto e ninguém disse não estar funcionando.
Re: [SA] Plane & Heli volume effect level [WIP]
Enviado: 17 Ago 2019, 22:36
por Ruben Viera
Achei o problema, era um arquivo que atrapalhaba, agora ficou bem.
Se mudou no ini o valor inicial do LowVolume de 0.5 para 0.25 (assim o efeito é mais notável)
Re: [SA] Plane & Heli volume effect level [WIP]
Enviado: 17 Ago 2019, 22:41
por ceec
Deve ser adicionado ao MixSets!
Re: [SA] Plane & Heli volume effect level [WIP]
Enviado: 17 Ago 2019, 22:41
por Israel
Ainda há alguns problemas aí:
E se eu não usar "F" para entrar/sair do veículo?
Ao invés de usar essa variável
mode e essa checagem de tecla, o certo seria fazer como eu disse: esperar até o player sair do veículo.
Código: Selecionar tudo
READ_MEMORY 0x00B5FCCC 4 0 volume
WRITE_MEMORY 0x00B5FCCC 4 high 1
Você deixou virtual protect 0 pra ler, mas deixou 1 pra escrever. Não faz sentido.
Deixe FALSE pra esse endereço, pois como eu disse antes: é um membro público de uma classe.
Eu corrigi o código:
Código: Selecionar tudo
SCRIPT_START
{
LVAR_INT scplayer
LVAR_FLOAT volume, backup, temp
READ_FLOAT_FROM_INI_FILE "cleo/SFXLvl.ini" "MAIN" "Volume" volume // apenas o volume a ser reduzido
GET_PLAYER_CHAR 0 (scplayer)
main_loop:
WAIT 0
IF IS_CHAR_IN_FLYING_VEHICLE scplayer
READ_MEMORY 0x00B5FCCC 4 FALSE (backup)
IF backup > volume // não faz sentido aumentar o volume, sendo que o objetivo é fazer o contrário
WRITE_MEMORY 0x00B5FCCC 4 volume FALSE
WHILE IS_CHAR_IN_FLYING_VEHICLE scplayer // esperando até o player sair do veículo
WAIT 0
ENDWHILE
READ_MEMORY 0x00B5FCCC 4 FALSE (temp)
IF temp = volume // para não sobrepor a vontade do jogador, checa se ele alterou o volume manualmente,
WRITE_MEMORY 0x00B5FCCC 4 backup FALSE // se não alterou, retorna o volume para como estava antes de entrar no veículo
ENDIF
ENDIF
ENDIF
GOTO main_loop
}
SCRIPT_END
Analise ele com os comentários.