
Interactive 3D ASCII scenes - aqi
https://yeahpython.github.io/game/game.html
======
leni536
About WASD controls and alternative layouts: apparently JS supports key codes.

[1]
[https://www.w3schools.com/jsref/event_key_keycode.asp](https://www.w3schools.com/jsref/event_key_keycode.asp)
[2] [https://keycode.info/](https://keycode.info/)

Edit: Apparently it is deprecated:

[3] [https://developer.mozilla.org/en-
US/docs/Web/API/KeyboardEve...](https://developer.mozilla.org/en-
US/docs/Web/API/KeyboardEvent/keyCode) [4] [https://developer.mozilla.org/en-
US/docs/Web/API/KeyboardEve...](https://developer.mozilla.org/en-
US/docs/Web/API/KeyboardEvent/which)

Also there doesn't seem to be a way to detect the user's preferred layout
before pressing any keys, that would make printing the instructions hard.

~~~
Aardwolf
The linked article [3] links to KeyboardEvent.code which is not deprecated and
still supports physical layout

------
daxterspeed
Since the movement speed is tied to requestAnimationFrame, the speed of the
game changes with the update frequency of the user's monitor. Since all my
monitors are at 144Hz this game is ridiculously fast for me.

~~~
kakarot
To clarify, there's nothing wrong with tying your movement to
requestAnimationFrame() and it is in fact encouraged, but you must modulate it
by the frame delta.

~~~
giornogiovanna
That is only true if you write your own physics. Otherwise, your physics
framerate should be fixed, usually at 30FPS. Many physics engines don't
support variable timestep, and in the ones that do, it can lead to instability
and general weirdness.

~~~
davedx
Weird statement. All games and game engines I've worked with have used frame
deltas to modulate everything from animation and movement to AI and UI's. I've
worked on mobile games to AAA games.

Can you link to a physics engine that doesn't support variable timestep?

~~~
giornogiovanna
You definitely use frame deltas when updating things (I mean, how else would
you know how much time has passed), but when doing physics, that frame delta
is constant for the lifetime of the simulation.

Box2D User Manual > We also don't like the time step to change much. A
variable time step produces variable results, which makes it difficult to
debug. So don't tie the time step to your frame rate (unless you really,
really have to).

[https://stackoverflow.com/a/21273467](https://stackoverflow.com/a/21273467)
(Bullet) > maxSubSteps: Should generally stay at one so Bullet interpolates
current values on its own. A value of zero implies a variable tick rate,
meaning Bullet advances the simulation exactly timeStep seconds instead of
interpolating. This feature is buggy and not recommended.

Edit: The archived version of the (404-ing) Bullet Wiki also says "Bullet
maintains an internal clock, in order to keep the actual length of ticks
constant. This is pivotally important for framerate independence. The third
parameter is the size of that internal step."

------
fatiherikli
Love it! Just a note, it is not actually 3D, it is an isometric representation
of a 2d scene, as same as Monument Valley. Game devs call it 2.5D :)

~~~
chrisseaton
Why doesn't it count as 3D? I seem to be able to move the character in 3
dimensions. Some parts of the floor are higher than others. What else does 3D
mean?

Could you represent this map using just two components for each point? I don't
see how.

~~~
bscphil
I believe usually "3D" implies that some change of perspective is possible,
e.g. by changing the orientation of the camera.

------
willvarfar
The github user gave me hope it would somehow be a python-in-the-browser thing
somehow.

But I can quell that disappointment and say how cool and exciting this is (if
your target gameplaying public is the kind of people who hang out on HN; those
who haven't seen a terminal aren't going to grok the graphic style).

Its years since I've done a game jam like ludum dare, but I hope some of HN
get inspired to enter that kind of thing! Good luck and happy coding!

------
luminati
Woke up this morning feeling quite crappy. Then saw this. All faith in
humanity (And the internet) has been restored. Thank you! [On a sidenote: How
would one go about learning to build this? Any learning resources on
understanding all the math and physics behind this?]

~~~
aqi
This was built through incremental edits from a Python proof-of-concept, which
you can see here: [https://github.com/yeahpython/ascii-
renderer/blob/master/fun...](https://github.com/yeahpython/ascii-
renderer/blob/master/funblocks.py) It doesn't have any real physics, but
reading through it might help reveal how the rendering works.

For the physics, I'm basically colliding against a grid of tiles, so this
might be a helpful tutorial to do the same:
[https://jonathanwhiting.com/tutorial/collision/](https://jonathanwhiting.com/tutorial/collision/)

~~~
luminati
Thank you!

------
miguelmota
Wish it had mobile touch event support to experience it. Looks interesting

------
Jenz
This is something out of my wildest game-dev dreams

------
khazhou
Very cool. But feedback in case developer is here: the jumping physics could
easily be much smoother and prettier, and the surface feels icy and hard to
control.

------
ArtWomb
Mind bogglingly awesome. I was just dreaming about a 3D ASCII engine. But I
would have rendered to planes and used billboarding ;)

------
edhelas
Why WASD ? A lots of people on the Internet doesn't have a Qwerty keyboard.

~~~
scotty79
Wait. What do you use for PC games by default in those countries?

~~~
valesco
Big games already have the right bindings, the others have to be configured.
Sometimes it is not possible, and we just pass.

------
guessmyname
Great job! I’m amazed.

The game reminds me of Monument Valley [1].

[1] [https://www.monumentvalleygame.com/](https://www.monumentvalleygame.com/)

~~~
nielsbot
also Edge Extended
[https://en.wikipedia.org/wiki/Edge_(video_game)](https://en.wikipedia.org/wiki/Edge_\(video_game\))

------
j1vms
Now multiplayer this gem à la agar.io/slither.io and maybe pull in a little
revenue through ads.

------
IvyMike
Reminds me of the old C64 game "Realm of Impossibility"

[https://www.youtube.com/watch?v=LdGBA0FG7Gk](https://www.youtube.com/watch?v=LdGBA0FG7Gk)

------
sangnoir
I'm not sure if second level is glitching for me, or if it is supposed to be a
3D representation of a hypercube - traveling in any direction shows more cubes
with parts carved out

~~~
starshadowx2
It's supposed to be like that, just jump into one of the cubes.

------
venuur
Looks cool, but I can’t try it out on mobile. Good job regardless!

------
titanix2
Would be better if it supported arrows in addition to WASD for controls: it is
literally unplayable internationally.

~~~
brujoand
It does support arrows though. Worked fine for me at least.

------
big_paps
This is crazy cool. How do you create the maps ? After all, they are 3
dimensional not flat !

------
idid
would love to see how this could transform into a rougelike (or a rougelike
with the same aesthetics). really cool job! will poke at the source.

~~~
all2
Inventory, items, enemies, weapons, towns, crafting, destructible levels
(could a voxel based system work in ASCII?), ...

Someone farther up linked to Monument Valley [0], and that has a really
pleasant rotating mechanic so that the player can have more than one view of a
level / set-piece.

A little wave-collapse [1] function for automated level building.

I suppose I could go on. This does fall into the trap of "why don't we just
... ?" which I don't like. But I also like to dream a little.

