Actions

SCHG

Sonic Heroes/DOL Editing

From Sonic Retro

SCHG: Sonic Heroes
Main Article
Mechanic Editing

DOL Editing
EXE Editing
Music Pointers
Object Parameter Data
Relocatable Editing (PC)
File Offsets

Model Editing
Collision Format
Model Format
Level Editing

Camera Editing
Event Editing
ID list
Indirect Editing
Light Editing
Level List
Object Editing
Object Porting
Spline Editing
Texture Animation Editing
Visibility Editing

Particle Editing
Particle Editing
Sound Editing
Music List

Sound Editing
Voices

SCHG How-Tos

Custom Object Material Effect Tutorial
Level Editing Tutorial


The main DOL of the GC game is Start.dol. This executable contains codes in different offsets for each region and version released in a variety of countries.

Aspect Ratio (In-complete)

As with the GameCube version of the game, it's default aspect is at 4:3 for most standard TVs. It can be tweaked by inseting codes in a specific address to read the specified aspect ratio float values and use for modern TV screens in their specific format such as with 16:9 and 21:9.

Injection Process

NTSC-U

Address Injectable Codes Code Injection Length
4D8 81 C2 A7 28 91 C2 00 00 C2 22 00 00 EC 11 00 32 D0 03 00 04 48 1A 92 74 81 C2 A7 2C 91 C2 00 00 C2 22 00 00 EC 11 00 32 D0 03 00 0C 48 1A 92 64 0x30
508 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 3D E0 80 29 3D C0 3F 80 91 CF 06 9C 91 CF 06 A8 91 CF 06 BC 3D CE 80 00 91 CF 06 94 80 01 00 74 4E 80 00 20 0x4C
554 3D E0 80 29 3D C0 3F 80 91 CF 06 9C 91 CF 06 A8 91 CF 06 BC 3D CE 80 00 91 CF 06 94 38 60 00 01 4E 80 00 20 0x24
5C0 3D E0 80 29 3D C0 3F 80 91 CF 06 9C 91 CF 06 A8 91 CF 06 BC 3D CE 80 00 91 CF 06 94 38 60 00 0A 4E 80 00 20 0x24
5E4 3D E0 80 29 3D C0 3F 80 91 CF 06 9C 91 CF 06 A8 91 CF 06 BC 3D CE 80 00 91 CF 06 94 3B 9C 00 04 4E 80 00 20 0x24
608 3D E0 80 29 3D C0 3F 80 91 CF 06 9C 91 CF 06 A8 91 CF 06 BC 3D CE 80 00 91 CF 06 94 E3 E1 00 58 4E 80 00 20 0x24
62C 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 4E 80 00 20 0x24
654 3D E0 80 29 3D C0 3F 80 91 CF 06 9C 91 CF 06 A8 91 CF 06 BC 3D CE 80 00 91 CF 06 94 80 01 01 24 4E 80 00 20 0x24
6C0 3D E0 80 29 3D C0 3F 80 91 CF 06 9C 91 CF 06 A8 91 CF 06 BC 3D CE 80 00 91 CF 06 94 80 01 01 14 4E 80 00 20 0x24
6E4 3D E0 80 29 3D C0 3F 80 91 CF 06 9C 91 CF 06 A8 91 CF 06 BC 3D CE 80 00 91 CF 06 94 80 01 00 14 4E 80 00 20 0x24
708 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 7F E3 FB 78 4E 80 00 20 0x28
730 3D E0 80 29 3D C0 3F 80 91 CF 06 9C 91 CF 06 A8 91 CF 06 BC 3D CE 80 00 91 CF 06 94 80 81 00 20 4E 80 00 20 0x24
754 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 54 05 10 3A 4E 80 00 20 0x28
7C0 3D C0 3F 80 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
7E8 3D E0 80 29 3D C0 3F 80 91 CF 06 9C 91 CF 06 A8 91 CF 06 BC 3D CE 80 00 91 CF 06 94 38 60 00 0C 4E 80 00 20 0x24

Overwriting Codes

In-order to make the codes jump to your injected codes, you will need to replace the bytes with the following to become effective.

Address (NTSC-U) Original Bytes Replace With
42964 38 A0 00 04 4B FB 18 FD
4296C 38 60 00 0C 4B FB 19 1D
98070 80 01 00 14 4B F5 C1 15
C60D8 38 A0 00 04 4B F2 DE D1
C60E0 38 60 00 01 4B F2 DF 15
C62B0 38 A0 00 04 4B F2 DC F9
C62B8 38 60 00 01 4B F2 DD 3D
105DC8 38 A0 00 04 4B EE E1 E1
105DD0 E3 E1 00 58 4B EE E2 D9
110EEC 3C 60 80 29 4B EE 31 E1
111F2C 80 01 01 24 4B EE 21 C9
119B60 38 A0 00 04 4B ED A4 49
119B68 3B 9C 00 04 4B ED A5 1D
11E78C 38 A0 00 04 4B ED 58 1D
11E794 38 60 00 0A 4B ED 58 CD
11FBD4 38 A0 00 04 4B ED 43 D5
11FBDC 80 01 00 74 4B ED 43 F5
1278DC 38 A0 00 04 4B EC C6 CD
127938 80 01 01 14 4B EC C8 29
1687E0 54 05 10 3A 4B E8 BA 15
1687E8 80 81 00 20 4B E8 B9 E9
19D1FC D0 03 00 04 4B E5 6D 7C
19D204 D0 03 00 0C 4B E5 6D 8C

Required Relocatable Editing

Some relocatables require code editing in-order to modify their orthographic scaling to match the game's aspect ratio.

The following relocatables require code modification to set the aspect ratio used by the game.

NTSC-U
Static Overwrite
Relocatable Address Original Bytes Replace With
advertiseD.rel 14688
14690
38 A0 00 04
80 01 00 74
4B 59 80 81
4B 59 80 A1
autosaveD.rel 2928
2930
33CC
33D4
38 A0 00 04
7F C3 F3 78
38 A0 00 04
80 01 00 74
48 00 20 99
48 00 20 B9
48 00 15 F5
48 00 16 9D
stage00D.rel 4C8DC 38 A0 00 04 48 07 6A C5
stage01D.rel 4AB14 38 A0 00 04 48 08 E9 CD
stage03D.rel 4AB1C 38 A0 00 04 48 08 52 75
stage05D.rel 4AB14 38 A0 00 04 48 08 9D CD
stage07D.rel 4AB1C 38 A0 00 04 48 0A E2 55
stage09D.rel 4AB14 38 A0 00 04 48 08 E2 AD
stage11D.rel 4AB14 38 A0 00 04 48 09 5D 0D
stage13D.rel 4AAFC 38 A0 00 04 48 09 7E 55
stage26D.rel 436E4 38 A0 00 04 48 07 58 4D
stage27D.rel 436DC 38 A0 00 04 48 04 3F 75
stage28D.rel 436DC 38 A0 00 04 48 04 7C 05
stage31D.rel 4AB14 38 A0 00 04 48 03 4F 8D
stage32D.rel 4AB14 38 A0 00 04 48 03 4F 8D
stage33D.rel 4AB14 38 A0 00 04 48 03 7C ED
stage40D.rel 88E24
88EE8
80 01 00 14
80 01 00 14
48 01 60 E5
48 01 5F F9
Injection
Relocatable Address Injectable Bytes Length
autosaveD.rel 49C0
49E8
4A90
81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20
3D E0 80 29 3D C0 3F 80 91 CF 06 9C 91 CF 06 A8 91 CF 06 BC 3D CE 80 00 91 CF 06 94 7F C3 F3 78 4E 80 00 20
3D E0 80 29 3D C0 3F 80 91 CF 06 9C 91 CF 06 A8 91 CF 06 BC 3D CE 80 00 91 CF 06 94 80 01 00 74 4E 80 00 20
0x28
0x24
0x24
stage00D.rel C33A0 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
stage01D.rel D94E0 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
stage03D.rel CFD90 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
stage05D.rel D48E0 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
stage07D.rel F8D70 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
stage09D.rel D8DC0 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
stage11D.rel E0820 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
stage13D.rel E2950 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
stage26D.rel B8F30 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
stage27D.rel 87650 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
stage28D.rel 8B2E0 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
stage31D.rel 7FAA0 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
stage32D.rel 7FAA0 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
stage33D.rel 82800 81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 38 A0 00 04 4E 80 00 20 0x28
stage40D.rel 9EEE0
9EF08
81 C2 A7 28 3D E0 80 29 91 CF 06 A8 3D CE 80 00 91 CF 06 94 81 C2 A7 2C 91 CF 06 BC 91 CF 06 9C 80 01 00 14 4E 80 00 20
3D E0 80 29 3D C0 3F 80 91 CF 06 9C 91 CF 06 A8 91 CF 06 BC 3D CE 80 00 91 CF 06 94 80 01 00 14 4E 80 00 20
0x28
0x24

Final code writing

When in use, replace the zeros in the following addresses with your aspect float value.

Address (NTSC-U) Aspect FOV Direction
29C5E8 Horizontal
29C5EC Vertical

The default float value is 1 (3F800000). To get the float value for the horizontal aspect, use a calculator to divide the width by the height (example: 1920 ÷ 1080 = 1.777777777777778), then get the original aspect by dividing a 4:3 resolution (example: 640 ÷ 480 = 1.333333333333333) and divide the original aspect float with yours (example: 1.333333333333333 ÷ 1.777777777777778 = 0.75) and then convert it to a big endian hex value and paste write it on the address before the vertical FOV. As for the vertical FOV, do the same thing but multiply the horizontal aspect ratio with 0.75 to get the vertical FOV multiplier, then multiply it again with multiplier you got before converting to a hex value.

Examples

Aspect (X) Aspect (Y) Ratio
3F800000 3F400000 1:1 (Vertical increase from 4:3)
3F400000 3F100000 1:1 (Vertical increase from 16:9)
3F400000 3F400000 4:3 (Vertical increase from 16:9)
3F78FF39 3F800000 1.37:1
3F400000 3f456666 1.37:1 (Vertical increase from 16:9)
3F555555 3F800000 16:10
3F400000 3F555555 16:10 (Vertical increase from 16:9)
3F400000 3F800000 16:9
3F388127 3F800000 1.85:1
3F100000 3F800000 21:9


Optional FOV

If you want to adjust the field of view on your screen along with the orthographic elements without decreasing the aspect ratio float codes to achieve higher FOV, you may do so by using one of the code replacements.

Injection

Address (NTSC-U) Injectable Codes Length
80C 3C 60 80 29 81 C2 A8 D0 81 E2 A8 D4 7C 0E 78 00 41 82 00 24 C2 22 A7 28 C2 42 A7 2C C2 62 A8 D0 EE 31 04 F3 EE 52 04 F3 D2 22 A7 28 D2 42 A7 2C 91 C2 A8 D4 48 1A 8F 14 0x38
844 38 81 00 08 81 C2 A8 D0 81 E2 A8 D4 7C 0E 78 00 41 82 00 24 C2 22 A7 28 C2 42 A7 2C C2 62 A8 D0 EE 31 04 F3 EE 52 04 F3 D2 22 A7 28 D2 42 A7 2C 91 C2 A8 D4 4E 80 00 20 0x38

Static Overwrite

Address (NTSC-U) Original Bytes Replace With
19D1F0 3C 60 80 29 4B E5 70 BC
C62AC 38 81 00 08 4B F2 E0 39

Float placement

Address (NTSC-U) Default Multiplier Hex
29C790 3F800000

Note: This should be changed before booting up the game.

Colors

In each GC executable contains some colors for certain effects like tornadoes and trail effects.

Color RGB Entry:
00 00 00 00

Offset Type Description
0x00 Byte Red
0x01 Byte Green
0x02 Byte Blue
0x03 Byte Alpha

Character Effect Colors

The entries start at the following addresses.

Address (NTSC-U) Address (PAL) Address (NTSC-J) Effect
24A378 24A958 24A458 Aura Balls for Speed Characters
236C5C 2371FC 236D3C Aura Balls for Power Characters
236D10 2372B0 236DF0 Aura Balls for Fly Characters

Frame Rates

The game sets the frame rate based on what the code tells the game to refresh the frames at while rendering.

The following frame rate IDs are available in this port of the game:

ID Frames Per Second
00 60
01 30
02 30 (2x Speed)
03 30 (3x Speed)

Addresses

There are some addresses that set a frame rate for single and multiplayer modes.

Address (NTSC-U) Default Value Type
B6C7 01 Multiplayer Frame Rate

Material Opcodes

A 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.
Function entry:

RenderWare Material function:
38 60 00 00 38 80 00 00

Offset Type Description
0x04 Byte Material type
0x08 Byte Material value

See the EXE editing page for function parameter details.

Nintendo System Material function:
38 60 00 00 38 80 00 00 38 A0 00 00 38 c0 00 00

Offset Type Description
0x04, 0x08, 0x0C and 0x10 Byte Material type

Offsets

A list shows offsets for special material effects that were discovered in the DOL. More codes that have been found and not already on the list will be added.

NTSC-U

Addresses (Final) Materials Default Parameter Values Targeting Object Notes
E357
E363
E36F
E37B
E3BB
E3C7
Z-testing
Z-writing
Fog Enabling
Culling
Source Blend
Destination Blend
00
00
00
01
02
02
Warp Effects
E39F
E3AB
Source Blend
Destination Blend
02
06
Teleporter Switch Effect Blend Condition

Material Flags

These are the following flags in the DOL files.

NTSC-U

Addresses (Final) Models Default byte values Flag Type(s) Notes
2D663 Character Models 58 72 Pointer
2D68F Charmy's Wings (In-game) A4 72 Pointer
2D69F Character Flying Parts 58 72 Pointer
FD433 Barrier A0 72 Pointer
FE02F Homing Attack Ring Effects A0 72 Pointer
FE827 Quick Ascent Ring Effects A0 72 Pointer

Start/Ending Positions

A list of single player positions start in these addresses for each GameCube release of the game:

Address (E3 Beta) Address (MKDD Bonus Disc) Address (NTSC-U, Beta 10.8) Address (NTSC-U, Beta 11.18) Address (NTSC-U) Address (PAL) Address (NTSC-J)
1B410F Not Available on .dol, but can be located at 0x3386F3 in tgc. 23F00F 24C877 24CEB3 24D493 24CF93

Each level array has the first 4 bytes setting the level number at the first byte and five 0x1C entries for the four teams and Super Hard (although the Super Hard entry seems to be ignored, it uses each team's position entries as usual instead). 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