<p>OpenApoc não gera a gama completa de mapas OG para cada missão</p>

Criado em 28 jun. 2019  ·  3Comentários  ·  Fonte: OpenApoc/OpenApoc

Conforme referido especificamente em relação aos Mapas de Favelas no # 396, parece que o problema com o OpenApoc não gerar a gama completa de mapas para cada tipo de edifício e área é generalizado

Há um número considerável de opções que o OpenApoc deve ser capaz de criar, mas não parece

Os vídeos do youtube de

É necessária mais investigação

Idealmente, devemos oferecer todas as combinações de mapa que OG fez, mas também permitir mais possibilidades e variedade de tamanhos de mapa

Parece que os mapas foram dimensionados de acordo com o tamanho do esquadrão em OG, mas com um elemento "aleatório" que significava que pequenos números de esquadrão raramente poderiam acabar em um mapa muito grande ....

!BUG! low priority Enhancement Feature Request Help Wanted

Comentários muito úteis

Mais atualização do istrebitel

Sim, acho que quase cheguei lá - mapas maiores para contagens maiores de inimigos.
A maneira como os agentes de desova funcionam é que os mapas são separados em LOS
blocos, que são usados ​​para pathfinding, cálculos LOS e para
desovando tudo ao mesmo tempo. Cada bloco em um bloco de mapa pertence a
um dos blocos LOS, que são todos em forma de caixa. Então há um global
definindo se você pode sair ou entrar no mapa em determinada borda, para
cada mapa. Com base nisso, o bloco LOS é elegível ou não para gerar
unidades de certa fidelidade. Existe um conjunto de valores definidos no bloco
que governam isso. Esses valores devem ser descritos em algum lugar no
fóruns ou nos arquivos txt anexados ao projeto. Se eu me lembrar
corretamente, existem valores de geração de blocos para unidades de jogadores, unidades alienígenas,
unidades hostis, unidades civis, talvez o pessoal x-com civil tenha um
separado, talvez não, que eu não me lembro, e eu me lembro
há um bloco especial para a rainha reprodutora.

Então, a maneira de escolher o tamanho do mapa com base no tamanho do esquadrão seria
estude os blocos de forma inteligente e veja qual bloco fornece quantos
oportunidades de desova e julgar com base nisso, ou talvez a baunilha
só tinha um hack codificado parecido com "se mais do que X, use o tamanho Y"

Também uma coisa a se observar, acho que não resolvi esse problema, a maneira como
alguns blocos são feitos, pontos de spawn de partes hostis podem estar em LOS de
uns aos outros, como armazéns MARSEC, por exemplo, muitas vezes você pode ver um
muitos pontos de spawn de segurança da Marsec a partir de pontos de entrada. O jogo
de alguma forma garante que nunca haja tal situação que você desova em
LOS de um inimigo. Você pode gerar back to back, ou seja, uma vez que suas unidades
movem-se um pouco, eles se veem, mas você não pode gerar com o inimigo
já em LOS. Logicamente, deve seguir-se que o jogo de alguma forma
exclui pontos de spawn ou blocos LOS com base em se este bloco é
observado por unidade já desovada. Então, logicamente, pode acontecer que um
mapa de campo aberto teórico é gerado, que no papel tem o suficiente
pontos de desova para desovar todas as unidades participantes, mas então não
tem blocos suficientes para gerar todas as unidades porque qualquer unidade gerada vê
todo o bloco. Eu acho que no vanilla não existia tal campo aberto
blocos, então isso nunca aconteceria, mas com a modificação, é mais provável
vontade e temos que estar prontos para isso.

Todos 3 comentários

Aqui está a resposta da Istrebitel sobre a geração de mapas

pelo que me lembro, há uma lista de blocos nos arquivos do jogo original, como, 9 ou 18 blocos diferentes para favelas, com cada bloco tendo um número mínimo e máximo de ocorrências, e o próprio tamanho do mapa sendo definido tendo um tamanho mínimo e máximo possível . Em seguida, o gerador escolhe e combina blocos aleatoriamente, o que resulta em um mapa aleatório.

Para forçar o OpenApoc a gerar mapas de tamanho grande ou minúsculo, você editaria esses números de "quantidade de blocos XYZ", de onde quer que fossem lidos, ou apenas mudaria rapidamente no código (ler um estático em vez de ler do arquivo, ou seja, sempre gerar um mapa 4x4x1 das favelas, em vez de gerar o que está definido para as favelas nos arquivos).
Uma explicação mais detalhada seria:

  • Cada mapa tem seu próprio tamanho de fragmento
  • Cada mapa é feito de blocos. Os blocos são modelos - diferentes tipos de setores de favela, por exemplo, ou diferentes tipos de blocos de base x-com. Eles são colocados juntos aleatoriamente para formar um mapa
  • Os blocos têm um tamanho variável em pedaços. Por exemplo, há um tileset, apartamento de luxo, eu acho, que tem um bloco 1x1x2 (um elevador), um bloco 1x2x1 (um corredor) e muitos blocos 1x1x1 (os próprios apartamentos). Os OVNIs são mapas 2x2x2 simples que apresentam apenas um bloco 2x2x2. Etc.
  • Cada bloco tem uma ocorrência mínima e máxima. Para o exemplo de appts de luxo, um bloco de elevador terá uma ocorrência mínima de 1, caso contrário, um mapa sem este bloco poderia ser gerado e os andares seriam
    inacessível sem destruição do terreno, pois não há elevador, apenas apartamentos e corredores de um nível
  • Cada mapa tem um tamanho mínimo e máximo em todos os eixos, em blocos (ou talvez apenas adicione ou subtraia aleatoriamente 1 para o tamanho de bloco típico? Não me lembro)
  • O algoritmo de geração de mapas é desconhecido, não foi submetido a engenharia reversa, então eu o construí do zero e parecia funcionar quase que totalmente
  • AFAIK, meu algoritmo primeiro faz uma lista de blocos gerenciáveis ​​e os coloca aleatoriamente
  • Em seguida, ele faz uma lista dos blocos restantes (ocorrência máxima restante> 0) e coloca um desses blocos aleatoriamente até que o mapa seja concluído
  • Se não conseguir localizar, ele se move para abrir espaço, como o tetris (mas geralmente isso nunca acontece)
  • Se ele não consegue fazer um mapa, ele tenta novamente com outros tamanhos
  • Em seguida, desiste e cospe o erro (geralmente isso nunca é alcançado com modelos de mapa vanilla)
  • Ao colocar todos os blocos, ele gera o próprio mapa
  • cria o objeto do mapa e preenche o mapa com objetos baseados nos blocos (paredes, decorações, pontos de geração de itens, etc.)

Mais atualização do istrebitel

Sim, acho que quase cheguei lá - mapas maiores para contagens maiores de inimigos.
A maneira como os agentes de desova funcionam é que os mapas são separados em LOS
blocos, que são usados ​​para pathfinding, cálculos LOS e para
desovando tudo ao mesmo tempo. Cada bloco em um bloco de mapa pertence a
um dos blocos LOS, que são todos em forma de caixa. Então há um global
definindo se você pode sair ou entrar no mapa em determinada borda, para
cada mapa. Com base nisso, o bloco LOS é elegível ou não para gerar
unidades de certa fidelidade. Existe um conjunto de valores definidos no bloco
que governam isso. Esses valores devem ser descritos em algum lugar no
fóruns ou nos arquivos txt anexados ao projeto. Se eu me lembrar
corretamente, existem valores de geração de blocos para unidades de jogadores, unidades alienígenas,
unidades hostis, unidades civis, talvez o pessoal x-com civil tenha um
separado, talvez não, que eu não me lembro, e eu me lembro
há um bloco especial para a rainha reprodutora.

Então, a maneira de escolher o tamanho do mapa com base no tamanho do esquadrão seria
estude os blocos de forma inteligente e veja qual bloco fornece quantos
oportunidades de desova e julgar com base nisso, ou talvez a baunilha
só tinha um hack codificado parecido com "se mais do que X, use o tamanho Y"

Também uma coisa a se observar, acho que não resolvi esse problema, a maneira como
alguns blocos são feitos, pontos de spawn de partes hostis podem estar em LOS de
uns aos outros, como armazéns MARSEC, por exemplo, muitas vezes você pode ver um
muitos pontos de spawn de segurança da Marsec a partir de pontos de entrada. O jogo
de alguma forma garante que nunca haja tal situação que você desova em
LOS de um inimigo. Você pode gerar back to back, ou seja, uma vez que suas unidades
movem-se um pouco, eles se veem, mas você não pode gerar com o inimigo
já em LOS. Logicamente, deve seguir-se que o jogo de alguma forma
exclui pontos de spawn ou blocos LOS com base em se este bloco é
observado por unidade já desovada. Então, logicamente, pode acontecer que um
mapa de campo aberto teórico é gerado, que no papel tem o suficiente
pontos de desova para desovar todas as unidades participantes, mas então não
tem blocos suficientes para gerar todas as unidades porque qualquer unidade gerada vê
todo o bloco. Eu acho que no vanilla não existia tal campo aberto
blocos, então isso nunca aconteceria, mas com a modificação, é mais provável
vontade e temos que estar prontos para isso.

Por favor, veja # 396 para outras coisas relacionadas a este problema

Esta página foi útil?
0 / 5 - 0 avaliações