Difference between revisions of "Sonic Heroes/EXE Editing"
From Sonic Retro
(→Triangle Jump Conditions) |
(→Pointer Locations) |
||
Line 2,349: | Line 2,349: | ||
|Robot Carnival | |Robot Carnival | ||
|7179099 | |7179099 | ||
+ | |100 | ||
|- | |- | ||
|Rail Canyon | |Rail Canyon |
Revision as of 15:02, 14 February 2019
SCHG: Sonic Heroes |
---|
Main Article |
Mechanic Editing |
DOL Editing |
Model Editing |
Collision Format Model Format |
Level Editing |
Camera Editing |
Particle Editing |
Particle Editing |
Sound Editing |
Music List |
SCHG How-Tos |
Custom Object Material Effect Tutorial |
This guide is currently obsolete, but addresses from the executable will remain documented in this article.
The main EXE of the PC game is Tsonic_win.exe. The EXE is little endian. Unlike console versions, the pointer key is 0x400000; to find where a pointer points to, you must subtract that from its value.
Contents
- 1 Mission Tasks
- 2 Single Player Team Battle matches
- 3 Super Team Sonic anywhere
- 4 Start/End Positions
- 5 Rank Requirements
- 6 Unlock Requirements
- 7 Screen Fading
- 8 Frame Rate for Split Screen
- 9 Demo Gameplay
- 10 Debug Mode
- 11 Player Abilities
- 12 Ring Mechanism
- 13 Amount of Rings for Metal Overlord
- 14 Splines
- 15 Seaside Hill Bobsled Exclusion
- 16 Egg Pawn Roulette Mode
- 17 Metal Characters in 1P mode
- 18 Per Geometry ID Sky Visibility Toggling
- 19 Tutorial Mode Team Defaults
- 20 Particle Effect Events (Incomplete)
- 21 Warp Effects
- 22 Field of view
- 23 EXE defined particle settings
- 24 Game Over state
- 25 Super Hard Challenge
- 26 Material Functions
- 27 Special Stage Object Model Settings
- 28 Special Stage Particles (Incomplete)
Mission Tasks
The codes check the requirements for completion in-order to clear a mission such as collecting rings in Team Rose's extra missions. Different codes are scattered throughout the EXE in a number of code sections.
Time Challenges
The entry of each time limit missions start at 0x3C6A68 and the Chaotix section starts at 0x3C6AD8. These set how many minutes the player must qualify to complete the mission.
Timed Mission Entry:
00 00 00 00 00 00 00 00
Offset | Description |
---|---|
0x00 | Level ID |
0x04 | Assigned Team ID |
0x05 | Number of Minutes |
List of Missions:
Address (EXE) | Address (RAM) | Level | Team ID | Default No. of Minutes |
---|---|---|---|---|
3C6A68 | 7C6A68 | Seaside Hill | Team Sonic | 05 |
3C6A70 | 7C6A70 | Ocean Palace | Team Sonic | 05 |
3C6A78 | 7C6A78 | Grand Metropolis | Team Sonic | 05 |
3C6A80 | 7C6A80 | Power Plant | Team Sonic | 09 |
3C6A88 | 7C6A88 | Casino Park | Team Sonic | 05 |
3C6A90 | 7C6A90 | BINGO Highway | Team Sonic | 06 |
3C6A98 | 7C6A98 | Rail Canyon | Team Sonic | 05 |
3C6AA0 | 7C6AA0 | Bullet Station | Team Sonic | 06 |
3C6AA8 | 7C6AA8 | Frog Forest | Team Sonic | 05 |
3C6AB0 | 7C6AB0 | Lost Jungle | Team Sonic | 06 |
3C6AB8 | 7C6AB8 | Hang Castle | Team Sonic | 06 |
3C6AC0 | 7C6AC0 | Mystic Mansion | Team Sonic | 07 |
3C6AC8 | 7C6AC8 | Egg Fleet | Team Sonic | 09 |
3C6AD0 | 7C6AD0 | Final Fortress | Team Sonic | 09 |
3C6AD8 | 7C6AD8 | Grand Metropolis | Team Chaotix | 08 |
3C6AE0 | 7C6AE0 | Rail Canyon | Team Chaotix | 06 |
3C6AE8 | 7C6AE8 | Rail Canyon (Team Chaotix version) | Team Chaotix | 06 |
3C6AF0 | 7C6AF0 | Frog Forest | Team Chaotix | 04 |
Note: The maximum valid amount of minutes is 128 (80 in hexadecimal), any value above 0x80 will immediately trigger a "Time Up" state after entering the level with the time challenge mission in place.
Team Dark Robot Challenge
This checks for how many robots that need to be destroyed before completing the mission using Team Dark. The default value to how many robots that should be destroyed is 100 (64 in hexadecimal). The value to that code is located at 0x1A9993 and for display is at 0x1A9984.
Team Rose Extra Mission
All extra missions for team rose is ring challenges which applies to all levels in the game.
Address | Default Ring Requirements | Default (dec.) |
---|---|---|
1A9E0F | C80 | 200 |
Team Chaotix Missions
These are the requirements that are set for the missions assigned to the team. This does not include time challenges, missions that only scan layouts for a number of said objects on both modes nor anything that does not have any requirements except for reaching the goal ring.
Address (Normal) | Address (Extra) | Mission | Level | Default Required Amount (hex.) | Default Required Amount (dec.) | Default Required Amount (Extra) (hex.) | Default Required Amount (Extra) (dec.) | Note(s) |
---|---|---|---|---|---|---|---|---|
4BF420 | 4BF424 | Collect Hermit Crabs | Seaside Hill | 0A | 10 | N/A (detects how many are placed) | N/A (detects how many are placed) | |
4BF428 | 4BF42C | Chao Rescue | Ocean Palace | 01 | 1 | 01 | 1 | |
4BF438 | 4BF43C | Destroy the Gold Turtles | Power Plant | 03 | 3 | 05 | 5 | |
4BF440 | 4BF444 | Ring Collection Challenge | Casino Park | C800 | 200 | F401 | 500 | Not used. The ring amount is checked by the ring check opcodes instead. |
4BF448 | 4BF44C | Casino Chip Collection | BINGO Highway | 0A | 10 | N/A (detects how many are placed) | N/A (detects how many are placed) | |
4BF458 | 4BF45C | Destroy the Capsules | Bullet Station | 1E | 30 | N/A (detects how many are placed) | N/A (detects how many are placed) | |
4BF468 | 4BF46C | Collect the Chao | Lost Jungle | 0A | 10 | N/A (detects how many are placed) | N/A (detects how many are placed) | |
4BF488 | 4BF48C | Collect Eggman Keys | Final Fortress | 05 | 5 | 0A | 10 |
These are the codes that check for how many rings you have before completing the mission in Casino Park.
Address | Mission Type | Level | Default Ring Requirements (Normal) | Default Ring Requirements (Extra) | Default (Normal) (dec.) | Default (Extra) (dec.) |
---|---|---|---|---|---|---|
1A9DE5 | Ring Collection Challenge | Casino Park | C800 | F401 | 200 | 500 |
For types of missions assigned for the team, one mission parameter byte per level starts at 0x20AC and ends at 0x20B9. The following parameters assign a task to complete on a level given:
Parameter ID | Mission Conditions | Extra Mission Conditions |
---|---|---|
00 | Item Collect (Half/EXE Defined) | Item Collect (Full) |
01 | Item Collect | Item Collect (without detection by Robots) |
02 | Robot Cleanup | Robot Cleanup (with time limit) |
03 | Ring Collect | Ring Collect |
04 | Regular Mission | Regular Mission (with time limit) |
05 | Regular Mission (without detection by Frogs) | Regular Mission (with time limit, but without detection by Frogs) |
06 | Regular Mission (without detection by Robots) | Regular Mission (with time limit, but without detection by Robots) |
The entry for each Goal ring state is 0x04 bytes each and begins at 0x3D0C50 for each level. The first four bytes of the entry is unused, but the used entries begins at 0x3D0C54.
State entry:
00 00 00 00
Offset | Type | Description |
---|---|---|
0x00 | Byte | State ID |
The two state IDs trigger the effects when loaded.
ID | Description |
---|---|
00 | Goal Ring |
01 | Restart Ring |
Single Player Team Battle matches
A list of team IDs are loaded for each team on team battle stages. The list for the urban level starts at 0x4DD514 and the forest battle level starts at 0x4DD5A0. Each entry has four bytes each and a list of IDs for the teams load the following teams:
ID | Team |
---|---|
00 | Sonic |
01 | Dark |
02 | Rose |
03 | Chaotix |
A list of default IDs are seen in these addresses:
Urban team battle stage:
Address | Default Team ID | Default CPU. Team | Player |
---|---|---|---|
4DD514 | 02 | Rose | Sonic |
4DD518 | 03 | Chaotix | Dark |
4DD51C | 00 | Sonic | Rose |
4DD520 | 01 | Dark | Chaotix |
Jungle team battle stage:
Address | Default Team ID | Default CPU. Team | Player |
---|---|---|---|
4DD5A0 | 01 | Dark | Sonic |
4DD5A4 | 00 | Sonic | Dark |
4DD5A8 | 03 | Chaotix | Rose |
4DD5AC | 02 | Rose | Chaotix |
Warnings: Some teams may spawn at the same start position as the player if a certain computer player ID has been loaded (e.g. Team Sonic used when Team Sonic was selected). If the selected team is the same as the one loaded on the level and you have either decided to quit, fail or complete the mission, the game will crash.
Team Battle Display
After the stage loads, an animation files to the boss HUD information loads on the screen.
A list of HUD pointers begins at 0x4DCD38 for the urban battle level and 0x4DCD48 for the jungle battle stage:
Address | Pointer RAM Address | CPU. Team | Stage |
---|---|---|---|
4DCD38 | 70 91 74 | Rose | Urban Team Battle |
4DCD3C | 6C 91 74 | Chaotix | Urban Team Battle |
4DCD40 | 0E 92 74 | Sonic | Urban Team Battle |
4DCD44 | 68 91 74 | Dark | Urban Team Battle |
4DCD48 | 68 91 74 | Dark | Jungle Team Battle |
4DCD4C | 0E 92 74 | Sonic | Jungle Team Battle |
4DCD50 | 6C 91 74 | Chaotix | Jungle Team Battle |
4DCD54 | 70 91 74 | Rose | Jungle Team Battle |
A list of animated text pointers are assigned to each team and level:
Address | Pointer RAM Address | CPU. Team | Stage |
---|---|---|---|
4DCF84 | 98 C9 74 | Rose | Urban Team Battle |
4DCF88 | 34 82 74 | Chaotix | Urban Team Battle |
4DCF8C | 4C 82 74 | Sonic | Urban Team Battle |
4DCF90 | 44 82 74 | Dark | Urban Team Battle |
4DCF94 | 44 82 74 | Dark | Jungle Team Battle |
4DCF98 | 4C 82 74 | Sonic | Jungle Team Battle |
4DCF9C | 34 82 74 | Chaotix | Jungle Team Battle |
4DCFA0 | 98 C9 74 | Rose | Jungle Team Battle |
For display on menus, there are addresses that load a texture for the team battle levels based on team selection on challenge mode.
Address | Default RAM Address Byte Array | Level Display | Selected Team | Level Theme |
---|---|---|---|---|
4BCAE | 50 FE A2 00 | Team Rose | Sonic | Urban |
4BCBF | 58 FE A2 00 | Team Chaotix | Dark | Urban |
4BCD1 | 4C FE A2 00 | Team Sonic | Rose | Urban |
4BCE3 | 54 FE A2 00 | Team Dark | Chaotix | Urban |
4BD1D | 54 FE A2 00 | Team Dark | Sonic | Jungle |
4BD2C | 4C FE A2 00 | Team Sonic | Dark | Jungle |
4BD3A | 58 FE A2 00 | Team Chaotix | Rose | Jungle |
4BD49 | 50 FE A2 00 | Team Rose | Chaotix | Jungle |
Super Team Sonic anywhere
While Team Super Sonic is loaded only if the stage is Metal Overlord, the team can easily be loaded in any level. To load the super team on different levels, do the following code edits:
Description | Address | Original Bytes | Replace With |
---|---|---|---|
Always Super Sonic | 1CBEB9 1CC0EA 1CBFDF |
CC CC CC CC CC CC CC E8 D1 FD FF FF 83 3D 10 67 8D 00 18 |
C6 86 C2 00 00 00 01 E8 CA FD FF FF 80 BE C2 00 00 00 01 |
Always Super Tails | 1B7FDD 1B7DE9 1B7ECB |
E8 0E FE FF FF CC CC CC CC CC CC CC 83 3D 10 67 8D 00 18 |
E8 07 FE FF FF C6 86 C2 00 00 00 01 80 BE C2 00 00 00 01 |
Always Super Knuckles | 1C1D6B 1C1E52 1C1E7A |
83 3D 10 67 8D 00 18 CC CC CC CC CC CC CC CC CC CC CC CC E8 91 FD FF FF |
80 BE C2 00 00 00 01 C6 86 C2 00 00 00 01 E9 B2 FD FF FF E8 D3 FF FF FF |
Before using, download MainMemory's fixes for team super sonic and replace the original .anm files with these ones.
Warning: Due to how the game functions, It has cut-scenes that will not work properly as expected, so don't use this team modification on Story Mode otherwise the game will crash. Any other level or mode including team battles in single player should load the team just fine. If used on some stages, large particles that emit from Sonic may lag the gameplay.
Start/End Positions
Start Positions
List of single player start positions begins at 0x3C2FC8. Each level array has the first 4 bytes setting the level number at the first byte and five 0x1C entries for each of the four teams and the unused fifth team. Note that the level IDs used are not the same ones as the level and object lists, they are the ones used in RAM, for example Seaside Hill is 02
Start position entry:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Offset | Type | Description |
---|---|---|
0x00 | Float | X Position |
0x04 | Float | Y Position |
0x08 | Float | Z Position |
0x0C | Word | Pitch (direction) |
0x14 | Byte | Mode 00: Normal 01: Running 02: Rail |
0x18 | Word | Hold time Time spent running |
Ending Positions
List of ending positions begins at 0x3C45B8. These are the places where each team does their victory animation and the results are displayed, after the mission is finished. Each level array has the first 4 bytes setting the level number at the first byte and five 0x14 entries for the five teams. This section has data for single player and multiplayer modes.
End position entry:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Offset | Type | Description |
---|---|---|
0x00 | Float | X Position |
0x04 | Float | Y Position |
0x08 | Float | Z Position |
0x0C | Word | Camera pitch Angle from which the characters are seen |
0x0E | Word | ? (Always FF FF) |
0x10 | Long | Null |
Multiplayer Positions
List of multiplayer start positions begins at 0x3C5E18, after the ending positions. This section has data for the Team Battles and each multiplayer level. The entries are the same as single player start positions, but only have two position entries instead of 5, for the first and second players.
List of multiplayer "bragging" positions begins at 0x3C6380, after the multiplayer start positions. These are the positions where each team makes a comment to the other one, before the multiplayer match starts. This section only has data for each multiplayer level, not the Team Battles. The entries follow the same format as single player ending positions, with four entries.
Rank Requirements
List of scores that are required to gain a certain rank begins at 0x3C744C (0x3C766C for extra) and the time begins at 0x3C779C (0x3C78E4 for extra). These are checked whenever the score or time has reached the requirements. Note that the scores are two bytes each and are multiplied by 100.
Level | Address | Team | Mission Type | Value (Hexadecimal) | Value (Decimal) | Requirement Type | Rank Result |
---|---|---|---|---|---|---|---|
Seaside Hill | 3C744C | Sonic | Regular | 1C2 | 450 | Score | D |
Seaside Hill | 3C744E | Sonic | Regular | 1F4 | 500 | Score | C |
Seaside Hill | 3C7450 | Sonic | Regular | 226 | 550 | Score | B |
Seaside Hill | 3C7452 | Sonic | Regular | 258 | 600 | Score | A |
Seaside Hill | 3C7454 | Rose | Regular | 1C2 | 450 | Score | D |
Seaside Hill | 3C7456 | Rose | Regular | 226 | 550 | Score | C |
Seaside Hill | 3C7458 | Rose | Regular | 28A | 650 | Score | B |
Seaside Hill | 3C745A | Rose | Regular | 2BC | 700 | Score | A |
Ocean Palace | 3C7470 | Sonic | Regular | 140 | 320 | Score | D |
Ocean Palace | 3C7472 | Sonic | Regular | 190 | 400 | Score | C |
Ocean Palace | 3C7474 | Sonic | Regular | 1C2 | 450 | Score | B |
Ocean Palace | 3C7476 | Sonic | Regular | 1F4 | 500 | Score | A |
Grand Metropolis | 3C7494 | Sonic | Regular | 15E | 350 | Score | D |
Grand Metropolis | 3C7496 | Sonic | Regular | 1C2 | 450 | Score | C |
Grand Metropolis | 3C7498 | Sonic | Regular | 226 | 550 | Score | B |
Grand Metropolis | 3C749A | Sonic | Regular | 258 | 600 | Score | A |
Power Plant | 3C74B8 | Sonic | Regular | 12C | 300 | Score | D |
Power Plant | 3C74BA | Sonic | Regular | 15E | 350 | Score | C |
Power Plant | 3C74BC | Sonic | Regular | 190 | 400 | Score | B |
Power Plant | 3C74BE | Sonic | Regular | 1C2 | 450 | Score | A |
Casino Park | 3C74DC | Sonic | Regular | 118 | 280 | Score | D |
Casino Park | 3C74DE | Sonic | Regular | 140 | 320 | Score | C |
Casino Park | 3C74E0 | Sonic | Regular | 168 | 360 | Score | B |
Casino Park | 3C74E2 | Sonic | Regular | 190 | 400 | Score | A |
Bingo Highway | 3C7500 | Sonic | Regular | C8 | 200 | Score | D |
Bingo Highway | 3C7502 | Sonic | Regular | F0 | 240 | Score | C |
Bingo Highway | 3C7504 | Sonic | Regular | 118 | 280 | Score | B |
Bingo Highway | 3C7506 | Sonic | Regular | 140 | 320 | Score | A |
Rail Canyon | 3C7524 | Sonic | Regular | C8 | 200 | Score | D |
Rail Canyon | 3C7526 | Sonic | Regular | FA | 250 | Score | C |
Rail Canyon | 3C7528 | Sonic | Regular | 12C | 300 | Score | B |
Rail Canyon | 3C752A | Sonic | Regular | 15E | 300 | Score | A |
Bullet Station | 3C756C | Sonic | Regular | C8 | 200 | Score | D |
Bullet Station | 3C756E | Sonic | Regular | 12C | 300 | Score | C |
Bullet Station | 3C7570 | Sonic | Regular | 15E | 350 | Score | B |
Bullet Station | 3C7572 | Sonic | Regular | 190 | 400 | Score | A |
Frog Forest | 3C7590 | Sonic | Regular | FA | 200 | Score | D |
Frog Forest | 3C7592 | Sonic | Regular | 118 | 280 | Score | C |
Frog Forest | 3C7594 | Sonic | Regular | 140 | 320 | Score | B |
Frog Forest | 3C7596 | Sonic | Regular | 15E | 350 | Score | A |
Lost Jungle | 3C75B4 | Sonic | Regular | FA | 200 | Score | D |
Lost Jungle | 3C75B6 | Sonic | Regular | F0 | 240 | Score | C |
Lost Jungle | 3C75B8 | Sonic | Regular | 118 | 280 | Score | B |
Lost Jungle | 3C75BA | Sonic | Regular | 140 | 320 | Score | A |
Hang Castle | 3C75D8 | Sonic | Regular | 12C | 300 | Score | D |
Hang Castle | 3C75DA | Sonic | Regular | 15E | 350 | Score | C |
Hang Castle | 3C75DC | Sonic | Regular | 190 | 400 | Score | B |
Hang Castle | 3C75DE | Sonic | Regular | 1C2 | 450 | Score | A |
Mystic Mansion | 3C75FC | Sonic | Regular | C8 | 200 | Score | D |
Mystic Mansion | 3C75FE | Sonic | Regular | 118 | 280 | Score | C |
Mystic Mansion | 3C7560 | Sonic | Regular | 140 | 320 | Score | B |
Mystic Mansion | 3C7562 | Sonic | Regular | 168 | 360 | Score | A |
Egg Fleet | 3C7620 | Sonic | Regular | 64 | 100 | Score | D |
Egg Fleet | 3C7622 | Sonic | Regular | 96 | 150 | Score | C |
Egg Fleet | 3C7624 | Sonic | Regular | B4 | 180 | Score | B |
Egg Fleet | 3C7626 | Sonic | Regular | C8 | 200 | Score | A |
Final Fortress | 3C7644 | Sonic | Regular | 15E | 350 | Score | D |
Final Fortress | 3C7646 | Sonic | Regular | 1D6 | 470 | Score | C |
Final Fortress | 3C7648 | Sonic | Regular | 23A | 570 | Score | B |
Final Fortress | 3C764A | Sonic | Regular | 26C | 620 | Score | A |
Seaside Hill | 3C766C | Sonic | Extra | 140 | 320 | Score | D |
Seaside Hill | 3C766E | Sonic | Extra | 190 | 400 | Score | C |
Seaside Hill | 3C7670 | Sonic | Extra | 1C2 | 450 | Score | B |
Seaside Hill | 3C7672 | Sonic | Extra | 1F4 | 500 | Score | A |
Egg Hawk | 3C779C | Sonic | Boss | 0004 | 0 4 | Time | D |
Egg Hawk | 3C779E | Sonic | Boss | 0003 | 0 3 | Time | C |
Egg Hawk | 3C77A0 | Sonic | Boss | 0002 | 0 2 | Time | B |
Egg Hawk | 3C77A2 | Sonic | Boss | 0001 | 0 1 | Time | A |
Egg Hawk | 3C77B4 | Dark | Boss | 0004 | 0 4 | Time | D |
Egg Hawk | 3C77B6 | Rose | Boss | 0003 | 0 3 | Time | C |
Egg Hawk | 3C77B8 | Rose | Boss | 0002 | 0 2 | Time | B |
Egg Hawk | 3C77BA | Rose | Boss | 0001 | 0 1 | Time | A |
Urban Team Battle | 3C77C0 | Sonic | Boss | 1E02 | 30 2 | Time | D |
Urban Team Battle | 3C77C2 | Sonic | Boss | 1E01 | 30 1 | Time | C |
Urban Team Battle | 3C77C4 | Sonic | Boss | 0001 | 0 1 | Time | B |
Urban Team Battle | 3C77C6 | Sonic | Boss | 1E00 | 30 | Time | A |
Robot Carnival | 3C77E4 | Sonic | Boss | 1E05 | 30 5 | Time | D |
Robot Carnival | 3C77E6 | Sonic | Boss | 1E04 | 30 4 | Time | C |
Robot Carnival | 3C77E8 | Sonic | Boss | 1E03 | 30 3 | Time | B |
Robot Carnival | 3C77EA | Sonic | Boss | 1E02 | 30 2 | Time | A |
Egg Albatross | 3C7808 | Sonic | Boss | 0005 | 0 5 | Time | D |
Egg Albatross | 3C780A | Sonic | Boss | 0004 | 0 4 | Time | C |
Egg Albatross | 3C780C | Sonic | Boss | 0003 | 0 3 | Time | B |
Egg Albatross | 3C780E | Sonic | Boss | 0002 | 0 2 | Time | A |
Swamp Team Battle | 3C782C | Sonic | Boss | 1E02 | 30 2 | Time | D |
Swamp Team Battle | 3C782E | Sonic | Boss | 1E01 | 30 1 | Time | C |
Swamp Team Battle | 3C7830 | Sonic | Boss | 0001 | 0 1 | Time | B |
Swamp Team Battle | 3C7832 | Sonic | Boss | 1E00 | 30 0 | Time | A |
Robot Storm | 3C7850 | Sonic | Boss | 0007 | 0 7 | Time | D |
Robot Storm | 3C7852 | Sonic | Boss | 0006 | 0 6 | Time | C |
Robot Storm | 3C7854 | Sonic | Boss | 0005 | 0 5 | Time | B |
Robot Storm | 3C7856 | Sonic | Boss | 0004 | 0 4 | Time | A |
Egg Emperor | 3C7874 | Sonic | Boss | 1E06 | 30 6 | Time | D |
Egg Emperor | 3C7876 | Sonic | Boss | 1E05 | 30 5 | Time | C |
Egg Emperor | 3C7878 | Sonic | Boss | 1E04 | 30 4 | Time | B |
Egg Emperor | 3C787A | Sonic | Boss | 1E03 | 30 3 | Time | A |
Metal Madness/Metal Overlord | 3C78BC | Sonic | Boss | 000A | 0 10 | Time | D |
Metal Madness/Metal Overlord | 3C78BE | Sonic | Boss | 0009 | 0 9 | Time | C |
Metal Madness/Metal Overlord | 3C78C0 | Sonic | Boss | 0008 | 0 8 | Time | B |
Metal Madness/Metal Overlord | 3C78C2 | Sonic | Boss | 0007 | 0 7 | Time | A |
Metal Madness/Metal Overlord | 3C78C4 | Dark | Boss | 000A | 0 10 | Time | D |
Metal Madness/Metal Overlord | 3C78C6 | Dark | Boss | 0009 | 0 9 | Time | C |
Metal Madness/Metal Overlord | 3C78C8 | Dark | Boss | 0008 | 0 8 | Time | B |
Metal Madness/Metal Overlord | 3C78CA | Dark | Boss | 0007 | 0 7 | Time | A |
Metal Madness/Metal Overlord | 3C78CC | Rose | Boss | 000A | 0 10 | Time | D |
Metal Madness/Metal Overlord | 3C78CE | Rose | Boss | 0009 | 0 9 | Time | C |
Metal Madness/Metal Overlord | 3C78D0 | Rose | Boss | 0008 | 0 8 | Time | B |
Metal Madness/Metal Overlord | 3C78D2 | Rose | Boss | 0007 | 0 7 | Time | A |
Metal Madness/Metal Overlord | 3C78D4 | Chaotix | Boss | 000A | 0 10 | Time | D |
Metal Madness/Metal Overlord | 3C78D6 | Chaotix | Boss | 0009 | 0 9 | Time | C |
Metal Madness/Metal Overlord | 3C78D8 | Chaotix | Boss | 0008 | 0 8 | Time | B |
Metal Madness/Metal Overlord | 3C78DA | Chaotix | Boss | 0007 | 0 7 | Time | A |
The score requirement multiplier is located at 0x35C45 and it's default value is 64. When modifying the multiplier, make sure you don't set it to high as it will make it impossible to obtain higher ranks for the specific missions.
Unlock Requirements
2 Player Modes
Starting at 0x3433C0, there are only seven bytes and a list of modes require the following amount of Emblems to unlock a certain mode.
Offset | Mode | Value (Hexadecimal) | Value (Decimal) |
---|---|---|---|
0x00 | Action Race | 00 | 0 |
0x01 | Battle | 14 | 20 |
0x02 | Special Stage | 28 | 40 |
0x03 | Ring Race | 3C | 60 |
0x04 | Bobsled Race | 50 | 80 |
0x05 | Quick Race | 64 | 100 |
0x06 | Expert Race | 78 | 120 |
Metal Sonic Boss Challenge
A list of codes check the completion percentage for each team in story mode in-order to unlock the battle challenge against the transformed Metal Sonic challenge via story mode.
Address | Required Percentage (Hex.) | Required Percentage (Dec.) | Team |
---|---|---|---|
5642D | 64 | 100 | Sonic |
56456 | 64 | 100 | Dark |
5647F | 64 | 100 | Rose |
564A8 | 64 | 100 | Chaotix |
As for the required chaos emeralds, the default required value is 07 and it's located at 0x564CF. You will also need to change the code so that any value higher than required will likely to unlock the challenge.
Address | Original Byte | Replace With |
---|---|---|
564D1 | 94 | 9D |
Note: The max required percentage is 100 (64 in hex) and for chaos emeralds, the maximum required value is 07. Any value beyond the maximum required value limit will reduce the chance of unlocking the last challenge on the mode.
Super Hard
The codes starting at 0x22F030 check if the player has all ranks that meet the requirements to unlock the Super Hard challenge. The following rank IDs exist in the game:
ID | Rank |
---|---|
00 | Not Cleared |
01 | E |
02 | D |
03 | C |
04 | B |
05 | A |
Before altering which rank ID the game wants for all emblems, you will need to paste write the replacement hex string to make the game unlock if it's on a specific rank or higher:
Address | Original Hex String | Replace With |
---|---|---|
22F030 | 0F BE 59 F4 3B DA 75 01 40 0F BE 19 3B DA 75 01 40 0F BE 59 0C 3B DA 75 01 40 0F BE 59 10 3B DA 75 01 40 0F BE 59 1C 3B DA 75 01 40 0F BE 59 20 3B DA 75 01 40 0F BE 59 2C 3B DA 75 01 40 0F BE 59 38 3B DA 75 01 40 83 C1 50 4E 75 B3 8D 8F 77 04 00 00 BE 07 00 00 00 0F BE 59 FC 3B DA 75 01 40 0F BE 19 3B DA 75 01 40 0F BE 59 04 3B DA 75 01 40 0F BE 59 08 3B DA 75 01 40 83 C1 10 4E 75 D7 0F BE 8F E3 04 00 00 3B CA 5E 5B 75 01 40 C3 | 0F BE 59 F4 3B DA 7C 01 40 0F BE 19 3B DA 7C 01 40 0F BE 59 0C 3B DA 7C 01 40 0F BE 59 10 3B DA 7C 01 40 0F BE 59 1C 3B DA 7C 01 40 0F BE 59 20 3B DA 7C 01 40 0F BE 59 2C 3B DA 7C 01 40 0F BE 59 38 3B DA 7C 01 40 83 C1 50 4E 75 B3 8D 8F 77 04 00 00 BE 07 00 00 00 0F BE 59 FC 3B DA 7C 01 40 0F BE 19 3B DA 7C 01 40 0F BE 59 04 3B DA 7C 01 40 0F BE 59 08 3B DA 7C 01 40 83 C1 10 4E 75 D7 0F BE 8F E3 04 00 00 3B CA 5E 5B 7C 01 40 C3 |
There are three codes that desire a specific rank which are located in the following addresses of the EXE:
Address | Default Rank ID |
---|---|
4E780 | 05 |
50429 | 05 |
5524D | 05 |
Screen Fading
A fading plane occupies the screen when transiting to an FMV or to the loading screen for the stage from the main menu.
Address | Fade Type | Default byte(s) | Type | Modes |
---|---|---|---|---|
5766 | Screen Transition | 74 | Byte | 74 = On EB = Off |
54943 | Screen Transition from Game Completion screens | 8A 86 A0 00 00 00 | Long | 8A 86 A0 00 00 00 = On B0 FF B2 FF B1 FF = Off (with customizable RGB color codes*) |
*After paste writing the code at 0x54943, the color values are on the following code bytes:
Code:
B0 FF B2 FF B1 FF
Offset | Color |
---|---|
0x01 | Red |
0x03 | Blue |
0x05 | Green |
Conditions
The fade speed and the state IDs can be found on the following addresses on the EXE for the game clear screens that popup after the credits.
Address (Speed) | Default Speed (Hex.) | Default Speed (Dec.) | Address (State) | Default State | State Type |
---|---|---|---|---|---|
54AA9 | 10 | 16 | 54AC7 | 07 | Clear Screen |
54AE9 | 10 | 16 | 54B05 | 02 | Main Menu |
Frame Rate for Split Screen
2 Player stages that use split screen reduces the frame rate to 30fps as one code increments the frame rate byte from the split screen mode state.
Address (EXE) | Address (RAM) | Parameter bytes | Notes |
---|---|---|---|
2D07 | 402D07 | 40 = On 90 = Off |
Changing the byte to 90 on that code will uncap the frame rate to 60fps on split screen instead of dropping the frame rate down. |
To make split screen use the frame rate according to the game configuration, edit the following byte array shown in the table below:
Address | Original Bytes | Replace With |
---|---|---|
2CFC | A1 80 0B A6 00 | A1 B0 AE 8C 00 |
Demo Gameplay
The PC version has this feature left out and instead only use the opening movies after doing nothing in the title screen, however it can be brought back by replacing the original byte array with 80 F9 06 0F 4D CB at 0x5698A.
Debug Mode
The debug mode is always hidden during gameplay, but it can be enabled by replacing the original bytes in the EXE with these in-order to display them.
Debug Type | Address (EXE) | Address (RAM) | Original Bytes | Replace With | Notes |
---|---|---|---|---|---|
General Debug | 21D35D 21D376 |
61D35D 61D376 |
89 15 48 0B A6 00 CC CC CC CC CC CC CC CC CC |
EB 17 90 90 90 90 C6 05 48 0B A6 00 00 EB E4 |
The default value for the second string below the first one to replace is 00, replace the default byte before "EB" to any other value to enable the debug interface. It will change the value for the player info which would say "1P Info" if the code string at 0x21D376 is C6 05 48 0B A6 00 01 EB E4. |
Player Abilities
Moveset Restrictions
Each player character has their own conditions on who is allowed to perform certain abilities based on the character IDs used for each team. A list of jumping addresses for each condition are located in these offsets of the EXE.
Address | Default RAM Jump Address | Character |
---|---|---|
1AF6FC | 63 F0 5A | Sonic |
1AF700 | EA F1 5A | Knuckles |
1AF704 | D8 F4 5A | Tails |
1AF708 | 7A F0 5A | Shadow |
1AF70C | EA F1 5A | Omega |
1AF710 | D8 F4 5A | Rouge |
1AF714 | 87 F0 5A | Amy |
1AF718 | EA F1 5A | Big |
1AF71C | D8 F4 5A | Cream |
1AF720 | 87 F0 5A | Vector |
1AF724 | EA F1 5A | Vector |
1AF728 | AE F4 5A | Charmy |
The following RAM jump addresses execute the following conditions to certain movesets when a button has been pressed.
RAM Address (Little Endian) | Formation Type | Conditions | Addresses to completely activate the technique for use with all characters | Technique(s) | Original Bytes | Replace With |
---|---|---|---|---|---|---|
63 F0 5A | Speed | Allow Light Dash and Light Speed Attack | 1A67C0 1A6830 |
Light Dash Light Speed Attack |
8A 88 BB 00 00 00 84 C9 74 8A 88 BB 00 00 00 |
90 90 90 90 90 90 90 90 EB EB 08 90 90 90 90 |
7A F0 5A | Speed | Allow Light Dash, but block Light Speed Attack | 1A67C0 | Light Dash | 8A 88 BB 00 00 00 84 C9 74 | 90 90 90 90 90 90 90 90 EB |
87 F0 5A | Speed | Block Light Dash and Light Speed Attack | None | N/A | N/A | N/A |
D8 F4 5A | Fly | Block Flower Sting | None | N/A | N/A | N/A |
AE F4 5A | Fly | Allow Flower Sting | Warp Flower Sting Sting Attack |
171E70 1A62F4 |
9F 4B |
A0 00 |
Tornado Jump Techniques
The techniques can be performed by the character the EXE desires for who can or cannot use it. These codes read what player ID it is and executes if it matches it and if it doesn't, the speed character will instead use regular tornado jumps as usual. These are the following codes that were discovered in the EXE.
Address | Default Character ID | Default User | Ability |
---|---|---|---|
1D40F7 | 09 | Espio | Leaf Swirl |
1D4256 | 06 | Amy | Tornado Hammer |
Note: Changing the values to these addresses to 0F or some other value will make all speed characters use their original tornado moves like Amy using her pink tornado and Espio using his original green tornado.
Triangle Jump Conditions
Sonic, Shadow, Amy, and Espio have certain restrictions for their triangle jump abilities which can either allow infinite time on the walls or block wall clinging. The conditions ar found in the following addresses:
Address | Default Character ID | Character | Condition | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1CFE38 | 09 | Espio | Disable limitations on walls | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1CFAEE | 06 | Amy | Disable Wall Cling | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1CFAEE | 06 | Shadow | Disable limitations on walls | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1CFAEE | 06 | Sonic | Disalble Wall Cling | {
If you wish to change the ID the code checks, these are the following IDs for speed characters that can be used in place of the original ID check bytes:
If you want all characters to stay on walls without falling off automatically after a few seconds, change the bytes at 0x1CFE39 from 0F 85 36 18 00 00 to 90 90 90 90 90 90. To enable triangle jump to be usable by all speed characters, change the value at 0x1CFAEE to 0F or any other value above this. Ring MechanismSlot MachinesRings are given depending on the symbols and symbol combinations. These are a list of ring worth values given to add or subtract rings from a specific symbol combination.
Ring Worth CodesRings can be added or subtracted by certain objects and enemies in the game such as the Magician robot.
Amount of Rings for Metal OverlordWhen Metal Overlord is loaded, it gives the default value of 50 rings which can be changed by going to the address provided in the box below.
SplinesSplines set path data for autoloops, rails and other path data. The arrays for each level are located in various different places in the EXE. What is known is that each level has a list of pointers. Each pointer points to a spline header, which is defined below. Each spline header points to its list of vertices. Header entry: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Point entry: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Pointer Locations
BobsledsBobsled splines are similar to the ones used for rails and loops. The pointers to the headers are very close to the pointers to the spline headers in all levels (Seaside Hill, Bullet Station and Mystic Mansion). There are two headers for each bobsled, one for the left and one for the right side of the road (so there's 4 headers in Seaside Hill, 2 in Bullet Station and 8 in Mystic Mansion). Header entries are very similar, but points are a bit different. Header entry: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Point entry: 00 00 00 00 00 00 00 00 00 00 00 00
Seaside Hill Bobsled ExclusionThe bobsled that usually loads in Seaside Hill is removed if the EXE detects that Team Chaotix is used in the stage. The ID is located at 0x9E49C and the default value to that is 03. Altering this to any one of the team IDs will make the bobsled disappear from the level after the code identifies which team is used.
Any other value aside from these four IDs may load the bobsled for all teams in the level. Egg Pawn Roulette ModeThe casino versions of the egg pawns load depending on what level is in use. Note that the IDs in this code section are one value less than the IDs in the EXE/RAM. The following codes check the stage ID for Casino levels:
Metal Characters in 1P modeThe metal characters are only usable in multiplayer mode, but it can be usable in single player by changing the byte at 0x1496 from 75 to EB. After selecting a level or something, press the buttons specified here before the screen changes and then this will load instead of the normal skins. Note that the skins are reset to normal after destroying the core with Team Rose. Warning: The game will crash if you do this on Team Super Sonic. Per Geometry ID Sky Visibility TogglingThe visibility switching triggers if in a certain place of the level including in-door areas (which removes the sky and/or clouds). For the clouds on Grand Metropolis and Power Plant, the following IDs are located in the following addresses:
In Power Plant, the 4 byte entry for the sky starts at 0x3E6B0C and the clouds start at 0x3E6B20. Tutorial Mode Team DefaultsTeam Sonic is the default team used for the tutorial mode, but using another team for the tutorial mode requires the following codes to be replaced by the values.
Once you have replaced the bytes, the C7 05 20 69 8D 00 00 00 00 00 EB 99
Replace the 6th byte with the following IDs to use for the tutorial stage.
Particle Effect Events (Incomplete)Particles emit depending on the object events that occur during gameplay. The codes assign a particle from the _ptcl.bin files and put it in effect like Tornado Hammer from Amy’s tornado and Leaf Swirl from Epsio’s tornado sparkles from a number of objects.
List of particle IDs:
Warp EffectsWhen an object triggers a specific warp effect for the screen, it will permeate for a specific amount of time and then recede. A list of offset pointers are available in the EXE for each code with the effects:
A list of objects have codes that use the pointers to assign a warp effect to use for the screen if triggered. However, there are only a few objects with codes that bring up warp effects.
A list of IDs will bring up an effect for the screen when they are in use.
Each code after the one that stores the ID has states where the warp effect can either use custom alpha blending or not. The parameters provide the effects after the warp functions are in use:
A list of parameters are located in the following addresses:
There are certain conditions for each warp effect ID given from their offset pointers which give the following effects after checking the ID:
Examples:
The speed for the warp effects make the engulfing and receding for the warp effects fast or slower depending on how high the float values are. These are located in the following addresses
Field of viewThe EXE provides perspective views using FOV for each type of camera in every mode. This list shows where the FOV codes are located in.
Aspect RatioThe game's camera field of view provides an aspect ratio view that is based on the game's resolution. Having the resolution changed just stretches the game instead of expanding the FOV. To make the game support other aspect ratios aside from 4:3, do the following steps to add the support for 16:9 widescreen and so on when you're playing the game at another resolution.
Next, paste write the following injectable codes at these addresses:
After that, test the EXE to see if it is playable and the screen does not end up black. If you decide to play the game in a different aspect ratio, change one of the resolutions using the Resolution Editor feature in HeroesTweaker and select the resolution option using the Launcher. You can change the float condition to trigger vertical FOV expansion if it exceeds the horizontal cropping float value by changing the float value in this string: D9 05 D4 78 42 00 DB 05 3C 79 A7 00 DA 35 40 79 A7 00 DE F9 D9 1D F0 EF BC 00 BA 00 00 40 3F 8B 35 F0 EF BC 00 89 35 00 F0 BC 00 3B 15 F0 EF BC 00 7F 7D 89 15 C0 EF BC 00 C7 05 C4 EF BC 00 00 00 40 3F F3 0F 10 05 C0 EF BC 00 F3 0F 10 0D C4 EF BC 00 F3 0F 59 C1 F3 0F 11 05 08 F0 BC 00 D9 05 08 F0 BC 00 DB 05 40 79 A7 00 DA 35 3C 79 A7 00 DE F9 D9 1D F4 EF BC 00 81 3D 00 F0 BC 00 00 00 80 3F 7C 40 D9 05 58 4E 74 00 DB 05 40 79 A7 00 DA 35 3C 79 A7 00 DE F9 D9 1D 04 F0 BC 00 C7 05 00 F0 BC 00 00 00 80 3F 89 15 F0 EF BC 00 C3 C7 05 F4 EF BC 00 00 00 80 3F C7 05 04 F0 BC 00 00 00 80 3F C3 C7 05 04 F0 BC 00 00 00 80 3F 89 15 F0 EF BC 00 C3 DB 05 3C 79 A7 00 D8 0D 00 F0 BC 00 DB 15 F0 7F BC 00 8B 1D F0 7F BC 00 E9 55 7B F2 FF DB 05 40 79 A7 00 D8 35 04 F0 BC 00 DB 15 F4 7F BC 00 8B 2D F4 7F BC 00 E9 3E 7B F2 FF 90
To get the aspect ratio crop limit float value, use Digital Rebellion's pixel aspect ratio calculator. On there, type the width and height in the source resolution (in 4:3 resolution like 1280x960 and the desired target resolution matching the same width or height (like 1280x720 or 1706x960) to get the pixel aspect float value. Next, convert the calculated float value to a 4 byte hex value and convert it to little endian (example: 0.75 --> 3F400000 --> 0000403F) and finally, paste write it to the code. Another way of doing it is using Digital Rebellion's aspect ratio calculator to obtain the float number from the specified resolution then dividing the aspect ratio float value by 1.3333333333333333 (for example: 1.3333333333333333 ÷ 1.7777777777778 = 0.74999999999998) and converting it to a little endian 4 byte hex value. Here are some examples of width cropping lock float values: When the EXE is launched in a resolution that goes above the locked width, it will extend the vertical aspect ratio on taller resolutions like say if you launch the game at 1280x960 and the cropping limit is set at 00 00 40 3F (16:9), it will result an open matte 4:3 display when running the game. Notes: If the EXE already has the codes to provide widescreen support such as Jackfuste's fixed exes, there won't be any need to inject codes to add support for different aspect ratios based on the used resolution. It is also important that the HUD and the menu content is visible when running on narrow aspect ratio display. On gameplay, certain resolutions (even without the aspect ratio hack enabled) will crash the game on windowed mode, so full-screen mode is recommended for wider or taller resolution displays such as 5760x1080 and 853x1920. Story Scene/Victory FOVThese cut-scenes have codes that multiply the float values to change the camera FOV on in-game scenes and victory screens. To alter these, you will need to paste-write your own float value somewhere in the exe where there's more space and not used by it like at 0x31CFF8 for the horizontal FOV and 0x31CFFC for the vertical FOV. Before doing so, you will need to convert the desired float value from big endian to little endian on these addresses. As for the address (executed by the codes) to load the float value you placed in the EXE, you will need to add the EXE address with the value of 400000 (example: 31CFF8 + 400000 = 71CFF8). After that, convert the address array to little endian and then replace the address the code uses with the one where you place the float value from in little endian RAM address. The following addresses are the codes that load the FOV float values from.
Note: Don't forget to preview it when the game is running to ensure it's working properly and you're happy with the results you've got after altering the field of vision for the cut-scene camera. The quickest way to preview the changes is to pick a stage on the story mode selection screen that has the cut-scenes like Rail Canyon for example. EXE defined particle settingsAlmost all particles are stored in the *_ptcl.bin, but a few particle settings for other particles are only in the EXE where they are stored beyond 0x4DB60C. Each array entry is 0x18 bytes long as it follows this:
The alpha blend types used for the particles such as the ones for the Hint Ring are logical bytes. A list of blend types are defined by the source code:
The following particle setting entries for each EXE generated particles used in the EXE are stored in the following addresses:
Game Over stateIf the mission fails with zero lives, it will trigger a state where they head back to the menu. The state ID is located at 0x4B85 and the default value is 03. These are a list of state IDs that are triggered when it's Game Over:
Super Hard ChallengeDefault TeamsThe team that is always loaded on Super Hard is Team Sonic, but it can be rearranged thanks to the guide of the said subject on wikiHow. To achieve whatever team you want to use for the mode, replace the following bytes with these as shown on the table below:
After doing that, there should be one byte after B3 that can be replaceable with a team ID at 0x502D9:
The default value is 00 which loads Team Sonic by default. Replace the second byte with one of the IDs below to use a different team for Super Hard:
Notes: There are certain parts of each level that requires Light Dash abilities for both "Espio" and "Amy" and Triangle Jump for "Amy" to be enabled and used before using teams "Rose" and "Chaotix". Refer to this hacking guide on how to enable these movesets for the two characters in wikiHow if needed. As for Team Chaotix, some levels have tasks that are not possible to achieve in-order to beat the level. It will use the same object layout as always regardless of any team loaded and they will use their own start and end positions the same way as the regular modes. Mode Level listA list of level ID numbers that are loaded when using Super Hard mode starts at 0x34F1F4 and ends at 0x34F22C. Each array of the section is in 4 Bytes and the first byte of it is the level ID. When used, the game will load the levels listed in the section of the EXE for the mode.
A list of default levels on Super Hard are in the following offsets set in the exe. Refer to the section "EXE and RAM" in the List of Levels for a list of level ID numbers you want to replace the default hex value with. Remember that you must convert the level ID from a decimal to a hexadecimal byte to apply the level you want the game to use when it reads the level ID on the list. Also, only 1 Player levels will work after loading, 2 Player stage IDs will crash the game.
Material FunctionsColorsThe EXE provides color effects for certain objects such as the trail and tornado effects for each player. Color RGB Entry:
Custom RGB color codes can be generated using color wheel websites like Colblinder and Colorizer. If you're happy with the color you want to use for the effects, paste write it on the offset where you found the color code at. Barrier Hue Cycle ColorsThe barrier effect changes color using the color animation codes provided in the EXE. The barrier has nine 4 byte color hex codes (which they end with after 3 bytes of color values) stored in the EXE starting at 0x4DD798 to provide a hue cycle effect for the object.
Character EffectsThis list shows the codes to the character effects that were found in the EXE.
Debug DataThe EXE provides colors to a specific interface while debugging the game.
Team Blast BackgroundsThe entry starts at 0x4DDD48 with 4 byte color hex that end with FF. Each team blast background sides are split into four RGB hex entries for each side as it follows:
The following RGB color entries to each four side splits for each team blast backgrounds start at the following addresses
Linked RGB ColorsOpcodes
FloatsSome objects use floating values that are tied with the same address where the RGB float is located at. To edit them separately, you must set an address on the opcode that uses it and place a floating code somewhere to where they will load a separate float value.
OtherColors that are stored as opcodes have little endian RGBA values which would be "BGRA" for example. Some color codes are also in float as well. A list of codes were found in the EXE:
Material OpcodesA number of code sections contain additional material/graphic codes that are rendered via Renderware engine that provides special effects to an object such as Espio's invisibility and Thundershoot electricity effects. Regular Material function: 6A 00 6A 00
4 Byte Material function: 68 00000000
A list of material types are implemented in the EXE.
Known OffsetsA list shows offsets for special material effects that were discovered in the EXE. More codes that have been found and not already on the list will be added.
Material FlagsSomewhat like BSPs with identifiers stored in .ONE files, objects have their own material flags stored in the code. Objects that use material flags provide a rendering effect through the main rendering code sections when applied to an object after it appears. Examples of objects that use material flags are Energy paths and HEXAeco Signboards. Note that not all objects use material flags separately for each model loaded in the level. Unlike the opcodes that provide the graphic appearance for the object in their code sections, the modified flags require moving away from the object until it disappears or by quiting the level and returning in-order to take effect. Flag offset pointer entry: 00 72 00 00
Flag entry: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Examples: D0 F8 76 00 28 3D A2 00 14 00 00 00 00 00 00 00 A list of identifier flags for objects are the following pointer and regular bytes:
Individual flag ids:
Material Flag PropertiesStarting at 0x3BAB18, there are 12 bytes on each entry. There are 24 material flag sets available in the EXE that provide a specific material to an object or level geometry and the entry ends at 0x3BAC38
The parameters are logical and there are three valid addresses that should be used in-order for the game to work correctly when altering the type of material. Here are a list of conditions for the parameters:
These are a list of pointers that are available for each flag section entry:
Object Flag OffsetsA list below shows offsets found so far in the EXE for certain parts of the codes that apply material flags to objects. In-game
Startup
Indirect ShadersWhile in game, the shaders are enabled for models that use indirect texturing during the loading process for the levels. The indirect state can be found at 0x2B955C and the default ID is 01. When changed, it will trigger the effects for the indirect animations:
Object Crash Material PropertiesObjects that are used as a crashing object using a 3 such as a tree branch (being broken by an Alligator in Lost Jungle) are given materials before they appear on the 3D space. A list of material options are available in the game for several objects:
As for the alpha testing material to be used if needed, you will need to do the following hex replacements to add that option to the EXE:
When that is done, you can set the parameter value at 0x233A87 to anything like 04 or something. Note that values 02, 01, 00 and FF are not recommended as it will spawn a duplicate model with another material given, so the recommended range for alpha test rendering is from 03-7F.
Special Stage Object Model SettingsA list of models loaded for special stages has a number of different entries in the EXE. The section begins at 0x495980 with data that reads the blend type assigned to the object. Blend Type:
Entry Settings ListList of object entries are located in the addresses in the EXE.
Chaos Emerald blend optionsFor the chaos emeralds that appear on Emerald Challenges, it requires the code in 0x12FF56 to be changed in-order to be customized. To do that, replace the bytes with these ones:
After that, the blend setting will be located at 0x12FF5C which can be set before the level finishes loading. Code: Here are a list of blend options for the chaos emeralds.
Chao Hot Air Balloon blend paramsLike with Chaos Emeralds, they use parameters given at the start of each bonus level. However, it has an address linked with the emerald's blend parameters located at 0x1311CB You will need to separate it from the Chaos Emerald to avoid making them use the same parameter.
The parameter ID will be located at 0x12FE17 and they use the same blend params as the emeralds except that 00 is a normal (Z-buffered) material, 02 is nothing and 03 is a regular alpha material. Tube Step EffectsThere are no codes anywhere in the EXE that provide the ID for the tube stepping effect, but there is a way to customize the blending parameters for it. To change the blend mode for that, change the bytes to these ones.
After that, the last byte of the code before the other will be located at 0x12D48F and the following params provide the blend options on that byte of the code:
Special Stage Particles (Incomplete)List of particle blend IDs begins at 0x494AB0 and ends at 0x494AE0. Each section entry is 0x10 bytes with one byte each.
Blend ModesThe following IDs define the blend factors for these particle effects.
To unlock certain blend options for parameter IDs 02 and 04, change the following codes to these:
|