FTEQW engine fork used by the Android port of Nazi Zombies: Portable
  • C 86.7%
  • QuakeC 9.5%
  • C++ 1.6%
  • GLSL 0.5%
  • Makefile 0.5%
  • Other 1.1%
Find a file
zqpvr01 8f24466f73 Android: Trim the glue's comments to a line each
The reasoning behind each of these is in the commit that made the change; the code only needs what it does.
2026-10-31 23:24:03 -03:00
engine Android: Trim the glue's comments to a line each 2026-10-31 23:24:03 -03:00
fteqtv megacommit. 2024-07-14 19:58:26 +01:00
games Added sys_openfile console command(and menu option) to web and flatpak(via cmake+dbus) builds, to 'install' packages on sandboxed systems a bit more easily. 2024-07-14 19:58:24 +01:00
iqm Added sys_openfile console command(and menu option) to web and flatpak(via cmake+dbus) builds, to 'install' packages on sandboxed systems a bit more easily. 2024-07-14 19:58:24 +01:00
plugins Replace conchars with charset 2024-09-11 20:07:31 -07:00
q3asm2 Redefine snprintf for Windows. 2008-06-27 19:16:15 +00:00
quakec temp 2024-07-14 19:58:25 +01:00
specs Added sys_openfile console command(and menu option) to web and flatpak(via cmake+dbus) builds, to 'install' packages on sandboxed systems a bit more easily. 2024-07-14 19:58:24 +01:00
tools Add pipeline for no-SDL2 linux builds 2025-02-23 02:46:46 +00:00
.gitignore temp 2024-07-14 19:58:25 +01:00
build_qc.sh Fix some issues from last commit. 2022-08-19 13:29:27 +00:00
build_setup.sh Use a more recent ODE revision, to avoid crosscompile errors (and just to keep things updated). 2024-07-21 03:54:39 +01:00
build_wip.sh remove NPAPI stuff from build 2023-07-09 20:25:38 +02:00
CMakeLists.txt Android: Play Ogg Vorbis, which is all of NZ:P's music 2026-10-30 13:39:08 -03:00
dounifdef.sh Lazy GLSL loading, for faster load times. 2018-11-27 16:48:19 +00:00
flatpak.json Try to fix up the flatpak build's handling of fmf files. 2023-08-12 14:04:01 +01:00
fte.m4 Fix some updater issues. 2022-01-19 08:27:42 +00:00
ftechrootbuild.sh Add mods menu and all-cvars menu to menusys. 2020-04-19 03:56:01 +00:00
fteqw.desktop Messing around with flatpak. 2023-04-17 03:58:21 +01:00
fteqw_readme.txt Added fteqw_readme.txt, a README file for binary releases. 2020-10-13 13:00:16 +00:00
ftetools_readme.txt openxr plugin: tweaked - inputs should be working properly now, and are visible to csqc. subject to further breaking changes, however. 2021-04-14 05:21:04 +00:00
imgtool.c Replace conchars with charset 2024-09-11 20:07:31 -07:00
LICENSE NZ:P Modification Check-In 2024-09-08 15:37:35 +01:00
README.md README: Link to git.zqpvr.net instead of GitHub 2026-10-31 17:21:36 -03:00

Nazi Zombies: Portable FTEQW for Android

The engine behind the Android port, and the changes that got it onto a phone.

Upstream is nzp-team/fteqw, NZ:P's fork of Spike's FTEQW. FTEQW has had an Android backend for years, but nothing was driving it: no modern build, no touch input, no way to reach the servers.

This branch is what closed that gap. It is a fork rather than a patch file because engine work needs history. A ten-thousand-line diff regenerated after every edit has no blame, nothing to bisect, and no way to offer a single fix upstream.

Used by nzportable-android, which is where the game code, the data and the APK live.

What this fork changes

Area Change
Build CMake wiring for an arm64 build driven by Gradle and a current NDK, instead of the dead make droid path
Vulkan Ask for an IDENTITY pre-transform where the surface allows it
Audio Output through the low-latency AudioTrack path
Input Touchscreen, controller and system keys plumbed through the Android glue
Images stb_image vendored, so the PNG menu artwork decodes
Network ICE always takes the DTLS server role
Network GnuTLS wired in for the TLS and DTLS the ICE broker requires

Android panels report a rotated currentTransform, and using it as the pre-transform without rotating the rendering to match leaves the image sideways. Asking for IDENTITY makes the compositor present it upright instead. The SUBOPTIMAL result that follows is expected rather than a problem, so it counts as success. Treating it as a failure rebuilt the swapchain every single frame.

The DTLS change is what lets an Android client join a Windows host. FTE's SChannel backend cannot act as a DTLS server, and the roles are negotiated separately from who is hosting the game, so the Android side always offers a=setup:passive and forces the peer to be the client.

Touch input also brought two fixes that are not Android-specific. The dispatcher had no case for ACTION_CANCEL, so pointers taken away by a system gesture were never released and stayed held down. Separately, two use-after-frees were found by running under ARM memory tagging, one in the Vulkan sampler teardown and one in the download handler, both of which had gone unnoticed because a freed block usually still holds the value being read.

Building

Not built on its own. It is compiled as part of the Android app, which drives CMake and the NDK through Gradle. See nzportable-android.

The build config is engine/common/config_nzportable.h, which is where RTLIGHTS is switched on.

Upstream's other platforms are untouched and should still build the way they always did, though nothing here tests them.

Licence

GPL-2.0, the same as FTEQW, see LICENSE. engine/libs/stb_image.h and stb_image_write.h are public domain.