Author Topic: SCI0: RegionPath Wandering  (Read 4311 times)

0 Members and 1 Guest are viewing this topic.

Offline robbo007

SCI0: RegionPath Wandering
« on: May 30, 2024, 06:25:42 AM »
Hi guys,
I'm trying to get an actor to wander around from room to room. Sort of like what they did with the BikiniLadies in Codename: Iceman.

I've found in the Iceman source code this code but don't really understand what its doing all the time.

Water.sc
Code: [Select]
(method (init)
(Load rsVIEW 217)
(Load rsVIEW 216)
(Load rsVIEW 215)
(Load rsVIEW 214)
(Load rsVIEW 702)
(Load rsVIEW 202)
(Load rsVIEW 902)
(super init: &rest)
(gEgo viewer: EgoWaterViewer)
(closeUpView init:)
(if (not script)
(self setScript: beachWalkerScript)
)
(if (IsObject (script register:))
((script register:) init: setMotion: beachWalkerPath)
)
(if (not (gGame script:))
(gGame setScript: musicScript)
)
)

(method (notify param1 param2 &tmp temp0)
(switch param1
(0
(= temp0 0)
(while (< temp0 (- argc 2))
((Clone param2)
x: [param2 (++ temp0)]
y: [param2 (++ temp0)]
loop: [param2 (++ temp0)]
init:
)
)
)
(1
(beachWalkerScript register:)
(return)
)
)
)

So here its loading the views for the BikiniLadies and checking to see if the beachWalkerScript is registered and registering it. I don't know what the method is doing really? I can only seem to get the method compiling if I include it after the (method (handleEvent pEvent) section in my RoomScript.

Code: [Select]
(instance closeUpView of View
(properties
y 85
x 265
view 993
loop 4
)

(method (init)
(super init:)
(self hide: setPri: 15)
)

(method (show param1)
(self view: param1 setLoop: 4)
(super show:)
)
)

(instance aBikini3Lady of Act
(properties
view 993
)

(method (init)
(super init:)
(self
setAvoider: Avoid 1
ignoreHorizon:
setCycle: Walk
observeControl: 2048
)
)

(method (handleEvent event)
(cond
((super handleEvent: event))
((IsOffScreen self))
((Said 'look[<at][/woman,brunette,native[<native,brunette]]')
(closeUpView show: view)
(Animate (gCast elements:) 0)
(Print { Whew, what a hot lookin' native girl!})
(closeUpView hide:)
(event claimed: 1)
)
)
)
)

(instance aBikini4Lady of Act
(properties
view 994
)

(method (init)
(super init:)
(self
setAvoider: Avoid 1
ignoreHorizon:
setCycle: Walk
observeControl: 2048
)
)

(method (handleEvent event)
(cond
((super handleEvent: event))
((IsOffScreen self))
((Said 'look[<at][/blond,woman[<blond]]')
(closeUpView show: view)
(Animate (gCast elements:) 0)
(Print {This blonde is definitely a babe.})
(closeUpView hide:)
(event claimed: 1)
)
((Said 'whistle')
(Print {She ignores your ancient ploy.})
)
((Said 'ask<out/woman')
(Print {She is out.})

)
;;; ((Said '[/bitch,cunt,boob,blond,woman[<blond]]>')
;;; (cond
;;; ((Said 'ask//date')
;;; (localproc_0)
;;; )
((Said 'ask//time')
(Print {Time has no meaning in Tahiti.})
)
;;; ((Said 'chase')
;;; (Print 301 18) ; "You can do that."
;;; )
((Said 'talk')
(Print {She's trying to ignore you.})
)
;;; ((Said 'kiss,suck,fuck,touch')
;;; (if (> (gEgo distanceTo: self) 50)
;;; (Print 301 20) ; "You'll have to get closer than this."
;;; else
;;; (QueScript self 353)
;;; )
)
)
)

(instance beachWalkerPath of RegionPath
(properties
value 29
endType 0
theRegion 028
)

(method (at param1)
(return [local1 param1])
)

(method (nextRoom)
(if
(and
(== (self at: (+ 2 value)) 3)
;(== gRoom newRoomNumber: 28) ; volleyRm
(gRoom newRoom: notify: 0)
)
(repeat
(-= value 2)
(breakif (== (self at: (+ 1 value)) 32767))
)
)
(super nextRoom: &rest)
)
)

(instance beachWalkerScript of Script
(properties)

(method (changeState newState &tmp temp0)
(switch (= state newState)
(0
(= temp0
(switch (Random 2 3)
(2 aBikini3Lady)
(3 aBikini4Lady)
)
)
(beachWalkerPath value: -1)
(if (IsObject register)
(register dispose:)
)
(if (== temp0 register)
(self init:)
else
((= register temp0) init: setMotion: beachWalkerPath self)
)
)
(1
(self init:)
)
)
)
)

So the CloseUp is how it shows the portrait of the bikinilady when looking at her.
The BikiniLadies instances seem more or less clear but I can't see how to get them appearing on screen. Everything compiles fine on my script.
Ive added the RegionPath script #809 also to my script folder. I'm not sure if the SC template has a build in one?
The Beachwalker script is more or less clear.

Here is my final roomscript including the Iceman code:

Code: [Select]
;;; Sierra Script 1.0 - (do not remove this comment)
;**
;** Logics for room 027 - Beach 1
;**
;** Leisure Suit Larry 4 - Never say Nontoonyt (AKA The Missing Floppies)
;**        Copyright 2024
;** by Robbo
;**
;** Last Update: March, 27th, 2024
;**
(script# 28)
(include sci.sh)
(include game.sh)
(use Controls)
(use Cycle)
(use Door)
(use Extra)
(use Feature)
(use FileIO)
(use Follow)
(use Game)
(use Gauge)
(use InitRooms)
(use Inv)
(use Rev)
(use Jump)
(use Main)
(use MenuBar)
(use Obj)
(use RegionPath)
(use DPath)
(use Avoid)

(public
rm028 0
)

(local
local0
[local1 113] = [32767 7 273 117 104 132 48 235 32767 5 72 104 135 104 325 184 32767 4 76 95 128 103 325 178 32767 3 -5 90 325 100 32767 2 -5 100 180 160 325 185 32767 12 -5 170 175 156 325 128 32767 13 -5 128 325 106 32767 24 -5 116 184 111 155 72 -5 130 32767 13 325 106 -5 128 32767 12 325 128 175 156 -5 170 32767 2 325 150 -5 100 32767 3 325 100 -5 90 32767 4 325 178 128 103 76 95 32767 5 325 184 135 104 72 104 32767 7 48 235 104 132 273 117 -32768]
)

(procedure (IsOffScreen theObj)
(return
(not (and (< 0 (theObj x:) 320) (< 0 (- (theObj y:) (theObj z:)) 200)))
)
)

(instance rm028 of Rm
(properties
picture 028
north 0
east 0
south 0
west 029
)

(method (init)
(closeUpView init:)
(if (not script)
(self setScript: beachWalkerScript)
)
(if (IsObject (script register:))
((script register:) init: setMotion: beachWalkerPath)
)


(super init:)
(gAddToPics ;This adds views to the background in a much nicer way :)
add: aUmbrella
add: aUmbrella2
add: aFatGuy
add: aLegs
add: aPalm
doit:
)
(self setScript: RoomScript)
(switch gPreviousRoomNumber
)
(cond
((== gPreviousRoomNumber 026) (gEgo posn: 250 63 loop: 0)
)
((== gPreviousRoomNumber 027) (gEgo posn: 239 67 loop: 0)
)
((== gPreviousRoomNumber 029) (gEgo posn: 9 77 loop: 0)
)
(else
(gEgo posn: 150 100 loop: 1)
)
)
(SetUpEgo)
(gEgo init:)
(if (> gMachineSpeed pc8088)
(aWave init:)
(aWave2 init:)
(aBikini3Lady init:)
(aBikini4Lady init:)


)
)
)

(instance RoomScript of Script
(properties)

(method (doit)
(super doit:)
; code executed each game cycle
(if (& ctlBLUE (gEgo onControl:))
(gRoom newRoom: 027)
)
)

(method (handleEvent pEvent)
(super handleEvent: pEvent)
; handle Said's, etc...
)

(method (notify param1 param2 &tmp temp0)
(switch param1
(0
(= temp0 0)
(while (< temp0 (- argc 2))
((Clone param2)
x: [param2 (++ temp0)]
y: [param2 (++ temp0)]
loop: [param2 (++ temp0)]
init:
)
)
)
(1
(beachWalkerScript register:)
(return)
)
)
)

(method (changeState newState)
(= state newState)
(switch state
(0 ; Handle state changes
)
)
)
)

(instance aFatGuy of View ;Kenowama
(properties
view 028
loop 1
cel 0
x 77
y 142
priority 11
signal ignAct ;16384
)
)

(instance aUmbrella of View ;Red umbrella with Kenowama under it.
(properties
view 028
loop 0
cel 0
x 55
y 153
priority 10
signal ignAct ;16384
)
)
(instance aUmbrella2 of View ;Blue umbrella with two pairs of legs bottom right
(properties
view 028
loop 2
cel 0
x 293
y 169
priority 12
signal ignAct ;16384
)
)
(instance aLegs of View ;Pair of legs under blue umbrella bottom right
(properties
view 028
loop 3
cel 0
x 275
y 157
priority 12
signal ignAct ;16384
)
)
(instance aPalm of View ;Palm tree right
(properties
view 028
loop 4
cel 0
x 285
y 131
priority 09
signal ignAct ;16384
)
)

(instance aWave of Prop ; left wave at bottom
(properties
view 28
loop 5
x 78
y 189
cycleSpeed 15
)

(method (init)
(super init:)
(self
setPri: 1
setScript:(if (> gMachineSpeed pcAT)aWaveScript) ;this stops wave script if PC is a IBM AT or slower.
stopUpd:
)
)
)

(instance aWave2 of Prop ;right wave at bottom
(properties
view 28
loop 6
x 238
y 189
cycleSpeed 15
)

(method (init)
(super init:)
(self
setPri: 1
setScript:(if (> gMachineSpeed pcAT)aWaveScript) ;this stops wave script if PC is a IBM AT or slower.
stopUpd:
)
)
)
(instance aWaveScript of Script ;Here the two wave views are merged together and played at the same time.
  (method (changeState newState)
    (switchto (= state newState)
      (
        (aWave stopUpd:)
        (aWave2 stopUpd:)
        ; Wait for 2 to 6 seconds...
        (= seconds (+ 1 (* (Random 0 3) 2)))
      )
      (
        ; Setting a cycler automatically restarts updating.
        (aWave setCycle: Fwd self)
        (aWave2 setCycle: Fwd self)
      )
      (
        (aWave setCycle: Rev self)
        (aWave2 setCycle: Rev self)
      )
      (
        ; Repeat.
        (self changeState: 0)
        ; A better way might be to (= state -1) (= cycles 1) but nyehh.
      )
    )
  )
)

(instance closeUpView of View
(properties
y 85
x 265
view 993
loop 4
)

(method (init)
(super init:)
(self hide: setPri: 15)
)

(method (show param1)
(self view: param1 setLoop: 4)
(super show:)
)
)

(instance aBikini3Lady of Act
(properties
view 993
)

(method (init)
(super init:)
(self
setAvoider: Avoid 1
ignoreHorizon:
setCycle: Walk
observeControl: 2048
)
)

(method (handleEvent event)
(cond
((super handleEvent: event))
((IsOffScreen self))
((Said 'look[<at][/woman,brunette,native[<native,brunette]]')
(closeUpView show: view)
(Animate (gCast elements:) 0)
(Print { Whew, what a hot lookin' native girl!})
(closeUpView hide:)
(event claimed: 1)
)
)
)
)

(instance aBikini4Lady of Act
(properties
view 994
)

(method (init)
(super init:)
(self
setAvoider: Avoid 1
ignoreHorizon:
setCycle: Walk
observeControl: 2048
)
)

(method (handleEvent event)
(cond
((super handleEvent: event))
((IsOffScreen self))
((Said 'look[<at][/blond,woman[<blond]]')
(closeUpView show: view)
(Animate (gCast elements:) 0)
(Print {This blonde is definitely a babe.})
(closeUpView hide:)
(event claimed: 1)
)
((Said 'whistle')
(Print {She ignores your ancient ploy.})
)
((Said 'ask<out/woman')
(Print {She is out.})

)
;;; ((Said '[/bitch,cunt,boob,blond,woman[<blond]]>')
;;; (cond
;;; ((Said 'ask//date')
;;; (localproc_0)
;;; )
((Said 'ask//time')
(Print {Time has no meaning in Tahiti.})
)
;;; ((Said 'chase')
;;; (Print 301 18) ; "You can do that."
;;; )
((Said 'talk')
(Print {She's trying to ignore you.})
)
;;; ((Said 'kiss,suck,fuck,touch')
;;; (if (> (gEgo distanceTo: self) 50)
;;; (Print 301 20) ; "You'll have to get closer than this."
;;; else
;;; (QueScript self 353)
;;; )
)
)
)

(instance beachWalkerPath of RegionPath
(properties
value 29
endType 0
theRegion 028
)

(method (at param1)
(return [local1 param1])
)

(method (nextRoom)
(if
(and
(== (self at: (+ 2 value)) 3)
;(== gRoom newRoomNumber: 28) ; volleyRm
(gRoom newRoom: notify: 0)
)
(repeat
(-= value 2)
(breakif (== (self at: (+ 1 value)) 32767))
)
)
(super nextRoom: &rest)
)
)

(instance beachWalkerScript of Script
(properties)

(method (changeState newState &tmp temp0)
(switch (= state newState)
(0
(= temp0
(switch (Random 2 3)
(2 aBikini3Lady)
(3 aBikini4Lady)
)
)
(beachWalkerPath value: -1)
(if (IsObject register)
(register dispose:)
)
(if (== temp0 register)
(self init:)
else
((= register temp0) init: setMotion: beachWalkerPath self)
)
)
(1
(self init:)
)
)
)
)

« Last Edit: May 30, 2024, 06:37:46 AM by robbo007 »



Offline Kawa

Re: SCI0: RegionPath Wandering
« Reply #1 on: May 30, 2024, 07:02:23 AM »
According to the opening comments in the original REGPATH.SC, both the path points, the Actors walking along said path, and the actual implementation of RegionPath (that's beachWalkerPath and it only needs to provide an at method -- the rest is just Iceman specific), must be contained in the same module/script file. It even straight-up tells you to look at Iceman's WATER.SC as an example.

In REGPATH.SH we get these defines: $7FFF is a marker to go the next room, 0 cues a caller when finished while 1 restarts the path (these two go in the RegionPath::endType property), and 2 makes them follow the path in reverse. -1 is defined as the end of a path in SYSTEM.SH.

The NEXTROOM marker is followed by the room to go to, which is of course part of the Water region, so local1 reads better like this:
Code: [Select]
[thePath 113] = [
;;ROOM NR.    POINTS...
NEXTROOM 7    273 117   104 132    48 235
NEXTROOM 5     72 104   135 104   325 184
NEXTROOM 4     76  95   128 103   325 178
NEXTROOM 3     -5  90   325 100
NEXTROOM 2     -5 100   180 160   325 185
NEXTROOM 12    -5 170   175 156   325 128
NEXTROOM 13    -5 128   325 106
NEXTROOM 24    -5 116   184 111   155  72   -5 130
NEXTROOM 13   325 106    -5 128
NEXTROOM 12   325 128   175 156    -5 170
NEXTROOM 2    325 150    -5 100
NEXTROOM 3    325 100    -5  90
NEXTROOM 4    325 178   128 103    76  95
NEXTROOM 5    325 184   135 104    72 104
NEXTROOM 7     48 235   104 132   273 117
PATHEND
]

Offline robbo007

Re: SCI0: RegionPath Wandering
« Reply #2 on: May 30, 2024, 07:19:31 AM »
According to the opening comments in the original REGPATH.SC, both the path points, the Actors walking along said path, and the actual implementation of RegionPath (that's beachWalkerPath and it only needs to provide an at method -- the rest is just Iceman specific), must be contained in the same module/script file. It even straight-up tells you to look at Iceman's WATER.SC as an example.

Ok thanks. I'm using the decompiled code from sluicebox no comments in it :( Are you looking at different source code? As I can't see REGPATH.SH etc..

Offline Kawa

Re: SCI0: RegionPath Wandering
« Reply #3 on: May 30, 2024, 07:26:11 AM »
I said "the original", as in the leaked original system scripts. I find they really help understand things.

Offline robbo007

Re: SCI0: RegionPath Wandering
« Reply #4 on: June 02, 2024, 04:30:27 PM »
ok thanks. I found them.

I've setup my "water.sc" equivalent script (script 301) which includes the bare basics. I've added the set regions to my room script (room 28) but not sure where its failing. I'm getting the "opps error". Is there any way to debug this to find out exactly which part of the code is triggering it?

Script 28:
Code: [Select]
setRegions: 301  ;Testing water bikini script

Code: [Select]
;;; Sierra Script 1.0 - (do not remove this comment)
;**
;** Logics for room 301 - RegPath, RegionPath et al (aka water.sc)
;**
;** Leisure Suit Larry 4 - Never say Nontoonyt (AKA The Missing Floppies)
;**        Copyright 2024
;** by Robbo
;**
;** Last Update: May 30th, 2024
;**
(script# 301)
(include sci.sh)
(use Main)
(include sci.sh)
(include game.sh)
(use Controls)
(use Cycle)
(use Door)
(use Extra)
(use Feature)
(use Follow)
(use Game)
(use Gauge)
(use InitRooms)
(use Inv)
(use Rev)
(use Jump)
(use MenuBar)
(use Obj)
(use RegionPath)
(use DPath)
(use Avoid)
(use Motion)
;these were in the original script
;(use Sight)
;(use Interface)
;(use n802)
;(use n962)
;(use Actor)
;(use System)

(public
Water 0
bikini3Lady 1
bikini4Lady 2
)

(local
local0
[local1 113] = [32767 28 8 133 45 118 258 110 259 75 176 50 -32768]
)

(procedure (OneOf what things &tmp i)
(for ((= i 0)) (< i (- argc 1)) ((++ i))
(if (== what [things i])
(return (or what 1))
)
)
)

(instance Water of Rgn
(properties)

(method (newRoom newRoomNumber)
(if (not (= keep (OneOf newRoomNumber 26 27 28 29))) ; beach, beach1, beach2, Vivir sin Domir
(gGame setScript: 0)
)
(= initialized 0)
(super newRoom: newRoomNumber &rest)
)

(method (init)
(Load rsVIEW 994) ;Brunette Babe
(Load rsVIEW 993) ;Blonde Babe
(super init: &rest)
(closeUpView init:)
(if (not script)
(self setScript: beachWalkerScript)
)
(if (IsObject (script register:))
((script register:) init: setMotion: beachWalkerPath)
)
(if (not (gGame script:))
;(gGame setScript: musicScript)
)
)

(method (notify param1 param2 &tmp temp0)
(switch param1
(0
(= temp0 0)
(while (< temp0 (- argc 2))
((Clone param2)
x: [param2 (++ temp0)]
y: [param2 (++ temp0)]
loop: [param2 (++ temp0)]
init:
)
)
)
(1
(beachWalkerScript register:)
(return)
)
)
)

(method (handleEvent event)
(cond
((super handleEvent: event))


)
)
)

(instance closeUpView of View
(properties
y 85
x 265
loop 4
)

(method (init)
(super init:)
(self hide: setPri: 15)
)

(method (show param1)
(self view: param1 setLoop: 4)
(super show:)
)
)

(instance bikini3Lady of Act ; Brunette babe
(properties
view 994
)

(method (init)
(super init:)
(self
setAvoider: Avoid 1
ignoreHorizon:
setCycle: Walk
observeControl: 2048
)
)

(method (handleEvent event)
(cond
((super handleEvent: event))

)
)
)
(instance bikini4Lady of Act ;Blonde Babe
(properties
view 993
)

(method (init)
(super init:)
(self
setAvoider: Avoid 1
ignoreHorizon:
setCycle: Walk
observeControl: 2048
)
)

(method (handleEvent event)
(cond
((super handleEvent: event))

)
)
)

(instance beachWalkerPath of RegionPath
(properties
value 29
endType 0
theRegion 301 ;refers to script 301
)

(method (at param1)
(return [local1 param1])
)

(method (nextRoom)
(if
(and
(== (self at: (+ 2 value)) 28)
(== gRoomNumber 28) ; Beach2
(gCurRoom notify: 0)
)
(repeat
(-= value 2)
(breakif (== (self at: (+ 1 value)) 32767))
)
)
(super nextRoom: &rest)
)
)

(instance beachWalkerScript of Script
(properties)

(method (changeState newState &tmp temp0)
(switch (= state newState)
(0
(= temp0
(switch (Random 2 3)
(2 bikini3Lady)
(3 bikini4Lady)
)
)
(beachWalkerPath value: -1)
(if (IsObject register)
(register dispose:)
)
(if (== temp0 register)
(self init:)
else
((= register temp0) init: setMotion: beachWalkerPath self)
)
)
(1
(self init:)
)
)
)
)


Offline Kawa

Re: SCI0: RegionPath Wandering
« Reply #5 on: June 02, 2024, 04:46:08 PM »
Knowing exactly which oops error this is would help somewhat. Other than that... sprinkle debug prints through your code?

Offline robbo007

Re: SCI0: RegionPath Wandering
« Reply #6 on: June 02, 2024, 04:52:16 PM »
Knowing exactly which oops error this is would help somewhat. Other than that... sprinkle debug prints through your code?

Its the "You tried something that we didn't think of... " error which does not help :(

Offline Kawa

Re: SCI0: RegionPath Wandering
« Reply #7 on: June 02, 2024, 05:14:24 PM »
Right? I don't know which interpreter this is, but at least one that I can name off the top of my head at least has a number in the corner, so you can look it up and say that you had an object pointer that isn't (#4, E_NOT_OBJECT) or tried to use the wrong property or method (#5, E_BAD_SELECTOR). And the debug builds would be nice enough to spell out what that pointer or selector is. And even that number alone would be a great help.

So I guess spraying debug prints it is.

Offline lskovlun

Re: SCI0: RegionPath Wandering
« Reply #8 on: June 02, 2024, 06:01:08 PM »
This is SCI0, right? So sciv -d should give you a better error message and drop you in the debugger.

Offline lskovlun

Re: SCI0: RegionPath Wandering
« Reply #9 on: June 03, 2024, 12:51:00 AM »
also: try scummvm

Offline robbo007

Re: SCI0: RegionPath Wandering
« Reply #10 on: June 04, 2024, 12:01:13 PM »
also: try scummvm

Amazing..That's much better. The error is:

"setRegions is not a selector for addToPics"

hmm....So do all instances of a view need to be a feature and the setFeature: used? Or maybe loaded with RSView?

« Last Edit: June 04, 2024, 12:32:53 PM by robbo007 »

Offline lskovlun

Re: SCI0: RegionPath Wandering
« Reply #11 on: June 04, 2024, 01:00:34 PM »
The setRegions message is being sent to addToPics. Why is that? That bit got left out (and was probably a copy-paste error when you wrote the post). Was this as intended? You're supposed to send it to a Room instance (i.e. self in most cases).
« Last Edit: June 04, 2024, 01:13:32 PM by lskovlun »

Offline robbo007

Re: SCI0: RegionPath Wandering
« Reply #12 on: June 04, 2024, 05:47:00 PM »
The setRegions message is being sent to addToPics. Why is that? That bit got left out (and was probably a copy-paste error when you wrote the post). Was this as intended? You're supposed to send it to a Room instance (i.e. self in most cases).

Sorry yes I had the syntax wrong. I've now corrected it and added it under the (super init:) but now get an not an object error in debug. hmmm

Code: [Select]
(self setScript: RoomScript)
(self setRegions: 301)   ; Testing water bikini script

Debug error:
"PMachine
Not an object: 0$"


Offline lskovlun

Re: SCI0: RegionPath Wandering
« Reply #13 on: June 04, 2024, 06:26:04 PM »
And that is where you'll have to learn to use the debug window, either Sierra's or the scummvm one. "Not an object: 0" just tells us that something tried to send to a null pointer (and not to a stale pointer or a corrupted pointer or anything). In SSCI, pressing the s key will give you a very basic stack trace. In the scummvm debugger, you can type bt to get a more detailed one (which you can screenshot, but I do wish you could copy/paste from it easily!).

Offline robbo007

Re: SCI0: RegionPath Wandering
« Reply #14 on: June 05, 2024, 11:58:43 AM »
ok thanks. Yeah I think I'm getting into deep waters here. I understand the concept of stacks from assembly but as there is still quite a bit for me to learn in SCI I'm getting a little lost. I might have to put this script on hold for the time being until I advance with the other rooms and hopefully learn more. Then I can come back to this. Ive been on it for days now. LOL

BTW. scummvm does not seem to "recognise" my game hash. So I never got it running with it.

PS: Is the stack read from bottom to top? Meaning last item to load is on the top? If so that might point to the nextroom method in the beachwalkers path script. hmmmm

« Last Edit: June 05, 2024, 12:11:11 PM by robbo007 »


SMF 2.0.19 | SMF © 2021, Simple Machines
Simple Audio Video Embedder

Page created in 0.039 seconds with 23 queries.