DiabloSight Version 1.07.17
For Diablo v1.07 / v1.04 / v1.00 and Hellfire v1.01 / v1.00
Instructions and Information Key, 05/14/00

Produced and Updated by moe SAINT EverGreen
AlterNative LABs Diablo Archive ( http://come.to/diablosight )
Check often for the latest version.
Email evergreen@lovemail.com to receive email about latest updates.

DiabloSight's Purpose and Abilities :

1) View player attributes and equipped items
   Check for cheating players with hacks and dupes.
   Highlights Players Listed on the Honorable Player List.
   DiabloSight shows the Unique Item Number of all equipped items.

2) Diablo's .drv files depend on your computer name.
   The About Box now shows your current Computer Name.
   
3) In Hellfire, DiabloSight does not yet check for cheats/hacks/dupes,
   nor does it check the Honorable Player List,
   but it does show the equipment and stats for all players,
   to let you make your own decisions.


Installing DiabloSight :

1) Extract DiabloSight.exe into any directory.
   I make a subfolder in my Diablo folder for this.

2) Run it at any time.

3) Load a Diablo Game to use DiabloSight.


Operating DiabloSight : 

1) View any characters in the current game :
   Alt-Tab to DiabloSight, 
   Hit Refresh to update the game data, (Just Added an Automatic Refresh!)
   Choose View, and the character name.
   Alt-Tab to Return to Diablo.
   If you View your own character, all of your items will display.
   If you View another's character, you will see OK on legit attributes
   and a tilde and the attribute on any hacked attributes.
   
2) Log your character or other characters to text files.
   Log will place your character in a printable file, "CharacterName.txt".
   It will list the items of other characters in a file, "DiabloSight.log".
  

How DiabloSight Works :

DiabloSight for v1.07/v1.00/Hellfire read the process memory.

DiabloSight for v1.04 actually places a hack into Diablo code,
very similar to what Raymond's trainer does,
in order to temporarily freeze the Diablo Memory.


DiabloSight.ini
   DiabloSight will read a text file called DiabloSight.ini
   for various command options, one command per line :
   DiabloSight will also read these commands from the command line
   but each with a preceeding slash "/" (i.e. diablosight.exe /single )
   Commands:
   
/ini=filename.ini
  load command options from filename.ini (command line only)
  especially useful to specify different windownames for MODS.
  If present, DiabloSaver.ini will not be read.

single
  never show anybody else's characters 
  (default show all)

allitems
  show all of other people's items 
  (default show only other's hacked items)

text
  log other people's characters to charname.txt files 
  (default, only log your own character to .txt file)

info
  always show the special item info used to determine hacks.
  (default, only show this info on hacked items)
  
HonNoPk=filename.txt
  Set the pathname of the Honorable Player list to filename.txt
  (default, HonNoPk.txt)
  If you plan to modify the player list,
  note that the list actually starts at "LEGEND:",
  and continues to the end of the file.
  
nocheck
  never check for hacks/dupes/etc
  useful for various modifications of diablo and hellfire
  which can't be checked for hacks, so why bother.  
  
DiabloName=windowname
HellfireName=windowname
DiabloVer7Str= the 8th through 12th letters of the version string for v1.07
HellfireVer1Str= the 10th through 14th letters of the version string for v1.01
  By changing these values you should be able to use this program
  with various modifications of diablo and hellfire.
  The windowname shows in the task bar on the bottom of Win95/98/NT.
  The Version String shows on the bottom left corner of the first menu of the game.
  Most likely you should use the nocheck option above with any game modification.
  [ see purgsight.ini for an example that can be renamed to diablosight.ini ]


DiabloDupes.ini
   This file lists all item id's you want to check as common dupes.
   Remember that even common dupes can come from legit sources.
   No need to list obvious hacked uniques in this file.
   The format is xx:xxXXxxXXxx:xx for Weapons/Armor,
             and xx:xxXXxxXXxx:Ux for all others.
    representing 05:0403020100:(168 / U8),
    and directly matches the DiabloSight.log and CharName.txt id values.


DiabloSight's Key for Showing Character Attributes :

*HONORABLE = The Player Name was found on the Honorable Player List
***CHAR HACKS*** = Player has Hacked Attributes
**EQUIP HACKS*** = Player has Hacked Equipment
**SPELL HACKS ** = Player has Hacked Spell Info
** GOLD HACKS ** = Player most likely has Infinite Gold (95000)
** EQUIP DUPES ** = Player Uses Exact Duplicates to Self/Another's Equip
*? COMMON DUPES ?* = Player uses powerful items on Common Dupe List
** EQUIP DUPES *PLUS* ** = Player Uses Exact Duplicates and Common Dupes
??LEVEL HACKS ?? = (buggy) possible invalid experience or level info
?? PACK HACKS ?? = (buggy) possible hacked items in pack inventory
?? PACK DUPES ?? = (buggy) possible common dupes in pack inventory

~ = Hacked Attribute/Item, having values outside of possible ranges.
# = Definate Duplicate in a reliable area of memory
? = duplicate of an item in memory that May Not be Reliable Info.
> = Common Duplicate, most likely duped, but very rarely legit
* = Common Duplicate, AND dupe in Equip data (Reliable)
+ = Common Duplicate, AND dupe in pack data (unreliable)
+999 = Hacked Attribute with numeric value too large to display on screen.
*** Ears! = count of ears in inventory (other than their own ears).

Slot = Game Slot Number from 0 to 3.
Gold () = count of gold in inventory (as opposed to game's hackable count).
Base = Base Attribute before any modifications (except elixers/shrines).
Now = Life/Mana Attributes with losses from attack, spell use.
Modified = Base and Now Life/Mana Attributes modified by Equipped Items.
Mods = Difference between Base Life/Mana and Expected Values
   (Mods should only show a negative value for mana due to shrines,
   a negative value for life due to shrines and black death,
   and sometimes a positive value for life due to the imposing shrine).
Mods () = Expected Values for Base Life/Mana used to determine Mods.
Mods Total, adding the life and mana mods together displayed under Mods.
   Since the Imposing shrine subtracts mana to add to life,
   a positive value usually indicates hacked or corrupted character data.
Spell Key : Spells Show with Base Spell Level and Spell Name.
   ~~ = Spells Left Out of Game (they have no game effect).
   [] = Character Skills Not Available as Spells
   {} = Scrolls/Staffs Not Available as Spells
Town/S/E/N/W = Absolute Character Position in Game
Relative = Relative Character Position to Your Character


Warning!!! IMPORTANT! Please Read!
Cheating?! Common Dupes vs. Pack Dupes vs. Equip Dupes vs. Hacks?!

   DO NOT ACT LIKE A JERK JUST BECAUSE THIS VIEWER SHOWS DUPES!!!

   Diablo can actually produce Duplicate Items! Even in the same game! 
   Most often I have seen diablo duplicate potions. This is common!

   Cheaters can duplicate other people's items in the same game!

   "Common Dupes" can always also be found Legitly, though rarely!
  
   When people move their equipment in their pack to ground or equipment,
   Diablo often Does Not Refresh Inventory Pack Memory of other players!
   This can cause DiabloSaver to show Incorrect Dupes or Hacks in pack,
   while Equipped will almost always show correctly.
   
   Due to packet loss and various Diablo BUGS
   Sometimes Diablo does not update Equipped Items when people resurrect!
   Although this most often happens to cheaters using No Drops At Death,
   It CAN ALSO Happen to Anybody, though more rarely!
   
   The point of showing dupes is for a warning of "POSSIBLE" cheating,
   to help people who trade items in "PUBLIC" games,
   where cheaters commonly hang out, pretending to be legit.
  
   Two identical equipped commonly duped obsidian rings of the zodiac
   almost guarantees you play with a cheater/duper, or a friend of one.
   Two identical equipped rings always show as dupes, and Probably are.
   
   But a commonly duped Kings Sword of Haste, can still be found Legit.
   
   DO NOT ACT LIKE A JERK JUST BECAUSE THIS VIEWER SHOWS DUPES!!!
  
   I MAKE MISTAKES, TOO!!! BUGS MAY EXIST IN THIS PROGRAM!!
   
   Do you know how many people rigorously test this program?
   How many help me to catch any bugs in the latest version?
   
   Answer: Did you help me? Have you rigorously tested it?
   Did you send me the last bug you found?
   When was the last time you emailed me?
   How many people actually use this program?!
   
   I recently discovered I had the Bow of the Dead and Celestial Bow
   showing incorrectly as hacks. Only 1 (ONE!?) person found this.
   The error has existed for 3!!! (THREE!!) MONTHS!!!
   
   (I never even saw one of those items in all that time.)
   
   There is NO WAY to test every single possible item,
   too many combinations exist. That is what makes legit dupes rare.
   
   USE YOUR COMMON SENSE!
   
   If a player shows as a hack, LOOK for the Tilde's! Judge for Yourself!
   Check out the item. The stats show correctly, so Judge for Yourself!

   USE YOUR COMMON SENSE!
   I MAKE MISTAKES, TOO!!! BUGS MAY EXIST IN THIS PROGRAM!!
   
   sorry, about that rant, above,
   but those of you who already knew all that,
   might be surprised at how many people email me 
   about jerks who use this program like it makes them god or something.


DiabloSight's Key for Showing Item Attributes :

The Unique Item ID Number : 

   Where DiabloSight shows the items,
   it also shows the internal Unique ID#
   used by Diablo to determine Item attributes
   and used to detect duplicates in the game.
   
   You will never see this ID # in Diablo
   (From a character's point of view, such a thing wouldn't exist.)
   but it does affect game play (per the duplicate item destruction),
   and per the commonality of exploiting duplicated items.

   This ID is also checked against a list of commonly duplicated items,
   in a file named, DiabloDupes.ini

   (These Numbers represent Hexadecimal Values).

   On Weapons and Armor, 
   05 : 04 03 02 01 00 : 168
   
   On All other Items
   05 : 04 03 02 01 00 :U 8
   
   Where the number represents the relative memory location
   of the item data, as Diablo stores it in the character memory.
   
   My hex reference at the end of this file gives more information.
   
   '~' indicates any detected hacked items,
     (Incorrect Indestructability, Too many Charges, or Invalid Uniques)
   
   When (05 04 03 02 01 00 168/8) all match exactly to another item:
     
   '#', indicates Exact Duplicate in Equip data (Very Reliable)
   '?', indicates Exact Duplicate in Pack data (unreliable data)
     
   '>', Commonly Duplicated Item (per DiabloDupes.ini)
   '*', Common Duplicate, AND dupe in Equip data (Reliable)
   '+', Common Duplicate, AND dupe in pack data (unreliable)

   Diablo detects duplicates if any character in the same game
   has two (or more) of exactly the same item (dupe)
   on their person as any character in the same game,
   Those dupes show with '#', '*', '?', or '+'.

   Bugs in diablo may incorrectly store dupes in memory
   when people replace their equipment,
   and when people change levels and enter game,
   or due to lag and UDP packet loss.
   

The Item Attributes:

2H = 2 Handed Sword

For Weapons,
m<x_d(n) shows hits, m to x, durability, d, 
         and normal maximum durability of item type (n).
m<x_I represents an Indestructable Item.
m<x_I(n) represents an Item with Hacked Indestructability.

For Armor,
a_d(n) shows armor class, a, durability, d, 
       and normal durability of item type (n).

For Staffs (Staves),
 Cm(X) = Magic Charges, m, and maximum charges (X) based on Spell.
         If m > X or m = 255, then the Staff has Hacked Charges

+/- %th = +/- % to hit (+25% to hit)
+/-  %h = +/- % hits (damage) (+25% damage)
+/-   h = +/- hits (damage) (+6 damage)
+/- %ac = +/- % armor class (+10% AC)

    +ac = Non-Armor that Adds to Armor (Engagement Ring)
  +#<#h = Additional Range of Hits (damage) (thorns)
+200%hD = + 200% Hits (Damage) to Demons  
  #<#Lh = Additional Lightning Hits (damage)
  #<#Fh = Additional Fire Hits (damage)
    +Fh = Burning Item
 -/+ eh = -/+ enemy hits (-6eh = absorbs 6 hits)

   -L = Constricting
+/- L = +/- Life (+20 hit point)
+/- a = +/- all attributes (+10 all)
+/- s = +/- strength
+/- m = +/- magic
+/- d = +/- dexterity
+/- v = +/- vitality

   0bm = 0 Base Mana (No Mana while equiped)
+/- bm = +/- Base Mana   

+/- %ra = +/- % resist all
+/- %rm = +/- % resist magic
+/- %rf = +/- % resist fire
+/- %rl = +/- % resist lightning

+/- sp = +/- spell level (archangel shows +2sp)
   
  +sh = Random Steal Hits (Steal Life Like Undead Crown)
+3%sh = Steal 3% Hits (Life)
+5%sh = Steal 5% Hits (Life)
  KT  = Knocks Target back
  QA  = Quick Attack
  FA  = Fast Attack
  FA2 = Faster Attack
  FA3 = Fastest Attack (Haste)
  FR3 = Fastest Recover (Harmony)
  FB  = Fast Block
  AT  = Absorb Traps (half damage)
+3%sm = Steal 3% Mana
+5%sm = Steal 5% Mana

+/- %Lr = +/- % Light Radiation

 R#m#d#s = Requirements, magic, dexterity, strength
 
 (#g) = Gold Pieces
 
No codes exist for Puncturing/Piercing.


Hacked Item Attributes:

   Hacked Items will have a list of values in parens (),
   to help show hidden hacked item attributes.

   c = hacked magical spell charges
   d = hacked durability
   sp = single player unique
   ? = unable to identify unique
   L = Level of Hacked Item (byte 4, item origin level minus upper bits)
   u = usage type of hacked item (byte 8, encoded item type)
       Items with high level codes, default to showing their usage.
       0 U0 Consumables, Elixer/Book/Scroll/Potion
       1 U1 Sword   
       2 U2 Axe     
       3 U3 Bow     
       4 U4 Blunt Weapons, Club/Mace/Flail/Hammer
       5 U5 Shield  
       6 U6 Armor, Leather
       7 U7 Helm    
       8 U8 Armor, Mail
       9 U9 Armor, Plate
      10 UA Staff   
      11 UB Gold    
      12 UC Ring    
      13 UD Amulet  
   g = hacked due to impossible item cost in gold
   e = equip type (byte BD, Equipment Placement)
   k = class type (byte BE, Class)
   m = magic type (0 = not magical, 1 = magical, 2 = unique)
   s = spell type (0 = no spell, 1 = firebolt, etc..)
   
   
DiabloSight Log Key (for DiabloSight.log) :
 i = indestructable
 * = indestructable hack
 ~ = hack
 (Also see above for the the Hacked Item Attributes)


Checking for Dupes and Hacks with DiabloSight :

In Diablo, only a few unique rings, amulets or helmets exist.
Most hacked Uniques have an ID similar to the ones below:
03 : xx 00 00 00 xx : xx  or  02 : xx 00 00 00 xx : xx 

When using DiabloSight to check other characters
in games labeled Legit, you will see many people enter
that have Gnarled Root Helmets or Lightforge rings,
or they will have exactly the same obsidian zodiac ring on both hands.

In testing,
I have dared people with the same ID # on two obsidian zodiac rings
(who also claimed they found them legit)
to drop their rings on the ground and pick them back up.
Twice people have actually fallen for this
to prove their legitimacy,
only to see one of their rings destroyed,
"duplicate item detected."
(Some people will drop different rings to trick you.)

Note that Diablo can actually produce Duplicate Items
even in the same game (most often I have seen duplicated potions),
Hence the Question Marks, ?? .. we don't really know..
However, more than 2 trillion possible items exist,
and that means a trillion unique high level items.
I do not recommend equiping two rings that Diablo
created as duplicates, because they will destroy
each other when a monster kills you, anyway.


Checking for Cheated Attributes with DiabloSight :

DiabloSight has several values that help you check for cheats:
Shrines and Mods are two, the others show with '~' or '+'.

Shrines tells you the number of shrines a character would
have had to visit to get their raise their stats.
(2 Elixers = 1 Shrine value). 
If a level 20 character shows 150 shrines,
they most likely cheated to raise their attributes.
After Shrines a number in parentheses ()
shows the total elixers needed to raise their stats.
Note : At level 26 and above characters can buy elixers,
and many players will max their attributes quickly.

Mods shows the difference of the expected
Life and Mana Total from the actual Base Total.
A small negative number may indicate loss of base life
due to Black Death Zombie. A higher negative number may 
indicate loss of mana due to a shrine. But a very high positive 
number will usually indicate a cheater who has raised their
life or mana attributes. Note that the Imposing shrine moves
a percentage of mana to life, giving a positive life value
that should correspond to a negative mana value.


More Information about the Unique Item Number :
(note, this program displays the item number in reverse order, 
with 05 first, then 04, 03, 02, 01, 00, then either 168 or 08)

As Extracted from ItemHex.txt.
Note that I subtracted the 20h ITM header length from these values.

Bytes 00 - 04 : Unique Item Number (Cazasombras: 'Item Generator Seed') 
XX XX XX XX XX
Diablo Uses this Number to Send to a Pseudo Random Item Generator.
The Same Code usually generates the same item and same stats,
But some exceptions exist, depending on locations 05 and 168.
If a non-unique item does not match codes with its originator,
and then it will get re-generated when it re-enters the game world.
Somebody could use this with a Non-Legit-Checking program 
to search in other player's inventories for hacks, duplicates,
and commonly duplicated items, such as the King's Sword of Haste.

Byte 04 : Item Origin Level
This byte appears to affect the Grade of Items Generated.
01 - 1E Level 1 to Level 30 Item Drops/Offers
1F - 32 Level 31 to Level 50 Item Offers from Wirt
     3F Most Hacked Unattainable Godly Items
Items dropped by Unique Monsters also have the upper two bits set,
C1 - DE Level 1 to Level 30 Items dropped by Unique monsters
Items created on a Rack or on the Ground have the second upper bit set,
41 - 5E Level 1 to Level 30 Items Created On Rack/Ground

Byte 05 : Item Origin Code 
     Note : Item Type Generated by 00-04 depends on Byte 168/08
00 Boss Treasure Items (except consumables, Boss bits in origin set).
01 Treasure Items (Amulet, Ring, Armor, Weapons, Gold).
02 Unique Dropped by Unique (Grandfather, Royal Circlet)
03 Unique Dropped by NonUnique or Quest (Optic Amulet, etc)
04 Smith Shop Normal Items (Non Magical Sabre)
08 Smith Shop Item (Any Weapon/Armor, Not Amulets nor Rings)
10 Wirt Shop Item (Powerful Flail, Godly Shields)
20 Witch Shop Magic Item (Book, Staff, Scroll, Mana)
40 Healer Shop Magic Item (Rejuvenation, Elixer)
Ears have the First Letter of the Name here.

Byte 08: Encoded Item Type
00 Elixer (Book, Scroll, Potion), 01 Sword, 02 Axe, 03 Bow
04 Mace (Flail, Hammer), 05 Shield, 07 Helm, 0A Staff
06 Leather Armor, 08 Mail Armor, 09 Plate Armor
0B Gold, 0C Ring, 0D Amulet

Byte 168 : Equipment Name Type
Some Normal Equipment
30  Cap                   48  Small Shield          84  Morning Star
31  Skull Cap             49  Large Shield          85  War Hammer
32  Helm                  4A  Kite Shield           86  Spiked Club
33  Full Helm             4B  Tower Shield          87  Club
34  Crown                 4C  Gothic Shield         88  Flail
35  Great Helm            71  Dagger                89  Maul
36  Cape                  72  Short Sword           8A  Short Bow
37  Rags                  73  Falchion              8B  Hunter's Bow
38  Cloak                 74  Scimitar              8C  Long Bow
39  Robe                  75  Claymore              8D  Composite Bow
3A  Quilted Armor         76  Blade                 8E  Short Battle Bow
3B  Leather Armor         77  Sabre                 8F  Long Battle Bow
3C  Hard Leather Armor    78  Long Sword            90  Short War Bow
3D  Studded Leather Armor 79  Broad Sword           91  Long War Bow
3E  Ring Mail             7A  Bastard Sword         92  Short Staff
3F  Chain Mail            7B  Two-Handed Sword      93  Long Staff
40  Scale Mail            7C  Great Sword           94  Composite Staff
41  Breast Plate          7D  Small Axe             95  Quarter Staff
42  Splint Mail           7E  Axe                   96  War Staff
43  Plate Mail            7F  Large Axe             97  Ring
44  Field Plate           80  Broad Axe             98  Ring
45  Gothic Plate          81  Battle Axe            99  Ring
46  Full Plate Mail       82  Great Axe             9A  Amulet
47  Buckler               83  Mace                  9B  Amulet

Some Unique Items
06  Cleaver               0B  Ring of Truth         1F  Griswold's Edge
07  The Undead Crown      0D  Harlequin Crest       20  Lightforge
08  Empyrean Band         0E  Veil of Steel
0A  Optic Amulet          1C  Arkaine's Valor

Some Novelty Items
09  Magic Rock            11  Black Mushroom        15  Blood Stone
0C  Tavern Sign           12  Brain                 16  Map of the Stars
0F  Golden Elixir         13  Fungal Tome           17  Heart / Ear
10  Anvil of Fury         14  Spectral Elixir       21  Staff of Lazarus

Byte BD : Equipment Placement (Must Match Byte BE and 8)
01 One-Handed, 02 Two-Handed, 03 Body Armor, 04 Head Gear 
05 Ring, 06 Amulet, 07 Non-Equipment 

Byte BE : Class (Must Match Byte BD And 8)
01 Weapon, 02 Armor, 03 Anything Else, 04 Gold

