Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - robbo007

Pages: [1] 2
1
SCI Syntax Help / 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:)
)
)
)
)


2
SCI Development Tools / View size limits
« on: March 27, 2024, 06:08:16 PM »
Hi everyone,
What type of size restrictions / limits does a view have? I'm seeing some strange things happening. I have a 320x45 loop in my view that has 4 cels of animation. The total size of the view with other loops is: 50921 bytes. Its displayed like this. (See attachment)

If I cut cel into two and create another loop with the second half it works fine.

Regards,

3
SCI Development Tools / SCI0 picture size limits when importing from bmp
« on: February 22, 2024, 06:05:41 PM »
Hi guys,
I've been using Aseprite to draw my pictures as its a lot faster than using the built in drawing tools in SC. Size and disk space restrictions are posing to be a real challenge for my game.

Does anyone know the ins and outs of Phil's algorithm that converts BMP to vector? I've got two backgrounds that look visually very similar. One imports fine using 65120 bytes and the other is using 72228 bytes when imported. Too big for SCI0.  What things influence the size increase? Is it a certain colour? The dithering, or certain shapes? Here are my examples:

b-top-down.bmp imports using 65120 bytes and b-top-left.bmp import using 72228 bytes..

I add views to these basic background pictures to spice them up a little. Rocks, trees and other things...




4
SCI Development Tools / Add Set palette:0 to picture
« on: January 17, 2024, 01:49:58 PM »
Hi guys,
Is there a way to add to the vector timeline after the initial Start on a picture the commands Set Palette:0 Set Palette:1 Set Palette:2 Set Palette:3 ? Or is this only created when you create a new Picture?
I've got a picture I was editing and accidental deleted those commands from the timeline and don't have a backup.
Thanks,

5
Hi guys,
I've been creating my game pictures using Aseprite as its a lot easier to do the artwork than using the built in drawing tools in SciCompanion. I import my BMP pictures from Aseprite and they work perfectly. They are oblivious a lot larger, 50kb per picture compared to the vector drawn ones which are around 5kb-7kb.

Is there any way to import the priority and control screens also? As this would save me loads of time.


6
SCI Syntax Help / SCI0: right click to look like in QFG2
« on: December 26, 2023, 09:09:32 PM »
Hi guys,
Is it possible using the SCI0 template to use the right click mouse button on things to get a look description like what they did with QFG2? What code is involved? How do you link this to your handleEvents etc?
Thanks,

7
SCI Syntax Help / Display procedure
« on: October 26, 2023, 11:49:26 AM »
Hi all,
I'm messing around with a script to try and act like an Apple II screen. Text gets drawn slowly on screen. A flashing block cursor at the end awaiting prompt. User can enter a few basic keyboard commands to get different preset texts displayed onscreen. Maybe a menu system. Press 1 for X press 2 for z etc.

This might be a mission to code but has anyone done anything like this to get an idea of what I need to use code wise? I can't recall any of the Sierra games doing this? I might be wrong.
Thanks,




8
SCI Syntax Help / View instance Prop instance and limitations
« on: September 12, 2023, 09:49:14 AM »
Hi,

Just wondering if someone could shed some light on why when I define an instance of prop/view I get white control area appearing from that view. (see screenshot 1).  The palm tree displays a white line along the bottom. The Zodiacs display the rectangle box.

In order for these control lines/areas to not appear I need to use the signal ignAct/16384 syntax in the properties of the view or prop. Is this normal? Is this the best way to combat the white control lines/areas that appear? I then have to create the desired control lines in the picture as to not have ego walk through the view. Seems I lose the "natural" view control lines when doing this.

Code: [Select]
(instance aZodiac of View
(properties
view vRoom
loop lZodiac
x 215
y 164
priority 7
signal ignAct ;16384
)
)


Also what limitations does a view have? I've long views which seems to get corrupted on screen when they pass a certain length. IE they won't be displayed properly in game. They display fine when you click on the view icon in the picture edit screen. These are all views I have created in Aseprite and then imported into SC.

Is there a list showing all the limitations of pictures and other resources also? So I can understand what the limit is. I've run into picture limits when importing from Aseprite and I normally cut things up and turn some into view to get around this limit. But it would be good to know everything else.

Thanks,


9
SCI Development Tools / Running SCI0 on Atari ST
« on: August 25, 2023, 07:09:27 AM »
Hi guys,
I decided to test my game code on my Atari ST as a proof of concept. I copied all the executable files from the Atari version of LSL3 which uses the interpreter is version 1.002.026 ran the Atari ST version of the Sierra installer to make sure hardware was all detected and resource.cfg written. Game loads fine. Seems to load rooms etc. Crashes when I try and type something. Not sure if its because I'm using Brian's s hack for the User interface? (Something I need to change at a later stage). http://sciwiki.sierrahelp.com//index.php?title=SCI_Studio_Tutorial_2#User_Interface

Could this be causing the crash? Could it be the Atari ST interpreter version I'm using? I don't want to spend much time on this just curious as this is another massive rabbit hole to go down and now is not the time. There is also the Amiga also. I've not got one so I cant test it :)

Thanks,
Rob


10
SCI Syntax Help / MachineSpeed syntax on real hardware
« on: August 17, 2023, 01:01:49 PM »
Hi guys,

I'm trying to get the "MachineSpeed" synatx working when I test my game on real hardware, IBM XT, IBM AT and a 486.

From the LSL3 code in room 250 (Casino exterior) they used it to init the fountain view if the machine was faster than a IBM XT.

Code: [Select]
(if (> machineSpeed pc8088)
(aFountain init)
)
In the 000.sc (Main.sc) the only reference I can see is this. I cant seem to find pc8088 defined anywhere else?

Code: [Select]
(if (> scoreDisplayed score)
(if (> machineSpeed pcAT)
(-- scoreDisplayed)
else
(= scoreDisplayed score)
)
(StatusLine doit:)
)

(if (< scoreDisplayed score)
(if (> machineSpeed pcAT)
(++ scoreDisplayed)
else
(= scoreDisplayed score)
)
(StatusLine doit:)
)


So I've defined gMachineSpeed in my main.sc under the local section and in my script I'm using it. It does not seem to work properly. It does not load the view on both IBM XT and 486. It should load the view on the 486 as its a faster machine. How does it know the the machine speed is greater than 16? What is it using to know this? Am I missing something? Do I need to define this in another script?

Code: [Select]
; Machine speed used for real hardware
gMachineSpeed


Code: [Select]
(if (> gMachineSpeed 16)
(aFountain init:)
)

11
SCI Development Tools / Importing BMP into SciCompanion problems
« on: August 16, 2023, 05:15:07 AM »
Hi,
Just wondering if anyone else has issues when importing .bmp's into Sci-companion.

I click new pic, import bitmap to pic then browse my hard disk for the .bmp file. Click open and nothing, it just goes back to the convert bitmap to pic screen. Same happens when I try and import a bmp sequence into a view. blank screen.

The only way I can get it working is to open the images in ms-paint copy and then click on import bitmap to pic then the image is displayed in the import window. Same for Views, I need to copy in ms-paint then go into a new view and paste one by one.

I've tried reinstalling  and same problems. Not sure if this is a known bug?

12
SCI Syntax Help / changeState script
« on: July 06, 2023, 05:17:55 PM »
Hi,
I'm messing around with Room 460 and 470 from LSL3. I've managed to get the changeState working for Larry to press button and move into the elevator. Only trouble is instead of walking into the elevator he glides like a ghost. Not sure why this is happening. Any ideas where I'm going wrong?

Code: [Select]
(method (changeState newState)
(= state newState)
(switch state
(0
)
(1 ; handle the elevator, ego goes to button.
(ProgramControl)
;(= IN_ELEVATOR)
(gEgo
illegalBits: 0
ignoreActors:
setMotion: MoveTo 94 139 self
)
)
(2 ; Ego presses button
(gEgo
cycleSpeed: 1
view: 707
setLoop: 2
setCycle: End self
)
)
(3 ; Done pressing button
(aButton setCel: 1 stopUpd:)
(gEgo setCycle: Beg self)
)
(4 ;Elevator lights move
(gEgo view: 000 loop: 3)
(ProgramControl)
((aLightLeft script?) changeState: 3)
)
(5 ;Wait here until the elevator gets to the ground floor,
;indicated by the LightScript reaching cel 0.
(= seconds 0)
)
(6
(aLightLeft setScript: 0)
;(gTheSoundFX number: 460 loop: 1 play:)
(aDoor setCycle: End self)
)
(7
(aDoor stopUpd:)
(= cycles 10)
)
(8 ; Move ego to elevator door
(gEgo illegalBits: 0 setMotion: MoveTo 70 135 self)
)
(9 ; Ego enters elevator
(gEgo setMotion: MoveTo 72 128 self)
)
(10
(gEgo setLoop: 2)
(= cycles 14)
)
(11
;(gTheSoundFX number: 461 loop: 1 play:)
(aDoor setCycle: Beg)
(= seconds 3)
)
(12
;(gTheMusic fade:)
(gRoom newRoom: 505)
)
(13
(gEgo setMotion: MoveTo 70 154 self)
)
(14
;(gTheSoundFX number: 461 loop: 1 play:)
(aDoor setCycle: Beg self)
)
(15
(aDoor stopUpd:)
(gEgo view: 000)
; (= currentStatus egoNORMAL)
)
)
)
)

13
SCI Syntax Help / SCI0 - Custom buttons, windows and gauges
« on: May 29, 2023, 08:21:39 AM »
Hi guys,
Did anyone ever convert the code from these tutorials to SCI at any point? I've been tackling it but getting very lost.

http://sierrahelp.com/SCI/Tutorials/Tutorial2/chapter07.html
http://sierrahelp.com/SCI/Tutorials/Tutorial2/chapter08.html
http://sierrahelp.com/SCI/Tutorials/Tutorial2/chapter09.html

Regards,
Rob



14
SCI Syntax Help / SCI0: Actors and scripts
« on: May 12, 2023, 09:18:40 AM »
Hi,
I'm trying to get my actor walking behind the bar to create a random moving effect. I've tried using the actors instance method init and it works but I need more than one setMotion: MoveTo (left to right) so I think I need to use a change state script. How do you trigger a changestate from a instance of an actor. Because my code does not trigger it or I've got the changestate syntax wrong? Do I need a (method (doit) somewhere possibly?

Code: [Select]
(instance aIsabella of Act
(properties
view 226
loop 1
x 191
y 76
cycleSpeed 5
)
(method (init)
(super init:)
(self
setPri: 7
setScript: aIsabellaScript
;;; cycleSpeed: 0
;;; loop: 1
setCycle: Walk
;;; setMotion: MoveTo 145 76

)
)
)
(instance aIsabellaScript of Script
(properties)

(method (changeState newState)
(= state newState)
(switch state
(0 ; Handle state changes
)
(1
; Walk Isabella to left of bar.
(aIsabella setMotion: MoveTo 145 76) (aIsabella view: 226 loop: 1 setCycle: End)
;repeat
(self changeState: 0)
)
)
)
)

15
Hi,
Just wondering if its possible to use multiple Roland MT32 patch files/sound banks in a SCI0 game? Can they be pushed to the device mid game? Or does it only load them when it initialises the driver at startup?
Thanks,

Pages: [1] 2

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

Page created in 0.035 seconds with 18 queries.