Hacker Newsnew | past | comments | ask | show | jobs | submit | fivesigma's commentslogin

Admittedly mobile was a bit of an afterthought and I only tested it on 4 devices. What device are you using?


iOS 8.1.2 model A1532. I don't upgrade because it will slow down my phone.

Probably not worth supporting. :) Adding new features and figuring out ways to keep people playing might be much more worth your time.


It says, right on the mobile mode interstitial, that it "requires the latest mobile/tablet hardware." And yet, you seem surprised when it doesn't work on older hardware?


> Probably not worth supporting.

I was going to disagree because the same countries that really like web games are often the ones using older handsets, but Apple themselves say only 8% of handsets are on iOS < v10: https://developer.apple.com/support/app-store/


1 in 10 handsets isn't a market you want?


Even at it's peak apple only had 23% market share. 1 in 10 out of 23% is 2.3% and not everyone plays this game on a phone so the percentage is even lower in reality.


Not this game but in general.

Good point about market share though, hadn't considered that.


Are you using Chrome? Gamepad API is a bit buggy on 62.x


Yeah I was. I'll try it on Firefox, thanks!


Everything is running smoothly so it's not the HN effect.

Might I ask what OS/Browser/ISP are you using?


I also have this problem. Windows 10, Chrome (hardware accel disabled), Comcast.


I had to enable hardware acceleration to get more than 1 frame/second. It was smooth with hardware acceleration turned on.

I'm running chrome on ubuntu on a dell xps 13


Maybe the JS Comcast is injecting that says you need a new modem is having an adverse effect, or maybe you just need a new modem. /s


That is up to your keyboard hardware. Unfortunately, most consumer level keyboards can't handle that.


Please forgive the random reply, but it's the closest to a direct message I can get. :)

Suggestion: place powerups in areas of the map that have not seen combat recently.

It seems like almost all the combat is over Europe, and the other areas of the map are almost always completely unpopulated. The most fun fight I had was when one other aircraft and I got into a dogfight near SA/Antarctica. It lasted several minutes, just the two of us. Even so, it only happened because I followed him there, and apparently he was just exploring the map.

So if you were to track combat activity on something like a heat map, you could spawn upgrades and powerups in cold areas of the map. This would encourage players to go hunting for them. As a result, different areas of the map would see combat regularly, and the hotspots would move around.

Also, if you spawned players in away from other players, it would encourage encounters around the map instead of concentrated in one area.

Finally, I use WASD in home-row position, and I'd like to rebind the the shoot and action keys. If you could make this possible, it'd be great.

Thanks for sharing your work. It's a fun game.


Oh, I didn't know that. Thank you very much for the quick reply!


I have tested all browsers on Linux. Got a screenshot?


Just plain ol' Websockets. But with a twist.

I use 2 WS connections mirroring some packets on both, to deal with head-of-line blocking.


Interesting. Could you talk more about this?


(Not OP but I had the same idea)

When a packet is lost in a TCP stream, it must be retransmitted, and until the client receives it, all further packets are stuck in limbo (received by the client, but cannot be seen). For this reason, most games use UDP instead, and are designed so some packet loss is acceptable (if I received where you are at frame N, it no longer matters if I receive where you were at frame N-1).

Minecraft uses TCP, that's why in very populated servers occasionally you can see the whole world freeze for a second.

In the browser we have UDP with WebRTC data, the problem is that not all browsers support it, it may not work in some places and for now it's more difficult to work with.

An easy compromise is to use several TCP connections, so if one packet is lost, instead of having N packets stuck for a moment, you have 1/N where N is the number of connections. And if important packets are sent through all channels, the chance that they arrive too late is much lower.


Do both websocket connections send the same data, or do you split your data logically between two channels (movement data vs state data)


I interleave information that becomes redundant (like the position of players, I can handle losing every other packet for a while, interpolating/predicting missing info) but send important data in all channels (like when a rocket is fired, it's just one event that must be seen).

Again, I'm not OP but I did similar things and explained what probably happens with this game.


What DiThi said (read his excellent post)

There's also another important detail. Due to delayed ACKs on Windows and battery-preserving TCP stacks on most mobile devices/laptops, some of your packets will be delayed. Even with TCP_NODELAY. Desktop OSX/Linux do not display this behavior.

The only solution I have found, and it's a rather crude one, is to blast the server every 50ms with a 1-byte packet. It is ugly but it works well.


Will do when this is over. Right now I'm trying to prevent servers from melting. HN traffic...


Also want to show appreciation for your work.

I tried to create a game similar to this (I spent 6 months on it). Very basic Geometry. Circles. I got the concept working well locally, but I ran into problems on how to deal with the networking. I got things running in Node with SocketIO and so on but there could be 400 players, each made of upto 8 moving pieces, and each can fire several times a second.

I spent a lot of time on a book, "Real time collision detection" and generally I have fond memories of the whole project and trying different partition and slicing up space.

However, how to package and deal with this snapshot of world "over the network" or for example "how to smooth any lag relative to the client"... this middle region was largely undocumented or ill accessible to me.

I will look forward to when/if you write any thoughts.


I will definitely do a write-up but you're right. It's really hard to find info on any of that online.

A lot of trial and error.


Do you have a blog? Been visiting this daily to see if there's a new update about the write up on networking trial errors. :)


I am still playing :D


You've done a great job! It's stayed very responsive for the time I've played. I haven't even noticed any dropped packets, so your method for dealing with them seems to be working very well despite the high load.


Nothing too fancy. Just proper devops and a lot of testing.

https://i.imgur.com/oSwGgFA.png


That is fancy. It is actually so beautiful I got emotional.


THE comboy of bitcoinity fame? I'm honored.

I remember donating back in the day!


Huh wow, thanks :) I need to make bitcoinity working as stable as airma.sh does. Congrats on the well earned success btw, clearly the game is here to stay.

It would be sweet to be able to change fire from spacebar to something else. Spacebar tends to be big and loud.


Where are you hosting it? That looks quite custom to gaming


It better be! It's my homegrown panel that I use for all my projects.


I would love to hear more about this dashboard in your write up. Would love to create something like this myself :)


Do you have a blog or write ups about this process / your workflow / etc.? I feel as a novice I could learn a lot.


Is it an home made dashboard or do you use some standard tool?


Great job with the Game. Would love to read an article about how you developed this game and handled initial traffic.


Really looking forward to a write-up!


Would be nice to know what you use for hit detection and interpolation, it seems very smooth!


Fantastic game. Enjoyable, simple. Wish you all the best with it. Thank you for your outstanding work


Safari on iOS is generally buggy. WebGL and WebAudio are very glitchy.

I don't have a BT KB so I didn't test that case. Will do!


I am using chrome on the ipad


PIXI.js for the graphics. Serverside is mostly Node.js.


No websockets for persistent connections? How are you handling RTC?


Open up the Network tab and you'll see that it's using WebSockets.


Ah. Sounds cool. Would WebRTC serve better here?


Let's Encrypt is great.

I would like to see native ECC support and a more stringent validation mode that allows more than 3 months of certificate lifetime.


More stringent validation methods won't help with the ever-present possibility of private key compromise. So long as that's a real possibility and revocation is broken (which it clearly is), longer certificate lifetimes are a liability. Renewal needs to be automated so you don't care how often you have to renew.

Let's Encrypt will sign your ECC keys now, but we'll sign with our RSA keys. We'll likely have our own ECC trust chain some time next year.


March 2018 for native ECC support: https://letsencrypt.org/upcoming-features/


>How can it support thousands of colors

Temporal dithering. Also called FRC - frame rate control.

You might not notice it, but if you are on a TN monitor right now (almost all non-professional monitors) this technique is being used to emulate 24 bit color. Most TN panels can only display 6 bits per channel.


How cool ! That's why the GIF are so heavy it must be something like 100 FPS


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: