SUMMARY OF FUNCTION CHANGES

Disclaimer: Some of what is described here is conjecture, based on incomplete information from changes to the osiris code. Therefore some of the conclusions I've reached may be incorrect or may change before release.

I've tried to identify "families" of changes and group the functions into these families, as otherwise the list would be quite cluttered.

Simplification / generalization of Item/Character/Trigger functions:
Previously, there were separate functions for doing certain operations (like teleport or vision checks) on characters, triggers and items. These functions were merged into one function that works all object types. This generalization also allows certain operations that were not possible before, like creating surfaces under characters.

To find out the type of the new UUID-s, two new functions were added:
ObjectIsCharacter(STRING Object, OUT INT Bool)
ObjectIsItem(STRING Object, OUT INT Bool)


The object type-specific "CharacterTeleportToItem", "CharacterTeleportToTrigger", "CharacterTeleportToCharacter" etc. functions were merged into two universal "TeleportTo" and "TeleportToPosition" functions.
Specifically, these were removed:
CharacterTeleportToPosition(CHARACTER Character, REAL X, REAL Y, REAL Z, STRING Event)
CharacterTeleportToCharacter(CHARACTER Character, CHARACTER ToCharacter, STRING Event)
CharacterTeleportToTrigger(CHARACTER Character, TRIGGER Trigger, STRING Event)
CharacterMoveToCharacter(CHARACTER Character, CHARACTER ToCharacter, INT Running, STRING Event)
CharacterMoveToTrigger(CHARACTER Character, TRIGGER Trigger, INT Running, STRING Event)
CharacterMoveToItem(CHARACTER Character, ITEM Item, INT Running, STRING Event)
CharacterMoveToItemHandle(CHARACTER Character, INT ItemHandle, INT Running, STRING Event)
CharacterAppearAtCharacter(CHARACTER Character, CHARACTER Target, INT PlaySpawn)
CharacterAppearOutOfSightTo(CHARACTER Character, CHARACTER Target, INT Angle, INT PlaySpawn, STRING Event)
CharacterAppearAtTriggerOutOfSightTo(CHARACTER Character, TRIGGER Target, INT Angle, INT PlaySpawn, STRING Event)
ItemTeleportToTrigger(ITEM Item, TRIGGER Trigger)
ItemTeleportToPosition(ITEM Item, REAL X, REAL Y, REAL Z)

... and these are the replacements:
TeleportToPosition(STRING SourceObject, REAL X, REAL Y, REAL Z, STRING Event, INT TeleportLinkedCharacters)
TeleportTo(STRING SourceObject, STRING TargetObject, STRING Event, INT TeleportLinkedCharacters)
CharacterAppearAt(CHARACTER Character, STRING Target, INT PlaySpawn, STRING Event)
CharacterAppearOutOfSightTo(CHARACTER Character, STRING Target, INT Angle, INT PlaySpawn, STRING Event)


Similarly, the "CanSee" function changed as well.
These were deleted:
CharacterCanSeeCharacter(CHARACTER Character, CHARACTER OtherCharacter, OUT INT Bool)
CharacterCanSeeItem(CHARACTER Character, ITEM Item, OUT INT Bool)

... replaced by the universal
CharacterCanSee(CHARACTER Character, STRING Target, OUT INT Bool)

Same for the "XXXGetClosestYYY" functions:
ItemGetClosestPlayer(ITEM Item, OUT CHARACTER Player)
TriggerGetClosestPlayer(TRIGGER Trigger, OUT CHARACTER Player)
CharacterGetClosestPlayer(CHARACTER Character, OUT CHARACTER Player)
CharacterGetClosestPlayerWithTalent(CHARACTER Character, STRING Talent, OUT CHARACTER Player)
CharacterGetClosestAlivePlayer(CHARACTER Character, OUT CHARACTER Player)
CharacterGetClosestAllyWhoSeesMeAndMyAttackerAndCanFight(CHARACTER Source, CHARACTER Attacker, OUT CHARACTER ClosestAllyWhoSeesMe)
GetClosestPlayerToPosition(REAL X, REAL Y, REAL Z, OUT CHARACTER Player)

-->
GetClosestPlayer(STRING Target, OUT CHARACTER Player)
GetClosestPlayerWithTalent(STRING Target, STRING Talent, OUT CHARACTER Player)
GetClosestAlivePlayer(STRING Target, OUT CHARACTER Player)
GetClosestAliveUserPlayer(STRING Target, INT UserID, OUT CHARACTER Player)
GetClosestPlayerToPosition(REAL X, REAL Y, REAL Z, OUT CHARACTER Player)


Basic attribute manipulation functions were also replaced:
CharacterDebugText(CHARACTER Character, STRING Text)
CharacterDisplayText(CHARACTER Character, STRING Text)
CharacterSetOnStage(CHARACTER Character, INT Bool)
CharacterSetVisible(CHARACTER Character, INT Bool)
CharacterGetRegion(CHARACTER Character, OUT STRING Region)
CharacterGetPosition(CHARACTER Character, OUT REAL X, OUT REAL Y, OUT REAL Z)
CharacterGetUUID(CHARACTER Character, OUT STRING UUID)
ItemSetOnstage(ITEM Item, INT Bool)
ItemSetVisible(ITEM Item, INT Bool)
ItemGetRegion(ITEM Item, OUT STRING Region)
ItemGetPosition(ITEM Item, OUT REAL X, OUT REAL Y, OUT REAL Z)
ItemGetUUID(ITEM Item, OUT STRING UUID)
TriggerGetPosition(TRIGGER Trigger, OUT REAL X, OUT REAL Y, OUT REAL Z)
TriggerGetUUID(TRIGGER Trigger, OUT STRING UUID)

-->
DebugText(STRING Object, STRING Text)
DisplayText(STRING Object, STRING Text)
SetOnStage(STRING Object, INT Bool)
SetVisible(STRING Object, INT Bool)
GetRegion(STRING Object, OUT STRING Region)
GetPosition(STRING Target, OUT REAL X, OUT REAL Y, OUT REAL Z)
GetUUID(STRING Target, OUT STRING UUID)


CharacterAttackCharacter/Item/PartyMember was merged into one function:
CharacterAttack(CHARACTER Character, STRING Target)

CharacterLookAtCharacter/Item merged into CharacterLookAt(CHARACTER Character, STRING Target, INT SnapToTarget).

CharacterUsedSkillOnTarget now also triggers if a skill is used on an item; the second CHARACTER TargetCharacter parameter was changed to the more generic STRING Target.

The "Item(Handle)ToXXX" family of functions was greatly simplified.
The old functions were removed:
ItemToCharacter(ITEM Item, CHARACTER Character)
ItemHandleToCharacter(INT ItemHandle, CHARACTER Character, INT Amount)
ItemHandleToContainer(INT ItemHandle, ITEM Item, INT Amount)
ItemHandleToTransform(INT ItemHandle, REAL X, REAL Y, REAL Z, REAL Pitch, REAL Yaw, REAL Roll, INT Amount, CHARACTER OwnerCharacter)
ItemToContainer(ITEM Item, ITEM Container, INT Amount)
ItemToContainerHandle(ITEM Item, INT Container, INT Amount)
ItemHandleToContainerHandle(INT ItemHandle, INT Container, INT Amount)

... and replaced by two functions:
ItemToTransform(STRING UUID, REAL X, REAL Y, REAL Z, REAL Pitch, REAL Yaw, REAL Roll, INT Amount, CHARACTER OwnerCharacter)
ItemTo(ITEM Item, STRING TargetObject, INT Amount)


ItemTemplateRemoveFromCharacter and ItemTemplateRemoveFromContainer were merged into ItemTemplateRemoveFrom(STRING ItemTemplate, STRING Object, INT Count).
Similarly, ItemTemplateAddToCharacter was changed to ItemTemplateAddTo(STRING ItemTemplate, STRING Object, INT Count). Since the ItemTemplateAddToContainer function didn't exist before, it is reasonable to assume that the new ItemTemplateAddTo function can add stuff to containers too.

The "XXXMoveAllItemsToYYY" set of functions was replaced.
These were removed:
CharacterMoveAllItemsToCharacter(CHARACTER FromCharacter, CHARACTER ToCharacter, INT ResetUnsoldItems)
ContainerMoveAllItemsToContainer(ITEM FromContainer, ITEM ToContainer, INT ResetUnsoldItems)
CharacterMoveAllItemsToContainer(CHARACTER FromCharacter, ITEM ToContainer, INT ResetUnsoldItems)
ContainerMoveAllItemsToCharacter(ITEM FromContainer, CHARACTER ToCharacter, INT ResetUnsoldItems)

... this was added as their replacement:
MoveAllItemsTo(STRING FromObject, STRING ToObject, INT ResetUnsoldItems)

The TriggerCreateSurface and TriggerCreatePoodle functions were generalized and now (theoretically) allow creating surfaces under any object:
CreateSurface(STRING Source, STRING SurfaceType, REAL Radius, REAL Lifetime)
CreatePuddle(STRING Source, STRING SurfaceType, INT CellAmountMin, INT CellAmountMax, INT GrowAmountMin, INT GrowAmountMax, REAL GrowTime)

A new XYZ position-based function was also added for creating surfaces:
CreateSurfaceAtPosition(REAL x, REAL Y, REAL Z, STRING SurfaceType, REAL Radius, REAL Lifetime)

CreateExplosion was generalized and expanded in the same way:
CreateExplosion(STRING Target, STRING SkillID, INT CasterLevel)
CreateExplosionAtPosition(REAL X, REAL Y, REAL Z, STRING SkillID, INT CasterLevel)


The "CharacterXXXStatus" API-s were also generalized:
RemoveStatus(STRING Target, STRING Status)
RemoveStatuses(STRING Target)
HasStatus(STRING Target, STRING Status, OUT INT Bool)
ApplyStatus(STRING Object, STRING Status, REAL Duration, INT Force)


The "Get/SetXXXVar" API-s were generalized, and reworked a bit.
The old functions were removed:
CharacterClearVar(CHARACTER Character, STRING VarName)
CharacterSetVarInteger(CHARACTER Character, STRING VarName, INT VarValue)
CharacterSetVarFloat(CHARACTER Character, STRING VarName, REAL VarValue)
CharacterSetVarString(CHARACTER Character, STRING VarName, STRING VarValue)
CharacterSetVarFixedString(CHARACTER Character, STRING VarName, STRING VarValue)
CharacterSetVarCharacter(CHARACTER Character, STRING VarName, CHARACTER VarValue)
CharacterSetVarItem(CHARACTER Character, STRING VarName, ITEM VarValue)
CharacterSetVarTrigger(CHARACTER Character, STRING VarName, TRIGGER VarValue)
CharacterGetVarInteger(CHARACTER Character, STRING VarName, OUT INT VarValue)
CharacterGetVarFloat(CHARACTER Character, STRING VarName, OUT REAL VarValue)
CharacterGetVarString(CHARACTER Character, STRING VarName, OUT STRING VarValue)
CharacterGetVarFixedString(CHARACTER Character, STRING VarName, OUT STRING VarValue)
CharacterGetVarCharacter(CHARACTER Character, STRING VarName, OUT CHARACTER VarValue)
CharacterGetVarItem(CHARACTER Character, STRING VarName, OUT ITEM VarValue)
CharacterGetVarTrigger(CHARACTER Character, STRING VarName, OUT TRIGGER VarValue)
ItemSetVarInteger(ITEM Item, STRING VarName, INT VarValue)
ItemSetVarFloat(ITEM Item, STRING VarName, REAL VarValue)
ItemSetVarString(ITEM Item, STRING VarName, STRING VarValue)
ItemSetVarFixedString(ITEM Item, STRING VarName, STRING VarValue)
ItemSetVarCharacter(ITEM Item, STRING VarName, CHARACTER VarValue)
ItemSetVarItem(ITEM Item, STRING VarName, ITEM VarValue)
ItemSetVarTrigger(ITEM Item, STRING VarName, TRIGGER VarValue)
ItemGetVarInteger(ITEM Item, STRING VarName, OUT INT VarValue)
ItemGetVarFloat(ITEM Item, STRING VarName, OUT REAL VarValue)
ItemGetVarString(ITEM Item, STRING VarName, OUT STRING VarValue)
ItemGetVarFixedString(ITEM Item, STRING VarName, OUT STRING VarValue)
ItemGetVarCharacter(ITEM Item, STRING VarName, OUT CHARACTER VarValue)
ItemGetVarItem(ITEM Item, STRING VarName, OUT ITEM VarValue)
ItemGetVarTrigger(ITEM Item, STRING VarName, OUT TRIGGER VarValue)

... replaced by a universal one:
GetVarInteger(STRING Source, STRING VarName, OUT INT VarValue)
GetVarFloat(STRING Source, STRING VarName, OUT REAL VarValue)
GetVarString(STRING Source, STRING VarName, OUT STRING VarValue)
GetVarFixedString(STRING Source, STRING VarName, OUT STRING VarValue)
SetVarInteger(STRING Target, STRING VarName, INT VarValue)
SetVarFloat(STRING Target, STRING VarName, REAL VarValue)
SetVarString(STRING Target, STRING VarName, STRING VarValue)
SetVarFixedString(STRING Target, STRING VarName, STRING VarValue)
SetVarFloat3(STRING Target, STRING VarName, REAL X, REAL Y, REAL Z)
GetVarFloat3(STRING Target, STRING VarName, OUT REAL X, OUT REAL Y, OUT REAL Z)
GetVarObject(STRING Source, STRING VarName, OUT STRING UUID)
SetVarObject(STRING Source, STRING VarName, STRING Object)
ClearVarObject(STRING Source, STRING VarName)


Some noteworthy changes were made to the Get/SetVar family of functions:
- A new SetVarFloat3 function was introduced for setting XYZ coordinates as variables.
- Character/Item/trigger functions were merged into SetObject.
- Objects vars can now be removed via ClearVarObject.

Same story for effects. Old functions out:
CharacterPlayAnimation(CHARACTER Character, STRING Animation, STRING Event)
CharacterPlayEffect(CHARACTER Character, STRING FxName)
CharacterPlayLoopEffect(CHARACTER Character, STRING FxName, STRING BoneName, OUT INT FxHandle)
CharacterPlayBeamEffect(CHARACTER Character, CHARACTER Target, STRING FxName, STRING SourceBone, STRING TargetBone)
CharacterPlayBeamEffectToItem(CHARACTER Character, ITEM Target, STRING FxName, STRING SourceBone, STRING TargetBone)
CharacterPlayLoopBeamEffect(CHARACTER Character, CHARACTER Target, STRING FxName, STRING SourceBone, STRING TargetBone, OUT INT FxHandle)
CharacterPlayLoopBeamEffectToItem(CHARACTER Character, ITEM Target, STRING FxName, STRING SourceBone, STRING TargetBone, OUT INT FxHandle)
CharacterPlaySound(CHARACTER Character, STRING SoundEvent)
PlayEffectAtCharacter(STRING FxName, CHARACTER Target)
PlayEffectAtItem(STRING FxName, ITEM Target)
PlayEffectAtTrigger(STRING FxName, TRIGGER Target)
PlayLoopEffectAtTrigger(STRING FxName, TRIGGER Target, OUT INT FxHandle)
ItemPlayAnimation(ITEM Item, STRING Animation)
ItemPlayEffect(ITEM Item, STRING FxName)
ItemPlayLoopEffect(ITEM Item, STRING FxName, OUT INT FxHandle)
ItemPlayBeamEffect(ITEM Item, CHARACTER Character, STRING FxName, STRING SourceBone, STRING TargetBone)
ItemPlayBeamEffectToItem(ITEM Item, ITEM Item, STRING FxName, STRING SourceBone, STRING TargetBone)
ItemPlayLoopBeamEffect(ITEM Item, CHARACTER Character, STRING FxName, STRING SourceBone, STRING TargetBone, OUT INT FxHandle)
ItemPlayLoopBeamEffectToItem(ITEM Item, ITEM Item, STRING FxName, STRING SourceBone, STRING TargetBone, OUT INT FxHandle)
ItemHandlePlayLoopBeamEffect(INT ItemHandle, CHARACTER Character, STRING FxName, STRING SourceBone, STRING TargetBone, OUT INT FxHandle)
ItemHandlePlayLoopBeamEffectToItem(INT ItemHandle, ITEM Item, STRING FxName, STRING SourceBone, STRING TargetBone, OUT INT FxHandle)
ItemPlaySound(ITEM Item, STRING SoundEvent)

... new functions in:
PlayAnimation(STRING SourceObject, STRING Animation, STRING Event)
PlayEffect(STRING Object, STRING FxName)
PlayLoopEffect(STRING Object, STRING FxName, STRING BoneName, OUT INT64 FxHandle)
PlayBeamEffect(STRING Object, STRING Target, STRING FxName, STRING SourceBone, STRING TargetBone)
PlayLoopBeamEffect(STRING Object, STRING Target, STRING FxName, STRING SourceBone, STRING TargetBone, OUT INT64 FxHandle)
PlaySound(STRING Object, STRING SoundEvent)


Similarly to puddles, effects can now also be played at arbitrary positions:
PlayEffectAtPosition(STRING FxName, REAL X, REAL Y, REAL Z)
PlayScaledEffectAtPosition(STRING FxName, REAL Scale, REAL X, REAL Y, REAL Z)


Laundry-list of other functions affected by this change:
- CharacterSetCanFight -> SetCanFight(STRING Target, INT Enabled)
- ItemTransformIntoTemplate -> TransformIntoTemplate(STRING Object, STRING ObjectTemplate, INT ReplaceScripts)
- CharacterSetIsBoss -> SetIsBoss(STRING Target, INT Enabled)
- CharacterIsBoss -> IsBoss(STRING Target, OUT INT Bool)
- CharacterSetHasDialog -> SetHasDialog(STRING Speaker, INT Dialog)
- CharacterSetCanFight -> SetCanFight(STRING Target, INT Enabled)
- CharacterEnteredCombat -> ObjectEnteredCombat(STRING Object, INT CombatID)
- CharacterSwitchedCombat -> ObjectSwitchedCombat(STRING Object, INT OldCombatID, INT NewCombatID)
- CharacterLeftCombat -> ObjectLeftCombat(STRING Object, INT CombatID)
- CharacterTurnStarted -> ObjectTurnStarted(STRING Object)
- CharacterTurnEnded -> ObjectTurnEnded(STRING Object)
- ItemTransformIntoItemTemplate -> TransformIntoTemplate(STRING Object, STRING ObjectTemplate, INT ReplaceScripts)
- CharacterSetHasDialog -> SetHasDialog(STRING Speaker, INT Dialog)


Item handle changes:
It seems that in most cases, the item handles were removed and replaced by ITEMGUID-s.
The few ones that remained now use INT64 instead of INT; this is most likely done to fix for the "out of item handles" crash that affected D:OS 1 and EE. With a 64-bit handle, I don't believe the game can ever run out of handles now.

These handle-based functions were removed without any replacement:
ItemGetHandle(ITEM Item, OUT INT Handle)
ItemHandleDrop(INT ItemHandle)
ItemHandleIsInCharacterInventory(INT ItemHandle, CHARACTER Character, OUT INT Bool)
ItemHandleIsLocked(INT ItemHandle, OUT INT Locked)
ItemHandleDelete(INT ItemHandle)
ItemHandleGetHealthPoints(INT ItemHandle, OUT INT HP)
ItemHandleDestroyed(INT ItemHandle)
ItemHandleDropped(INT ItemHandle)
ItemHandleSetEvent(INT ItemHandle, STRING EventName)
ItemHandleSetCanInteract(INT ItemHandle, INT bool)
ItemHandleSetOwner(INT ItemHandle, CHARACTER NewOwner)
ItemHandleSetOnStage(INT ItemHandle, INT Bool)
ItemEvent(ITEM Item, STRING Event)
ItemHandleAttackedByCharacter(INT ItemHandle, CHARACTER Source, STRING DamageType)
ItemHandleGetVarString(INT ItemHandle, STRING VarName, OUT STRING VarValue)
ItemHandleGetPosition(INT ItemHandle, OUT REAL X, OUT REAL Y, OUT REAL Z)
ItemHandleGetProperty(INT Handle, STRING Property, OUT STRING Value)
CharacterItemHandleEvent(CHARACTER Character, INT ItemHandle, STRING Event)


These handle-based functions were replaced:
ItemHandleIsContainer(INT ItemHandle, OUT INT IsContainer)
GetItemhandleForItemTemplateInInventory(CHARACTER Character, STRING Template, OUT INT Itemhandle)
ItemHandleMovedFromCharacterToCharacter(INT ItemHandle, CHARACTER FromCharacter, CHARACTER ToCharacter, INT Value)

... by these item guid-based functions:
ItemIsContainer(ITEM Item, OUT INT IsContainer)
GetItemForItemTemplateInInventory(CHARACTER Character, STRING Template, OUT ITEM Item)
ItemMovedFromCharacterToCharacter(ITEM Item, CHARACTER FromCharacter, CHARACTER ToCharacter, INT Value)


These receive an INT64 handle now:
CharacterConsume(CHARACTER Character, STRING Potion, OUT INT ConsumeHandle)
CharacterUnconsume(CHARACTER Character, INT ConsumeHandle)
StopLoopEffect(INT64 FxHandle)


These functions use an ITEMGUID instead of the INT ItemHandle now:
CharacterGetEquippedWeapon(CHARACTER Character, OUT INT ItemHandle)
CharacterGetEquippedShield(CHARACTER Character, OUT INT ItemHandle)
CreateItemTemplateAtPosition(STRING ItemTemplate, REAL X, REAL Y, REAL Z, OUT INT ItemHandle)
ItemSetDurability(INT ItemHandle, INT Durability)
ItemGetDurability(INT ItemHandle, OUT INT Durability)
ItemTemplateOpening(STRING ItemTemplate, INT ItemHandle, CHARACTER Character)
ItemTemplateDestroyed(STRING TemplateID, INT ItemHandle)
ItemCreatedAtTrigger(TRIGGER Trigger, STRING TemplateID, INT ItemHandle)
ItemTemplateEnteredTrigger(STRING ItemTemplate, INT Item, TRIGGER Trigger, CHARACTER Owner, CHARACTER Mover)
ItemTemplateLeftTrigger(STRING ItemTemplate, INT Item, TRIGGER Trigger, CHARACTER Owner, CHARACTER Mover)
ItemTemplateAddedToCharacter(STRING ItemTemplate, INT ItemHandle, CHARACTER Character)
ItemTemplateAddedToContainer(STRING ItemTemplate, INT ItemHandle, ITEM Container)
ItemTemplateRemovedFromCharacter(STRING ItemTemplate, INT ItemHandle, CHARACTER Character)
ItemTemplateRemovedFromContainer(STRING ItemTemplate, INT ItemHandle, ITEM Container)
ItemTemplateMoved(STRING ItemTemplate, INT ItemHandle)
ItemStackedWith(INT ItemHandle, INT StackedWithHandle)



Dialog changes:
I'm not quite able to grasp the changes yet, but the main ones seem to be:
- Simplification of the dialog start functions
- Removal of all levels of dialog events (local/item/character); their replacement is (probably) the XXXSetFlag set of functions.
- Removal of default dialogs

Complete list of removed functions:
DialogStartOneSpeakerDialog(STRING Dialog, CHARACTER Character)
DialogStartTwoSpeakerDialog(STRING Dialog, CHARACTER Character, CHARACTER Character2)
DialogStartThreeSpeakerDialog(STRING Dialog, CHARACTER Character, CHARACTER Character2, CHARACTER Character3)
DialogStartFourSpeakerDialog(STRING Dialog, CHARACTER Character, CHARACTER Character2, CHARACTER Character3, CHARACTER Character4)
DialogStartFiveSpeakerDialog(STRING Dialog, CHARACTER Character, CHARACTER Character2, CHARACTER Character3, CHARACTER Character4, CHARACTER Character5)
DialogStartOneSpeakerItemDialog(STRING Dialog, ITEM Item)
DialogStartTwoSpeakerItemDialog(STRING Dialog, ITEM Item, CHARACTER Character)
DialogStartThreeSpeakerItemDialog(STRING Dialog, CHARACTER Character, CHARACTER Character2, ITEM Item)
DialogRequestStop(STRING Dialog, CHARACTER Character)
DialogRequestStopForItem(STRING Dialog, ITEM Item)
DialogRequestStopForCharacter(CHARACTER Character)
DialogIsRunning(OUT INT Bool)
DialogIsInvolvedNPCInGroup(INT InstanceID, INT Index, STRING Group, OUT INT Bool)
DialogHasRun(STRING Dialog, OUT INT Bool)
DialogSetNodeFlag(INT DialogInstance, STRING Node, STRING Flag)
StartDialogConflict(CHARACTER Character1, STRING SelectedStat, INT SituationBonus, CHARACTER Character2, STRING SelectedStat2, INT SituationBonus2, INT InstanceID)
DialogStartKickstarterDualDialog(CHARACTER Character, CHARACTER Character2)
DialogStartRequested(CHARACTER Character, CHARACTER Character)

CharacterSetHasDefaultDialog(CHARACTER Character, INT Dialog)
CharacterHasDefaultDialog(CHARACTER Character, OUT INT Bool)
StartDefaultDialog(CHARACTER Character, CHARACTER Player)

DialogGetLocalEventString(INT DialogInstance, STRING LocalEvent, OUT STRING Value)
DialogGetLocalEvent(INT DialogInstance, STRING LocalEvent, OUT INT Value)
DialogSetItemEvent(STRING Flag, ITEM Item, INT DialogInstance)
DialogClearItemEvent(STRING Flag, ITEM Item, INT DialogInstance)
DialogItemEventSet(STRING FlagName, ITEM Item, INT DialogInstance)
DialogItemEventCleared(STRING FlagName, ITEM Item, INT DialogInstance)
DialogSetCharacterEvent(STRING Flag, CHARACTER Character, INT DialogInstance)
DialogClearCharacterEvent(STRING Flag, CHARACTER Character, INT DialogInstance)
DialogCharacterEventSet(STRING FlagName, CHARACTER Character, INT DialogInstance)
DialogCharacterEventCleared(STRING FlagName, CHARACTER Character, INT DialogInstance)


The new functions are:
StartDialog_Internal(STRING Dialog, INT MarkForInteractiveDialog, STRING Speaker1, STRING Speaker2, STRING Speaker3, STRING Speaker4, STRING Speaker5, OUT INT success)
DialogStartPartyDialog(STRING Dialog, INT ParentInstanceID, INT NewInstanceID, CHARACTER Player1, CHARACTER Player2, CHARACTER Player3, CHARACTER Player4, OUT INT success)
DialogResume(INT InstanceID)
IsSpeakerReserved(STRING Speaker, OUT INT success)
DialogStartRequested(STRING Target, STRING Player)
DualDialogRequested(STRING Dialog, INT InstanceID, INT TargetInstanceID)
DialogRequestFailed(STRING Dialog, INT InstanceID)
AutomatedDialogRequestFailed(STRING Dialog, INT InstanceID)
StartVoiceBark(STRING Bark, CHARACTER Source)
VoiceBarkStarted(STRING Bark, INT InstanceID)
VoiceBarkFailed(STRING Bark)



Tags:
Objects can now be tagged with custom string tags.

SetTag(STRING Source, STRING Tag)
ClearTag(STRING Source, STRING Tag)
IsTagged(STRING Target, STRING Tag, OUT INT Bool)
ObjectWasTagged(STRING Object, STRING Tag)
ObjectLostTag(STRING Object, STRING Tag)
ItemTagIsInCharacterInventory(CHARACTER Character, STRING Tag, OUT INT Count)
CharacterFindTaggedItem(CHARACTER Character, STRING Tag, OUT ITEM Item)



Flags:
A new flag system was introduced where "flags" (tags would probably be a better name for them) can be attached globally, or on a per-user/object/party/dialog basis.
(Note: "User" here probably means "player" in multiplayer games. In single player there is only one "user".)
This is presumably also the replacement for the GlobalXXXEvent/CharacterXXXEvent/ItemXXXEvent set of functions (which didn't actually set "events" as their name implied, so the new naming is IMHO more sensible).

GlobalSetFlag(STRING Flag)
GlobalClearFlag(STRING Flag)
GlobalGetFlag(STRING Flag, OUT INT FlagState)
GlobalFlagSet(STRING FlagName)
GlobalFlagCleared(STRING FlagName)
ObjectSetFlag(STRING Target, STRING Flag, INT DialogInstance)
ObjectClearFlag(STRING Target, STRING Flag, INT DialogInstance)
ObjectGetFlag(STRING Target, STRING Flag, OUT INT FlagState)
ObjectFlagSet(STRING FlagName, STRING Speaker, INT DialogInstance)
ObjectFlagCleared(STRING FlagName, STRING Speaker, INT DialogInstance)
UserSetFlag(CHARACTER Character, STRING Flag, INT DialogInstance)
UserClearFlag(CHARACTER Character, STRING Flag, INT DialogInstance)
UserGetFlag(CHARACTER Character, STRING Flag, OUT INT FlagState)
PartySetFlag(CHARACTER Character, STRING Flag, INT DialogInstance)
PartyClearFlag(CHARACTER Character, STRING Flag, INT DialogInstance)
PartyGetFlag(CHARACTER Character, STRING Flag, OUT INT FlagState)
DialogGetLocalFlag(INT DialogInstance, STRING LocalEvent, OUT INT Value)



Distinction of characters in party-based APIs:
Previously party-based functions now receive the individual character that is affected via the first parameter.

XP:
PartyAddExperience/ExplorationExperience/CharismaExperience now has a first parameter specifying the character receiving the experience.
A new function, PartyAddActualExperience(CHARACTER Character, INT XP) presumably adds XP directly for that character, instead of yielding xp via Act/ActPart/Gain.

CharacterSetCanTrade(CHARACTER Character, CHARACTER Trader, INT Bool) can now set the trade flag for each player character separately.

The quest and secret functions also take into account the individual characters now:
QuestUpdate(STRING Quest, STRING Status)
QuestAdd(STRING Quest)
QuestClose(STRING Quest)
AddSecret(STRING Secret)

was changed to:
QuestUpdate(CHARACTER Character, STRING Quest, STRING Status)
QuestAdd(CHARACTER Character, STRING Quest)
QuestClose(CHARACTER Character, STRING Quest)
AddSecret(CHARACTER Character, STRING Secret)

The helper functions QuestUpdateAll(STRING Quest, STRING Status) and QuestCloseAll(STRING Quest)[/i] to update/close a quest for all characters.

Party functions were expanded a bit:
CharacterAddToParty(CHARACTER Character) -> CharacterAddToParty(CHARACTER Character, CHARACTER Character)
CharacterIsInPartyWith(CHARACTER Character, CHARACTER Target, OUT INT Bool)
ItemIsInPartyInventory(ITEM Item, CHARACTER Character, INT MoveAndReport, OUT INT Bool)
PartyAddGold(CHARACTER Character, INT Count)



Text events can now be parameterized:
GetTextEventParamString(INT Number, OUT STRING Value)
GetTextEventParamInteger(INT Number, OUT INT Value)
GetTextEventParamReal(INT Number, OUT REAL Value)
GetTextEventParamUUID(INT Number, OUT STRING Value)



New Crime API-s:
A new set of functions were introduced for the D:OS 2 version of crime.
CharacterRegisterCrime(CHARACTER Player, STRING CrimeType, STRING Evidence, CHARACTER Witness, INT CrimeID)
CharacterRegisterCrimeWithPosition(CHARACTER Player, STRING CrimeType, STRING Evidence, CHARACTER Witness, REAL X, REAL Y, REAL Z, INT CrimeID)
CharacterStopCrime(CHARACTER Player, STRING CrimeType, STRING Evidence)
CharacterDisableCrime(CHARACTER Character, STRING Crime)
CharacterIsCrimeEnabled(CHARACTER Character, STRING Crime, OUT INT Bool)
CharacterGetCrimeRegion(CHARACTER Character, OUT STRING Region)
CharacterEnableCrime(CHARACTER Character, STRING Crime)
CharacterDisableAllCrimes(CHARACTER Character)
CharacterEnableAllCrimes(CHARACTER Character)
CharacterEnableCrimeWarnings(CHARACTER Character, INT Enable)
CharacterOnCrimeSensibleActionNotification(CHARACTER Character, STRING RegionID, INT CrimeID, STRING PriortiyName, STRING PrimaryDialog, CHARACTER Criminal1, CHARACTER Criminal2, CHARACTER Criminal3, CHARACTER Criminal4)
CrimeGetType(INT CrimeID, OUT STRING Type)
CrimeGetTension(INT CrimeID, OUT INT Tension)
CrimeGetNewID(OUT INT CrimeID)
CrimeIsTensionOverWarningTreshold(CHARACTER Character, OUT INT Bool)
CrimeFindEvidence(INT CrimeID, CHARACTER Criminal1, CHARACTER Criminal2, CHARACTER Criminal3, CHARACTER Criminal4, OUT INT EvidenceFoundForCurrentCrime, OUT INT EvidenceFound, OUT INT GuiltyFound)
CrimeInterrogationDone(INT CrimeID, CHARACTER Interrogator, INT FoundEvidence, CHARACTER Criminal1, CHARACTER Criminal2, CHARACTER Criminal3, CHARACTER Criminal4)
CrimeWarningDone(INT CrimeID, CHARACTER Interrogator)
CrimeAreaSetTensionModifier(TRIGGER CrimeArea, INT Modifier)
CrimeAreaResetTensionModifier(TRIGGER CrimeArea)
CrimeIgnoreCrime(INT CrimeID, STRING NPC)
CrimeInterrogationRequest(STRING CrimeRegion, INT CrimeID, CHARACTER Interrogator, CHARACTER Criminal1, CHARACTER Criminal2, CHARACTER Criminal3, CHARACTER Criminal4, STRING InterrogateDialog)
CrimeWarningRequest(STRING CrimeRegion, INT CrimeID, CHARACTER Interrogator, CHARACTER Criminal1, CHARACTER Criminal2, CHARACTER Criminal3, CHARACTER Criminal4, STRING WarningDialog)
OnCrimeResolved(INT CrimeID, CHARACTER Victim, CHARACTER Criminal1, CHARACTER Criminal2, CHARACTER Criminal3, CHARACTER Criminal4)
OnCrimeRemoved(INT CrimeID, CHARACTER Victim, CHARACTER Criminal1, CHARACTER Criminal2, CHARACTER Criminal3, CHARACTER Criminal4)
OnCrimeMergedWith(INT OldCrimeID, INT NewCrimeID)
OnCrimeSawCriminalInCombat(INT CrimeID, CHARACTER Character, CHARACTER Criminal1)
DialogStartCrimeDialog(INT CrimeID, STRING Dialog, INT MarkForInteractiveDialog, STRING NPC, STRING Criminal1, STRING Criminal2, STRING Criminal3, STRING Criminal4, OUT INT success)


The old (admittedly quite cluttered) API-s were removed:
CharacterSpottedItemUsed_Redhanded(CHARACTER Offender, CHARACTER Spotter, CHARACTER Owner, ITEM Item, INT crimeID)
CharacterSpottedItemTemplateUsed_Redhanded(CHARACTER Offender, CHARACTER Spotter, CHARACTER Owner, STRING ItemTemplate, INT crimeID)
CharacterSpottedItemMoved_Redhanded(CHARACTER Offender, CHARACTER Spotter, CHARACTER Owner, ITEM Item, INT crimeID)
CharacterSpottedItemTemplateMoved_Redhanded(CHARACTER Offender, CHARACTER Spotter, CHARACTER Owner, STRING ItemTemplate, INT crimeID)
CharacterSpottedItemTheft_Redhanded(CHARACTER Offender, CHARACTER Spotter, CHARACTER Owner, ITEM Item, INT Value, INT Handle, INT CrimeID, REAL X, REAL Y, REAL Z, REAL Pitch, REAL Yaw, REAL Roll, INT ContainerHandle)
CharacterSpottedItemTemplateTheft_Redhanded(CHARACTER Offender, CHARACTER Spotter, CHARACTER Owner, STRING ItemTemplate, INT Amount, INT Value, INT LocalHandle, INT CrimeID, REAL X, REAL Y, REAL Z, REAL Pitch, REAL Yaw, REAL Roll, INT ContainerHandle)
CharacterSpottedItemDestroyed_Redhanded(CHARACTER Offender, CHARACTER Spotter, CHARACTER Owner, ITEM Item, INT Value, INT CrimeID)
CharacterSpottedItemTemplateDestroyed_Redhanded(CHARACTER Offender, CHARACTER Spotter, CHARACTER Owner, STRING ItemTemplate, INT Amount, INT Value, INT crimeID)
CharacterSpottedItemAttacked_Redhanded(CHARACTER Offender, CHARACTER Spotter, CHARACTER Owner, ITEM Item, INT Value, STRING DamageType, INT CrimeID)
CharacterSpottedItemTemplateAttacked_Redhanded(CHARACTER Offender, CHARACTER Spotter, CHARACTER Owner, STRING ItemTemplate, INT Amount, INT Value, STRING DamageType, INT crimeID, INT Handle)
CharacterSpottedItemTheft_ByEvidence(CHARACTER Offender, CHARACTER Spotter, CHARACTER Owner, ITEM Item, INT Value, INT Handle)
CharacterSpottedItemTemplateTheft_ByEvidence(CHARACTER Offender, CHARACTER Spotter, CHARACTER Owner, STRING ItemTemplate, INT Amount)
ItemHandleTheft(CHARACTER Offender, CHARACTER Owner, INT Value, INT Handle)


The reputation mechanism was also removed:
CharacterGetRepAttitudeTowardsPlayer(CHARACTER Character, CHARACTER Player, OUT INT RepAttitude)
CharacterEnableReputationEffects(CHARACTER Character, INT Bool)
CharacterAddReputation(CHARACTER Character, INT Delta)
CharacterGetReputation(CHARACTER Character, OUT INT Reputation)



New combat functions and events:
EnterCombat(STRING Source, STRING Target)
LeaveCombat(STRING Target)
EndTurn(STRING Target)
SetCanJoinCombat(STRING Target, INT Enabled)
SetCombatGroupID(STRING Target, STRING GroupID)
CharacterSendGlobalCombatCounter(CHARACTER Character, INT Turn)

CharacterBlockedCharacter(CHARACTER Character, CHARACTER Source)
CharacterMissedCharacter(CHARACTER Character, CHARACTER Source)
CharacterCriticalHitCharacter(CHARACTER Character, CHARACTER Source)
CharacterVitalityChanged(CHARACTER Character, INT Percentage)
SkillCast(CHARACTER Character, STRING Skill, STRING SkillElement)
CharacterLootedCharacterCorpse(CHARACTER Player, CHARACTER Corpse)



Trade modifiers:
Modifiers can now be applied at shops for various character interactions (identify, repair, etc.).
PartySetIdentifyPriceModifier(CHARACTER Character, CHARACTER PartyMember, INT Modifier)
PartySetRepairPriceModifier(CHARACTER Character, CHARACTER PartyMember, INT Modifier)
PartySetShopPriceModifier(CHARACTER Character, CHARACTER PartyMember, INT Modifier)



"Posessed" mechanic:
I'm not quite sure what this does. One possibility is that these check if the player is currently controlling a character.
CharacterPossessed(CHARACTER Character)
CharacterReleased(CHARACTER Character)
CharacterIsPossessed(CHARACTER Character, OUT INT Bool)



Physical / magic armor functions:
CharacterGetArmorPercentage(CHARACTER Character, OUT INT Percentage)
CharacterSetArmorPercentage(CHARACTER Character, INT Percentage)
CharacterGetMagicArmorPercentage(CHARACTER Character, OUT INT Percentage)
CharacterSetMagicArmorPercentage(CHARACTER Character, INT Percentage)



"Ghost" mechanic:
I have no idea what these do.
CharacterTurnedToGhost(CHARACTER Character, CHARACTER Ghost)
CharacterGhostDestroyed(CHARACTER Character, CHARACTER Ghost)
CharacterLinkGhost(CHARACTER Character, CHARACTER Ghost)



Group APIs:
CharacterAddedToGroup(CHARACTER Character)
CharacterDetachedFromGroup(CHARACTER Character)
CharactersAreGrouped(CHARACTER Character1, CHARACTER Character2, OUT INT Bool)



New functions for the arena:
CharacterSetInArena(CHARACTER Character, INT InArena)
CharacterSetSpectating(CHARACTER Character, INT Spectating)
CharacterIsInArena(CHARACTER Character, OUT INT Bool)
CharacterIsSpectating(CHARACTER Character, OUT INT Bool)
OnArenaRoundStarted(INT ArenaMode)
CharacterCreatedInArena(CHARACTER Character, INT Team)
ShowArenaResult(INT WinnerTeamId)



Character management API-s:
These seem to be used for assigning characters to players.
GetCurrentCharacter(INT User, OUT CHARACTER Character)
CharacterIsControlled(CHARACTER Character, OUT INT IsControlled)
CharacterAssign(INT UserID)
CharacterAssignToUser(INT UserID, CHARACTER Character)



New user API-s:
These were presumably introduced for arena mode.
IterateUsers(STRING Event)
GetUserName(INT UserId, OUT STRING UserName)
GetUserProfileID(INT UserId, OUT STRING UserProfileID)
LeaveParty(INT UserId)
AddToParty(INT Source, INT Target)
UserConnected(INT UserID, STRING UserName, STRING UserProfileID)
UserDisconnected(INT UserID, STRING UserName, STRING UserProfileID)
UserEvent(INT UserID, STRING UserEvent)
UserMakeWar(INT SourceUserID, INT TargetUserID, INT War)
GetUserCount(OUT INT UserCount)
CharacterReservedUserIDChanged(CHARACTER Character, INT UserID)



Miscellaneous changes:
The first CHARACTER parameter from "CharacterTeleportPartyToTrigger(TRIGGER Trigger, STRING Event)" was removed.
The Player parameter from "CharacterGenerateCustomTradeTreasure(CHARACTER Character, STRING Treasure)" was removed, and the function was renamed to "CharacterSetCustomTradeTreasure".
"CharacterDie(CHARACTER Character, INT ScatterLoot, STRING DeathType)" now has an additional DeathType parameter.
"CharacterGetReservedPeerID(CHARACTER Character, OUT INT Count)" renamed to "CharacterGetReservedUserID". I'm not even sure what this function even does, it probably returns the network peer ID in multiplayer?
The GameStarted(STRING LevelName, INT IsEditorMode) can now run trigger code paths in the editor and in the actual game.


Interesting additions:

CharacterSelectedInCharCreation(CHARACTER Character, INT UserID)
This seems to be added for multiplayer / whole-party character creation, not sure how it is used yet.

CharacterUseSkill(CHARACTER Character, STRING SkillID, STRING Target)
Allows a character to use an arbitrary skill.

CharacterUnlockRecipe(CHARACTER Character, STRING RecipeID, INT ShowNotification)
I've seen a thread where someone requested this feature, here it is smile

CharacterUnequipItem(CHARACTER Character, ITEM Item)
AFAIK this was not possible before.

CharacterGiveReward(CHARACTER Player, STRING Treasure)
Seems to give items directly to the character based on the treasure table name?

ItemScatterAt(ITEM Item, REAL X, REAL Y, REAL Z)
"Drop" an item at the given location?

LoadGame(STRING Savegame)
Not sure why this belongs to story scripts, but interesting nevertheless.


Miscellaneous additions 2:
This section contains a mishmash of less important functions that I could not categorize.

CharacterGuarded(CHARACTER Character)
CharacterWentOnStage(CHARACTER Character, INT Bool)
CharacterStartLockpickingItem(CHARACTER Character, ITEM Item)

CharacterSetAnimationSetOverride(CHARACTER Character, STRING AnimationSetResource)
CharacterResetCooldowns(CHARACTER Character)
CharacterRemoveSummons(CHARACTER Character, INT Die)
CharacterGetSourcePoints(CHARACTER Character, OUT INT Amount)
CharacterResurrectCustom(CHARACTER Character, STRING ResurrectAnimation)
CharacterSetCustomName(CHARACTER Character, STRING Text)
CharacterGetBaseAbility(CHARACTER Character, STRING Ability, OUT INT Value)
CharacterHasSkill(CHARACTER Character, STRING Skill, OUT INT Bool)
GenerateTreasure(ITEM Item, STRING TreasureID, INT Level, CHARACTER Character)

ContainerIdentifyAll(ITEM FromContainer)
ItemTemplateIsInPartyInventory(CHARACTER Character, STRING Template, INT MoveAndReport, OUT INT Count)
ItemHasOnUse(ITEM Item, STRING OnUse, OUT INT Bool)
ItemLockUnEquip(ITEM Item, INT lock)
ItemIsEquipable(ITEM Item, OUT INT Bool)
ItemGetOwner(ITEM Item, OUT CHARACTER Character)
SetTransferItemsOnPartyRemove(INT Enable)
TriggerSetItemOwner(TRIGGER AreaTrigger, CHARACTER Owner)
TriggerClearItemOwner(TRIGGER AreaTrigger)
TriggerClearItemTemplateOwners(TRIGGER Trigger, STRING ItemTemplate)

SetCameraDistanceOverride(REAL Distance)
IsHardcoreMode(OUT INT Bool)

CharacterShowStoryElementUI(CHARACTER Character, INT Type, STRING CloseAction, STRING Action1, STRING Action2, STRING Action3, STRING Action4, STRING Action5, STRING Action6, STRING Action7, STRING Action8, STRING Action9)
CharacterPlayHUDSound(CHARACTER Character, STRING Sound)
NotifyGameProgress(REAL Progress)
ShowTutorial(CHARACTER Character, STRING Text, INT ButtonID, STRING Category) --> ShowTutorial(CHARACTER Character, STRING Text, INT ButtonID, STRING Category, STRING Title, INT ControllerType, INT ModalType, INT Duration, INT Priority, INT Flags)
CompleteTutorial(CHARACTER Character, STRING Text)
ProgressAchievement(CHARACTER Character, STRING AchievementID, INT Progress)
GameModeStarted(STRING GameMode)
DLCUnlocked(INT DLCId)

SetStoryEvent(STRING Object, STRING Event)
StoryEvent(STRING Object, STRING Event)

IntegertoString(INT Integer, OUT STRING Result)



Function removals:

-- Homestead functions
CharacterRequestsHomestead(CHARACTER Character)
ItemHandleSendToHomestead(CHARACTER FromCharacter, INT ItemHandle)
SetHomesteadKeyState(INT State)

-- Traits
CharacterHasTrait(CHARACTER Character, STRING Trait, OUT INT Bool)
CharacterGetTrait(CHARACTER Character, STRING Trait, OUT INT Lvl))
CharacterAddTrait(CHARACTER Character, STRING TraitType, INT TraitValue)

-- Misc functions
CameraLockOnNpc(CHARACTER Trigger)
CharacterFlee(CHARACTER Character)
CharacterGetOtherPlayer(CHARACTER Character, OUT CHARACTER OtherCharacter)
CharacterIsInGroup(CHARACTER Character, STRING Group, OUT INT Bool)
CharacterLockGroup(CHARACTER Character, INT Bool)
CharacterDispelMagic(CHARACTER Character)
CharacterShowCoords(CHARACTER Character)
CharacterGetByName(STRING Name, OUT CHARACTER Character)

TradeBalance(CHARACTER Player, CHARACTER Trader, OUT INT Balance)
ItemGetProperty(ITEM Item, STRING Property, OUT STRING Value)
ItemGetByName(STRING Name, OUT ITEM Item)

ShroudSetInTrigger(TRIGGER Trigger, INT Enable)
TriggerKillEnemies(TRIGGER AreaTrigger)
TriggerSetItemOwner(TRIGGER AreaTrigger, CHARACTER Owner)
TriggerClearItemOwner(TRIGGER AreaTrigger)

LaunchCallbackEvent(STRING Event)
CallbackEvent(STRING Event)
HenchManHiredFinished(CHARACTER Character, INT Hired)
ToggledTacticalCamera(CHARACTER Character, INT Enabled)
KickstarterTreeUsed(CHARACTER Character)