
Show HN: Simple 2D car physics with JavaScript - pkstn
https://pakastin.github.io/car/
======
minikomi
Happy new year, everyone

[https://imgur.com/a/AIxvWUh](https://imgur.com/a/AIxvWUh)

~~~
aricblunk
I had a good one, but I moved it to my other monitor and it got cropped
because ShareX doesn't know about HDR and blows out white pixel color ranges,
but you get the idea
[https://i.imgur.com/cYbxStI.png](https://i.imgur.com/cYbxStI.png)

~~~
krilly
Can we all stop using imgur now? It's been like an hour, one of those images
has been flagged as adult content and the other is 404ing. postimages.org is
good

~~~
benrbray
what do you recommend using instead? I don't know of any good alternatives

------
wiz21c
not 100% related but is there any good information source on the web to learn
how to build a good car simulator ? I've looked around and it's not very
helpful. Usually I end up with physics courses which always repeating the same
things. But not much about about : pneumatic (especially how they influence
the overall speed), independent wheel modelling, suspension, mass shift, frame
deformation, ...

I've checked the source code of torcs but it seems quite simple (although the
results are very convincing).

My goal was to model a (indoor) kart.

~~~
dahart
I was vehicle physics lead for a couple of games that sold very well, but are
not considered racing sims. Happy to answer questions as best I can.

What is missing from Torcs? It looks like a pretty good place to start, it has
independent wheel modeling, and suspension, and mass shift of the car (I
suspect it can handle mass shift of the driver if that’s what you’re after).

You can probably model frame deformation yourself by building a frame in a
physics engine out of flexible parts and/or joints, but I’m skeptical that
it’s worth the effort when modeling indoor karts, I’m not sure they flex
enough to matter, but it depends on exactly what you’re trying to do.

The car physics my team built was made on top of the Bullet physics engine, so
Bullet handled integration and collision dynamics, and we added transmission,
braking, suspension, wheels, etc.

It’s definitely worth asking yourself how good you need the simulator to be,
and how serious you are about this. It’s a multi-year project to get something
“good” and/or better than Torcs. I would tend to agree with their answer to
the FAQ question “should I start my own racing sim project?”
[http://torcs.sourceforge.net/index.php?name=Sections&op=view...](http://torcs.sourceforge.net/index.php?name=Sections&op=viewarticle&artid=30#c1_10)

~~~
wiz21c
That's a very good answer. Torcs is good but somehow the code is not 100%
clear to me (I didn't catch the independent wheels simulation for example).

Flexing frames maybe overkill, you seem better placed than me to estimate
that.

The FAQ answer address the difficulty of running an OSS project. It doesn't
address the difficulty regarding the physics (which, I understand, maybe even
more mindbending).

This is a hobby-level project. Nothing serious. I'm more interested in
understanding the maths and physics. Having watched hundreds of races (my kid
drives), I've seen behaviors which are pretty specific to karts (I guess). For
example :

\- driver mass shifts do matter (pilots constantly use them)

\- karts jump when taking corners too fast and too tight (they usually slide,
but when it's too much, they do jump, and decelerate...)

\- turning wheels left/right very fast is used to brake during pit stops.

but you're right, I may be out of my league here :-)

~~~
dahart
By all means, go for it, just do it with eyes open, it’s a lot of work.

The other thing I’d add is that the physics models is only half the battle.
The car and track geometry is critical to making an accurate simulation. It’s
easy to get wrapped up in the car physics and forget to deal with the angles
and bumps and materials and temperature of the road surface.

Cameras are huge too, if you do anything other than a fixed interior cam. A
naive follow can behind a car can totally undo all the physics.

Good luck!!

------
LoSboccacc
> multiplayer

before you venture there I suggest you move the control code outside of the
physic code, abstracting car inputs into a throttle, brake, steer structure
which is piloted by inputs elsewhere and feed into the physic update tick
along with the car state, or it'll make exceptionally hard to build input
prediction and lag compensation further on

~~~
pkstn
Multiplayer is live now!

~~~
glaberficken
funny that you give multiplayer to people and they will use any chance they
get to display creativity. look at all the pople trying to draw with their
tyres!

~~~
egeozcan
We all know what everyone is trying to draw.

~~~
pkstn
Penis is pretty popular :D

------
samwillis
Love it. Reminds me of playing with similar car simulations in Flash when I
was at school.

Now just make it isometric with collision detection and use maps built with
this (currently also on the front page):

[https://news.ycombinator.com/item?id=21923940](https://news.ycombinator.com/item?id=21923940)

~~~
lloeki
Serious vibes of Absolute Drift here, a very zen indie car game.

~~~
pkstn
Haha, yeah! But this one is open source ;)

------
niix
This is great and inspiring. Every few months I spin up a socket.io server and
attempt to make an RPG. I get about as far as having the character move around
the screen and then usually give up :D

~~~
Waterluvian
I do a lot of making games just for the fun of it. Good advice I heard is that
you're making a game _or_ a game engine. Pick which you care about most and
focus on that.

I found that phaserjs is a good engine but you still have to do a ton of stuff
that other engines give for free. Chiefly, the rich game dev UI that Unity,
Godot, Unreal, etc. all have. Don't be discouraged by the different languages.
Programming is like 15% of game dev and you can easily make a fun first RPG
using examples and stack overflow, and get comfy with a new language along the
way.

------
joemaller1
Project page:
[https://github.com/pakastin/car](https://github.com/pakastin/car)

------
eitland
That is totally amazing! Have played it for 5 minutes on my phone now :-)

~~~
pkstn
Haha, great! Planning to add multiplayer support soon btw.. ;)

~~~
wruza
It would be nice to see something like cursors.io mmo. Sadly they abandoned
it, as that dead stupid agar got more traction and ad views.

~~~
pkstn
Hmm..let’s see!

------
fjfaase
How long would it take to make the whole screen one color (excluding the red
car)? And what is the best strategy: driving in circles or fast alternating
between gas and brake?

~~~
pkstn
Let's see :D

------
nkrisc
I see that it works on mobile but u can not for the life of me figure it what
the control scheme is. I just touch the screen and the car and to randomly
move.

~~~
mrspeaker
Figuring it out is part of the fun ;)

(But spoiler, it's just about moving relative to where you start touching...
press then move up the screen to go straight.)

------
tomxor
I love how instantly hackable this is... clone the repo and serve the
directory localy and still connects through websockets, no npm crap in the
way. :)

~~~
pkstn
Sorry, but I blocked connections outside main domain to keep it clean..
Started to see trains, moving sprites etc :D

~~~
tomxor
:( ah well, was fun while it lasted. I was the "HN" sprite :P

~~~
pkstn
Looked fun, I was just worried about game performance and server bandwidth
usage..

Both frontend and backend are open source and work straight away without
bundling, if you want to fiddle around:

[https://github.com/pakastin/car](https://github.com/pakastin/car)
[https://github.com/pakastin/car-ws](https://github.com/pakastin/car-ws)

Pull requests also welcome! ;)

~~~
tomxor
> Looked fun, I was just worried about game performance and server bandwidth
> usage..

Yes, that turned out to be a legitimate concern... later on I saw people go a
step further and write entire sentences out of cars... they probably didn't
realize but it was effectively DoSing your server and preventing anyone else's
socket emits getting through so all you could see is the text.

I guess it's a difficult balance if you want to allow playful hacking but
don't want to be DoSed. (BTW it's easy to bypass the origin restriction by
just injecting code into the browser), perhaps a better restriction would be a
max sockets per session or IP, that would still allow some hacking but reduce
chance of DoS intentional or not.

Anyway I changed tack to try implementing some basic bots in smaller numbers.
Was fun to see how people interact with them.

------
trekhleb
The physics is really nice! Played with it for couple of minutes and even
managed to drift/draw "2020" trace on the ground :D

~~~
pkstn
Haha, nice!

------
mechhacker
That's pretty cool! Just fooling around with this made me think about
replicating it with an Elixir backend.

~~~
pkstn
Shouldn’t be too hard, current backend is here:
[https://github.com/pakastin/car-ws](https://github.com/pakastin/car-ws) :D

------
40four
Great work @pkstn! Works surprisingly well on a touchscreen. Really enjoyed
deck of cards as well :)

~~~
pkstn
Thank you! :P

------
n-gauge
Good work! Q: How well would multiplayer work if you used webRTC data sockets
instead?

~~~
pkstn
Not sure, since you’d need multi to multi connection, not only single to
single..

------
smcl
I spent more time than I care to admit zooming around on this page

~~~
pkstn
Haha :)

------
kmjoshi
This is very cool and fun! and its only one page of js code!

~~~
pkstn
Yeah, very simple..

~~~
kmjoshi
haha

~~~
pkstn
Wasn’t meant as joke, it actually is quite simple demo :D

------
wahlis
Wonderful! Please add some sounds for drifting :)

~~~
pkstn
Great idea! :P

------
cabaalis
Networked spirograph simulator :)

~~~
pkstn
Haha :D

------
alexchamberlain
This is nice. It would be cool to have an option of rendering the controls
under my thumb?

~~~
pkstn
True that, I’ll add those!

------
Spacemolte
Nice, but I do feel like it's missing a set of tracks from the other set of
wheels.

~~~
pkstn
Yeah, let’s see how it evolves!

------
pkstn
Multiplayer is live now!!! :D

~~~
driver2020
At least on Chrome on Android it is now broken for me (previously working
fine), as dragging to steer scrolls the page.

~~~
pkstn
Should work now?

------
planetis
Nice, can we get tracks too?

~~~
pkstn
Sounds good! :P

------
marius_k
I like it how those patterns reveal different screen sizes/resolutions.

~~~
pkstn
Haha, true :D

------
ashisrai_
Drifting is awesome.

~~~
pkstn
It is! :P

------
jakciewell
it's pretty cool and fun

~~~
pkstn
I’ll add multiplayer soon, hope it’s even more fun then!

------
citrons
Nice!

~~~
pkstn
Thanks! :)

------
djmips
It's fun! Nice work.

~~~
pkstn
Thanks!

