Basic Questions & Answers thread

Discussion in 'Engineering & Reverse Engineering' started by Tweaker, May 29, 2008.

  1. WBilgini

    WBilgini

    Just call me WB, okay? Member
    13
    1
    3
    Edited the page! https://info.sonicretro.org/SCHG_How-to:Port_Sonic_3's_Sound_Driver_to_Sonic_2 Is this good or not? I don't know if this is the right place to post this but... yeah.

    Anyways, here is a question I have: how can I make Tails fly like Sonic 3 in Sonic 2? By that I mean, in Tails Alone, if you double-tap a jump button, Tails will fly in Sonic 3. Also, in Sonic & Tails, if you hold up and double-tap the jump button as Sonic, Tails CPU will carry you. How can I implement that? I don't want to switch to Sonic 3.
     
    Last edited by a moderator: Apr 5, 2022
  2. Overlord

    Overlord

    Now playable in Smash Bros Ultimate Moderator
    18,524
    512
    93
    Berkshire, England
    Learning Cymraeg
    Don't double-post, please.
     
  3. WBilgini

    WBilgini

    Just call me WB, okay? Member
    13
    1
    3
    Asking questions again, can I remove the 2P mode from my hack? I don't really need it and it's just taking space for me.
     
  4. Cokie

    Cokie

    C. Okie Member
    20
    4
    3
    In Sonic 3 and Knuckles, is Dynamic_object_RAM_end the start address of the last slot in dynamic or the first byte AFTER all of
    dynamic object ram?
    I ask for several reasons. Create_New_Sprite looks for an available slot as the counter goes from 89 to 0.

    It looks through 90 slots starting at the SECOND SLOT (lea next_object(a1),a1 ). If it couldnt find any the counter will

    decrement to -1 and rts.... Because it starts at the second slot, it will try to find the slot at Dynamic_object_RAM_end

    if the preceeding 89 slots are being used. Does this mean that this is the last slot and NOT
    right after the end of dynamic object ram? Why does Create_New_Sprite start searching at the second slot?

    Code:

    Create_New_Sprite:

    lea (Dynamic_object_RAM).w,a1

    moveq #((Dynamic_object_RAM_end-Dynamic_object_RAM)/object_size)-1,d0

    bra.s loc_1BB0A


    loc_1BB0A:

    lea next_object(a1),a1

    tst.l (a1)

    dbeq d0,loc_1BB0A


    locret_1BB14:

    rts


    Now the skdisasm equates state dynamic object ram has 90 slots, each 0x4A byte. By that, definiton, the first slot starts at Dynamic_object_RAM

    and last slot is the 0x4A bytes before Dynamic_object_RAM_end. Which is contrst to the above. Also, Level_object_RAM starts at Dynamic_object_RAM_end.

    Why is this seem different. By this, it appears Dynamic_object_RAM_end is after dynamic object ram and is some unknown 0X4a bytes for Level.


    FFFFB0DE : Dynamic_object_RAM ds.b object_size*90 ; $1A04 bytes ; 90 objects

    FFFFCAE2 : =$FFFFFFFFFFFFCAE2 Dynamic_object_RAM_end = *

    FFFFCAE2 : =$FFFFFFFFFFFFCAE2 Level_object_RAM = Dynamic_object_RAM_end ; $4EA bytes ; various fixed in-level objects

    FFFFCAE2 : ds.b object_size ; unknown
     
  5. Hello, my friends, my first post here.

    I'm having some problems when decompressing data using Nemesis and I need your help,
    since many here have more experience in this aspect because of Sonic games.

    As I don't know the list of OffSets for the game in question, I used NemSrch to run the rom and find everything that uses Nemesis for me.
    So I used NemDesc to decompress the graphics, I also used SEGA Decompressor to compare the performance and the results and in the end, they were the same, so far ok.

    The problem is that I started to notice that in several of these banks decompression did not bring all the data as it should, eating part of the beginning and the end of the data.

    [​IMG]

    So I tried to use KenSharp's tools which are more efficient, I usually use them to recompress the data.
    The problem here is that with them I can't indicate the Offset where the bank is for it to extract (at least not find out how to do it) so I discarded it.

    So I used NemDesc's padding function to try to make a safer extraction, with this, I was able to recover the data from the beginning of the database that was missing.
    The problem is that if we analyze the data, we only see infinite 0's, as if no additional data is retrieved.

    ORIGINAL NEMESIS DECOMPRESSION RESULTS NEMESIS DECOMPRESSION WITH PADDING
    [​IMG]


    I managed to manipulate part of the data to make the bank art organization as in the original by removing the empty tiles added by NemDec and the aligned art.
    So after compressing and re-entering the data in the game the graphics are without the correct reference and the graphics are corrupted.
    It seems to me that something else was missing. I needed a tool that can be faithful and release the full unpacking of the data without fail.

    In the other banks where the data came in full, I was already able to manipulate and re-enter the game without problems.

    I'm going around to find a solution but I haven't found success, it must be my inexperience, I'm counting on your help.

    Thanks for reading this topic.
     
  6. Hitaxas

    Hitaxas

    Retro 80's themed Twich streamer Member
    Question. What is the purpose of this specific invisible solid object in EHZ 1? I made some changes to a subroutine of SlopeObject in an effort to get character abillities to function on bridges and platforms, but in doing so, coming into contact with this specific subtype of Obj74 seems to crash the game. Removing it does some funky stuff to the level collision...

    [​IMG]