More Awesome Than You!

The Bowels of Trogdor => The Small Intestines of Trogdor => Topic started by: dizzy on 2005 November 12, 19:38:38



Title: Bug Report: "Stack number out of range." with commlightson/Smart Lights hack
Post by: dizzy on 2005 November 12, 19:38:38
EP: Nightlife
Status: Partly resolved.
Resolution: Worked-around (see http://www.moreawesomethanyou.com/smf/index.php?topic=1437.msg48663#msg48663)
Affects: New pool lights in live and simless build modes

Description:

New pool lights Init with "Stack number out of range." errors, possibly causing the lot to fail to load that contains them.

To reproduce:

Install commlightson hack (part of the archive found below), and go to a Downtown subneighborhood. Make sure you have typed the "boolProp testingCheatsEnabled true" cheat. Then load a community that contains pool lights in build mode, and delete the objects as they error.

Logged stack frame:

Code:
Object id: 1269
name: Lamp - Wall - Pool - New - 1, 0 - Lower
Stack size: 5
Error: Stack number out of range.
Iterations: 0
  Frame 4:
    Stack Object id: 1269
    Stack Object name: Lamp - Wall - Pool - New - 1, 0 - Lower
    Node: 2
    Tree: id 8201 name 'Action - Do Fades' version 31
    from LampGlobals
    Prim state: 0
    Params: 1269 1 100 15    Locals:
  Frame 3:
    Stack Object id: 1269
    Stack Object name: Lamp - Wall - Pool - New - 1, 0 - Lower
    Node: 3
    Tree: id 8207 name 'Action - Fade ON' version 5
    from LampGlobals
    Prim state: 0
    Params: 1269    Locals:
  Frame 2:
    Stack Object id: 1269
    Stack Object name: Lamp - Wall - Pool - New - 1, 0 - Lower
    Node: 10
    Tree: id 8198 name 'Function - Init' version 32
    from LampGlobals
    Prim state: 0
    Params:    Locals:
  Frame 1:
    Stack Object id: 0
    Node: 0
    Tree: id 4097 name 'Function - Init( Stub )' version -32757
    from Lamp_Wall_Pool
    Prim state: 0
    Params:    Locals:
  Frame 0:
    Stack Object id: 0
    Node: 0
    Tree: id -1 name 'No behavior' version 0
    from
    Prim state: 1
    Params:    Locals:

Cause:

Unknown. The error does not appear to apply to the named tree, so either the log is incorrect, or the error works in a way that is not documented yet.

Notice, however, that the semi-global "Init" function calls the "Is It Night?" semi-global (which is modified by commlightson). The Init function will therefore always try to turn the lights on in the above situation, which is how the "Action - Do Fades" is called.

The "Action - Do Fades" contains two "Change Light" primitives which may be producing the error. In particular, the first "Change Light" has a "Fade duration" parameter which would seem to trigger an Idle period (which may unexpectedly cause the stack to range beyond its bounds, depending on how the "Init( Stub )" is called.

Link:

http://www.moreawesomethanyou.com/ffs/uni/moreawesomethanyou.zip


Title: Re: Bug Report: "Stack number out of range." with commlightson/Smart Lights hack
Post by: J. M. Pescado on 2005 November 12, 23:00:17
I am not certain this is truly an "error". Does it produce any ill effects if the game is simply run without debug mode on? A lot of debug errors are essentially benign, caused by object code changes forcing an object to reset. Perhaps it is enough to load the lot, then save it again.


Title: Re: Bug Report: "Stack number out of range." with commlightson/Smart Lights hack
Post by: Motoki on 2005 November 12, 23:09:39
It seems to make certain lots with those pool lights hang forever on the loading screen.


Title: Re: Bug Report: "Stack number out of range." with commlightson/Smart Lights hack
Post by: crammyboy on 2005 November 12, 23:17:08
This one is a big problem because is causes the lot to hang indefinitely.

The problem is related to the stub that sits on the bottom of the pool. If you change the semi-global init routine to test object type, it bypasses the problem. But the main problem is still unknown.   

###
# Group = 0x7F60C397, Instance = 0x2006
# Title = Function - Init
#
# Format = 8009, Params = 0, Locals = 0
# Tree type = 0, Header flag = 6, Tree version = 20 (32), Cache flags = 0

     0: [0x10F]Init - Object; true: 1, false: error
     1: My light source (0x10) := 1; true: 2, false: error
     2: My flag field 2 (0x28) Set Flag Burns; true: 3, false: error
     3: My flag field 2 (0x28) Set Flag Can Be Repossessed; true: 4, false: error
     4: My flag field 2 (0x28) Clear Flag Cannot Be Stolen; true: 5, false: error
     5: My category (0x3B) := Const 0x106(Category):0x17; true: 6, false: error
     6: My support strength (0x1C) := 0; true: 7, false: error
     7: My weight (0x1B) := Const 0x1000:0x1; true: 8, false: error
     8: My Flammibility (0x54) := Const 0x102(Global Tuning):0x2B; true: 9, false: error
     9: Stack Object := Me; true: A, false: error
     A: Test Object Type: type of Stack Object == GUID 0x4FBF0DA6 (0x7FA230E7: Lamp - Wall - Pool - New - 1, 0 - Lower); true: true, false: B
     B: [0x17C]Lot - Is Community?; true: D, false: C
     C: semiglobal.0x2022; true: E, false: 10
     D: Stack Objects Semi Attribute 0x1 := 1; true: E, false: E
     E: Stack Objects Semi Attribute 0x2 := Const 0x2000:0x0; true: F, false: error
     F: semiglobal.0x200F(Me, Stack Object, Stack Object, Stack Object); true: true, false: error
    10: Stack Objects Semi Attribute 0x2 := Const 0x2000:0x1; true: 11, false: error
    11: semiglobal.0x2010(Me, Stack Object, Stack Object, Stack Object); true: true, false: error





Title: Re: Bug Report: "Stack number out of range." with commlightson/Smart Lights hack
Post by: dizzy on 2005 November 13, 00:26:41
I tried this for my workaround and it seems to resolve the problem for now:

Code:
###
# Group = 0x7F60C397, Instance = 0x2006
# Title = Function - Init
#
# Format = 8009, Params = 0, Locals = 0
# Tree type = 0, Header flag = 6, Tree version = 20 (32), Cache flags = 0

     0: Init - Object; true: 3, false: error
     1: My weight (0x1B) := Const 0x1000:0x1; true: 8, false: error
     2: My support strength (0x1C) := 0; true: 1, false: error
     3: My light source (0x10) := 1; true: 4, false: error
     4: My flag field 2 (0x28) Set Flag Burns; true: 5, false: error
     5: My flag field 2 (0x28) Set Flag Can Be Repossessed; true: 6, false: error
     6: My flag field 2 (0x28) Clear Flag Cannot Be Stolen; true: 7, false: error
     7: My category (0x3B) := Const 0x106(Category):0x17; true: 2, false: error
     8: My Flammibility (0x54) := Const 0x102(Global Tuning):0x2B; true: C, false: error
     9: semiglobal.0x2010(Me, Stack Object, Stack Object, Stack Object); true: true, false: error
     A: Me == My lead tile object ID (0x13); true: F, false: true
     B: .Is It Night?; true: E, false: D
     C: Stack Object := Me; true: B, false: error
     D: Stack Objects Semi Attribute 0x2 := Const 0x2000:0x1; true: 9, false: error
     E: Stack Objects Semi Attribute 0x2 := Const 0x2000:0x0; true: A, false: error
     F: semiglobal.0x200F(Me, Stack Object, Stack Object, Stack Object); true: true, false: error