News | Forum | People | FAQ | Links | Search | Register | Log in
QuakeDroid - Quake For Android
QuakeDroid is Android Quake that should run on any Android phone made in the last 5-6 years, but has only been tested on 2 phones (one 32-bit, one 64-bit).

Designed to have controls similar to popular mobile games (/cough Minecraft). Went deep on the documentation to try to empower the user.

Does not require Quake to install, it downloads Quake shareware on startup.

* How to put your TrenchBroom/J.A.C.K map on your phone
* Where is your Quake folder?
* Difference between shareware vs. registered Quake
* Put registered Quake pak1.pak from Steam/GOG on your phone
* How to set a startup command line.

The menu has 2 methods of navigation, you can touch items like "Single Player" or manually slide the volume slider bar or use the menu nav buttons.

* Tap-fire (double tap on an Ogre to shoot it)
* Drag-look (like Minecraft)
First | Previous | Next | Last
Sorry, I'm A F K Until Friday Afternoon 
Away from Kindle

Have fun with other issues meanwhile 
Lol, Guess That Meams I'm AFK Too Until Saturday 
Feature Request 
When touching the hud bar at the bottom of the screen, still let the camera move with continuously held thumb swipe.

Have you been able to reproduce the camera reversing effect? 
@qmaster - I know what you mean about the "camera reversing", I haven't developed a plan to properly "clip the drag look" if someone attempts to look beyond where Quake will let them. And other one will be a yes. 
Hey, Baker! 
Good News! It's only a drawing bug! When I turned up the volume, I heard the familiar sounds of Romero blowing up the Zombies... 
Great! That's why I mentioned if it was playing sound.

The reason it is rendering white is your Kindle doesn't have an OpenGL extension allowing non-power of 2 textures.

When I had checked the source, I found I had commented out a couple of lines of code I wrote in the video section upsizing to a power of a 2 size. 
Doesn't Work On My Phone 
I'm getting the error: 'Not enough memory free; check disk space' but I have almost 2GB of free device space on the phone. It's a Galaxy Note 3.

Anyone have any ideas? I'm mot very good at reading code but that error message comes from here:

Could this be related to RAM instead? The phone only has 1GB of memory. 
It's RAM. It is also asking for more RAM than it needs. I'll reduce the RAM it asks for in the next release which I am hoping for Sunday.

If you don't want to wait, you could alter the command line how to set command line just putting "-heapsize 256000" without the quotes in the quake_command_line.txt or if that still didn't work, putting "-heapsize 192000" 
I've tested on some retired phones. What info would be most helpful? Model numbers? Frame rates? Happy to take some time and collate data for you. They are mostly older Motorola phones but all shapes and sizes.

I horde all our older phones for some reason. 
Ah! Thanks dude! Had a feeling a simple command line would fix it but didn't know how to do access it. Heapsize 256000 worked like a charm.

Btw, are the controls setup set in stone? Reason why I ask is coz I played almost the entire Quake II campaign on my Android phone ( ) and those controls felt much better and extremely smooth compared to the ones you chose. I'm mostly referring to the movement + mouselook. Also, they were customizeable. Maybe something to look into!

Great port btw. Thanks for making it! 
I'll work on the controls until everyone here is satisfied. I'll check out the QII4A link you provided.

I knew going into this that the controls would be the #1 that needed refinement. The touch-driven menu that allows things like touch slider dragging was the hardest part.

Controls will take a few revisions to satisfy everyone.

@dumptruck - I'm satisfied with the feedback we have on existing devices, we have quite a range of feedback on devices. 
I Had Q4A On My Old Motorola Moto G 
But it stopped working when I updated from Android 4 to 5. likely it counts for Q2A and Q3A too. All made by the same guy. 
I see the weird lines in the water surface only when I am actually inside the water.

And using a bluetooth keyboard, lookspring and "centerview" (bound to a key) just stop working sometimes, then they start working again, then they stop working again.... I can't really tell under what circumstances they stop working or start working again. 
As you are a power user, you don't have +mlook/-mlook anywhere in your config or binds do you?

Without checking, I do not believe "centerview" works with mouselooking on.

Since mouselooking doesn't apply to QuakeDroid, I haven't considered the possible interaction between the controls and +mlook/-mlook.

If this doesn't have anything to do your setup, let me know ... I'm thinking aloud a bit.
On the other hand, lookspring was extensively tested. Should work anytime you start moving. Again, interaction with +mlook/-mlook has not been considered -- if that applies. 
@gunter - Force Centerview 
You might try a bind like "-mlook; force_centerview; +mlook" and see what happens.

I give centerview some thought. On a desktop, there is no way to improve centerview but on mobile there actually is because on mobile you know if a look operation is in progress because it requires a specific action to occur (which is a drag has started obviously). 
I haven't touched mlook. And I can't replicate the problem again, after Quakedroid crashed and I restarted it. If it happens again, I'll try the force_centerview 
Upcoming ... 
Delayed some due to adding game controller support, which proved to be a few steps harder than expected.

(Required SDL2 upgrade which happened to require an entirely different Android build system than the version I had been using (no fault of SDL2, Google changed the Android SDK/NDK) then discovering desktop SDL2 and Android SDL2 aren't really the same when it comes to game controllers -- so a series of experiments was required discovering differences until it worked.) 
Any Update? 
On when dual thumbstick style touch controls will be added? 
I'd like to try to have controls "right" by the end of this week. 
QuakeDroid With Gamepad Support 
Download: QuakeDroid w/Controller Support source: here

* Gamepad support (oGkspAz, Gunter asked for)
* Rare blue screen tint issue RGB565 (virto)
* RAM issue (brassbite)

Features the controller support implemented identically to Quakespasm, adapting the battle-tested controller code written by ericw (who supplied a reference on how to it efficiently).

This beta is to get the gamepad support out the door while a much more comprehensive update is in the making, hopefully out late this week.

Button names LTHUMB, RTHUMB, LSHOULDER, RSHOULDER, ABUTTON, BBUTTON, XBUTTON, YBUTTON, LTRIGGER, RTRIGGER. The DPad acts as arrow keys (and also supports diagonal movement), left stick moves, right stick looks (swappable). 
Glad to hear you got it working! I can test an Xbox 360 controller on my tablet later today. 
I would test this... but... my little Dell Venue 7 tablet has decided that it is dead now. :u

I shall have to acquire another Android device.

Also, you need to add that gamepad support into Mark V as well. 
@ericw, @gunter 
@ericw -- I ended up writing a short story about it on the SDL2 forums explaining how it behaves differently on Android vs. desktop, perhaps for the benefit of someone else using SDL2 on Android.

I'm approaching QuakeDroid from a "perfect prototype" mentality from a user perspective. Or at least trying to. I'm only human.

Butane provided a link to q2 android (qii4a) and I saw that the DPad worked with my controller so I wouldn't accept the DPad not working in QuakeDroid -- a small addition beyond what your existing code did.

@gunter - aw that sucks. Sorry to hear that :( 
Controller Would Make All The Difference. 
Hi guys,

I like this project a lot, and would love to get all my fav quake mods up and running on my android. But its damn near impossible to play without a controller.
I have a MOGA hero controller, is there any way this can qork with quakedroid? What to I have to do so set it up? 
Make sure you installed the special build a couple posts up.
Pair your bluetooth input device.
Go into Quakedroid
At this point I was able to use the DPad and LStick (A- and B-Buttons) for Menu Navigation.
Ingame the walk and look stick were working.
Then I went to options and to controller options and rebound all the necessary buttons.
My gamepad: Gamesir G3s, can recommend, really noice 
My setup:
R2: shoot
L2: jump
L1: last weapon
R1: next weapon
Had a blast playing, much more fun than touch. Don't get me wrong because I got along quite well with the touch controlls.

Sadly the Kindle still shows a white screen whilst playing the demo with sound. I'm looking forwards to the other graphics of Mark V coming to Quakedroid soon, or what I think I saw in the screenshot. :D 
"@gunter - aw that sucks. Sorry to hear that :( "

Heh, thanks.
Ya know, it really does suck! Hah, it's way more stressful than it should be when one of our little tech devices kills over.... But it served me well, daily, for the last 4 years. I think something in the hardware gave out, because factory resets do nothing.

In any case, I've found a nice little 7" RCA Voyager Pro Android 6 tablet on for just under $50. Gets high reviews. And comes with a nice little keyboard case and free 2-day shipping, so I should be back up and testing Quakedroid in a couple days. 
@apm - Thanks! Always nice to have more interested parties. Like brassbite said, should work.

@brassbite - I only added controller support in that beta but I think I'll do another incremental and throw that in plus, if I am fortunate, a 2nd with what you correctly saw in a screenshot :D

@gunter - Awesome! That's funny that it comes with a keyboard too for under $50. 
I didn't have any luck with my Xbox 360 wired controller. (no buttons/axes had any effect). Here is the qconsole.log:

It doesn't look like it was even detected as a joystick? 
Hmmm. Does it show as a bluetooth device in Settings->Bluetooth?

I suspect it is not showing as a joystick to SDL, but in the next incremental I'll add a warning for devices that cannot be opened (I can't entirely rule this out, I'll have it print unopenable devices in the next incremental).

I posted a code block @ insideqc code that shows what it does when considering a device. Note it always prints something and didn't for your XBox 360 controller.

I have the number of buttons check to exclude the accelerometer.

By the way, should you ever be interested in compiling, it is rather straightforward and I'd be happy to assist. 
GL QuakeDroid Beta - Fog, Alpha Textures, Mirrors, ... 
Download: GL QuakeDroid
Screenshots: Rubicon 2 Honey QMB Option

Suggested: if QuakeDroid has been loaded before ...

1) Settings->Video Options->Brightness: Texture Gamma
2) Settings->Preferences->Autoscale: Auto Large
3) (Option) If you want QMB particles Preferences->Effects: QMB

The above are new default settings but would be off in an existing config.cfg. 
Re: Xbox Controller 
It's a wired USB controller connected to a "USB->USB C on the go" adapter. I actually don't have any other games to test it with so I need to do some more testing on my end, and I'll try compiling myself this week and see what's happening. I'm worried that the SDL "Joystick" api won't be compatible across different joysticks. As I understand it, they added the "Game Controller" api's to SDL2 as a layer on top of the Joystick API to give a consistent view of joysticks, so when the API says "left stick" or "A button" etc., it's actually that stick or button on the joystick.

Whoah - GL support! Nice! 
Runs well for me, but can the GL error pop-ups during startup be suppressed please? At least for second and subsequent runs? Having to click through 4 or 5 of them every time gets old real fast. 
Whoa! I get zero GL errors during run, but I did the build in debug mode in the event someone had issues.

I'll suppress those in the next incremental and instead record them to log, but I want to know what they are. 
See the Butane qii4a post/link for an APK download for a different game with controller support.

Regarding the SDL2 joystick API ---

This is all new to me -- that being said, I looked at the SDL2 2.0.8 source code and it leverages native Android controller support which is extremely robust and standardized and mature.

So I am thinking the controller support is going to work almost universally.

Nonetheless, this is the thread where we find these things out ... 
@mh - Part 2 
I want to see more feedback, but the fact you have GL errors already annoys the hell out of me. I spent time studying the OpenGLES specs and was under the impression that it was pretty damn standardized.

/Pioneers, arrows in the back -- this is the whole purpose of exploring engine developing and killing these kinds of things, but damn ... 
GL Errors 
Here's what I get; it's an el-cheapo Nokia 5 btw.

First is "Alert: GL_EXT_texture_filter_anisotropic" but no other info.

Then a 1280 at line 221 in GL_Evaluate_Renderer_CheckExtensions.

Then another 1280 at line 222, same function.

Then a 1280 at line 223.

Finally one more 1280 at line 224.

Following which it loads and runs fine. LIT files work, and VIS files also seem to do so; I have a bunch of them in a pak2.pak so I'm assuming it's getting them (I've deliberately avoided reading the code for feedback purposes). 
Alright, well -- gives me an action plan.

And I'll act on it and address in the next build. 
Still Trying To Get My Moga Hero Controller To Work 
which is unfortunate because i really want to have quake (and all the expansions) on the go.

the controller can controll the phone in the moga pivot app so its not a bluetooth thing, the controller works, but does nothering in qd.

please could you suggest a controller which you think is best to use for quakedroid. (im willing to pay for a new one just for this project).

I dont think my moga hero can work with quakedroid, i sure cant get it to work. I dont even know if it works outside of moga pivot games, confusing.

If anyone does mange to get this working with a moga controller please let me know so i can know if its worth persisting with this controller.

Might be worth considering moga support for quakedroid, seeing as i think it's a popular controller? Let me know what you think. 
brassbite suggested a controller.

My controller, a ERO VR was $19.98 at Walmart. 
Make that EVO VR.

/Typo corrected 
You might try to see if your controller works with

When I was setting up my controller, the greatest initial difficulty was correctly pairing it with the device. I had to hit a certain combination of buttons to cause it pair as Android vs. pair as iPhone and my initial pairing was wrong.

I had to unpair the device entirely and then pair it again to get it to work right.

While the device was paired improperly, it still showed as a bluetooth device, but didn't work in any game.

GL QuakeDroid Slight Tweak (resolving Mh Startup) 
Download: GL QuakeDroid April 18 2018

@mh/GL_EXT_texture_filter_anisotropic glerrors and notification no longer happen. 

Won't be able to test until 6+ hours time at the earliest (it's the warmest day of the year and I have seasides to walk along, beer to drink and pizza to eat!) 
warmest day of the year

It was literally like December at 7 am this morning in Ohio with light snow. I'm a "cold weather coder" so that actually is quite ok by me. 
Having Issues With PS4 Controller 
Both Bluetooth and wired connections are fucked. HOWEVER, it's not QuakeDroid. There are 3rd party options to solve it but I'm not rooting my phone to play Quake or any other game.

I tried the Steam controller had a little bit of luck but the right pad acts as a mouse cursor. Sadly the orientation is for portrait and the mouse doesn't work as an input device for the software anyway.

Any suggestions would be appreciated. I'd like to buy a Steel Series controller for this but a bit gunshy at this point. 
@dumptruck - PS4 Controller Android Article 
This article may help you:

There was a dark time, long, long ago (six years or so), when Android was still a platform in its nascent stage, and to really unlock its best features, you had to root your device. Well no more. One of the many things you can do now without rooting is connect your PS4 controller to your Android phone or tablet via Bluetooth.

This is also this article: 
@apm - Mogo "hid Mode" 
Some reading/researching around ... you might look into trying to set HID mode.

HID refers to the gamepad protocol inherently supported in Android™ devices running 3.0 and higher.

Both my EVO VR gamepad and my external bluetooth keyboard use HID mode.

MOGA's Pivot app has yet to be updated for Android 5.0 compatibility

However, certain MOGA gamepads (not all) have a HID mode switch on them that let you use HID mode with games.

"How to connect moga pro controller thru hid mode" 
Thanks for the links. I've been able to pair the devices as shown in the links above. I believe the PS4 is defaulting to HID mode already as I can navigate the phone's UI as the guy showed in the video.

What happens is that I can use the X button IIRC on the controller and the analog sticks do work - which is a great start - but as soon as I press the other buttons the whole thing blows up. The view pans up and the QuakeDroid menu behaves as if the up button is held down.

I think re-configuring the buttons is probably the fix I need but the app you linked is out of date and unstable per the developer. I am going to keep searching and will report back.

There are other apk's that are out there that require rooting my phone to fix all this that I won't even bother with. I'll probably just get a different controller eventually. But I'm tantalizingly close on the Ps4 Dualshock. 
@dumptruck - Made For Android 
The SDL2 library controller support is for the gamepads that were designed to support Android out-of-the-box.

I guess it is natural that some users with existing PS4/XBox/Steam Controllers are going to try to use those with their phone/tablet, but those aren't the "Works With Android" controllers that the SDL2 library supports.

They may work or not, may require Google Play button remapping apps or what not. The mileage on that is going to vary.

The best I can probably do with that if someone like yourself gets it to work with, say, a PS4 controller, is to make note of your post and perhaps eventually throw a link on QuakeDroid page. 
Obviously, I do hope you get it to work. 
And if you do, I'll accomodate the info on a "using PC/console info" page or similar on the QuakeDroid page. 
@apm - "B Mode" 
“B” mode works with Android devices running Android OS 3.1 (Honeycomb) or higher.

According to this link, you may need to switch your MOGO to "B" mode. 
2 things. I was really only attempting it because I read that you can use PS4 controllers on Android and thought "what the heck." But as with everything it's a rabbit hole, time-suck thing to get working.

Even Sony's Android specific streaming solution is limited to specific phones OR you need to root the phone (and *then* you sign into your PSN account --- fuck that noise.)

The other reason I'm trying this is to just add to the knowledge base here on the thread. So, please don't research too much on my account!! I asked earlier as I was hoping against hope there was somethin I was missing.

After work I'll hit Fry's and see what they have for Android controllers. I had a Steel Series for iPad and I do think their products are excellent overall.

Anisotropic Filtering/GL Error Pop-ups 
Confirming that everything starts up clean now.

An interesting observation is that the texture filtering options don't work either. My guess is that there's a bug with glTexParameter calls on this device, and that your code is otherwise fine. 
When I was trying to get it to run, if I recall correctly OpenGLES 1.1 doesn't support the texture filtering options docs.

In head, I was planning OpenGLES 1.1 first and then convert to OpenGLES 2.0 using RMQ engine GLSL as a guide.

But getting OpenGLES 1.1 to work was more time consuming than anticipated. Also I was met with challenges like non-supported draws like GL_POLYGON (easy --> GL_TRIANGLE_FAN) but more complex ones (GL_QUAD_STRIP) slowed me down a bit.

Plus limitations like the typical mobile NPOT extension GL_APPLE_texture_2D_limited_npot (despite the name Android uses this commonly) can't be used with clamp to edge textures (if I recall).

So more can definitely be done on the rendering side of things over time. 
Hrm. Trying the latest version on my new Android 6 tablet, the screen does not auto-rotate (flip). That's a problem because my keyboard case connects to one side of the tablet, which means UP is a certain direction, but QuakeDroid does not agree that this direction should be the UP!

But my bluetooth gamepads work flawlessly with no problem. I use an iPega 9023 v2 (suitable for tablets 7" and larger) and an iPega 9055 (suitable for smaller phone-size devices). These controllers actually hold the device, basically converting your phone or tablet into a portable game console. 
Is it upside down from what you need?

I could add a setting possibly in video options to flip it.

dumptruck also said for his phone it was "upside down".

/Awesome your gamepad works flawlessly. 
All the phones I tested QuakeDroid on are "flipped" like this. They are all Motorola phones from the past few years.

Moto X Pure (aka Style)
Moto Mini
Moto X (1st Gen)
Motorola RAZR 
That second one should read Droid Mini - but it's still a Motorola. 
GL QuakeDroid Alternate Landscape Build 
Download: GL QuakeDroid Alternate Landscape

I'll end up making this a setting in video options later. 
I can't speak with certainty for whatever tools you are using to build this, but with Android development stuff, auto-rotate should be a simple switch somewhere, along with limiting it to either portrait or landscape modes. I mean, it's basically built-in functions in Android to detect which direction is UP and rotate the screen accordingly; you just have to set the game to allow it when developing. Of course, I have played games where it is locked to one position... so it may not be something that is easily set in all development tools. I just know that when I made my little android games ( ), it was a very simple setting to allow auto-rotate in landscape modes only.

If that's not an option, then I guess a menu setting would suffice! 
I think I'll default the landscape to the "gunter/dumptruck" preferred kind. Looks like that should be normal. And then I'll put an option in video options to flip it. 
The alternate landscape build should solve you issues for now. Let me know. 
I guess it's cold out today! :) 
Btw, Baker I did get it to build in Android Studio with no issues - nice!

Double checked the joystick initialization code and SDL is just returning the accelerometer and no joysticks for my setup. I think my tablet may just lack the Xbox driver, as it's a running a customized android, so I probably can't help test at the moment. 
I'm glad compiling went easy. I try to make things easy to compile :) I did a reinstall clean compile, but hadn't tested fresh on a different machine.

I actually don't use Android Studio (it must be installed for the toolchain).

I go to the Android folder where there are several .bat files I made ...
1) (Done just once) make_symlink.bat (hooks up SDL2 folder)

2) gradle_assembleDebug.bat (compiles)
3) adb_install.bat (installs apk to phone)
4) (optional) adb_debug.bat (open a window with live log prints as it runs)

Because the Android compile process is rather slow ... I typically make sure Visual Studio will compile the Windows version of the engine (in 3 seconds Visual Studio will tell me if I am missing a semicolon, the Android process will take 2 minutes to tell me such a thing). I also have a "Fake Android" configuration in Visual Studio with the right preprocessor defines for Android so I can easily work with the code.

/And as time moves on, I want to see if I can speed up the Android compile. Sadly the gradle build system documentation for use with the Android NDK (native C/C++ dev kit) is basically non-existent. 
Well, I played for a little while on FvF and got the same crash as my old device:

Cache_MakeLRU: active link

Also, I feel like the "Invert Mouse" setting should also invert the look axis on the gamepad (right joystick).

Other than that, gamepad control feels really good. Perhaps the "Dead Zone" (the amount you can move the joystick before it counts as moving the joystick) for looking up and down should be a little larger as compared to the dead zone for looking left and right. Most of the time you don't want to look up and down but it's not too hard to accidentally let the joystick drift up or down a bit when you're looking left and right.

When hiding the onscreen controls (from keyboard use), there's no need to disable touchscreen aim. 
Check this out for a picture of my awesome Quake rig running QuakeDroid: 
I've been focused on getting the OpenGL build up and running, so I haven't had the time yet to hit the everything on the todo list (especially a lot of qmaster items). But they'll happen ...

For the "active link" I either have to acquire the Quakespasm SDL sound mixing code that they acquired from ioQuake3 or read mh's cache system redesign tutorials and redesign the sound cache system.

For deadzone and company, the following cvars are available and they all save to config.


Since I use adapted ericw/Quakespasm controller support, I would prefer to leave the default values unchanged. 
So I Dug Up Some Old SonyXperia Phones 
And you know what?, it is working perfectly here.
Great thank you Baker, this is nothing short of awesome!

My smile starts to hurt already.

Thx again. 
Re: #186 Alternative Landscape Build 
Just a few things I noticed while messing around with it this morning:

In Options when Autoscale is set above "Auto Small" setting (medium and large) the white test descriptions do not match the currently selected item. So the Crosshair description reads: "Screenblend underwater, powerup..."

My screen resolution is defaulted to 2392x1440 BTW.

Another thing I noticed in Video Options changing Pixelation settings has no effects. It remains set to default GL smoothed regardless of what the selection reads.

While I was typing this I had QD looping through the demos so I could type the right settings for you. While on one of the demos the app gave error:

Chache_UnlinkLRU: Null link

When I touched okay the app crashed to home screen. 
Typo Above 
should read: Cache_UnlinkLRU: Null link  
Hey It's Mfx! 
@mfx - Thanks!

@dumptruck - another fine catch! Shall be addressed. The LRU link active deal will be fixed either tomorrow (if time permits) or late Sunday.

The next release will have a QuakeDroid (GL version) and a QuakeDroid WinQuake and I'll have to reorg the QuakeDroid page some to reflect the new changes. 
First | Previous | Next | Last
Post A Reply:
Website copyright © 2002-2017 John Fitzgibbons. All posts are copyright their respective authors.