" @kirakira@furry.engineer
@vivi aaa this seems perfect
i’m not sure if you’re familiar much at all with C#, but it gives me the impression that methods are implemented kinda analogously to C#’s extension methods? where they’re actually static methods which are implicitly given the target object as the first parameter when called with dot notation? (the target is identified by the this Moss self part in my example below)
public static bool IsMoss(this Moss self) {
return true;
}
var vivi = new Moss();
if (vivi.isMoss()) {
vivi.hold(duration = PositiveInfinity);
}
@rowan yeah this is kinda what Kotlin value classes do. for instance like the example in the documentation i linked, you can create a wrapper value class Password(val backing: String) which wraps over a String, and you can define functions as members of the Password class like fun printObscured(withChar: Char = '•') = times(backing.length) { print(withChar) }.. in compiled code, except for cases where the value class is required dynamically (like in in-position of a function i.e. fun foo(takes: Password), Password does not technically exist at all and that printObscured function actually ends up just being compiled down to something like (non-member function) fun printObscured(string: String, withChar: Char = '•') = times(string.length) { print(withChar) } by the compiler, and calls to it (nor general constructor calls like val myPassword: Password = Password("password1234") do not literally create an instance of the Password class when instantiated, just the backing instance i.e. val myPassword: String = "password1234". "boxing" and "unboxing" so to speak, happen opaquely and without additional verbose burden on the programmer,,
Anyways it's really cool sorry for kotlin infodumping 
the most egregious example of this fumbling was the ending of the game when Make This Right is featured. i cannot tell you the fucking noises i made when i heard this song start playing in the game. unhinged is putting it lightly
but the problem is that the song cuts in and out three separate times as the game transitions from gameplay to cutscene, awkwardly stopping and starting the song. it completely kills all of the tension and build up that the song has. by the time the fighting actually happens, i was already completely frustrated with how often they’d staggered the pacing and interrupted the music. they could have literally cut 95% of the talking and all of the cutscenes in favor of something less intrusive and it would have been so much more emotional and impactful
like dont get me wrong, the game is fine. it’s fun, the aesthetic is cool, but there were just so many times when the music was backseated and fumbled in awkward ways for the sake of highlighting the story or some cutscene and it’s fucking tragic. i feel like if the game had handled the music with more care, that game could have gone from awkward but pretty fun to goty / fav of all time for me. all they had to do was really pay attention how strong the soundtrack was and use that to their advantage as much as they possibly could – even if that meant cutting cutscenes and dialogue
Furi’s development studio (The Game Bakers) struck gold with that OST and gold leafed a hotdog with it 
seriously? the toxic avenger, carpenter brut, lorn, and danger on the same fucking project????

i am also once again remembering the incredibly conflicted and ambivalent feelings i have for that game that well up each time i hear how incredible this soundtrack is
I absolutely loved the twisty convoluted battle-of-wits logic in Death Note (even though of course it would be very impractical in a real life battle of wits) and in theory I feel like Kaguya-sama’s comedy spin on it is actually really clever because it’s just as entertaining and it’s funny and it’s good satire. but omg as a former Gifted Kid™, it is way too real for me lol. I can’t watch it at all - it hurts
also I tried Code Geass because I had heard that it had similar battle of wits stuff as in Death Note, but the problem is that they handwave all of the clever stuff instead of showing how the characters are being clever. it’s just like “suddenly, Guy Protagonist has an army of mechs because he’s smart or something. don’t think about it”
strangely enough, I felt like No Game No Life (sexualized loli warning for that show btw) did a better job of giving me that same feeling of watching clever plots unfold, where I need to pause the video and think about things to be able to even follow it lol. I feel like the people who write NGNL are really nerdy about mathematically breaking down games using stuff like game theory and it shows and I’ve learned (and then probably forgotten) lots of cool stuff from that show
@vivi i find myself wanting to reach for classes in Javascript as thin wrappers, but it’s really hard to unwrap them. valueOf() works implicitly when doing an operation with another primitive, but that’s often not enough. rust can kinda do this with stuff like the newtype pattern with impl AsRef and From/Into. that generally does what i want
as a specific use case that i have right now, i’d love to wrap WebGL/WebGPU stuff in helper classes for myself and be able to pass them around as if they were their inner values, but also give myself a way to deal with them in fewer than 716 calls to do a single useful thing
@vivi i haven’t read all of this documentation yet (and i’m also not super familiar with kotlin) but this actually seems perfect! the idea of a lightweight wrapper class to provide domain specific context / methods / computed values (and maybe even share the same identity as the inner value, or be easily coercible) is ideal
i think the idea of a wrapper class should have more first class support in languages
inheritance: hey, i-
no
oh to love racing games and being anti car at the same time…