Este es el código oficial de Quake 2 V3.21 con soporte de Vulkan y paquetes de misión incluidos. El objetivo de este proyecto es mantener la mayor compatibilidad posible con el juego original: solo experiencia pura, Vanilla Quake 2 tal como la conocimos en 1997. Sin embargo, hay algunas diferencias notables que hicieron el corte por varias razones:
vk_postprocess Consolehudscale )aimfix Console, retrocedido de Berserker@Quake2Se puede encontrar una descripción más detallada del proceso de pensamiento detrás de este proyecto en mi publicación de blog, donde explico el diseño general, cómo atacé algunos de los problemas y también cómo se desarrollaron las cosas después del lanzamiento inicial.
Para un desafío adicional, decidí basar VKQuke2 en el código de software de identificación original. Debido a esto, no hay dependencias en bibliotecas externos similares a SDL y todo el proyecto es en su mayoría autónomo. Esto también implica que algunos de los errores originales podrían estar presentes.
quake2.sln y elija la arquitectura de destino (x86/x64): debe construir sin ningún paso adicional Desafortunadamente, el código Linux para Quake 2 no ha envejecido bien y, por esa razón, solo el renderizador Vulkan está disponible para su uso en este momento. Pasos de compilación Suponga que Ubuntu es la distribución de objetivos:
sudo apt install make gcc g++ mesa-common-dev libglu1-mesa-dev libxxf86dga-dev libxxf86vm-dev libasound2-dev libx11-dev libxcb1-dev
.bashrc (reemplace la versión y ubicación SDK con las que corresponden a su 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); si no, puede obtenerlos con: sudo apt install mesa-vulkan-drivers
linux y el tipo make release o make debug dependiendo de la variante que desee construir: los binarios de salida se colocarán en los subdirectorios linux/releasex64 y linux/debugx64 respectivamente VULKAN_SDK a ubicaciones/rutas personalizadas; haga que apunte al SDK descargadomacos/vkQuake2.xcworkspace : debe construir sin pasos adicionales.bash_profile y agregue las siguientes entradas (reemplace la versión y ubicación SDK con las correspondientes a su 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 y ejecute make release-xcode o make debug-xcode dependiendo de la variante que desee construir: binarios de salida se colocarán en el subdirectorio macos/vkQuake2macos y ejecute make release o make debug : los binarios de salida se colocarán en macos/release y subdirectorios macos/debug respectivamente Este proyecto utiliza el cargador Vulkan incluido con el SDK, en lugar de vincular directamente contra MoltenVK.framework . Esto se hace para que las capas de validación estén disponibles para la depuración. Las construcciones se han probado usando MacOS 10.14.2.
pkg install vulkan-tools vulkan-validation-layers
vulkaninfo para verificar); si no es así, debe actualizarlos o encontrar un paquete que sea el más adecuado para la configuración de su hardwarelinux y el tipo make release o make debug dependiendo de la variante que desee construir: los binarios de salida se colocarán en los subdirectorios linux/releasex64 y linux/debugx64 respectivamente Gracias al esfuerzo de Igalia y su controlador V3DV, es posible compilar y ejecutar VKQUAKE2 en Raspberry Pi 4. Las mismas instrucciones de compilación que para Linux Aplicar.
Se requiere el Visual Studio C ++ Redistributable para ejecutar la aplicación: 32 bits o 64 bits dependiendo de la arquitectura elegida. Estos se proporcionan automáticamente si tiene Visual Studio instalado.
El paquete de lanzamiento viene solo con el contenido de demostración de Quake 2 para mostrar la funcionalidad de Vulkan. Para obtener una experiencia completa, copie minoristas .pak , modelo y archivos de video en el directorio baseq2 y ejecute el ejecutable. Para los paquetes de misión, Copie los datos necesarios para rogue ("Ground Zero"), xatrix ("The Reckoning"), zaero ("Quake II: Zaero") y smd ("Ligera destrucción mecánica") respectivamente. Luego puedes comenzar el juego con ./quake2 +set game rogue , ./quake2 +set game xatrix , ./quake2 +set game zaero o ./quake2 +set game smd .
Este proyecto usa Miniaudio para la reproducción de música si el CD de juego original no está disponible. Para el Quake 2 estándar, copie todas las pistas en el directorio de baseq2/music siguiendo el esquema de nombres trackXX.[ogg,flac,mp3,wav] (entonces Track02.ogg, Track03.ogg ... para archivos OGG, etc.). Para "Ground Zero" y "The Reckoning", copie las pistas a rogue/music and xatrix/music Directorios respectivamente. Para obtener un control adicional sobre la reproducción, use el comando de consola miniaudio [on,off,play [X],loop [X],stop,pause,resume,info] .
Los siguientes comandos están disponibles cuando se usa el renderizador Vulkan:
| Dominio | Acción |
|---|---|
vk_validation | Capas de validación de alternativa:0 - Desactivado (predeterminado en la versión)1 - Solo errores y advertencias2 - Validación completa (predeterminado en depuración)3 - habilita VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT |
vk_strings | Imprima información básica de Vulkan/GPU. |
vk_mem | Imprima la memoria dinámica de vértice/índice/uniforme/triángulo de la memoria del búfer del ventilador y las estadísticas de uso del descriptor. |
vk_device | Especifique el índice del dispositivo Vulkan preferido en sistemas con múltiples GPU:-1 - Prefiere First Discrete_GPU (predeterminado)0..n - Use el dispositivo #N (el comando vk_strings devuelve la lista completa de dispositivos) |
vk_msaa | Toggle MSAA (multisampleo):0 - APAGADO (predeterminado)1 - MSAAX22 - MSAAX43 - MSAAX84 - MSAAX16 |
vk_sampleshading | Sombreado de muestra (supersumpling) para MSAA. (predeterminado: 0 ) |
vk_mode | Modo de video Vulkan (predeterminado: 11 ). Configuración de esto en -1 utiliza una resolución de pantalla personalizada definida por r_customwidth (predeterminado: 1024 ) y r_customheight (predeterminado: 768 ) variables de la consola. |
vk_flashblend | Alterne la mezcla de luces en el medio ambiente. (predeterminado: 0 ) |
vk_polyblend | Mezcle los efectos de pantalla completa: sangre, potencia, etc. (predeterminado: 1 ) |
vk_skymip | Alterne el uso de la información de MIPMAP para los gráficos Sky. (predeterminado: 0 ) |
vk_finish | Inserta una llamada vkDeviceWaitIdle() en el inicio de renderizado del cuadro (predeterminado: 0 ).¡No uses esto, está ahí solo por tener un equivalente gl_finish ! |
vk_point_particles | Alternar entre usar triángulos Point_List y texturizados para la representación de partículas. (predeterminado: 1 ) |
vk_particle_size | Tamaño de partícula renderizado. (predeterminado: 40 ) |
vk_particle_att_a | Intensidad de la partícula A atributo. (predeterminado: 0.01 ) |
vk_particle_att_b | Intensidad del atributo de partícula B. (predeterminado: 0 ) |
vk_particle_att_c | Intensidad del atributo de partícula C. (predeterminado: 0.01 ) |
vk_particle_min_size | El tamaño mínimo de una partícula renderizada. (predeterminado: 2 ) |
vk_particle_max_size | El tamaño máximo de una partícula renderizada. (predeterminado: 40 ) |
vk_lockpvs | Bloqueo de la tabla PVS actual. (predeterminado: 0 ) |
vk_clear | Borre el búfer de color cada cuadro. (predeterminado: 0 ) |
vk_modulate | Modificador de brillo de textura. (predeterminado: 1 ) |
vk_shadows | Dibuja sombras de entidad experimentales. (predeterminado: 0 ) |
vk_picmip | Factor encogido para las texturas. (predeterminado: 0 ) |
vk_round_down | Alterne el redondeo de tamaños de textura. (predeterminado: 1 ) |
vk_log | Registro de datos de validación de cuadro a archivo. (predeterminado: 0 ) |
vk_dynamic | Use iluminación dinámica. (predeterminado: 1 ) |
vk_showtris | Mostrar triángulos de malla. (predeterminado: 0 ) |
vk_lightmap | Mostrar mapas de luz. (predeterminado: 0 ) |
vk_aniso | Alternar filtrado anisotrópico. (predeterminado: 1 ) |
vk_vsync | Alternar sincronización vertical. (predeterminado: 0 ) |
vk_postprocess | Alternar la corrección de color/gamma adicional. (predeterminado: 1 ) |
vk_underwater | Alternar la visión de la visión del jugador cuando está bajo el agua. (predeterminado: 1 ) |
vk_restart | Recree todo el subsistema Vulkan. |
vk_mip_nearfilter | Use el filtrado de vecino más cercano para mipmaps. (predeterminado: 0 ) |
vk_texturemode | Cambiar el modo de filtrado de textura actual:VK_NEAREST - Interpolación del vecino más cercano, sin mipmapsVK_LINEAR - Interpolación lineal, sin mipmapsVK_MIPMAP_NEAREST - Interpolación del vecino más cercano con mipmapsVK_MIPMAP_LINEAR - Interpolación lineal con mipmaps (predeterminado) |
vk_lmaptexturemode | Igual que vk_texturemode pero aplicado a las texturas de LightMap. |
vk_fullscreen_exclusive | Solo Windows: alternar el uso del modo exclusivo de pantalla completa (predeterminado: 1 ). Tenga en cuenta que cuando esta opción está habilitada, no hay garantía de que se pueda adquirir pantalla completa exclusiva en su sistema. |
vk_sampleshading está habilitado debido a un posible error en el controlador de metal que causa un punto muerto durante la compilación de sombreadores