The game has only 4-way movement, but it doesn't function in typical 4-way movement. It has no stair-stepping diagonal if two inputs are held, and it also doesn't override your movement with the latest input, but most strangely, it prioritizes up and down movements. For example, if you are holding up or down and also press left or right at the same time, it will ignore these and Link will continue moving up or down. However, if you are moving left or right and also hold up or down, Link will immediately begin moving up or down for as long as those buttons are held before going back to his original left/right movement (so long as that is still held of course).It feels really awkward, I don't know if I can play it. Is there some kind of romhack that fixes this? I don't mind 4 way movement, but its current implementation is very poor.
Son, this better be bait.
>>12653715>weird>awkward>Is there some kind of romhackyup this game confirmed kino
>>12653723>>12653734Explain why up and down should take priority over left and right, and how that makes sense?
I don't mind bait, but its current implication is very poor.
>>12653738explain why you care? just dont press all 4 directions on the dpad at once then?
>>12653798Are you pretending to be retarded? This is not about SOCD where you press opposing directions which is only possible on keyboard/hitbox in emulator. This is about simply inputting a diagonal, whether on purpose or accident, and how the game responds. Even if you somehow never input a diagonal accidentally (which is very common on vast majority of controllers), just changing/rolling from up/down to left/right and vice versa will feel totally different as Link responds favors up/down movement so it creates an awkward delay. Also, even when moving up/down, if you have an errant left/right input, Link will frequently jitter and spaz out. Again the whole thing feels very clunky and off. Some arcade games like Donkey Kong have 4-way movement, but those are with actual 4-way sticks with 4-way gates that prevent things like this from happening.
>>12653815>chinkheld tranny actually tries to play a game>gets filtered and raped and cries after 5 minutes
>>12653838This is present on original NES and every emulator and even the GBA version. It's just how the game works moron.
>>12653863no one ever talks about accidental diagonals except for poser trannies. stop jittering and spazzing out and play slowly
>>12653882you can't be serious, you immediately notice the controls are fucked beyond belief in a way unlike any other game. Even without diagonals, it would be fine if it just overrid your previous input, or at least didn't only favor up/down over left/right
works on my machine
>>12653932Not sure what your machine is, but that's how it works on an NES
>>12653715I made this same thread a few months ago when I discovered this. its Game Boy games too. it has to do with the order in wich the dpad inputs are checked
>>12653863it how every 4 directional top down games work on nes and gb. every single game without diagonals is like this
>>12653963How many top down games on the NES don't have diagonals? Certainly not many
>>12653889I never noticed in my entire life until I was actively testing for false diagonals on a chinkheld. are you using a controller with an undersized dpad that requires you to slide from up/down to left/right? I dont run into this proboem on regular sized dpads because I am more inclined to directly press a direction
>>12653968most dont
>>12653973Jackal, Contra, Super C, Guardian Legend, etc all do.I've not really played any that don't besides Zelda. I think Mother 1 also lacks diagonals, would explain why movement feels so shit
I don't think it buffers movements, they are taken right from the pad every so often. So there is no alternating if you hold two, because the third position doesn't exist, it will simply repeat whichever trigger is scanned first for the d-pad even if you were to hold both.Perhaps a game could implement logic to try to detect a diagonal hold, and that's how I bet it's done when it seems like the controller provides it, but IIRC there is no hardware to facilitate it.
found the threadhttps://desuarchive.org/vr/thread/12412567/#q12412567
>>12653953>it has to do with the order in wich the dpad inputs are checkedExactly, it will scan them in order, because they don't each have their own input line.If a developer knew how it worked they might be able to simulate a diagonal press but there are only 4 contacts.
>>12653984The way it's described in the thread is the opposite to how NES implements it.
>>12653996Please briefly explain how the NES takes the controller input, and how many contacts and positions it has.We'll wait.
>>12653715Yeah, I've checked the annotated ROM assembly codes on github. Zelda's input logic checks each key in succession. It doesn't check which key is being pressed while a new one is pressed. Also the code structure is very messy and inefficient in general, making the program data so much bigger than it should've been, but they have a ton of space in PRG ROM so I guess that's alright. Still laughable though, it's a lazy port from FDS and they didn't bother changing the data structure.You could definitely make a ROM hack for that control issue easily, if you know how to code in assembly. I'm bad at it. You should go to ROM hacking spaces and ask how.
>>12654004I'm just saying it prioritizes up and down movements, and will ignore left and right when going up and down, but not vice versa. That is the opposite to what that thread says
>>12653980Even Atari 2600 games have diagonals. Nintendo programmers are laughably bad.
>>12654015It's just scanning the pads in order, they don't all have their own lines, it's why you can't push two pads at once.
>>12654025It scans up/down first, thus always prioritizes those. Not sure what you're trying to argue
>>12654035It's not relevant though. What's relevant is that there is no such thing as diagonal and it would be up to the developer to try to create such a thing, based on some series of previous inputs.
>>12654053It is relevant since it's the opposite of what that thread says. It doesn't need diagonals, just needs to override with latest input
>>12654059Nah that's up to the developer, it only tells you the current input.If you want to know if there's a "diagonal" press, which doesn't exist, you have to sample some number of previous presses to guess the intent of the player. The controller press is memory mapped, it happens instantly, and if you don't check it as often as it can update you can miss a press so it's expensive or "dodgy" and this explains why so many games have shit control - you can run the game loop or check the controller but not both at the same time on a "1-core" system like NES, and there is no buffer holding a controller input stream, it just boom changes a flag somewhere in some byte of flags that represents the controller state lol.
Some 2 cent chip that could guess diagonals could probably have saved the NES. Even C64 could sense diagonals (at the cost of available buttons).
>>12653996maybe I did a dyslexia. or maybe you did
>>12653715>walkingyeah we move around the world with the screen scroll glitch herehttps://www.youtube.com/watch?v=CLVKtoZeAt4
>>12653715Now you know why people prefer LTTP, it feels miles better to play
>>12654072yeah it could have been saved from being first place>>12654120even better, go play teletubbies. feels better
>>12653932>your emulator works by alternating inputs when you use your 8-way gamepadthat's not how NES did it
>>12653715tl;dr middle finger on up button or down buttondo not use thumb, use your whole hand
>>12654125While it had great sales, especially counting into the 2000's(?) as they do, it was blown away by several earlier games machines, such as C64.Which can play Mario today. And Sonic.https://www.youtube.com/watch?v=aFBj6PfrnMkhttps://www.youtube.com/watch?v=vjvaWc5re5YBetter than the NES *OR* Master System.
>>12654134yes, just like your tranny gash wound is better than the prom queen *OR* cheerleading captain from high school.
>>12654158NES is OK. It's mid today. People are pushing other things as hard or harder. Ultimately it has shit sound, especially compared to C64, and other deficiencies which the devs were able to overcome largely. But did they really need select AND start? No. No, they could have used the select line for something better.
>>12654170NES library mogs C64 into oblivion Not one single C64 game had any staying power while NES had dozens of generational timeless classics still played today
>>12654170If you are old enough to care about the C64 you are too old to be saying "mid".
I don't really care about whatever disgusting and unnecessary slapfight is going on in this thread, but it is true that Zelda has always had funny movement. I knew this as a kid in 198X and I know it now.However it is pretty comfortable to deal with in every case that I can think of except maybe when you accidentally use a ladder to start crossing a water tile that you did not wish to cross, or something like that. Basically OP is freakishly oversensitive and inflexible, or a troll... but is not wrong about the basic fact that movement in this game is a bit funky
>>12653715I just dislike how much better the game's color is on my phone compared to my Switch, the latter being dull and washed out, the former being really lively.
>>12654287Nah you pick it up. Anyway the point is, the NES can't do diagonal. That's all. It can, but it's kind of faking it in software. That's all.OP's correct.
>>12654295Nigga just change the NES palette. For me it's Sony CXA
>>12653715Maybe try mapping the directional buttons to the analog stick? There might be a way to ignore diagonal commands coming from the analog stick. I think joy2key or ds4windows can do it. Try looking up 'restricting d-pad diagonals' or something. I gotta get back to work. Will check back in later.
>>12654287>unc dont know C64 is trending on everyone's fyp rnngmi
>>12653723>>12653715I have to agree. Your problems with this game are fairly stupid. I played this when I was 4 years old. One of my earliest memories. I found it very intuitive. As a 4 year old child.
>>12654304>Nah you pick it up.No I don't. Since I am not an idiot, I pick up new terms when they are good, and that one is bad.
>>12654309Another way would be to become a better person who isn't able to be needlessly filtered by something that is almost entirely harmless
>>12653984>>12653996(1/3)I'm the one who wrote the explanation in the archive. I will go into more detail since I seemed to have caused some confusion.Inside every NES controller is an integrated circuit called the 4021. The 4021 is an 8-bit shift register with parallel input and serial output. What this means is that the bits of the register are filled all out once with a single pulse, but are sent out one at a time across 8 pulses.Refer to the diagram. The buttons are connected to the PI pins of the 4021. If a button is being held, the signal of the corresponding PI pin will be high. Otherwise, it will be low. Whenever the signal of the Parallel/Serial Control pin is high, the signals from the PI pins are latched to the corresponding bits of the 8-bit register. When the signal of the Parallel/Serial Control pin is low, the register value remains dormant.The register value is reflected by the signals of the Q pins. If bit 7 of the register is 0, the signal from the Q8 pin will be low. If bit 7 is 1, the signal of Q8 will be high. Bit 6 and 5 map to pins Q7 and Q6 in the same way, though Q7 and Q6 aren't wired to anything in the NES controller.If the Clock pin is pulsed while the signal of the Parallel/Serial Control pin is low, the register will shift. The value of bit 0 will be replaced with the signal from the Serial In pin (this allows you to chain 4021s together, though the NES controller doesn't use this), the value of bit 1 will be replaced with the old value of bit 0, bit 2 with the old value of bit 1, and so on. Bit 7 is discarded.Pin 09 (Parallel/Serial Control) of the 4021 is connected to OUT of the controller port. OUT of the controller port is mapped to write bit 0 of CPU register $4016. Writing 1 to bit 0 of $4016 will set the signal of OUT (and by extension Parallel/Serial Control) to high. Writing 0 to bit 0 of $4016 will set the signal to low.
>>12654506(2/3)Pin 03 (Q8) of the 4021 is connected to D0 of the controller port. D0 of the controller port is mapped to read bit 0 of CPU register $4016, meaning if $4016 is read, bit 0 of the resulting value will correspond to the signal of D0 (and by extension Q8).CLK of the controller port is connected to Pin 10 (Clock) of the 4021. Reading from $4016 will pulse this signal, resulting in the aforementioned bit shift to occur.With the hardware working the way it does, programmers must do the following procedure in software to read the controller (taken verbatim from the Nesdev Wiki):Write 1 to $4016 to signal the controller to poll its inputWrite 0 to $4016 to finish the pollRead polled data one bit at a time from $4016When programming a game, it is desirable to have a one byte "input variable" where each bit corresponds to the pressed state of one of the eight buttons. The simplest way to get such a variable when writing in 6502 assembly is the following code (also taken from the Nesdev Wiki):ReadJoypad: ;Read controller inputs and store them in buttons. LDA #$01 STA $4016 ;signal the controller to poll its input STA buttons LSR A ;sets A to 0 STA $4016 ;finish the pollloop: LDA 4016 LSR A ;bit 0 -> Carry ROL buttons ;Carry -> bit 0; bit 7 -> Carry BCC loop RTSPicrel is the subroutine used in Super Mario Bros. for reading the controller. It's more complicated since it reads both controller 1 and controller 2, and it checks other bits (data lines) of $4016 to allow you to use Famicom expansion port controllers, but the gist of it is the same. LSR controller inputs from $4016, ROL them into the variable you are using to save inputs. With the controller hardware working the way it does, almost every controller reading routine will have the buttons mapped in the same order:bit 0 = Rightbit 1 = Leftbit 2 = Downbit 3 = Upbit 4 = Startbit 5 = Selectbit 6 = Bbit 7 = A
>>12654508(3/3)You'll notice this is the same order the buttons are connected to the PI-n pins the the diagram. This is because the button order is inverted twice. Once because the bits in the 4021 register are serialized in reverse order. Then again by the LSR ROL logic.The code you use to get input from the controller is not the same code that you use to impact game logic. Inputs are read first, stored in a variable, and then that variable is read elsewhere in code to control the game. Whether or not a game supports diagonal inputs, and what directions get priority if it doesn't, depend on the logic used to interpret the inputs variable. Because right and left are lower bits in the input byte, they tend to get processed first. Code that LSRs through the byte to check for inputs will always prioritize left and right inputs. Code that checks the byte with a series of AND and BNE / BEQ instructions can have it go either way, but will usually prioritize left and right since developers tend to order their ANDs from least to greatest.
>>12654506>>12654508>>12654513But it doesn't prioritize left and right inputs, it prioritizes up and down inputs
>>12654538Zelda doesn't, but there are more games that do than don't.
This needs a romhack to allow zoomers to play it. It's insane that a game with so much stupid and trivial bullshit changes doesn't have one to fix something as basic as the fucky movement. Every game in existence (including everything from late NES-SNES), you can play with ROLLING your thumb around the d-pad (how almost all top players play), but Zelda expects you to sit there and precisely peck each direction.Now, I did absolutely love Zelda 1, it's my favorite game on the system, but it would just be straight up better with proper 4-way movement with latest input priority. But instead it's all just stupid bullshit being pushed in romhacks like sweeping sword attacks, an overhauled map system, and adjusting the UI slightly, instead of just straight objective technical improvements like proper 4-way movements and faster text/screen scroll.