Final Fantasy Better Shops ROM Hack Pt. 2

Поділитися
Вставка
  • Опубліковано 8 чер 2024
  • In this episode we go through how the NES processes game programs and show how to trace and edit subroutines using FCEUX.
    Support the channel on Patreon: / neshacker
    Better Shops Hack Part 1 - • Final Fantasy Better S...
    Binary & Hexadecimal Video - • Binary & Hexadecimal D...
    Chapters:
    0:00 Cold Open
    0:30 Introduction
    1:18 NES Game Processing
    3:55 FCEUX Tracing Overview
    6:02 Subroutine Tracing Example
    8:05 FCEUX Hex Editor Overview
    9:28 FCEUX In-line Assembler Overview
    10:03 Editing Game Routines
    14:33 Conclusion

КОМЕНТАРІ • 26

  • @arsenkay
    @arsenkay 2 роки тому +3

    Superb video!

  • @thehollowknerd3858
    @thehollowknerd3858 Рік тому +3

    Thank you for explaining a lot of this. I've really been interested in making ROM hacks of final fantasy and this really helped :)

    • @NesHacker
      @NesHacker  Рік тому +1

      Awesome, hope you have fun!

  • @alieander
    @alieander 3 роки тому +6

    Meet to see the code moving around!
    Can't wait for the final results!

    • @NesHacker
      @NesHacker  3 роки тому

      Make sure to check out part 3, more moving code... but this time in 3D ;)

  • @erikhendrickson59
    @erikhendrickson59 Рік тому +2

    Awesome video and awesome shirt!

  • @AT-zr9tv
    @AT-zr9tv 2 роки тому +5

    Great video, once again.
    It must have been quite satisfying to manage to save exactly the 3 bytes you needed for your hacked code to fit. :)
    I've had that issue when hacking GameBoy games, and a quick and dirty trick (when possible) is to write your code in an unused section of the ROM bank. You then only need to jump to that location, which takes very few bytes.

    • @NesHacker
      @NesHacker  2 роки тому +2

      Indeed, you should check out part three ;)

  • @riyantan9237
    @riyantan9237 2 роки тому +2

    That's a fantastic video. Thank you very much for making and sharing with us!!

    • @NesHacker
      @NesHacker  2 роки тому +1

      No problem :), they’re a lot of fun to make

  • @EriknocTDW
    @EriknocTDW 2 роки тому +7

    @12:53 "Then, I replaced the last 2 instructions of section 4 with a single instruction that jumped to the correct spot in the code. This eliminated the redundancy by having the program just reuse the same 2 instructions. More importantly, it freed up 3 bytes..."
    There are 2 more optimal ways to skip over the LDA #$0C without having to do a JMP.
    After the LDA #$13, you could:
    BNE +2
    (Using 1 less byte, saving 4 bytes total.)
    --OR--
    .byte $2C ;BIT abs instr to mask out next 2 bytes
    (Using 2 less bytes, saving 5 bytes total.)
    Of course since you didn't need that additional byte or two, your JMP does get the job done without leaving a hole in the code, which I'm assuming was why you decided to do that.

    • @NesHacker
      @NesHacker  2 роки тому +2

      Yeah, I think that was just the first decent way I came up with when I was working on the hack and it seemed relatively clean so I went with it. I like your solutions though, they’re really clever :)

    • @EriknocTDW
      @EriknocTDW 2 роки тому +2

      @@NesHacker Thank you. I can't take credit as I have learned those techniques from others. I am happy to pass it on though. 🙂

  • @hicknopunk
    @hicknopunk 2 роки тому +2

    Love your videos. One day I hope to learn the 6502 enough to program simple mac games I made as a kid.

    • @NesHacker
      @NesHacker  2 роки тому +2

      Nice! Yeah I just found a box that had been tucked away in my parent’s attic and it had both an Atari 2600 and an Atari 600XL in it. Can’t wait to start messing with those in the future xD

  • @edmocaldas
    @edmocaldas 9 місяців тому

    Congratulations! 👏

  • @cartman9652
    @cartman9652 2 роки тому +3

    Hi. I have seizure problems. Could you make a video about how to Romhack Nes games to turn off those infamous flashing effects during NES era?

  • @twobob
    @twobob 9 місяців тому

    i did the cheat hacking to add perma fly to your nes input contoller rom. was fun.

  • @kevinferneine553
    @kevinferneine553 2 роки тому +1

    In the minute 4:27 you make Conditions, where or where is the list of all the conditions for NES? in order to carry out and understand them.

    • @NesHacker
      @NesHacker  2 роки тому

      Ah, so the conditions I’m talking about there are for when you set breakpoints in the FCEUX debugger. It’s not a full list of what can be done (cause that would be very long) but you can learn how to better use the debugger and set conditional breakpoints by reading the FCEUX docs here: fceux.com/web/help/Debugger.html

  • @JacklapottTv
    @JacklapottTv 2 роки тому +1

    A mere question related to bank switching, how can a CPU continue execution when a bank is switched on the current active bank ? For me the CPU end up executing a random code on the newly activated bank

    • @NesHacker
      @NesHacker  2 роки тому +2

      There are two banks of memory active at a time. One is always fixed to a specific bank (in this case the upper addresses fixed to the $0F bank) and the other is swapped. To make sure random code isn’t executed the bank swap code is usually placed on the fixed bank. This way the PC is executing instructions there while the other bank is swapped out.

    • @JacklapottTv
      @JacklapottTv 2 роки тому +1

      @@NesHacker i see, then in this case what if my code jump to the new bank, and continue execution from there, how can i activated a 3rd bank and jump to it ?

    • @NesHacker
      @NesHacker  2 роки тому +2

      @@JacklapottTv Well there is only enough address space to hold two banks. So you’ll never have three banks active at the same time. For the MMC1 mapper chip, which is used by Final Fantasy, you always have bank $0F active and one swappable one. So if you needed to access code in a third, you’d need to hop onto the fixed bank and swap the banks again. Having three active at the same time is not possible.
      A side note though. If you ensure every bank has the exact same swap code at the same locations it’s possible to perform the swap from any bank, but it’s not really needed if you structure your swap routines correctly and use parameters to tell it when to jump after it is done.

    • @JacklapottTv
      @JacklapottTv 2 роки тому +1

      @@NesHacker awesome, now i understand better the need for having a fixed bank & a swapable one, thank you (y)

  • @f.berger7756
    @f.berger7756 8 місяців тому

    So basically you made a trainer 😀