Sonic Adventure 2 Hacking

Discussion in 'Engineering & Reverse Engineering' started by Turbohog, Feb 20, 2012.

  1. Tiranno

    Tiranno

    Steveosaurus Rex Member
    Wait Jimmy is a tech member? I could have never guessed!

    Anywho even when adding them as a hex, the characters still won't load properly. Mechless Tails never works and for some reason I can't replace Shadow in some of his missions. Both are converted to byte and I have hex input enabled. Perhaps I am doing something wrong?
     
  2. MainMemory

    MainMemory

    Have no fear...Amy Rose is here! Tech Member
    4,435
    75
    28
    SonLVL
    I tried switching the function that loads Sonic for the one that loads Super Sonic, but it just crashes. I was able to switch the pointer to Sonic's code with Super Sonic's, which gave me Super Sonic with Sonic's model, animations and textures.
     
  3. Ayu Tsukimiya

    Ayu Tsukimiya

    UGUU~ Member
    518
    4
    18
    On a similar note, can the cutscene models be replaced? They all look terrible in them.
     
  4. darkspines35

    darkspines35

    It's Easy Actually. No, seriously. Tech Member
    248
    0
    16
    .V.
    Sanik Adevnt Casters
    If we figure out how the cutscenes load up the models, you could essentially replace them. But the cutscenes files are just confusing as heck to me last time I looked into them...
     
  5. Trunks

    Trunks

    AGAIN TRY Oldbie
    I bet I could pop the audio into audacity and reset the times just a little to fix 'em up.

    But that I don't care enough about.
     
  6. Sappharad

    Sappharad

    Oldbie
    1,363
    30
    28
    I got that to happen when messing with the Gamecube version way back when.
    http://sappharad.com/images/4player.jpg
    No, there is no 4 player, just evidence that they wanted to do that.

    The character values provided in the previous page(s) aren't enough to get the mechless characters to load. That requires assembly hacking, because the game will only run the routines that load those versions of the characters when the chao garden is loading. Same with the alternate 2 player models (Amy, Metal Sonic, etc). The logic is there, it's just a simple one instruction change if I recall correctly.
     
  7. MainMemory

    MainMemory

    Have no fear...Amy Rose is here! Tech Member
    4,435
    75
    28
    SonLVL
    To make Mech Eggman playable in Chao World change the byte at 43CA0C from 3 to 7.
    To make Mech Tails playable in Chao World change the byte at 43CA46 from 2 to 6.
    To make Mechless Eggman playable outside Chao World change the byte at 43CA92 from 7 to 3.
    To make Mechless Tails playable outside Chao World change the byte at 43CAD6 from 6 to 2.
    To make the test stage accessible by setting the stage to 0 change the byte at 43C983 from 0x7D to 0xEB.
    To make Amy playable in 1P mode change the bytes at 716E13 from 74 1C to 90 90 and set the byte at 174B015 to 1.
    To make Metal Sonic playable in 1P mode change the bytes at 717373 from 74 1C to 90 90 and set the byte at 174B015 to 1.
    To make Tikal playable in 1P mode change the bytes at 728123 from 74 1C to 90 90 and set the byte at 174B015 to 1.
    To make Chaos playable in 1P mode change the bytes at 728473 from 74 1C to 90 90 and set the byte at 174B015 to 1.
    To make the Dark Chao Walker playable in 1P mode change the bytes at 740C61 from 74 1C to 90 90 and set the byte at 174B015 to 1.
    To make the Chao Walker playable in 1P mode change the bytes at 740EC1 from 74 1C to 90 90 and set the byte at 174B015 to 1.

    Edit: bonus:
    Always load two characters: change the bytes at 43D6EB from 0F 84 90 00 00 00 to 90 90 90 90 90 90.
    Always use splitscreen mode: change the bytes at 439703 from 74 46 to 90 90.
    Turns 1P mode into kind of a 2P co-op mode. Use the byte at 1934BE4 to change P2's character.

    Double Edit: SCHG:Sonic Adventure 2 (PC)\RAM Editing
    If you find something, you could like, add it.
     
  8. TheKazeblade

    TheKazeblade

    "Our Life is More than a Side-Effect" Member
    Does the checkpoint system work the same way as it does in regular 2P mode, where just one person has to touch it and it spawns either player their when they die? I'm just curious because the light dash lines in Crazy Gadget would only let one player make it to the end if it doesn't.
     
  9. Dark Sonic

    Dark Sonic

    Member
    12,782
    272
    63
    Working on my art!
    So not quite sure how putting these values in works for whatever reason. When I put in 717373 the value it says is 7284 or something, not 741C. Hmmmm...
     
  10. MainMemory

    MainMemory

    Have no fear...Amy Rose is here! Tech Member
    4,435
    75
    28
    SonLVL
    You need to make it an Array of Bytes.
    Nope. If either of you die the level restarts, and for some reason P2 always starts at the beginning.
     
  11. muteKi

    muteKi

    Fuck it Member
    7,585
    6
    18
    Does the game still use the low-res models for 2P mode by default? Is there an easy way to change that?
     
  12. Dark Sonic

    Dark Sonic

    Member
    12,782
    272
    63
    Working on my art!
    ^ Yes someone mentioned how to change that a few pages back. Looks like a pretty simple fix as well.

    And I got the codes to work. Just like Amy, Metal Sonic is still broken. He can use the black shield but he can't somersault or light dash, his sound effects are also screwed up. Funny thing is though that Metal can almost get through all of Shadow's levels, as Sky Rail and Final Chase don't require either move.
     
  13. Dude

    Dude

    Tech Member
    3,138
    0
    16
    Southbridge, MA
    Random VR/AR trash
    How are you entering the values? Using the memory browser? If not, are you using the 'array of bytes' datatype?
     
  14. Dark Sonic

    Dark Sonic

    Member
    12,782
    272
    63
    Working on my art!
    I figured it out, all is well.
     
  15. Trunks

    Trunks

    AGAIN TRY Oldbie
    Is there any kind of tutorial out there to explain it to me like I'm five?
    Nevermind, I've gotten it.
     
  16. Trunks

    Trunks

    AGAIN TRY Oldbie
    Doublepost, but just did a breakdown of all the values for the level address.

    Code (Text):
    1.  
    2. World:
    3. 0 - Chao World (With mission text)***
    4. 1 - Chao World (No mission text)
    5. 2 - Glitch Level
    6. 3 - Green Forest
    7. 4 - White Jungle
    8. 5 - Pumpkin Hill (with a goal ring)
    9. 6 - Sky Rail
    10. 7 - Aquatic Mine*
    11. 8 - Security Hall*
    12. 9 - Prison Lane
    13. 10 - Metal Harbor
    14. 11 - Iron Gate**
    15. 12 - Weapons Bed
    16. 13 - City Escape
    17. 14 - Radical Highway
    18. 15 - Multiplayer Shooting Level (Metal Harbor)
    19. 16 - Wild Canyon*
    20. 17 - Mission Street**
    21. 18 - Dry Lagoon
    22. 19 - Sonic vs Shadow Battle #1
    23. 20 - Tails vs Eggman Battle #1
    24. 21 - Sand Ocean
    25. 22 - Crazy Gadget
    26. 23 - Hidden Base
    27. 24 - Eternal Engine
    28. 25 - Death Chamber
    29. 26 - Egg Quarters
    30. 27 - Lost Colony
    31. 28 - Pyramid Cave
    32. 29 - Tails vs Eggman Battle #2
    33. 30 - Final Rush
    34. 31 - Green Hill
    35. 32 - Meteor Herd*
    36. 33 - Knuckles vs Rouge
    37. 34 - Cannon's Core (Sonic's Section)
    38. 35 - Cannon's Core (Eggman's Section)
    39. 36 - Cannon's Core (Tails' Section)
    40. 37 - Cannon's Core (Rouge's Section)
    41. 38 - Cannon's Core (Knuckles' Section)
    42. 39 - Multiplayer Shooting Level (Radical Highway)
    43. 40 - Final Chase
    44. 41 - CRASH
    45. 42 - Sonic vs Shadow Battle #2
    46. 43 - Cosmic Wall
    47. 44 - Mad Space
    48. 45 - CRASH
    49. 46 - CRASH
    50. 47 - Pyramid Race
    51. 48 - Multiplayer Shooting Level (Desert Level)
    52. 49 - Pool Quest
    53. 50 - Planet Quest
    54. 51 - Deck Race
    55. 52 - Downtown Race
    56. 53 - Multiplayer Shooting Level (Space Level)
    57. 54 - Grind Race
    58. 55 - Multiplayer Shooting Level (Gun Facility Level)
    59. 56 - Multiplayer Shooting Level (ARK Level)
    60. 57 - Metal Harbor (no items)
    61. 58 - Multiplayer Shooting Level (Prison Level)
    62. 59 - Multiplayer Hunting Level (Pyramid Level)
    63. 60 - BIG FOOT fight
    64. 61 - HOT SHOT fight
    65. 62 - FLYING DOG fight
    66. 63 - King Boom Boo
    67. 64 - Egg Golem (Sonic Fight)
    68. 65 - The Biolizard
    69. 66 - The Finalhazard
    70. 67 - Egg Golem (Eggman Fight)
    71. 68 - CRASH
    72. 69 - CRASH
    73. 70 - Route 101
    74. 71 - Race Mode
    75. 72 - Loads whatever map with no items
    76.  
    77. *When playing as a character other than Rouge or Knuckles, a goal ring appears at the normal initial spawn.
    78. **When playing as a non-mech character, smoke will bellow from their head.
    79. ***See below
    80.  

    This is the mission text that shows up for Chao world. I haven't got any levels with missions 3-5 unlocked yet.
    [​IMG]
     
  17. Glaber

    Glaber

    Has Beaten Sonic Genesis for GBA Oldbie
    Nice to see some inside humor in this.
     
  18. iGamr

    iGamr

    Member
    585
    10
    18
    Does anybody know if that mission text is found in previous releases of the game?
     
  19. MainMemory

    MainMemory

    Have no fear...Amy Rose is here! Tech Member
    4,435
    75
    28
    SonLVL
    Considering that it only shows up when someone tries to access the test level, it was probably added when they "fixed" the Chao Key bug from the 360/PS3 version.
    Here's my list of level IDs:
    Code (Text):
    1. FFFFFFFF LevelIDs_BasicTest  = 0
    2. FFFFFFFF LevelIDs_KnucklesTest  = 1 ; nonexistent
    3. FFFFFFFF LevelIDs_SonicTest  = 2 ; nonexistent
    4. FFFFFFFF LevelIDs_GreenForest  = 3
    5. FFFFFFFF LevelIDs_WhiteJungle  = 4
    6. FFFFFFFF LevelIDs_PumpkinHill  = 5
    7. FFFFFFFF LevelIDs_SkyRail  = 6
    8. FFFFFFFF LevelIDs_AquaticMine  = 7
    9. FFFFFFFF LevelIDs_SecurityHall  = 8
    10. FFFFFFFF LevelIDs_PrisonLane  = 9
    11. FFFFFFFF LevelIDs_MetalHarbor  = 10
    12. FFFFFFFF LevelIDs_IronGate  = 11
    13. FFFFFFFF LevelIDs_WeaponsBed  = 12
    14. FFFFFFFF LevelIDs_CityEscape  = 13
    15. FFFFFFFF LevelIDs_RadicalHighway  = 14
    16. FFFFFFFF LevelIDs_WeaponsBed2P  = 15
    17. FFFFFFFF LevelIDs_WildCanyon  = 16
    18. FFFFFFFF LevelIDs_MissionStreet  = 17
    19. FFFFFFFF LevelIDs_DryLagoon  = 18
    20. FFFFFFFF LevelIDs_SonicVsShadow1  = 19
    21. FFFFFFFF LevelIDs_TailsVsEggman1  = 20
    22. FFFFFFFF LevelIDs_SandOcean  = 21
    23. FFFFFFFF LevelIDs_CrazyGadget  = 22
    24. FFFFFFFF LevelIDs_HiddenBase  = 23
    25. FFFFFFFF LevelIDs_EternalEngine  = 24
    26. FFFFFFFF LevelIDs_DeathChamber  = 25
    27. FFFFFFFF LevelIDs_EggQuarters  = 26
    28. FFFFFFFF LevelIDs_LostColony  = 27
    29. FFFFFFFF LevelIDs_PyramidCave  = 28
    30. FFFFFFFF LevelIDs_TailsVsEggman2  = 29
    31. FFFFFFFF LevelIDs_FinalRush  = 30
    32. FFFFFFFF LevelIDs_GreenHill  = 31
    33. FFFFFFFF LevelIDs_MeteorHerd  = 32
    34. FFFFFFFF LevelIDs_KnucklesVsRouge  = 33
    35. FFFFFFFF LevelIDs_CannonsCoreS  = 34
    36. FFFFFFFF LevelIDs_CannonsCoreE  = 35
    37. FFFFFFFF LevelIDs_CannonsCoreT  = 36
    38. FFFFFFFF LevelIDs_CannonsCoreR  = 37
    39. FFFFFFFF LevelIDs_CannonsCoreK  = 38
    40. FFFFFFFF LevelIDs_MissionStreet2P  = 39
    41. FFFFFFFF LevelIDs_FinalChase  = 40
    42. FFFFFFFF LevelIDs_WildCanyon2P  = 41
    43. FFFFFFFF LevelIDs_SonicVsShadow2  = 42
    44. FFFFFFFF LevelIDs_CosmicWall  = 43
    45. FFFFFFFF LevelIDs_MadSpace  = 44
    46. FFFFFFFF LevelIDs_SandOcean2P  = 45
    47. FFFFFFFF LevelIDs_DryLagoon2P  = 46
    48. FFFFFFFF LevelIDs_PyramidRace  = 47
    49. FFFFFFFF LevelIDs_HiddenBase2P  = 48
    50. FFFFFFFF LevelIDs_PoolQuest  = 49
    51. FFFFFFFF LevelIDs_PlanetQuest  = 50
    52. FFFFFFFF LevelIDs_DeckRace  = 51
    53. FFFFFFFF LevelIDs_DowntownRace  = 52
    54. FFFFFFFF LevelIDs_CosmicWall2P  = 53
    55. FFFFFFFF LevelIDs_GrindRace  = 54
    56. FFFFFFFF LevelIDs_LostColony2P  = 55
    57. FFFFFFFF LevelIDs_EternalEngine2P  = 56
    58. FFFFFFFF LevelIDs_MetalHarbor2P  = 57
    59. FFFFFFFF LevelIDs_IronGate2P  = 58
    60. FFFFFFFF LevelIDs_DeathChamber2P  = 59
    61. FFFFFFFF LevelIDs_BigFoot  = 60
    62. FFFFFFFF LevelIDs_HotShot  = 61
    63. FFFFFFFF LevelIDs_FlyingDog  = 62
    64. FFFFFFFF LevelIDs_KingBoomBoo  = 63
    65. FFFFFFFF LevelIDs_EggGolemS  = 64
    66. FFFFFFFF LevelIDs_Biolizard  = 65
    67. FFFFFFFF LevelIDs_FinalHazard  = 66
    68. FFFFFFFF LevelIDs_EggGolemE  = 67
    69. FFFFFFFF LevelIDs_Route101280  = 70
    70. FFFFFFFF LevelIDs_KartRace  = 71
    71. FFFFFFFF LevelIDs_ChaoWorld  = 90
    These are all confirmed by a table of strings and level IDs in the exe that would seem to make a debug level select, with lists for each character for 1P and 2P.
    Code (Text):
    1. .data:01415D58 dword_1415D58   dd LevelIDs_BasicTest, LevelIDs_SonicTest, LevelIDs_CityEscape
    2. .data:01415D58                                         ; DATA XREF: .data:off_1415FB8o
    3. .data:01415D58                 dd LevelIDs_BigFoot, LevelIDs_MetalHarbor, LevelIDs_SonicVsShadow1
    4. .data:01415D58                 dd LevelIDs_GreenForest, LevelIDs_PyramidCave, LevelIDs_EggGolemS
    5. .data:01415D58                 dd LevelIDs_CrazyGadget, LevelIDs_FinalRush, LevelIDs_SonicVsShadow2
    6. .data:01415D58                 dd LevelIDs_CannonsCoreS, LevelIDs_FinalHazard, LevelIDs_GreenHill
    7. .data:01415D58                 dd LevelIDs_KartRace, LevelIDs_ChaoWorld
    8.  
    9. .data:01415DC8 off_1415DC8     dd offset aBasicTest    ; DATA XREF: .data:01415FBCo
    10. .data:01415DC8                                         ; "BASIC TEST"
    11. .data:01415DCC                 dd offset aSonicTest    ; "SONIC TEST"
    12. .data:01415DD0                 dd offset aCityEscape   ; "CITY ESCAPE"
    13. .data:01415DD4                 dd offset aBigFoot      ; "BIG FOOT"
    14. .data:01415DD8                 dd offset aMetalHarbor  ; "METAL HARBOR"
    15. .data:01415DDC                 dd offset aSonicVsShadow ; "SONIC VS SHADOW"
    16. .data:01415DE0                 dd offset aGreenForest  ; "GREEN FOREST"
    17. .data:01415DE4                 dd offset aPyramidCave  ; "PYRAMID CAVE"
    18. .data:01415DE8                 dd offset aEggGolem     ; "EGG GOLEM"
    19. .data:01415DEC                 dd offset aCrazyGadget  ; "CRAZY GADGET"
    20. .data:01415DF0                 dd offset aFinalRush    ; "FINAL RUSH"
    21. .data:01415DF4                 dd offset aSonicVsShadow2 ; "SONIC VS SHADOW 2"
    22. .data:01415DF8                 dd offset aCannonSCore  ; "CANNON'S CORE"
    23. .data:01415DFC                 dd offset aFinalHazard  ; "FINAL HAZARD"
    24. .data:01415E00                 dd offset aGreenHill    ; "GREEN HILL"
    25. .data:01415E04                 dd offset aCartMini     ; "CART MINI"
    26. .data:01415E08                 dd offset aChaoWarld    ; "CHAO WARLD"
    Edit:
    Code (Text):
    1. .data:00C51660                 dd offset aSuperSonic   ; "SUPER SONIC"
    2. .data:00C51664                 dd offset aPoweredByThe ; "Powered by the "
    3. .data:00C51668                 dd offset a7ChaosEmeralds ; "7 Chaos Emeralds."
    4. .data:00C5166C                 dd offset aAmazingSpeedAn ; "Amazing speed and moves,"
    5. .data:00C51670                 dd offset aButDiesIfRings ; "but dies if rings are lost."
    6. .data:00C51674                 dd offset aSuperShadow  ; "SUPER SHADOW"
    7. .data:00C51678                 dd offset aPoweredByThe ; "Powered by the "
    8. .data:00C5167C                 dd offset a7ChaosEmeralds ; "7 Chaos Emeralds."
    9. .data:00C51680                 dd offset aAmazingSpeedAn ; "Amazing speed and moves,"
    10. .data:00C51684                 dd offset aButDiesIfRings ; "but dies if rings are lost."
     
  20. MainMemory

    MainMemory

    Have no fear...Amy Rose is here! Tech Member
    4,435
    75
    28
    SonLVL
    I managed to get the debug menu to show up... except that it's invisible.
    I pushed a bunch of random buttons and somehow ended up in a cutscene debug, complete with pause, fast forward and rewind features:
    http://www.youtube.com/watch?v=QKd5vVHuY5I
    Edit: however, the menu does display in the GC version.
    [​IMG]
    All you have to do is replace advertiseD.rel with titleD.rel. It should work similarly for advertise.prs and title.prs in the DC version.