Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Feedback Request: Built a 2D ONLINE MULTIPLAYER "Super Soccer" Game! ⚽

A topic by APS Games created 14 days ago Views: 430 Replies: 20
Viewing posts 1 to 11

Hi everyone! 👋

I’m Ashit, a solo indie developer and a college student. I’ve just released my passion project, 'Super Soccer'.

The biggest highlight of this project? It features a fully functional ONLINE MULTIPLAYER mode! Yes, it’s a 2D HTML5 game, but you can jump right in and play against real players online. Building a multiplayer system from scratch as a solo dev was a massive challenge, but seeing it come to life has been incredibly rewarding.

Since I am still learning and trying to make this the best experience possible, I really need this amazing community's help to test it out. I’m specifically looking for feedback on:

Multiplayer Sync: Does the online gameplay feel smooth in your region? Are there any major lags or disconnects?

Controls & Mechanics: Is the 2D movement fluid and fun to play?

General Bugs: Did you spot any weird glitches while playing online?

You can play it directly in your browser here:

[Super soccer]

Whether you play for 2 minutes or 20 minutes, your honest feedback will make me really happy and help me improve my coding skills. Thank you so much for supporting a young indie dev's dream! ❤️

(1 edit) (+1)

I played a 3 minute match and lost 2-3. This game has potential! However, my players currently run to fast to get or hold the ball. I would have to wait until the CPU is in front of their goal. I didn't use the pass button once. The "You lost" screen did not look right on mobile. 

The Gumroad link also does not work. However, almost no one will but AI-generated content, not even for $1. I can't even get one of my 500 players to buy or donate to me.

I gave a five star rate to help others find your game.

My game is: https://codergenius72.itch.io/dualspace

Hi CoderGenius72,

Thank you so much for taking the time to play the game and leaving such detailed feedback! And a huge thanks for the 5-star rating, it really means a lot to a solo student developer like me. 🙏

I have noted down your points regarding the player speed, the mobile UI issue on the 'You Lost' screen, and the AI behavior. I agree with you, and I will definitely work on tweaking these mechanics in the upcoming updates to make the gameplay smoother.

Also, thank you for pointing out the Gumroad link issue! I will investigate and fix it right away.

I will surely check out your game 'Dashspace' as well. Best of luck with your indie dev journey!

(+1)

Looked at the online flow rather than a long session, so this is about matchmaking and readability rather than balance.

Good news first: Random Match actually works. I picked a nation, sat on SEARCHING FOR RANDOM OPPONENT for about 11 seconds, and it paired me with a real opponent and dropped straight into LIVE MATCH. For a solo-built browser multiplayer that is the hard part already done ⚽

Three things I would change, roughly in order of what I think they cost you:

  1. The search state has no clock and no exit except CANCEL. Eleven seconds was fine for me because I knew what I was waiting for. A first-time visitor does not know whether it is 10 seconds or never, and the default response to an unlabelled spinner is to close the tab. Even “searching… usually under 20s” with an elapsed counter would hold people.

  2. Offer a bot fallback from inside the search, not only as a separate menu item. This is the thing that quietly kills small online games: your concurrency will be zero at 3am no matter how good the game is, and whoever arrives then concludes it is dead and never comes back. If the search passes ~15-20 seconds, swap in a CPU and say so out loud - “nobody around right now, playing a CPU, we will swap in a human if one shows”. You already have a decent CPU. Letting it backfill the queue means the game is never empty, and that is worth more than any netcode work.

  3. Nation select happens before matchmaking, so the player spends a choice before finding out whether anyone is there. Consider firing the search in the background the moment they hit Random Match, so picking a nation IS the queue time. Costs nothing and hides most of the wait.

One readability note: the dashed ring under the active player is hard to track on the green pitch while the camera is moving. An arrow above the head, or dimming the non-active teammates a little, would fix some of what CoderGenius72 described as players running too fast to hold the ball - part of that reads to me as not being certain which player I actually had.

And one page thing since it is a one-field fix: your itch page breadcrumb says “Games > Sports > $5 or less”. The game is free in the browser and only the asset packs are paid, but someone skimming reads that as a price tag on the game.

Hi HKM Industry,

Thank you so much for the detailed and constructive feedback! Hearing that the matchmaking worked smoothly for you is a huge relief and a great motivation for me as a solo developer.

Regarding the Bot Fallback—great minds think alike! I actually just pushed a new update (v1.1) that does exactly this. If a real opponent isn't found within 10 seconds, the game seamlessly drops the player into a match with a CPU.

Your suggestion about adding a visible elapsed timer during the search phase is brilliant. I completely agree that leaving the player staring at a static screen is bad for retention. I will definitely implement a live counter in the next patch!

I’ve also noted the readability issue. An arrow above the active player makes perfect sense and would be much easier to track on the green pitch. I will experiment with this design.

Thanks for pointing out the '$3 or less' tag confusion too! The browser game is completely free, only the source code/assets are paid. I will check my metadata settings right away to fix that breadcrumb.

I really appreciate you taking the time to write this. Also, if you enjoyed testing the game, leaving a quick rating on the game page would mean the world to a solo student developer like me! 🥺🌟 Thanks again 🙏!

(+1)

That is a fast turnaround, nice 🎮 One thing worth checking before you settle on 10 seconds though.

When I ran Random Match yesterday it took about 11 seconds to pair me with a real opponent. A 10-second cutoff would have preempted that match entirely — I would have been handed a CPU roughly one second before a human arrived.

Your real pairing time and your fallback threshold are close enough that this matters. Before fixing the number, it is worth logging the distribution of your successful human pairings. If most of them land in the 8-15 second band, a 10s fallback quietly converts the majority of your multiplayer into single player, which is the opposite of what you want now that matchmaking demonstrably works.

Two things that make the fallback safer whatever number you pick:

Say it out loud. If the CPU swap is seamless and silent, a player who wins assumes they beat a human, and finding out later feels like being tricked. “Nobody around right now, you are playing a CPU” costs nothing and buys trust — and it also explains the thing players would otherwise interpret as your netcode behaving oddly.

Keep searching during the bot match. If a human enters the queue 30 seconds in, hot-swap them into the CPU’s slot. That way the fallback is genuinely just filling dead air rather than replacing the mode, and your concurrency stops being a hard gate on whether anyone ever meets a real opponent.

Hi HKM Industry,

Wow, thank you for following up! You are completely right about the 10-second cutoff. I will definitely increase the bot fallback threshold to 15-20 seconds so I don't accidentally kill real human matches.

Adding a 'Playing against CPU' text is a great call for transparency. Honesty is the best policy! Your 'hot-swapping' idea (replacing the CPU mid-match if a human queues up) is absolute genius. Since I am coding this solo with a basic Firebase setup, that dynamic swapping is a bit complex for me right now, but I am adding it straight to my core feature list for the next major update.

I am just a college student in India, trying to learn game dev on a broken laptop, and this level of pro-feedback is a literal goldmine for me. I actually put the complete source code of this game up on Ko-fi and Gumroad recently, just trying to save up for my college tuition and a working PC. If you ever feel like supporting a young dev's journey (or know anyone who needs a solid multiplayer template), it would mean the world to me! 🙏

Also, I am trying to build my small community on Game Jolt as well (link is on my itch profile). If you post your devlogs or games there, I would love to follow your work!

By the way, do you use Discord? I would really love to connect and chat more about browser multiplayer networking sometime. Thank you again for your time and wisdom! 🚀🔥

(+1)

Hi, I played your game. Here is a video of it: 

To be honest, I struggled a bit with this one. It was very hard to control the players. It was very hard to do exact movements, might work better with a controller, I was using a keyboard. I could not figure out the controls either, how do I shoot the ball. It was also a bit hard when the player that you controlled always is the one closest to the ball. Your menus looks great though, and you have done something right with the color pallet and use of glow, it looks like a sports game to me. 


I have also made a game and are looking for feedback. You can find it here: https://simenhs.itch.io/hexatown It would also be super helpful if you could make a video recording if you're going to play it.

Hi @simenhs,

I cannot even begin to explain how happy your video made me. 🥹 Watching someone play my game on YouTube with clear commentary like a professional streamer... it honestly brought a huge smile to my face. You gave my project more respect and attention than I could have ever imagined. Thank you so much! ❤️

Thanks to your feedback, I have updated the itch.io page to clearly show the PC controls (Arrow Keys to move, Spacebar to shoot).

You asked if I could record a video playing 'Hexatown'. To be completely honest with you, I am quite shy, I don't have a YouTube channel, and I don't even have a proper mic or recording setup! 😅 I am just a college student in India, secretly coding games on a broken laptop/phone. Your video setup was so pro, I definitely can't match that!

But I promise you this: I will definitely play 'Hexatown' and leave a very detailed, written feedback on your page to support you!

Right now, I am trying to save up for my college tuition and maybe a working PC setup someday. If you or anyone ever wants to support my journey, I have put up the multiplayer source code for this game on Gumroad and Ko-fi.

Seriously, thank you again. You made a young solo dev’s day! 🚀🙏

Hi simenhs! Just a heads-up that I kept my word—I've played Hexatown and left some detailed feedback over on your game page.

Thanks again for the exchange! If you're ever looking to connect with other solo devs or share progress, I've put a link to my Game Jolt community in my itch profile bio. See you around! 🚀

(+1)

interesting!

Hi alseiruizmont! Thanks a lot! 🚀

Glad you found it interesting! What part caught your eye—the multiplayer mechanics or the UI? I'm always looking for feedback.

I'm a solo student dev, and I actually put the complete multiplayer source code up for sale right here on this page to help fund my college tuition.

Also, I'm building a small dev community over on Game Jolt (the link is in my profile bio) if you ever want to connect or share your own games. Cheers!

(+1)

Seat, not swap — that is the trick that makes hot-swapping cheap on Firebase 🎮

You do not have to swap a player mid-match. Model the match as two SEATS, and store who owns each seat as a field on the room doc instead of baking the identity in when the match starts. A CPU seat is just a seat whose owner is cpu. When someone queues and there is a room with a cpu-owned seat, you write their uid into that field. That is a single-field update — your match state, score and ball physics carry on untouched.

The client side gets simpler too. It already renders “the opponent did X” from the room doc, so it stops caring whether the input behind that seat came from your bot loop or a person. Reading the owner field decides who is driving, not what to draw.

Two things that will bite:

  • Decide what happens to the CPU’s score. Inheriting it is usually right, since the human is picking up a game in progress — but put it on screen, or someone who joins at 3-0 down feels cheated by a match they did not lose.
  • Claim the seat in a transaction, not a plain write. Two people queueing in the same instant will otherwise both believe they got it, and Firebase will happily let them.

We run this shape in our own arena: matches run continuously with AI in the seats, and a spectator can take one at the next round. The reason it stays cheap is that the AI was never a special case — it is just an input source behind a seat, same as a keyboard is.

Good luck with the tuition, genuinely. Shipping and then actually listening to feedback is the part most people skip, and you are doing both.

Wow. I have read this message three times now, and honestly, my mind is completely blown! 🤯 'Seat, not swap' is such an elegant and genius way to look at the architecture. You just saved me weeks of headache and messy code. And claiming it via a Firebase transaction to avoid the race condition? That is pure gold.

In my country, India, we have a very special and deep cultural word for someone like you: 'Guru'.

A 'Guru' is much more than just a teacher or a mentor. In our culture, a Guru is someone who selflessly shares their deepest wisdom to guide a student out of darkness and confusion, without expecting anything in return. We hold our Gurus in the absolute highest regard. For a solo student dev like me, getting this level of high-tier, professional consultation absolutely for free is a blessing. It truly feels like I have found my game dev Guru in you. 🙏✨

Thank you so much for your genuine words about my tuition and my journey. The internet can be a tough place, but people like you make this indie dev community so beautiful and supportive. I am definitely implementing this 'Seat' architecture in my next update.

Wishing you all the best with your arena and projects! If you ever need someone to test your games or bounce ideas off, you know where to find me. Cheers, my friend! 🚀❤️

(+1)

That is far too generous, and I would rather hand the credit back where it belongs 🙏

You shipped a working online multiplayer game solo, and then did the rarest thing in this community: you took feedback and actually changed the product, twice, inside two days. Most people argue with feedback. You implemented it. That part cannot be taught, and it is going to matter more to your career than any architecture tip.

One correction, though — “for free” undersells what you gave back. You told me your fallback threshold was 10 seconds. That is a real number from a real shipped game, and it is the only reason I went and checked ours. The exchange ran both ways; you just did not see your half of it.

And yes, I will happily take you up on the testing offer 🎮

Bombercup — a free multiplayer bomber-battle arena that runs in a browser tab. No download, no signup: https://cx99industry.itch.io/bomberonlinewc

There is one specific thing I would value your eyes on, and you are unusually well placed to judge it because you now know exactly what this class of problem feels like.

The boss stage has teleport pads. Step on one and you are gone for four seconds — two coming apart, two putting yourself back together somewhere you did not choose. You cannot be hurt and you cannot act for any of it. I have stopped being able to tell whether four seconds reads as an escape or as being sent to the bench, because I have played it far too many times to feel it honestly any more.

It is a one-line change either way, so your first gut reaction is worth more to me than a considered one. Do not write me an essay — just tell me which of those two it felt like.

Unofficial fan project, no affiliation with Konami or Hudson. Nothing for sale, nothing to install.

Thank you for the incredibly kind words, HKM! That genuinely means a lot to me.

Going straight to your question—here is my gut reaction:

It definitely reads as being "sent to the bench".

In a fast-paced arena game, 4 seconds feels like an eternity. If it were just 1-2 seconds, it might feel like a slick tactical 'escape' or dodge. But 4 full seconds breaks the momentum entirely and feels like a timeout penalty where you lose control of the match.

Hope this helps! 🎮

(+1)

Thank you for answering it straight, and for the phrase, which turned out to be worth more than the verdict 🎮

Two things about your answer.

First, a caveat that is mine and not yours: you gave me a read on a description rather than a played reaction, and I am going to treat it as exactly that. It is still useful, because the framing is the first thing a new player meets, before any of the feel arrives.

Second, “sent to the bench” is the actual finding, and I nearly walked past it. I asked whether four seconds was too long. You answered in the vocabulary of the sport: a bench, a timeout, losing control of the match. Which raises the possibility that the duration is not the problem at all. A substitution is also a loss of control, it also lasts a lot longer than four seconds, and nobody experiences it as unfair, because it is a named rule, you know why it happened, and you know you are coming back on. An unexplained four seconds is a punishment. The same four seconds labelled as a substitution is a rule.

That is a far cheaper experiment than retuning the timing, and I would not have reached it from a yes or no about the number. So I am going to test the label before I touch the duration. If it still reads as a penalty once it is named, then four seconds really is too long and I will cut it.

Now the part that is for you, because I owe you a real one back.

Two testers in this thread told you the same thing, and it does not look like the same thing. CoderGenius72 said the players run too fast to get or hold the ball, and that he never used the pass button once. simenhs said it was very hard to make exact movements, and then the important half: that it was hard that the player you control is always the one closest to the ball.

I think that is one problem, not two. If your auto-switch is driven by raw current distance to the ball, then control changes hands at precisely the moments a player is committing to a deliberate movement. You aim a run, the ball drifts a little, the game hands you a different body mid-stride, and your input is suddenly driving someone else. From the inside that does not feel like “the game switched player”. It feels like “my guy is uncontrollable and too fast”. That is why the complaint comes out as a speed complaint, and why raising or lowering the speed value will not fix it.

Four changes, cheapest first:

Switch on events, not continuously. Recompute the controlled player when possession actually changes: a touch, an interception, the ball crossing into a new third. Not every frame. Most of the flicker dies here alone.

Lock out the switch during deliberate input. Once the human has held a direction for a couple of hundred milliseconds, do not take control away until they release it or the ball is genuinely intercepted. This is the general law for every movement assist: the instant an assist overrides intent, it stops being experienced as help.

Switch on predicted intercept, not present distance. When the ball travels between two of your players, current-distance flips control back and forth over a handful of frames. Whoever can reach the ball soonest is a stable answer. Whoever is nearest right now is not.

Give them a manual switch key. It is standard in the genre for exactly this reason, because no auto-switch is right often enough. And it pairs with your unused pass button: if one of only two action keys is going unused, the layout is not being taught, and putting the controls on the page like you just did is half of that fix.

One question, and take your time with it. When a player is running with the ball and the shoot key goes down, does control stay with that player for the whole shot, or can the auto-switch fire during the wind-up? If it can fire mid-shot, that on its own would explain “I could not figure out how to shoot” ⚽

Wow, HKM Industry! I am genuinely blown away by this level of feedback. Thank you so much for taking the time to write this masterclass.

You hit the nail exactly on the head. The issue isn't the speed value; it is absolutely the raw distance-based auto-switch firing every frame and wrestling control away from the player. Your breakdown makes perfect sense.

I am going to prioritize your simplest fixes first:

Locking out the auto-switch during deliberate input.

Turning that unused Pass button into a Manual Switch key! That is a brilliant idea.

(+1)

Really glad it was useful — but let me stop you on one thing before you build it 🎮

I would not turn the pass button INTO the switch key.

Passing is not an optional extra in a football game. It is the thing that makes a team feel like a team, and a build without it quietly becomes “run at the goal with whoever you are holding”. You would be deleting a core verb to make room for a fix.

And I think the reason nobody used it is the same root cause as everything else, not a separate problem. If control keeps getting yanked to whoever is nearest the ball, you never get the settled possession in which passing is the obvious move — you are always mid-scramble, and mid-scramble the only sensible input is run. Fix the switching and I would expect pass usage to climb on its own without you touching that button at all.

If you need a key for manual switch, take a new one. On a keyboard you have plenty spare, and a switch sits more naturally on a modifier than on your only other action key.

Order I would actually build in:

  1. Lockout during deliberate input. Smallest change, biggest movement in feel.
  2. Then re-measure. See whether the pass complaint survives the switching fix before concluding the button is the problem. It may simply evaporate.
  3. Event-based switching and predicted intercept after that.

And my earlier question is still the cheapest diagnostic you have, so I will re-ask it plainly: can the auto-switch fire during a shot wind-up? If it can, then “I could not figure out how to shoot” is fully explained with no other cause needed — the player did press shoot, and the game handed the shot to someone else mid-swing ⚽

      HKM Industry, I have to be completely honest with you—your deep dive forced me to look under the hood of my own visual scripting logic, and I found the ultimate plot twist. You are going to find this funny.

      You were right about the Pass button, but for an even crazier reason: I realized that currently, pressing 'Pass' doesn't actually apply any physical force to the ball! It ONLY shifts the player control to the nearest teammate while leaving the ball behind. No wonder players were avoiding it—it was acting as a broken manual switch disguised as a pass button!

      Your order of development is absolutely perfect, and I am adopting it as my roadmap:

      1. Lockout during deliberate input: I am making this my #1 priority. If the joystick/movement is engaged, the auto-switch distance check will be strictly disabled.

      2.. Fixing the Pass core verb: I will fix the actual pass logic so the ball travels before the control shifts.

      3. The Shoot Wind-up: You nailed it again. Since the raw distance check was firing every frame, it WAS interrupting the shooting animation mid-swing. I will lock the control state during the shooting action as well.

      I cannot thank you enough. You didn't just give feedback; you practically saved the core mechanics of this game. As a solo indie dev, having a critical eye like yours is a blessing. Thank you for making me a better designer today! 🎮🔥

      Hey everyone! It's been a while, but I've been working hard on this project based on your earlier feedback.

      I just pushed a major update to Super Soccer! ⚽

      New Feature: I finally added a 'Pass' mechanic! You can now strategically pass the ball to your teammates instead of just shooting or dribbling solo.

      I would love to get your thoughts on this specific update. How does the passing feel? Is it smooth enough? Any feedback on the new controls would be really helpful!