5 ms·
Show HN: 3D multiplayer space shooter made with Three.js
- Romanist 7y agoBefore reloading I could not really see smth. Input for "input name" wasnt highlighted. So I could not understand what should I do.
- seszett 7y agoSeems interesting, but apparently the layout is hardcoded to use WASD, which doesn't go well with AZERTY keyboards.
- tomglynch 7y agoIs this struggling under the load?
- g105b 7y agoYes.
- nickyvanurk 7y agoI just deployed it to my free heroku account to see if I could get it up and running, the lag is immense haha :D
- DennisP 7y agoAre there any controls besides arrow keys and spacebar? I start out tumbling and can't seem to stop.
- restlessmedia 7y agoGrab that mouse, took me a while :)
- skocznymroczny 7y agoI know that spaceship model :) the game feels choppy to me. What kind of interpolation/prediction is it using right now?
- nickyvanurk 7y agoClient-Side Prediction, Server Reconciliation, Entity Interpolation, Lag Compensation. See this post for more information: https://www.gabrielgambetta.com/client-server-game-architecture.html https://www.gabrielgambetta.com/client-server-game-architect...
- rezoner 7y agoIf you don't have better ideas for improving your packet size at least push your JSON through msgpack. Using strings as keys (properties) is ultra bad for your bandwidth too. In general JSON is only suitable for turn based games.
- nickyvanurk 7y agoThanks for pointing this out. This will be my next improvement.
- rezoner 7y agops: Don't use the official implementation - it is slow. Go with one of the lite projects like that one https://github.com/kawanet/msgpack-lite https://github.com/kawanet/msgpack-lite
- nickyvanurk 7y agoMuch appreciated!
- echelon 7y agoProtobuf would be an excellent serialization. It's compact, binary, and efficient. There's a ton of library support in nearly every language imaginable.
- arendtio 7y agoI am not 100% sure, but I think I read somewhere (at least 2 years ago), that browsers are actually faster using JSON than Protobuf (a bit counter-intuitive). Nevertheless, bandwidth-wise it could make sense anyway, but I think it makes sense to consult some benchmarks in this case.
- redka 7y agoFor my games[1] I use a custom binary protocol which is not that difficult to pull off. Actually building a buffer with JavaScript's DataView[2] and ArrayBuffers produces very compact results since you're free to optimize the packets for each specific game - for example a single uInt8 can store 8 different flags for a game character - things like dead/alive, up/down, right/left, walking/running, etc. [1] https://redka.games https://redka.games [2] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
- bullen 7y agoI would suggest tank controls to reduce server CPU (with event based protocol) and make the game a bit more playable, try my controls: http://aeonalpha.com http://aeonalpha.com
- Diggsey 7y agoWhat is the server written in?
- nickyvanurk 7y agoNode, Express, Socket.IO, Three.js, see https://github.com/nickyvanurk/3d-multiplayer-browser-shooter https://github.com/nickyvanurk/3d-multiplayer-browser-shoote... for more info! A star would be welcome :))
- gendev 7y agoMight I suggest checking out Fastify. Very similar to the way Express is, but on an average of 10% to 20% faster.
- isakkeyten 7y agoIt's using websockets so I don't think the speed of the router is of any importance :)
- deleted 7y ago[deleted]
- alex_duf 7y agowhat are the controls? I haven't found any explanation and I've only managed to spin the ship on itself.
- nickyvanurk 7y agoW - forward, S - slow down, A - roll left, D - roll right, Q - yaw left, E - yaw right, MouseY - up and down, SPACE - shoot, ENTER - chat
- lhball 7y agoNice work! I would suggest adding a controls screen that fades out. Took me a while to realize I had to combine aiming with the mouse and WASD keys for movement to get everything going.
- p_roz 7y agoThis is really cool. One suggestion. Allow the mouse to control the spaceship movement in both x and y directions. It’s intuitive to try to point the mouse to the place you want your ship to go, however the mouse only controls the Y axis.
- mLuby 7y agoRight. Or use W and S for pitch up/down and ignore the mouse. Shift or Z or something for forward movement.
- cr0sh 7y agoI think this is cool just from the "sharing code" perspective; yes, it needs some more work, but that's the way games are. I can't give any suggestions there, since I haven't touched game code in decades (well out of date for today's MP stuff). But I like what I see so far from this demo!
- emilfihlman 7y agoThe game is unplayable.
- arendtio 7y agoPretty cool and actually, something I always wanted. Reminds me of the good old Netwars days: https://www.youtube.com/watch?v=eMp1RrCy4w4 https://www.youtube.com/watch?v=eMp1RrCy4w4 There are just a few things Netwars had that I am missing here: 1. Sound (is it just me?) 2. The controls are kinda weird. If I remember correctly Netwars used Ctrl and Shift to throttle. Mouse (or Joystick) for turning (upper part of the side of the screen to roll), Space to fire the gun and Return to fire missiles. 3. A radar for orientation. But for a prototype awesome already :-D
- reilly3000 7y agoThe netcode seems to be working great for me. Controls are not what I expect based on the space-shooters I've played, but I eventually got the hang of them. Ship to ship collisions would be nice.
- webdva 7y agoFun game. Good work.
- atum47 7y agooh man, I made a 2D one back in the day with node.jd and socket.io, to test a physics engine I was writing, but never really finished it to release it. looking at your project now, I wish I did finished mine. really cool job. keep it up
- cbartlett 7y agoNeeds a radar/minimap or something, I pretty quickly found myself lost in space with no idea where other players were, or how to get back to the starting point to find new players.
- mg794613 7y agoSo the game just crashed? Could only move forward after that.