Mr F

Robostorm.io

Recommended Posts

Hi there!

We recently finished a web game with friends, here it is: https://robostorm.io

Less than 7 MB, play in your browser :)


Note: only playable on desktop platforms at the moment.

Rules:

You control a robot and belong to one of 4 teams (marked by nickname color). There are 4 teams and 5 capture points on the map, and the aim is to help your team gain control over most of these points, while shooting enemies.
You will gain XP by killing enemies and capturing points, and you can spend it on buying useful upgrades.
Damaged robots can be repaired in small repair cabins at the corners of the map.

Controls:

  1. Use W, A, S, D keys to move your robot.
  2. Aim with mouse cursor.
  3. Shoot left and right weapons with left and right mouse buttons.
  4. Press Space to sprint.
  5. Press Shift to activate shield.
  6. Press B to open shop menu.
  7. Press Esc to change sound/fullscreen/quality settings.

b3s2T0T.jpg

 

Made in 6 months (not full-time) on PlayCanvas with friends (me and 2 artists).
It was my first experience with networking and multiplayer.

One of the reasons I registered here, apart from sharing, is to ask a monetization advice. I'm not greedy, but right now I have to pay for servers, and if there would be a way to at least cover that expence, I'd be happy :)

Things I know/tried:

- I'm using Amazon AWS servers. They're expensive. Gonna check Linode (sounds good?).

- Google Adsense doesn't like us. "Insufficient content" (not too much text - but there's no reason to have text!), and they don't like iframes. Many game portals iframe the game (can't do anything about it).

- Tried some affiliate banners from admitad.com. 500 clicks, $0, because they mostly pay for registering in advertised games, not for clicks.

- Tried ad4game. They gave me amazingly terrible ads. Like, bright pink, blinking, stuff like that :D Can't add those, too annoying.

Do you guys have better suggestions?

I've been told about licensing the game to game portals. Does it mean banning it from unlicensed sites? They actually earn money by embedding our game and adding their ads on top, and they don't pay us, and that's not great.. however they also bring traffic, and that's good.

 

 

IMG_3396.JPG

Share this post


Link to post
Share on other sites

love it!! Flame thrower is pretty cool!

As per gameplay, I felt open (I have large display). Enemies could easily see me where I was (vice-versa). I would be great if visibility gets limited (darker) when you are away from enemies.

 

Edit:

I keep getting disconnected. - time 19:24 GMT+2. username: neo_killer

Share this post


Link to post
Share on other sites

Love the game!

Was unfortunately getting quite a lot of lag, using fast connection on Mac Pro with Chrome.

Ref Linode, 100% recommend! I moved all my stuff from AWS to Linode and couldn't be happier, not to mention the money i'm saving.

Just be wary Linode will probably require a bit more custom setup/maintenance and optimisation to get what your after.

Share this post


Link to post
Share on other sites

Thank you all for your responses!

7 hours ago, PlayingInCanvas said:

Would be very interested on some details about your custom physics engine (I think you mentioned it on a tweet of yours) and why you chose to do that.

So yeah, physics engine was made from scratch. Reasons:

- PlayCanvas uses ammo.js physics by default. Which is just an Emscripten port of Bullet. I love Bullet and I worked with it in the past, but ammo doesn't impress me. First, it's almost 1 mb worth of code, not too great for a small web game. Second, I have experience making a WebGL demo for mobile, and it was sooo sloow there... I had to limit physics update to 10 ticks per second, and we had, like, 5 boxes falling on a static mesh with 100 triangles. I just don't believe in Emscripten.

- Physics in this game are more about quantity than quality. We don't need very precise collision, stuff just should blow up and appear to bounce off everything.

- I just wanted to make a physics engine. Having previously toyed with position based physics on CPU (https://m.youtube.com/watch?v=pazbT3hMA0g) and GPU (https://m.youtube.com/watch?v=dT3pVo8zKn0), I wanted to finally make a proper large-scale engine.

The way it works:

- All objects are made of spheres. Each sphere is Verlet-simulated individually, and then all constraints (rigid or not) are satisfied by just moving them to right positions. Position-based physics are truly amazing, because the idea is super simple and straightforward, yet it looks impressive.

- For physics, static level geometry is also represented with spheres! This is ridiculous, but it was tempting to do given simplicity/performance.

- There's a separate precise collision system that's also made from scratch. In that system level is represented using boxes. It's used for raycasts, grenades and player collision.

- Both physics and collision systems are optimized with simple 2D grid. All spheres/boxes are assigned to small cells and only interact with what's in the cell. Raycasts check boxes in their starting cell, then go to next one, until they intersect something or reach max distance. Dynamic spheres add/remove themselves from cells on the fly - this is something I'm not proud of and should change, because it uses actual JS arrays... giving some GC overhead. Also, physics cells aren't arrays per cell - but an "implicit grid", so just one array for every row and column.

- All physics except grenades are client-only. Grenade trajectory is fully calculated on server and then sent to all clients as an array of positions. Clients then just interpolate the grenade, however if it touches any player, it will explode before reaching the end of its path.

Fun facts:

- Robot bodies have 2 physical spheres connected like a pendulum, that makes them swing based on player movement. Looks a bit more alive than just animation.

- Explosions are made of multiple blob-like meshes, and each is physical, but without gravity. That makes them push each other away giving exploding movement.

59 minutes ago, TomC said:

Was unfortunately getting quite a lot of lag, using fast connection on Mac Pro with Chrome.

When, from where, and on which server were you playing? How did you notice lag?

59 minutes ago, TomC said:

Just be wary Linode will probably require a bit more custom setup/maintenance and optimisation to get what your after.

Hmm, what things will I need to setup, that I didn't have to do with AWS?

Share this post


Link to post
Share on other sites

@Mr F Playing from the UK, just general lag – very unresponsive from hitting button to movement happening etc. Not sure how I find out which server I was playing?

Ref Linode, If your just renting a server off AWS then not a lot, I meant it more in terms of if your using service like cloud computing with auto scaling or 'elastic beanstalk' etc. You have to manage the resources yourself. 

Share this post


Link to post
Share on other sites

That's weird, I'm playing from the UK too, and I don't see any lagging on the EU server. There's server selector in the main menu (eu/us).

Ah, thanks for clarifying about Linode! No, I don't use any autoscaling cloud stuff. Just 2 fixed servers at fixed locations with fixed IPs.

---

hitting buttons should give immediate result, because it doesn't wait for server, I use client prediction. But if your ping is bad, you can de-sync and start teleporting a bit. Is it what happened?

Share this post


Link to post
Share on other sites
8 hours ago, labrat.mobi said:

I keep getting disconnected. - time 19:24 GMT+2. username: neo_killer

Oh yeah, today I released a smaaall server update... what could possibly go wrong?... suddenly everyone started randomly teleporting, disappearing, causing client to crash, and I didn't have backup. For about 2 hours I was in super stressful debugging and restarted the server frequently. Should be fine now. Lesson learned.

Share this post


Link to post
Share on other sites

Today updates:

- Was using permessage-deflate websocket compression experimentally for a few days, but had to disable it today. My data is already pretty small and binary, and deflate was only improving it by 10-20%. At the same time, CPU usage difference on server was huge! What was running on 8%, started to run on 30%. AWS instance was quickly getting out of cpu credits and throttled, that's likely why TomC experienced lagging. Should be better now.

- Added ranks. All players now have an icon showing how dangerous they are, based on the amount of bought abilities. Killing highly ranked player now gives more XP.

- Fixed some bugs

Share this post


Link to post
Share on other sites

More updates:

Bought the cheapest Linode server and benchmarked. Seems to handle up to 300 players, but... it's hard to measure, but I noticed that other players don't move as smoothly, as on AWS. Not sure why, feels like websocket stream is not as stable (?). Both aws and linode are in the same city. Didn't launch linode officially yet. However, it's just 5 bucks a month! I must fix this smoothness difference somehow and switch.

- fixed shadows disappearing (some debris sometimes were flying away into space and somehow invalidated shadowmapping camera frustum)

- fixed various repair bugs (being stuck in repair, not being able to enter, teleporting after walking away...)

- removed a terrible yllix banner I added yesterday. Despite earning me 1 dollar (yay, first profit), it felt wrong. Most yllix ads are scam - fake download buttons, clickbait, etc. I don't want to support these kinds of ads and redirect my players to garbage.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.