-
Posts
716 -
Joined
-
Last visited
Everything posted by QQuix
-
I have a personal mod that does that (among other things): 4 - [Cleared]: automatically adds a [Cleared] tag to map markers and doors of cleared dungeons, caves, etc. 5 - Location registry - a book in your inventory with a list of all vanilla dungeons, caves etc that you have cleared and a list of all locations still to be cleared. Check "The Collector" in my Conceptual mods
-
Reset the Tab-Map of a Dungeon when the Dungeon Cell Resets
QQuix replied to tg08096's topic in Oblivion's Mod Ideas
Not exactly what you are asking for, but I have a personal mod that does (among other things): 4 - [Cleared]: automatically adds a [Cleared] tag to map markers and doors of cleared dungeons, caves, etc.5 - Location registry - a book in your inventory with a list of all dungeons, caves etc that you have cleared and a list of all locations still to be cleared. If you are interested, check "The Collector" in my Conceptual mods -
Strange behaviour of RemoveMeIR
QQuix replied to laulajatar's topic in Oblivion's Oblivion Construction Set and Modders
I had a feeling this was discussed before, but all I could find is this 2012 post describing something alike. Your ghost item theory may well be valid, as the game, for whatever internal reason, does leave a ghost item when a non-dynamic item is picked up (as can be inferred from the OBSE function HasBeenPickedUp ). -
(I have not had Oblivion installed for quite a while and memory is getting worse by the day, so some vagueness expected) Conscribe saves all messages printed to the console with PrintToConsole So, you need your collected data nicely formatted into a text line and output this line with PrintToConsole After exiting the game, open the log file in a text editor and select and copy these lines to wherever you want them I do not remember exactly where the log files are, but they are somewhere in the Oblivion install folder Pluggy has a set of functions to create / read / write / delete text files Same idea: format your data and write the lines Pluggy text files are in ...\Documents\My Games\Oblivion\Pluggy\User Files Nice thing is that you may create multiple files in a single run (I think Conscribe also has this, but I am not sure) Not sure about manuals. I use the Cs Wiki for pretty much everything CS Wiki links >> Pluggy Conscribe and List of Functions (a scripter's Nirvana. my preferred page) In both cases, you can create your lines with data delimited with semicolons and paste then into a worksheet, which comes handy sometimes.
-
Oh . . . OK. I did something like that once, as my mod added buildings to the mod world on the fly. I had to map every object in all vanilla interiors so I could dynamically recreate them as the player entered any of the dynamically created buildings. To map the interiors, I wrote a script that : - Each frame, moved the player to a new exterior cell - In each exterior cell: - - Scan the cell looking for doors - - Activate the door to move the player inside the building - - In each interior cell - - - Map the contents and export the data - - - Look for doors - - - If the door leads to an unmapped interior cell, activate the door and repeat. (unfortunately I do not have that script anymore, I needed it myself a couple of years after I wrote it and I could not find it)
-
CSE = Construction Set Extender ) It is an extension to the vanilla Construction Set. it is an OBSE plugin It is the the main tool for creating mods (writing scripts, adding/removing 'things' to/from the game world, etc) (like the Creation Kit for Skyrim) If you are not familiar with creating Oblivion mods, I am afraid my answer will not be much help as creating that script would no be trivial (not difficult either)
-
You would need a script to iterate thru all references and export the data you want: use GetFirstRef / GetNextRef to iterate thru all references use GetPos to get XYZ positions use GetAngle to get the rotations use GetObjectType to get the type use GetFormIDString to get the reference FormID in string format (see below) use ConScribe or Pluggy to export the data to a log file EditorIDs are less easy as they do not exist at run time. If you really need it, CSE has an export function (don't remember in which menu) that exports a lot of info about all objects loaded at the time, including the EditorID and the reference FormID. You could match the FormID found by the script with the one in the CSE export file to get the matching EditorID. The CSE export file is easily imported into Excel. I am not familiar with external tools like TES4EDIT. Maybe one of them has an easier way of doing this.
-
Need example of scripted moving objects.
QQuix replied to Deleted58209541User's topic in Oblivion's Discussion
I did a lot of experimental research on moving objects. It has been a while and I do not remember the details Check these two mods in my Conceptiuals QQuix Conceptual - Wagon away (YouTube video) QQuix Conceptual - Zero G Room (YouTube video) -
First, make sure you understand the terms 'Reference' and 'Base Object' (in Modding Terminology) Both work because, when you use Player, the compiler tries to guess whether you mean Player or PlayerRef and use whatever it guesses in that compilation. Since referencing the Player Base Object is quite rare, the compiler usually silently converts Player to PlayerRef and all works. I used to use Player to reference the Player reference in all my scripts until one day I had to waste many, many hours in a bug that I could not find. That was when Scruggs explained me the above. In that particular case, the compiler decided to assume that Player really meant Player (Base Object) which broke the script. After that I always use Player and PlayerRef correctly to make sure I will never fall in that trap again.
-
Pretty much, I am afraid. A few months after my last post I upgraded to Windows 10 and Oblivion stopped working. The uninstall process went bezerk and I couldn't uninstall nor reinstall it. By the time I found a solution, I had a new, exciting RL project and never came back to this one. Since it still needs several month worth of work, it is very unlike I will resume it.
-
question about code optimization
QQuix replied to Moktah's topic in Oblivion's Oblivion Construction Set and Modders
The Wiki text says: "the script engine would process all code inside of an If block (even if the condition was false) until the script engine could find an exit point. An exit point can be either an accessible RETURN call, or the end of the script." My reasoning: The word 'process' cannot refer to execution . . . . (execution does not go into false condition code), so it must refer to some pre (or post) process the engine runs This process stops on the first return if finds (if any) . . . . (go figure) This process is unnecessary . . . . (or it would not be recommended to circumvent it) Reordering the code blocks and adding a Return at the beginning of the script aborts the process . . . . (as the Wiki example) If these premises are true, then adding a dummy return would improve performance. If any is false, then all I said in this thread should be scratched. WAIT. . . a different interpretation just occurred to me: Premisses: The script engine is an interpreter No pre or pos processing Consider this example: Begin GameMode if Gamehour < 12 <code block A> else <code block B> Endif <code block C> EndIf Gamehour < 12 the interpreter executes <code block A> and, THEN, has to go thru (and not execute) <code block B>, line by line, looking for the matching Endif. When the Endif is found, it executes <code block C>. If Gamehour >= 12 the interpreter has to go thru (and not execute) <code block A>, line by line, looking for the matching Else and then executed <code block B> and <code block C>. But suppose there is no <code block C>, as in the Wiki example. In this case, it makes sense to add a Return after <code block A> Begin GameMode if Gamehour < 12 <code block A> Return else <code block B> Endif EndIf Gamehour < 12 the interpreter executes <code block A> and hits the Return. In this case it does not have to go thru <code block B>. If Gamehour >= 12 there is no gain. The interpreter still has to go thru (and not execute) <code block A>, line by line, looking for the matching Else and then execute <code block B> Does not exactly match what the Wiki text says, but makes more sense than my first interpretation. It would save some processing time (although I still think it is negligible). (yes, my mind hurts) -
question about code optimization
QQuix replied to Moktah's topic in Oblivion's Oblivion Construction Set and Modders
@ XJDHDR I have a feeling we are reading the Wiki text differently, The way i understand it, it says that, if you have an if block and an else block, you should place the one that has a Return first. Like, instead of doing something like this: Begin GameMode if Gamehour < 12 <some long code> else <some short code> Endif EndIt would be better to do this: Begin GameMode if Gamehour >= 12 <some short code> Return '--- Adding a Return to prevent 'processing' of the long code below else <some long code> Endif End Or instead of doing something like this: Begin GameMode if Gamehour < 12 <some long code> Endif EndIt would be better to do this: Begin GameMode if Gamehour >= 12 Return Endif <some long code> EndIf this understanding of the Wiki text is correct, extrapolating this last example, I considered that the article recommendation would also apply to: Instead of doing something like this: Begin GameMode <some long code> EndIt would be better to do this: Begin GameMode if 1 == 2 Return Endif <some long code> EndNote that, in all three cases, the actual execution is exactly the same in both codes, but, according to my understanding of the wiki text, it claims that the second code runs faster. Which does not seem right to me (but, again, who knows...). -
question about code optimization
QQuix replied to Moktah's topic in Oblivion's Oblivion Construction Set and Modders
shadeMe is the guy that could shed some light on this. My guess is that the CS does not compile the code into machine language, but rather into some intermediate 'language' that is interpreted at run time.. -
question about code optimization
QQuix replied to Moktah's topic in Oblivion's Oblivion Construction Set and Modders
@ XJDHDR You Test1 is equivalent to the first WIKI example ("unoptimized") Could you test one additional scenario: the so-called "optimized" in the WIKI second example: Begin Function { } If 1 == 2 Return EndIf GetFPS TestRef.GetDistance PlayerRef < repeat above two another 3800 times > End -
question about code optimization
QQuix replied to Moktah's topic in Oblivion's Oblivion Construction Set and Modders
[NOTE: this was posted before I noticed the two posts above] @ XJDHDR I think we are in the same page here (pun intended). Clarifying my point of view (1) : My “if 1 == 2” example mas meant as an irony. It would be ridiculous if I had any performance gain by including that IF in my scripts (but this is what the WIKI text implies). Clarifying my point of view (2) : I think the article is either wrong or irrelevant. My reasoning for thinking it is wrong: There is NO Way the script engine executes code inside false IF conditions. It would be disastrous. So when the article says “PROCESS all code inside of an If block” it certainly does not mean “EXECUTE all code inside of an If block”. If, by “Process”, the author meant “Execute”, he is wrong.My reasoning for thinking it is irrelevant: What the engine might implement is a pre-analysis of the code for whatever reason, in which case it might go thru (process) all the code prior to actual execution. In this scenario, I cannot imagine why it would stop in the first Return it finds (but who knows . . .). Anyway, the efficiency effect of a pre-analysis process would be negligible. It is too bad Beth deleted the Forums. There were a lot of good technical discussions there. But the link in the WIKI page does not seem to refer to the matter at hand (Hamma included the link about six months before Halo112358 added the text we are discussing here. See the page History) It would be nice if you could test the exact two examples in the article. I doubt very much it will yield noticeable results (let alone “dramatic performance gains”, as mentioned) -
question about code optimization
QQuix replied to Moktah's topic in Oblivion's Oblivion Construction Set and Modders
Oh... I am a little rusty on Oblivion syntax. I meant an if that is always false (should it be "if 1 == 2" ?) Anyways . . . I've just read the Discussion page for that article. As one can read at the end, Dragoon Wraith (one of the top Sheriffs of the WIKI at the time) considered removing the whole article as irrelevant to performance. -
question about code optimization
QQuix replied to Moktah's topic in Oblivion's Oblivion Construction Set and Modders
The reason for the grain of salt is that, at the time, there were several 'common knowledge' that, later, were proved wrong. Wiki editors adjusted most of them, but some wrong text may have gone unnoticed. In the case at hand, the Wiki text raises interesting questions. Biggest of all is WHY? (why would a (supposedly) competent Beth developer do that?). It kind of implies that I should do this at the beginning of all my Gamemode scripts: if 1 = 2 RETURN endif <main code> -
question about code optimization
QQuix replied to Moktah's topic in Oblivion's Oblivion Construction Set and Modders
Nothing to add. That article is from 2008 and, as Drake says, may or may not be trusted. If true, my guess id that it applies to all kinds of script blocks. -
Well . . . I am afraid I cannot help. My area is OBSE scripting (or, at least, what I still remember of it, as I have not had the CSE installed for years). Hope someone else steps up to help here.
-
Have you noticed that there are two functions for that? ModGoldValue which increases / decreases the item gold value SetGoldValue which changes the item base gold value From your description, you are using ModGoldValue.
-
The problem with PlaceAtMe started at the beginning of time when authors used it indiscriminately on objects (non-Actors) and there was no way to solve it at the time Later on, the OBSE devs added the DeleteReference and all was good (for responsible authors that knew how to clean up their own mess) For Actors, that is not really a problem as the game engine has ways to remove them (otherwise the savegame would be bloated just with the vanilla creatures spawning from leveled lists). The CellReset article details part of this cleanup process. On the other hand, CreateFullActorCopy creates a copy of a BaseObject and there is no way to remove it. Better not use it.
-
Not quite . . . you have to make a loop to check the distance of each and every Actor in the cell something along the line . . . set target to GetFirstRef 69 1 while target if GetDistance(target) < 200 && target.GetActorLightAmount() > 30 ; spooky stuff to this particular actor which is less than 200 units from the object set target to GetNextRef loop