InXile did Wasteland 2/3 and Torment: Numenara. All fine RPGs.
Completely agree that the talent needs to go elsewhere - this deal is the death knell for creative works at EA. I'd be careful about what you promise on Kickstarter, though. Signing up to lots of stretch goals is likely to burden your game with lots of tickbox features that don't make any sense.
In fact, I'd say that Bloodstained (while generally excellent) would be improved by cropping out some stuff. The crafting, cooking and crop farming could just be chopped out whole, and put all the upgraded gear in the place where you find items. Would swap out some of the enemy and boss count for a bit more variety. And 'hard mode' could have done with some playtesting and a general rebalance, or just be renamed 'infrequent crazy difficulty spike' mode. But someone paid for those tickboxes and so we've got them.
Letting RPG designers run completely free from publishers can be a recipe for disaster, too. Pillars of Eternity? Excellent. PoE2? Unbelievably unfocussed and sprawling, disrespectful of your time, goes nowhere fast. Could possibly have made two games out of it if someone had told them to chop it in half and then polish the bits, but was a bit of a studio killer instead, could never sell enough to cover the costs.
In Java, all objects are passed to methods 'by reference', and there is no way to mark them as immutable. So strictly speaking, they're all 'out variables'. This is the cause of a lot of mistakes in Java, where you eg. pass a list to a method, which then mutates it in some way. That will change the original that the caller passed in, which is normally unintended and may break class invariants. So Java tends to have an absurd number of 'safety copies' and immutable wrappers of collections.
I'd probably describe the inability to mark things immutable as the main problem with Java. The golden rule of concurrency is that if you share mutable state, you must use an appropriate synchronisation primitive. It's not easy to mark things immutable (
finaldoesn't do whatconstdoes in C++) and although you can make class internalsprivateif you like, the junior devs at my work will come along and add accessor methods.tl:dr; yes it does. Passing an
AtomicBooleanas a method argument will do as a built-in 'mutable object that holds a boolean and can be checked by caller', although it'll be slower than your own custom object since it does sync you won't need.