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
SpoilerAbrir

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
Ruben Viera escreveu:
17 Ago 2019, 21:23
Atualizado
Ainda há alguns problemas aí:

Código: Selecionar tudo

IF IS_KEY_PRESSED VK_KEY_F
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.