Ajustes e configurações - modificação e persistência da variável em tempo de execução

19

A maioria das empresas possui um editor ou um sistema de controle variável para ajustar coisas nos jogos, mas existem soluções de middleware para esse problema? Eu escrevi dois desses sistemas no passado e trabalhei com cinco, talvez seis diferentes, mas nenhum deles estava disponível.

Cada uma dessas soluções domésticas apresentava problemas, desde a necessidade de manter a busca de valores até a impossibilidade de salvar o estado atual das variáveis.

Existem bibliotecas / aplicativos maduros de controle de variável de configuração / tempo de execução?

Geralmente codifico em C ++, mas acho que um editor maduro de configurações / variáveis ​​provavelmente seria baseado em soquete (e, portanto, até certo ponto independente da linguagem), pois todo o hardware de desenvolvimento atual, exceto o material da Nintendo, fornece um mecanismo para conversar com os servidores. A implementação do código também precisaria ser bastante simples (gosto do artigo hot_var / TweakableConstants compartilhado por Oskar, mas não é um pacote)

Richard Fabian
fonte

Respostas:

8

Gosto do que Noel propôs em seu blog. Um tweaker variável baseado em telnet . Usando o telnet, ele foi capaz de usar qualquer cliente de telnet para editar as variáveis. Mais tarde, eles construíram uma interface gráfica em torno do protocolo. Parece bastante simples, que provavelmente não vale uma biblioteca de middleware, mas olhar para o código dele pode ser útil.

Mas eu discordo de seu sentimento anti-Lua. Um console remoto da Lua parece incrível.

deft_code
fonte
Eles também usaram o telnet para as variáveis ​​de ajuste no MotoGP: blogs.msdn.com/b/shawnhar/archive/2009/05/01/…
Kylotan, em
3
Porquê Telnet? HTTP / HTML, cara! O HTTP é um protocolo muito simples e pode ser facilmente incorporado em um jogo - eu já fiz isso antes, estava bem abaixo de mil linhas de código.
precisa saber é o seguinte
3
Eu diria que o Telnet faz o trabalho muito bem e é muito menos complexo. Você poderia fazer isso em 100 linhas de código em vez de 1000. E também permite o envio de atualizações em vez de precisar pesquisar e puxá-las. Mas se você precisar de HTTP para qualquer outro objetivo em seu jogo, eu concordo que vale a pena usá-lo aqui também.
Kylotan
5

Talvez a idéia de constantes ajustáveis ​​atenda às suas necessidades. É tão útil que você acha que precisaria de uma solução complexa para ter um controle eficaz das variáveis ​​em tempo de execução, mas, na realidade, a implementação é quase simples demais. A discussão original dessa técnica também é uma leitura interessante.

Exemplo:

glClearColor( H(1.0f), H(1.0f), H(1.0f), H(1.0f) );

A Hmacro se expande para algo parecido HotValue(x, __FILE__, __LINE__, __COUNTER__). Isso registra o valor em algum registro global. Em seguida, tenha uma função como RefreshHotValues()essa que você chama em intervalos regulares. A função pesquisa cada entrada no registro, analisa o arquivo de origem específico e recarrega o valor ativo.

Conforme você modifica o código fonte real, você tem persistência ali.

Obviamente, isso não funcionará onde H()não for avaliado todos os quadros, mas existem maneiras de resolver isso, conforme discutido aqui .

Você pode expandir essa idéia para uma solução baseada em soquete, talvez. Pode haver uma sobrecarga significativa de desempenho para chamar HotValue()todos os quadros, mas como você pode facilmente compilar a macro, substituindo-a completamente pela constante, isso não é um problema.

Oskar N.
fonte
2
@Kylotan: Você está perdendo o ponto. Você está modificando o código fonte real, que é analisado em tempo de execução. A persistência é através das fontes modificadas.
Oskar N.
Sim, de alguma forma eu perdi isso ao ler o artigo. Vou excluir meu comentário e reler!
Kylotan 09/09
3
Eu posso ser apenas eu, mas essa técnica parece ... nojenta. Eu acho que é porque passei tanto tempo odiando números mágicos e isso só funcionará para números mágicos. Prefiro ver a cor clara fazer parte de um arquivo de configuração ou script. A mágica vem com a capacidade de carregar recursos a quente.
Deft_code 9/09/10
@caspin: Você pode usar variáveis ​​simples e, em vez disso, H(int, myvar, 5)alterar e quando o arquivo for substituído, substitua a myvarmemória. Veja mollyrocket.com/forums/viewtopic.php?p=5395#5395
Oskar N.
1

O AntTweakBar é realmente útil para o que você deseja fazer, no entanto, na maioria das vezes, você deseja ter métodos que 'compilem' na versão com algumas macros ou similares.

DrDeth
fonte
0

O gerenciamento de configurações parece ser uma daquelas coisas refeitas do zero para todos os jogos, provavelmente devido à sua simplicidade e à alta variabilidade nos tipos de configurações necessárias. Supondo que você tenha uma configuração de back-end de armazenamento decente (SQL / qualquer que seja), você pode codificar uma solução robusta para o gerenciamento de configurações em um dia ou dois, para que não pareça haver muita necessidade comercial real de uma solução de middleware. Prendê-lo em cima do que você usa para armazenar informações de jogadores é, na minha opinião, o melhor caminho a seguir.

Ben Zeigler
fonte
1
Não se trata de informações de configurações, é de ajustar variáveis ​​de tempo de execução para fins de depuração ou jogabilidade.
Muitos tipos de variáveis ​​de tempo de execução para fins de depuração e jogabilidade fazem sentido armazenar em algum tipo de backend persistente. Isso permite a alteração deles em um sistema inteiro quando você implanta. SQL é apenas um exemplo de back-end; você pode corrigir as informações em um arquivo em disco ou em qualquer outro número de métodos.
Ben Zeigler
1
O problema é fazê-los mudar em tempo real. Isso provavelmente envolve configurar algum tipo de gatilho no banco de dados e algo no jogo que possa lidar com esse gatilho e reler os valores de forma assíncrona enquanto o jogo continua em execução. Não é insuperável, mas também não é terrivelmente simples.
Kylotan 9/09/10
O código que gerencia esse gatilho do banco de dados seria o código que Richard está procurando e é a parte interessante / reutilizável. Mover as constantes para um banco de dados e não para o sistema de arquivos ou outra ferramenta não faz com que esse código apareça magicamente e provavelmente apenas o torna mais complicado.
-1

Ultimamente, tenho pensado nisso, e acho que seria um ótimo candidato para um aplicativo Android associado a uma pequena biblioteca no idioma que você quiser . O aplicativo seria um conjunto personalizável de botões, alternâncias, listas suspensas etc. (qualquer widget que você quiser) e enviaria as ações via WLAN (ou USB, se você quisesse complicar as coisas) para a biblioteca. A biblioteca geraria um segmento separado da jogabilidade e saberia quais controles no telefone Android correspondem a quais variáveis ​​no jogo (você as definiria no código de inicialização) e teriam uma conexão com o aplicativo Android.

Em seguida, mexer com o seu jogo é tão fácil quanto tocar nas coisas do seu telefone. Você pode até ter algumas caixas de texto no telefone que mostram valores de variáveis ​​em tempo real do jogo ou a biblioteca para a frentestdin ou stderrpara uma área de rolagem no telefone. As opções são ilimitadas!

A única preocupação real é com velocidade. Se a velocidade e o tempo de reação forem cruciais, basta conectar o telefone via USB e o adb (depurador android) suporta portas de encaminhamento via USB para o telefone. Mas, caso contrário, a WLAN teria apenas um atraso muito pequeno, o que eu acho que seria bastante aceitável para esse fim.

Eu não acho que algo como o acima foi escrito, mas eu tenho pensado fortemente em escrevê-lo.(Eu ainda não cheguei o suficiente no desenvolvimento de meus próprios jogos para precisar ainda)

Obviamente, aqueles que são usuários da Apple provavelmente podem fazer o mesmo com seus iDevices. Pessoalmente, acho que o desenvolvimento do iOS é uma ordem de magnitude mais difícil que o desenvolvimento do Android, e é claro que o aplicativo acima poderia ser facilmente publicado no mercado Android para facilitar a distribuição, enquanto a Apple provavelmente não permitiria uma ferramenta de desenvolvedor na loja de aplicativos, então eu sinta que a plataforma Android se adapta melhor a essa ferramenta.

Ricket
fonte
Isso seria legal em um ambiente de escritório. Ande até falar com um artista, e conectar-se e começar a mexer com jogo a correr do designer vizinha enquanto ele está tentando configurar alguns encontros ...
traço-tom-bang
1
Não entendo o benefício de tê-lo no seu telefone e não no computador com o qual você está realmente desenvolvendo.