Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Quake 1 ported to the Apple Watch (github.com/myownclone)
692 points by myownclone on Sept 7, 2022 | hide | past | favorite | 216 comments
I ported Quake 1 to the Apple Watch, building on top of existing ports for iOS and Mac.

Some features: * uses Quake SW renderer + blitting to WatchKit surface (~60 fps, 640x480, larger res can run on lower framerate, tested up until 1024x768) * touch + gyro + digital crown controls * new AVFoundation audio backend (quake to Watchkit audio buffer copy logic), as Watchkit does not support CoreAudio * high pass audio filter to remove clicking on Watch speaker for some of the low frequency quake .wav samples * some smaller modifications and code updates to glue Quake 1 c code to Objective C and Watchkit

https://www.youtube.com/watch?v=cPC2o262TfQ




Finally, something that I can speak to!

I once ported Quake 1 to the Rockbox operating system for MP3 players, which enabled it to run on the Apple iPod: https://www.youtube.com/watch?v=r6V-4AZ7pkA

The whole world of software ports basically boils down to "anything is possible, given enough memory, pixels, and time". The actual process of porting anything is sometimes incredibly tedious (e.g. "scour the entire source code for unaligned memory accesses, and manually rewrite all of them"), but also gives a chance to do some very clever things (like, "use the piezo speaker to beep out the address of a fault, because nothing else works on the device after a crash").

What made me do it was 1) the satisfaction I got from seeing my work produce something which, at first glance, shouldn't exist (Quake... on an MP3 player?), all while 2) learning deeply about software close to the bare metal, which is fairly hard to do early in one's career. There's of course also the factor of having lots of free time - I did my port when I was still a student with not very many responsibilities, so I could afford to spend entire evenings and weekends poring through mountains of C code. Nowadays, not so much...


Huge respect! I think that porting Quake like you did is much more impressive feat than my port to the Watch!

Totally agreed with the reasons for doing ports, huge satisfaction and learning experience; which applies to all of the programming OFC, but here, you also learn from the original codebase (which is in case of Quake phenomenal).


Amazing work!

I loved Rockbox on my iPod nano, Then Apple recalled the device due to a battery issue and gave me a 6th gen nano whose signed bootloader meant no more Rockbox.

So if I have to sync songs now on Linux, I need to spin a VM; Sigh.


I'm young enough that this is not surprising ("Sure, it's a device and a game; this is one possible device/game permutation."), and old enough that it makes me kind of angry because it seems impossible and I think it might be witchcraft.


*watchcraft


From my dad’s CRT monitor back in the day, to the OLED distraction machine on my wrist.

How things have changed over 25 years or so.


If Doom can run on an STM-32, then an Apple Watch CPU seems like a shoo-in.


When people ship impressive stuff like this, I can’t stop wondering what motivated them to 1) work on it for free 2) have the persistence to finish it. Incredible feat


Curiosity.

You start with a "What if", and it tends to nibble at the back of your brain. Then it evolves to "Why not?"

You hack it and see the light, or more specifically you fail to find a reason for the "not" part, and you make it.

And yes, there's an immense satisfaction for doing it. Not from "look at me" angle, but from "ach, it was possible, and I made it. It turned out I was capable enough to make it work. Let me get some tea" angle.

I like feats like this. Honestly kudos to them. Both impressive and fun. Delightful, more precisely.


Exactly! Curiosity, desire to learn and also desire for satisfaction that it brings, when you finally got something like this running. It wasn't all shiny though, that audio issue became pretty frustrating until I discovered that it is not an issue of audio code itself, but the Watch speaker just does not like certain low frequencies.

Also, thanks for the kind words!


"What if?" is the one thing that brought me into computing as a hobby when I was a teen and has consistently been with me in my 2+ decades of work. Everyone has different motivators, but for me, this has been the single most powerful driver of all my successful projects.

Along the way, I learned that when "what if?" becomes "I have to", the drive in me just dies. So I've had to learn how to stay in "what if?" mindset even when I have a deliverable I have committed to.

Sometimes, this means picking at a totally unimportant part of a project, getting it working and then—while in the same mental groove—shift to delivering the core feature.


Finally, something that I can speak to!

I once ported Quake 1 to the Rockbox operating system for MP3 players, which enabled it to run on the Apple iPod: https://www.youtube.com/watch?v=r6V-4AZ7pkA

The whole world of software ports basically boils down to "anything is possible, given enough memory, pixels, and time". The actual process of porting anything is sometimes incredibly tedious (e.g. "scour the entire source code for unaligned memory accesses, and manually rewrite all of them"), but also gives a chance to do some very clever things (like, "use the piezo speaker to beep out the address of a fault, because nothing else works on the device after a crash").

What made me do it was 1) the satisfaction I got from seeing my work produce something which, at first glance, shouldn't exist (Quake... on an MP3 player?), all while 2) learning deeply about software close to the bare metal, which is fairly hard to do early in one's career. There's of course also the factor of having lots of free time - I did my port when I was still a student with not very many responsibilities, so I could afford to spend entire evenings and weekends poring through mountains of C code. Nowadays, not so much...


People who do this kind of stuff don't think of it as "free" necessarily. It's highly rewarding at the most abstract, but more tangibly develops skills that make them more valuable in the workforce, allowing them to demand very high salaries from top companies.


Yes sir, you are right, exactly :-) This is highly rewarding in and of itself. + learning experience.


That endorphin rush when you finally get something interesting running is sublime


As a web developer, I'm kinda jealous of how someone can just say "I'm gonna make this device this specific nostalgic game I love" and then just do it.

How do people do that?


By starting small, honestly.

When you take small consistent steps, you can go very long distances at relatively short time.


And what are those steps? OpenGL Programming and Objective C?

Asking seriously. Those kind of feats are amazing :)


This is a step by step process. The author has some prior experience, probably, but let me try to outline something from my own journey.

As you take small steps, you need to start with small targets.

In my second internship, my mentor shown me a PC, and said "This is yours". Then produced a Nokia 7110 and a serial cable for said phone. He continued: "We need this phone to send SMS messages, via an application on this PC". Catch: The PC had no OS, and the software he wanted was nonexistent.

I said OK, and he asked: You know Linux, right? I truthfully said "Installed a couple of times, spent time with it." He produced a Debian 3.0 CD from a drawer, and said "Let's see whether you can install this" (Debian was hard, then).

My first target was to get Debian run on that system, then make it connect to the network.

Then, I learnt how to install and manage packages on it via "dselect".

Next, I managed to found the user manual of the phone to find out that it has a serial modem on it. I also found the AT reference guide for the phone the same day IIRC.

Next day I managed to connect it via minicom, talk with it and send a couple of SMS messages to myself.

With the knowledge I had, I found how to talk with that phone over C (Thanks Beej, and his guides). In 6th day, I was sending messages. In 8th day, the tool was a daemon waiting for messages via a specified port in a specified format.

The IT department written file watching daemons and embedded to their systems, allowing them to create many many "wire traps" inside system to detect when something went wrong. That system worked for 6 years and saved enormous effort by notifying from the right place, at the right time.

This experience allowed me to discover Debian from top to bottom. I still use Debian, still do the research same way, and move step by step, because I built the confidence over that week.

The key is proverbially "not looking down", and just "thinking the current mile", like a marathon runner. You're a web developer? I don't care. If you start from the edge of your knowledge and just walk, you can go great distances. The target is incidental here. A Quake port, an SMS daemon, something bigger/smaller... Doesn't matter.

What matters is going somewhere new, learning something you don't know. Then you can build upon this. One day, you may find yourself beyond the people who inspired you, which happened to me without noticing, but it's a story for another time.

If you want to talk on this further, you can also reach me via my webpage (see my profile), or we can continue via here.

P.S.: I still have the AT Reference Guide, both digital and in printed and bounded form. :)


I just had a rush of happiness by reading your comment. Thanks for sharing your experience!


Hey, thanks. I'm glad it made you happy and inspired you. Hope you have more of these kind of stories yourself, take a look back and feel delighted about them, too.


As a web developer who is increasingly getting into tinkering with embedded systems for fun:

The first step of displaying a test pattern, sending test bytes between devices, etc. is the biggest one, and in my case usually involves finding an open-source program that is capable of doing the thing and butchering it until it only does the thing. Every step after that is incremental, just like any other development.


One of the reason I chose Quake (apart from it being awesome game and well written code) is also that it has software renderer, these things have their flaws, but are highly portable. Porting original GLQuake to Metal would be far more taxing.


By not being a web developer.


Exactly!


Just the excitement to see it done, for the sake of it. I think money won't even remotely come to mind.

For the second point on persistence, this guy must have a lot of patience. I've struggled on this actually. If the initial push is strong enough I sit through 3-4 days but at least for me I can't seem to come back and finish it if I put it away for more than a day.

Truly impressive considering all this.


You have to do something with your time, right?

Some people build hot rods or fix old tractors, some people collect all 7,341 achievements in some game, some people catch up on the complete available catalog of Doctor Who, some people go out and bag peaks or train for better times on their marathon, some people grind on their karaoke performance of Tainted Love, some people devote themselves to being close with and available to their kids.

This is a beautiful project, but what makes you feel like the motivation is somehow different here than it is for those?


It might not be entirely altruistic or a personal challenge as mentioned in other replies. If I were someone who wanted to recruit a developer for some performance-critical Apple Watch work, I would put this person on a short list of people to reach out to.


Autonomy is a hell of a drug


15 minutes of fame.


Cool!

Are you aware of / had you considered implementing Quake's famous Reaperbot:

https://www.quakewiki.net/quakesrc/56.html

- might make for good demos, I thought?

(Some of the links are old and broken - https://www.gamers.org/pub/idgames2/quakec/bots/ works)


Thanks! Great suggestion! There is actually demo running at the end of the video, so the usual quake AI and different enemy archetypes work just fine for single player. I did not think about the ability to play MP arenas with bots, though. And from what I heard, Reaper bot is the best, that's a great idea!


I know this is more of a tech demo, but my mind immediately jumps to what sort of controls would be most playable. Have you tried something like:

• Gyroscope to look around.

• Scroll crown to walk forwards or backwards.

• Tap anywhere on screen to fire.

(Pushing in the crown to fire isn't possible, right?)


Thanks for suggestions! Pushing the crown invokes system UI. * gyroskope to look around: I did try some of it, but it also means that you have to tilt the watch on more axes which usually means you tend to have worse eye contact with the surface of the display. * scroll for walking: I did try, but it wasn't much satisfying to use (I mean even worse than the other controls here :-D) * tap anywhere to fire: good idea!


> gyroskope to look around: I did try some of it

Just wondering—was it on your wrist when you tried it? I'm imagining moving my whole arm up and down, which I can do in sync with my head fairly easily.

And ideally turning around 360 degrees would require physically turning 360 degrees... might need to be played in a swivel chair.


>Gyroscope to look around.

This is demonstrated in the linked video: https://www.youtube.com/watch?v=cPC2o262TfQ


Yes, but in the video it's mapped differently. Gyro left and right looks left and right, but gyro up and down walks forwards and backwards.


And of course, to run this yourself, you need to pay Apple 100 dollars for a developer account and even then, the app will delete itself after 7 days.

Youre brilliant, you paid for the watch, but you cant use it the way you want because of Apple.

Edit: I have been corrected. 100 dollars buys you 1 year. 7 days is 'for free', so it's basically a tithe.


I understand the urge to crap on Apple all too well.. but at least have the facts straight. $100 gets you a year; 7 days is for free accounts.


That's very helpful, thanks. Still totally bullshit though.


No arguments from me; Apple needs to get over itself and let us side load our apps but they're too greedy.


An app with a dev account signature will not "delete itself in 7 days". You are talking about apps signed with a normal account.


While that may be correct it's still insane you can't port open source software to a device you own without paying a fee.


You don’t have to pay a fee. Any account can sign and side load an app for free, and every 7 days you have to let it check in with apples servers. If you pay $100/year for a developer account, the apps can sit much longer without needing to check in.


Thank you for the correction, as little as it does to change things.


Wait till you find out what dev kits cost for consoles.


Yes thats a bad thing, too. Two bad things.


It's not a developer tool. It's a consumer product.

We would laugh if someone bought a sedan and complained that it can't haul any pallets of goods. Why do we make that complaint for electronics?


Because that's not equivalent to what's happening here. In this scenario, we bought a 'luxury' sedan (apple watch) that is able carry goods (quake 1) but Toyota wants you to pay them $100 dollars a year for permission to do that (dev account). And they get to decide what goods you're allowed to carry (app store).

It's nonsense.


It is an intentional security design choice to make it difficult to run software outside the walled garden.

You might be savvy enough to not be concerned about being fooled into installing malware on your device. But this design decision was not for you.


Come on, burying side loading in a setting and having a giant red warning is good enough to keep the vast majority of users out of using it. No reason they can't offer that technically.


It doesn’t, scams and social engineering campaigns that deliver malware via that vector are extremely common.


Then let those users rot. To give up a fundamental component of computing because a few desperate users figure out how to sideload some garbage on their phones is one of the silliest arguments I've ever seen. Apple locks shit down because it makes them more money, plain and simple.


Those users are Apple's target market, you are not.

The main reason people buy Apple devices today is that the software ecosystem is consistent and predictable. This isn't silly, this is a core value proposition.

Meanwhile, millions of Android devices have shipped with with literal malware from the factory. I know because I used to develop custom ROMs to remove the malware that my own carrier installed on my phone.

I doubt Apple is primarily concerned about losing money to side-loading. The vast majority of users purchase apps from the default store on their phone.


To be clear, people buy iphones because it's a status symbol with good marketing.

But also nothing youve written prevents what both of us want. The average user can use their iPhone as they always have. Those of us who care about freedom could install what we want. Apple sells phones. You dont need to defend everything they do, eh, they dont actually care about you or me.


What makes Quake so portable? Developer seem to be able to move it to just about any platform.


Unlike most games of the era, Quake was designed to be portable. It's not tied to the PC / MS-DOS platform in the same way as many other cutting-edge games were. For example, there was a lot of x86 assembly used at the time, often just intermixed with C code with no clear boundaries to enable porting to a different architecture.

AFAIK, Quake was originally developed on NeXT boxes and ported to PC later. The level editor was a native app using the NeXTSTEP APIs which Apple renamed Cocoa:

https://quakewiki.org/wiki/QuakeEd

So, it's a fun kind of homecoming that it now runs on the wrist-sized NeXT box.


Just for a fun comparison.

The original NeXT computer: 25MHz Motorola 68030 plus copro, 8MB RAM, 256MB storage, 300W power usage, $15k in 2021 dollars, weighed a lot

The Apple Watch Series 7: 1800MHz t8301 CPU (but scales up and down), 1GB RAM, 32GB storage, 50-100 mW (I think?), $399, weighs 35g or so

What a difference 33 years makes!


The watch has similar specs to the first MacBook Pro from 2006!


The watch is more powerful than the netbook I'm typing on right now.


I sometimes think we have an 'embarrassment of riches' today - more computing power than we know what to do with!


No, we know exactly what to do with it: run a bunch of Electron apps to use it all up.


If companies can produce software in half the time by doubling the CPU, RAM and disk usage, they will do it if they can get away with it.


It's always Electron apps come up when someone mentions that we have too many resources :)


I think that even Doom was developed on NeXT (the game, not just the level editor), the alpha came out for NeXT before DOS.


Except the little detail that there is very little NeXT on that wrist-sized box, other than Objective-C is still the main language.


...the OS should be quite similar too, assuming watchOS is anything like iOS and macOS, because macOS essentially is the present day incarantion of NextStep due to the NeXT-Apple reverse takeover ;)

...not very relevant for DOOM of course, because that's just plain C for the most part, but interesting little tidbit nonetheless.


Except plenty of stuff has changed since NeXT days.

Objective-C driver kit no longer exists, its C++ replacement is on its way out, being replaced by a userspace version.

The watch uses watchOS UI KIT, is isn't either UI Kit nor Cocoa, so three generations apart from NeXTSTEP UI framework, which is anyway being replaced by SwiftUI.

watchOS uses a customized version of bitcode as deployment format, which is now being transitioned to actual native code in upcoming versions.

Related to Doom, watchOS doesn't do OpenGL, or NIB files from Project Builder.

So almost nothing like NeXTSTEP.


For a brief moment NeXT was trying to spread Openstep far and wide. What a future everyone could have had, rather than those locked into the Mac ecosystem. Which is most in this country, actually, so same thing I guess.


Many Java haters have little idea that Java itself and JavaEE were heavily influenced by Sun working alongside NeXT in such attempts.

https://cs.gmu.edu/~sean/stuff/java-objc.html

https://en.m.wikipedia.org/wiki/Distributed_Objects_Everywhe...


Quake has a software renderer, that probably helps.

But most importantly, ID software released the original source code for it quite early. Not that many game development companies do that. I would've loved to see more Blood ports, but I don't think the source was ever released? So I believe the existing ports were reverse engineered. Duke Nukem 3D source was only released in 2003 it looks like.

The quality of the source code of Quake 2 is quite high. Doom is.. a bit messy but OK. There are already abstractions that make porting easier. I'm guessing Quake (haven't looked at the source yet) is somewhere in between. That helps too.


The top sibling parent has the correct explanation, however, I'll expand a bit.

Games prior to Quake were bound to specific O/Ss and/or hardware components.

DOOM was still bound to DOS AFAIK, so it's not portable without significant changes.

Older games are even worse - not only they were bound to DOS, but also to the display adapters of the time (CGA/EGA), which required some sort of emulation (or translation, depending on the approach) in order to be ported.

Games based on the Build engine (written by Ken Silverman), like Duke Nukem 3D and Blood are... simply written in very poor form. Carmack is a tidy programmer, Silverman isn't. Quoting Fabien Sanglard:

> Looking at the innumerable ports that spawned Doom/Quake, I was always puzzled to see so few ports of Duke Nukem 3D. The same question arose when the engine was ported to OpenGL only when Ken Silverman decided to do it himself.

The answer is in his analysis: https://fabiensanglard.net/duke3d/code_legacy.php.


DOOM was definitely made with DOS in mind, but it also ran on NeXT from the beginning. It's pretty portable actually. Since you cited Fabien Sanglard, I guess I should mention that his book about DOOM's source code (Game Engine Black Book: DOOM) explains how the portability stuff (as well as almost everything else) worked in great detail.


Several of us would regularly play it in a Chemistry computer lab on SGI workstations. Annoyed the hell out of the students doing molecular simulations, regrettably.


I really miss one name here: Michael Abrash

John Carmack is awesome. However, to take the next step after Doom, he brought Michael Abrash on board.


> DOOM was still bound to DOS AFAIK

Doom was literally developed on NeXT computers (the precursors to modern Macs, ironic considering Doom was single-handhedly responsible for turning the public perception of PCs from boring office machines to cool gaming systems):

https://en.wikipedia.org/wiki/Development_of_Doom#Programmin...


> DOOM was still bound to DOS AFAIK, so it's not portable without significant changes

DOOM was always extremely portable, the DOS and PC specific parts are well separated from the other code (DOOM was actually developed on NeXT machines, so separating the platform specific parts probably came naturally).


Well, extremely portable, I wouldn't say so.

If you look at the ancestry of SDL2-Doom, for example, there are three ancestors:

- doomgeneric, which seems not simple (https://github.com/maximevince/fbDOOM/compare/master...ozkl:...)

- the above is based on fbDOOM, which is quite simple (https://github.com/maximevince/fbDOOM)

- the above is based on insane-adding-machines/DOOM, which is also not simple (https://github.com/id-Software/DOOM/compare/master...insane-...)

The SDL port itself (https://github.com/AlexOberhofer/sdl2-doom) is definitely not simple.

Porting something that it's not based on a multiplatform library (which is commonly SDL for old game ports) is not an easy task in general.


On SDL, there's an SDL2+minimal ANSI C environment for plan9/9front called NPE.

The SDL2 audio and video libraries are just shims against 9front drawing/audio functions, and often they just work.


Plugging a DOS game to an SDL(2) library won't "just work".

Some concepts are inherent to the hardware and the O/S.

Hardware example: EGA (not the case of doom, but of other, slightly older games) uses bitplanes, it's not just an array of byes; audio cards used specific drivers.

O/S: timers may need to be emulated, as the game may not have a straightforward game loop; due to this, even exiting cleanly may not be trivial to implement.


Not an issue for Q1, it wasn't for neither EGA or VGA for DOS exclusivelly, they had DOS, Windows and Unix versions since day 1.


Quake basically pre-dated hardware rendering on consumer hardware. To a great extent, the consumer 3D accelerator market exists because of Quake. https://fabiensanglard.net/3dfx_sst1/


Aaah the brief, heady days of “no serious gamer would use a hybrid 2D/3D card” and the Voodoo fill rate wars. Fun times!


Voodoo... that's a name I haven't heard in awhile... thanks for that fun memory. Those were interesting times.


Quake and id Software were pioneering things we just take for granted now.

I remember playing QuakeWorld when it came out, on Linux, over a dial up modem. You had ping times of 200-300ms and it was playable. You have to remember at the time Doom and other games were LAN-only. John Carmack used to keep a .plan file with some really cool details behind Quake/QuakeWorld development. Check out Aug 02, 1996 for some detail behind the netcode[1]. You can read the future of gaming being invented right there.

[1] https://github.com/ESWAT/john-carmack-plan-archive/blob/mast...


Yes! SW renderer was one of the reasons I chose that! :-) Also, source code for id tech games is so well written, architected and highly readable.


Blood uses the build engine which was open sourced at about the same time as Quake, there are numerous source ports and it can run on most platforms (although people have gotten it running on mobile devices, there's never been an official port). As nblood is based on eduke32, I'd imagine the only reason it isn't available on more platforms is that no one has volunteered to do it.


Build/Duke was also Ken Silverman's second game. Doom was probably Carmack's 50th

That said, it had some things Doom fans dreamt of, like an interactive level editor that was built into the game engine.


The Build engine's source code isn't enough to port any game running on it, since Build was made as a library (I believe most developers using Build in the 90s didn't have access to the source code).

Also, wasn't there an official Blood port by Nightdive Studios?


It may have been fixed up since but the official ND port had some problems at the time of release (if I remember a civvie11 vid correctly)

edit: just looked it out, it seems this has been address. I'm linking the videos because they're entertaining :D

vid on the original: https://www.youtube.com/watch?v=EkG29e-nE-A

and the patched version: https://www.youtube.com/watch?v=oFUPNlfWiYg


Also, the original build code is extremely hard to read!


Written in plain readable C, open source, iconic game. Same with doom.

This is also from an era where there wasn't that much abstraction and "software rendering" was the norm so the implementations tended to be much more straightforward, this makes it so that worst case scenario, you just write to whatever the equivalent of a framebuffer is in the target implementation.


Should we maybe take that as a lesson?


Specially for those cases that ship a browser alongside the application....


>What makes Quake so portable?

There's like 10 glue functions you have to write to do things like initialize your platform, get input, begin the sound loop, call the main loop, and then something to switch buffers to the display. It takes a quite short amount of time to do. Id provides a set of null functions that you can use as a starting place and incrementally add in video support, input, sound, etc. They made it super easy to port.

I've been fiddling off and on making a tiny CM-2 computer model with all the blinking lights on the front panels. Inside it's an rpi zero 2, and I'm using some 1.5", 128x128 SPI RGB OLED displays instead of trying to make itty-bitty LED arrays. Long story short I decided I should be able to run quake and quake2 on the thing. It only took two days to put in enough code to have them running.


I have chosen Quake because (arbitrary order): * great game * codebase is well written, highly readable, well architected, there are tons of documentation and also a lot of existing ports to look at for inspiration and reference * SW renderer -> meaning it runs everywhere, rewriting GL renderer to Metal or anything HW accelerated would be much more work


It helps that Carmack is a talented coder too.


> you need to have connected Apple Watch (via the iPhone) to your Mac and you can build the game yourself.

This is the highest cost Quake 1 port till now.


<s*post> Got here just in time to muse about when we'll see Skyrim on an Apple Watch.

I was an Apple customer just like you. Then I took an arrow to the knee. </s*post>


Can it be also ported to PineTime, the open-source watch? https://www.pine64.org/pinetime/


The COU on that watch seems quite less powerful, so perhaps quake is not the best game for that hardware. Maybe Doom :-)


Cool, though I wonder if you could get away with compiling Quake to WASM and running it in Apple Watch's browser. Perhaps the FPS there would have been far too poor.


It already exists, see http://www.quakejs.com/

I don't have an Apple Watch but it would be interesting to know what happens when you fire it up on one.


Interesting idea! Watch does not have system browser, there is kinda something like web view (I think) and also some browsers exist on App store, but integrating this with digital crown and gyro would be far harder.

Also debugging would be pain.

And most importantly, performance would be IMHO terrible.

I haven't even though about using WASM, I prefer native code as much as possible. But WASM is actually cool technology in my book :-)


Yeah, you can get a web view by asking Siri to search for something. I was able to get my JS game (https://stardust.dev/) running on it[1], but it was pretty slow (though it's not particularly well optimised, nor does it use WASM).

1 - https://twitter.com/d0m96/status/1356670213090066432


Almost 5 years ago I ran Quake on the Sharp Zaurus 5000D


Oh, huge respect, sir!


I meant 15 years go of course. But it's already 20 years ago..

https://web.archive.org/web/20011212074611/https://www.insom...


I love the use of the crown!


This is truly awesome! Not necessarily the ergonomics, but the power these tiny devices have and the dedication people still have to the classic id classics.


Does it connect to quakeworld servers?

Maybe I can deathmatch with an apple watch from my nokia symbian 6120.


Absolutely brilliant, that is so cool!

I'm suprised you get close to 60 FPS in Software Rendering. Is there some form of hardware rendering that could be used aswell on the apple watch?


I wouldn't be surprised to see optimized (using NEON, etc.) Quake 1 running at 600 fps software rendered on Apple Watch.

At least until the CPU starts throttling.


it's always suprising to me what modern processors can do when you remove the endless layers of abstraction we see in modern development.


Next step should be writing a HW renderer for it with Metal.


How about using the digital crown to move forward/backward and then three buttons: [Left] [Fire] [Right] so you can play with three fingers on your Watch?


I have tried digital crown for this, but it was not too good to use. But thanks for suggestion!


How precise is the gyroscope in Apple watch? Can you turn on constant movement in Quake, and then just use watch movements for turns/aiming, and the side button/screen tap for fire ?


Extremely accurate. You might be surprised how much. They have a feature where you can use the watch one handed without touching the screen https://www.youtube.com/watch?v=UFCGfyHSbFM


That seems like the worst control scheme ever... no visiq/feedback, just a bunch of screen transitions based on micro gestures? No thanks.


It's designed for people with only one hand so its better than literally nothing.


True.


Can apps be side-loaded onto the Apple Watch?


I guess with the same limitations as on the iphone - with a developer account for 7 days before you have to relicense it.


Yes, I think you are right.


Is there a technical reason why this couldn't be put on the app store? I've seen reference to Apple not allowing certain OSS code but never seen that confirmed so I'm curious!


The problem is that this is not something Apple wants to have on the App Store. They reject apps they deem arbitrarily unsuitable all the time.


What makes you believe Apple would reject this app? (provided it used properly licensed assets)



What makes you believe Apple would reject THIS app?


Because it's not original license owner. They would have to provide licenses for everything used plus Apple may reject it just based on "not matching app guidelines". Apple banned even console emulators even tho technically there's nothing legally wrong with emulator on it's own, same for torrent downloaders, Kodi etc. If Apple have any doubts about legality of app they'll just ban it


>They would have to provide licenses for everything used

I said "provided it used properly licensed assets". Apple has accepted compiled open source projects before, even from people other than the authors e.g. OpenTTD[0].

>Apple may reject it just based on "not matching app guidelines".

We all know Apple might reject an app for any reason it wishes. This is a poor answer to support a claim that it wouldn't want this specific app.

>Apple banned even console emulators even tho technically there's nothing legally wrong with emulator

Emulators where you add game images yourself were always forbidden.

"2.5.2 Apps […] may not download, install, or execute code which introduces or changes features or functionality of the app"[1]

>torrent downloaders, Kodi

This is an entirely different topic than Quake.

[0] - https://apps.apple.com/us/app/openttd/id1585549844

[1] - https://developer.apple.com/app-store/review/guidelines/#sof...


Untrue. As long as it meets the technical requirements (ie, not using private APIs, doesn't excessively drain battery etc), and the licensing issues aren't a problem (some OSS licenses are an issue, as well as using the Quake assets may be an issue), there is no reason why Apple wouldn't approve a game for the Apple Watch on the App Store.


Apple is more than willing to reject apps that follow all the guidelines.


Can you show an example? I’ve been an iOS developer for 10 years, and I’ve only ever seen/been rejected for things that fall foul of the guidelines, never arbitrarily.


Apple is unable to interpret their guidelines consistently. We ran into this with iSH a while back: https://ish.app/blog/app-store-removal


And yet, you aren't rejected, and are in the store. While their interpretation of their guidelines can be ropey, as is anything handled by a human, my point still stands. Quake 1 would be allowed on the App Store.


What you’re probably missing is the two weeks of concerted effort we put in to design an appeal and then a PR campaign to get Apple to actually listen to us. iSH would not be on the store otherwise.


I'm not missing anything. iSH is very much an edge case. My entire point was that Quake would be allowed on the Apple Watch via the App Store.

EDIT: To clarify 'very much an edge case', I mean, you can see how a non-technical reviewer at Apple may view iSH as a program that executes remote code. While you or I may know better, and it is unfortunate that you had to go through that process in the first instance, you can see why it happened compared to a standard todo list, or a typical web-client based app.


I don't actually feel too bad about iSH being flagged by a non-technical reviewer. It's a specialized app that has characteristics similar to apps that are genuinely against the App Store Review Guidelines. That it gets scrutiny is a sign that the process is working as it says it should, rather than just receiving rubber-stamp approval as is also all too common.

The specific issue is that iSH did end up getting reviewed by non-technical reviewers. We went through at least four levels of appeals, and about half a dozen interactions with people doing review. Several of these people gave the obvious impression that they understood what our app did, and might even be personal familiar with Linux/the command line. The core issue was not a technical one, but a policy one: our app does execute remote code. The reviewers read this as being "any remote code". Our (correct) interpretation was that this rule was designed to prevent remote updates by the developer. A user downloading code in our app and executing it is fully within the guidelines, which we ended up confirming with the highest levels of the review team once the app had been re-approved.

The core problem is that the actual guidelines (which includes both the written guidelines, and a bunch of "case law" that supplements it) is only really known within Apple to a handful of very senior reviewers, and getting to them is very difficult and requires an exceptional appeals process. For iSH, you can see how the written guidelines were misinterpreted by technical people; for apps like these it is very possible that they get flagged by some sort of "game includes IP that's not yours" or "app is unplayable on Apple Watch" and the person who would review this Quake game could get flagged even while complying with the guidelines.


They reject apps for being too simple so meeting technical requirements is clearly not enough.


Yes, they publish their guidelines which states as such… but how is Quake 1 too simple? Downvote all you want, but within the context of Quake 1 being approved on the Apple Watch, “too simple” isn’t relevant.


The point is that they can reject you for subjective reasons even if you fully comply technically.


I've never heard, or seen that before. Everything I've ever seen rejected by Apple (either personally from my own apps, clients, or from press reports) has always been a guideline issue.

So, "Subjective reasons" such as? Example?

Here is an example of a 3D game running on the Apple Watch, that was approved by Apple, on the App Store, which looks rather "Quake like". Mindkeeper: The lurking fear (Apple Watch)[https://apps.apple.com/us/app/mindkeeper-the-lurking-fear/id...]


Don't they reject apps that are "out of scope" for the device they run on? The Watch isn't made to run 3D games, even if that is possible. It's a "bad experience", even if it is a cool technical demo.


No, they don't. There are 3D games running on the Apple Watch, available in the App Store.

Mindkeeper: The lurking fear (Apple Watch)[https://apps.apple.com/us/app/mindkeeper-the-lurking-fear/id...]


In this case, the assets are licensed under a non-permissive license, so even if the code was a non-issue, that's the problem.


It's probably legal for the 'shareware episode' assets (same for the Doom shareware version), although I guess it's better to let a lawyer dissect the license just to be sure:

https://www.quakeworld.nu/wiki/Quake_Shareware_License


This seems like a good use of AI. Get some random good enough textures to bundle. Give me a lake of pixelated radioactive acid.


Or just use a free as in freedom Quake data, such as Blasphemer.


Assets could be possibly downloaded from 3rd party site on user consent.


An app that doesn't work until you use it to pirate something? Yeah that wouldn't fly in App review.


I understand the intricacies of it in terms of the App Store, but I don’t think grabbing Quake’s shareware assets qualifies as pirating.


Yeah but 'user consent' don't make using assets legal.


I did not even think about putting it there, and reason is not Apple (although maybe there would be a problem too), but simply the fact that Quake assets are still copyrighted, as opposed to the code. So I would have to replace the whole game asset package with something with friendly license...which would not be ... the original Quake.


Thanks for responding! So if there was a quality OSS level pack that could be bundled then that would overcome the only obstacle?


Good question. In theory - yes. The code is GPLv2 based, redistributing binaries (originals from Id) with my own changes while I also release the source code is compatible with the GPLv2 license, so I think license-wise, it could work. The question is what would Apple say in the app submission review...


Yes, it would be interesting to see Apple's response. Now I remember what made me ask this line of questions in the first place.

In the release notes for J901 iOS I saw the following:

"it is legally impossible to release a J IDE for iOS as an open source project due to restrictions imposed on app developers by both Apple Inc and the Open Source community".

https://code.jsoftware.com/wiki/User:Ian_Clark/iOS/Review_No...

Although there was no justification for this comment, but maybe it's just true due to enforcement.


> I've seen reference to Apple not allowing certain OSS code b

It's not that Apple doesn't allow anything here, they just impose their own T&C which breaches some, but not all, OSS licenses. And the workaround for the former is usually to have the contributors accept a small affidavit, which effectively puts their software in compliance with App Store.


Apple allows you to ship custom EULA language that supersedes the part of the App Store EULA that would ordinarily conflict with GPLv2. For example, this is what iSH uses to legally ship an entire x86 Linux userland inside of an app.


> Apple allows you to ship custom EULA language that supersedes the part of the App Store EULA that would ordinarily conflict with GPLv2

Is there any write-up on that that explains how exactly they did that?

> For example, this is what iSH uses to legally ship an entire x86 Linux userland inside of an app.

An entire userland?! AFIR it only shipped the gnu toolkit, the rest is downloaded from the repositories?


There is still one issue that I don't see how to resolve, even if you can supersede parts of the App Store EULA.

If you copy and distribute the GPLv2 code or a work based on it in object or executable form, you have to do one of:

a) Accompany it with the complete machine-readable source code; or

b) Accompany it with a written offer valid for at least three years to give any third party a complete machine-readable copy of the source code, for a charge of no more than your cost of physically distributing the source; or

c) Accompany it with the information you received to distribute such code, but only if your distribution is noncommercial and you received it in object or executable code.

See GPLv2 section 3.

A developer uploads a copy of their app to the App Store. Apple then makes copies and distributes it when people buy it (for free or for money) on the App Store.

Since Apple is copying and distributing that GPLv2 code, Apple should have an obligation under GPLv2 section 3 to distribute the source. They would not be able to punt this obligation back on the developer via option c because their distribution is not noncommercial.

This is a crucial difference between app stores (and other digital goods stores) and stores selling physical products that contain GPL code.

Best Buy for example does not run into this problem when they sell you a TV that contains a Linux kernel because although they are in fact distributing a copy of a Linux kernel to you they did not make that copy. They received that copy from the TV manufacturer or a distributor and are just passing it along.

Copyright law in most places contains an exception, often called the "first sale doctrine", which states that once the copyright owner releases a particular copy, those who legally obtain that copy can give it away or sell it or rent it without requiring permission of the copyright owner. That covers Best Buy's case.

Unless there is some way to argue that when I but an app on the Apple App Store it is the developer who uploaded the app that is making the copy I get, I'm having trouble thinking of a way to avoid Apple having to handle GPLv2 source distribution if they let third party GPLv2 code on the store.

First party GPLv2 code would be OK, because then the developer owns the copyright and so can grant Apple the rights to distribute it in binary form without source code. (It has been a long time since I've read Apple's developer agreement, but I think it requires the developer to give Apple such rights).


I would consider GPLv2 satisfied if someone put a link to their source in their App Store description or the app itself, even if that written offer was coming from a different party from the one distributing the source. Both parties are acting in concert with one another to make the same release, and I get what I want regardless. The only practical difference is "who do I sue if someone breaches the three-years requirement".

Judges are allowed to argue that the "equity of the license" prevails over the text in these sorts of cases. If, say, the database lawnmower company decided to sue over App Store distribution of GPL software, the judge is allowed to say "well, the developer is already complying with the offer, they're using Apple's platform to do it, and that gives you what you wanted when you put the software under GPL, which was to have modified source code remain public".

However, you could also sidestep the whole "is a link to a Git repository 'good enough'" question by bundling a source ZIP in the app itself and letting people export it to Files or whatever. That would unambiguously satisfy GPL.


Apple has purposely neutered the WatchOS API in all aspects for the sacred cow of battery life. They will never open up the hardware to what it can truly do. So we’re stuck with nothing but stupid fitness apps.


I forgot what a great game Quake is. Gonna replay it. Looks like it's available on Steam!


What do you do for a living, and how much time (in hours) did this take to achieve?


I am a game/AI developer / ML researcher, this was just passion project of mine and it was... tens of hours, I do not have the exact numbers. But the biggest setback, which took most of the time, was the audio issues, I thought all the time that my audio backend code is wrong, but it was Watch speaker not liking low freq noise. This on itself could take cca 10-20 hours, I have tried a lot of things before realizing the above mentioned fact.


Incredibly cool. I can't wait to put this on my Series 6.


Finally a reason to get one.


Seems inconvenient in terms of navigation. The 60fps is pretty impressive, that and the fact that it actually fit on the watch at all.


Using the gyro seems convenient.


Thank you! And yes, controls are not convenient.


Can't wait for the speedruns.


LOL!


I absolutely love it, well done!


Thanks a lot!


Any testflight link?


I wonder if you could mount the apple watch to your left eye and play quake with gyro (in a dark room for immersive effect). Perhaps you could map an audio stop start controller as gun. I once used a 640x480 monocular micro-display (with lensing to around 1x1cm)


Even the bigger Apple watch only has a resolution of 312 x 390. If you slap a lens in front of that to blow the image up to your FOV, you'll have a pixel soup with a massive screen door effect, I don't think it'll be feasible. Also, no time warp and I doubt this runs at 60+ hz, so it'll make you nauseous in no time. Last but not least, it's an OLED so there will black smear in addition to everything else.


It's a bit more at 396x484, the massive screen door effect works against nausea, and even with a lens in front, floating in the distance like a huge living room tv it would be playabale for me. I imagine it to be a bit like playing doom at 320x240 like this https://www.youtube.com/watch?v=uWpWOoKFdeE -

My oculus quest 1 oled display gives no black smears and even so a little smear I can tolerate. Now what lens could I buy to make this work?


A deeply rose-colored one


The Oculus quest gives a lot of black smear, eventually they mitigated this by just never going to full black. SDE mitigating nausea is just not true, where did you read that?


I have the oculus rift, the quest and the quest2 - I like black, I don't have an issue with smears, I never noticed it in games. I prefer the deep black. Quake has been ported to the Rift (oled), I've been playing it, it's great, I don't notice (or mind) smears. I've been tinkering with mobile setups since the ipod nano series and my experiments with hmd's and monoculars. I followed the VR-psychology/physiology research since day 1 as I love the intersection. Reducing the field of view impacts potential nausea significantly. The field of view with a monocular is much smaller then current VR glasses. https://newatlas.com/columbia-university-vr-motion-sickness/...


I backed the Rift kickstarter in 2012 and have had just about every bigger HMD since. There is a difference if you don't mind black smear or if it doesn't exist.

FOV reduction help nausea, but in your post you were talking about how screen door effect reducing nausea, which I can't see any evidence for.

Either way, slapping a smartwatch to your eye is a very early 2010s thing to do and will maybe give you a bit of novelty for a minute but is not something that has any real use in the current world of real HMDs.


You are right there's a difference between not minding black smear and the black smear existing. Taste differ. You mind, I don't mind and I wouldn't mind on a blown up apple watch screen. You mentioned the massive screen door adding an enormous pixel soup. I countered that if anything this would work against nausea - my 2010 monocular was a floating tv screen with a massive screen door effect.

I'm enthusiastic about something you consider "a very early 2010 thing to do" and not having any real use case in the "current world of real HMD's". Like you I live in the current world of real HMD's. My use case is enjoying playing quake on the smallest waterproof device possible. Q1 on the apple watch can be considered a novelty, yes, but I would like to take it as far as possible, because I like retro and repurposing and I like the size of the apple watch compared to a quest.

Of course, QuakeVR on Q2 exists, Apple HMD's are on the radar and I could link my android phone with a lightweight HMD and play quake that way. Why bother? Good question


I give you the water proof aspect, though I suppose a modern phone would get you there as well. Now, if Apple ever releases a watch with a super high resolution light-field display, well, in that case I'll glue that thing to a set of sunglasses myself.


Wow, that is interesting idea, thanks! But as someone else already said, I think the nausea would be too strong.


There seems to be some latency on the gyro?


I wonder why the binaries can not go on the app store? Is it because of the assets?


Exactly. Code is OSS, but assets are still copyrighted.


[deleted]


Remembering : In the 90s, when it came out, I couldn't run Quake 1 on my desktop PC as it required 6 MB of RAM, and I had only 4 MB installed.


What year was that? I got a Pentium 1 166mhz with 16MB of ram in 1995. Cost my parents $3000. Later we upgraded the RAM and for a while I was running a weird 80MB of RAM configuration (16 + 64).


Any Pentium would have been considered high end when Quake came out. Most people were still running 486s, and it caused some consternation that Quake practically required a Pentium to run smoothly (as the renderer’s inner loop was written to exploit the P5’s superscalar architecture).


A friend had a DIY water-cooling system with a bucket and some ice to play quake on an over clocked 486


$3000 in 95 was a hell of a lot of money. I don't think my parents ever had that much in savings. $3k now is a hell of a lot of money, my parents still don't have that much in savings and I'd really hold out for a stellar upgrade in that range.


>> $3k now is a hell of a lot of money

Where do you live? A smartphone is $1000 or more.


Living in Germany I'd definitely still qualify $3k as a lot of money. Median net wage per month comes out to around $2200, so that's almost one and a half months of work for the average person, ignoring all other expenses.

Once you consider inflation since '95, it's probably closer to $6k of today's USD. Of course it's still possible for someone to have that much in savings, but to be able to spend it (or justify spending) on a computer is something else entirely.

Now obviously "a hell of a lot" is a very subjective term. Where would you say it starts?


OP here. I pretty much agree with your assessment here, though coincidentally enough I'm working for a German company and getting paid in CAD in Canada.

I grew up relatively poor, I've come to realize, so I'm relatively frugal by nature. In a bit of a contrast to those parents I mention, I think I'm good at assessing the value I'd get out of something. So while I'm frugal, I'm happy to spend what I think is worthwhile on something. I'm currently working on a ~$3k MBP, and it serves me tremendous value, but I think the demands of the thing would need to dramatically increase, or whatever is announced next would need to be an intense upgrade for me to consider it.

and I am somewhat close, but recently trying to fix my damn beat up gaming pc that I bought off the street has reminded me how good the MBP is, even though it's 2019 and a lower specced model. No blue screens, no driver issues, the luxury of a refined OS, and it's fast. Docker is really pushing the limits of this thing though.


Not OP, but traditionally I had £400 as the expenditure price-point you really didn’t want to make a mistake with. (Oddly enough, because it was a new laptop budget figure a couple of decades ago - and you couldn’t afford to buy a lemon)


OP here. I think that's not too far off, but it depends on the purchase. For a phone it's basically $500 to solve all of my uses for the thing, and not that much of a risk and no debt. If I break the thing in half, it's a $500 hit over the course of about ~3 years instead of over $1000.


I wouldn't necessarily deride someone for spending $1000 or more on a phone, but to me that's a silly allocation of funds. I'm using a Google Pixel 4a that I got a few years ago for around ~$450 CAD (Canada). If I couldn't get one for that price, I'd go to the used market, and if that yielded nothing worthwhile, I'd pick something super shitty until something around $500 came up. I just can't imagine how I'd get $500 more value out of a phone personally.

That said, if there was a profoundly impactful advancement in technology that did cost $500 more, then sure I'd consider the investment, but it would be a hesitant choice.

For the difference between my current equivalent phone brand new, and anything $1000 or more, I can spread that cash modestly over some of my other gear and get pretty impressive results out of it. In this case, I happen to be spending probably $500-700 CAD this month on misc surprise things that have come up. It'll mean dramatically improving the performance of both my haggard gaming pc that I got for $10 originally, and my bike that I got for $250, and a small trip out of town.

If I wasn't doing that, I could take that cash and spend it on a flight back home, or get the flight anyway and spend the cash on renting a room somewhere for a week or two.

For the PC, going from a 5400 rpm boot drive that I harvested out of a PVR, to a modest ~500gb WD SSD cost around $60 and makes the computer wildly more functional. Likewise, the power supply literally exploded (popped with sparks and fumes) so it could be replaced with another ~$120 cad


In the same way that "a car" is $90k or more. (And yes, for plenty people a smartphone is an expensive, major purchase)


Absolutely. fwiw, I also would have a very hard time even rationalizing a $20k CAD car purchase.


A smartphone can be had for $100 or less. Only top-of-the-line smartphones are $1000 or more. Even expensive brands like Apple offer phones for a bit over $400.


Modern flagship phone prices are ridicorous though. Half of them are more than a nice midrange laptop!


Ya, I get the luxury of a flagship, but damn is that not something I'm about to drop cash on.


You can get a new iPhone for around $400. Other brands can be much cheaper.


You can get a secondhand iPhone 7 for much less, and I’d (genuinely) wonder if the newness, missing features (or difference in their quality) are really worth the extra $850?


Having just upgraded from a 6s to an 11, I’d say… meh? The 11 is nice, I guess, but apart from having a new battery and being slightly more responsive (and on the downside, no fingerprint scanner and no headphone jack) it’s functionally pretty equivalent.


I've never owned an iPhone, but this is basically the framework I operate within when thinking about most purchases, but especially phones. If the question of what it offers me is tenuous at best, I don't have enough extra money to burn that I'm going to spend anything close to that on upgrading, and usually never upgrade, instead just replacing one that was either stolen or broken in a horizontal purchase within a budget of around $500


Security updates, you know... Apparently it's over this fall, so can't save sensitive data on that.

Though I agree: I can't think of someone who _needs_ a $1000 smartphone.


Ah yes, had it running on my Pentium 60 MHz, 16MB RAM in '95. Didn't run on highest specs, but performance was good enough in SVGA. 60MHz single core and having a floating point unit in your CPU was considered acceleration.


60fps!? What a luxury. Quake 1 runs simulation at 10Hz, and I don't think they've expected more than 20-30fps.


Wasn't it released in mid '96?


You might be right. Anyway, I played it shortly after it was released and it was the mid '90s.


[flagged]


If you're having fun why not? Solving such a technical challenge is incredibly satisfying.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: