Archived UOX3 Version (0.98-3.6 - Updated April 5th, 2006)
Posted: Thu Mar 09, 2006 2:09 am
Full UOX3 Package ( UOX3 0.98-3.6 )
All-In-One (4/05/2006) - Contains all files needed to run UOX3.
Seperate packages
Exe Only (4/05/2006) - UOX3.EXE ver 0.98-3.6
Basic UOX3 files (02/20/2006) - Only the basic UOX3 scriptfiles, docs, etc. v0.98-3.4
DFNs Only (4/05/2006) - Only the DFN-files, v0.98-3.6
JScripts Only (4/05/2006) - Only the Javascript-files, v0.98-3.6
UOX3 Source (4/05/2006) - The UOX3 source-code, ver 0.98-3.6
NOTE! If you download uox3.exe only, remember to check for updated DFNs/JScripts from above as well, or you might not be able to run the latest version without problems! Also, these files are all available from the CVS at http://www.sf.net/projects/openuo, though the anonymous CVS might be lagging behind the proper one with up to 24 hours.
Changelog for Latest Released UOX3 Version: UOX3 Changelog (4/05/2006)
CVS Changelog for Next UOX3 Version:
All-In-One (4/05/2006) - Contains all files needed to run UOX3.
Seperate packages
Exe Only (4/05/2006) - UOX3.EXE ver 0.98-3.6
Basic UOX3 files (02/20/2006) - Only the basic UOX3 scriptfiles, docs, etc. v0.98-3.4
DFNs Only (4/05/2006) - Only the DFN-files, v0.98-3.6
JScripts Only (4/05/2006) - Only the Javascript-files, v0.98-3.6
UOX3 Source (4/05/2006) - The UOX3 source-code, ver 0.98-3.6
NOTE! If you download uox3.exe only, remember to check for updated DFNs/JScripts from above as well, or you might not be able to run the latest version without problems! Also, these files are all available from the CVS at http://www.sf.net/projects/openuo, though the anonymous CVS might be lagging behind the proper one with up to 24 hours.
Changelog for Latest Released UOX3 Version: UOX3 Changelog (4/05/2006)
CVS Changelog for Next UOX3 Version:
Code: Select all
[color=yellow]4/04/2006 - giwo (0.98-3.6)[/color]
Removed unused level value passed with Console.Warning() and Console.Error().
Removed JS Console prop .level
Modified JS Console Methods Warning() and Error() to remove the unused level value.
Fixed several issues with mapdiff and staticdiff handling.
Fixed a bug causing a crash when calling JS Event onGumpInput.
Merged CMultiObject vectors ownerList and banList into a single map housePrivList, to allow multiple owner/banned levels
and ensure there are no duplicate characters on the lists.
Removed many superfluous uses of CChar::Dirty( UT_STATWINDOW ).
[color=yellow]3/23/2006 - giwo (0.98-3.5o [3.6 RC])[/color]
Minor changes to cSkills::Fish().
Fixed an issue making it impossible to open Elven NPC paperdolls.
Removed some typedefs that were no longer used.
Moved CChar values townpriv and townvote to PlayerValues_st
Moved CChar values foodList, hungerWildChance and hungerRate to NPCValues_st
Removed CChar::inBuilding in favor of using a bools flag.
Removed handling code for several unused Character values.
[color=yellow]3/23/2006 - grimson[/color]
Fixed a bug with the JS override for the combat damage calculation that caused 0
damage to be applied when the attacker has no script attached and the global script
doesn't exist eigther.
[color=yellow]3/22/2006 - grimson[/color]
Small fix to ApplyDamageBonuses() caused by my previous commit.
[color=yellow]3/22/2006 - grimson[/color]
Removed the code to raise your resistance value upon elemental damage, this can be done better in JS.
Modified CBaseObject::DumpBody() and CBaseObject::HandleLine() so that all resistance values get saved
and loaded in/from the worldfiles.
Added a new JS event:
onDamage( damaged, attacker, damageValue )
This will be fired everytime the char "damaged" gets damaged, the attacker can be a char or NULL.
[color=yellow]3/21/2006 - grimson[/color]
Changed the return value of OnCombatDamageCalc() to a SI16, I accidentially declared it to
be a SI32.
Replaced the JS Char property .defense with the new JS Char Method:
mChar.Defense( hitLoc, damageType, doArmorDamage );
so you can get all the different defense values for a char.
[color=yellow]3/21/2006 - grimson[/color]
Call the OnHungerChange JS event in the SetHunger() function of chars instead of calling
it in every part of the code the where the hunger gets changed.
Added a new JS event:
onCombatDamageCalc( attacker, defender, getFightSkill )
This event is called everytime combat damage is calculated. You can do your own damage
calculation and return the damage to override the engine damage calculation, or return
a negative damage value to use the engine damage calculation.
[color=yellow]3/21/2006 - grimson[/color]
A small fix to ApplyDamageBonuses(), the race damage of a weapon was applied to the final
damage instead of the weapons base damage.
[color=yellow]3/20/2006 - giwo[/color]
Fixed a glitch in the CPExtendedStats packet.
Modified CPIPopupMenuSelect to prevent opening the paperdoll of a non-human.
[color=yellow]3/20/2006 - giwo (0.98-3.5n [3.6 RC])[/color]
Fixed an issue with CPExtendedStats causing statlocks not to display in the stat window.
Modified CChar::skilllocks and atrophy to save stat values to the worldfile.
Fixed an issue with CChar::skill value causing possible data corruption.
Fixed an issue causing the Backpack entry on a popup menu to display as selectable when the character
should not have a pack (IE a non-pack animal).
Made CBaseObject::SetWeight() a virtual function and overloaded it in CChar and CItem.
Modified CChar::SetWeight() to automatically Dirty our object for a statwindow update.
Simplified some DropItem() handling.
Moved CBaseObject updateTypes to CChar as there is only one type of item update, and added
a ClearUpdate() function to reduce superfluous packet sends.
[color=yellow]3/20/2006 - grimson[/color]
The JS item property .devinelock was sent as INT though it is a bool.
Some small fixes to the tweak menu for items, this still had parts for a non existant MoreB
value in it which shiftet some parts off, this also includes updated dictionaries.
[color=yellow]3/19/2006 - grimson[/color]
Renamed Get/SetElementResist() to Get/SetResist as we now handle all resistance types in it.
Removed SetDef(), GetDef() and the def variable from CBaseobject.cpp and store armor values
as physical resistance together with the other resistance values.
Removed calcElementDef(), getElementDef and checkElementDef from combat.cpp and handle all
defence calculations in calcDef(), getArmorDef() and checkDef().
Removed JS char property .armour and item property .def, added a new method for chars and
items .Resist(). That method takes either one value, the resistance type and returns the
resistance value of that char/item, or two values, the resistance type and the amount the
resistance value should be set to.
JS changes:
Updated JS scripts to use the new .Resist() method instead of .def/.armour
Current resistance types are:
1 - Armor
2 - Light
3 - Water
4 - Cold
5 - Heat
6 - Energy
7 - Poison
[color=yellow]3/19/2006 - giwo (0.98-3.5m [3.6 RC])[/color]
Moved create menu structs to skills.h as they don't need to be in global scope.
Fixed several issues with pack horse handling
Modified DropOnNPC so GM's can drop items directly on an NPC to be placed in their pack.
Modified response handling and removed some superfluous code.
Fixed a crash when UOX3 shut down due to an invalid directory entry.
Locally declared vector3D line2D and line3D as they are only used in lineofsight.cpp
Fixed water NPC's swimming under statics (bridges).
Fixed some false positives that were being generated by point3::Mag3D() by using a larger storage container.
[color=yellow]3/18/2006 - giwo (0.98-3.5l [3.6 BETA])[/color]
Fixed an issue causing GM yell messages with trigger words in them not to be broadcast.
Added and made use of a WanderTypes enum throughout the source.
Added housekeys.dfn to dfndata/items/ and made house creation rely on the script entries therein.
Optimized NPC walking a bit, and moved NPCWander handling into its own function.
Further updated and modified calc_walk() and AdvancedPathFinding() to handle the Z plane.
Removed CMovement::HandleRegionStuffAfterMove() as it was superfluous.
Rewrote CMovement::OutputShoveMessage() to fix several minor issues.
Updated CMovement::MoveCharForDirection() to reduce extra function calls and make use of CMapHandler::ChangeRegion()
Added NEWBIE option to JS SET command.
[color=yellow]3/18/2006 - grimson[/color]
Fixed CHandleCombat::calcDamage() I was submitting the base damage to the defense calculation.
[color=yellow]3/18/2006 - grimson[/color]
Another change to CChar::Damage(), if the attacker becomes criminal make the owner of it
criminal too.
Changed CHandleCombat::ApplyDamageBonuses() so that elemental damage is doubled when the
race is weak to that element, also double magic damage only on NPCs.
Changed CHandleCombat::Kill() so that only not tamed animals eat their victims.
[color=yellow]3/18/2006 - grimson[/color]
Changed CChar::Damage() to also display the damage to the owner of the attacker, so a
player can also see the damage his pet does.
[color=yellow]18th March, 2006 - Maarc[/color]
Removed some unused properties/methods of the console that have never been used
Begun construction of some placeholder code for party related works, not committing the factory code until some testing can occur first
Essentially, this just updates the handling for it which currently does nothing, and gives an insight into how it would be done
[color=yellow]18th March, 2006 - Maarc[/color]
Code
Adjusted SE_ApplyDamageBonuses and SE_ApplyDefenseModifiers as they were using the same parameter for attacker and defender
Documentation
Updated style sheet
Reordered character methods so that it matches their declaration in code
Added placeholder entries for a number of character methods
Added a couple of methods to characters
Removed character methods that did not exist any more
Updated the character methods page under the hood so that it's more readable, and takes better advantage of style sheets
[color=yellow]3/18/2006 - grimson[/color]
I only added part of the ApplyDefenseModifiers() and ApplyDamageBonuses() changes to CVS,
fixed it now.
[color=yellow]3/18/2006 - grimson[/color]
Changed ApplyDefenseModifiers() and ApplyDamageBonuses() to make shure they return ints.
Changed SE_ApplyDamageBonuses() and SE_ApplyDefenseModifiers() to fix invalid damage values
when a script sends float values.
Changed criminal() so it also takes the murderer state into account, as this overrides the
criminal flag.
JS:
Updated MagicDamage() in level1targ.js, it now uses the new functions and should be
equal to the source version of MagicDamage().
[color=yellow]3/18/2006 - grimson[/color]
cScript::OnEquip() and cScript::OnUnequip() were adding the parameters in the wrong order.
[color=yellow]3/17/2006 - grimson[/color]
Changed AdjustRaceDamage() to also use the new ApplyDefenseModifiers() function.
[color=yellow]3/17/2006 - giwo (0.98-3.5k [3.6 BETA])[/color]
Modified Gates so they are decayable by default, and will only decay if decayable.
Updated GM and Counsellor privs in commands.dfn, also placed a bit guide for the PRIVS value.
Fixed LoS checks on the Z plane in multis.
Fixed an issue causing GM broadcasting (! then space) not to function.
Removed some superfluous speech code.
Changed the command YELLALL to YELL
Removed several old DFN tags that were no longer used.
Removed default PRIV=0 tag from baseitem.dfn, as it would unset decayable value.
Changed PRIV1= tag to PRIV= in npc.dfn.
[color=yellow]3/17/2006 - grimson[/color]
Catch negative damage values in cMagic::MagicDamage() and apply 1 damage in that case.
[color=yellow]3/17/2006 - grimson[/color]
Moved defense modifications into CHandleCombat::ApplyDefenseModifiers().
Moved damage bonuses into CHandleCombat::ApplyDamageBonuses().
Moved the calculation of the hit location from CHandleCombat::DoHitMessage()
into CHandleCombat::CalculateHitLoc().
Added ReactOnDamage() to CCHar, currently it only makes the char attack the
char that inflicted the damage.
Reduced CChar::Damage() to show, the damage, apply the damage, handle the
reputation effect, the peace breaking effect and the chars death.
JS changes:
New JS functions:
damage = ApplyDamageBonuses( damageType, attacker, defender, fightSkill, hitLoc, baseDamage );
Note: Attacker and defender need to be valid chars.
damage = ApplyDefenseModifiers( damageType, attacker, defender, fightSkill, hitLoc, baseDamage, doArmorDamage );
Note: Attacker can be NULL, fightSkill will then be ignored.
New char function:
mChar.ReactOnDamage( damageType, attacker );
Note: damageType is currently unused.
Changed char function:
mChar.Damage( amount, attacker, doRepsys );
[color=yellow]17th March, 2006 - Maarc[/color]
Changed the INI loading code so that it uses a Script rather than custom code
[color=yellow]3/17/2006 - grimson[/color]
Changed CPICreateCharacter::newbieItems() so that it uses the newbie.dfn entrys [DEFAULT MALE] and
[DEFAULT FEMALE] to add the basic clothing to new chars, and added those entrys to newbie.dfn.
Changed newCarveTarget() so that it uses the new [CARVE HUMAN] entry from carve.dfn to create the
body parts, and added this entry to carve.dfn. Note: the second value used on the ADDITEM tags
in the [CARVE HUMAN] entry is not an amount, it's the dictionary entry used for naming the body
part.
[color=yellow]3/16/2006 - giwo (0.98-3.5j [3.6 BETA])[/color]
Fixed an issue with AdvancedPathFinding() causing NPC's to flee constantly.
Fixed an issue with NPC fleeing that checked against Strength rather than MaxHP.
Defaulted weather damage to every 60 seconds (rather than every second)
Fixed an issue causing a message to display damage taken by weather when no damage was taken.
Fixed an issue with CRace causing a race with no elemental damage types to have most/all elemental damage types.
Fixed a server crash in magic.
Fixed an issue causing items in a paperdoll to not be targetable.
Fixed an issue with LoS causing items to not block on a diagonal plane.
Fixed an issue causing multi's not to block LoS.
Minor fixes, cleanups, and optimizations to LineOfSight.
Modified DoubleClick() so a character inside a multi can open an item outside a multi (as long as he can see it).
[color=yellow]16th March, 2006 - Maarc[/color]
Updated playDeathSound to simplify some of the code for males/females
Updated code so that we don't use MFLAGGET/MFLAGSET - apparently we have a std::bitset class that we can use! Also makes it somewhat more readable as well. Cheers Punt for the suggestion.
Renamed __ACCOUNTSADM_BLOCK__ to CAccountBlock
Removed dead code from accounts (stuff that was just never called at all)
Removed Get/Set Word/Bit/BitRange from CBO, as it's not being used
Removed genericDWords from CBO, as they're not being used, and are largely superfluous with custom int/string tags in JS
[color=yellow]3/15/2006 - giwo (0.98-3.5i [3.6 BETA])[/color]
Fixed an issue causing pet guarding on items in a house not to function.
Fixed an issue causing boat items not to get added to the multi.
Cleaned up CPIDoubleClick::Handle() routine.
Fixed an issue allowing players to place their items in invalid locations.
Fixed a possible issue causing doors to block LoS to themselves.
[color=yellow]3/14/2006 - giwo[/color]
Fixed a server crash caused by my recent changes to Location-Targeting spells.
[color=yellow]3/14/2006 - giwo (0.98-3.5h [3.6 BETA])[/color]
Fixed a combat issue allowing enemies to fight if on the exact same location but a different Z.
Modified guard handling so when guards are globally deactivated any existing guards will not teleport.
Fixed an issue causing NPC's to be invisible.
Fixed some issues causing items behind a door to be within a characters LoS.
Adjusted erroneous Z values in house.dfn (Causing outer doors to not be part of the multi).
Added a LineOfSight() check to prevent opening containers on the other side of walls.
Modified the inMulti() routine to take into account tile height.
Simplified newCarveTarget() a bit.
Fixed a possible issue when calculating multi tile heights.
Fixed an issue causing Characters to "fall" immediately after being placed on their new boat.
Further cleanups and rewrites to CMulHandler and its related structures.
[color=yellow]3/15/2006 - grimson[/color]
Added PHYSICAL to WeatherType enum, so we can also use it represent physical damage.
Changed CChar::Damage() to handle armor and resistance effects, it also handles the repsys,
peace breaking, elemental weakness, displays the damage, creates a reaction if an attacker
is given and calls CChar::Die() if the hp drop below 1. It takes the following values:
SI16 damageValue - The amount of damage to be done.
CChar *attacker - The char that caused the damage.
bool doRepsys - Do reputation handling (criminal, murderer, karma and fame).
WeatherType damageType - The type of damage, use NONE to ignore armor/resistance, use
PHYSICAL to use normal armor, anything above is elemental damage.
SI08 hitLoc - The hit location, use 0 for the complete body or -1 to randomly
calculate the hit location.
UI08 fightSkill - The skill used to create the damage.
bool doArmorDamage - Damage the armor part that has been hit.
The JS function .damage can also take all of these values.
Changed CChar::Die() to handle the death of chars, it takes two values:
CChar *attacker - The char that caused the death.
bool doRepsys - Do reputation handling (murderer, karma and fame).
Updated the usage of CChar::Damage() in most areas to reflect the changes and removed reputation
and death handling in those areas as this is now taken care of by CChar::Damage().
[color=yellow]3/14/2006 - grimson[/color]
Fixed item IDs for human corpses in newCarveTarget().
[color=yellow]3/13/2006 - giwo (0.98-3.5g [3.6 BETA])[/color]
Converted Numeric DFN's to a Signed Long rather than unsigned by default for *nix compatability.
Merged jr's fixes for cygwin compatability and fixing some minor gameplay issues.
Modified ModelBoat() to automatically move you off the boat (if near land).
Fixed a crash bug involving boats.
Changed several calls checking against type IT_PLANK to CanBeObjType( OT_BOAT ).
Fixed an issue causing boat holds to "explode" when opening them.
Fixed an issue causing containers inside containers on the ground to be "too far away".
[color=yellow]3/13/2006 - grimson[/color]
Changed CBaseObject::SetWeight() and CBaseObject::SetID() so they also update the weight
of the container the item is in, when it is an item and when it is within a container.
[color=yellow]13th March, 2006 - Maarc[/color]
Altered the CBO resistances code to use an array rather than a number of variables
Note that we're still only saving out a subset of these resistances, because only a subset ever get checked at the moment
This could easily change in future, with people wanting to use other elemental stuff
Adjusted CItem::CopyData() so that it copies all the WeatherDamage values instead of only a couple
Upgraded the container size on weatherBools, as the number of weather entries has moved beyond a UI08 size
[color=yellow]3/13/2006 - grimson[/color]
Changed CPICreateCharacter::newbieItems() so that the default items aren't placed inside
the players backpack until they have their final ID, to prevent the adding of wrong weight
values.
[color=yellow]3/12/2006 - grimson[/color]
Changed the z value for various LineOfSight() calls so that we actually check whether
we can see the face of the targeted char instead of his feets.
[color=yellow]3/12/2006 - grimson[/color]
Added element resistance calculation to weather damage.
Fixed calcElementDef() and getElementDef() so that the chars basic element resistance
is always added.
Changed MagicDamage() so that we always do at least a little bit of damage.
[color=yellow]3/12/2006 - grimson[/color]
Removed DamageTypes enum and added POISON to WeatherTypes.
Renamed DamageResist functions into ElementResist and moved them to cBaseobject.cpp.
Renamed DFN tag DAMAGERESIST to ELEMENTRESIST and use it also for items.
Added DFN tag POISONDAMAGE to items so that they can also do poison damage on attacks.
Added functions calcElementDef(), getElementDef() and checkElementDef() to combat.cpp
to calculate the resistance against elements similiar to the def value of armor.
Changed AdjustRaceDamage() to also take into account the elemental resistance of the target.
Use calcElementDef() in MagicDamage() similiar to calcDef() in calcDamage() to take the
elemental resistance into account.
[color=yellow]3/12/2006 - giwo (0.98-3.5f [3.6 BETA])[/color]
Removed CMulHandler::AverageMapElevation() as it was superfluous.
Removed CTileUni height in favor of top, to reduce calc_walk() calculations.
Removed CTileUni id as its use was unnecesarry.
Rewrote CMovement::calc_walk() to improve overall readability and speed.
Merged CMovement::calc_WaterWalk() with calc_walk().
Removed higher() as UOX_MAX() does the same thing.
Removed CMovement::validNPCMove() as it was superfluous.
Modified house placement to make it impossible to place a house on the ocean.
[color=yellow]12th March, 2006 - Maarc[/color]
Changed some id >= 0x4000 comparisons to CanBeObjType( OT_MULTI ), for clarity
Fixed a bug with applying NPC sections where if you specified ALCHEMY values, it would fail to apply correctly
[color=yellow]3/11/2006 - giwo (0.98-3.5e [3.6 BETA])[/color]
Fixed an issue causing items with no layer to not change the weight of a character.
Fixed an issue causing spells that require a targeted location not to function.
Fixed an issue allowing one to build a house or boat far from their location.
Fixed an issue allowing one to build a multi directly on top of another multi.
[color=yellow]3/11/2006 - giwo (0.98-3.5d [3.6 BETA])[/color]
Removed CChar::TempWeight() as it was superfluous.
Fixed an issue causing Trade Windows to add weight to characters.
Fixed some minor issues with weight calculations.
Removed CChar:: bools2 and made more use of the bools value.
Renamed CMapStuff to CMulHandler to better describe its function.
Renamed MapStaticIterator to CStaticIterator to meet class naming standards.
Renamed MultiItemsIndex to MultiItemsIndex_st to meet structure naming standards.
Removed MapData_st fileSize as it was superfluous.
[color=yellow]3/11/2006 - grimson[/color]
Fixed a bug where buying the whole stock of an item deleted that item from the vendors container.
[color=yellow]3/11/2006 - grimson[/color]
Added new ini setting:
USECHARRESISTANCE=# If this is set to 0 the chars resistance won't increase by itself.
Slowed the increase of resistance quite a bit down.
[color=yellow]3/11/2006 - grimson[/color]
Added in first versions of fire, cold, energy and poison resistance, it's currently used
in cMagic::MagicDamage() and cMagic::PoisonDamage(). You can set the resistance for npcs
using a new DFN tag:
DAMAGERESIST=# # # # Where the first number is fire, the second cold, the third energy
and the last number poison resistance.
The resistance for a damage type will rise everytime you get hit by this damage type, but the
higher your resistance already is the slower it will rise.
[color=yellow]3/11/2006 - grimson[/color]
Removed version number for chars.
Added .tempWeight JS property to chars, so you can safely modify the weight of chars in scripts.
Added calcLowDamage() and calcHighDamage() functions to combat.cpp and use them in
CPStatWindow::SetCharacter() to set the DamageMin and DamageMax values.
[color=yellow]3/11/2006 - grimson (0.98-3.5d [3.6 BETA])[/color]
Added a version number to chars, it is defined in DEFCHAR_CHARVERSION and use it in
CChar::DoVersionUpdates() to allow forced updates. Used this to force a weight recalculation
on possibly bugged chars.
[color=yellow]3/11/2006 - grimson[/color]
Don't save the weight in cChar.cpp, it's already saved in cBaseobject.cpp.
Fixed a bug where items without a layer didn't add to the chars weight.
Fixed a bug in CWeight::calcCharWeight() that added the weight of the backpack
twice.
Changed CMapHandler::Load() so that PostLoadProcessing of chars is done after
PostLoadProcessing of items, or else the forced recalculation of the chars
weight doesn't work.
[color=yellow]3/10/2006 - giwo (0.98-3.5c [3.6 BETA])[/color]
Modified CMapStuff SeekLand() and SeekTile() to return a reference rather than force one to pass an object to set.
Modified CMapStuff SeekMulti() to return the length rather than force one to pass a value to set.
Removed MapStaticIterator::GetTile() as it was superfluous.
Removed CMapStuff IsTileWet(), DoesTileBlock(), and IsTileSurface() as they were superfluous.
Removed CMapStuff TileMem and MultisMem, replacing them with functions to return the same data.
Changed MultiItemsIndex lz and hz to SI08 values.
Changed MapStaticIterator GetPos() to return an SI32.
Removed MapStaticIterator tileid as it was superfluous.
Modified UOXFile::eof() to return a bool rather than an int.
Miscellaneous minor changes and cleanups.
[color=yellow]3/10/2006 - grimson[/color]
Added two sysmessage when feeding a pet.
[color=yellow]3/09/2006 - giwo (0.98-3.5b [3.6 BETA])[/color]
Fixed a crash when using ClilocMessage().
Fixed an issue when climbing stairs.
Fixed some issues with TriggerWord handling (more work needs to be done on this).
Modified A* Pathfinding to work properly with our NPC's PathToFollow queue.
[color=yellow]3/09/2006 - Xuri[/color]
Fixed two nearly 8 year old UOX3 bugs (one slightly more serious than the other - thanks Maarc!):
GINSENG was incorrectly spelled as GINSING in spells.dfn
Some Z coords in locations.dfn used values higher than 127 instead of negative values
Moved foodlists.dfn into the itemlists folder, and replaced the FOOD= tags in the same file with FOODLIST= tags
[color=yellow]3/08/2006 - giwo (0.98-3.5a [3.6 BETA])[/color]
Began rewriting .mul file handling.
Fixed an issue causing a possible crash with malformed JS scripts.
Removed several superfluous functions from UOXFile class.
Updated CTile and CLand to properly read in tiledata.mul
Modified .mul file structures to meet struct naming standards.
Changed static tile reading code to allow a variable number of statics.
Fixed several issues with mapdiff and staticdiff handling.
Added A* Pathfinding routine (note that it is not used in current code,
as there are known compatability issues).