Este é o Código Official do Quake 2 v3.21 com suporte de missão Vulkan e pacotes de missão incluídos. O objetivo deste projeto é manter o máximo possível de compatibilidade com o jogo original - apenas a experiência pura de baunilha Quake 2 como a conhecíamos em 1997. Existem, no entanto, algumas diferenças notáveis que fizeram o corte por vários motivos:
vk_postprocess consolehudscale Console)aimfix Console, Backported de Berserker@Quake2Uma descrição mais detalhada do processo de pensamento por trás deste projeto pode ser encontrada na minha postagem no blog, onde explico o design geral, como atacei alguns dos problemas e também como as coisas se desenvolveram após o lançamento inicial.
Para um desafio extra, decidi basear o vkQuake2 no código de software de identificação original. Por esse motivo, não há dependências de bibliotecas externas do tipo SDL e todo o projeto é principalmente independente. Isso também implica que alguns dos bugs originais podem estar presentes.
quake2.sln e escolha a arquitetura de destino (x86/x64) - ele deve construir sem nenhuma etapa adicional Infelizmente, o código Linux para o Quake 2 não envelheceu bem e, por esse motivo, apenas o renderizador Vulkan está disponível para uso no momento. As etapas de construção assumem que o Ubuntu é a distribuição de destino:
sudo apt install make gcc g++ mesa-common-dev libglu1-mesa-dev libxxf86dga-dev libxxf86vm-dev libasound2-dev libx11-dev libxcb1-dev
.bashrc (substitua a versão SDK e a localização pelos correspondentes ao seu sistema): export VULKAN_SDK=/home/user/VulkanSDK/1.3.224.1/x86_64
export PATH=$VULKAN_SDK/bin:$PATH
export LD_LIBRARY_PATH=$VULKAN_SDK/lib:$LD_LIBRARY_PATH
export VK_LAYER_PATH=$VULKAN_SDK/etc/explicit_layer.d
vulkaninfo para verificar) - se não, você pode obtê -los com: sudo apt install mesa-vulkan-drivers
linux e o Type make release ou make debug dependendo da variante que você deseja construir - os binários de saída serão colocados nos subdiretos linux/releasex64 e linux/debugx64 , respectivamente VULKAN_SDK a locais/caminhos personalizados - faça -o apontar para o SDK baixadomacos/vkQuake2.xcworkspace - ele deve construir sem medidas adicionais.bash_profile e adicionar as seguintes entradas (substitua a versão e a localização do SDK por aquelas correspondentes ao seu sistema): export VULKAN_SDK=/home/user/VulkanSDK/1.3.224.1
export VK_ICD_FILENAMES=$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json
export VK_LAYER_PATH=$VULKAN_SDK/share/vulkan/explicit_layer.d
macos e execute make release-xcode ou make debug-xcode dependendo da variante que você deseja construir-os binários de saída serão colocados no subdiretório macos/vkQuake2macos e execute make release ou make debug - os binários de saída serão colocados nos subdiretos macos/release e macos/debug respectivamente Este projeto usa o carregador Vulkan incluído com o SDK, em vez de vincular diretamente a MoltenVK.framework . Isso é feito para que as camadas de validação estejam disponíveis para depuração. As construções foram testadas usando o MacOS 10.14.2.
pkg install vulkan-tools vulkan-validation-layers
vulkaninfo para verificar) - se não, você deve atualizá -los ou encontrar um pacote mais adequado para sua configuração de hardwarelinux e o Type make release ou make debug dependendo da variante que você deseja construir - os binários de saída serão colocados nos subdiretos linux/releasex64 e linux/debugx64 , respectivamente Graças ao esforço de Igalia e seu driver V3DV, é possível compilar e executar o VKQUAKE2 no Raspberry Pi 4. As mesmas instruções de construção que o Linux se aplicam.
O Redistribuível do Visual Studio C ++ é necessário para executar o aplicativo: 32 bits ou 64 bits, dependendo da arquitetura escolhida. Estes são fornecidos automaticamente se você tiver o Visual Studio instalado.
O pacote de liberação vem apenas com o conteúdo da demonstração do Quake 2 para mostrar a funcionalidade Vulkan. Para uma experiência completa, copie os arquivos de varejo .pak , modelo e vídeo no diretório baseq2 e execute o executável. Para pacotes de missão, copie os dados necessários para rogue ("Terreno Zero"), xatrix ("The Reckoning"), zaero ("Quake II: Zaero") e smd ("leve destruição mecânica"), respectivamente. Você pode iniciar o jogo com ./quake2 +set game rogue , ./quake2 +set game xatrix , ./quake2 +set game zaero ou ./quake2 +set game smd .
Este projeto usa miniaudio para reprodução de música se o CD original do jogo não estiver disponível. Para o Standard Quake 2, copie todas as faixas no diretório baseq2/music após o esquema de nomenclatura do trackXX.[ogg,flac,mp3,wav] Para "Ground Zero" e "The Reckoning", copie as faixas para os diretórios rogue/music e xatrix/music respectivamente. Para um controle adicional sobre a reprodução, use o comando miniaudio [on,off,play [X],loop [X],stop,pause,resume,info] .
Os seguintes comandos estão disponíveis ao usar o renderizador Vulkan:
| Comando | Ação |
|---|---|
vk_validation | Alternar camadas de validação:0 - desativado (padrão na versão)1 - apenas erros e avisos2 - Validação completa (padrão na depuração)3 - Ativa VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT |
vk_strings | Imprima algumas informações básicas de vulkan/gpu. |
vk_mem | Imprimir vértice dinâmico/índice/uniforme/triângulo Memória do buffer e descritores Definir estatísticas de uso. |
vk_device | Especifique o índice do dispositivo vulkan preferido em sistemas com várias GPUs:-1 - prefira primeiro discrete_gpu (padrão)0..n - Use o dispositivo #N (Lista completa de dispositivos é retornada pelo comando vk_strings ) |
vk_msaa | Alternar o MSAA (Multisampling):0 - OFF (padrão)1 - MSAAX22 - MSAAX43 - MSAAX84 - MSAAX16 |
vk_sampleshading | Alternar o sombreamento da amostra (superesamplamento) para MSAA. (Padrão: 0 ) |
vk_mode | Modo de vídeo Vulkan (padrão: 11 ). Definir isso como -1 usa uma resolução de tela personalizada definida por r_customwidth (padrão: 1024 ) e r_customheight (padrão: 768 ) variáveis de console. |
vk_flashblend | Alternar a mistura das luzes para o meio ambiente. (Padrão: 0 ) |
vk_polyblend | Misture os efeitos da tela cheia: sangue, powerups etc. (Padrão: 1 ) |
vk_skymip | Alternar o uso de informações do MIPMAP para os gráficos do céu. (Padrão: 0 ) |
vk_finish | Insira um vkDeviceWaitIdle() Call on Frame Render Start (Padrão: 0 ).Não use isso, está lá apenas para ter um equivalente gl_finish ! |
vk_point_particles | Alterne entre o uso de triângulos Point_List e texturizados para renderização de partículas. (Padrão: 1 ) |
vk_particle_size | Tamanho da partícula renderizado. (Padrão: 40 ) |
vk_particle_att_a | Intensidade da partícula um atributo. (Padrão: 0.01 ) |
vk_particle_att_b | Intensidade do atributo da partícula B. (Padrão: 0 ) |
vk_particle_att_c | Intensidade do atributo C da partícula. (Padrão: 0.01 ) |
vk_particle_min_size | O tamanho mínimo de uma partícula renderizada. (Padrão: 2 ) |
vk_particle_max_size | O tamanho máximo de uma partícula renderizada. (Padrão: 40 ) |
vk_lockpvs | Bloquear a tabela PVS atual. (Padrão: 0 ) |
vk_clear | Limpe o buffer de cores cada quadro. (Padrão: 0 ) |
vk_modulate | Modificador de brilho de textura. (Padrão: 1 ) |
vk_shadows | Desenhe sombras experimentais da entidade. (Padrão: 0 ) |
vk_picmip | Fator de encolhimento para as texturas. (Padrão: 0 ) |
vk_round_down | Alternar o arredondamento dos tamanhos de textura. (Padrão: 1 ) |
vk_log | Dados de validação do quadro de log para arquivo. (Padrão: 0 ) |
vk_dynamic | Use iluminação dinâmica. (Padrão: 1 ) |
vk_showtris | Exibir triângulos de malha. (Padrão: 0 ) |
vk_lightmap | Exibir lâmpadas. (Padrão: 0 ) |
vk_aniso | Alterne filtragem anisotrópica. (Padrão: 1 ) |
vk_vsync | Alternar a sincronização vertical. (Padrão: 0 ) |
vk_postprocess | Alterne a correção adicional de cor/gama. (Padrão: 1 ) |
vk_underwater | Alternar a visão da visão do jogador quando subaquático. (Padrão: 1 ) |
vk_restart | Recrie o subsistema vulkan inteiro. |
vk_mip_nearfilter | Use filtragem mais próxima do vizinho para MIPMAPS. (Padrão: 0 ) |
vk_texturemode | Altere o modo de filtragem de textura atual:VK_NEAREST - interpolação mais próxima do vizinho, sem mipmapsVK_LINEAR - interpolação linear, sem mipmapsVK_MIPMAP_NEAREST - Interpolação mais próxima do vizinho com MIPMAPSVK_MIPMAP_LINEAR - Interpolação linear com MIPMAPs (padrão) |
vk_lmaptexturemode | O mesmo que vk_texturemode , mas aplicado a texturas de mapa de luz. |
vk_fullscreen_exclusive | Somente Windows: Alterar o uso do modo de tela cheia exclusiva (padrão: 1 ). Observe que, quando esta opção estiver ativada, não há garantia de que a tela cheia exclusiva possa ser adquirida no seu sistema. |
vk_sampleshading estiver ativado devido a um bug potencial no driver de metal, causando um impasse durante a compilação de shader