5 ms·
> My priorities are reasonable performances and the fastest iteration time possible. I bought Mount & Blade II Bannerlord in 2020-03-30. I love it to death, b
by mrkeen 3y ago
> My priorities are reasonable performances and the fastest iteration time possible.
I bought Mount & Blade II Bannerlord in 2020-03-30. I love it to death, but come on...
// 2024-02-01
$ curl https://www.taleworlds.com/en/News/552 | grep "Fixed a crash that" | wc -l
29
// 2023-12-21
$ curl https://www.taleworlds.com/en/News/549 | grep "Fixed a crash that" | wc -l
6
// 2023-12-14
$ curl https://www.taleworlds.com/en/News/547 | grep "Fixed a crash that" | wc -l
101
Maybe feeling like you're iterating fast isn't the same as getting to the destination faster.
Edit:
Lol guys calm down with the down-vote party. I was counting crashes, not bugs:
$ curl https://www.taleworlds.com/en/News/547 | grep "Fixed a bug that" | wc -l
308
Does your C++ not crash, just theirs?
- tedajax 3y agoThis comment is nonsense
- stephc_int13 3y agoYeah this is a common problem in the industry, we rarely have enough time to refactor what should be considered prototype-level code into robust code.
- hi-v-rocknroll 3y agoThe game dev industry could form a consortium to launch its own dedicated general purpose language built from scratch to compile very fast like V or Go, run predictability, be much safer, be more reusable, and be extremely productive with the lessons learned from C, C++, C#, and more. Also, I think LLMs will be able to run against code bases to suggest mass codemods to clean things up rather than having humans make a zillion changes or refactoring fragile areas of tech debt. LLMs are already being applied to generate test cases.
- stephc_int13 3y agoI believe that better tooling can help, yes. With refactoring, debugging, creating performance and style reports, updating documentation and a ton of other stuff.
- jibe 3y agoJonathan Blow’s Jai is an attempt at something like this. It’s looking promising so far!
- hi-v-rocknroll 3y agoInteresting. I went through the primer spec. Appears to be a different kind of D or Go with some key points. Any new language should begin with a specific thesis of specific competitive advantages and problems it solves over existing customary and alternative tools. Kai appears to fulfill this property, so that's a good sign.
- johnisgood 3y ago> It is still in development and as of yet is unavailable to the general public. Is it still the case?
- neonsunset 3y agoC# is that language (see Godot, Stride, FNA, Monogame).
- hi-v-rocknroll 3y agoNot really, it was adopted. It originated from Microsoft as their post-J++ Java alternative for CLR for the purposes of making it easier to write banking server software and Windows apps.
- neonsunset 3y agoDoes it matter what it was 20 years ago? It is the go-to language for gamedev today and only keeps getting better at it.
- hi-v-rocknroll 3y agoBoth things can be true. I'm saying it wasn't designed to be as such. I don't what you're arguing about.
- lionkor 3y agoWith Rust and the exact time iteration times, management and deadlines, you end up with the same amount, just theyre panic!() instead. Thats an improvement, sure, but its fighting a symptom.
- mrkeen 3y agoWith modern languages that take safety more seriously, it's a lot easier to spot places where the code 'goes wrong'. In an older language, you have nothing to tell you whether you're about to dereference null: foo.bar.baz = ...; Even if you've coded it 100% correctly, that line of code still looks the same as code which will segfault. You need to look elsewhere in codebase to make sure the right instructions populated those fields at the right time. If I'm scrolling past, I'll slow down everytime to think "Hey, will that crash?" Compare that with more safety focused languages where you can see the null-dereferences on the page. Unwrap() or whatever it is in Rust. Since they're visually present, you can code fast by using the unsafe variants, come back later, and know that they won't be missed in a code review. You can literally grep for unsafe code to refactor.
- sam0x17 3y agoThere are a bunch of useful clippy lints to completely disable most forms of panicking in CI. We use this at my work since a single panic could cost millions of $ in our case.
- thom 3y agoHard to know what TaleWorlds are actually optimising for because half the features of Bannerlord feel like they’ve never been played by a dev let alone iterated on.
- bogwog 3y agoThat game (currently) has 88% positive reviews on steam and a 77 metacritic score with over 15.5k people playing the game right now (according to steamcharts.com) Thats a lot of happy customers.
- meinersbur 3y agoMy impression is that this is due to their non-robust programming style. They do not add fallback behavior when e.g. receiving a null object. It would still be a bug, but could be a log entry instead of crash.
- mrkeen 3y ago> My impression is that this is due to their non-robust programming style. It's been 50+ years. I don't think that it's worthwhile just telling the programmer to do a better job. > They do not add fallback behavior when e.g. receiving a null object. It would still be a bug, but could be a log entry instead of crash. This is a pretty big feedback loop: * The programmer puts the null into the code * The code is released * The right conditions occur and the player triggers it * IF DONE SKILLFULLY AND CORRECTLY the game is able to recover from the null-dereference, write it out to a log, and get that log back to the developers. * The programmer takes the null out of the code. If you don't do the first step, you don't get stuck doing the others either.
- nurettin 3y ago50+ years and people still fail to grasp this. You have to put something (an optional, or a default constructed object in a useless state) and all you did was to skip the null check. In case of optional, you introduced a stack rewind or a panic. Everything else stayed the same. Maybe that default even deleted the hard drive instead of crashing. Coding is hard. "just don't code" is not the answer. You can avoid something, that doesn't mean it won't show up in some other fashion.
- sam0x17 3y agoAgain, if you disallow unwrapping and panicking at the CI level, you actually force your developers to properly handle these situations.
- mrkeen 3y ago> You have to put something (an optional, or a default constructed object in a useless state) No, you really don't. There is no default number, no default string, no default piece of legislation, no default function.
- kbenson 3y agoI can't really comment on the quality of the game or experience or how buggy it feels because I've never played it, but I will say that counting fixed crash situations is a somewhat arbitrary and useless metric. If each of those crashes affected and was reported by a single person or even nobody because no regular person could really encounter it is a vastly different situation than if each of those crashes was experienced by even 1% of the users. The criteria by which something is decided to mention in the patch notes is not always purely because the users care. Sometimes it's because the developers want to signal effort to user and/or upper management. Maybe Mount and Blade was super boggy in the past and is still super buggy now so all the crashes fixed are just an indicator of how large the problem is for them and how bad the code still is. I dunno, you didn't really give any information to help on that front.
- Repulsion9513 3y ago> If each of those crashes affected and was reported by a single person or even nobody Then do you really think they'd be spending time fixing it? (Actually, you know what, they probably would.)
- kbenson 3y agoThat's why I had a paragraph mentioning different reasons things might be mentioned. I don't think it's uncommon to find a bug that could cause a crash while working something else, confirm it does crash, and then fix it. If the culture is to mention those things in patch notes even if you're not sure it actually ever caused a user problem, then it will be listed. That doesn't mean all, or even any, of the listed crashes were like that, but it does illustrate that it's hard to know what they actually mean without additional info. (for what it's worth, I'm a long time Tarkov player, so I'm definitely familiar wroth buggy games and apparent development problems with rushing, so this is more a devils advocate position on my part)
- cultureswitch 2y agoMount & Blade 2 was released very early and despite constant improvement (they keep patching it at a strong pace), it's only slowly evolving. It was even downright unfinished on release, with many game systems claiming to be doing something actually being simply unimplemented. But despite all that it was and is still fairly playable and enjoyable, even at release. A game only needs a great core gameplay loop to succeed, even if large parts of it are completely broken. Interestingly, Taleworlds make their own engine with fairly unique capabilities. 200 players can fight in fast paced, precise melee combat on a single server. Even more than in fast-paced shooters, it can be extremely frustrating for players when the game doesn't behave in exactly the way that you would expect (for example, standing undefended just a few centimeters away from the reach of an opponent's swing, or relying on interrupting their attack with your own landing 100 milliseconds before). They've made their own scripting language for everything related to policy. So this scripting language is what modders interact with. And it is absolutely atrocious as a language, but it serves the purpose well enough.
- raincole 3y agoPhotoshop does crash. Trust me if you do enough image editing you'll know it's not even a super rare event. They're generally doing a poor job handling the situations where you have no enough storage or RAM. It didn't stop Adobe from being worth 200B.
- CJefferson 3y agoI love Rust, but a crashing released game is better than a half-finished "perfect" game, or a game where you couldn't iterate quickly, and ended up with a perfectly tuned, unfun game.
- Repulsion9513 3y ago> a crashing released game is better than a half-finished "perfect" game For who? I, and I'm pretty sure most other gamers, would rather a fully-finished "perfect" game that took twice as long.
- StressedDev 3y agoThe problem is we would have a lot less games and the games we would get would not be as fun. Rust appears to have the following problems: 1) As the article pointed out, game developers are less productive in Rust. This is a huge problem. 2) Game budgets are not going to get bigger. This means that if Rust reduces productivity, games are going to be less polished, less fun, etc. if they are written in Rust. 3) Game quality is already fine. 99% of the games I play have very few noticeable bugs (I play on an Xbox Series X). Even the games with bugs are still fun. Basically, gamers are looking for fun games which work well. They are not looking for perfect software which has no bugs.
- lelanthran 3y ago> As the article pointed out, game developers are less productive in Rust. This is a huge problem. I don't think it's limited to just game developers though. Unless you are writing something in which any GC time other than 0ns is a dealbreaker, and any bug is also a dealbreaker, you're going to be less productive in Rust than almost any other language.
- pcwalton 3y agoOh, come on, we're yet again extrapolating from "Rust is bad at rapid iteration on an indie game" to "Rust is bad at everything". If Rust were really that astoundingly unproductive of a language, then so many developers at organizations big and small wouldn't be using it. Our industry may be irrational at times, but it's not that irrational.
- int_19h 3y agoAnd yet the fact that Bannerlord game logic is entirely in C# makes this possible: https://github.com/int19h/Bannerlord.CSharp.Scripting https://github.com/int19h/Bannerlord.CSharp.Scripting which in turn makes it a lot easier and more convenient to mod. Try that with Rust...
- flohofwoe 3y agoHow many of those crashes were caused by memory safety issues though? A lot of those crashes might simply be called a "panic" in Rust.