[Rel] Oblivion Script Extender (OBSE) 0021 Beta 3

Post » Wed May 08, 2013 6:37 pm

Continuing from the http://www.gamesas.com/topic/1427044-rel-oblivion-script-extender-obse-0021-beta-2/

The Oblivion Script Extender, or OBSE for short, is a modder's resource that expands the scripting capabilities of Oblivion. It doesn't make any modifications to Oblivion.exe, TESConstructionSet.exe, or any other files in your Oblivion install, so don't worry about permanent side effects. As of v0017, OBSE requires the 1.2.0.416 version of Oblivion.

http://obse.silverlock.org/beta/obse_0021_beta_3.zip - current beta build, for mod and plugin developers

http://obse.silverlock.org/download/obse_0020.zip - current stable version, recommended for general use
http://obse.silverlock.org/
http://obse.silverlock.org/obse_command_doc.html - newly reformatted documentation

What's new:

Spoiler



Readme (abbreviated):
Spoiler



For mod developers:
http://oblivion.nexusmods.com/mods/36370 - An OBSE plugin that fixes bugs in the CS and adds new features to it

User avatar
CArla HOlbert
 
Posts: 3342
Joined: Wed Feb 21, 2007 11:35 pm

Post » Wed May 08, 2013 12:36 pm

OBSE 0021 beta 2
Latest CSE 6.0

Running into an issue with my Network Plugin plugin. When I run CSE and go to the scripts editing and do a Compile All Active scripts it will crash.

It does not like something about my plugin:
Problem signature:  Problem Event Name:    BEX  Application Name:    TESConstructionSet.exe  Application Version:    1.2.0.404  Application Timestamp:    461430cf  Fault Module Name:    NetworkPipe.dll  Fault Module Version:    0.0.0.0  Fault Module Timestamp:    516c7b6f  Exception Offset:    0002927d  Exception Code:    c0000417  Exception Data:    00000000  OS Version:    6.1.7601.2.1.0.256.48  Locale ID:    1033  Additional Information 1:    e7a7  Additional Information 2:    e7a7d3b0d9a27c1f99c783af281c8f5b  Additional Information 3:    ddef  Additional Information 4:    ddef2fb3e9e0aea32395242e5695f6bf

This is from the logs:
OBSE editor: initialize (version = 21.1 01020000)oblivion root = C:\Games\Bethesda Softworks\Oblivion\plugin directory = C:\Games\Bethesda Softworks\Oblivion\Data\OBSE\Plugins\checking plugin C:\Games\Bethesda Softworks\Oblivion\Data\OBSE\Plugins\\Construction Set Extender.dllplugin C:\Games\Bethesda Softworks\Oblivion\Data\OBSE\Plugins\\Construction Set Extender.dll (00000002 CSE 0600039D) loaded correctlychecking plugin C:\Games\Bethesda Softworks\Oblivion\Data\OBSE\Plugins\\NetworkPipe.dllSetOpcodeBase 00002790RegisterCommand NetworkPipe_StartService (2790)RegisterCommand NetworkPipe_StopService (2791)RegisterCommand NetworkPipe_Receive (2792)RegisterCommand NetworkPipe_Send (2793)RegisterCommand NetworkPipe_IsNewGame (2794)RegisterCommand NetworkPipe_CreateClient (2795)RegisterCommand NetworkPipe_KillClient (2796)RegisterCommand NetworkPipe_SetData (2797)RegisterCommand NetworkPipe_GetData (2798)plugin C:\Games\Bethesda Softworks\Oblivion\Data\OBSE\Plugins\\NetworkPipe.dll (00000002 NetworkPipe_plugin 00000001) loaded correctlypatched
I probably need to reduce the log spam...

The log file from the plugin is full of all sorts of crap. I suppose that could be the issue. Just log spam. I will check on that.
User avatar
Anthony Diaz
 
Posts: 3474
Joined: Thu Aug 09, 2007 11:24 pm

Post » Wed May 08, 2013 2:29 pm

Okay, sorry for the false alarm. Getting rid of the precompile _MESSAGE() spam got rid of the problem. Woohoo!
User avatar
Luna Lovegood
 
Posts: 3325
Joined: Thu Sep 14, 2006 6:45 pm

Post » Wed May 08, 2013 9:44 pm

I'm curious - Did the editor crash only when you had CSE enabled?
User avatar
Frank Firefly
 
Posts: 3429
Joined: Sun Aug 19, 2007 9:34 am

Post » Wed May 08, 2013 10:30 pm

I only saw it with CSE, but someone posted on my mod comments that they saw the same crash without CSE. It has something to do with a ton of log entries getting stuffed in there.

BTW, I really like the compile scripts for one mod feature. It is a huge time saver.

Edit:
Oh, and if I remember right, when it crashed on the CSE I think the it was using like 3GB of memory. So whatever the _MESSAGE() was doing it was not getting a chance to flush its memory. The log file was huge, so that does not surprise me. The other person who first noticed this issue uses the CS without CSE and after fixing this their problem went away.
User avatar
Rachel Eloise Getoutofmyface
 
Posts: 3445
Joined: Mon Oct 09, 2006 5:20 pm

Post » Wed May 08, 2013 3:53 pm

Possibly wishful thinking, but I was wondering, could there be a way to alter the animation speed of weapon motions without altering the speed of the weapon itself?
Kind of like ModPCMovementSpeed alters the player movement speed without altering his speed attribute, I was thinking something like Get|Set|ModWeaponAnimSpeedMult, with a value of 1 being no multiplier, and going from 0 (weapon can't be swung I guess) to whatever over 1 (though weapons with too much speed seem buggy and can't be swung at all, so maybe a cap is needed). Could be enough for just the player if it isn't possible for any calling actors.

Of course, but I just prefer not to if there could be a way to help it. My idea is to give the speed stat of NPCs a tangible use beyond their movement speed, kind of like in Daggerfall.
User avatar
Harry Leon
 
Posts: 3381
Joined: Tue Jun 12, 2007 3:53 am

Post » Wed May 08, 2013 2:05 pm

@migck,
Can you get away with cloning the weapon and tweaking the speed of that weapon?
User avatar
Lynne Hinton
 
Posts: 3388
Joined: Wed Nov 15, 2006 4:24 am

Post » Thu May 09, 2013 12:06 am

ShadeMe, would it be feasible, effort and time wise, to allow the passing of arrays as function arguments.
Many thanks.
Not at all, but thank you nevertheless. It was an instructive reading.
I was simply trying to create a map of cloneForms, using their object reference as a a key.Since that wasn't possible, I ended up making a stringMap and using: "toString" for assignment and retrieval in this fashion:
let myStringMap [$cloneFormRef] := value
I found that when using toString on a reference it returns the reference's name, acting exactly as getName.
User avatar
JAY
 
Posts: 3433
Joined: Fri Sep 14, 2007 6:17 am

Post » Thu May 09, 2013 12:16 am

You should be able to use the http://obse.silverlock.org/obse_command_doc.html#Compiler_Override for this.
User avatar
Nims
 
Posts: 3352
Joined: Thu Jun 07, 2007 3:29 pm

Post » Wed May 08, 2013 6:49 pm

Five Alpha,
; this should workset keystring to sv_construct "%i" refvarlet myStringMap [keystring] := valuesv_destruct keystring; this might work, would this cause bloat?let myStringMap [(sv_construct "%i" refvar)] := value
User avatar
Kahli St Dennis
 
Posts: 3517
Joined: Tue Jun 13, 2006 1:57 am

Post » Wed May 08, 2013 3:19 pm

Hi ShadeMe

Been a long time since I've been on these forums. I've mostly been over on the ENBDev forums. We are discussing adding shadows to Oblivion and I know you had made some progress a few years back with it. Can you explain a bit where you left off or got svck in development? Some of the people over there would possibly like to re-visit the project. You can PM me if you'd like.

Thanks
User avatar
casey macmillan
 
Posts: 3474
Joined: Fri Feb 09, 2007 7:37 pm

Post » Wed May 08, 2013 3:11 pm

Inspired by another thread on GetRace:

Is there any way to actually get the Race ID itself rather than just GetIsRace?

I'm dealing with an array scenario which will ending up dealing with all kinds of language variants because although I am sure the race ID is the same, the GetRace part will return differently depending on what language is being used.

End users have the option of adding races to a list, however, it only accepts "race names", not the race id.

The array includes creatures (defines by the folder name in which the skeleton.nif mesh is stored) and races (defined by the race name, bit I would prefer the race ID).

If I can't get the raceID directly, is there maybe a method of getting an array of the raceids?

What my code does is use the race/creature name as the key in an array. So I check to see if actor is creature, if so it gets the folder name of the skeleton.nif. If it isn't a creature, my only option is GetRace, unless I can get GetRaceID, or an array of all RaceIDs that I could then loop through using GetIsRace.

See what I mean?
User avatar
Louise Dennis
 
Posts: 3489
Joined: Fri Mar 02, 2007 9:23 pm

Post » Wed May 08, 2013 5:35 pm

Does anyone have the script to insert into my mod to make it so that custom races would be referred to as default races?

Using SetRaceAlias and GetIsRace..

Thanks

http://www.gamesas.com/topic/1458082-obse-getrace-function/

User avatar
gary lee
 
Posts: 3436
Joined: Tue Jul 03, 2007 7:49 pm

Post » Wed May 08, 2013 6:35 pm

Not sure . . . According to the docs, GetRace does return the FormID of the race. Having the FormID, I suppose GetName will give you the name of the race.

User avatar
rebecca moody
 
Posts: 3430
Joined: Mon Mar 05, 2007 3:01 pm

Post » Wed May 08, 2013 11:20 pm

That's not what I've been getting. I expect "DarkElf" but it returns "Dark Elf".
User avatar
Mark Hepworth
 
Posts: 3490
Joined: Wed Jul 11, 2007 1:51 pm

Post » Wed May 08, 2013 6:03 pm

It does return the FormID ( just double checked it)

These lines:

Let MyRef := Playerref.GetRace

print sv_construct "%i %n " MyRef MyRef

Print;

000224FD Nord

Where 000224FD is the FormID of the Nord race

How are you checking it?

User avatar
Steve Smith
 
Posts: 3540
Joined: Sat Jun 30, 2007 10:47 am

Post » Wed May 08, 2013 11:52 pm

Nord isn't a good test, since it's only one word. Try a Dark Elf.
User avatar
Mari martnez Martinez
 
Posts: 3500
Joined: Sat Aug 11, 2007 9:39 am

Post » Wed May 08, 2013 9:08 pm

If I recall correctly, there were far too many engine-side limitations that couldn't be overcome - Blending and performance issues for starters. I wanted to write a new exterior-only shadow renderer a la MGE-XE but never found the time. It's still on the back burner though, I might revisit it some day. In any event, we're going off-topic.

Something like this would do:

setRaceAlias customRace defaultRace 1
...where customRace and defaultRace are the respective editorIDs.

@saebel, are you talking about editorIDs? Most forms don't have theirs loaded at runtime. You can however use my RuntimeEditorIDs plugin to workaround that limitation.

User avatar
Lizs
 
Posts: 3497
Joined: Mon Jul 17, 2006 11:45 pm

Post » Wed May 08, 2013 3:41 pm

I'm such an idiot. I didn't connect the Race ID as the editor ID. Of course it is!

What I have already works. As long as a user puts in the entire race name in the ini file, it'll be fine. I'm overthinking it when I have a workable solution already.

I'm going to get some sleep now.
User avatar
lucy chadwick
 
Posts: 3412
Joined: Mon Jul 10, 2006 2:43 am

Post » Wed May 08, 2013 3:45 pm

So here's a quick question.

I got it into my head that I can't reliably used GetSecondsPassed within a function call script. I believe I need to capture the GSP in the parent script and then pass it to the function. Is that right?

User avatar
Karl harris
 
Posts: 3423
Joined: Thu May 17, 2007 3:17 pm

Post » Wed May 08, 2013 11:54 pm

It works fine in a function script.

In my case, I run that function every frame and it works just fine.

Not sure how it behaves if you don't run the function every frame.

User avatar
dell
 
Posts: 3452
Joined: Sat Mar 24, 2007 2:58 am

Post » Wed May 08, 2013 3:54 pm

Well, my concern is that there are multiple tokens, each running the same token script. The token script calls various function sub-scripts under various conditions. So although I know that the token script will keep track of it's own get seconds past, I'm not sure if the function script will correctly do the same.

I'm debating whether or not to make a particular feature available only to the player, available to all, or just chuck it.

The feature tracks how long you are in the air (if you aren't flying) and then depending on how much mass you have and the terrain you land on, determines a noise penalty that might help those nearby hear you.

It's a subtle feature so I'm not sure how important it is. I have two tokens... one for the player and one for NPCs. All the features they have in common are sub-function calls. It just *feels* sketchy to try and capture the GSP in the sub-function rather than pass it down from the parent. But yeah, for this feature to work, it would have to track GSP for every frame.

User avatar
Rachel Hall
 
Posts: 3396
Joined: Thu Jun 22, 2006 3:41 pm

Post » Thu May 09, 2013 3:55 am

I will try to do some tests tomorrow and let you know what I find

User avatar
Danial Zachery
 
Posts: 3451
Joined: Fri Aug 24, 2007 5:41 am

Post » Wed May 08, 2013 8:02 pm

GetSecondsPassed returns the global 'Time-passed-since-last-frame' value for non-quests scripts. You can call it inside function scripts too.

User avatar
Lady Shocka
 
Posts: 3452
Joined: Mon Aug 21, 2006 10:59 pm

Post » Wed May 08, 2013 3:37 pm

That may be, but since all variables in a function script are destroyed at the end of the call, and I need a running timer to track how long someone is in the air, I don't think I can do it in a function call.

I'm just trying to avoid duplicating the code in two places, but I don't see any way around it.

User avatar
bonita mathews
 
Posts: 3405
Joined: Sun Aug 06, 2006 5:04 am

Next

Return to IV - Oblivion