Difference between revisions of "Talk:OBSE Wish List"

From the Oblivion ConstructionSet Wiki
Jump to navigation Jump to search
imported>DragoonWraith
m (typo)
imported>Shademe
m (→‎Semi-Fulfilled Wishes?: Moved a function)
 
(56 intermediate revisions by 13 users not shown)
Line 1: Line 1:
==Disputed Changes==
==Disputed Changes==


If you think something should have stayed on the list or if you think a change in one of the items misinterpretted what was meant, please let us know.
If you think something should have stayed on the list or if you think a change in one of the items misinterpreted what was meant, please let us know.
 
===GetCrosshairDistance===
How far away is the item or surface under the crosshair?
:This can already be done with [[GetDistance]] using the reference returned by [[GetCrosshairRef]] and player.
 
::response: Not if the crosshair is over terrain or water.
 
:::GetCrosshairRef returns the reference that would be activated if the player pressed activate. Terrain and water would require a completely different function. Also, it's unclear what could be done with this specific information, and a different function/request might be better suited.--[[User:Haama|Haama]] 18:21, 26 February 2008 (EST)
 
::::GetCrosshairPos, as in the XYZ coordinates of the intersection of the crosshair-ray with the first thing you see, would be ideal, and a wonderful addition to the scripting language. '''That's''' the one we want.
::::[[User:DragoonWraith|<span style="font-family: Oblivion, Daedric Runes; size=2;">D</span>ragoon <span style="font-family: Oblivion, Daedric Runes; size=2;">W</span>raith]] [[User_talk:DragoonWraith|<span style="font-family: Oblivion, Daedric Runes; size=2;">TALK</span>]] 19:00, 26 February 2008 (EST)


==Dejaside's Binary Examples==
==Dejaside's Binary Examples==


these Is______ functions suggested by Dejaside (unless noted otherwise)
these Is______ functions suggested by Dejaside (unless noted otherwise)
*IsEmpty - checks if container is empty
*IsEmpty - checks if container is empty. - '''Available''' - If [[GetNumItems]] returns 0.
*IsBook - checks if item is a book
*IsBook - checks if item is a book - [[IsBook|DONE]]
*IsSkillBook - checks if book teaches a skill
*IsSkillBook - checks if book teaches a skill
*IsWeapon - checks if item is a weapon
*IsWeapon - checks if item is a weapon - [[IsWeapon|DONE]]
**IsMelee - checks if weapon is melee
**IsMelee - checks if weapon is melee. - '''Available''' - combination of [[IsWeapon]] and [[GetObjectValue]] 103 (weapon type). All types but 4 (Bow) are Melee.
**IsRanged - checks if weapon is ranged
**IsRanged - checks if weapon is ranged - '''Avalilable''' - combination of [[IsWeapon]] and [[GetObjectValue]] 103 (weapon type).  If type is 4 it is ranged.
**IsAmmo - checks if weapon is ammo
**IsStaff - checks if weapon is a staff - '''Available''' - combination of [[IsWeapon]] and [[GetObjectValue]] 103 (weapon type).  If type is 5 it is a staff.
**IsStaff - checks if weapon is a staff (DragoonWraith)
*IsAmmo - checks if weapon is ammo - [[IsAmmo|DONE]]
*IsEdible - checks if item is edible (note: the ai uses 'restore fatigue' to determine edibility)
*IsEdible - checks if item is edible (note: the ai uses 'restore fatigue' to determine edibility) - '''Available''' - [[GetObjectValue]] 210 (food) returns true if the ingredient is edible.
*IsIngredient - checks if item can be used in a potion
*IsIngredient - checks if item can be used in a potion - [[IsIngredient|DONE]]
*IsActivator - checks if object is an activator
*IsActivator - checks if object is an activator - [[IsActivator|DONE]]
*IsDoor - checks if object is a door
*IsDoor - checks if object is a door - [[IsDoor|DONE]]
*IsLoadDoor - checks if door loads a new cell
*IsLoadDoor - checks if door loads a new cell
*IsContainer - checks if object is a container
*IsContainer - checks if object is a container - [[IsAmmo|DONE]]
*IsAnimated - checks whether object has an animation (?)
*IsAnimated - checks whether object has an animation (?)
*IsApparel - checks if item can be worn
*IsApparel - checks if item can be worn '''Available''' - combination of [[IsClothing]] and [[IsArmor]].
*IsArmor - checks if item has armor rating
*IsArmor - checks if item has armor rating - [[IsArmor|DONE]]
*IsRing - checks if item is a ring
*IsRing - checks if item is a ring - '''Available''' - If [[GetObjectValue]] 3 (equipment slot) returns 6 or 7 it is a ring.
*IsAmulet - checks if item is an amulet
*IsAmulet - checks if item is an amulet - '''Available''' - If [[GetObjectValue]] 3 (equipment slot) returns 8 it is an amulet.
*IsKey - checks if item is a key
*IsKey - checks if item is a key - [[IsKey|DONE]]
*IsApparatus - checks if item can be used to make potions
*IsApparatus - checks if item can be used to make potions - [[IsKey|DONE]]
*IsMisc - checks if item has no value beyond its value in gold
*IsMisc - checks if item has no value beyond its value in gold


Line 39: Line 50:
:::Anyway, Dejaside's idea was that these functions would be very easy to create for the OBSE developers, and combinations of them could be more useful than a simple GetObjectType function - for example, an ingredient with Restore Health is both edible and an ingredient - GetObjectType would only return one of these pieces of information, while having these binary tests would allow you to determine both.
:::Anyway, Dejaside's idea was that these functions would be very easy to create for the OBSE developers, and combinations of them could be more useful than a simple GetObjectType function - for example, an ingredient with Restore Health is both edible and an ingredient - GetObjectType would only return one of these pieces of information, while having these binary tests would allow you to determine both.


==CellScan==
*How About a "'''WillRespawn()'''" function... Save me from duplicating a great many scripts[[User:Dejunai|Dejunai]] 10:25, 1 September 2006 (EDT)
This is to discuss the different approaches taken by former Script Extenders to realise a "Cell Scan".
 
MWSE did it that way: it used three different functions to chose from three different items lists (I suppose these were pre-defined by the game):
 
*'''FirstNPC''' - to select the NPC/Creature list
 
*'''FirstStatic''' - to select the Statics list
==Semi-Fulfilled Wishes?==
*'''FirstItem''' - to select the list containing other items in a cell
Several of the requests on the wish list haven't been given their own specific functions but can be partially or completely solved using existing OBSE functions. I haven't deleted them from the wishlist, but maybe they should be moved down in priority? [[User:Scruggs|Scruggs]] 20:57, 17 October 2006 (EDT)
All these returned the first ref on the list.
 
Then, there was '''NextRef''' which took a reference (like the ones returned by the commands above or this very command) as a parameter and returned the next ref after the one specified. Refs could be encoded in long type variables and used in a similar manner as in Oblivion (imho better, one could actualy access variables on the refs).
*'''isBowDrawn''' - A boolean function to return if player has nocked an arrow. It should be usefull to give the possibility to "unnock", but even an unnock function all by itself should be very usefull. It'd be best to be able to know also if the arrow has been fully nocked or not. I'm thinking about greater powers to be used only once a day on a single thrown arrow, without having to create a new one to simulate this effect (so without giving any possibility to stock them every day).
:: You can do this by checking for the length of time the attack button has been held down while a bow and arrow are equipped.
 
*'''DisablePlayerControls2''' - Disables ALL controls including mouse movements for the player, but still make the TapKey, HammerKey etc. functions work as usual. --[[User:Mandrill|Mandrill]] 06:38, 14 August 2006 (EDT) - This could be done by using [[DisableKey]] on all the keys on the keyboard, as [[TapKey]] and [[IsKeyPressed]] '''should''' still work (needs testing) - An easier way to do this is to call disableplayercontrols, disable mouse, and disablekey on the console. - [[User:DragoonWraith|<font face="Oblivion,Daedric Runes" size=2>D</font>ragoon <font face="Oblivion,Daedric Runes" size=2>W</font>raith]] [[User_talk:DragoonWraith|<font face="Oblivion,Daedric" size=2>TALK</font>]]: IsKeyPressed does work, I haven't tried TapKey.
 
*'''OnJump''' - trigger the script when the object jumps
:: Considering that only the player is actually capable of jumping, this can be done by detecting when the Jump key is pressed.
::: I've witnessed NPCs jumping in Oblivion several times, usually when trapped behind a low object.  One time I even witnessed an Imperial Legion Horseman jumping his horse (or trying, anyway) over a signpost. --[[User:JT|JT]] 20:03, 25 April 2007 (EDT)
 
*'''GetStandingActor''' - returns ref variable for the last actor to step onto the object. Would be hugely useful for traps.
:: This can be done with trigger zones placed either separately from the object or incorporated into the .nif.
 
*'''GetCellChanged''' request: I dont believe changing of cells actually goes on over what OB considers a single frame. Additionally what is meant by cell changes is different if you are in/crossing an interior or exterior cells. All this aside, this method is NOT necesary. A simple quest script that tracks the player position using an Xmarker can detect this easiliy with player.GetInSameCell MyXmarker and MyXmarker.MoveTo player, coupled with player.IsInInterior commands.


Afaik MWE could only search for NPCs/Creatures which it calls "Livings" so the command was named '''NextLiving'''. MWE remembered the last encountered ref automatically. It returned a "-1" value (to a remote variable) if the scan is through. '''ClearLiving''' was used to reset the search to the first item on the list.<br>
::[[User:DragoonWraith|<font face="Oblivion,Daedric Runes" size=2>D</font>ragoon <font face="Oblivion,Daedric Runes" size=2>W</font>raith]] [[User_talk:DragoonWraith|<font face="Oblivion,Daedric" size=2>TALK</font>]]: See the example at [[GetParentCell]] for a script that should emulate CellChanged from Morrowind... JOG also said that it was no good, but I didn't understand why. Perhaps you could explain it? Of course, you ''could'' do it without OBSE using an Activator and GetInSameCell/MoveTo (why do you need GetInInterior?), that also works (but is less convenient, methinks).
[there was also a third command needed to succeed, but this is of no interest here]
:::I dont think GetParentCell gives you what you would expect [in this script]. IsInInterior is very important if you consider that you are changing cells all the time when outside and typically it isn't your intention to detect these types of cell changes.
::::I ''think'' JOG's gripe with GetParentCell is that, in Morrowind, CellChanged returned true when the player entered the cell containing the scripted object. It was closer to something like an '''OnPlayerEntry''' function. While that was often more annoying than useful, I can see his point (if that is in fact his point ;)), although [[GetParentCell]] along with [[GetInSameCell]] are enough for a (somewhat clunky) workaround. :shrug: [[User:Scruggs|Scruggs]] 23:24, 25 October 2006 (EDT)


Now, I think the question whether such a function is necessary is redundant. Mandatory though is the question '''how this should work'''. Personally, I like the MWSE approach a bit more, but it showed to be slower (though cdcooley said this was because it wasn't optimized; I can't tell).
::::Actually you can scrub my comment on GetParentCell. Without the CS in front of me I confused this with something else and didn't realize it was an OBSE command. My method does work perfectly as a non-OBSE solution. In LTC I actually track last inside and outside locations so I can have Chaotic Intervention to teleport you to the front door of a dungeon.) [[User:GuidoBot|GuidoBot]] 00:08, 26 October 2006 (EDT)


Then, there is the concept used in the OBSE for Inventory Scan. Iterate using a number instead of a reference.
*'''getObjectGrabbed''' - use [[isControlPressed]] and [[getCrosshairRef]]. Not exactly fool proof, but works most of the time. A catch can be setup to prevent any false-positives - [[User:Shademe|shademe]] 22:49, 22 December 2008 (EST)


===[[User:GreyWanderer|Grey]]'s proposal===
== Arrays ==
I was about to propose a mix of MWSE and MWE approaches. One command to actually select a list (or item type) to scan and one command to actually iterate through the list:


====''CellScan [short_integer]''====
I noticed that there is an "Arrays" wish in the language enhancements. I think a possible (and easy to use) workaround would be using a ''Get/SetNthVariable'' function on a script, where there are variables listed as elements of the array. E.g. if I create a quest with the name ''arrayscript'', and declare 20 variables in it, then I could determine whether the 20 variables are in decreasing order or not, with using a Label+Goto loop, to check ''if GetNthVariable LoopCount arrayscript == GetNthVariable LoopCount+1 arrayscript'' in another script. [[User:Tibixe|Tibixe]] 13:05, 5 January 2007 (EST)
Takes a mandatory integer as a parameter. Returns the current state set in the parameter, and "-1" if none.


0 should be "all" ?<br>
:That could be one way, although it would be extremely tedious to write out individual variables for each element of a sizable array; and multi-dimensional arrays would require some math on the scripter's part to figure out the index required for the variable.
1 should be NPCs/Creatures<br>
:For what it's worth, there's a thread on the CS forum in which we've figured out how to implement linkless lists and vectors (extensible arrays) using inventories; a vector could also be used as the basis for a linked list. Discussion here: http://www.elderscrolls.com/forums/index.php?showtopic=614540 [[User:Scruggs|Scruggs]] 22:53, 5 January 2007 (EST)
2-... should be additional lists / types of items


====''NextRef [optional: ref]''====
::This wish is being fulfilled, and is currently in Beta. See [http://www.bethsoft.com/bgsforums/index.php?showtopic=778904&hl=pluggy the Bethesda Forums thread "<nowiki>[WIP]</nowiki> Pluggy"] for more details and discussion.
This returns the next reference after the currently selected (or the first on the list if none). Returns "-1" if there is no "next" reference.


The optional parameter is to shorten the time needed to do the scan if we know two references are near each other. "-1" as a parameter resets to the beginning of the list.
== Custom Shaders ==


====example:==== (simple, runs only once)
I'm looking for a means to add new shaders to the PC camera for new nighteye-style imaging effects, psychedelic effects (drugs/spells), and reactionary effects (variants of [[TriggerHitShader]]). This would start with scripting new imaging spells for each of the effects in [http://www.tessource.net/files/file.php?id=10379 Heat Vision Shader for Nighteye], [http://www.tessource.net/files/file.php?id=2927 Nighteye Shaders], and [http://www.tessource.net/files/file.php?id=7327 Nighteye Shader Replacement]. Then maybe expand it to supplement custom imaging for Khajiits, werewolves, vampires, liches, and various goggles (e.g. color enhanced thermal). Adding something for skooma and maybe some poisons (mushrooms) might be good too. EDIT: All natural effects would include a key binding for toggling it on/off, unnatural would use a spell. --[[User:MegaBurn|MegaBurn]] 00:25, 3 July 2007 (EDT)
<pre>
scn ExampleQuestScript


ref tempref ; takes the output of NextRef to work with the object
:You're going to want to keep an eye on Timeslip's Oblivion Graphics Extender plug-in for OBSE. I believe you can find the thread on the ESF.
:[[User:DragoonWraith|<span style="font-family: Oblivion, Daedric Runes; size=2;">D</span>ragoon <span style="font-family: Oblivion, Daedric Runes; size=2;">W</span>raith]] [[User_talk:DragoonWraith|<span style="font-family: Oblivion, Daedric Runes; size=2;">TALK</span>]] 09:52, 3 July 2007 (EDT)


short damage ; only needed for this very example, in which we do a dnd-like "fortitude save"
::Thanks, I replied to the [http://www.bethsoft.com/bgsforums/index.php?showtopic=699639&st=0 OGE thread], seems like it hasn't been updated in a while though. It really sounds good, any idea when OBSE will get plug-in support? --[[User:MegaBurn|MegaBurn]] 16:32, 3 July 2007 (EDT)


CellScan 1 ; search for NPCs/Creatures
:::OBSE sort of has plug-in support. It's disabled, but you can enable it pretty easily. A couple of OBSE plug-ins have been released (a G15 keyboard plugin, an EAX plugin) with downloads of a modified version of OBSE v0011. In v0012, presumably, they will 'officially' turn on plug-in support, so that won't be necessary. As for Timeslip, I believe his style has always been to work on things for a while, checking the thread for suggestions but not commenting, and then releasing. Not one for a lot of hyping or whatever.
:::[[User:DragoonWraith|<span style="font-family: Oblivion, Daedric Runes; size=2;">D</span>ragoon <span style="font-family: Oblivion, Daedric Runes; size=2;">W</span>raith]] [[User_talk:DragoonWraith|<span style="font-family: Oblivion, Daedric Runes; size=2;">TALK</span>]] 03:30, 4 July 2007 (EDT)


while done == 0
      set tempref to NextRef
      if tempref == -1
        set done to -1 ; we only want to loop once
      else
        if tempref.getav health <= 5 && tempref.GetDead != 1
            set damage to ( GetRandomPercent - tempref.getav endurance ) / 10
            if damage > 0
              tempref.modav health damage
            endif
        endif
      endif
endwhile


StopQuest ExampleQuest
</pre>
I'll try to find a better example that uses all of the possibilities, but this should work for now. --[[User:GreyWanderer|Grey]] 15:50, 3 August 2006 (EDT)


:[[User:DragoonWraith|<font face="Oblivion,Daedric Runes" size=3>D</font>ragoon <font face="Oblivion,Daedric" size=3>W</font>raith]] [[User_talk:DragoonWraith|<font face="Oblivion,Daedric" size=2>TALK</font>]] 16:19, 3 August 2006 (EDT): Why can't we just use the tried-and-true method of casting a large-radius, LOS-ignoring scripted spell for getting nearby references? Is there a particular reason you need to be able to iterate through the cell rather than simply scripting everyone in the cell?
==Valid requests for fulfilled wishes==
I've read this list again and found some requests that could be done with TSFC, but could be implemented in OBSE, such as ''ModNthEffectItemScriptName''.


::[[User:GreyWanderer|Grey]] 16:44, 3 August 2006 (EDT): Well, performance and speed, I suppose. Plus, do spells affect all items in a cell, not just NPCs/Creatures? And I think it is more reliable than the method mentioned. But you are right to question this request. "While" is needed to really work with it and the binary functions listed at the top first make this really useful.<br>
Who requested it should know that it is possible, but the OBSE team should know that someone requested that feature.


::To wait for a spell to be cast through the whole cell and wait for the responses of the scripts started on each NPC in range ... sometimes just isn't the right thing to do I believe. My game is quite slow already; I notice some delays in Quests of the original game and even though I know of prioritising I can't trust the methods to be reliable enough. Plus, with this method, we can also split the scan in parts specified by us, not by the game. In Morrowind scripts were a problem, because they ran every frame and often modders weren't responsible. Now we have the opposite: not many lags because of that, but delays. Hope you understand.
What should we do about those?


:::[[User:DragoonWraith|<font face="Oblivion,Daedric Runes" size=3>D</font>ragoon <font face="Oblivion,Daedric" size=3>W</font>raith]] [[User_talk:DragoonWraith|<font face="Oblivion,Daedric" size=2>TALK</font>]] 19:03, 3 August 2006 (EDT): Well, spells ''can'' hit items, though this is limited because they will only run for one frame. That's long enough to get reference variables to them, though.
[[User:Tibixe|Tibixe]] 09:47, 26 December 2007 (EST)


:::Of course, the spell only hits items actually placed in the game world - but we can get items in inventories.
:I think they're also working on message stuff, so it might be best to leave it. But really, the best place to ask that question would be on the OBSE thread or via PM. They check those much more frequently.--[[User:Haama|Haama]] 11:27, 26 December 2007 (EST)


:::I haven't seen any slowdown due to spells, but then my computer has a good processor and a lot of RAM, it's the video card that's bad. If this is more efficient, then that is a good thing. MWSE's version of this wasn't very efficient as I remember it, though.
:: If you implement something in TSFC, by all means move it to the TSFC section of the Wishes Fulfilled page. If someone feels a particular function belongs in the OBSE core rather than being fulfilled by a plugin, they can comment on that page or on the forums. The implementation of something like ModNthEffectItemScriptName may very well differ between TSFC and OBSE (TSFC probably would give the option of using a stringID as a parameter), but the wish is fulfilled either way, and that's one less thing on the wish list. ;) [[User:Scruggs|Scruggs]] 18:36, 26 December 2007 (EST)

Latest revision as of 22:49, 22 December 2008

Disputed Changes[edit source]

If you think something should have stayed on the list or if you think a change in one of the items misinterpreted what was meant, please let us know.

GetCrosshairDistance[edit source]

How far away is the item or surface under the crosshair?

This can already be done with GetDistance using the reference returned by GetCrosshairRef and player.
response: Not if the crosshair is over terrain or water.
GetCrosshairRef returns the reference that would be activated if the player pressed activate. Terrain and water would require a completely different function. Also, it's unclear what could be done with this specific information, and a different function/request might be better suited.--Haama 18:21, 26 February 2008 (EST)
GetCrosshairPos, as in the XYZ coordinates of the intersection of the crosshair-ray with the first thing you see, would be ideal, and a wonderful addition to the scripting language. That's the one we want.
Dragoon Wraith TALK 19:00, 26 February 2008 (EST)

Dejaside's Binary Examples[edit source]

these Is______ functions suggested by Dejaside (unless noted otherwise)

  • IsEmpty - checks if container is empty. - Available - If GetNumItems returns 0.
  • IsBook - checks if item is a book - DONE
  • IsSkillBook - checks if book teaches a skill
  • IsWeapon - checks if item is a weapon - DONE
    • IsMelee - checks if weapon is melee. - Available - combination of IsWeapon and GetObjectValue 103 (weapon type). All types but 4 (Bow) are Melee.
    • IsRanged - checks if weapon is ranged - Avalilable - combination of IsWeapon and GetObjectValue 103 (weapon type). If type is 4 it is ranged.
    • IsStaff - checks if weapon is a staff - Available - combination of IsWeapon and GetObjectValue 103 (weapon type). If type is 5 it is a staff.
  • IsAmmo - checks if weapon is ammo - DONE
  • IsEdible - checks if item is edible (note: the ai uses 'restore fatigue' to determine edibility) - Available - GetObjectValue 210 (food) returns true if the ingredient is edible.
  • IsIngredient - checks if item can be used in a potion - DONE
  • IsActivator - checks if object is an activator - DONE
  • IsDoor - checks if object is a door - DONE
  • IsLoadDoor - checks if door loads a new cell
  • IsContainer - checks if object is a container - DONE
  • IsAnimated - checks whether object has an animation (?)
  • IsApparel - checks if item can be worn Available - combination of IsClothing and IsArmor.
  • IsArmor - checks if item has armor rating - DONE
  • IsRing - checks if item is a ring - Available - If GetObjectValue 3 (equipment slot) returns 6 or 7 it is a ring.
  • IsAmulet - checks if item is an amulet - Available - If GetObjectValue 3 (equipment slot) returns 8 it is an amulet.
  • IsKey - checks if item is a key - DONE
  • IsApparatus - checks if item can be used to make potions - DONE
  • IsMisc - checks if item has no value beyond its value in gold


Just wondered if consolidating some suggested functions might make things easier to read. i.e., for the various isMisc, isClothing functions, wouldn't they be better served by a single getObjectType function? Don't want the list to become overwhelming, that's all. Scruggs 22:26, 1 August 2006 (EDT)
Dragoon Wraith TALK 09:35, 2 August 2006 (EDT): Yes, as mentioned in the thread, I'm going to in charge of keeping this clean. That project comes as soon as I finally finish Danger Sense for Addiktive (tonight, probably). It'll be cleaned up by the weekend.
Dragoon Wraith TALK 12:07, 2 August 2006 (EDT): See, it's cleaned up now! And it's only Wednesday!
Anyway, Dejaside's idea was that these functions would be very easy to create for the OBSE developers, and combinations of them could be more useful than a simple GetObjectType function - for example, an ingredient with Restore Health is both edible and an ingredient - GetObjectType would only return one of these pieces of information, while having these binary tests would allow you to determine both.
  • How About a "WillRespawn()" function... Save me from duplicating a great many scriptsDejunai 10:25, 1 September 2006 (EDT)


Semi-Fulfilled Wishes?[edit source]

Several of the requests on the wish list haven't been given their own specific functions but can be partially or completely solved using existing OBSE functions. I haven't deleted them from the wishlist, but maybe they should be moved down in priority? Scruggs 20:57, 17 October 2006 (EDT)

  • isBowDrawn - A boolean function to return if player has nocked an arrow. It should be usefull to give the possibility to "unnock", but even an unnock function all by itself should be very usefull. It'd be best to be able to know also if the arrow has been fully nocked or not. I'm thinking about greater powers to be used only once a day on a single thrown arrow, without having to create a new one to simulate this effect (so without giving any possibility to stock them every day).
You can do this by checking for the length of time the attack button has been held down while a bow and arrow are equipped.
  • DisablePlayerControls2 - Disables ALL controls including mouse movements for the player, but still make the TapKey, HammerKey etc. functions work as usual. --Mandrill 06:38, 14 August 2006 (EDT) - This could be done by using DisableKey on all the keys on the keyboard, as TapKey and IsKeyPressed should still work (needs testing) - An easier way to do this is to call disableplayercontrols, disable mouse, and disablekey on the console. - Dragoon Wraith TALK: IsKeyPressed does work, I haven't tried TapKey.
  • OnJump - trigger the script when the object jumps
Considering that only the player is actually capable of jumping, this can be done by detecting when the Jump key is pressed.
I've witnessed NPCs jumping in Oblivion several times, usually when trapped behind a low object. One time I even witnessed an Imperial Legion Horseman jumping his horse (or trying, anyway) over a signpost. --JT 20:03, 25 April 2007 (EDT)
  • GetStandingActor - returns ref variable for the last actor to step onto the object. Would be hugely useful for traps.
This can be done with trigger zones placed either separately from the object or incorporated into the .nif.
  • GetCellChanged request: I dont believe changing of cells actually goes on over what OB considers a single frame. Additionally what is meant by cell changes is different if you are in/crossing an interior or exterior cells. All this aside, this method is NOT necesary. A simple quest script that tracks the player position using an Xmarker can detect this easiliy with player.GetInSameCell MyXmarker and MyXmarker.MoveTo player, coupled with player.IsInInterior commands.
Dragoon Wraith TALK: See the example at GetParentCell for a script that should emulate CellChanged from Morrowind... JOG also said that it was no good, but I didn't understand why. Perhaps you could explain it? Of course, you could do it without OBSE using an Activator and GetInSameCell/MoveTo (why do you need GetInInterior?), that also works (but is less convenient, methinks).
I dont think GetParentCell gives you what you would expect [in this script]. IsInInterior is very important if you consider that you are changing cells all the time when outside and typically it isn't your intention to detect these types of cell changes.
I think JOG's gripe with GetParentCell is that, in Morrowind, CellChanged returned true when the player entered the cell containing the scripted object. It was closer to something like an OnPlayerEntry function. While that was often more annoying than useful, I can see his point (if that is in fact his point ;)), although GetParentCell along with GetInSameCell are enough for a (somewhat clunky) workaround. :shrug: Scruggs 23:24, 25 October 2006 (EDT)
Actually you can scrub my comment on GetParentCell. Without the CS in front of me I confused this with something else and didn't realize it was an OBSE command. My method does work perfectly as a non-OBSE solution. In LTC I actually track last inside and outside locations so I can have Chaotic Intervention to teleport you to the front door of a dungeon.) GuidoBot 00:08, 26 October 2006 (EDT)
  • getObjectGrabbed - use isControlPressed and getCrosshairRef. Not exactly fool proof, but works most of the time. A catch can be setup to prevent any false-positives - shademe 22:49, 22 December 2008 (EST)

Arrays[edit source]

I noticed that there is an "Arrays" wish in the language enhancements. I think a possible (and easy to use) workaround would be using a Get/SetNthVariable function on a script, where there are variables listed as elements of the array. E.g. if I create a quest with the name arrayscript, and declare 20 variables in it, then I could determine whether the 20 variables are in decreasing order or not, with using a Label+Goto loop, to check if GetNthVariable LoopCount arrayscript == GetNthVariable LoopCount+1 arrayscript in another script. Tibixe 13:05, 5 January 2007 (EST)

That could be one way, although it would be extremely tedious to write out individual variables for each element of a sizable array; and multi-dimensional arrays would require some math on the scripter's part to figure out the index required for the variable.
For what it's worth, there's a thread on the CS forum in which we've figured out how to implement linkless lists and vectors (extensible arrays) using inventories; a vector could also be used as the basis for a linked list. Discussion here: http://www.elderscrolls.com/forums/index.php?showtopic=614540 Scruggs 22:53, 5 January 2007 (EST)
This wish is being fulfilled, and is currently in Beta. See the Bethesda Forums thread "[WIP] Pluggy" for more details and discussion.

Custom Shaders[edit source]

I'm looking for a means to add new shaders to the PC camera for new nighteye-style imaging effects, psychedelic effects (drugs/spells), and reactionary effects (variants of TriggerHitShader). This would start with scripting new imaging spells for each of the effects in Heat Vision Shader for Nighteye, Nighteye Shaders, and Nighteye Shader Replacement. Then maybe expand it to supplement custom imaging for Khajiits, werewolves, vampires, liches, and various goggles (e.g. color enhanced thermal). Adding something for skooma and maybe some poisons (mushrooms) might be good too. EDIT: All natural effects would include a key binding for toggling it on/off, unnatural would use a spell. --MegaBurn 00:25, 3 July 2007 (EDT)

You're going to want to keep an eye on Timeslip's Oblivion Graphics Extender plug-in for OBSE. I believe you can find the thread on the ESF.
Dragoon Wraith TALK 09:52, 3 July 2007 (EDT)
Thanks, I replied to the OGE thread, seems like it hasn't been updated in a while though. It really sounds good, any idea when OBSE will get plug-in support? --MegaBurn 16:32, 3 July 2007 (EDT)
OBSE sort of has plug-in support. It's disabled, but you can enable it pretty easily. A couple of OBSE plug-ins have been released (a G15 keyboard plugin, an EAX plugin) with downloads of a modified version of OBSE v0011. In v0012, presumably, they will 'officially' turn on plug-in support, so that won't be necessary. As for Timeslip, I believe his style has always been to work on things for a while, checking the thread for suggestions but not commenting, and then releasing. Not one for a lot of hyping or whatever.
Dragoon Wraith TALK 03:30, 4 July 2007 (EDT)


Valid requests for fulfilled wishes[edit source]

I've read this list again and found some requests that could be done with TSFC, but could be implemented in OBSE, such as ModNthEffectItemScriptName.

Who requested it should know that it is possible, but the OBSE team should know that someone requested that feature.

What should we do about those?

Tibixe 09:47, 26 December 2007 (EST)

I think they're also working on message stuff, so it might be best to leave it. But really, the best place to ask that question would be on the OBSE thread or via PM. They check those much more frequently.--Haama 11:27, 26 December 2007 (EST)
If you implement something in TSFC, by all means move it to the TSFC section of the Wishes Fulfilled page. If someone feels a particular function belongs in the OBSE core rather than being fulfilled by a plugin, they can comment on that page or on the forums. The implementation of something like ModNthEffectItemScriptName may very well differ between TSFC and OBSE (TSFC probably would give the option of using a stringID as a parameter), but the wish is fulfilled either way, and that's one less thing on the wish list. ;) Scruggs 18:36, 26 December 2007 (EST)