Algumas dicas que ajudariam a desenvolver mods S:AD mais complexos.
Usar controle de versão
O sistema de controle de versão permite rastrear todas as alterações já feitas em seu trabalho, permite reverter para versões estáveis anteriores em caso de problemas e, o mais importante, permite que vários desenvolvedores trabalhem no mesmo projeto com facilidade.
Uma solução de controle de versão muito popular é o GitHub. Ele fornece hospedagem para projetos online, permitindo assim que vários modders desenvolvam um único mod complexo.
Outra solução é o TortoiseSVN, um wrapper de subversão GUI, que pode ser usado para hospedar o projeto em seu próprio computador ou servidor. É muito fácil fazer isso, há documentação disponível online.
Ambas as soluções propostas são obviamente gratuitas (ou têm uma versão gratuita).
Depois de ter o controle de versão funcionando, você pode acompanhar todas as alterações feitas no seu mod. Por exemplo, pouco antes de carregar a nova versão do seu mod, depois de salvar o mod, todas as alterações podem ser verificadas. Este é um passo obrigatório, pois muitas vezes há coisas confusas no último momento. O próprio editor de mod é relatado como tendo bugs.
Após o upload para o Steam, as alterações locais também devem ser “confirmadas” no repositório de controle de versão.
As pastas mod que precisam estar sob controle de versão estão localizadas em:
%appdata%\Stranded - Alien Dawn\Mods
Monitorando erros em tempo de execução
O log de saída do jogo, onde podem ser encontrados os eventuais erros, é salvo em um arquivo que pode ser encontrado em:
%appdata%\Stranded - Alien Dawn\logs
O problema é que o jogo precisa terminar para liberar o log do jogo gerado. Isso não é prático para depuração, pois é difícil relacionar os erros no log com eventos específicos do jogo. Existe uma maneira simples de monitorar o log do jogo em tempo real fora do mapa de modding. Tudo que você precisa é o Visual Studio IDE. Quando anexado ao processo do jogo a partir do menu Debug – Attach To Process (ou atalho Ctrl-Alt-P), todos os logs do jogo, incluindo os erros, serão visíveis em tempo real na janela “Output”. O processo do jogo a ser pesquisado ao anexar deve ser chamado de “StrandedSteam.exe”. Para aqueles que não estão familiarizados com o Visual Studio, há uma versão gratuita chamada “Community” que pode ser baixada do site do visualstudio.
Código do modo de gravação
O mecanismo de jogo S:AD usa Lua como uma linguagem de lógica de jogo, embora não seja a versão vanilla, mas uma versão modificada – há muitas funcionalidades adicionais, alteradas ou removidas nas bibliotecas padrão. O código modding “item” também está em Lua, embora a versão mod não use o original, mas um ambiente limitado, onde certas funções estão na lista negra. A linguagem Lua em si é muito fácil, qualquer pessoa familiarizada com JavaScript ou Python pode usá-la sem problema. Existem muitos IDE que podem ser usados para editar arquivos Lua. Os mais populares são o Visual Studio Code e o Sublime, ambos gratuitos. Observe que o Steam pode considerar o jogo ainda em execução após fechá-lo, se o Lua IDE tiver sido iniciado a partir do ambiente de modding. Se for esse o caso, basta fechar o IDE.
Use o console do jogo
Por exemplo, quando um objeto é selecionado, uma var global chamada SelectedObj tem o objeto selecionado como valor. Digitar isso no console imprimiria o conteúdo do objeto, que poderia ser um texto muito grande. Portanto, é bom procurar informações específicas dentro do objeto. Se um ponto (.) for digitado após SelectedObj (como é assim que os membros são acessados em Lua), pressionar a tecla TAB mostrará o conteúdo do objeto em uma lista que pode ser selecionada.
Outra variável global importante que pode ajudar na depuração é o UIPlayer. Este é um namespace de muitos valores importantes do jogo. Por exemplo, UIPlayer.labels.Buildings contém uma lista com todos os edifícios colocados, enquanto UIPlayer.labels.Survivors é uma lista com todos os sobreviventes gerados. No entanto, digitá-los no console registraria uma quantidade muito grande de texto, o que não é muito prático. Existe uma função auxiliar chamada ValueToStr, que pode ser usada para mostrar mais texto legível por humanos. Exemplos: ValueToStr(SelectedObj), ValueToStr(UIPlayer.labels).
O console também oferece suporte ao preenchimento automático por meio da tecla TAB. Dessa forma, não há necessidade de saber o nome exato de uma determinada variável global ou membro de um objeto.
Para limpar a tela do texto impresso, use a tecla F9.
Trabalhando com dados do jogo
De qualquer forma, é útil ter uma maneira de inspecionar os dados do jogo de alguma forma. Uma maneira é usar o console do jogo para verificar o conteúdo da variável global Presets. Ele contém quase todos os dados do jogo, agrupados por classe predefinida. Conforme descrito na seção anterior, digitando ponto (.) após cada nome no console, uma lista com o conteúdo do contexto atual seria exibida. Fazendo isso, nível por nível, todos os conteúdos poderiam ser analisados.
Mas usar o console tem suas limitações, pois o conteúdo dos dados é muito complexo para ser inspecionado como um grande pedaço de texto. É necessário entender quais classes predefinidas estão registradas no jogo, a fim de invocar uma ferramenta explícita para cada uma delas. Há um comando do console que aceita a classe predefinida que abre uma interface de dados da interface do usuário:
OpenPresetEditor("<PresetClass>")
onde deve ser substituído pela classe específica a ser inspecionada. Por exemplo, digitar no console OpenPresetEditor(“FXPreset”) abriria o editor FX, que contém um dos itens de dados mais misteriosos – o visual e os efeitos sonoros.
By injto4ka