User:JT/TES5 Wishlist
Incidental Note: This was posted on the 1st of April, but it's not an April Fools Day joke. I really would like these features. =P
PlaylistsEdit
DescriptionEdit
A Playlist would be a list of music filenames, contained within a single data object. The filenames in the list would be as specific as individual files or as general as entire folders, and there would be no limit (within reason) to the number of files a playlist can contain.
Playlists would be used by Cells to determine the nature of the music that will play there.
In the Cell Properties dialog, there would be two buttons within a "Music" frame; "Peace" and "Combat". Clicking on either of the buttons opens a corresponding dialog which allows you to drag-and-drop Playlist objects into a list.
MechanicsEdit
The game itself has two music modes, corresponding to the two buttons: "Peace" and "Combat". This behaviour is exactly like TES4 and TES3.
When you enter a cell, the list of available Playlists on the client's end would be revised. If a song were currently playing which no longer appears in the available Playlists for the given music mode, the song ends. If there were any songs in the new Playlists for the given music mode, a song would be selected randomly. This would mimic the behaviour of switching between a town cell and an overland cell.
If a cell had no "Combat" Playlists but did have at least one "Peace" Playlist, then whenever combat starts in the cell, the music would not change.
If a cell had no "Peace" Playlists, the cell would be completely silent until combat starts, and would resume being silent when combat ends. If the cell also had no "Combat" Playlists, then the cell would be completely silent at all times, even during combat.
FunctionsEdit
LockCombatMusic would allow the scripter to lock the client into "Combat" music, even if combat ends. It would be the duty of the scripter to release the music with UnlockCombatMusic, or else the "Combat" music would play indefinitely.
LockPeaceMusic would allow the scripter to lock the client into "Peace" music in a like fashion, even when combat begins. As with LockCombatMusic, the scripter must also remember to call UnlockPeaceMusic or else the client will never again play combat music.
LockPeaceMusic implies UnlockCombatMusic. Likewise, LockCombatMusic implies UnlockPeaceMusic. Thus, you can't lock both "Combat" music and "Peace" music at the same time (as it wouldn't make sense).
Water CurrentEdit
DescriptionEdit
Current objects would be world objects that could be placed in a cell. In the object list, a Current object could be double-clicked to specify current force. The orientation of the Current marker, when placed in the cell, would determine the direction of the current for purposes of a velocity vector.
MechanicsEdit
Whenever an Actor enters the water, the game would identify the nearest Current object in the same cell to that Actor, and would apply force along the Current's vector proportional to how much of the Actor is submerged (so standing in a river is unlikely to make you move, while swimming in the river is likely to carry you along). While force is being applied, the physics engine is also naturally applying the water's drag to the object, which would serve to impose a speed limit.
When an Actor changes cells, the system looks for Current objects in the new cell, and cancels all Current applied to the Actor. Current markers absolutely must be placed in every cell -- even if the player is two units away from a Current marker, if the Current marker is in a different cell, the player would not experience any Current. This is both for safety and to ensure that a Current marker is not required in every cell.
It is important to allow for multiple Current markers in a single cell, as a single cell (particularly an interior cell) could consist of an intricate network of water pipes.
AV, CurrentAV, MaximumAVEdit
This is a suite of functions to expose functionality that was restricted in TES4 for no obvious reason in spite of the fact that it was available in TES3.
GetActorValue (GetAV)Edit
- (float) GetAV (avtype)value
Returns the current value of the corresponding actor value value.
GetMaximumActorValue (GetMaxAV)Edit
- (float) GetMaxAV (avtype)value
Returns the maximum value of the corresponding actor value value, if applicable.
ModActorValue (ModAV)Edit
- (float) ModAV (avtype)value (float)modifier
Modifies the current value and the maximum value of the corresponding actor value value by adding the modifier variable to those values, retaining all fractions. Returns the new current value.
Example: S'Razra has a Health of 47.8 out of 94. The scripter calls ModAV Health 11. S'Razra now has a Health of 58.8 out of 105. S'Razra's health bar does not appear to change.
ModCurrentActorValue (ModCurAV)Edit
- (float) ModCurAV (avtype)value (float)modifier
Modifies the current value but not the maximum value of the corresponding actor value, retaining all fractions. The value will be constrained to the maximum value (i.e., cannot exceed the maximum and will be set equal to the maximum if it does). Returns the new current value.
Example: As before, S'Razra has a Health of 47.8 out of 94. The scripter calls ModCurAV Health 11. S'Razra now has a Health of 58.8 out of 94. S'Razra's health bar increases again.
ModMaximumActorValue (ModMaxAV)Edit
- (float) ModMaxAV (avtype)value (float)modifier
Modifies the maximum value but not the current value of the corresponding actor value. Returns the new maximum value.
Example: S'Razra once again has a Health of 47.8 out of 94. The scripter calls ModMaxAV Health 11. S'Razra now has a Health of 47.8 out of 105. S'Razra's health bar appears to shrink, as the ratio of current health to maximum health has decreased.
SetActorValue (SetAV)Edit
- (float) SetAV (avtype)value (float)setting
Sets the current value and the maximum value of the corresponding actor value to setting, ignoring magic modifiers. Returns the new value (can be either the current or the maximum, since both would be equal).
SetCurrentActorValue (SetCurAV)Edit
- (float) SetCurAV (avtype)value (float)setting
Sets the current value but not the maximum value of the corresponding actor value to setting. Returns the new current value.
SetMaximumActorValue (SetMaxAV)Edit
- (float) SetMaxAV (avtype)value (float)setting
Sets the maximum value but not the current value of the corresponding actor value to setting. Returns the new maximum value.
Breakable ObjectsEdit
DescriptionEdit
A Breakable object is an Activator with an associated health rating. It can be affected by impacts from weapons just as Creatures and NPCs can.
In TES4, Breakable objects were possible to a limited extent by providing an OnHit block to an Activator, but the objects had no genuine health rating; the user was required to script and compute the damage themselves using OBSE (unless they did not care about the actual damage-dealing power of the weapon used and simply assumed each attack inflicted a certain amount of damage).
MechanicsEdit
When it reaches zero health, it plays an optional animation (specified manually in the object properties dialog), triggers an OnDeath script block, and deletes itself. Another setting, "Wreck Type", can be filled with an ID, which leaves an item at the object's former coordinates and orientation, with the same scale. (An object can be set to its own wreck type to be effectively indestructible. To remove an object with a self-referencing Wreck type, it must be explicitly disabled and deleted.)
FunctionsEdit
Breakable objects should respond to the various ActorValue functions with regards to their "Health" value.
Custom Actor ValuesEdit
DescriptionEdit
The ability to add custom actor values to the list of actor values, giving all Actors additional properties, would be an extremely welcome feature. In lieu of giving all objects the ability to contain custom properties, this will do in a pinch.
MechanicsEdit
A menu in the TES Construction Set V: Ultimate Professional Home Edition would allow new actor values to be specified like Globals. Actor values that appear in that list would be treated as avtype variables for purposes of the scripting language; GetAV JTValue would not produce an error if the "JTValue" actor value was defined in the Construction Set. The avtype namespace would be shared amongst all plugins, allowing plugins to interact with one another.
(Yes, I'm just kidding about the Ultimate Professional Home Edition. I know you guys wouldn't pull a Vista on us.)