[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Re-engineered: Wizardry III, Legacy of Llylgamyn
Differences in versions of Wizardry III (Part 4 of xx)
------------------------------------------------------
MASTER Scenario (flip side of the BOOT diskette)
The BOOT side and the MASTER SCENARIO side both have WIZARDRY.CODE.
For the May version the same code exists on the BOOT side as the
SCENARIO side. For the Aug version it is also the same on both sides
(but obviously different between May and Aug).
SCENARIO.MESGS is the same in the May version and the Aug version.
In the May version, the order of files in the directory and on the
disk is:
WIZARDRY.CODE
SCENARIO.DATA
SCENARIO.MESGS
In the Aug version, the order is:
WIZARDRY.CODE
SCENARIO.MESGS
SCENARIO.DATA
The boot sector (T$0 S$0) is different between the May version and the
Aug version. The May version boot sector is identical to the boot
sector on UCSD Pascal 1.1 disk 1. When the MASTER scenario is used to
boot the Apple, the boot code cannot find SYSTEM.APPLE so it displays:
NO FILE SYSTEM.APPLE
The boot sector for Aug displays the following message:
FLIP DISKETTE, THEN PRESS [RETURN]
Booting the MASTER SCENARIO side of the diskette can therefore easily
distinguish between the May and the Aug versions of Wizardry III.
Interesting note: In the Aug version they fixed the "volume name" on
the BOOT side from KODBV2 to "LOLBOOT", yet on the MASTER SCENARIO
side, both the May and Aug versions have "KODBTTM" (Knight of
Diamonds).
Like the boot side, the MASTER SCENARIO side for Wizardry "steals"
sector 5 for it's own use. There is a "serial number", or "disk
identifier" number, in the first 7 bytes (some code thinks it is 8
bytes!?) of the sector that are different from the serial number on
the BOOT side. When transferring characters to your DUPLICATE
scenario, these values are checked. They are also checked when
backing up characters and when recovering characters.
When making a DUPLICATE scenario from the MASTER SCENARIO, T$0 S$5 is
copied and then modified. (See SSB4BL5 in WIZUTIL). The first 7
bytes are a "serial number". The bytes at offsets $A, $B, and $C are
modified as follows:
$A is set to ($B MOD 255) + 1
$B is cleared to 0.
$C is set to a RANDOM value.
I don't think the values in $A, $B, or $C are otherwise used. I
suppose if you make another DUPLICATE scenario, but use this first
copy then the value in the new DUPLICATE scenario will have different
values.
Note: Most of the code is extremely well written, but then there is
code like the following:
1049 8 11:3 198 SB10 := SSB4BL5[ 11] + 1;
1050 8 11:3 208 IF SB10 = 256 THEN
1051 8 11:4 217 SB10 := 1;
1052 8 11:3 221 SSB4BL5[ 10] := SB10;
1053 8 11:3 229 SSB4BL5[ 11] := 0;
1054 8 11:3 235 SSB4BL5[ 12] := (SSB4BL5[ 12] +
RANDNUM) MOD 256
I think lines 1049 to 1052 can be written as:
SSB4BL5[ 10] := (SSB4BL5[ 11] MOD 255) + 1;
And line 1054 (assuming RANDNUM truly is random):
SSB4BL5[ 12] := RANDNUM MOD 256;
In the May version, the first 14 bytes on T$0 S$5 are:
06 30 30 30 33 32 30 00 F000320@
00 00 00 01 6A 00
In the Aug version, these values are:
06 30 30 30 30 30 39 00 F000009@
00 00 00 01 52 00
The rest of the values in sector 5 are not used, but have random
residual garbage. May and Aug have about 43 bytes that don't compare.
SCENARIO.DATA differences
=========================
There are several different sections to SCENARIO.DATA (OBJECTS,
ENEMIES, MAZE, REWARDS, etc.) I've written some software to display
all the records in each section for each of the data attributes. In
the following descriptions, the heading refer to record names in the
source code.
OBJECTS (in SCENARIO.DATA)
-------
CHGCHANC
SOPIC PHILTRE May 0
Aug 80
In the Aug version, SOPIC PHILTRE has an 80% chance to change into
a BROKEN ITEM.
CHANGETO
DIALKO AMULET May 41
Aug 0
In the Aug version, DIALKO AMULET will change to a BROKEN ITEM
instead of PLATE ARMOR+1 (still at 25% chance).
SPELLPWR
BOOK OF DEATH May 0
Aug 47
Now BOOK OF DEATH has MABADI associated with it instead of
NOTHING.
(Similar to BOOK OF LIFE having DI (43) associated with it.)
ENEMIES (in SCENARIO.DATA)
-------
CLASS
GARIAN RAIDER May 0
Aug 3
EXPAMT.LOW
GARIAN PRIEST May 150
Aug 100
TEAMPERC
MAN AT ARMS May 20
Aug 30
TeamPercent was increased, therefore there is a greater chance to
be paired with a GARIAN RAIDER.
HPREC.LEVEL HPREC.HPFAC HPREC.HPMINADD AC
NINJA May 3 4 3 4
Aug 2 6 4 5
HPREC is used to calculate Hit Points.
Each enemy has 2 reward value "packages" associated with it (REWARD
and REWARD2). Gold and "found" items are based on these reward
packages. The following had their REWARD2 value changed from package
19 to package 17.
LEPRECHAUN
UNICORN
CRUSADER
PIXIE
CENTAUR
EXPAMT.LOW MAGSPELS
PIXIE May 300 1
350 2
HPREC.HPMINADD
MASTER NINJA May 0
Aug 7
The following had REWARD2 changed from 23 to 21:
CRUSADER LORD
FAERIE
SERAPH
T'IEN LUNG
ROC
EXPAMT.LOW
CRUSADER LORD May 600
Aug 700
HPREC.HPFAC HPREC.HPMINADD
FAERIE May 10 0
Aug 8 8
MAGSPELS
ELVEN MAGE May 4
Aug 5
RECSN 3A 3B 3C
SAMURAI May 2 0 0 0
Aug 3 1 6 4
EXPAMT.LOW
WIGHT May 1000
Aug 3000
HPREC.HPFAC HPREC.HPMINADD
ARCHDEMON May 10 10
Aug 2 60
HPREC.LEVEL HPREC.HPFAC HPREC.HPMINADD
CYCLOPS May 10 10 0
Aug 8 3 60
HPREC.HPFAC HPREC.HPMINADD
ARCHANGEL May 10 10
Aug 2 60
TEAMPERC
PO'LE May -1
Aug 0
TEAMPERC
L'KBRETH May -1
Aug 0
MAZE (in SCENARIO.DATA)
----
For level 1 of the maze, the ENMYCALC table was changed slightly.
This table determines the type of enemies you will encounter under
different circumstances. The values for MINENEMY for records 1 and 2
were altered:
May:
ENMYCALC MINENEMY MULTWORS WORSE01 RANGE0N PERCWORS
1 2 0 0 5 -1
2 7 0 0 5 -1
3 7 0 0 5 -1
May:
ENMYCALC MINENEMY MULTWORS WORSE01 RANGE0N PERCWORS
1 7 0 0 5 -1
2 2 0 0 5 -1
3 7 0 0 5 -1
REWARDS (in SCENARIO.DATA)
-------
There are 24 different "reward packages". These determine if there is
a trap, what kind of trap, the gold reward, and any item reward. I
will only list a few of the changes here in detail. The following
records were changed:
0, 1, 3, 4, 5, 6, 7, 8, 9, 13, 15, 17, 21
Each reward package can have up to 9 (?) different sub-records
associated with it. Some of the changes they made might not be quite
correct. For example, for reward 0 they changed the values for the
second set of rewards from zeroes to normal type values, but did not
bump the REWRDCNT value that determines the number of rewards in the
package. A sub-record has these fields:
REWDPERC BITEM TRIES AVEAMT MINADD MULTX TRIES2 AVEAMT2 MINADD2
REWDPERC BITEM MININDX MFACTOR MAXTIMES RANGE PERCBIGR
(Line 1 above describes the sub-record when BITEM is 0, otherwise
line 2 describes the sub-record.)
Also for reward package 15, they decremented the REWRDCNT field from 2
to 1, but did not change the values for the second sub-record to
zeroes (to be consistent).
I will show the changes for reward package 9.
May:
REWRDCNT REWDPERC BITEM TRIES AVEAMT MINADD MULTX TRIES2 AVEAMT2
MINADD2
6 100 0 6 10 40 5 3 1 3
REWDPERC BITEM MININDX MFACTOR MAXTIMES RANGE PERCBIGR
100 1 31 10 2 10 50
50 1 61 10 2 10 25
25 1 74 10 2 10 30
75 1 53 0 0 1 -1
75 1 53 0 0 1 -1
Aug:
REWRDCNT REWDPERC BITEM TRIES AVEAMT MINADD MULTX TRIES2 AVEAMT2
MINADD2
6 100 0 6 10 40 5 3 1 3
REWDPERC BITEM MININDX MFACTOR MAXTIMES RANGE PERCBIGR
90 1 30 12 2 12 50
80 1 54 10 2 10 50
50 1 74 10 2 10 30
40 1 84 10 2 10 50
50 1 62 10 2 10 35
This pretty much completes the description of differences between the
May and Aug versions of Wizardry III.
I think the next thing I'll tackle is trying to display the records
that make up SCENARIO.DATA. For example, all the OBJECTS and their
associated record values, all the ENEMIES and their records, the MAZE
description (Walls, Hidden, where fights are likely to occur...).
--Tommy