don't click here

Hitaxas' S3K research topic

Discussion in 'Engineering & Reverse Engineering' started by Hitaxas, Feb 15, 2009.

Thread Status:
Not open for further replies.
  1. Hitaxas

    Hitaxas

    Retro 80's themed Twitch streamer ( on hiatus) Member
    I originally made this topic on Retrohack (PsychoSk8r's forums), but I decided to copy/paste what I had here. enjoy. :psyduck:

    So you want to hack S3K, or port an object from said game?

    You've looked all over this site AND asked for help, only to find that nobody can help you?

    You wonder why you cannot and be helped?

    Here is the answer: Sonic 3 and Knuckles is not as well documented as the other two games.

    I want to fix that. Who's with me?

    My S3K research is only possible because of Stealth's Sonic3k.asm file. So a big thanks to Stealth. :) (and Puto for his text format conversion. :) )

    1. you will need a copy of Stealth's S&K ASM file, which you can grab here: DOWNLOAD

    Then, if you can figure out how, lock-on S3 with the ASM.

    Here are the instructions from the IDA version of the Stealth disassembly:

    In order to build a rom you will need include.exe, snasm86k.exe (OR ASM68k.exe) and you must also make a build.bat file using the following text:

    OR, if you use ASM68k.exe:



    2. don't be afraid to share and ask questions in this topic.
    The sole purpose of this topic is to research S3K and compare it's equates, RAM variables and routines to Sonic 2.

    What good is this?
    It will help provide people with answers to unknown questions, as well as help you, the hacker.

    How will it help?
    Not only will we be able to further understand S3K, but it will also aid in porting objects to the other Sonic games, Such as Sonic 1 and 2.

    To start this all off, I will post my findings. All of my findings have been compared to their Sonic 2 (xenowhirl ASM) equivalents.

    Sonic 2 on the left, S3K on the right:

    <!--g1--><div class='geshitop'>Syntax Highlighted Code: ASM</div><div class='geshimain'><!--eg1--><pre class="asm">S2 to s3k equates:
    &nbsp;
    Sonic_acceleration: = [color= #ff0000;]2[/color] [color= #adadad; font-style: italic;]; this seems to handle topspeed as well, I guess...[/color]
    Sonic_deceleration: = [color= #ff0000;]4[/color] ?
    render_flags: = [color= #ff0000;]4[/color] ?
    routine: = [color= #ff0000;]5[/color]
    width_pixels: = [color= #ff0000;]6[/color] [color= #adadad; font-style: italic;];and 7 ?[/color]
    priority: = [color= #ff0000;]8[/color] [color= #adadad; font-style: italic;]; $100 is 2 in s2 and $80 is 1[/color]
    art_tile: = [color= #ff0000;]$[/color][color= #ff0000;]A[/color]
    mappings: = [color= #ff0000;]$[/color][color= #ff0000;]C[/color]
    x_pos: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]10[/color][/color]
    y_pos: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]14[/color][/color]
    x_vel: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]18[/color][/color]
    y_vel: = [color= #ff0000;]$[/color][color= #ff0000;]1A[/color]
    inertia: = [color= #ff0000;]$[/color][color= #ff0000;]1C[/color]
    y_radius: = [color= #ff0000;]$[/color][color= #ff0000;]1E[/color] [color= #00bfff;]AND[/color] [color= #ff0000;]6[/color]?
    x_radius: = [color= #ff0000;]$[/color][color= #ff0000;]1F[/color] [color= #00bfff;]AND[/color] [color= #ff0000;]7[/color]?
    anim: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]20[/color][/color]
    next_anim: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]21[/color][/color]
    mapping_frame: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]22[/color][/color]
    anim_frame: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]23[/color][/color]
    anim_frame_duration: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]24[/color][/color]
    angle: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]26[/color][/color]
    flip_angle: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]27[/color][/color]
    collision_flags: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]28[/color][/color]
    collision_property: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]29[/color][/color]
    Status: = [color= #ff0000;]$[/color][color= #ff0000;]2A[/color]
    status_secondary: = [color= #ff0000;]$[/color][color= #ff0000;]2B[/color]
    air_left: = [color= #ff0000;]$[/color][color= #ff0000;]2C[/color]
    flip_turned: = [color= #ff0000;]$[/color][color= #ff0000;]2D[/color]
    obj_control: = [color= #ff0000;]$[/color][color= #ff0000;]2E[/color]
    [color= #adadad; font-style: italic;];routine_secondary: = $2F[/color]
    flips_remaining: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]30[/color][/color]
    flip_speed: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]31[/color][/color]
    move_lock: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]32[/color][/color]
    invulnerable_time: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]34[/color][/color]
    invincibility_time: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]35[/color][/color]
    speedshoes_time: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]36[/color][/color]
    [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]38[/color][/color] = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]38[/color][/color] [color= #adadad; font-style: italic;]; custom in s2... I use it for shield art. S3K uses it to check for player modes: 1 for tails and 2 for Knuckles[/color]
    Sonic_Look_delay_counter: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]39[/color][/color]
    next_tilt: = [color= #ff0000;]$[/color][color= #ff0000;]3A[/color]
    tilt: = [color= #ff0000;]$[/color][color= #ff0000;]3B[/color]
    stick_to_convex: = [color= #ff0000;]$[/color][color= #ff0000;]3C[/color]
    shield_dplc: = [color= #ff0000;]$[/color][color= #ff0000;]3C[/color] [color= #adadad; font-style: italic;]; custom in s2... not sure if it will work in all hacks =/[/color]
    spindash_flag: = [color= #ff0000;]$[/color][color= #ff0000;]3D[/color]
    spindash_counter: = [color= #ff0000;]$[/color][color= #ff0000;]3E[/color]
    layer_plus: = [color= #ff0000;]$[/color][color= #ff0000;]3F[/color]
    Jumping: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]40[/color][/color]
    layer: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]46[/color][/color]
    layer_plus: = [color= #ff0000;]$[/color][color= #ff0000;][color= #ff0000;]47[/color][/color]
    next_object: = [color= #ff0000;]$[/color][color= #ff0000;]4A[/color]
    &nbsp;
    &nbsp;
    &nbsp;
    &nbsp;
    &nbsp;
    RAM variables:
    &nbsp;
    Ctrl_1_Held_Logical = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF602[/color]
    Ctrl_1_Press_Logical = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF603[/color]
    Ctrl_1_Held = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF604[/color]
    Ctrl_1_Press = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF605[/color]
    Sonic_Pos_Record_Index = [color= #ff0000;]$[/color][color= #ff0000;]FFFFEE26[/color]
    Sonic_Pos_Record_Buf = [color= #ff0000;]$[/color][color= #ff0000;]FFFFE500[/color]
    Sonic_Stat_Record_Buf = [color= #ff0000;]$[/color][color= #ff0000;]FFFFE400[/color]
    [color= #ff0000;]$[/color][color= #ff0000;]FFFFB01A[/color] = [color= #ff0000;]$[/color][color= #ff0000;]FFFFB022[/color]
    [color= #ff0000;]$[/color][color= #ff0000;]FFFFB001[/color] = [color= #ff0000;]$[/color][color= #ff0000;]FFFFB004[/color]
    [color= #ff0000;]$[/color][color= #ff0000;]FFFFB018[/color] = [color= #ff0000;]$[/color][color= #ff0000;]FFFFB008[/color]
    [color= #ff0000;]$[/color][color= #ff0000;]FFFFEE24[/color] = [color= #ff0000;]$[/color][color= #ff0000;]FFFFEE24[/color]
    [color= #ff0000;]$[/color][color= #ff0000;]FFFFCD9C[/color] = [color= #ff0000;]$[/color][color= #ff0000;]FFFFCD9C[/color]
    [color= #ff0000;]$[/color][color= #ff0000;]FFFFF602[/color] = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF602[/color]
    PlaySound = Play_Sound_2
    Primary_Collision = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF7B4[/color]
    Secondary_Collision = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF7B8[/color]
    Collision_addr = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF796[/color]
    Chain_Bonus_counter = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF7D0[/color]
    Camera_Min_Y_pos = [color= #ff0000;]$[/color][color= #ff0000;]FFFFEE18[/color]
    Camera_Min_X_pos = [color= #ff0000;]$[/color][color= #ff0000;]FFFFEE14[/color]
    Camera_Max_X_pos = [color= #ff0000;]$[/color][color= #ff0000;]FFFFEE16[/color]
    Debug_mode_flag = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFFDA[/color]
    Ctrl_1_Press = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF605[/color]
    Debug_placement_mode = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE08[/color]
    Control_Locked = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF7CA[/color]
    Camera_Max_Y_pos_now = [color= #ff0000;]$[/color][color= #ff0000;]FFFFEE1A[/color]
    [color= #ff0000;]$[/color][color= #ff0000;]FFFFEEBE[/color] = [color= #ff0000;]$[/color][color= #ff0000;]FFFFEE0B[/color]
    Update_HUD_lives = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE1C[/color]
    Update_HUD_rings = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE1D[/color]
    Life_count = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE12[/color]
    Time_Over_flag = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE1A[/color]
    Update_HUD_timer = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE1E[/color]
    Update_HUD_timer_2P = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFEC7[/color]
    Ring_count = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE20[/color]
    Extra_life_flags = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE1B[/color]
    Level_Inactive_flag = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE02[/color]
    RandomNumber = Random_Number
    Emerald_count = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFFB1[/color]
    [color= #ff0000;]$[/color][color= #ff0000;]FFFFFFB0[/color] = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFFB0[/color] [color= #adadad; font-style: italic;]; used as Got_Emerald in s2, but in S3K, it is used to check the super emeralds[/color]
    MainCharacter = [color= #ff0000;]$[/color][color= #ff0000;]FFFFB000[/color]
    Object_RAM = [color= #ff0000;]$[/color][color= #ff0000;]FFFFB000[/color]
    Sidekick = [color= #ff0000;]$[/color][color= #ff0000;]FFFFB04A[/color]
    Water_flag = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF730[/color]
    Super_Sonic_flag = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE19[/color]
    Ring_spill_anim_counter = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFEB6[/color]
    Extra_life_flags = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE1B[/color]
    Saved_layer = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE3A[/color]
    Saved_art_tile = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE38[/color]
    Saved_x_pos = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE2E[/color]
    Saved_y_pos = [color= #ff0000;]$[/color][color= #ff0000;]FFFFFE30[/color]
    [color= #ff0000;]$[/color][color= #ff0000;]FFFFF7C7[/color] = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF7C8[/color]
    [color= #ff0000;]$[/color][color= #ff0000;]FFFFF768[/color] = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF768[/color]
    [color= #ff0000;]$[/color][color= #ff0000;]FFFFF76A[/color] = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF76A[/color]
    obj_control = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF7C6[/color]
    Super_Sonic_frame_count = [color= #ff0000;]$[/color][color= #ff0000;]FFFFF670[/color]
    [color= #ff0000;]$[/color][color= #ff0000;]FFFFCBC0[/color] = [color= #ff0000;]$[/color][color= #ff0000;]FFFFCBC0[/color] [color= #adadad; font-style: italic;]; used in S3K for hyper form after-images[/color]
    MoveX = [color= #ff0000;]$[/color][color= #ff0000;]FFFFB018[/color]
    MoveY = [color= #ff0000;]$[/color][color= #ff0000;]FFFFB01A[/color]
    MainCharacter+x_pos = [color= #ff0000;]$[/color][color= #ff0000;]FFFFB010[/color]
    MainCharacter+y_pos = [color= #ff0000;]$[/color][color= #ff0000;]FFFFB014[/color]
    Sidekick+x_pos = [color= #ff0000;]$[/color][color= #ff0000;]FFFFB05A[/color]
    Sidekick+y_pos = [color= #ff0000;]$[/color][color= #ff0000;]FFFFB05E[/color]
    &nbsp;
    &nbsp;
    &nbsp;
    Routines:
    &nbsp;
    PauseGame = Paused_Debug_Controls
    Sonic_LevelBound = Player_Check_Screen_Boundaries
    AnglePos = Call_Player_AnglePos
    CalcSine = GetSine
    CalcAngle = GetArcTan
    Sonic_DoLevelCollision = sub_11EEC
    ObjectMove = MoveSprite_TestGravity2 [color= #00bfff;]or[/color] MoveSprite2
    SingleObjLoad = Create_New_Sprite3
    AnimateSprite = Animate_Sprite
    DisplaySprite = Draw_Sprite
    sonic_jumpheight = sub_118BC
    Sonic_ChgJumpDir = sub_1164E
    Obj01_UpdateSpeedOnGround = loc_112FC
    Sonic_Lookup = loc_112B0
    Sonic_Duck = loc_11276
    Obj01_MdJump = Sonic_Spin_Freespace
    Obj01_MdRoll = Sonic_Spin_Path
    Sonic_Roll = Player_Spin
    Sonic_Jump = sub_117DA
    Player_OnFloor = loc_1C95A [color= #00bfff;]or[/color] Tails_DoLevelCollision when Tails
    Sonic_CheckGoSuper = loc_119D2
    Sonic_ResetOnFloor = Player_TouchFloor</pre><!--gc2--><!--UzIgdG8gczNrIGVxdWF0ZXM6CgpTb25pY19hY2NlbGVyYXRpb246CSAgICAgICAgPSAyIDsgdGhpcyBz
    ZWVtcyB0byBoYW5kbGUgdG9wc3BlZWQgYXMgd2VsbCwgaSBndWVzcy4uLgpTb25pY19kZWNlbGVyYXRpb
    246CQk9IDQgPwpyZW5kZXJfZmxhZ3M6ICAgIAkJPSA0ID8Kcm91dGluZTogCQkJPSA1CndpZHRoX3BpeG
    VsczogICAgICAgICAgICAJPSA2IDthbmQgNyA/CnByaW9yaXR5OiAJCQk9IDggICA7ICYjMDM2OzEwMCBpcyAyIGluIHMyIGFuZCAmIzAzNjs4MCBpcyAx
    CmFydF90aWxlOiAJCQk9ICYjMDM2O0EKbWFwcGluZ3M6IAkJCT0gJiMwMzY7Qwp4X3BvczogCQkJCT0gJ
    iMwMzY7MTAKeV9wb3M6IAkJCQk9ICYjMDM2OzE0CnhfdmVsOiAJCQkJPSAmIzAzNjsxOAp5X3ZlbDogCQ
    kJCT0gJiMwMzY7MUEKaW5lcnRpYTogCQkJPSAmIzAzNjsxQwp5X3JhZGl1czogCQkJPSAmIzAzNjsxRSB
    BTkQgNj8KeF9yYWRpdXM6IAkJCT0gJiMwMzY7MUYgQU5EIDc/CmFuaW06IAkJCQk9ICYjMDM2OzIwCm5leHRfYW5pbTogCQkJPSAmIzAzNjsyMQptYXBwaW5nX2ZyYW1l
    OiAgIAkJPSAmIzAzNjsyMgphbmltX2ZyYW1lOiAJICAgICAgICAJPSAmIzAzNjsyMwphbmltX2ZyYW1lX
    2R1cmF0aW9uOiAgICAgCT0gJiMwMzY7MjQKYW5nbGU6IAkJCQk9ICYjMDM2OzI2CmZsaXBfYW5nbGU6IA
    kJCT0gJiMwMzY7MjcKY29sbGlzaW9uX2ZsYWdzOiAJCT0gJiMwMzY7MjgKY29sbGlzaW9uX3Byb3BlcnR
    5OiAJCT0gJiMwMzY7MjkKU3RhdHVzOgkJCQk9ICYjMDM2OzJBCnN0YXR1c19zZWNvbmRhcnk6CQk9ICYj
    MDM2OzJCCmFpcl9sZWZ0OiAJCQk9ICYjMDM2OzJDCmZsaXBfdHVybmVkOiAJCQk9ICYjMDM2OzJECm9ia
    l9jb250cm9sOiAJCQk9ICYjMDM2OzJFCjtyb3V0aW5lX3NlY29uZGFyeTogCQk9ICYjMDM2OzJGCmZsaX
    BzX3JlbWFpbmluZzogCQk9ICYjMDM2OzMwCmZsaXBfc3BlZWQ6CQkJPSAmIzAzNjszMQptb3ZlX2xvY2s
    6IAkJCT0gJiMwMzY7MzIKaW52dWxuZXJhYmxlX3RpbWU6IAkJPSAmIzAzNjszNAppbnZpbmNpYmlsaXR5
    X3RpbWU6ICAgICAgCT0gJiMwMzY7MzUKc3BlZWRzaG9lc190aW1lOgkJPSAmIzAzNjszNgomIzAzNjszO
    CAJCQkJPSAmIzAzNjszOCA7IGN1c3RvbSBpbiBzMi4uLiBJIHVzZSBpdCBmb3Igc2hpZWxkIGFydC4gUz
    NLIHVzZXMgaXQgdG8gY2hlY2sgZm9yIHBsYXllciBtb2RlczogMSBmb3IgdGFpbHMgYW5kIDIgZm9yIEt
    udWNrbGVzClNvbmljX0xvb2tfZGVsYXlfY291bnRlcjogCT0gJiMwMzY7MzkKbmV4dF90aWx0OgkJCT0g
    JiMwMzY7M0EKdGlsdDoJCQkJPSAmIzAzNjszQgpzdGlja190b19jb252ZXg6ICAgICAgICAgCT0gJiMwM
    zY7M0MKc2hpZWxkX2RwbGM6CQkJPSAmIzAzNjszQyA7IGN1c3RvbSBpbiBzMi4uLiBub3Qgc3VyZSBpZi
    BpdCB3aWxsIHdvcmsgaW4gYWxsIGhhY2tzID0vCnNwaW5kYXNoX2ZsYWc6IAkJCT0gJiMwMzY7M0QgCnN
    waW5kYXNoX2NvdW50ZXI6IAkJPSAmIzAzNjszRQpsYXllcl9wbHVzOgkJCT0gJiMwMzY7M0YKSnVtcGlu
    ZzogCQkJPSAmIzAzNjs0MCAKbGF5ZXI6IAkJCQk9ICYjMDM2OzQ2CmxheWVyX3BsdXM6CQkJPSAmIzAzN
    js0NwpuZXh0X29iamVjdDoJCQk9ICYjMDM2OzRBCgoKCgoKUkFNIHZhcmlhYmxlczoKCkN0cmxfMV9IZW
    xkX0xvZ2ljYWwgICAgICAgICAgICAgPSAmIzAzNjtGRkZGRjYwMgpDdHJsXzFfUHJlc3NfTG9naWNhbAk
    JPSAmIzAzNjtGRkZGRjYwMwpDdHJsXzFfSGVsZAkJCT0gJiMwMzY7RkZGRkY2MDQKQ3RybF8xX1ByZXNz
    CQkJPSAmIzAzNjtGRkZGRjYwNQpTb25pY19Qb3NfUmVjb3JkX0luZGV4IAkJPSAmIzAzNjtGRkZGRUUyN
    gpTb25pY19Qb3NfUmVjb3JkX0J1ZiAJCT0gJiMwMzY7RkZGRkU1MDAgClNvbmljX1N0YXRfUmVjb3JkX0
    J1ZgkJPSAmIzAzNjtGRkZGRTQwMAomIzAzNjtGRkZGQjAxQQkJCT0gJiMwMzY7RkZGRkIwMjIKJiMwMzY
    7RkZGRkIwMDEJCQk9ICYjMDM2O0ZGRkZCMDA0CiYjMDM2O0ZGRkZCMDE4CQkJPSAmIzAzNjtGRkZGQjAw
    OAomIzAzNjtGRkZGRUUyNCAJCQk9ICYjMDM2O0ZGRkZFRTI0CiYjMDM2O0ZGRkZDRDlDIAkJCT0gJiMwM
    zY7RkZGRkNEOUMKJiMwMzY7RkZGRkY2MDIgCQkJPSAmIzAzNjtGRkZGRjYwMgpQbGF5U291bmQgCQkJPS
    BQbGF5X1NvdW5kXzIKUHJpbWFyeV9Db2xsaXNpb24gCQk9ICYjMDM2O0ZGRkZGN0I0ClNlY29uZGFyeV9
    Db2xsaXNpb24gCQk9ICYjMDM2O0ZGRkZGN0I4CkNvbGxpc2lvbl9hZGRyIAkJCT0gJiMwMzY7RkZGRkY3
    OTYKQ2hhaW5fQm9udXNfY291bnRlciAJCT0gJiMwMzY7RkZGRkY3RDAKQ2FtZXJhX01pbl9ZX3BvcyAJC
    T0gJiMwMzY7RkZGRkVFMTgKQ2FtZXJhX01pbl9YX3BvcwkJPSAmIzAzNjtGRkZGRUUxNApDYW1lcmFfTW
    F4X1hfcG9zCQk9ICYjMDM2O0ZGRkZFRTE2CkRlYnVnX21vZGVfZmxhZyAJCT0gJiMwMzY7RkZGRkZGREE
    KQ3RybF8xX1ByZXNzIAkJCT0gJiMwMzY7RkZGRkY2MDUKRGVidWdfcGxhY2VtZW50X21vZGUgCQk9ICYj
    MDM2O0ZGRkZGRTA4CkNvbnRyb2xfTG9ja2VkIAkJCT0gJiMwMzY7RkZGRkY3Q0EKQ2FtZXJhX01heF9ZX
    3Bvc19ub3cgCQk9ICYjMDM2O0ZGRkZFRTFBCiYjMDM2O0ZGRkZFRUJFIAkJCT0gJiMwMzY7RkZGRkVFME
    IKVXBkYXRlX0hVRF9saXZlcyAJCT0gJiMwMzY7RkZGRkZFMUMKVXBkYXRlX0hVRF9yaW5ncyAgICAgICA
    gICAgICAgICA9ICYjMDM2O0ZGRkZGRTFECkxpZmVfY291bnQgCQkJPSAmIzAzNjtGRkZGRkUxMgpUaW1l
    X092ZXJfZmxhZyAJCQk9ICYjMDM2O0ZGRkZGRTFBClVwZGF0ZV9IVURfdGltZXIgCQk9ICYjMDM2O0ZGR
    kZGRTFFClVwZGF0ZV9IVURfdGltZXJfMlAgCQk9ICYjMDM2O0ZGRkZGRUM3ClJpbmdfY291bnQgCQkJPS
    AmIzAzNjtGRkZGRkUyMApFeHRyYV9saWZlX2ZsYWdzIAkJPSAmIzAzNjtGRkZGRkUxQgpMZXZlbF9JbmF
    jdGl2ZV9mbGFnIAkJPSAmIzAzNjtGRkZGRkUwMgpSYW5kb21OdW1iZXIgCQkJPSBSYW5kb21fTnVtYmVy
    CkVtZXJhbGRfY291bnQgCQkJPSAmIzAzNjtGRkZGRkZCMQomIzAzNjtGRkZGRkZCMAkJCT0gJiMwMzY7R
    kZGRkZGQjAgOyB1c2VkIGFzIEdvdF9FbWVyYWxkIGluIHMyLCBidXQgaW4gUzNLLCBpdCBpcyB1c2VkIH
    RvIGNoZWNrIHRoZSBzdXBlciBlbWVyYWxkcwpNYWluQ2hhcmFjdGVyIAkJCT0gJiMwMzY7RkZGRkIwMDA
    KT2JqZWN0X1JBTSAJCQk9ICYjMDM2O0ZGRkZCMDAwClNpZGVraWNrIAkJCT0gJiMwMzY7RkZGRkIwNEEK
    V2F0ZXJfZmxhZyAJCQk9ICYjMDM2O0ZGRkZGNzMwClN1cGVyX1NvbmljX2ZsYWcgICAgICAgICAgICAgI
    CAgPSAmIzAzNjtGRkZGRkUxOSAKUmluZ19zcGlsbF9hbmltX2NvdW50ZXIgICAgICAgICA9ICYjMDM2O0
    ZGRkZGRUI2CkV4dHJhX2xpZmVfZmxhZ3MgICAgICAgICAgICAgICAgPSAmIzAzNjtGRkZGRkUxQgpTYXZ
    lZF9sYXllcgkJCT0gJiMwMzY7RkZGRkZFM0EKU2F2ZWRfYXJ0X3RpbGUgCQkJPSAmIzAzNjtGRkZGRkUz
    OApTYXZlZF94X3BvcwkJCT0gJiMwMzY7RkZGRkZFMkUKU2F2ZWRfeV9wb3MJCQk9ICYjMDM2O0ZGRkZGR
    TMwCiYjMDM2O0ZGRkZGN0M3CQkJPSAmIzAzNjtGRkZGRjdDOAomIzAzNjtGRkZGRjc2OAkJCT0gJiMwMz
    Y7RkZGRkY3NjgKJiMwMzY7RkZGRkY3NkEJCQk9ICYjMDM2O0ZGRkZGNzZBCm9ial9jb250cm9sCQkJPSA
    mIzAzNjtGRkZGRjdDNgpTdXBlcl9Tb25pY19mcmFtZV9jb3VudAkJPSAmIzAzNjtGRkZGRjY3MAomIzAz
    NjtGRkZGQ0JDMAkJCT0gJiMwMzY7RkZGRkNCQzAgOyB1c2VkIGluIFMzSyBmb3IgaHlwZXIgZm9ybSBhZ
    nRlci1pbWFnZXMKTW92ZVgJCQkJPSAmIzAzNjtGRkZGQjAxOApNb3ZlWQkJCQk9ICYjMDM2O0ZGRkZCMD
    FBCk1haW5DaGFyYWN0ZXIreF9wb3MJCT0gJiMwMzY7RkZGRkIwMTAKTWFpbkNoYXJhY3Rlcit5X3Bvcwk
    JPSAmIzAzNjtGRkZGQjAxNApTaWRla2ljayt4X3BvcwkJCT0gJiMwMzY7RkZGRkIwNUEKU2lkZWtpY2sr
    eV9wb3MJCQk9ICYjMDM2O0ZGRkZCMDVFCgoKClJvdXRpbmVzOgoKUGF1c2VHYW1lCQkJPSBQYXVzZWRfR
    GVidWdfQ29udHJvbHMKU29uaWNfTGV2ZWxCb3VuZCAgICAgICAgICAgICAgICA9IFBsYXllcl9DaGVja1
    9TY3JlZW5fQm91bmRhcmllcwpBbmdsZVBvcyAJCQk9IENhbGxfUGxheWVyX0FuZ2xlUG9zCkNhbGNTaW5
    lIAkJCT0gR2V0U2luZQpDYWxjQW5nbGUJCQk9IEdldEFyY1RhbgpTb25pY19Eb0xldmVsQ29sbGlzaW9u
    IAkJPSBzdWJfMTFFRUMKT2JqZWN0TW92ZSAJCQk9IE1vdmVTcHJpdGVfVGVzdEdyYXZpdHkyIG9yIE1vd
    mVTcHJpdGUyClNpbmdsZU9iakxvYWQJCQk9IENyZWF0ZV9OZXdfU3ByaXRlMwpBbmltYXRlU3ByaXRlIA
    kJCT0gQW5pbWF0ZV9TcHJpdGUKRGlzcGxheVNwcml0ZSAgICAgICAgICAgICAgICAgICA9IERyYXdfU3B
    yaXRlIApzb25pY19qdW1waGVpZ2h0CQk9IHN1Yl8xMThCQwpTb25pY19DaGdKdW1wRGlyCQk9IHN1Yl8x
    MTY0RQpPYmowMV9VcGRhdGVTcGVlZE9uR3JvdW5kCT0gbG9jXzExMkZDClNvbmljX0xvb2t1cAkJCT0gb
    G9jXzExMkIwClNvbmljX0R1Y2sJCQk9IGxvY18xMTI3NgpPYmowMV9NZEp1bXAJCQk9IFNvbmljX1NwaW
    5fRnJlZXNwYWNlIApPYmowMV9NZFJvbGwJCQk9IFNvbmljX1NwaW5fUGF0aApTb25pY19Sb2xsCQkJPSB
    QbGF5ZXJfU3BpbgpTb25pY19KdW1wCQkJPSBzdWJfMTE3REEKUGxheWVyX09uRmxvb3IJCQk9IGxvY18x
    Qzk1QSBvciBUYWlsc19Eb0xldmVsQ29sbGlzaW9uIHdoZW4gVGFpbHMKU29uaWNfQ2hlY2tHb1N1cGVyC
    Qk9IGxvY18xMTlEMgpTb25pY19SZXNldE9uRmxvb3IgCQk9IFBsYXllcl9Ub3VjaEZsb29y--><!--egc2--><!--g2--></div><!--eg2-->


    Not 100% sure on some notes, 4 seems to be both Sonic_deceleration AND render_flags, but that may just be me overlooking shit.
     
  2. Sik

    Sik

    Sik is pronounced as "seek", not as "sick". Tech Member
    6,719
    0
    0
    being an asshole =P
    Why are optimizations enabled? =S I just use /p (asm68k) or -p (snasm68k) and that normally does it - especially if I want an exact build of what is in the asm file. Having to remember all those parameters seems stupid and hard =/

    By the way, to those using asm68k, it pretty much takes the same parameters as snasm68k but using / instead of - (some parameters change, but most are the same). I wonder if that helps =P
     
  3. Hitaxas

    Hitaxas

    Retro 80's themed Twitch streamer ( on hiatus) Member
    Without some optimizations, there seems to be a few graphical errors in Mushroom Hill Zone (S&K).
     
  4. Sik

    Sik

    Sik is pronounced as "seek", not as "sick". Tech Member
    6,719
    0
    0
    being an asshole =P
    Wouldn't that mean that something is wrong with the disassembly then? Remember that optimizations are doing stuff like replacing add with addq where possible and such.
     
  5. Hitaxas

    Hitaxas

    Retro 80's themed Twitch streamer ( on hiatus) Member
    Could be. Since there are quite a few graphical mess ups in the game.
     
  6. Spanner

    Spanner

    The Tool Member
    3,350
    157
    43
    United Kingdom
    Sonic Hacking Contest
    The disassembly is quite picky. For example, if you replace the ASM'd art for Sonic with a binary file exported from SonMapEd, the game fucks up. Why is that happening? I add an even directive anyway and that fails.
     
  7. Hitaxas

    Hitaxas

    Retro 80's themed Twitch streamer ( on hiatus) Member
    I haven't messed with adding files externally. If I were to replace the art, I'd save everything in ASM form and replace the lines in the asm file.
     
  8. Yuzu

    Yuzu

    Member
    2,494
    33
    28
    I guess the game is just sensitive about the files, or checks the checksum of the files, which would be pointless on the 68K at the same time.
     
  9. LazloPsylus

    LazloPsylus

    Buried under SSRG Somewhere Tech Member
    154
    0
    0
    Academy City
    SSRG, world domination, a billion and one research projects...
    I actually started doing some research pertaining to the spindash code in the disasm, actually. I had some notes, but they all seem to have disappeared. I'd be glad to join in and help, if it weren't for the fact that I'm already tied to another project and probably won't be freed up anytime soon. If I do find some spare time, however, I might be able to pitch in with some research.

    I was actually hoping that someone would attempt to do this. S3K has some interesting secrets nestled inside of the code and some amazing programming and none of it can really be read or used because there is little to no documentation on any of the disasm at all. It's time we start trying to remedy the issue of no documentation.

    By the way, as a note I just remembered, there is a serious issue pertaining to the combined ROM that does not allow much (if any) progress in AIZ and MHZ. I believe the issue is tied to either a music call involving Knuckles's Theme and it's transition back to the normal zone music (oddly, the probem does not appear at the end of LBZ, when Knuckles appears to slow down Sonic/Tails) or it could be an alignment issue. It only happens with the combined S3K ROM. That may be an issue that needs to be resolved in the disasm along with the research that is intended to be done.
     
  10. Skyler

    Skyler

    Neonネオン Cowgirlカウガール Site Staff
    3,289
    28
    28
    Hellafornia
    The next audtion
    I may not exactly be a hacking expert, but couldn't you try disassembling S3 and SK seperately?
     
  11. Hitaxas

    Hitaxas

    Retro 80's themed Twitch streamer ( on hiatus) Member
    S3 alone, no... Since I have not seen a disassembly of plain S3.
    S&K, yes... That is what Stealth's file is actually.

    Although, my focus is on S3K.
     
  12. Ritchie Ramone

    Ritchie Ramone

    Member
    35
    0
    6
    I'm no hacker (although I do have some experience dicking around with pointless "experiments" on S2 disassemblies and I have some ASM knowledge), but I'm in full support of this. Hopefully this opens new doors in hacking this game. I know that with the proper knowledge, I myself could contribute to this (and I certainly do wish I were at a level where I could immediately join you guys and help further this research). Anyways, you guys have my full support.
     
Thread Status:
Not open for further replies.