The mystery of why RGO has never worked for so many people,

Post » Mon Dec 12, 2011 11:45 pm

I recently found out why RGO has never worked for so many people, me included. I've tried to explain it to Ren several times on his RGO official thread. The argument has been going on for a couple of days now. He still reluctantly rejects my ideas and I've stopped trying to reason with him.


I can't upload a fix because I don't have his permission. What I can do is post my findings so you can fix it for yourselves. Before starting you must know this only affect users without Shivering Isles.


Why it doesn't work
Spoiler


taken from one of my posts in RGO's thread


- these are my points.

1- The game processes all the lines in a script, even those inside if-endif blocks regardless whether conditions are met or not.
2- when the game detects an unrecognized function in a script, it will act as a return statement ignoring all code below.
3- when the game detects an unrecognized editorID in a script, the entire script will stop executing.

My sources:

http://cs.elderscrolls.com/constwiki/index.php/Minimizing_your_Script#An_important_note_on_If_blocks_vs_early_Returns
http://cs.elderscrolls.com/constwiki/index.php/Combine_your_SI_and_non-SI_mods_into_one_%28OBSE,_Patch_v1.1,_Other_mods_too%29

In specific
Spoiler

"The Morrowind scripting community determined that 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. It appears that this is also true in Oblivion"

"When a script uses a function that isn't recognized by Oblivion, it acts as a return. Make sure all of your OBSE and Patch v1.2 functions occur after the test."

"When a script uses a EditorID (including spells, quests) of something that doesn't exist when Oblivion is loaded, the entire script will be ignored. Therefore, keep any SI and other mod EditorIDs in a separate script."


The problem:

On RenCrimeNodeQuestScript line 114-123

( the same codes repeats itself a few times in two scripts; RenCrimeTrackerQuestScript and RenCrimeNodeQuestScript )

	if (player.GetInCell SENS == 1)		set playerintown to 1	set playerlocation to SENS	endif	if (player.GetInCell SEVitharn == 1)		set playerintown to 1		set playerlocation to SEVitharn	endif	if (RenCrimeNode.playerintown == 0 && player.IsInInterior == 0)		set playerlocation to SEWorld	endif 

…............

Sens, SEVitharn and SEWORLD are SI locations, their editor IDs do not exist in Oblivion .esm and so my point number 3 applies, when the game engine reaches this point it will ignore the whole script, rendering an important part of the mod unusable, thus braking it.
After deleting or commenting out the lines I can confirm the mod started to work properly. Whilst It never had before that.



How to fix it
Spoiler

If you have never used the CS set before or know nothing about scripting, stop right here.

You will have to modify two scripts: RenCrimeTrackerQuestScript and RenCrimeNodeQuestScript.

Trying to compile, the scripts should quickly lead you to the lines giving trouble.
you just need to comment the pertinent lines containing either Sens, SEVitharn or SEWORLD. e.g

	;if (player.GetInCell SENS == 1)		;set playerintown to 1		;set playerlocation to SENS	;endif	;if (player.GetInCell SEVitharn == 1)		;set playerintown to 1		;set playerlocation to SEVitharn	endif	;if (RenCrimeNode.playerintown == 0 && player.IsInInterior == 0)		;set playerlocation to SEWorld	;endif 


note that you will have to comment the whole block. Leaving an endif out will stop you from compiling the script. Leaving something inside the block uncommented will have more dire consequences; it will allow you to compile but the mod won't function correctly.
after you are done the scripts should compile properly. Save the changes and close the CS, the mod should work now.





Ren's point:
Spoiler

Ren bases his whole defense on the fact that:
 	Call renwritetofile (" ")

does not interrupt the execution flow of the script for all those players using RGO without OBSE installed. Since "Call", is an OBSE function, in theory it should interrupt the script according to point number 2. But, in fact it doesn't.
So Ren concludes that since "call" does not brake the script for users without OBSE, then the game egine does not process all the lines in the script as stated in point number 1, thus making point number 3 false.
After investigating I can confirm rens claim, call does not cause the script to immediately return in a OBSE-Less environment, as long as it is encapsulated in an if-endif block and the condition for true is never met. Moreover, neither does, printc, modav2 or any other OBSE function I tried. Which leads me to believe that either some internal change has happened in the way OBSE functions are compiled, allowing the oblivion's script engine to simply ignore these unrecognized lines or that it has always been like that since the last Oblivion patch, and point number 2 is indeed incorrect.

However, and this is what Ren fails to understand. This does not mean that point 1 or 3 are incorrect. Point 3 is still very valid and its effect is visible to all players out there without SI for which RGO has never worked.

User avatar
OJY
 
Posts: 3462
Joined: Wed May 30, 2007 3:11 pm

Post » Tue Dec 13, 2011 1:20 am

Could you now explain the mistery of why you opened this thread?
User avatar
priscillaaa
 
Posts: 3309
Joined: Sat Dec 30, 2006 8:22 pm

Post » Mon Dec 12, 2011 9:31 am

There are still people who do not own SI by now?
User avatar
Heather Stewart
 
Posts: 3525
Joined: Thu Aug 10, 2006 11:04 pm

Post » Mon Dec 12, 2011 7:53 pm

FAR... As I said before, perhaps the reason Reneer wasn't listening is because you were being incredibly arrogant. Perhaps walking into a mod author's thread, and going "this is wrong, this is wrong, and THIS is how you fix it" might be presumed as a bit rude?

Here's a thought. In the future, please try being more polite. At this point, you're not just burning bridges as you cross them... you're burning the bridge you're standing on.
User avatar
Alyna
 
Posts: 3412
Joined: Wed Aug 30, 2006 4:54 am

Post » Mon Dec 12, 2011 10:45 pm

Could you now explain the mistery of why you opened this thread?


Could you now explain the mistery of why you opened this thread?


Well, If the obvious is not obvious enough then I'll have to go with:

http://www.youtube.com/watch?v=IKzI5q9ORqs
:mohawk:
User avatar
Greg Cavaliere
 
Posts: 3514
Joined: Thu Nov 01, 2007 6:31 am

Post » Mon Dec 12, 2011 3:03 pm

I see. I suggest you start by changing your attitude. The world can wait a bit longer.
User avatar
Lori Joe
 
Posts: 3539
Joined: Tue Jun 20, 2006 6:10 am

Post » Mon Dec 12, 2011 2:14 pm

Wow.

Reported. FAR, I recommend you change your attitude in the future.
User avatar
Robert Garcia
 
Posts: 3323
Joined: Thu Oct 11, 2007 5:26 pm

Post » Mon Dec 12, 2011 12:33 pm

This is exactly the attitude we do not tolerate in these forums. Snarkiness and arrogance is inherently destructive to this community, driving respectable modders away, and overall causing nothing but pain for all involved.

Until you supply us with credentials, we have every reason to be skeptical of your claims. Arrogance will get you nowhere in this community, so I suggest you take some time and rethink your approach to this and show a little bit more respect for the people who have earned their authority and reputation (like Reneer).
User avatar
Code Affinity
 
Posts: 3325
Joined: Wed Jun 13, 2007 11:11 am

Post » Mon Dec 12, 2011 6:26 pm

I recently found out why RGO has never worked for so many people, me included. I've tried to explain it to Ren several times on his RGO official thread. The argument has been going on for a couple of days now. He still reluctantly rejects my ideas and I've stopped trying to reason with him.


I can't upload a fix because I don't have his permission. What I can do is post my findings so you can fix it for yourselves. Before starting you must know this only affect users without Shivering Isles.


Why it doesn't work
Spoiler


taken from one of my posts in RGO's thread


- these are my points.

1- The game processes all the lines in a script, even those inside if-endif blocks regardless whether conditions are met or not.
2- when the game detects an unrecognized function in a script, it will act as a return statement ignoring all code below.
3- when the game detects an unrecognized editorID in a script, the entire script will stop executing.

My sources:

http://cs.elderscrolls.com/constwiki/index.php/Minimizing_your_Script#An_important_note_on_If_blocks_vs_early_Returns
http://cs.elderscrolls.com/constwiki/index.php/Combine_your_SI_and_non-SI_mods_into_one_%28OBSE,_Patch_v1.1,_Other_mods_too%29

In specific
Spoiler

"The Morrowind scripting community determined that 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. It appears that this is also true in Oblivion"

"When a script uses a function that isn't recognized by Oblivion, it acts as a return. Make sure all of your OBSE and Patch v1.2 functions occur after the test."

"When a script uses a EditorID (including spells, quests) of something that doesn't exist when Oblivion is loaded, the entire script will be ignored. Therefore, keep any SI and other mod EditorIDs in a separate script."


The problem:

On RenCrimeNodeQuestScript line 114-123

( the same codes repeats itself a few times in two scripts; RenCrimeTrackerQuestScript and RenCrimeNodeQuestScript )

	if (player.GetInCell SENS == 1)		set playerintown to 1	set playerlocation to SENS	endif	if (player.GetInCell SEVitharn == 1)		set playerintown to 1		set playerlocation to SEVitharn	endif	if (RenCrimeNode.playerintown == 0 && player.IsInInterior == 0)		set playerlocation to SEWorld	endif 

…............

Sens, SEVitharn and SEWORLD are SI locations, their editor IDs do not exist in Oblivion .esm and so my point number 3 applies, when the game engine reaches this point it will ignore the whole script, rendering an important part of the mod unusable, thus braking it.
After deleting or commenting out the lines I can confirm the mod started to work properly. Whilst It never had before that.



How to fix it
Spoiler

If you have never used the CS set before or know nothing about scripting, stop right here.

You will have to modify two scripts: RenCrimeTrackerQuestScript and RenCrimeNodeQuestScript.

Trying to compile, the scripts should quickly lead you to the lines giving trouble.
you just need to comment the pertinent lines containing either Sens, SEVitharn or SEWORLD. e.g

	;if (player.GetInCell SENS == 1)		;set playerintown to 1		;set playerlocation to SENS	;endif	;if (player.GetInCell SEVitharn == 1)		;set playerintown to 1		;set playerlocation to SEVitharn	endif	;if (RenCrimeNode.playerintown == 0 && player.IsInInterior == 0)		;set playerlocation to SEWorld	;endif 


note that you will have to comment the whole block. Leaving an endif out will stop you from compiling the script. Leaving something inside the block uncommented will have more dire consequences; it will allow you to compile but the mod won't function correctly.
after you are done the scripts should compile properly. Save the changes and close the CS, the mod should work now.





Ren's point:
Spoiler

Ren bases his whole defense on the fact that:
 	Call renwritetofile (" ")

does not interrupt the execution flow of the script for all those players using RGO without OBSE installed. Since "Call", is an OBSE function, in theory it should interrupt the script according to point number 2. But, in fact it doesn't.
So Ren concludes that since "call" does not brake the script for users without OBSE, then the game egine does not process all the lines in the script as stated in point number 1, thus making point number 3 false.
After investigating I can confirm rens claim, call does not cause the script to immediately return in a OBSE-Less environment, as long as it is encapsulated in an if-endif block and the condition for true is never met. Moreover, neither does, printc, modav2 or any other OBSE function I tried. Which leads me to believe that either some internal change has happened in the way OBSE functions are compiled, allowing the oblivion's script engine to simply ignore these unrecognized lines or that it has always been like that since the last Oblivion patch, and point number 2 is indeed incorrect.

However, and this is what Ren fails to understand. This does not mean that point 1 or 3 are incorrect. Point 3 is still very valid and its effect is visible to all players out there without SI for which RGO has never worked.


Take it up with him via a private message. Things like this are better shared privately. Thanks.
User avatar
Tracey Duncan
 
Posts: 3299
Joined: Wed Apr 18, 2007 9:32 am


Return to IV - Oblivion