Yeah, I realize that. But to answer, the control code value is 2f and the ADC #$20 is key to where in the PPU the new line is written. Normally, all I would have to do is not add anything and the new line wouldn't skip a line and would be directly under the text. However, I think I was wrong to think the problem came from this particular piece of code as relevant to line break as it may be. It doesn't actually write anything to the PPU. Every single letter is written and its PPU coordinates are loaded in RAM and then written to the PPU. I've actually gotten the double line to work with some cheats altering the PPU coordinates.
But then again I could be wrong. The cheat I used changed the ppu coordinates stored in $04FA-$05xx, but those coordinates go through $0038 and $0039 before reaching $04FA. On top of that before the ppu goes through $0038, I think the coordinates are written to $0019.
Edit:
I've managed to locate what I consider very important code.
$F58B:AD 1B 00 LDA $001B = #$16 A:00 X:23 Y:00 S:E6 P:nvUbdiZc
$F58E:29 1F AND #$1F A:16 X:23 Y:00 S:E6 P:nvUbdizc
$F590:8D 38 00 STA $0038 = #$D8 A:16 X:23 Y:00 S:E6 P:nvUbdizc
$F593:AD 1C 00 LDA $001C = #$08 A:16 X:23 Y:00 S:E6 P:nvUbdizc
$F596:8D 39 00 STA $0039 = #$20 A:08 X:23 Y:00 S:E6 P:nvUbdizc
$F599:38 SEC A:08 X:23 Y:00 S:E6 P:nvUbdizc
$F59A:A9 00 LDA #$00 A:08 X:23 Y:00 S:E6 P:nvUbdizC
$F59C:6E 39 00 ROR $0039 = #$08 A:00 X:23 Y:00 S:E6 P:nvUbdiZC
$F59F:6A ROR A:00 X:23 Y:00 S:E6 P:NvUbdizc
$F5A0:4E 39 00 LSR $0039 = #$84 A:00 X:23 Y:00 S:E6 P:nvUbdiZc
$F5A3:6A ROR A:00 X:23 Y:00 S:E6 P:nvUbdizc
$F5A4:4E 39 00 LSR $0039 = #$42 A:00 X:23 Y:00 S:E6 P:nvUbdiZc
$F5A7:6A ROR A:00 X:23 Y:00 S:E6 P:nvUbdizc
$F5A8:0D 38 00 ORA $0038 = #$16 A:00 X:23 Y:00 S:E6 P:nvUbdiZc
$F5AB:8D 38 00 STA $0038 = #$16 A:16 X:23 Y:00 S:E6 P:nvUbdizc
$F5AE:AD 3D 00 LDA $003D = #$88 A:16 X:23 Y:00 S:E6 P:nvUbdizc
$F5B1:0A ASL A:88 X:23 Y:00 S:E6 P:NvUbdizc
$F5B2:0A ASL A:10 X:23 Y:00 S:E6 P:nvUbdizC
$F5B3:29 0C AND #$0C A:20 X:23 Y:00 S:E6 P:nvUbdizc
$F5B5:0D 39 00 ORA $0039 = #$21 A:00 X:23 Y:00 S:E6 P:nvUbdiZc
$F5B8:8D 39 00 STA $0039 = #$21 A:21 X:23 Y:00 S:E6 P:nvUbdizc
$F5BB:60 RTS A:21 X:23 Y:00 S:E6 P:nvUbdizc
$F580:AD 1D 00 LDA $001D = #$CE A:21 X:23 Y:00 S:E8 P:nvUbdizc
As I've mentioned before, $0038-39 are where the PPU addresses are stored and $2116 is the location for where the text starts after the line break. I've think I've been able to figure out how they're calculated.
$C594:A9 00 LDA #$00 A:40 X:03 Y:00 S:EA P:nvUbdizc
$C596:0E 1B 00 ASL $001B = #$40 A:00 X:03 Y:00 S:EA P:nvUbdiZc
$C599:2A ROL A:00 X:03 Y:00 S:EA P:NvUbdizc
$C59A:0E 1B 00 ASL $001B = #$80 A:00 X:03 Y:00 S:EA P:nvUbdiZc
$C59D:2A ROL A:00 X:03 Y:00 S:EA P:nvUbdiZC
$C59E:0E 1B 00 ASL $001B = #$00 A:01 X:03 Y:00 S:EA P:nvUbdizc
$C5A1:2A ROL A:01 X:03 Y:00 S:EA P:nvUbdiZc
$C5A2:0A ASL A:02 X:03 Y:00 S:EA P:nvUbdizc
$C5A3:18 CLC A:04 X:03 Y:00 S:EA P:nvUbdizc
$C5A4:7D DB C5 ADC $C5DB,X @ $C5DE = #$04 A:04 X:03 Y:00 S:EA P:nvUbdizc
$C5A7:E8 INX A:08 X:03 Y:00 S:EA P:nvUbdizc
$C5A8:8D 1C 00 STA $001C = #$06 A:08 X:04 Y:00 S:EA P:nvUbdizc
$C5AB:AD 1B 00 LDA $001B = #$00 A:08 X:04 Y:00 S:EA P:nvUbdizc
$C5AE:4A LSR A:00 X:04 Y:00 S:EA P:nvUbdiZc
$C5AF:4A LSR A:00 X:04 Y:00 S:EA P:nvUbdiZc
$C5B0:4A LSR A:00 X:04 Y:00 S:EA P:nvUbdiZc
$C5B1:18 CLC A:00 X:04 Y:00 S:EA P:nvUbdiZc
$C5B2:7D DB C5 ADC $C5DB,X @ $C5DF = #$16 A:00 X:04 Y:00 S:EA P:nvUbdiZc
$C5B5:E8 INX A:16 X:04 Y:00 S:EA P:nvUbdizc
$C5B6:8D 1B 00 STA $001B = #$00 A:16 X:05 Y:00 S:EA P:nvUbdizc
So at $C5DE is sort of the vertical offset variable and DF is the horizontal one. The text after the line break starts on the 8th row of tiles. Now the problem that I have is that this code is executed after the code that I posted in the first post. I also think I've found the problem. The calculation for the vertical offset gets messed up. So in the case of the the double line hack, $03B4 would be reduced to 20, but the calculation ends up making it appear on the 6th line down, which is the same line as the text started on. Currently I'm going with a two part hack, first the A is reduced to 20 for the first piece of code and then I set a check for 20 at C594. Unfortunately I haven't been able to get it to work yet, but I hope I'm on the right path.