Good luck on this. I've been horsing around with a Zelda game thing in C# and FNA for almost a year now but I haven't been super motivated to work on it recently. Here's how I did stuff if you're wondering:
Like, what is the best way to move the camera when you reach the edge of the screen?
Within a gameplay class, I have a game state and when the player is one pixel or more outside the bounds of a "room" I change the state to be a CameraMoving state, lock the player's movement, stop updating enemies, and move the camera to the next room then transition back to a normal gameplay state.
How does a hole know to drag link toward it and have him fall into it?
I run a check to see how deeply (pixel-wise) the character is colliding with a pit and if it's greater than a certain threshold, I lock the player's movement and start moving the player's center to the center of the pit (using a timer and a lerp function).
How do you draw a hitbox for a sword swing?
I have a hitbox for the player and determine the sword hitbox based on the player's position and whatever frame of animation the sword is. There's a lot of ways to do this.
What's the difference between a door and a wall?
There's a lot of ways to do this too. I have a Tile class and an Entity class. The Tile class basically just holds collision info and what sprite to use. The Entity class is enemies and everything else like doors. So there's an Enum for type and if the type is a door and the player is colliding with it, I perform a certain function (like stopping the player or unlocking the door if they player has a key, etc.)
How do you make two doors on two different screens tie to each other?
I've done this several ways. Right now I load the whole dungeon in at once and have Entities in the corners to determine the size of the room. So if the player moves outside the room, I figure out what room they're moving too. You could do rooms as separate things (like separate maps) but that seems like a lot of work.
What is a room? Its one thing to know how I can define these things, but I also want to try to do so as efficiently as I'm capable. When you don't know how to do that best way is to throw yourself in and figure it out.
Like I said earlier, I have the whole dungeon loaded in memory and only "update" and draw one room at a time. You could break out the rooms into separate files and all that but then you'll have to load/unload each time you change rooms. My way is more memory intensive but loading and unloading seems like overkill.