Show HN: Hacker League – Open-Source Rocket League on Linux
github.com
github.com
- renderer and physics aren't synced in any way, physics shouldn't be tied to frame rate, but running as 2 separate threads with no synchronization means you might read garbage at some points if you render while the physics thread is updating.
- physics using this_thread::sleep_for is not accurate and can sleep for longer than the specified time, assuming the period to be 1/60 isn't correct. The delta time needs to be measured.
- using VK_PRESENT_MODE_FIFO_KHR or VK_PRESENT_MODE_MAILBOX_KHR force vsync, but vsync can be anything. With the physics system being locked to 60, you'll notice a stutter on non-mulitiple vsyncs like 144hz. There aren't many solutions I know for this, but the main ones I know of are interpolation and extrapolation of the physics state based on the framerate. I would bump the physics update rate to 120hz to match rocket league and then experiment from there.
- Using both Eigen and GLM is overkill in this case, both are slow, but if sticking with one I would use switch solely glm.
- More of a nitpick, but I would separate out all the code at least between rendering and physics to their own independent files. The vulkan api on it's own adds a lot of clutter, moving that to it's own file should make the project easier to navigate and explorer.
There are more things, like how hard coded that shaders are, but I assume the vulkan renderer will be improved past just being from the vulkan-tutorial, so advice for that can't really be given till the renderer has been updated.
P.S. Sorry if any of this sounds harsh, it's not my intention. I've just done a lot of work involving games, game engines and renderers. And I'm seeing a lot of the problems I made when I first started. I wish you the best of luck with your project.
I'll also keep building in public on X: https://x.com/moritzthuening.
I love you all.
Could you elaborate? I play the game, but I don’t play much of anything else with ranks so I’m curious what ladder means here and the alternative examples.
A long time ago they had a pretty basic MMR/matchmaking system that was being gamed pretty badly by smurfs. So, in an attempt to deal with smurfs, Epic made a really opaque blackbox "internal" MMR, that determines what kind of teammates you get. The reason this exists is because everyone tends to get lumped into "chokepoint" ranks - Diamond 3/low champ, C3/GC, and from there I think there's another one closer to SSL but I've only been a GC1 before so I can't comment on that experience. The reason for this is you can have a 60+% winrate in diamond and never leave diamond. That results in tons of players being in a rank they clearly do not belong in - very ironically creating an unintentional smurf problem they were trying to addresss in the first place - and this is exacerbated by a draconian rank decay/reset every season which only lasts a quarter. So, it's not entirely uncommon to see players with a GC tournament tag from the previous season (means they won a GC tournament, which means they almost certainly are SSL players) in low champ or even diamond. This is made even WORSE by the way that placement games work every season - pros have worked out it's almost always better to just sit out the first few weeks of a season before doing your placements, because you may accidentally get a really high "internal" mmr (the only purpose of these placements) by beating other smurfs in a low rank ladder.
As a result, epic has tried to balance this idiotic mess by pairing these types of players with lower "true" ranks. So, often when I am in high diamond/low champ I will have a literal carried platinum player with me every single time against another team with a guy who also has a higher "true" MMR and whatever "low" MMR player the matchmaking has decided he also gets paired with. I solo queue though, so this effect is basically a miserable experience trying to climb, as it's much more difficult for me to climb out of a low rank than other players closer to their "true" rank. And I have to repeat this process every 12 fucking weeks.
when I play casual, within 10 games the matchmaking immediately puts me in high champ lobbies. So, they know how to match make fairly, clearly - there's simply no mechanism in ranked to quickly rank someone up who very obviously should not be in the rank. It should not be possible to win 15 games in a row and stay in the same rank - every other game addresses this by quickly ranking up people on win streaks. For whatever reason, epic does not, and for this reason and all of what I listed above, the experience is absolutely miserable.
Matchmaking Rating (MMR)
Or at least, that's the first time I encountered the term.
One thing that has always bugged me, and that I've never seen discussed, is that when I play solo they'll pair me up with two other solo players and then match us up against a 3 player clan!
Even if we all have the same rank, they're not at all considering the advantage of 3 players who play well as a team, and in the clan case... probably practice and play together a lot. Especially at the lower ranks, but sometimes in the mid-high ranks, a well organized team can demolish a random group of slightly higher ranked players who haven't established a playbook.
At times when the servers are saturated with players, I think they should only match parties with other parties of the same size. For example, parties of two would only be matched against other parties of two and then each party would get solo player(s) to reach the team size of a given match. Parties of three would only play against other parties of three, etc. I understand there are times of low liquidity and such matchmaking would be impossible, and that's fine... I'd rather play than not, but when liquidity is high then I'd rather wait an extra 15-30 seconds for teams and parties to be more balanced.
What do you think about party size aware match making?
I'm heavily in favor of what you said, and yea, back in the day when psyonix owned it there was a mode called "solo standard" which was 3v3 but you couldn't join with a team. It was awesome, people who did well in that mode tended to be extremely good teammates - you kinda had to to succeed. As a result it was usually much less toxic. Epic killed that mode almost immediately and it made me super upset.
The game is unique and important enough, for whatever reason, as an e-sport that I think it should be preserved in some form and I think to epic's credit so far they've mostly preserved what was there. These things however are quite frustrating.
Adding to this note, the blizzard card game Hearthstone has had the same notorious problem for as long as I've known (havent played in a few years no idea if it changed, I doubt it). They started to mess around with bonus mechanisms for win streaks, but largely before legend ranks (which worked with a much more sane ranking system) you would never be put in a higher rank if you went 50-0 vs going 200-150 - the game viewed that as exactly the same. The result was the same as with rocket league - huge rank choke points in which people were stuck for weeks playing players far above their own rank. Frustrating for both sides, and the only reasoning I can put behind it is they want you to spend more time grinding, and that's the only way they can think to do it.
The ability of game developers to leverage licensing, contracts with orgs, etc. to lock down a competitive ecosystem with exclusivity results in inability for a "free market" to develop around running events and broadcasts. Rocket League and League of Legends come to mind here, where the competitive scene is almost exclusively eSports content produced by the developer itself and doing all sorts of tricks to establish lock-in.
If we look at how traditional sports work, it's much more organic. Leagues have the ability to negotiate their own game rules, TV rights, oversight, and more. Leagues compete with each other for viewership, because viewers naturally want to watch the best games (or their local games) and viewership drives revenue via sponsorships and TV licensing. Game developer lock-in prevents this economy from developing, prevents the competitive nature of leagues from working on improving the game from a viewership perspective, and the closed-source nature of the game prevents the game from being able to "move on" from bad rules, bad communities, bad design, etc.
Many (most? all?) of these online competitive games have toxic online communities and in-game interactions. The game developers don't have the money to develop exhaustive anti-abuse mechanisms, or to pay a large support staff to sift through reports, so lots of times the best you get is a simple heuristic. And these companies are not financially incentivized to ban bad actors. In fact, they're incentivized to ban _as few as possible_ without damaging the player base. Players will quit over toxic interactions and cheaters, but cheaters and toxic players can also be the most reliable spenders in a game, so there's to reason to ban any more of them than absolutely necessary.
But with an open-source game, communities can self-organize and self-moderate. If I play on a local soccer team and they're all racist or homophobic, I'll find a new team or a new league. But at present there's no "find a new Rocket League".
So I think open-source games will have a big impact on the competitive online game industry. I think the resulting ecosystem has a lot more sustainability and player stickiness than current games do in light of the aforementioned toxicity and anti-competitive patterns, so there is much more money to be made than game developers are making currently.
Also, RL is free-to-play nowadays. They're banking on in-app purchases, not sales of video games.
I can promise you this is not true. Major publishers absolutely try to curb toxic behavior and are heavily invested in doing so.
Anecdotally, I think it can’t be said of Rocket League at all. It seems strongly to be profit-driven and moderation-light, and I think most games that size and smaller are operating the same way.
I’d love to hear where/why I’m wrong and what public information there is on the subject.
Anybody can make a football league, and anyone can make a MOBA. But to make the next League of Legends or the NFL, you need a ton of marketing money, and you need to pay to attract the top player talent. The actual money you pay the developers is not the lion's share of the spend. By the reports I can find, Overwatch cost about $50M to make, but they spent over $900M on advertising/marketing/tournaments/etc.
Let’s say that you want to be a tournament organizer and do tournament streams of an esport. You are going to use sponsorships and ad revenue to drive your profit, and you have a sponsor providing the prize pool.
You won’t be able to feature current league teams that are contractually obligated to participate in developer-endorsed events only, because the developer has all the leverage in being able to provide a larger prize pool for their official championship league (that is marketing budget for their game, funded by the game itself), so esports organizations are going to be locked-in to that contract.
The barrier to entry for you as an organizer is now to either pay a licensing fee to the developer for the privilege of being endorsed and allowing their contracted organizations to participate, which has a huge impact on your profitability… or to make your own fucking video game.
The open source aspect gives you:
- an existing player base
- ability to provide your own game rules
- ability to use exclusive visuals/assets
- ability to avoid licensing fees destroying your profitability
And if your organization goes under, the game lives on. If another organization goes under, you have opportunities to capture more of your market. You have the ability to improve your viewership by funding improvement of the game.
And, by the way, if you suck, somebody who can do it better will come along and take your money, which is actually good for the viewer and the player, which is much better than the way current games/leagues deteriorate.
"Esports" games require absolutely massive communities (e.g., marketing) and no open-source game has even come close to the scale required to sustain an esport.
Servers can be community-run and centralized per league/community. See TF2 (more decentralized) and FaceIt (Counter-Strike) for examples of self-moderating communities than can exist outside of the developer-centralized model.
At no point do I assume P2P to be a requirement or even beneficial in this scenario.
As for FaceIt, that came about from the existing CS community. After 15+ years of the game being out. You can't just build something like that in a vacuum.
The whole point is that "esports" depends on centralized servers and somebody footing the bill for that. Even in fighting games that are P2P, there's still the matchmaking lobbies.
And you could say "well, there's FightCade!"...but a) that's illegal and b) I've never seen more than 150 people in a FightCade lobby and it's usually around 10-30. Esports games have > 10^4 concurrent players.
Your argument sounds to me analogous to “everybody will just use Twitter/X because why would somebody want to pay to host a Mastodon instance with no participants.”
The reality is that some (but not all) people do genuinely have grief with the centralized platform (moderation, censorship, toxicity), do have the ability to pay for something better (or freeload off people who do care), and are thus willing to make a change with there’s sufficiently low resistance.
The reason this is possible at all is because people that did care in a very small minority made the decentralized platform for free while everybody else was oblivious. It doesn’t get built overnight and usage doesn’t convert overnight, but when the solution exists it can then be viable.
I do think open source games are a fair ways off, but I find it impossible to believe that people will work for decades for free on open source social media because they enjoy it, but the same will never be true of games.
It’s an eventuality, and it is one that changes dynamics for the end-consumer.
Perfect example. With the existence of a sufficiently-close open-source base, the community would have self-organized TF2 out of existence with a functional replacement. This just isn’t possible today, but when it is possible there will be no turning back.
If by "sustain an esport" you mean as a profitable enterprise, then probably not. Is that the best metric though? Open source games can become popular enough for competitive scenes to emerge; Warsow is an example of this.
Popular enough for competitive play but not enough to get corporate sponsors seems fine to me. It's probably not healthy to be promoting the idea (to kids particularly) that playing video games can be a profitable career.
For it to be an actual contest it needs an actual sample size of players. Sports need spectators and narratives that generate interest.
Nobody gives a damn about Warsow the same way nobody gave a damn about Ferret-Legging.
It's not a sport if its players are limited to "you and your mates from round the way", that's just a game. Sports are meant to expose the limits of human potential.
Maybe an open source game could work for smaller "leagues" that don't have the resources to develop an entire game from scratch (and assuming there's even a demand for a small league like that), but even then forking/building atop an open source game is still a lot more work than just using an existing commercial game that has more flexible multiplayer options (and so long as there aren't licensing issues)
And apparently the industry is not so interested in Linux. Proton from Valve is interesting but crashes on my machine all the time. So I guess we have to build ourselves and have some fun in the process.
And neither do open-source projects. The majority of people looking to play video games do not want to be the ones moderating. They'll take the path of least resistance and let companies do it for them.
> If I play on a local soccer team and they're all racist or homophobic, I'll find a new team or a new league. But at present there's no "find a new Rocket League".
You don't need to find a new game though, you can find a new league. Except for maybe battle royale games, most games still allow private matches. Make a private match and invite the people you want to play with. Organize a league yourself. It'll be easier than building your own game, and you'll run into the same problems with an open-source game: how do you convince people to play your league rather than the official easy matchmaking? Rather than the official huge playerbase game?
Mastodon is I think a good example of this in social media.
A game example is Team Fortress 2, where community-run servers coexist with matchmaking servers. Some of these are buy-in communities, some of them are freemium ad-ridden servers, some are just small friend groups. And they can pose an alternative to official matchmaking on merit and exist just fine. Oh, and they can remove cheaters and bots themselves.
This is a good example to your last point: when the de-facto league has cheaters, bots, or lack of moderation, people will flock to alternatives en masse, but the alternative has to exist for it to work. This isn't a "problem" with the open-source game, it's the main feature. It's the bridged gap between "building your own game" and "the official huge playerbase game" -- they're almost the same out-of-the-box, so neither the building nor convincing is insurmountable, they're surface-level.
There may be some street baseball games here and there, or independent baseball leagues, but the MLB has the viewership, the money to buy all the players, the sponsors, the stadiums, etc. In many ways they have a monopoly on the sport, including a unique exemption from various antitrust laws handed down by the supreme court.
I like open source and open source games, I played many hours of Armagetron Advanced back in the day. But organized competition usually needs an organization to back and, well, organize.
However, Rocket League is one game that I just can't master. I've tried, really really tried, but I just can't play it with any amount of skill.
It's a shame, as it looks really fun and I hear my son and his mates having a ball when they play.
Turn off ALL chat except tactical team quick chats, otherwise it's a toxic quagmire.
vote to forfeit 1/2This is rocket league!
Like you'll never be a big fish in a small pond. If you played as much as you currently do but could only play with people local to you, you'd be the best person you know at this thing. And that's a really good feeling. But you'll never get that feeling, because you should really be grinding past whatever plat 3 is in order to not suck.
The big fish eat all the small fish until the big fish are the only ones left.
I have a triple-digit-hour play time and I could barely get out of Bronze. I can't really explain why, but my brain just doesn't mesh with it, skill-wise. It's still a lot of fun though (otherwise I wouldn't have spent so long playing it!). In fact, being so bad at it somehow made it more enjoyable - it's not often I allow myself to be bad at something.
I'd rank myself as "unusually good" at Mario Kart, which is obviously a very different game, but it surprises me that I have such a wide skill gap between the two games.
Shake: off
FOV: 110
Distance: 280
Height: 110
Angle: -3.00
Stiffness: 0.75
The rest aren't relevant for me because swivel speed is about looking with the right stick and transition speed is about switching to/from ball cam, and I leave ball cam on.Of these, I believe the most important (by which I mean tangibly relevant to control quality/feel) are distance, stiffness, and, to some degree, height+angle. Shake and FOV are also important, but those are the only good values for those settings.
I used to play with max distance because it felt better for visibility, but I found some people saying 270/280 works much better for them for precise ball control and accurate strikes, and that does seem to be the case. Stiffness is the other setting that will make the most difference in feel: Lower values let the camera's distance from your car rubber-band further in relation to your speed. It might seem as if maxing this out would be ideal, because why wouldn't you want the camera to follow your movement as closely as possible, and why would you want the camera to lag behind you when you go faster and disorient you when you're trying to aerial? But I'm not so sure. I've tried stiffness at 1 (max) and I don't remember why, but apparently it didn't work for me, because I lowered it to 0.75, which I guess I found acceptable enough not to have changed it. I've just come across some people saying a stiffness of around 0.35 is counterintuitively great as it turns out that moving the car without instantly moving the camera helps a lot with car control for some reason, so I'm about to test run that value myself and see about it.
My current settings:
Shake: off
FOV: 110
Distance: 280
Height: 110
Angle: -4.00
Stiffness: 0.40
Transition: 1.30
I also used to run with stiffness maxed out and I think it contributed to the motion sickness feeling. There's definitely a tradeoff in all of these values.There's a control config I tried and greatly enjoyed that addresses this. I want to get back into it but I haven't yet felt like dealing with the adjustment period again. This works best if you have a controller with mappable paddles.
Left stick X: Ground steer and air steer (yaw)
Left stick Y: Pitch
Right stick X: Air roll
Right stick Y: Ground throttle
And then jump/boost/powerslide go on triggers/bumpers/paddles as desired.Being able to simultaneously yaw and roll feels quite nice once you get used to it and allows for some surprisingly intuitive recoveries, wall jumps, etc. "Tornado spinning" is now as simple as pushing the sticks in opposite directions. Other interesting results can be had from the various other combinations of stick directions.
This does require you to no longer use the button pad for anything, so if you use ballcam toggle while playing, or need to peek at the scoreboard a lot, or need a thumb free for real-time quickchats, or whatever, then I hope you have a lot of extra paddles