Same! It works flawlessly on mobile as well, 60 fps without any frame drops on my iPad at least. Tap and drag to move, tap with an extra finger to jump, tap edge to rotate. Really cool stuff!
Edit: the reflection in the water is a nice touch.
This is a really cool demo - amazing it works so well. It's all unminified JS which is a breath of fresh air these days.
Some commenters are asking how it gets such good performance and whether it would work on retro hardware. It seems it uses WebGL (and fails without it), so likely it depends on a 3D engine for at least some of the rendering process. Still, WebGL seems to be used for only a small part of the rendering pipeline.
If you want to play with arbitrary rotations instead of being locked to 60-degree increments, punch this into the developer console:
You just successfully disproved my earlier assumption that this used optimizations specifically for isometric views! It actually uses the WebGL for the 3D part too
(having said that, such optimizations would still have helped in the hypothetical case one might have wanted to implement this on old hardware)
Also, on a desktop you can use the browser zoom (via the menu) to get it to increase the font size. I managed to get my HD screen to show 96 x 54 characters, which comes close to the resolutions on old DOS terminals I think. Now if only it came with a CRT shader, like this one by Timothy Lottes:
Performance is terrific! Can you explain a bit how the renderer actually draws to screen? Looks like you create a mini texture per "font" and then draw as a list of quads per pixel?
Also I noticed some websocket netcode up front. Is a multiplayer classic RTS in the works? ;)
the DF UI is a big "fuck you and fuck you again in yo face" design. this is coming from vim/emacs user (no probs with modality, long chords, etc). also coming from a user, who gladly enjoys text only games. But for DF a good UI is a necessity, or else it gets in your way. Your fun and productivity is obsctructed by the UI, most of gameplay is focused on navigating through UI, not playing.
my 2ct ¯\_(ツ)_/¯
Also why I find Factorio so enjoyable - when you can zoom out and admire your creation acting for a while. If you zoom out in DF your eyes start to bleed.
You are not the only one. "Says more about you then it..." blah, blah, blah. The fact is, Asciicker is not a word, is absolutely weird phonetically and asslicker is a close appearing viable compound word. Good for those so pure of mind they do not see it.
Seriously? Any font that only separates the line from the dot with 1 or 2 pixels. Especially if you're only glancing long enough that a c could be mistaken for an l.
Yeah, seriously. I can only remember problems discerning characters with the I, l, and 1 in Ariel. Unless there is a kerning problem, I've never had trouble discerning lowercase i and l. Just like I've never had issues discerning b and h. They have similar strokes, but are clearly different.
Our minds try to fit uncertain patterns into familiar shapes, like the classic email forward: "Aoccdrnig to rscheearch at Cmabrigde Uinervtisy, it deosn't mttaer in waht oredr the ltteers in a wrod are, the olny iprmoetnt tihng is taht the frist and lsat ltteer be at the rghit pclae. The rset can be a toatl mses and you can sitll raed it wouthit a porbelm. Tihs is bcuseae the huamn mnid deos not raed ervey lteter by istlef, but the wrod as a wlohe."
How slow would something like this be, had someone tried to make it for a 386/486 era computer? Like, could have this technique been used effectively for 3d games of that era?
Well, the engine already uses a lot of tricks from that era as far as I can tell: it's isometric, so "fake" orthogonal 3D, and uses sprites with different angles to view them from under the hood for the buildings and trees. It then renders all of this to ASCII with WebGL, which I presume generates a sprite-sheet.
Also keep in mind that games like Zarch[0][1] (aka Virus[2]) already existed in 1987. The ASCII actually hides the fact that we have a low rendering resolution, which may help a lot here.
So I think the main limitation might be the tricks required to render to ASCII, and time it takes to display those ASCII characters. Assuming the implementation tries to make a pure text-based renderer instead of a bitmapped one.
Searching on pouet.net for "ASCII" doesn't reveal many demos[3], but the few that exist look pretty cool[4][5]. They lack separate foreground/background colors though, which bring up one important point: what terminal are you targeting?
Anyway, I'm pretty sure there are more demos out there that basically render to the console but I don't remember the names right now so can't find them.
Not necessarily, depending on what you mean with 3D (although one of the other comments definitely proved it).
If you mean "uses WebGL to render 3D polygons", then there are other possible solutions, like the isometric approach I mentioned before. Given that the developer wants to target linux terminals[0] he is likely to come up with his own rendering scheme, probably not unlike the old software 3D engines of the late eighties/early nineties (like the aforementioned Zarch, or later Bullfrog games like Powermonger and Syndicate 2)
Shrink your browser window until you see this running at about 80x70 characters, then ask your second question again. Modern displays are a lot higher resolution than SVGA.
This is lovely. For the next version, I'd enjoy the ability to change the vertical angle of the viewport. I can't tell if the fixed angle is a cheat to reduce maximum draw distance, or an artifact of "haven't coded it yet".
Yes, I wanted to see what kind of communication protocol he used and there isn't any.
Using the chrome dev tools shows no communication outside of the very few JS files and assets the game loads (very impressive by the way).
Seems like one turn is 60°.
Is there a specific reason why it isn't 45° or 90°? Is there maybe some advantage to the 60° in regards to the ascii rendering?
A Commodore 64 or TI-994A could. Probably not at 60fps, but it could be done. It would definitely need to be done in assembly, or with a modern compilation tool, like cc65.
The sprites would have to be hardcoded, instead of being interpreted from images. You would also have to be extra smart about what you're calculating/rendering, but keep in mind that your screen is probably only 40 characters wide, so the amount to render is exponentially smaller.
You'd be amazed what can be done on those older computers when the developer understands how the processors work on the ground level.
At the very least it'd be an impressive tech demo for something like the Commander X16[0], a new 6502 based computer running at 8mhz.
> A Commodore 64 or TI-994A could. Probably not at 60fps, but it could be done. It would definitely need to be done in assembly, or with a modern compilation tool, like cc65.
Well, I was programming on C64 way back, and am pretty much aware what the system can and can't do. Sprite crunchers, xor filled vector fillers, etc. are familiar to me.
Cc65 would only hurt the effort. You need a full spectrum of assembler tricks to get any kind of performance out of C64.
C64 (PAL) has just 19k clock cycles available per 50 Hz frame. Since fastest instructions are 2 cycles, that's at most 9.5k instructions. Realistically closer to 5-7k. No multiply (hello table lookups!), no divide and not even 16-bit add.
Or in other words, it takes maybe 10k+ cycles for C64 to just "memcpy" 1000 bytes of characters!
You could implement something like Asciicker in a limited demo... but it'd be more like a souped up video player. Which, sadly, is a rather common technique in recent C64 demos, but understandable due to the limitations.
There were realtime 3D games on 8-bit machines. The framerates were atrocious, and they used wireframes or simple filled polygons, but they were also higher-resolution. The C64's character display is 40x25, so that's only 1000 "pixels" per frame.
I think it could be done, with reasonable sacrifices.
I don't think anyone's saying you could do a cycle-perfect emulation on 8-bit. The framerate would be low, the terrain mesh would have to be much simpler. But The Sentinel[1] ran on C64 with acceptable framerates (better than a lot of 3D games with much simpler graphics). I think you could manage a perfectly satisfactory port of Asciiker, even with rotation.
Are you joking? The Sentinel takes 6-8 seconds to render a scene. The rest is just very clever 2D-scrolling and selective object insertion and removal.
Geoff Crammond (author of The Sentinel) wrote another game that's graphically way more impressive in this context: C64 Stunt Car Racer. https://www.youtube.com/watch?v=KMgjmIW8fd8
This is not to say The Sentinel wasn't an amazing game in all aspects, including graphically. It certainly was.