[HN Gopher] New 3D FPS released for 1979 Atari 800 ___________________________________________________________________ New 3D FPS released for 1979 Atari 800 Author : legoxx Score : 320 points Date : 2021-11-03 14:13 UTC (8 hours ago) (HTM) web link (atari8.dev) (TXT) w3m dump (atari8.dev) | Minor49er wrote: | The theme song linked at the bottom reminds me a lot of the | System Shock 1 theme song | | https://www.youtube.com/watch?v=uZRuDOqIIBA | spicybright wrote: | I have so much respect for people that take on challenges like | this. | | It might be "useless" in a utilitarian sense, but I think of it | as an incredible art form. | buescher wrote: | To be pedantic, it needs a 64K machine like the 1982 1200Xl or | 1983 800XL so would not run on the (max w/o 3rd party mods) 48K | Atari 800 from 1979. But yes, wow! | protomyth wrote: | Both the 400 and 800 had upgrades to 64K. The Atari 400 | required some soldering and the 800 was simply a plug-in | expansion. | CWuestefeld wrote: | Not so. Behind the two ROM cartridge slots there were three | slots for RAM expansion, each being 16KB. | protomyth wrote: | Yeah, the 16KB cards were from Atari and the banked | switched cards were from third parties. Antic Magazine | (named for the chip) had a lot of ads in the back for | those. | karmakaze wrote: | That's for the Atari parts using linear addresses. There | were numerous third-party memory expansions that used bank | switching as in the XL's to get much more. I wrote Point- | of-Sale software using 128K banked expansion for an 800. | | I also had my 400 upgraded to 48K with a mechanical | keyboard. | michaelcampbell wrote: | IIRC (and I may not), I upgraded my 400 to 64k, and a "real" | keyboard. But I think you could only address 48k of it at once | or something hinky. | buescher wrote: | Yeah, you had ROM space (and potentially cartridge ROM space) | eating into your 64K on all the models and had to bank-switch | for anything more than 48K IIRC. With a BASIC cartridge in | place you'd lose another 8K. | | Also I don't recall any of the 400/800 3rd party upgrades | being compatible - they used a different bank-switching | mechanism - with the later XL/XE models. | michaelcampbell wrote: | "bank switching" sounds familiar, so I'm pretty sure my | memory of 64k is correct then. I can't say I understand | what it means, but I remember something of that term at the | time. | bluGill wrote: | You group your memory into groups of 16k (could be other | sizes, 16k is what I recall but it has been years). Then | you have a switch that you can program the switches | between groups (also called banks). You can only access | one at a time, but you can switch between them very fast. | It was possible to get up to 5 MB of memory that way, | even though you could only use 64K at a time. | protomyth wrote: | Where did you get a real keyboard for the 400. I searched and | searched and could not find one. I was so envious of the | Timex / Sinclair folks who had a nice replacement. | michaelcampbell wrote: | I can't remember but it was designed for the 400. This was | circa 1983. | atum47 wrote: | I tried to write a raycast [1] in JavaScript once, I used lines | instead of the traditional grid, but it end up messy and with | weird texture artifacts. Still, I would like one day to come back | to this and do a proper job. | | I'll download the game after work and see if I can run it under | an emulator, but the graphics and music alone seems wonderful. | | 1 - https://github.com/victorqribeiro/myRaycast | greggman3 wrote: | This isn't a complaint, it's a suggestion. Would be cool if I | could just run it in my browser like https://www.2600online.com/ | pixelpoet wrote: | Having written realtime ray tracers in the classic demoscene | style on e.g. 300 MHz Pentium 2 Celeron (the original one with no | cache, that overclocked to 450-550 MHz), I sometimes wonder about | how cool it would be to open source a modern rendering engine | around the time of the first Pentium 3 with SSE, in 1999. | | You could completely revolutionise computer graphics on that era | of hardware, with the view to increasing vectorisation, and | probably strongly steer it towards ray tracing instead of | rasterisation (even skipping over the local minimum of k-D tree | methods, the introduction of Surface Area Heuristic and | eventually settling on modern BVH building and traversal). | [deleted] | codedokode wrote: | The game uses ray casting, not ray tracing. Ray casting is when | you send a ray once for every column of pixels to get a | distance to a wall. Also, if the walls are only horizontal or | vertical the calculations get simpler. | | Also I wonder how you can achieve clock frequency like 300 MHz | without a cache. Shouldn't CPU stumble on fetching every | command? | dahart wrote: | > The game uses ray casting, not ray tracing. Ray casting is | when you send a ray once for every column of pixels | | Both 'ray casting' and 'ray tracing' are overloaded terms, | the distinction isn't as clear as you suggest. You're talking | about 2d ray casting, but 3d ray casting is common, and means | to many people the same thing as 'ray tracing'. Ray casting | "is essentially the same as ray tracing for computer | graphics". https://en.wikipedia.org/wiki/Ray_casting | | There's also Whitted-style recursive ray tracing, and path | tracing style ray tracing, but ray tracing in it's most basic | form means to test visibility between two points, which is | what ray casting also means from time to time. | giantrobot wrote: | The Covington Celerons had an L1 cache but no L2 cache. The | Pentium II of the era had an off-die L2 cache. So the | accelerometer was a binned Pentium II without any L2 cache. A | later model of the Celeron was released with a 128k L2 off- | die L2 cache. | | At its base clock speeds the Celerons were middling chips. | But since they readily overclocked you could get them up to | 450-466MHz. They wouldn't be equivalent to the same speed | Pentium II (because of no L2 cache) but they punched above | their weight for the price. | romwell wrote: | First time reading about BVH. Sounds like Kirkpatrick's | hierarchy, but in arbitrary dimension. | | What's the advantage over BSP/kD-trees/octrees? | | And what do you mean by rasterization - we still have to deal | with pixels in the end, so it has to happen somewhere? (..I'd | love to play with a color vector monitor though!). | pixelpoet wrote: | > What's the advantage over BSP/kD-trees/octrees? | | With BVH, the partitioning is fundamentally over lists of | objects rather than space; if you split by space, you | can/will have objects on both sides of the splitting plane, | leading to duplicate references. | | Doing it by lists means there are no duplicate references, | however the combined bounding volumes can overlap, which is | to be minimised, subject to the Surface Area Heuristic cost. | It winds up being something like a quicksort, although for | the highest quality acceleration structures you also want to | do spatial clipping... this is an extremely deep field, and | several people have spent considerable part of their | professional career to it, for example the amazing Intel | Embree guys :) | | It also happens to work out best for GPU traversal | algorithms, which was investigated by software simulation | quite a few years ago by the now-legendary Finnish Nvidia | team, and together with improvements on parallel BVH building | methods and further refinements is basically what today's RTX | technology is. (As far as I'm reading from the literature | over the years.) | | Here's a fundamental paper to get started: | https://research.nvidia.com/publication/understanding- | effici... (Note that these are the same Finnish geniuses | behind so many things... Umbra PVS, modern alias-free GAN | methods, stochastic sampling techniques, ...) | t8sr wrote: | Octrees divide space into regular sized chunks. BVH divides | space into chunks of varying size, but with a balanced | population of bodies in each. The idealized BVH divides the | population by 2 at each level. | | Compared to octrees, BVHs deals well with data that's | unevenly distributed. At each level you split along the axis | where you have the most extent. Finding the pivot is the | interesting part. When I recently implemented a BVH from | scratch, I ended up using Hoare partitioning and median-of- | three and it worked really well. The resulting structure is | well balanced, splitting the population of bodies roughly in | half at each level, and that's not even the state of the art, | that's just something my dumb ass coded in an afternoon. | dahart wrote: | > And what do you mean by rasterization - we still have to | deal with pixels in the end, so it has to happen somewhere? | | At a high level, you could think about it as where in your | nested loops you put the loop over geometry (say, triangles). | A basic rasterizer loops over triangles first, and the inner | loop is over pixels. A basic ray tracer loops over pixels, | and the inner loop is over triangles (with the BVH acting as | a loop accelerator). Just swapping the order of the two loops | has significant implications. | q_andrew wrote: | I was under the impression that the theory was there but the | hardware was not. Like, rasterization was a necessary evil | because it gave better results more quickly (and artists needed | that feedback). | fistynuts wrote: | Yes, absolutely right, and for games it was the only option | with no fast floating point and very limited memory. | chaganated wrote: | i'm not surprised. atari 800 was an exceptional machine. great | work on the game though. | jhbadger wrote: | Yes, it had a lot of custom chips, and some of the same people | (like Jay Miner) who worked on the Atari 800 design later were | involved in designing the Amiga which likewise was based on | custom chips. | legoxx wrote: | there were 3 custom chips (ANTIC, GTIA and POKEY) 1 semi- | custom (SALLY was a VERY MINOR modification of 6502) and 1 | common industry chip (PIA). I would not say exactlly "lot of" | ;-) | verifex wrote: | Download link isn't working, for anyone that is trying to | download it. | legoxx wrote: | It is working very well for me Verifex. Please try | https://atari8.dev/final_assault/Final%20Assault%201.0.zip | mysterydip wrote: | I was expecting a very basic raycaster, no textures etc. This is | seriously impressive! | buescher wrote: | I was expecting it to need 128K! | mypalmike wrote: | Yeah just updating every pixel randomly at 20 - 30 fps is a | feat on the 8 bit Atari, nevermind with a raycaster. | GekkePrutser wrote: | Wow this looks amazing. Will give it a try on my real 800XL. | lizknope wrote: | I had an Atari 800 in the early 1980s. The games were close to | the arcade version and with the BASIC cartridge we could write | programs and save them to a cassette tape drive or floppy. | | https://en.wikipedia.org/wiki/Atari_8-bit_family | | Jay Miner was one of the main developers who later went on to be | the "father of the Amiga" | | https://en.wikipedia.org/wiki/Jay_Miner | r00fus wrote: | Was so jealous of my friends that had an Atari 400 even, the | 800 was legendary. | varelse wrote: | 1982 is calling but expects to be connected to some HN pedant | "helpfully" pointing out that you can't actually shoot stuff. | | https://youtu.be/j4OLnrwLcJA | buescher wrote: | The Lucasfilm games ('84-'85) blew my mind at the time. | Fractalus, Ballblazer, Koronis, Eidolon. | varelse wrote: | Hot take: The Eidolon is more impressive than this effort and | it works with the technological limitations of the platform | rather than against it like this does. | | All those LucasArts games were stunning for the time and | Rescue At Fractalus has a genuinely terrifying experience | within it not replicated IMO until the first time you hear | "Anytime..." in Alien vs Predator... | kingcharles wrote: | That's incredible. Was this the earliest instance of raycasting | in the wild? | | Good intro to raycasting for those interested: | https://lodev.org/cgtutor/raycasting.html | varelse wrote: | I _think_ it is. But... But PLATO Moria might be the OG of 3D | in this space. | | https://en.wikipedia.org/wiki/Moria_(1978_video_game) | ThomW wrote: | I had their follow up game Capture the Flag on my Atari 800. | Same engine, but slightly upgraded graphics. Fun game! | | https://moegamer.net/2019/03/05/atari-a-to-z-capture-the-fla... | varelse wrote: | I once walked out of a John Carmack SIGGRAPH talk when he | opened with claiming he invented the FPS because of Ultima | Underworld, The Eidolon, and Way Out... | | Like him otherwise, but nope he didn't invent it... | legoxx wrote: | Slovak group GMG released a full featured FPS for 40+ year old | computer (64kb of ram, 1.79Mhz 6502) | | Features: | | - raycaster engine running at 25 - 30 FPS | | - animated textures | | - lighting system | | - destroyable walls | | - automap | | - 3 enemy types | | - final boss | | game is fully playable in Altirra emulator | | video: https://www.youtube.com/watch?v=lRd3MucaRoU | | homepage: https://atari8.dev/final_assault | | discussion: https://atariage.com/forums/topic/326709-final- | assault-new-g... | aliswe wrote: | the FPS is really smooth - and the floating point (?!) | calculations of the raycasting engine seem to be totally "on | point" ?!?! | flatiron wrote: | Comment a bit of a limitation of the ray casting: | | https://atariage.com/forums/topic/326709-final-assault- | new-g... | | simply amazing what they did. could you imagine if this came | out in the 80s?!?! | GekkePrutser wrote: | Yes this would have been mind-blowing. | | Ps there was a game that had a similar FPS view in those | days. It was a maze game with polygon graphics but no | textures. I forget the name. No shooting though! | Thoreandan wrote: | * Mercenary: Escape from Targ (Novagen) | http://mercenarysite.free.fr/mercframes_graphic.htm "open | world" vector FPS/RPG, fully RAM-resident, in 48k & 64k | editions. | | * Alternate Reality: The City (Datasoft/Paradise | Programming) FRPG with 90-degree turns, rendered | walls/doors as scaled textures between the animated | backdrop and foreground NPC sprites. | | I wrote an FAQ as a kid for Mercenary for local BBS' - I | think I discovered at least 3 victory conditions. :^) | laumars wrote: | There were a few. | | I had Sultans Maze[1][2] and Articfox but plenty others | existed too. | | [1] https://en.m.wikipedia.org/wiki/Sultan's_Maze | | [2] https://youtu.be/af1CfayG5Ec | | [3] https://en.m.wikipedia.org/wiki/Arcticfox | mywittyname wrote: | So I was curious about how the Atari 800 handled floating | point calculations. As it turns out, Steve Wozniak helped | develop the FP routines for the 6502. | | http://archive.6502.org/publications/dr_dobbs_journal_select. | .. | codedokode wrote: | I doubt there are any floating point numbers because FP is | very slow to emulate (for example, just to add two numbers | you have to shift mantissas and 6502 has no fast way to do | it). If I was writing a game for an 8-bit CPU, I would use | fixed point numbers (for example, 8.8 numbers which use 8 | bits for integral part and 8 bits for the fractional part, | or maybe 10.6, or 12.4 numbers). | | 6502 cannot multiply or divide (division is a costly | operation even on modern CPUs) so I would use adding or | subtracting logarithms for this purpose. 12-bit precision | logarithm table requires just 8 Kb RAM (and you can get | 13-bit precision with interpolation). | | The disadvantage of this approach is that every time you | convert a number from linear to logarithm or vice versa you | get approximately up to 0.3% error (for 12-bit logarithm). | So multiplying or dividing several numbers in a row is | fine, but if you have to alternate multiplication with | additions you will accumulate an error. So I would look for | formulas that avoid this. But for a game a little error in | calculations is not noticeable. | | Also one might think that the most time-consuming part for | pseudo-3D game is math and calculations. I doubt that. The | most of CPU cycles are usually spent in rasterisation and | applying textures. Is is easy to calculate positions of 3 | vertices of a triangle, but it takes a lot of time to draw | it line by line, pixel by pixel, and if you want to have | textures this time can be multiplied 5x-10x. | brianpaul wrote: | IIRC, the Atari ROM routines used a different 6-byte BCD | floating point format. | legoxx wrote: | I can assure you that no BCD routines (nor Woz's nor | Atari's) were hurt during production of this game. They | are really slow. You need to use all kind of tricks and | cheats when creating 3d game on 8bit machine and all | needed calculations are precalculated in lookup tables. | ciroduran wrote: | I love that the credits mention the raycast tutorial by Permadi | https://permadi.com/1996/05/ray-casting-tutorial-table-of-co... | | I used this tutorial in the 2000's to write a raycaster myself in | C using Allegro. It's wonderful that these tutorial are still | useful so many years after they've been written. | joshspankit wrote: | If this had been released when the 800 was new, it would have | _blown people's minds_. | wombat-man wrote: | Here's a video: https://www.youtube.com/watch?v=92K9wnk_4Cw | | Pretty interesting but it's a little hard to make out what's | going on sometimes. | laurent123456 wrote: | If you reduce the window to a very small size (or look at your | monitor from a few meters away) then it's actually easier to | see what's going on. | buescher wrote: | I wonder how it would look on a CRT TV over RF. | kingcharles wrote: | Thank you. I can't help but feel the wall textures have screwed | the whole thing. It might be that they've tried to just be | _too_ clever with this and a less complex solution (flat | shading, gouraud shading) would have worked better. | wombat-man wrote: | Yeah I had the same thought. I played a few FPS on my ti-83 | back in the day, it was black and white, and really it only | drew the edges of the walls and outlines of people. But I | could tell pretty well what was going on in comparison to | this. | | This atari game might also look a lot better on a crt or | something. | VeninVidiaVicii wrote: | It's difficult for me to tell if the player is looking at a | wall or a hallway... | memco wrote: | It's a bit unclear what's demoing visuals vs. gameplay. It | seemed often that when the player reaches a corner, instead of | turning the corner and continuing down the corridor the player | would sometimes turn into the corner and wiggle. I wonder is | there something about corners that's a bit janky or is that | just a habit of this particular user that they sometimes just | turn left and right randomly particularly in corners? ___________________________________________________________________ (page generated 2021-11-03 23:00 UTC)