Save State Hacking Guide by chris_gunsoo
COPS 2170: The Power of Law on SuperCheats.com
COPS 2170: The Power of Law
Ver. 1.20.004

by Chris The Champion
e-mail: st_chris_champion@yahoo.com

I-20121011

This file contains general way of altering saves game with
hexadecimal editor.

This game use dynamic-save file. And that means, we only wasting
time if we tracking this game by it's address (e.g x8fb0).
I don't figure out all possible hack method yet. I only know
that you can replace some stuff with the other as long as it's
name have the same length, and it's the same type.
To hack traits, weapon, armor and ammo it's easier to do it
when the stuff is on the ground and in the peaceful police
department. Of course it is possible to hack anywhere on the
game. For your own convenience, named your save files
systematically (e.g Save00, Save01, etc.).

For hacking the game I used frhed - free hex editor for 32-bit
Windows. Ver 1.0.149 (c) Raihan Kibria 1999.

Content:
A) List of stuff
B) Cheating ground stuffs
C) Change the traits
D) Cheating inventory stuffs

============================================
A) List of stuff

Here is the list of stuffs, written in save file version.
You should already noticed that some stuff have the same name
length. The same length is the key for replacing stuffs.

1234567890123456789012345
KeyThing
AmmoThing
ArmorThing

WeaponThing
ShieldThing
CameraThing

ImplantThing
MedikitThing
GrenadeThing
ScannerThing


============
ImplantThing
============

database
ir_filter
antishocker
auto_medikit - super rare item
thermoregulator

electric_implant - rare item
vision_amplifier

brain_accelarator - super rare item
strength_amplifier - rare item
reaction_accelerator
metabolism_accelerator - super rare item

==========
ArmorThing
==========

simoto
tauret

kerk_heavy [Kerk Suit 14 "Assaulter"]

nohomoto_np14
nohomoto_np22

mark_soft_sute [Mark XXV "Soft"]
mark_command_m4

===========
WeaponThing
===========

k4
rk2
rk8
a14 [Atomic 14 "Rain"]

maca
rolf [T&H "Rolf"] - rare item
bull [R.G "Bull"] - rare item
sa12
kas2 ["Enforcer"]

ronin
macs4
rhino
amc32 [AMS 32 LPM]
amc12 ["Viper"] - rare item
wolf1
sa124
storm [Ramshell "Storm"]
mag36 - rare item

minimi
hammer
mac142 ["Fire Vortex"]
mack22 ["Geyser"]
pumpgun

minimi_a
minimi_b

simoto_pr [Simoto I.V. mark A]
simoto_rh [Simoto RH 14]
atomic200
plasmatic [Ramshell "Plasmatic"]
simoto_usr [Simoto S.S.V.] - rare item

=========
AmmoThing
=========

fiery_shot
heavy_shot
big_battery

standart_shot
shock_grenade
fiery_grenade

standart_shell
advanced_shell

standart_grenade
fiery_army_shell
shock_army_shell
rapid_army_shell

shock_police_shell
fiery_police_shell
heavy_police_shell
sniper_rifle_shell
painful_army_shell
fiery_cannon_shell

standart_army_shell
advanced_army_shell
standart_ammunition

standart_rifle_shell
advanced_rifle_shell
explosive_army_shell
termonuclear_battery
vacuum_small_missile
plasma_small_missile

electric_police_shell
standart_police_shell
advanced_police_shell
explosive_rifle_shell
standart_cannon_shell
advanced_cannon_shell
modified_cannon_shell

explosive_cannon_shell
standart_small_missile

amplified_small_missile
armorpierce_cannon_shell
armorpiercing_rifle_shell

============
GrenadeThing
============

turtle
plasma_bomb
fiery_grenade
handy_grenade
electric_grenade
hand_plasma_grenade
police_shock_grenade

============
Shield Thing
============

standart_shield
advanced_shield

============
MedikitThing
============

medic_toolkit
standart_medikit
advanced_medikit

===========
CameraThing
===========

handycam

============
ScannerThing
============

termoscanner
neiroscanner

========
KeyThing
========

order_1 [Lower City Operations]
order_2 [Arrest Silvio]
order_3 [West gate of Gigamarket]
order_4 [Crossroad 44]
order_5 [Escort Mortimer]
order_6 [License to Kill Delichi]
roy_order [Mutants Extermination]
under_map [Syndicate's Underground Factory Map]
mutant_key [Pass for Mutant's Colony]

B) Cheating ground stuffs

To access ground stuff, search for GraphThing.
The format is:
<type of stuff><bits><name><bits>GraphThing<bits>
Example:
1)

00b330  00 57 65 61 70 6f 6e 54 68 69 6e 67 00 00 00 00  .WeaponThing....
00b340  00 00 00 00 00 01 00 00 00 6d 61 63 61 00 01 00  ........maca..
00b350  00 00 00 00 00 47 72 61 70 68 54 68 69 6e 67 00  .....GraphThing.
00b360  01 00 00 00 01 00 00 00 02 00 00 00 57 65 61 70  .........Weap

From the example above you can see a weapon maca:
WeaponThing............maca.......GraphThing..........

We want to replace maca with kas2, so:
WeaponThing............kas2.......GraphThing..........

And voila, it will working perfectly.

2)

00b450  67 00 03 00 00 00 03 00 00 00 04 00 00 00 41 6d  g..........Am
00b460  6d 6f 54 68 69 6e 67 00 00 00 00 00 00 00 00 00  moThing.........
00b470  04 00 00 00 61 64 76 61 6e 63 65 64 5f 70 6f 6c  ...advanced_pol
00b480  69 63 65 5f 73 68 65 6c 6c 00 02 00 00 00 00 00  ice_shell......
00b490  40 00 00 00 47 72 61 70 68 54 68 69 6e 67 00 04  @...GraphThing.
00b4a0  00 00 00 04 00 00 00 05 00 00 00 57 65 61 70 6f  .........Weapo

Here is the example for exchanging ammo:
AmmoThing............advanced_police_shell......@...GraphThing
Switch it with the oter ammo:
AmmoThing............modified_cannon_shell......@...GraphThing

There are also possible to change the remaining number of ammo.
See xb490, 4th bit before word "GraphThing", there is number 40-hex
(64-dec). You can change it as absurd as FF-hex (255-dec). Soon, you
will  meet with hardcoded limitation though.

00b490  40 00 00 00 47 72 61 70 68 54 68 69 6e 67 00 04
         @  .  .  .  G  r  a  p  h  T  h  i  n  g  .  
Change remaining ammo:
00b490  ff 00 00 00 47 72 61 70 68 54 68 69 6e 67 00 04
           .  .  .  G  r  a  p  h  T  h  i  n  g  .  

3)

00b4a0  00 00 00 04 00 00 00 05 00 00 00 57 65 61 70 6f  .........Weapo
00b4b0  6e 54 68 69 6e 67 00 13 00 00 00 06 00 00 00 05  nThing.......
00b4c0  00 00 00 6b 61 73 32 00 01 00 00 00 00 00 01 41  ...kas2......A
00b4d0  6d 6d 6f 54 68 69 6e 67 00 00 00 00 00 06 00 00  mmoThing.......
00b4e0  00 00 00 00 00 73 74 61 6e 64 61 72 74 5f 67 72  .....standart_gr
00b4f0  65 6e 61 64 65 00 02 00 00 00 00 00 01 00 00 00  enade.........
00b500  47 72 61 70 68 54 68 69 6e 67 00 05 00 00 00 05  GraphThing....
00b510  00 00 00 ff ff ff ff 91 08 00 00 00 00 00 00 01  .........

This example show us that possible to create weapon with unmatched ammo
(Enforcer with grenade ammo), and you still can cheat the remaining ammo
(fourth bit before word GraphThing).

4)

00b4e0  6e 67 00 03 00 00 00 03 00 00 00 04 00 00 00 53  ng..........S
00b4f0  63 61 6e 6e 65 72 54 68 69 6e 67 00 0a 00 00 00  cannerThing.
...
00b500  06 00 00 00 04 00 00 00 74 65 72 6d 6f 73 63 61  ......termosca
00b510  6e 6e 65 72 00 00 04 00 00 00 00 47 72 61 70 68  nner......Graph
00b520  54 68 69 6e 67 00 04 00 00 00 04 00 00 00 ff ff  Thing.......

I do not know the detail yet, but this very useful trick really work!

ScannerThing.
.........termoscanner......GraphThing

Change ScannerThing into ImplantThing and termoscanner into auto_medikit.

ImplantThing.
.........auto_medikit......GraphThing

One more important step, change second bit after the name (i.e
auto_medikit) into 08 and 00 to the all following bits. The number 08
means that stuff is implant.

00 00 04 00 00 00 00

00 08 00 00 00 00 00

Now, you can equip the +9 regeneration implant.
Note: It's possible to hack equipped implant, but implant effect doesn't
change, unless you change it manually (see point C below).


C) Change the traits

You also can hack any playable character traits. Make sure to recruit
the character you want to hack first.

For a quick search, you can do this trick:
- Export as hexdump the whole save file
- Paste it on the text editor, e.g notepad
- Search using notepad (not frhed)

Here are the characters name: some_label.player (Katy), Maxim, Charly,
Fich, Sintu, Arthur, Bik14.
Sometime using word "some_label.player" is too long for searching and
end up with fail result. So use "some_l" or "l.player" instead, it
should work.

Now, we begin hacking the traits.
Search for a character name, then search (scroll) the area between
HumanContext and HumanMarker.
Example:
This is an example of Katy traits:

008920  48 75 6d 61 6e 43 6f 6e 74 65 78 74 00 04 00 00  HumanContext...
008930  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
008940  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
008950  00 00 00 00 00 db 0f c9 3f 00 00 a0 41 43 00 00  .....?..AC..
008960  00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00  ...............
008970  00 34 00 00 00 64 00 00 00 47 00 00 00 2d 00 00  .4...d...G...-..
008980  00 2c 00 00 00 36 00 00 00 0a 00 00 00 00 00 00  .,...6...
......
008990  00 00 00 00 00 00 00 00 00 1a 00 00 00 10 00 00  ..............
0089a0  00 34 00 00 00 64 00 00 00 47 00 00 00 2d 00 00  .4...d...G...-..
0089b0  00 2c 00 00 00 0a 00 00 00 36 00 00 00 00 00 a0  .,...
...6.....
0089c0  41 1a 00 00 00 1a 00 00 00 01 48 75 6d 61 6e 4d  A......HumanM
0089d0  61 72 6b 65 72 00 00 00 00 00 00 00 00 00 01 00  arker..........

Then I put marks (legend) for your convenience, remember not to rely on
hex addressing.

008920  48 75 6d 61 6e 43 6f 6e 74 65 78 74 00 RN 00 00  HumanContext...
008930  00 it 00 00 00 rg 00 00 00 ac 00 00 00 st 00 00  ................
008940  00 rc 00 00 00 00 00 00 SH 00 00 00 FL 00 00 00  ................
008950  EL 00 00 sg sg db 0f c9 3f 00 00 SG SG 43 00 00  .....?..AC..
008960  00 00 00 00 00 00 00 00 00 00 00 00 00 HL 00 00  ...............
008970  00 IT 00 00 00 MR 00 00 00 AC 00 00 00 ST 00 00  .4...d...G...-..
008980  00 RC 00 00 00 AG 00 00 00 MC 00 00 00 00 00 00  .,...6...
......
008990  00 00 00 00 00 00 00 00 00 ID 00 00 00 HL 00 00  ..............
0089a0  00 IT 00 00 00 MR 00 00 00 AC 00 00 00 ST 00 00  .4...d...G...-..
0089b0  00 RC 00 00 00 MC 00 00 00 AG 00 00 00 00 00 SG  .,...
...6.....
0089c0  SG ID 00 00 00 ID 00 00 00 01 48 75 6d 61 6e 4d  A......HumanM
0089d0  61 72 6b 65 72 00 00 00 00 00 00 00 00 00 01 00  arker..........

LEGEND

Traits (bit order after HumanContext):
ST STRENGTH	#82/#130
AG AGILITY	#90/#142
RC REACTION	#86/#134
AC ACCURACY	#78/#126
IT INTELLIGENT	#70/#118
MC MECHANIC	#94/#138
SG SIGHT	#48-49/#148-149
HL HEALTH	#66/#114

Additional (traits from implants):
st strength	#18
rc reaction	#22
ac accuracy	#14
it intelligent	#6
sg sight	#40-41
rg regeneration	#10

RESISTANCE:
SH SHOCK	#26
FL FLAME	#30
EL ELECTRIC	#34

MR MORALE	#74/#122
RN RANK		#2
ID IDENTITY	#110, #150, #154

============
List of Rank
============
00 Civilian
01 Not known
02 Private
03 Sergeant-junior
04 Sergeant
05 Sergeant-major
06 Lieutenant-junior
07 Lieutenant
08 Lieutenant-major
09 Captain
0A Major

================
List of Identity
================
This is a special trait that always associated with specific
character. I do not know how to manipulate it yet.

Katy	1A
Maxim	1B
Charly	1C
Bik-14	08
Fich	48
Sintu	04
Arthur	0B


AG, SH, FL, EL max. 100 (64-hex)
ST, AC, IT, MC, HL max. 255 (FF-hex)
SG more than 255 (FF-hex)
RN max. Major (0A-hex)
Note: If you hack your rank to maximum (Major), you can still receive
promotion from Protocol officer but it does not affect your rank though.

For me, sight is a uniqe trait among others. How to calculate is the
reason, I don not figure it out completely yet. But here some example
for you:
Sight	Hex code
15	70 41
20	a0 41
22	b0 41
27	d8 41
30	f0 41

45	34 42
53	54 42 - 57 42
54	58 42

150	16 43
165	25 43
180	34 43

You can use the codes above either for Sight (SG SG) or additional
sight (sg sg).

Next, I write about my own calculation, you don't have to pay attention
to this matter, so you can skip this part.
To gain Sight value 15-30, times the target value with 8. Then convert
the result to hexadecimal (for quickest way, use Windows Calculator).
Example: target value (Sight) = 27
         27 x 8 = 176
         176 (dec) = B0 (hex)
Do not forget to combine the result with 41

To gain Sight value 43-54, here is the formula:
x = target value (Sight)
i = x - 43

hex code = x + 1 + (i x 3)
Example: x = 50
         i = 50 - 43 = 7
         hex code = 50 + 1 + (7 x 3)
                  = 51 + 21
                  = 72 (dec) = 48 (hex)

Do not forget to combine the result with 42

To gain Sight value 150-180, subtract the target value with 128. Then
convert the result to hexadecimal. Do not forget to combine it with 43.
Example: target value (Sight) = 170
         170 - 128 = 42
         42 (dec) = 2A (hex)

D) Cheating inventory stuffs

Not so different with point B), you also can hack everything in the
inventory whether equipped or not. But first you must search a
character name like in the point C). Then search (scroll) the area
below HumanMoveStrategy.

A decent difference is bit position for remaining number of ammo.
That bit is twelfth bit after name of stuff.
Example:

008fb0  00 28 00 00 00 05 00 00 00 41 6d 6d 6f 54 68 69  .(......AmmoThi
008fc0  6e 67 00 02 00 00 00 00 00 00 00 05 00 00 00 61  ng...........a
008fd0  64 76 61 6e 63 65 64 5f 61 72 6d 79 5f 73 68 65  dvanced_army_she
008fe0  6c 6c 00 02 00 00 00 01 1b 00 00 00 00 50 00 00  ll........P..
008ff0  00 08 00 00 00 41 6d 6d 6f 54 68 69 6e 67 00 00  ....AmmoThing..

Here is the text code:
AmmoThing...........advanced_army_shell........P......

The 12th bit in hex code is 50 (80-dec). Manipulate this bit, and the
game will work just fine.
If you don't change any trait, you can equip unequipable weapon with
this trick. Still, harcoded limitation hinder your fun. If you equip
an armor, your "special" weapon will unequiped automatically.

Ok, I think that's all for hack note. Have your fun.