• 0 Posts
  • 4 Comments
Joined 1 year ago
cake
Cake day: June 29th, 2023

help-circle
  • Whenever I replay OOT I never have a problem with Navi. She rarely hard interrupts, usually just a short tone and flashing C button that goes away after a few seconds. The voice lines only trigger if you press the button to call her, in most cases the hints she gives are genuinely helpful, and stays out of your way for the vast majority of the game.

    Fi from skyward sword though… Far worse because she does interrupt gameplay, often repeats what the last dialogue box just fucking told you, and takes several dialogue boxes to tell you what Navi would have taken one to do. I’m glad they significantly overhauled her interactions in the HD release but I’m still going to be hesitant to play that game again


  • Yup your right, I was wrong. Valve keeps the copyright regardless.

    Dolphin situation was different though. https://dolphin-emu.org/blog/2023/07/20/what-happened-to-dolphin-on-steam/

    Valve only ever insisted that Nintendo had to give Dolphin permission to distribute since Valve was afraid of a potential DMCA coming from Nintendo if Nintendo thought that the encryption keys were IP illegally being redistributed. Since Nintendo says emulators are illegal everywhere but a courtroom, Dolphin team knew that they’d never get an ok. Valve probably knew that but didn’t care enough to help fight that legal battle.

    I’m not sure Valve cares about brownie points with Nintendo. The Steam Deck is a direct competitor against the Switch, Valve has done nothing to curtail the use of Switch emulators on Deck, and the work Valve has been doing makes using a switch emulator a better experience.

    This whole thing only makes sense if Valve wanted to protect their IP. Involving Nintendo really does sound like blame shifting without having to actually go to court


  • I’m with you on the first part. It makes no sense for Valve to do this. Using LibUltra or not, Nintendo has been relatively lax on people creating new code for the N64. At least to my recollection only in cases where Nintendo felt their IP was directly being threatened did they try and take down fan projects. Even then they heavily rely on the redistribution of Nintendo IP to take things down. Admittedly I have only seen others talking about the Portal 64 project using LibUltra but even so that’s Nintendo’s fight, not Valve’s.

    I don’t see how Valve could possibly be afraid of getting sued here by Nintendo, it doesn’t make sense. Valve did not create it, nor distribute, advertise, or aid in any way. IANAL but I don’t see how Valve could possibly be listed as a party to the lawsuit unless Nintendo lawyers agreed with Valve lawyers to go after this guy for IP theft.

    TBH I see this more as Valve seeing that with a project this publicly known, if they don’t defend their IP here they’ll lose any future copyright claims and want to prevent it. They also see an opportunity here, blame Nintendo who won’t flinch it at since they get labelled legal bad guys all the time, no real dent to their reputation while saving Valve’s internet golden child perception. Valve would never do something like this so it MUST be Nintendo’s fault. Based on the comments in this thread and I’ve seen else where, that seems like a good assumption. Nintendo takes the heat while Valve protects their IP.


  • In pure C things are a bit different from what you describe.

    Declaration has (annoyingly) multiple definitions depending on the context. The most basic one is when you are creating an instance of a variable, you are telling the compiler that you want a variable with symbol name X, data type Y, and qualifiers A,B and C. During compilation the compiler will read that and start reserving memory for the linker to assign later. These statements are always in the form of “qualifiers data_type symbol;”

    Function declaration is a bit different, here you’re telling the compiler “hey you’re going to see this function show up later. Here are the types for arguments and return. I pinky swear promise you’ll get a definition somewhere else”. You can compile without the definition but the linker will get real unhappy if you don’t have the definition when it’s trying to run. Here you’re looking at a statement of “qualifiers return_data_type symbol(arg_1_data_type arg_1_symbol,…);” Technically in function declarations you don’t need argument symbols, just the types, but it’s better to just have them for readability.

    Structs are different still. Here you’re telling the compiler that you’re going to have this struct definition somewhere else in the same translation unit, but the data type symbol will show up before the definition. So whenever the compiler sees that data type show up in a variable instance declaration it won’t reserve space right away but it has to have the struct definition before compilation ends. This is pretty straightforward syntax wise, “struct struct_name;” (Typedefs throw a syntax wrench into this that I won’t get into, it’s functionally the same though)

    One more thing you can do with variables during declaration is to “extern” them. This is more similar to function declaration, where you’re telling the compiler “hey you’re gonna see this symbol pop up, here’s how you use it, but it actually lives somewhere else k thx bye”. I personally don’t like calling this declaration since it behaves differently than normal declaration. This is the same as a normal variable declaration syntax with “extern” tossed in the front of the qualifiers.

    Definitions have two types: Function definitions contain the actual code that gets translated into instructions, Enum, struct, typedef definitions all describe memory requirements when they get used.

    Structs and enums will have syntax like “struct struct_name {blah,blah,blah};”, typedefs are just “typedef new_name old_name;”, and function definition “qualifiers return_data_type symbol(arg_1_data_type arg_1_symbol,…) {Blah,blah,blah}” (note that function definitions don’t need a ; at the end and here you do need argument symbols)

    Lastly, when you create a variable instance, if you say that you want that symbol to have value X all in one statement, by the standard that’s initialization. So “int foo = 5;” is declaration and initialization. Structs and arrays have special initialization syntax, “struct foo bar = {5, 6, 7};” where the numbers you write out in the list gets applied in order of the element names in the struct definition. You can also use named initialization for structs where it would look like “struct foo bar = {. element_one = 5, .e_two = 6, .e_three = 7};” This style syntax is only available for initialization, you cannot use that syntax for any other assignment. In other words you can’t change elements in bulk, you have to do it one at a time.

    C lets you get real wild and combine struct definition, struct instance declaration and initialization all into one! Though if I was your code reviewer I’d reject that for readability.

    <\wall-o-text>