Show core-changes-old.txt syntax highlighted
04/13/1999 - POL071
==========
files in data/ will use ".txt" extension
existing .dat files will be converted automatically
Boats are no longer broken (objtype/graphic holdover)
Boat components will be created non-movable
Both attacker and defender must be visible for attacks to occur
Weapon templates can now share the same objtype
(this is a temporary solution, pending a bit of rework)
Holds use the correct gump (itemdesc.cfg)
Script scheduler modified to improve performance
Item decay scheduling modified
04/09/1999 - POL070
==========
Added npc::Wander() - moves, usually forward, sometimes turns
Added ai/killpcs.src, made default_AI redirect to these for some monsters
Another try at making corpses unmovable.
NPCs will be default only pay attention to spoken text @ 1 pace away
Boat components will be set for no-decay :)
Boats should respond to "right", "left", "drift right", and "drift left"
Tests for 'walk-on' scripts will no longer depend on the uo client files
Merchants will run critical, to be more responsive
SendBuyWindow should handle larger inventories
Output trimmed in several scripts
coun, seer, and gm textcmd directories now exist
MoveToward/RunToward will now try adjacent moves if a direct move is blocked
(doesn't work yet..oops! take a look, it's funny)
Client encryption keys are now read from POL.CFG.
Client 37 supported; core now supports RemoveTrap and Stealth skills.
'invul' priv/setting added.
PC corpse decay will dump contents to the ground; all others will not.
The server should cope with T2A installations with no VERDATA.MUL
Added uo::GetObjtypeByName( name ) - uses NAME prop from itemdesc.cfg
Doors are now configured in itemdesc.cfg
CreateItem.. functions will refuse to create a nonstackable with amount > 1
Items now have a ".decayat" member. Set to zero to disable decay,
or gameclock() + number_of_seconds to make an item decay in the future.
Added uo::GetEquipmentByLayer( character, layer )
0x3ff will be the highest allowed mobile graphic
non-'movable' items will no longer decay.
03/30/1999 - POLC069
==========
NPC corpses will contain an "npctemplate" property (use GetObjProperty)
".destroy" text command moved to a script
"misc/oncreate.src" will run critical on character creation.
- this is where initial equipment should be created.
"item.movable" added - default depends on item type
Added option to POL.CFG: "LogScriptCycles" If set to 1, a breakdown of
how many instructions per script were executed will be written to pol.log
Item decay is in. Specify 'DecayTime' in minutes in itemdesc.cfg per
object type. The default is 10 minutes.
Corpses are no longer "SaveOnExit 0"
Split OBJECTS.DAT into POL.DAT, PCS.DAT, PCEQUIP.DAT, NPCS.DAT,
NPCEQUIP.DAT, and ITEMS.DAT. Each of these contains a descriptive comment.
Added uo::ListHostiles( character, range, flags );
"--lan--" in servers.cfg will use your LAN IP address (192.168.*, 10.*)
'const' declarations can be specified in .EM files
03/23/1999 - POLC068
==========
Added "character.ar_mod" AR modifier (use same as strength_mod, etc)
Added ".setarmod" text command to test
Added uo::DisconnectClient( character ) [note still no way to ban]
Added ".kick" text command to admin
Scripts waiting for a menu selection will return if the client disconnects
Added "character.weapon" returns weaponref to equipped weapon
Added "weapon.skillid" returns SkillId for a weapon
Corpses should be immovable, by clients and scripts
[I'm not sure what happens if a corpse is on a moving boat --
has anyone tried?]
".create" implemented as a script (builtin renamed to ".i_create")
The structure returned by SelectMenuItem2() will contain the color
Tweaked loot.inc so it doesn't create hundreds of individual gold pieces
03/19/1999 - POLC067
==========
SaveOnExit logic will now use objtype, not graphic
Objtype is specified in the key-position in itemdesc.cfg
This means only one objtype can be specified per element.
Itemdesc.cfg still has the ObjType 0xHHHH entries, for compatibility.
object.facing is now writable.
Added cfgfile::GetConfigStringArray
You can buy stuff from merchants. Try ".createnpc merchant"
- See merchant.src, mrcspawn.src, mrcspawn.inc, mrcspawn.cfg
- It's not complete/perfect yet, but works for the basics.
- The whole merchant inventory spawn thing is overly complex; considering
making each merchant NPC AI script respawn its own inventory, but
that's all scriptside, so easy to change later
03/09/1999 - POLC066
==========
Fixed server AV on skills window opening
Added uo::GetRegionString() for config data per resource-region.
Reordered parameters of GetHarvestDifficulty and HarvestResource.
Character creation will be rejected if a stat was specified < 10
Stats will be stored as raw values, same scale as skills.
StrAdv, IntAdv, and DexAdv can be specified in skills.cfg.
- Format is "chance points", where chance is a percentage, and
points is a die-roll specification. Examples: "1.5 1d4", "75 1"
- advancement is done, but sometimes doesn't display the new value
Some additions to error messages displayed for bad die-roll specifiers.
Starting skills will start near (known bug) values specified.
02/05/1999 - POLC065
==========
Spells.cfg entries can specify "animation", the spell casting animation.
The default is 0x10
Added uo::PlayStationaryEffect( x,y,z, effect, speed, loop );
Added uo::DestroyRootItemInStorageArea( itemname );
Added os::system_rpm();
Weapons have 'quality' and 'hp' read-write properties.
Weapons also have a readonly 'maxhp' property, which is the calculation of
(template MaxHp) * (weapon quality)
Damage done is now (random damage) * hp / (template maxhp)
Added ".smember" test textcmd. ".smember quality", then target, will
show you "[targetted].quality" for example.
Non-projectile weapons will take 1 hp damage occasionally when they hit
(25% chance)
Movement will reset the swing timer if you have a projectile weapon equipped
02/03/1999 - POLC064
==========
Maps will display now, if they have a location set.
(see textcmd/test/makemap.src)
Map items have xwest,ynorth,xeast,ysouth,gumpheight,gumpwidth properties
Some fixes for boat creation.
Added uo::GetMapInfo(x,y)
Resource types are now defined in regions/resource.cfg, so others can be added.
02/01/1999 - POLC063 - Pol Core 063
==========
ecompile will check the environment for ECOMPILE_PATH_EM and
ECOMPILE_PATH_INC. If .em or .inc files are not found by
searching from the current directory, these paths will be
searched.
Objtype and Graphic ID are split; 'graphic' is now read/write,
while 'objtype' is read-only. 'objtype' can be anything from
0x0000 to 0xFFFF; Values above 0xF000 are reserved by the system.
'include/extobj.inc' defines some values.
Doors will use objtypes 0xF000 - 0xF003. These open in different
ways; it should now be possible to create all types of doors.
Ship components will use objtypes from 0xF010 to 0xF013.
Existing ship planks and holds will no longer function.
It is now possible to create objects with objtypes >= 0x5000
01/27/1999 - POLC062X - Pol Core 062 (Experimental)
==========
Added 'enum' facility to script compiler (see above, and docs)
Added array( 1,5,9,... ) syntax to script compiler/executor
- scripts which use this will only work with Core V062+
- Note, 'local a := array' now obsoletes 'local a array'
Next non-experimental release after a script/config release can
be made.
01/26/1999 - POLC061X - Pol Core 061 (Experimental)
==========
Added ConsumeMana( who, spellid )
Added ConsumeReagents( who, spellid )
Added AppendConfigFileElement( configfile, elemtype, elemkey, properties );
Added UnloadConfigFile( configfile );
Added ListEquippedItems( who );
Added ListObjectsInBox(x1,y1,z1,x2,y2,z2);
Added ".writequip [tag]", writes your equipment to equip.cfg
Added to textcmd/test: ".consmana", ".consreg", ".listbox"
01/24/1999 - POL060Ex - Experimental, dev-only release
==========
That means, doesn't go to any test system! developer machines only.
Performance enhancements to ListMobilesInLineOfSight
Added uo::SendPacket( to_whom, packet_hex_string );
Added ".sendpacket" to test this
Reorganized locations of scripts.
AI scripts go in ai/
Skill-window skill scripts go in skills/
Item-use scripts go in items/
Startup scripts go in startup/
4 leftover scripts go in misc/
.inc files go in include/
(many .inc files are still in util/ - they'll be okay there for a while)
The only script in /scripts is start.src
Changes made to segment map into zones for item/mobile existence,
so 'search near' and line-of-sight type stuff will take far less time.
(This is why it's devel-only - we need to beat on this)
Only a few functions take advantage of this - the first step is to get
all the items and mobiles into the segmented storage.
01/23/1999 - POL059
==========
New event types: EVID_ENTEREDAREA, EVID_LEFTAREA, EVID_OPPONENT_MOVED
- More to do yet on these, but they will tell you whenever anything
enters or leaves a given range threshold
- See CSTGUARD.SRC, as always :)
spawner.src rewritten somewhat - more to come
It should be impossible to set an item's color to a color that will
cause a client crash.
Added cfgfile::GetConfigMaxIntKey(config_file)
uo::EnableEventType renamed to EnableEvents, takes an optional 'range'
Added uo::DisableEvents
Tachometer added. ".rpm" to view last minute's game-loop iteration count.
- "WatchRpm=1" in pol.cfg will display every minute, also.
- My P133/Win98 gets around 300, P166/WinNT gets around 560
(hmm, those are debug build.. release: ~800 P133/Win98)
- This number is highly dependent upon # of NPCs
Pirate.src changed to use EVID_ constants from include/eventid.inc
01/21/1999 - POL058
==========
Inscription updated to build smaller menus, and other fixes (DT)
Scripts updated to correct boolean-return values: (DT)
- tinkering
- creature_spellcast
- carpentry
Alchemy re-implemented as OSI-style. (DT)
Text commands split into command levels.
- textcmd has five subdirectories: admin gm seer coun player
- Characters can have a CmdLevel property in OBJECTS.DAT, which specifies
which of these they fall under. 'player' is the default.
CmdLevel _must_ be one of these, or not specified.
- All text commands moved to textcmd/admin
- All "built-in" text commands assumed to be admin level.
Client V 0.36+ (until they change again :) only will be accepted.
Equip.cfg now detects decimal/hex values for objtype and color, like everywhere else.
(hex only was by design, but not commented, and different from all else, so..)
Fixed a crash bug in compiler if ';' was the first effective statement
AI updated, consolidated further into default_AI with new natures (rje)
Several AI scripts removed; use default_AI instead.
Energy bolt unbroken (DC)
Healers will heal poison and damage (DC)
Field spells updated for different orientations (DT)
Fire field, poison field use walk-on scripts (DT)
Spellbook.src updated to put the scrolls in the spellbook (DT)
01/18/1999 - POL057
==========
Added SplitWords( text ): returns array of words in a string
(space-delimited only, no commas, sorry)
NPCs will have their template name follow "NPC" in objects.dat
NPC Templates can specify AttackSpeed, AttackDamage, and AttackSkillId
these are exactly the same as Speed, Damage, and SkillId properties in
weapon.cfg; in fact, a weapon template is generated for each NPC.
This has some repurcussions if you, say, create an ettin, then edit
npcdesc.cfg to change damage, then create another ettin. The new
values won't take effect until a system restart.
SelectMenuItem will return an error if the menu is too large.
AR can be specified in NPC templates, in standard die form. This will be
"rolled" on creation, then saved with each individual creature.
Spellbooks may be opened with the Open Spellbook macro, if the spellbook
is equipped or in the top level of your backpack.
Spells may be cast directly from spellbooks.
Formulas, animations updated for spells:
- Agility
- Bless (plays anim on caster?)
- Clumsy
- Cunning
- Curse
- Feeblemind
- Mass Curse
- Strength
- Weaken
- Greater Heal
Explosion spell added
01/17/1999 - POL056
==========
RequestInput( character, item, text ) - displays message, gets next input line
ReadGameClock() - elapsed game seconds counter
Alchemy, Inscription, Blacksmithy, Carpentry, Tinkering updated (DT)
Loot script updated (DT)
Recall rune double-click script added
Compiler updated; would sometimes not emit the "implicit return" at end of functions.
- this affected make_blacksmith_items, at least.
make_blacksmith_items updated to use (menuselection.objtype) (ES)
Script profiling info will only be displayed if ProfileScripts is set in watch.cfg
default_AI changed to kill creatures with unknown natures.
Corpses will have all the custom properties that the creature had when living.
Limited skill delay added.
- Set a "Delay" property in skills.cfg. Other skill use will
be disabled until 'n' seconds after the initial skill was begun. Note, we
may want to change this timer to start after the skill is complete,
or after the skill script calls Detach().
- Only Hiding has a skill delay at this time.
- No attempt is made to disable skill use in item-use scripts.
(So, you could hide, then turn around and use a hammer etc)
Net-negative stat modifiers should be handled correctly.
- If they would modify the stat below 1, it is assumed to be 1.
- the real modifier is "hidden" so scripts don't have to do anything special.
Fixed stat-modifying scripts (durations,amounts to be debated) (ES)
- Agility
- Bless
- Clumsy
- Cunning
- Curse
- Feeblemind
- Mass Curse (pretty major rewrite)
- Strength
- Weaken
The fix made was to change the stats by an amount, then change
them back by the same amount - this way, curse can cancel
bless, etc, but a weak curse will only partially cancel
a strong bless.
No attempt was made to fix the animations, which don't appear.
Added animations, sounds to the following spells:
- Cure
- Dispel Field
- Mana Drain (also, uses resist vs magery)
- Mana Vampire (also, uses resist vs magery)
- Mind Blast
- Flame Strike
Fireball spell added
Heal spell added
Greater Heal spell added
Damage changed on the following spells:
- Magic Arrow
- Lightning Bolt
- Harm
- Flame Strike
Damage messages for Earthquake are sent private (Thank you!)
strength, intelligence, and dexterity object members will reflect
the modified values, not underlying values.
Chain Lightning moved back to 7th circle
Meteor Swarm moved back to 7th circle
Docs updated for new UO.EM functions
'.objtype' is writable for mobiles. If world state is saved with this
modified, such modifications will become undone when the system reloads.
".setobjtype", ".showstats", ".powerup" added
01/16/1999 - POL055
==========
Timer granularity improved (scripts, combat timers, casting delay timers)
npc::Move/Run functions use the following formula for timeout:
after moving, sleep (1000 - dexterity * 3) milliseconds
minimum is 250 milliseconds.
If running, halve this (min. 125 ms)
Give me a better formula, and I'll use it.
os::sleepms( milliseconds ) added.
Castle Guards always run critical.
util/skillid.inc filled in. Scripts modified to use.
Pirate script added, equip.cfg updated with an outfit (Rob)
default_AI updated (trapper) (Rob)
Access violations will be written to the log file. Email any
that hit you to syzygy@pobox.com
"showadv" privilege/setting will show raw skill updates as they occur.
Comments at the top of OBJECTS.DAT will show mobile/toplevel item count.
Game time counter added (can't access from scripts yet)
01/15/1999 - POL054
==========
"SelectTimeout" option in POL.CFG. Set to 0 to hog the processor.
Added EquipFromTemplate(npc,template) - equips from EQUIP.CFG by name
Internal: build mode changed to multithreaded.
"--ip--" can be substituted for IP in SERVERS.CFG; uses the first
non-127.*, 192.168.*, 10.* IP address found.
Compiler bug fixed, where in some cases functions would be called incorrectly.
This afflicted skeleton and default_AI, and likely others, resulting in
ever-increasing memory usage and incorrect behaviour.
Telekinesis added (DC)
(I notice it's a bit too powerful: can take equipped items,
and items in any container - syz)
Detect Hidden to pit Detect Hidden versus Hiding (DC)
Skills updated to use non-difficulty-based CheckSkill:
Eval Int, Fletching, Healing, Item ID, Musicianship, Spirit Speak,
Taste ID, Tracking, Hiding
"Point Value" also increased on these.
(lumberjacking is and should be difficulty-based, due to resources)
Casting delay added. Delay, in milliseconds, can be set in CIRCLES.CFG.
Note, the delay is rounded to seconds ((delay+500)/1000).
This will be true until timer granularity in general is improved.
Also note, the animation isn't played long enough.
Client disconnect with target cursor active handled appropriately.
Added GrantPrivilege( chr, priv ), ".grantpriv priv" + target
Added RevokePrivilege( chr, priv ),".revokepriv priv" + target
(see docs for info on privileges/settings)
!!! Script "case" syntax modified to disallow bare-string tags. Misspellings
of things like UOBJ_PURPLE_POTION were being seen as strings, and
not flagged as errors. All scripts that used the offending syntax updated.
Changes to carpentry, tinkering, blacksmithy for repair
Loot on corpses added
01/12/1999 - POL053
==========
"color" is now read-write, for mobiles and items.
".mycolor", ".showcolor", ".setcolor" text commands added.
"name" is now read-write, for mobiles and items.
".setname" text command added.
If CheckSkill is passed a negative value for difficulty, it will make a
non-difficulty based skill check. If successful, 100% of points are awarded.
The percentage chance will be the effective skill (min 2, max 98).
In the future, perhaps different curves will be defined in SKILLS.CFG.
Characters can be deleted.
Mining updated (DT)
alchemy.src, alchemy2.src, drink_potion, eat, poison_skill updated (DT)
taming.src updated (DT)
Docs on Alchemy, Blacksmithy, Inscription, Tinkering added (DT)
Start of resource system - local depletions only, so far (see lumberjack.src)
Added GetHarvestDifficulty()
Added HarvestResource()
01/10/1999 - POL052
==========
"TemplateName" in NPCDESC is gone. The tag now follows "NpcTemplate", so NPCDESC.CFG
can be accessed through the CFGFILE module.
Updated all entries in NPCDESC.CFG to follow this format.
(Note many entries in NPCDESC still don't have "natures" matching default_AI,
so they just exit, and so stand around)
Added a default: clause to default_AI which syslogs when an unknown nature comes up.
".script" read-write property added to NPCs. (writing doesn't restart the script)
Added uo::RestartScript( npc )
Detect Hidden skill added (DC)
Earthquake spell added (DC)
Mana Drain spell added (DC)
Mana Vampire spell added (DC)
Object reference added to docs (help welcome, class hierarchy visuals esp.)
01/09/1999 - POL051
==========
Documentation added for 26 script functions
Changed many script names in NPCDESC to default_AI per Rob's instructions
Speech event types will be "speech", not "Speech"
Scripts updated to check for either of the above possibilities
Script errors in functions will display the line # of the error, not the function.
"engage" and "disengage" event types added (see docs)
Added EnableEventType( eventtype )
"damage" event type added
npc::move() can take a number. 0=N,1=NE,2=E, ..., 7=NW, 8=N, ...
(so, move( self().facing-2 ) turns left, for example)
See CSTGUARD.SRC for an example of a script using the new events.
01/08/1999 - POL050
==========
Internal: STLport used rather than MS STL
Added MoveItemToLocation( item, x, y, z )
Added MoveItemToContainer( item, container, x := -1, y := -1 )
Added boat::SystemFindBoatBySerial( serial )
Added EquipItem( character, item )
Added ".whereship" command (target ship deed)
Added ".equip" command
Added ".moveitem" command
Added ".movetocont" command
Items in bankboxes should be targettable
Light levels will be resent even if you don't move between transportation
Scripts that execute 500 or more "instructions" will have profiling information logged.
Files in the devel distribution will no longer be read-only
Script .ECL files will be included in the devel distribution.
AI scripts reorganized (Rob)
01/07/1999 - POL049
==========
Ship holds are now locked on creation, and associated with the keys.
First attempt at character logout on disconnect (no timeouts yet)
Scripts must now use program foo(param,param,..) .. endprogram to get arguments
SPELCAST.EM, SKILLUSE.EM, and ITEMUSE.EM are all history.
text command scripts can use program .. endprogram to get arguments.
All scripts converted to use program..endprogram to get args.
Hiding skill added (DC)
Healers added (DC)
Invisibility spell added (DT)
01/07/1999 - POL048
==========
All scripts updated to use function .. endfunction
".makeshipdeed" script added - creates a ship deed in your backpack (only 0x4000)
ship deeds can be used to place ships. They create keys and a deed certifying ownership.
the "." member operator will have higher precedence than the unary operators.
script functions can be called before they are defined.
unused script functions will not be included in .ECL files.
Corrected a precedence error in compiler - ev.text["bank"] will work correctly now.
01/05/1999 - POL047
==========
Fixed a compiler bug where 'default:' followed by 'endcase' would be flagged an error
os::syslog( text ) function added - logs to pol.log and prints to console
Entries in ITEMDESC.CFG can have more than one OBJTYPE property. Note that
the 'name' property in ITEMDESC.CFG is not used.
".objtype" is writable, for non-multi items only. Use with caution! This should not be
used to convert, say, an apple to a container.
Object types and serial numbers will be stored in hex format in data files.
"death" script will be executed on NPC death
"chrdeath" script will be executed on player character death.
- os::parameter() will return the corpse for each.
Many AI scripts updated (Rob)
SystemFindObjectBySerial( serial ) added - searches everywhere.
Hidden characters who take damage will become unhidden.
ListMobilesNearLocationEx(x,y,z, range, flags) added
Add together constants in LISTEX.INC to build flags.
CreateItemInContainer( container, objtype, amount ) added - almost forgot!
01/03/1999 - POL046
==========
Some changes to resurrection so the rezzed won't see peacemode ghosts
Newly killed characters should now see nearby ghosts.
Beginnings of a hidden flag - ".hidden" property added to mobiles
The following functions ignore hidden characters:
- ListMobilesNearLocation
This means firefield etc won't affect hidden characters,
for the time being.
- ListMobilesInLineOfSight
The following actions unhide a character:
- Movement
- Speech
- Casting a spell
- Using a skill
- Double-clicking any item that 'RequiresAttention'
(this isn't quite right - just a quick fix to allow container use)
Note again that this is just a start - it doesn't take much thinking for
me to come up with something that won't work right with hiding. But
here's something to bang on.
".hideme" text command added.
01/02/1999 - POL045
==========
case..endcase script construct added
Taste Identification script updated to use case..endcase
01/01/1999 - POL044
==========
foreach..endforeach script construct added
Local variables in nested blocks can override local variables in their parent blocks.
Major performance improvement to script engine
01/01/1999 - POL043
==========
Added ListMobilesInLineOfSight(object,range) - lists non-ghosts in line of sight
within 'range' squares of object.
ListMobilesNearLocation will no longer include ghosts
Added ListGhostsNearLocation(x,y,z,range)
Performance updates to script engine. Scripts must be recompiled to benefit.
Converted reflect_spell.src to reflect_spell1.inc
Made ebolt use reflect_spell1.inc
Added ListItemsNearLocationOfType(x,y,z,range,type)
01/01/1999
==========
Rob:
Tidied up creature include files, plus gave a makeover to
default creatures.
No guarantees that the pack predators work as expected -- I
didn't fix any bugs. This was a code cleanup only, but the
default_pack_predator is still a mess.
12/31/1998
==========
Rob:
added strprops to npcdesc.cfg:
leaderText
buddyText
targetText
aggression (to replace the 'p' strprop)
(by the way, critters now also use strprops "nature" and "alignment")
split up creatureRoutines.inc into:
spawn.inc
conflicts.inc
buddies.inc
creature.inc
all of these conform to the new eScript syntax.
changed my scripts to conform to the new compiler, etc:
robs_prey.src
robs_predator.src
skeleton.src
robs_pack_predator -- has bugs (Dan?)
added harm spell (untested)
12/31/1998 - POL042 (compiler only)
==========
Changed the order of cleanup on shutdown, to correct an AV condition.
Fully-bracketed syntax now for all constructs:
WHILE .. ENDWHILE
REPEAT .. UNTIL (replaces DO .. WHILE due to ambiguity)
FOR .. ENDFOR
FUNCTION .. ENDFUNCTION
Scripts must use one form or the other, per type.
Non-bracketed forms are deprecated. All tests in testsuite have been
converted to use the new forms.
Some escript docs updated
Default parameters for functions can consist of any optimizable expression.
12/30/1998 - POL041
==========
Added Distance( obj1, obj2 )
NPCs will now get their scripts from the script repository, rather than
each loading their own copy of the .ECL file.
12/30/1998 - ecompile.exe only
==========
Compiler change - 'const' variables will be treated as constants. They are also
now case-sensitive. This broke a few of the AI scripts.
This has made .ECL files smaller, and will result in lower memory usage.
Compiler changed to better handle expressions within brackets
12/29/1998 - POL040
==========
"LOS blocked by" diagnostic messages removed
Start script and spawned scripts have access to cfgfile module
Light regions can be defined in regions/light.cfg
Added SetRegionLightLevel( LightRegionName, LightLevel )
Added SetGlobalProperty( PropertyName, PropertyValue )
Added GetGlobalProperty( PropertyName )
Added EraseGlobalProperty( PropertyName )
Added EraseObjProperty( Object, PropertyName )
Added ".setlight", ".getglobal", ".setglobal", ".eraseglobal",
".eraseobjproperty" commands.
12/29/1998
==========
added lotsa NPCs
added default_pack and default_pack_predator
added .kill command
modified .createnpc to give target
added Skeleton (Rob)
added .goto command (.goto character_name)
DefaultAI now has tamed commands built in. Most are working (except Guard)
added summon creature,summon daemon,blade spirit,e-vortex, and summon elemental spells
added a bit 'o text to the tillerman in boat.src (Rob)
added vortexAI -- chases the smartest guy around, and won't retreat
added a 10-minute autosave
12/29/1998 - POL039
==========
SaveWorldState() added
".savenow" command added
Implemented a possible fix for server crashes on NPC death.
Fixed a server crash bug when an NPC script resulted in its death.
12/28/1998
==========
create musicianship skill (Rac)
fixed healing (Rac)
12/27/1998 - POL038a [ecompile.exe only]
==========
Fixed a bug in the compiler. Scripts which used FOR loops would not clean up
correctly, resulting in ever increasing memory usage if scripts ran a long time
(ie NPC control scripts)
12/27/1998 - POL038
==========
SetObjProperty now accepts value types of String, Integer, and Real.
GetObjProperty will return the same type of object as was Set (String, Integer, or Real)
MARK.SRC, GATE.SRC, and MOONGATE.SRC have been updated. Note CInt() is still used when
reading marked runes, in order to work with old marked runes.
All properties previously created are assumed to be Strings.
Skill## properties are optional in OBJECTS.DAT, and default to 0 if unspecified.
Skill## properties are not written if they are 0.
Found and fixed resource leak exposed by NPC death.
12/26/1998 (DT)
==========
created default_predator, default_prey, and default_mean_predator AI:
default_predator: depending on hunger level, will attack prey, non-predators, or other predators. Eats the meat whn done
default_prey: runs from all predators
default_mean_predator: like default_predator, but will always attack humans. (use for ettin, ogre, etc)
added a bunch of creatures based on these scripts
modofoed .makeregs to do all the regs
12/26/1998 - POL037
==========
Fixed nasty server halt bug exposed by "NPCs don't make ghosts" update.
12/26/1998 - POL036
==========
Killed NPCs will be destroyed, rather than sticking around as ghosts
-- this sometimes leaves an orphan (leaked) object, but that's a smaller
leak than _always_ leaving an entire ghost, with running script. :)
Added RawSkillToBaseSkill();
Added BaseSkillToRawSkill();
-- note, both of these use a different "skill" scale from GetSkill.
if the skill is 12.4, the "base skill" is 124. (GetSkill would return 12)
GetSkill returns _effective_ skill, which is just a simplified number from
0 to 100+, modified by stats etc.
-- These are slightly broken - RawSkillToBaseSkill(BaseSkillToRawSkill(x)) should
always evaluate to x, but often evaluates to x-1. Not sure what to do about this.
IN operator for arrays added. "if (5 in arrvar)".
".ident", ".where" ".action", ".bcast" text commands moved to script
".resme" moved to script
os::set_debug() function added. "ecompile -i xx.src" to use.
uo::CreateNpcFromTemplate( template, x, y, z, override_properties ) added.
see textcmd/createnpc.src for an example
12/23/1998
==========
added clumsy, weaken, feeblemind, strength, agility, cunning (really the same spell)
added a few items to itemdesc so they'd disappear on shutdown
added bless, curse, mass curse
added tracking
created default_AI, default_mean_ai, and default_meek_ai. default is to attack only if there's a human nearby and hp < maxhp. Mean automatically attacks humans; meek automatically runs from humans
12/22/1998 - POL035
==========
Simple import facility added - imports and deletes data/import.dat if
present. misc/world.dor.dat is appropriate for this.
Itemdesc.cfg: "SaveOnExit" property, if specified as 0, will force a given
item type not to be saved with game state.
Boats can turn. They even convert tillermen and gangplanks, and rotate
passengers - but not items.
Boat scripts auto-start.
Boats respond to the following commands: (see BOAT.SRC)
forward, backward, turn right, turn left,
come about, furl sail, unfurl sail
12/21/1998 - POL034a
==========
Script compiler works again.
12/21/1998 (DT)
==========
added locked chests in carpentry
added restore mana potions in alchemy
added digging for clay (shovel on swamp)
added Hellfire potion
added stamina potion
12/20/1998 - POL034
==========
You can now open containers even if a skill or spell script hasn't Detach()ed.
Items can fire scripts when walked upon. Set WalkOnScript in ITEMDESC.CFG
Implemented Gate (see SPELLS/GATE.SRC and MOONGATE.SRC)
Duplicates in ITEMDESC.CFG are now detected; commented duplicates out.
Added ".createstack" text command
Added ".setskill" text command
Added ".makeregs" text command
Added uo::GetRawSkill(character,skillid);
Added uo::SetRawSkill(character,skillid,rawskill);
Enhancements to script execution engine to speed start-times.
Script compiler will look into 'include' files to determine if IF..ENDIF is used.
Script compiler will no longer include source code in output .ECL files.
Further optimizations to script compiler to reduce the size of .ECL files
The boat control script is underway.
Added boat::MoveBoatRelative( boat, relative_direction );
Added uo::RegisterForSpeechEvents( at_object, range );
Added uo::EnumerateOnlineCharacters();
Changes to properties for mobiles:
mana and stamina are now writable. Be nice!
strength_mod, intelligence_mod, and dexterity_mod added (read/write).
These are not saved with game state, so use for temporary changes.
I may yet add a "SetTempStatMod(chr,stat,howlong)" function, which the
system would automatically maintain. The advantage there is that faulty
scripts won't permanently grant stat mods, and stat mods _could_ be
recalculated from scratch.
12/19/1998 - POL033
==========
Projectile weapons now consume projectiles
Stackable items dropped into a container will be added to an existing
stack if the combined stack would be <= 60000 in size.
RandomDiceRoll() function added to UTIL.EM
Hex() function added to BASIC.EM
Doors are lockable, just as with containers.
Dropped items will have their Z-coordinate calculated, rather than believing the client.
Dropped items must be placed in an adjacent tile that the character could have walked to.
If you try to put an item somewhere, and it appears at your feet, it means the server
thought you weren't allowed to put it there.
Items dropped on boats will now move with the boat.
(There are still some oddities with items that are picked up, where an attempt
is made to put them somewhere invalid; but these are longstanding anyway)
Walking on water is no longer allowed, so it should be impossible to get stuck on the mast.
12/17/1998 - POL032
==========
Boats automatically figure out they should move you if you walk onto one
or teleport onto one. (Dropped items aren't handled yet) (If you .createnpc
an NPC on a boat, it won't move with the boat either, I just realized)
"locked" property (read/write) available on containers
(Should ITEMDESC include a "lockable" property for containers?)
locked containers will not be searched for reagents, and cannot be accessed.
"corpsetype" property available on corpses - the object type of the corpse when alive
Added PrintTextAbove( above_object, text );
Added PrintTextAbovePrivate( above_object, text, character ); // send only to character.
12/17/98
==========
Tinkering can now be used to make jewelry. Melt gold coins on a forge to make
gold bars, then use tinker's tools.
Tinkering can also do clay items. Use tinker tools on clay
Added jewelry enchantment (use inscription on jewelry, then gems for charges)
added corpse carving/chopping
12/16/1998 - POL031
==========
Numerous sweeping changes to support multis, particularly boats.
(hopefully this won't be called the "instability patch" ;)
Orcs won't blink when they attack or are hit. This is a temporary fix,
until that stuff is config-file driven.
MoveCharacterToLocation calculates the correct z-coordinate, based on the input
Z-coordinate. It is impossible to MoveCharacterToLocation to "under the map."
MoveCharacterToLocation will refuse to move a character into a blocked location
(blocked by a static object, a dynamic blocking object, or a multi)
npc::move() will refuse to move an NPC into walls.
some errors in z-calculation corrected.
Multi-handling added for Z-coordinates.
Multis are stored in MULTIS.DAT
TO UPDATE:
move all MULTIS to MULTIS.DAT
12/16/1998
==========
Got a start on glass working. Use 0x1036 (hay, soon to be called sand) on a forge,
and you get glass. Use tinkers tools on raw glass to make stuff. Tomorrow I'll
have shovels work on beaches to make sand.
Orcs work, sorta. Orcs will fight for dominance in the pack,
then start wandering around after their leader. They run away
when they get hurt. Next I want to add some speech, to see
if my speech system works for them. They still have the blinkies, though.
12/14/1998
==========
use_stuff modified:. Previously the config file key was just the
objtype that you double-clicked. I changed it so it looks for a
string of used.objtype + use_on.objtype. The problem is that
cstr(objtype) results are decimal, so the key for a skull
(objtype 0x1dae) used on a kettle (0x09ed) is "7598+2541".
This way you can have a many-to-many relationship with items.
A head on a kettle, a head on a guard (for a bounty), a
head on a stick (for a headcicle) etc.
cooking skill added
Set up an npc_speech script. This script checks 2 config files:
npc_speech and npc_speech_limits, and returns an array.
Element 1 of the return is the string containing the speech,
and element2 is a sound for the creature. If it can't find an
appropriate element it looks for a default phrase/sound for the
creature and returns that.
npc_speech has 2 elements: speech an dsound. The key to npc_speech
is multi-part: the objtype of the creature, the event, and an
index (so a creature can have multiple sayings for each event).
npc_speech_limits sets the range of this index.
12/13/1998
==========
bladed will carve kindling from trees
12/12/1998 - POL030
==========
Spells will consume reagents.
TargetCoordinates result will contain a ".item" member if an item was selected,
or a ".mobile" member if a mobile was selected.
It is no longer necessary to put "_OptionBracketed" at the beginning of scripts.
CreateItemInBackpack will add to an existing stack, if the objtype is stackable
and the resulting stack size would be <= 60000.
Changed "verdata" handling, which sped up startup considerable.
Added "multi" data loading, which slowed startup down again (but not as bad as before!)
".where", ".tele", ".bcast" - scripted text commands.
12/12/98
==========
Added fishing, mining, and lumberjacking
Made some changes to bladed to support carving of fish, and (eventually) kindling
12/11/1998 - POL029
==========
Spell words will be spoken, and "cast spell" animation will be played, on casting.
"include" script directive added for module inclusion. See CSTGUARD.SRC, DIST.INC
text commands are now scriptable. Put scripts in scripts/textcmd.
keys in config files may now be strings. All config file elements may be referenced
by string value; only those beginning in a digit (0-9) can be referenced by number.
character.backpack - access to a character's backpack.
target.objtype added to struct returned from TargetCoordinates
(should be useful for fishing, mining, lumberjacking)
12/10/1998 - POL028
==========
The script compiler will display the line number where errors are detected.
12/09/1998 - POL027
==========
Added functions to 'npc' module:
- WalkToward( object );
- WalkAwayFrom( object );
- RunToward( object );
- RunAwayFrom( object );
- TurnToward( object );
- TurnAwayFrom( object );
Added functions to 'uo' module:
- ApplyDamage( character, damage : real or integer );
// chooses armor, reduces damage, halves damage, applies what's left.
// plays "i'm hit" animation, and kills if out of HP.
Support for Tips added - create .TXT files in the TIPS/ directory.
script names passed to start_script and run_script_to_completion may
no longer have ".ecl" at the end.
12/09/98
==========
Created a magic reflect script. To use it set the parms, then do a
start_script( "spells/reflect_spell",parms) INSTEAD OF
doing animation and damage in your own script. The parms are an array as follows:
parms[1] = caster
parms[2] = cast_on
parms[3] = moving_effect
parms[4] = object_centered_effect
parms[5] = speed //for animatiom
parms[6] = loop //for animation
parms[7] = explode //for moving animation
parms[8] = rawdamage \
parms[9] = thedamage / don't use both of these, or both will be applied
parms[10] = scriptname
parms[11] = script_parms*
*Please Note!! If you use parms[11] -- the parameters to be passed to a script -- make sure script_parms[1] is the caster, and script_parms[2] is the target. These 2 parameters will be reversed if the spell is reflected. If you don't want them reversed, use a different array element!
Also, this won't work with lightening, so you'll have to do that one yourself.
Should I do the sound as well?
I still need to work on the animation timings.
updated meteor_swarm, ebolt, magic arrow, poison, flamestrike to use this script
added spell reflection spell
12/07/1998 - POL026
==========
Added functions to 'cfgfile' module:
- GetConfigString() - same as, replaces, GetElemProperty()
- GetConfigInt() - returns integer property, or an error
- GetConfigReal() - returns real property, or an error
os::start_script and os::run_script_to_completion now take a 'parameter' parameter.
os::parameter() added; access to parameter passed. See poisondamage.src
!!! start.src must be recompiled - for good measure, recompile everything.
Script functions will start return 'error' objects, which evaluate 'false'
and have a ".errortext" member. The three new cfgfile functions are the only
ones that will do so, so far.
Updated poisonfield.src, cure.src. Added poisondamage.src. They're not complete yet,
but mostly work.
Changed Wrestling's OBJTYPE in WEAPON.CFG so 'unused' tiles don't halt startup
CreateItem...(): ObjType limited to 2..0x3fff, Amount to 1..60000
added inscription
added firefield, poisonfield, wall of stone, and energy field
added dispel field
12/06/1998 - POL025
==========
Added NPC functions:
- SetOpponent( character );
- SetWarMode( boolean );
See CSTGUARD.SRC. Try asking a castle guard to fight!
(more stuff is on the way, but just to show what's possible now)
Added OS function:
- set_critical( critical ); - sets a script's critical flag
( if true, script runs until it blocks )
NPCs ignore speech of dead PCs.
sleep() and wait_for_event() return absolutely immediately if 0 passed as timeout.
12/06/1998 - POL024
==========
".goto x y z" text command added - transports you anywhere.
Dynamic Menus added: (see test/dynmenu.src)
- CreateMenu( title )
- AddMenuItem( menu, objtype, text );
- NOTE, the object type of a mobile can't be used in a menu.
Special values are required; see tracking.cfg
I may add a function to convert from mobile objtype to menu objtype.
Internal changes to menu selection to support dynamic menus
Changed how map height is calculated; .wheretest now tests equal for all current test cases.
Fixed Mark spell (DC)
Recall Spell added (DC)
12/05/1998 - POL023
==========
Updated a bunch of scripts for the distribution.
Filled in SPELLS.CFG, and moved some spell scripts from SCRIPTS to SCRIPTS/SPELLS
Fixed bug in SelectMenuItem so you can use menus more than once again.
Docs updated for new functions (not the three below though)
Docs on structures and arrays added
Added
- CheckLosAt( character, x, y, z ) can character see (x,y,z)? - see teleport.src
- Thinking of calling this CheckLosToLocation.
- CreateItemAtLocation( x,y,z, objtype, amount ) - see test/createat.src
- MoveCharacterToLocation( character, x, y, z ) - see teleport.src
12/05/1998
==========
Meteor Swarm spell added. (DC)
Chain Lightning spell added. (DC)
12/04/1998
==========
finally got the damned frame relay back up :P
fixed a bug in alchemy2.src
added success_sound and failure_sound to use_stuff
added detatch() to all applicable scripts
heal and greater heal added
12/03/1998 - POL022
==========
Added:
- Detach() - allows character to perform other actions.
- see sspeak.src for an example.
Internal changes to SelectMenuItem to allow Detach to work.
Discovered two key (and old!) classes had nonvirtual destructors; Fixed.
This will kill some tiny leaks, but may expose other bugs.. Just FYI.
Created a generic use_stuff script for use when item1 used on item2 = item3. This checks the use_stuff.cfg file for information on how
and what to use items on. You still need to associate the item with teh use_item script in itemdesc.cfg
(see use_stuff.cfg for details)
added Eval Int, camping, Mark spell
added Protection from Poison potion
12/02/1998 - POL021
==========
Added:
- TargetCoordinates() returns struct(x,y,z)
- EnumerateItemsInContainer(container) includes unlocked subcontainers
- ListItemsNearLocation(x,y,z,range)
- ApplyRawDamage (deprecates Damage)
- HealDamage()
see healdmg.src, listcont.src, listnear.src for examples
Added "desc" read-only property to Item - the same as from singleclicking.
Internal changes to single-click text formatting
Internal changes to target cursor handling to allow targetting equipped items
12/02/1998 - POL020
==========
Added:
- ListItemsAtLocation(x,y,z), returns array of items
- ListMobilesNearLocation(x,y,z,range), returns array of mobiles
- 10 used for z-range
Internal changes to Target to support (later) multiple active action scripts.
12/01/1998 - POL019
==========
Spell fizzle sounds, animation added (only on skill failure)
POL.LG2 will start recording script errors.
(I think you can't read this file while the program is running,
which may make it useless, unfortunately)
some fixes to script substring comparisons.
12/1/98
==========
added Poison spell
Alchemy was working, then I broke it again :P
11/30/98
==========
alchemy starting to work. Use mortar on reagent, then select a flask. Contents added to flask (use .props) to check. Click on flask and select brazier to condense potion.
For some reason I never got a success on skill check, so may be a bug.
11/29/1998 - POL018 Minirelease
==========
Added:
- PlayObjectCenteredEffect() (for flamestrike)
- PlayLightningBoltEffect()
11/25/1998
==========
Dave's Ebolt added (use mine) (Rac)
Lightening added (Rac)
Ebolt, CreateFood, Cure, ArchCure added (DT)
ItemID and Armslore added -- need some changes (DT)
Eating added (that was a tough one!) (DT)
Created a "zapper" item (0x0379f) to test Item ID skill
11/24/1998 - POL017 Minirelease
==========
Skill use and spell casting scripts can now access the 'cfgfile' module
11/24/1998 - POL016
==========
".log [text]" command added - writes a message to the log file
Items can now have unique scripts which fire on double-click instead of
their ITEMDESC.CFG script. These are called a "use script"
(better name anyone? action script?)
".setusescript scriptname" command added - sets a "use script" for an item
New property added to ITEMs: 'usescript'. This is read/write.
So, you can do stuff like:
item.usescript := "whatever"; // <-- MUST be a string. others ignored.
to make enchanted items or whatever.
See SHOWSTUFF.SRC and SETSHOWSTUFF.SRC for examples.
Added some more checking to configuration file reading; now, translations
(like SkillId in weapon.cfg) will flag an error if text is misspelled.
Also, poorly formed numbers will be flagged in error.
Added item quality and exceptional items to blacksmithy, carpentry, and tinkering (DT)
Added the rest of weapons and armor to config files (DT)
Added Armslore skill, but it's not quite working (DT)
11/23/1998 - POL015
==========
moved explosion potion into drink_potion, and fixed the sound so Rac wouldn't hit me ;) (DT)
added batch file to archive all files in pol tree to \pol\pol.zip Mon-Fri at 5:30 PM EST (DT)
updated tinkering to include complex items(DT)
Added lockable chest creation with carpentry (DT)
Added trap creatoin with tinkering (failure has 1 in 10 chance of hurting craftsman) (DT)
objects, items, and characters can now have their properties
queried in scripts with "dot" syntax:
character.serial
item.objtype
and so on.
properties in a UOBJECT:
x
y
z
objtype
color
serial
height
facing
properties in an ITEM (in addition to those in UOBJECT):
amount
layer
container
properties in a CHARACTER (in addition to those in UOBJECT):
name
warmode
gender
truecolor
hp
maxhp
mana
maxmana
stamina
maxstamina
strength
dexterity
intelligence
dead
ar
NOTES:
(1) these are case-sensitive.
(2) The compiler won't notice if you misspell them.
(3) These are read-only.
(4) The compiler won't notice if you try to assign to them.
(5) POL won't log if you do (2) or (4)
(6) (1) won't change. (2) probably will some day, (3) will for some properties,
(4) probably will some day, (5) will change.
(7) I have only tested item.objtype and character.name (see BLADED.SRC)
Also note, these functions, which were added, are now basically obsolete:
(good thing they were trivial to write :)
GetPosition() added
GetStats() added
GetStatus() added
11/22/1998 - POL014
==========
".constat" command added (connection status)
11/22/1998 - POL013
==========
CheckLineOfSight() added
SetName() added
DestroyItem() added
11/22/1998 - POL012
==========
Added ".destroy" text command to destroy items.
I'll be uploading a .ZIP file with new releases. This will contain
the executable, the CONFIG, SCRIPTS, and DOCS directories, but
not POL.CFG or the DATA directory.
11/22/1998 - POL011
==========
bugfix: script target cursors targetted on characters will no longer AV.
( I don't think this actually happened to anyone..)
compiler change: all function calls require parenthesis, even those that
take 0 or 1 parameters (notably: print)
compiler change: module functions can define default parameter values now,
so scripts don't have to pass explicitly.
See scripts/spells/magicarrow.src for details
Scripted spells are in (magic arrow is the first)
- note for now, you have to call Target on your own.
GetSkill() added
PlayMovingEffect() added
11/21/1998 - POL010
==========
Scripts can now be tied to skills - see anatomy.src, skills.cfg.
11/20/1998 - POL009
==========
tinkering added (DT)
setup working.txt in /pol directory to track current projects
Added .props text command to list all object custom properties (ES)
GetObjProperty, SetObjProperty added (ES)
CStr() added (ES)
Added a bit of range checking to Damage (ES)
11/19/1998 - POL008
==========
SelectMenuItem returns struct( ObjType, Index ) rather than ObjType
- temporarily called SelectMenuItem2, to force script updates.
- I haven't written any scripts that use the Index member.
RandomInt( N ) added, returns random int less than N.
- untested as yet.
GetMenuObjTypes( menuname ) script-callable function added.
(not real useful yet)
PlaySoundEffect added. Currently, effects can only be centered on
characters. Sound names and numbers can be found in
docs/escript/sndlist.txt
Added carpentry (use saw 0x1035 on logs 0x1bdd) (DT)
11/18/1998 - POL007
==========
Added .UNLOAD SCRIPTNAME command - so you can try new scripts without
restarting
.CREATE (armor or weapon) will now associate the object with its
armor template or weapon template.
Added blacksmithy and beginnings of alchemy (DT)
11/17/1998
==========
smelting of ingots added (DT)
Added config file access for scripts - see DOCS/ESCRIPT/CFGFILE.HTM
11/09/1998
==========
.CREATE takes a second parameter, a count. Creates separate items, not stacked.
Added scripted fletcher skill - shafts/feathers into arrows.
Added .BCAST command
Added .ONLINE command
Added .ARMOR command - list your armor
11/03/1998
==========
Armor, shields, parrying added.
Error in skill advancement corrected.
Error in skill display corrected.
See more files for this project here