Ok, first and foremost, you need an .iso (NTSC gamecube version) and you will need Dolphin emulator.
P.S. I'm bad at making tutorials.
How to edit?[]
You will need to download a Hex editor. I use HxD. Open up the .iso file via HxD. You'll see numbers and ABCDEF letters representing binary values. On the left side you'll see an offset, which is kind of like jumping to a certain line on a text document. This blog will tell you what offset to look for. (press Ctrl+G to jump to an offset using HxD)
Base Offsets in .iso[]
Add 0x240 offset per gun (ie.) 3266F0+240 = 0x3266F0, and 0x326930+0x240 would be 0x326B70 as seen below.
0x3266F0 silenced pistol
0x326930 silenced luger
0x326B70 luger
0x326DB0 garrett revolver
0x326FF0 12 guage
0x327230 minigun
0x327470 sniper
0x3276B0 vintage
0x3278F0 flamethrower
0x327B30 extinguisher
0x327D70 S47
0x327FB0 electrotool
0x3281F0 scifi handgun
0x328430 rocket launcher
0x328670 homing launcher
0x3288B0 laser gun
0x328AF0 plasma auto
0x328D30 grenade launcher
0x328F70 Unknown (starts with 24 shots)
0x3291B0 proximity
0x3293F0 remote
0x329630 timed
0x329870 TNT
0x329AB0 Tommy Gun
0x329CF0 SBP90
0x329F30 Shotgun
0x32A170 Brick
0x32A3B0 Turret (training ground/ice station)
0x32A5F0 UFO Green plasma turret
0x32A830 Robot Factory Barrel Turret
0x32AA70 Siberian Chopper
0x32ACB0 Robot Autogun?
0x32AEF0 Sewer Zombie ranged attack
0x32B130 Cropolite Beams
0x32B370 Camera
0x32B5B0 ???
0x32B7F0 Crossbow
0x32BA30 Gunpowder
0x32BC70 Autogun
0x32BEB0 Robot Factory Security Laser
0x32C0F0 Planet X Alien Laser Gun
0x32C330 Space Station Turret (one used to kill the ships)
0x32C570 Reaper Splitter
0x32C7B0 Drone Splitter
0x32C9F0 Some gun with plasma sound and bullets (beta scifi handgun?)
0x32CC30 ???
0x32CE70 ???
Editing the Weapon's stats[]
So you went to one of the offsets, let's say you went to 0x3266F0 (silenced pistol). You should see "000003D8" followed by "000003D9 00000041 00000008" at that offset. Now within the 0x240 bytes of data per gun, I've documented SOME of them. Feel free to discover the rest.
- Example: So using the silenced pistol offset of 0x3266F0 we want to edit the Clip Size to 15. We see an offset of 0014, so we add 0x3266F0+0x14 in a hex calculator. which equals 0x326704. So we edit the value at 0x326704 which is 0x00000008 to the value of 0x0000000F.
- Example: I want to edit projectile fired of the minigun to reaper splitter lightning. Go to offset 0x327230 and add 0x68, which equals 0x327298. The value should be 0x00000001 which is bullets and change it to 0x00000026.
- Example: Some values are floating points, which represent decimal numbers such as 1.5. Let's edit Silenced Pistol weapon spread at 0x326770 which has the value 0x3C23D70A which is equal to 0.01. Using a floating point converter https://www.h-schmidt.net/FloatConverter/IEEE754.html you can input a number and get the floating point representation. Let's change the number to 0.50, which is 3f000000, which will make the gun REALLY INACCURATE.
0000 - Model #1
0004 - Also Model? (seems to be +1 greater than Model #1; if model #1 is 3d5, then this is 3d6)
0008 - Bit flags (binary) 0000 0000 0000 (use windows programmer calculator or any binary-hex converter)
bit # (right most)
- 1 Holds as a handgun (when viewing another character with this gun)
- 2 2 and 3 seem to always be used in tandem with 2-handed weapons (probably for each hand holding gun)
- 3
- 4
- 5
- 6 No sway while aiming (like snipers)
- 7 Stealthy? (silenced weapons and snipers, probably alerts less)
- 8 Reload after every shot (Throwing weapons, doesn't matter if gun has a clip size)
- 9
- 10 lasergun/minigun logic (if 0x6c is 1 or 0, this makes the gun fire super fast with trigger unheld) idk how to implement it yet
- 11 S47 and plasma auto have this (changes how AI uses alternate fire; with this on they dont alt-fire randomly, only at the start of engaging)
- 12
000C -
0010 - Ammo type (any gun with the same number shares ammo) ie. sniper/vintage, shotgun/tactical 12-guage. Also determines max ammo.
0014 - Clip Size (1 = no clip)
0018 -
001C -
0020 - Ammo amount on Pickup (doesnt change story mode specific pick ups that yield less than usual amounts)
0024 - Secondary Ammo amount on pickup (# of plasma grenades for example)
0028 - Delay after shooting before being able to reload
002C - Sound ID on pickup (scifi handgun sound is 1d2)
0030 - Autoaim Sensitivity (gun tilts towards targets)
0034 - Autoaim (doesn't move gun but still improves aim, laser gun and shotguns have this for instance)
0038 - Gun X offset (setting to zero makes gun point straight)
003C - Y offset
0040 - Z offset
0044 -
0048 -
004C -
0050 - Crosshair Graphic ID
0054 - Initial Zoom (how far zoomed in your are when you first aim)
0058 - Minimum Zoom (60.0 is normal)
005C - Maximum Zoom (lower number means stronger zoom)
0060 - Aiming Type (0=accurate while aim, 1=ditto, 2=doesn't make accurate (think shotguns))
0064 - Projectile ID (crashes in storymode if graphic isn't loaded, with few exceptions)
0068 - Projectiles Fired per 'shot'
006C - Minigun uses this
0070 - Rate of Fire (frames, semi-automatic)
0074 - Rate of Fire (frames, held fire)
0078 - Ricochet chance (can go over 1.0)
007C - Projectile Speed
0080 - Shot spread
0084 - Ammo used per shot (first shot before letting go of the trigger)
0088 - Ammo used per shot (subsequent shots)
008C -
0090 -
0094 -
0098 - Sound ID (first shot)
009C - Sound ID (held)
00A0 -
00A4 - ??? Seems to always be 232
00A8 - ??? ditto
00AC -
00B0 -
00B4 -
00B8 - Recoil Parameters
00BC -
00C0 -
00C4 -
00C8 - Damage ID
00CC - Recoil Parameters
00D0 -
00D4 -
00D8 -
00DC -
00E0 -
00E4 -
00E8 -
00EC -
00F0 -
00F4 - ???
00F8 - ???
00FC - More parameters
0100 - ??
0104 - ??
0108 - ??
010C - ??
0110 - Alt-Fire Projectile ID
0114 - Projectiles fired
0118 - ??
011C - Rate of Fire (frames, semi-automatic)
0120 - Rate of Fire (frames, held fire)
0124 - Ricochet
0128 - Projectile Speed
012C - Spread
0130 - Ammo used per shot (first shot before letting go of the trigger)
0134 - Ammo used per shot (subsequent shots)
0138 -
013C -
0140 -
0144 - Sound ID (first shot)
0148 - Sound ID (held)
014C -
0150 - ??? Seems to always be 232
0154 - ??? ditto
0158 -
015C -
0160 - ID for emptying bullet shell graphic
0164 - Recoil Parameters
0168 -
016C -
0170 -
0174 - Damage ID (Alt fire)
0178 - Recoil Parameters
017C -
0180 -
0184 -
0188 -
018C -
0190 -
0194 -
0198 -
019C - End of params
01A0 - ???
01A4 - ???
01A8 - More parameters
01AC -
01B0 -
01B4 - End of params
01B8 - ?
01BC - ?
01C0 - ?
01C4 -
01C8 -
01CC -
01D0 -
01D4 -
01D8 - Animation for emptying shells 3 = shell goes flying, 2 = from under, 1 = drops from front, 0 drops slowly
01DC - Affects where shells come from?
01E0 -
01E4 -
01E8 -
01EC -
01F0 -
01F4 -
01F8 -
01FC -
0200 -
0204 -
0208 -
020C -
0210 -
0214 -
0218 -
021C -
0220 -
0224 -
0228 -
022C -
0230 -
0234 -
0238 -
023C -
0240 -
Projectile IDs[]
If you want to change projectiles, this is the ID's and what they represent. Note that explosives override the damage ID.
0 = Blank
1 = Standard Bullets
2 = Sniper (bullet trails more)
3 = Invisible (shotgun, triggers special flinch animation)
4 = Autogun Launcher (assault scrapyard)
5 = Turret Rocket (no homing on other guns)
6 = Rocket Launcher (Gun)
7 = Homing Launcher (no homing on other guns)
8 = Chopper Rocket
9 = S47 Grenade
A = Nade 2
B = Grenade Launcher (impact)
C = Grenade Launcher Alt-Fire
D = Plasma Grenade
E = Remote Mine
F = Timed Mine
10 =
11 = TNT
12 = Brick
13 = Flamethrower Weapon
14 = ?
15 = Screen Shake + explosion damage point blank
16 = Laser Gun
17 = Offset Laser?
18 = electrotool
19 = Big Lightning Bolt
1a = green lazer
1b = planet X Green UFO turret
1c = Scifi Handgun
1d = Robot Factory Autogun
1e = Plasma Autorifle
1f = Red Plasma (laser gun uncharged)
20 = Meezer Mox Lazer
21 = Sewer Zombie Spit
22 = Cropolite Beams
23 = Crossbolt
24 = Firebolts
25 = Robot Factory Security Lazer
26 = Reaper Splitter Bolt
27 = Drone Splitter Breath
28 = Bullet with Trail
29 = Pink Planet X Plasma
2a