Sonic 1 Modification

Discussion in 'Discussion & Q&A' started by rSheffield, Jan 6, 2022.

  1. rSheffield

    rSheffield Active Member Member

    Joined:
    Nov 21, 2021
    Messages:
    27
    Location:
    Brazil
    Hello. Recently, I have started a Sonic 1 ROM Hack, however it's in a HUGE hiatus, because I ran into some problems. And if possible i would like to know a solution for said problems.

    1. For some reason, the objects in GHZ Act 3 Do not go away, no matter how many times I select them all and delete them.
    upload_2022-1-6_19-39-55.png

    2. The levels have barely 30 seconds of gameplay, how could I extend them. I am aiming for a Explorative gameplay style. I know it sounds extensive, but is there any way I could make a level go to at least 3 minutes of gameplay?

    3. How can i add custom text, cutscenes, or new movements into the game? E.G: Jump dash, Spindash, Double jump, etc.

    4. how do i delete a zone? I wanna delete Marble Zone. I'm just testing ROM Hack Editing/producing for now.

    Sorry for the extensive thread. i just don't wanna spam the forum with questions.
     
  2. Angel X

    Angel X Well-Known Member Member

    Joined:
    Sep 15, 2017
    Messages:
    291
    Location:
    Italy
    Hello!
    For the first two questions I don't know how to answer, I'm sorry :(
    But I have some advice for the last two:

    3-Here you will find useful programs for various functions: http://info.sonicretro.org/Sonic_Hacking_Utilities
    If you want to add something new check out the tutorials on SSRG:
    https://sonicresearch.org/community/index.php?forums/tutorials.60/
    Or Sonic Retro: http://info.sonicretro.org/SCHG_How-to:Guide

    4-I'm not sure if you can delete the zone, but you can hide it,I have created a guide on how to change the order of the levels of sonic 1:
    https://sonicresearch.org/community...he-levels-in-sonic-1-github-disassembly.5992/

    I hope these tips will be useful to you:D
     
    rSheffield likes this.
  3. rSheffield

    rSheffield Active Member Member

    Joined:
    Nov 21, 2021
    Messages:
    27
    Location:
    Brazil
    Oh, ok. Thanks! :)
     
    Angel X likes this.
  4. Giovanni

    Giovanni It's Joe-vanni, not Geo-vanni. Member

    Joined:
    Apr 16, 2015
    Messages:
    311
    Location:
    Italy
    1) You may be editing the wrong revision's object placement file.
    Sonic 1 has 2 main revisions, them being REV00 and REV01. Each has its differences in terms of code, level design and object placement.
    Check the very top of your disassembly's main code file to figure out what revision your builds are using (if you're using a Github based disassembly, the file should be called sonic.asm)

    There's a high chance your object placement edits are saved in a different file. Based on the revision your build is using, if there are 2 files with the same name:
    - If it's REV01, the build will use the content of files of which name is followed by "(JP1)"
    - If it's REV00, the exact opposite will occur

    If you want to quickly carry over one revision's object placement file to another, simply swap the names.

    Also, depending on which level editor you're using:
    - If it's SonED2, switch over to SonLVL make sure you're editing the correct .sep project
    - If it's SonLVL, make sure you've selected the correct .INI file before starting to edit the level.

    2) Refer to this guide if you'd like to resize your level. You may also want to familiarize with dynamic level events.
    Keep in mind that, due to limitations, you can only create levels 64x8 chunks in size. Also, placing more than 256 objects capable of remembering their sprite state (which is many, and include rings) will cause gameplay issues. I personally don't think these limitations will allow you to make an "explorative level" capable of warranting 3 minutes of gameplay. You'd need to make changes to the level format and the object manager.

    3) You may need to elaborate on what you mean by custom text and cutscenes (if you mean S3K styled cutscenes, I can't really help you myself).
    As far as custom moves go, Sonic's moveset is handled by Sonic's object. More precisely, these 4 routines: Obj01_MdNormal for ground control, Obj01_MdJump for midair control, Obj01_MdRoll for control while rolling and Obj01_MdJump2 for control after jumping.
    Before even trying to implement a custom move, familiarize with how objects work, so that you have an idea of what you're doing when you're creating moves.
    If you're using a GitHub based disassembly, you may have a harder time navigating through these sections of code, as Sonic's object is heavily separated into multiple files.

    There is, already, an existing Spin Dash porting guide, however, it is VERY old, unfinished (for Github users) and uses really old methods and practices (e.g. the way the Spin Dash graphics are ported in). If you're using a Github disassembly, you will find yourself struggling to follow this guide, especially if you don't know where to place your code.

    4) Fully deleting any reference to a zone requires knowing pretty much everything about how the zone data is loaded and where it is loaded from, from stuff as small as the title card mappings or as large as the level's art. You can, however, hide a zone from gameplay by following the guide by Angel X.
     
    Last edited: Jan 10, 2022
    rSheffield and Angel X like this.
  5. rSheffield

    rSheffield Active Member Member

    Joined:
    Nov 21, 2021
    Messages:
    27
    Location:
    Brazil
    Could you go a little bit more into detail about 1? I am using REV00.

    About 3, on the cutscene topic, no, i mean like, for example when a boss starts.

    For example the boss is a giant robot snake.

    The boss falls into the ground, gets back up, then the fight starts.

    On the custom moveset side, i don't really know if im gonna put custom moves other than the spindash, since i don't know how to modify stuff in ASM.

    About 4; yeah, i modified the ASM Code to wipe off MZ and LZ.​
     
  6. Giovanni

    Giovanni It's Joe-vanni, not Geo-vanni. Member

    Joined:
    Apr 16, 2015
    Messages:
    311
    Location:
    Italy
    Since you're using REV00:

    - If you are using SonED2 for level editing, you want to pick the project files that do NOT contain "(JP1)" in their names when editing levels
    - If you are using SonLVL, you want to select the SonLVL.INI file that specifically references REV00 (or, if you are using an older version of the Github INI files, you want to select the one that does NOT reference REV01).

    Since your screenshot shows GHZ3, I can tell you that possible object placement edits ended up in objpos/ghz3 (JP1).bin. If you wish to recover those, you want to swap file names between the JP1 variant and the non JP1 variant. Do the same for any level that also has a JP1 file variant you may have edited (check both your levels and objpos folders)

    Boss behavior is something that is handled by the boss object's code. That requires ASM programming skills and knowledge on how objects work.
     
  7. TheInvisibleSun

    TheInvisibleSun Visible Member

    Joined:
    Jul 2, 2013
    Messages:
    424
    Location:
    Western New York, USA
    I'd check out the 'Dynamic Level Events' routine (Resize_Index if using the 2005 disassembly), and see how that works as well.
     
    Giovanni likes this.
  8. rSheffield

    rSheffield Active Member Member

    Joined:
    Nov 21, 2021
    Messages:
    27
    Location:
    Brazil
    I'm using SonLVL, which i did use to edit specifically, the file which does not contain REV01 in it's name. And about the JP1 Thing, no, i didn't edit any of these files.
     
  9. rSheffield

    rSheffield Active Member Member

    Joined:
    Nov 21, 2021
    Messages:
    27
    Location:
    Brazil
    I'm using the GitHub disasm, i'll make sure to check that out later.
     
  10. Giovanni

    Giovanni It's Joe-vanni, not Geo-vanni. Member

    Joined:
    Apr 16, 2015
    Messages:
    311
    Location:
    Italy
    Since you use SonLVL, but the level edits you tried to make do not get accounted for in the building process, make sure to check for the following before picking your file:

    - If it contains REV00 in its name, pick that.
    - If it contains REV01 in its name, pick the other one.

    Make sure to also check the last edit date of your files. There's a very small possibility that your object placement edits were just lost altogether.
     
    Last edited: Mar 24, 2022