The differences between the battlesets, in the game machine and in the structure of the scenarios, are minimal. For instance, the lenght of each record in the units_database of a given *.scn file is:

UTAH		142 bytes
VELIKIEYE LUKI	144 bytes
STALINGRAD	168 bytes


Each of the 7 scenarios in VL is determined by a *.scn file.
Each *.scn file is divided in:

HEADER		       0000-007F
COMMANDER INSTRUCTIONS 0080-087F
NAMES OF THE MAP       0880-0BFF
BLOCK1		       0C00-36AF
BLOCK2 ("C0 01")       36B0-78DB (if 78DC)
UNITS DATABASE	       78DC-(78DC+(9*16*number_of_units+4+4))
		       (f.i. VLRESCUE.SCN = A6FF)
		       (there is a 4_bytes header and a 4 
		       bytes fence between Axis and Allies)

AI & random sequencer  A6FF-B35F
Daynight(?) sequencer  B1C0-B34F
TARGER TOWN            B9A0-BB0F
FOOTER                 BB10-END



At the beginning 
Start of *.scn files
Progressive number of scenario (byte_6)
Dimensions of scenario (X,Y):
        Top left corner = 0C, 0E
        Bottom right corner = 10, 12
	Max dimensions = 0, 0 

*.SCN   lenght byte 6   bytes x0c, x0e   bytes x10, x12   start hex

Name	       scn_n     X, Y TL_corner  X,Y BR_corner   
VLRESCUE.SCN  48830 00     x11,x00      x31, x12         x78DC  
VLCITY.SCN    64884 01	   x1E,x19	x2D,x2B          x78E4
VLFORT.SCN   116198 02	   x10,x08	x42,x36          x78E8
VLEIGHT.SCN  109458 03	   x10,x08	x42,x36          x78E8
VLLAST.SCN   106910 04	   x10,x08	x42,x36          x78E8
VLSTORM.SCN  103650 05	   x00,x00	x4C,x36          x78E4
VLCAMP.SCN   125094 06	   x00,x00	x4C,x36          x78E4



DATABASE OF THE UNITS IN GIVEN SCENARIO
Each record (each unit in play) consist of 144 bytes (x9*x10=x90)
i.e.: for each unit 9 "lines" (as seen from most Hexeditors), with 16 bytes each.
The database starts at different locations i the *.scn files:
x78DC, x78E4 or x78E8. The third and fourth bytes of this block give the lenght 
of the russian part of  the database. After all the soviet units, there folows 
a 4 byte long separator with the lenght of the german part of the database, and
then all the german units.

For instance (VLRESCUE.SCN)

NAME                           LOCATION     FINDING&MEANING
rus_dbase header	       x7DC-xT8DF = 00 00 30 18
                                          = x1830 bytes of rus_units
                                          = x1830/x90 = x2B units = 43 rus_units
x1830 bytes of rus_units       x78E0-x910F= 00 00 30 18
ger_dbase header               x9110-x9113= 00 00 F0 15
                                          = x15F0 bytes of ger
                                          = x15F0/x90 = x26 units = 38 ger_units
x15F0 bytes of ger_units       x9114-xA703= ger_units (x26*x90=28*144)


Where the values lurk

Here follows a first rough interpretation of the first 7 "lines" of each
record, i.e. the first x70(112) bytes. The remaining x20 bytes are not very
interesting, as they contain the rest of the Name_field (ASCIIZ),
followed by a 00 fence separating the record from the next one. 

1st Line, bytes 1-16-----------------------------------------------------------
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f    Counter
00 00 Ni 00 Ne De Xp 00 Yp 00 Xd 00 Yd 00 FF FF
Al Al    Al          Al    Al    Al    Al Al Al
    Ni = Sequential Army_Number
         Ne = General Army_Number
             Delay ? (01=Planes or Rus_Reinforcements)


                           (00 = Else)
			     Xp=X_position of unit (00 for planes)
			       Yp = Y_position of unit
			          Xd = X_destination of unit (No for art)
			          Yd = Y_destination of unit (No for art)
2nd Line, bytes 17-32-----------------------------------------------------------
10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f    Counter
FF FF S1 S1 S1 S1 07 00 00 00 Ax Al Ch S2 S2 S2
Al Al             Al Al Al Al
    S1 = 1st Sequence: FD 6E 01 00 rus_ski, rus_planes ger_...
                       1C 6F 01 00 rus_orange
		       FF FF FF FF rus_reinforment/not there
		       10 6F 01 00 ger_662
		       30 6F 01 00 ger_I-107, ger_795...
		           Ax = 00: Allies / 01: Axis
			    Al = 02: Allies / 01: Axis
			     Ch = 07:HQ, 00:Inf, 01:Panz, 04:Art
			          06:Plane, 02:?
				   S2=graphics?

3rd Line, bytes 33-49-----------------------------------------------------------

Pr 00 00 00 00 00 00 00 A1&A2 00 00 D1&D2 C1&C2 
   Al Al Al Al Al Al Al       Al Al

Pr = 01-03
                   A1&A2 = Attack strenght in double precision
		   (10 41=3; B0 41=8; 60 42=21; F0 44=361 etc...)
		   D1&D2 = Defence strenght (attack_values * 2)
		     C1&C2 = 00&00/0A&D7/0B&7E/66&E0

4th Line, bytes 33-49-----------------------------------------------------------
30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f   Counter
D1 D2 D3 D4 D5 D6 N0 00 00 00 0c qz 00 00 04 4f
                     Al Al Al       Al Al 

D1-D6= Sequences
                    No = NORMAL
		       oc = 00/80/Co
		        qz = 00/40
			  o4=00/40/80/C0
			   4f=00/3F/40/41


5th Line, bytes 50-66-----------------------------------------------------------
40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f   Counter
S7 S7 S7 S7 S7 S7 S7 4f 00 00 00 00 Bi Bi 00 00
                        Al Al Al Al       Al Al

S7 = Sequencer
              4f= 00/3F/40/41
	        Bi=E0 2E, 40 1F, 00 00 (Planes)
		   70 17 ....

6th Line, bytes 67-82-----------------------------------------------------------
50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f   Counter
00 Mo M1 M2 Di Fa ut 00 00 zt vr 00 00 00 00 00
Al                   Al Al 
   Mo = MORALE
    M1=Almost like Mo
     M2=Almost like Mo
      Di=DISPRUPT
       Fa=Fatigue
        ut=00/01/02/03 (Planes=0)
	 zt=00/03
	  vr=ARTILLERY_RANGE and PLANES_TYPE

7th Line, bytes 83-98-----------------------------------------------------------
60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f   Counter
zf z1 z2 z6 dq z1 00 00 00 Mo 00 00 Name_field
                  Al Al Al    Al Al 
zf=00/01/03/FF
 z1=00/01 (01=ger_59th & ger_GR Cheval)
  z2=00/01/02 (00=Planes)
   z6=00/01/02/03/04/05/06
    dq=00/12/14/22/2C/39/46
     z1=00/01 (01=ger_59th & ger_GR Cheval)
      Mo=Moved_hexes


So long so good...now: how do I modify the values for a given unit?

Changing values in symdeb debugger for the soviet ski unit "4-44" in the VLRESCUE.SCN:
 
You type                   You get                   it means

symdeb VLRESCUE.SCN       -prompt               VLRESCUE.SCN loaded
s 78E0 L2000 "4-44"	  xxxx:yyyy		found "4-44" at yyyy
d yyyy-6C                 a dump of the unit    see the whole record
e yyy-44                  old value for attack  change value
SPACE (-43)		  leave 00              leave 00
SPACE (-42)		  2nd old attack value  change value
SPACE (-41)		  leave 00              leave 00
SPACE (-40)		  1st old defence_value change value
SPACE (-3F)		  leave 00              leave 00
SPACE (-3E)		  2nd old defence_value change it
ENTER                     -prompt               changed in memory
w (cx)                    -prompt               written
q                         DOS                   quit

If you enter as attack values, for instance, 30 and 42 and as defence for instance, 40 and
 41 (that is 30 00 42 00 40 00 41 00, starting from byte yyyy-44) your "1-44" unit will acquire
the values 16 for attack and 9 for defence, and you 'll be able to blow away the nazis at ease.
The procedure is obviously the same in order to modify moral, fatigue, disrupt, normal_value, 
or whatever, see above.
It's also quite interesting to modify the dimensions of the "board" of the smaller scenarios, 
(bytes 0e, 0e and 10,12 of the header) as you get in this way more useful room to manouvre.


2. I want to modify STALINGRAD

The structure of Stalingrad is slightly different from the sctructure of Velikiye Luki: 
Each unit record has here a length of x10*x16+x8 bytes. The fence "36 6E 01" can be found in 
the position 04, 05, 06 of each record. The position (X,Y) on the map of a given unit can be 
found at position x50&52 (81th and 83th bytes), the destination (X, Y), at position x54&x56
(85th and 87th bytes).
The attack and defence values are at position x12&13 and x16&17.
Hack everything like I have explained at question number 1, (and be aware that the bigger scenarios
may have the database in the next memory sector) with the following modifications.

- symdeb volga.scn         "Volga" scenario for instance
- s 0 LF000 "2-144-37"	   this soviet unit, for instance
- d yyyy-8A LA8            see the whole record of this unit
- e yyyy-78                enter new first attack byte
etc...                     see above (1)

As you can imagine, the structure of all other battlesets in similar to the one for VL that I
described above. The ARTILLERY_RANGE value, in Stalingrad, for instance (where x3B=3 and x3D=10),
can be found in position x5A (Name_filed - x12).



Francesco Vianello