Attract-Mode Support Forum

Attract-Mode Support => Scripting => Topic started by: wrybread on April 03, 2018, 03:06:22 PM

Title: Possible to make a screensaver that cycles through games? (solved, sort of)
Post by: wrybread on April 03, 2018, 03:06:22 PM
I'd like to make a screensaver that cycles through games, as opposed to videos of games. And when a user presses a button, no need to exit the cycling, just stay in that game and let the user play it.

Would this be possible?

Any advice for a starting point?

Or maybe something already exists?
Title: Re: Possible to make a screensaver that cycles through games?
Post by: keilmillerjr on April 03, 2018, 03:29:25 PM
It’s doable with autohotkey scripting. However, it wouldn’t be an easy task. You would also have to save and load states past the boot screen of each game for it to seem presentable. A lot of work for a feature I’m not too sure would even make sense. Perhaps a time out script to return to attract, and then have attract time out and select a random game?
Title: Re: Possible to make a screensaver that cycles through games?
Post by: wrybread on April 03, 2018, 04:01:14 PM
The feature makes lots of sense to me. My cabinet sits in my living room running mostly the same few games. Sometimes I launch a game using a random hotkey, but in general it's pretty consistent and it gets a little monotonous. Would be great to inject some automated variety. I'm thinking changing the game every 10 minutes or so, after an hour of inactivity, that kind of thing. And the reason I prefer it over videos is that if the game looks interesting to someone they can simply start playing it.

AHK isn't an option for me as I'm on Linux, but good idea.

I guess I could script something using Python, but I was hoping to use Attract Mode scripting natively for various reasons, including the ability to enable and disable it directly from AM.

> You would also have to save and load states past the boot screen of each game for it to seem presentable.

Not sure what you mean by that? But I use the -autosave MAME option anyway (aka "save state"), so I *think* things should be pretty smooth. Unless it gets caught on a MAME warning screen, which I still haven't figured out how to bypass. But I guess I could either send keystrokes just in case, or recompile MAME to skip it. But this isn't really an eye candy type screensaver, so it doesn't matter if there's a rough transition here and there.

Does anyone know if there's a way to remote control AM, short of sending keystrokes? Something like "start game", and "exit game", etc?
Title: Re: Possible to make a screensaver that cycles through games?
Post by: wrybread on April 03, 2018, 06:17:37 PM
Well shoot, it looks like the timer for screensaver.nut doesn't get reset when in a game, only when in Attract Mode. In other words it can't tell if someone is playing a game, only if there's activity in AM. Reasonable enough I guess, but it means that (I think) the screensaver I have in mind would need to be an external script.
Title: Re: Possible to make a screensaver that cycles through games?
Post by: wrybread on April 04, 2018, 01:58:08 AM
Interestingly, this exists as a program:

http://tomspeirs.com/mamescreensaver/

Won't work for me since it's Windows only, but interesting to note.
Title: Re: Possible to make a screensaver that cycles through games?
Post by: wrybread on April 04, 2018, 12:31:18 PM
Well I made a Python script that works well and should work on every platform, but the problem is that it conflicts with Attract Mode.

My script launches ROMs directly, since I don't see a way to remote control Attract Mode. However, while playing the game Attract Mode is still listening reacting to keypresses.

The flow:

- Attract Mode is running

- timeout is reached (say, 5 minutes of no activity)

- for this example, lets say Ms. Pacman is highlighted in the Attract Mode Display

- the screensaver launches Dig Dug for example

- As I play Dig Dug, Attract Mode will still be reacting to my keystrokes.  On my system I use the same button to enter and exit a game, so when I exit out of Dig Dug in this example, Attract Mode will simultaneously launch Ms. Pacman. Not good. What *should* happen when the user presses Exit is that the user is returned to Attract Mode to select the next game manually.

It's confusing I know, so let me know if that isn't clear.

Can anyone see a way around this? A few general solutions occur to me, not that I have any idea how to achieve them:

- some way to launch the ROM through Attract Mode from an external script? I think that would be the ideal method, but I haven't figured out a way to do that. Maybe make Attract Mode listen for commands on a socket? Or make it check for the existence of a text file that it reads commands from? Maybe some clever plugin solution? Maybe via a web server?

- some way to tell Attract Mode not to listen for keypresses? (In my case joystick presses but same idea)

- maybe make Attract Mode reset it's screensaver timer even while a ROM is open? That would make it so the whole screensaver is run in Attract Mode directly.

- or?

My other problem is that if a ROM has a warning screen it will hang there, since MAME apparently ignores simulated keystrokes (so I can't just send a key after a pause to skip it if present) and there's no way to disable the warning screens (ugh). Edited: solved by recompiling with the nag screen turned off, let me know if anyone wants that build (MAME v0.175 for Ubuntu 64 bit). Could also solve that by using a list of ROMs that don't have warning screens.

And let me know if anyone would like to try my screensaver script. I'm using it on Linux but it *should* work on Windows and Mac since it just uses Python standard libraries.

Title: Re: Possible to make a screensaver that cycles through games?
Post by: qqplayer on April 07, 2018, 06:46:41 AM
Configure - Controls - Random Game   :)

If it is not what you want I was thinking on something like this:

http://forum.attractmode.org/index.php?topic=1185.msg8725#msg8725

Creating a function who press "random" buttoms like up , prev_page , next_letter....
Title: Re: Possible to make a screensaver that cycles through games?
Post by: wrybread on April 11, 2018, 07:58:50 PM
> Configure - Controls - Random Game

I don't see how I can use that to automatically choose random games after a timeout?

Title: Re: Possible to make a screensaver that cycles through games?
Post by: qqplayer on April 12, 2018, 03:45:16 AM
> Configure - Controls - Random Game

I don't see how I can use that to automatically choose random games after a timeout?

As simple as like I said , creating a "tick_time" function.
If you set:

> Configure - Controls - Random Game - KeyA

Then just create a function who presses "keyA" after a certain time.

Code: [Select]
random_game          A
Code: [Select]
local settings = {
   delay_timer = 0,
   play_delay = 10000
}

local random = fe.signal("random_game ");

function on_transition(ttype, var, transition_time) {
    if ( ttype == Transition.StartLayout || ttype == Transition.ToNewList || ttype == Transition.FromOldSelection ) {
        settings.delay_timer = fe.layout.time
    }
    return false
}

function on_tick(tick_time) {
   if ( tick_time - settings.delay_timer >= settings.play_delay ) random_game = true
}

fe.add_ticks_callback(this, "on_tick")
fe.add_transition_callback(this, "on_transition")

You have to create the function because my squirrel skills are "minimal" so look into those links:

http://forum.attractmode.org/index.php?topic=1185.msg8725#msg8725
http://forum.attractmode.org/index.php?topic=1826.0
http://forum.attractmode.org/index.php?topic=1236.0
https://github.com/mickelson/attract/issues/37
Title: Re: Possible to make a screensaver that cycles through games?
Post by: qqplayer on April 12, 2018, 04:11:31 AM
So... I found a "solution" just download Kent79 AMGPS (Attract Mode Grid Pro System) v1.13

http://forum.attractmode.org/index.php?topic=1824.0

Layout.nut - line 502

Code: [Select]
            fe.signal( "random_game" );
As I said you have to create an standalone function for your purpose but I can confirm that this works , I´ve set:

Code: [Select]
param                rtime 10
An after every 10 seconds randomizes the selected game.
Title: Re: Possible to make a screensaver that cycles through games?
Post by: qqplayer on April 12, 2018, 04:41:03 AM
Sorry for repost , but I get another option based on keilmillerjr timer.nut

http://forum.attractmode.org/index.php?topic=1826.0

Tested on Basic layout:

Edit layout.nut adding this line.

Code: [Select]
fe.do_nut("timer.nut")
Put the timer.nut file alongside the layout.nut

Code: [Select]
class UserConfig { </ label="Idle Timer ", help="The amount of time (in seconds) that if timer expired, go back to home menu", order=5 />  rtime=10;}
local my_config = fe.get_config();
local bgtime;
bgtime=abs(("0"+my_config["rtime"]).tointeger());
local  preview_counter =  fe.add_text( "", 1220 , 24 , 100, 25 );
//preview_counter.align = Align.Left;
//preview_counter.set_rgb( 255, 30, 30 );
//preview_counter.font = "archivonarrow-bolditalic";
local i=0;
local count = bgtime;
local user_interval = bgtime;
preview_counter.msg = count;
local previous_select = i;
local last_time = 0;
function saver_tick( stime )
{if ( previous_select != i) {
last_time = stime;
count = user_interval;
previous_select = i;
return;}
if ( stime - last_time > 1000) {
count--;
preview_counter.msg = count;
last_time = stime;}
if ( count <= 0 ) {
fe.signal( "random_game" );
}
}
function fade_transitions( ttype, var, ttime ) {
 switch ( ttype ) {
  case Transition.EndNavigation:
  case Transition.ToNewList:
      i++;
  break;
  }
 return false;
}
fe.add_ticks_callback( "saver_tick" );
fe.add_transition_callback( "fade_transitions" );

To set the time just mod this line:

Code: [Select]
rtime=10
Title: Re: Possible to make a screensaver that cycles through games?
Post by: wrybread on April 15, 2018, 05:16:53 PM
I'll try this:

> fe.signal( "random_game" );

One problem though is that with a keystroke, when I press the "random game" key, it simply chooses a random game, highlighting it, but not entering it.

Another issue is that that will, I think, at best launch a random game after X timeout from Attract Mode, but not continue to launch games after more inactivity, since Attract Mode can't (I think) detect inactivity when in a game. In other words, it's "tick" function isn't triggered by presses when you're actually in a game.

At best this random game rotation would:

1- launch a game after X minutes of inactivity

2- continue listening for inactivity even while displaying the MAME game

3- launch another game after X minutes of inactivity

I think the fe.signal( "random_game" ) will only achieve step 1.


Title: Re: Possible to make a screensaver that cycles through games?
Post by: qqplayer on April 16, 2018, 08:11:43 AM
I´m not on my pc but you can add "more" commands:

Code: [Select]
preview_counter.msg = count;
last_time = stime;}
if ( count <= 0 ) {
fe.signal( "next_letter" );
fe.signal( "down" );
fe.signal( "random_game" );
fe.signal( "select" );
}
Title: Re: Possible to make a screensaver that cycles through games?
Post by: qqplayer on April 16, 2018, 12:44:57 PM

2- continue listening for inactivity even while displaying the MAME game


I think this only can be done using an autothotkey script or something like that I´m not sure if the f.e. can make this  :D
Title: Re: Possible to make a screensaver that cycles through games? (solved, sort of)
Post by: wrybread on May 01, 2018, 01:31:15 PM
Well with a whole lot of duct tape I got everything working. My cabinet swaps to a random game every 5 minutes if no one is playing it, which has officially gotten us out of our rut of playing the same few games over and over. And it makes our MAME cabinet a lot more interesting in general, since every time I walk past there's some new oddball artifact of the 80s or 90s playing on it. If you don't mind a heinous pun, it's a game changer (oof, sorry about that).

It would be so nice if this was natively possible in Attract Mode! Unfortunately I don't where to start for adding the functionality there though. If any AM devs are interested, I'm glad to help however I can though.


An outline of how I got it working:

- I made an Attract Mode screensaver.nut that simply launches my Python script after X minutes of inactivity

- my Python script then launches a new game after every 5 minutes (configurable) of inactivity, and is smart enough to reset it's inactivity counter even during game play (something that Attract Mode currently can't do, as far as I can tell). So it keeps launching random games whenever no one is using the cabinet. And someone can start playing that game any time. But if someone presses the exit button, they're returned to Attract Mode so they can choose specific games manually.

- and the cycle repeats: Attract Mode will then relaunch my script after X minutes of inactivity.


A couple of nice features:

- the script starts either via a screensaver.nut after X minutes, or manually via a "Random" button on my cabinet (the Random button executes an AM plugin that launches the script)

- currently it picks a random ROM from the roms directory, but it could easily be adapted to choose a random entry from a specific Attract Mode romlist.

- it detects when a ROM doesn't launch properly and adds it to a list of bad ROMs that it won't use in the future. Also handy for finding and fixing bad ROMs.

- the script can run independently of Attract Mode, but it's nice to also give the user the ability to choose their own games manually, which Attract Mode does so beautifully. So the user is returned to Attract Mode when they press the Exit button on the cabinet.

- it works with my ServoStik to change the joystick between 4 and 8 way as needed



The duct tape part:

- when my Python script launches it has to kill Attract Mode, or AM will keep responding to keystokes in the background. That's a big issue since for example when exiting a game from my script AM will simultaneously launch a game, which is a pretty big conflict. Solved by simply killing AM.

- when my Python script exits, it then relaunches Attract Mode, so the player can manually choose games again.


I'm glad to share it if there's interest, but I made it for Linux so I'd have to make a few mods if someone wanted to use it on Windows.

And if any Attract Mode devs have interest in implementing this natively in AM, I'd be glad to help. I think this is what would be required:

- have AM listen for keystrokes and/or joystick action while a ROM is playing. Possibly solvable by a secondary script that sends an activity notice to AM whenever there's activity (maybe by sending dummy keypresses to the AM interface?).

- or if AM was remote controllable, an external script could simply tell Attract Mode to launch new games at will. For example if I could run "attract_mode_cli mame/dkong" or maybe send a command through a webserver or a network socket, then an external script could handle the screensaver part but still play nice with AM.

Title: Re: Possible to make a screensaver that cycles through games? (solved, sort of)
Post by: qqplayer on May 04, 2018, 03:12:57 AM
Well with a whole lot of duct tape I got everything working. My cabinet swaps to a random game every 5 minutes if no one is playing it, which has officially gotten us out of our rut of playing the same few games over and over. And it makes our MAME cabinet a lot more interesting in general, since every time I walk past there's some new oddball artifact of the 80s or 90s playing on it. If you don't mind a heinous pun, it's a game changer (oof, sorry about that).

It would be so nice if this was natively possible in Attract Mode! Unfortunately I don't where to start for adding the functionality there though. If any AM devs are interested, I'm glad to help however I can though.


An outline of how I got it working:

- I made an Attract Mode screensaver.nut that simply launches my Python script after X minutes of inactivity

- my Python script then launches a new game after every 5 minutes (configurable) of inactivity, and is smart enough to reset it's inactivity counter even during game play (something that Attract Mode currently can't do, as far as I can tell). So it keeps launching random games whenever no one is using the cabinet. And someone can start playing that game any time. But if someone presses the exit button, they're returned to Attract Mode so they can choose specific games manually.

- and the cycle repeats: Attract Mode will then relaunch my script after X minutes of inactivity.


A couple of nice features:

- the script starts either via a screensaver.nut after X minutes, or manually via a "Random" button on my cabinet (the Random button executes an AM plugin that launches the script)

- currently it picks a random ROM from the roms directory, but it could easily be adapted to choose a random entry from a specific Attract Mode romlist.

- it detects when a ROM doesn't launch properly and adds it to a list of bad ROMs that it won't use in the future. Also handy for finding and fixing bad ROMs.

- the script can run independently of Attract Mode, but it's nice to also give the user the ability to choose their own games manually, which Attract Mode does so beautifully. So the user is returned to Attract Mode when they press the Exit button on the cabinet.

- it works with my ServoStik to change the joystick between 4 and 8 way as needed



The duct tape part:

- when my Python script launches it has to kill Attract Mode, or AM will keep responding to keystokes in the background. That's a big issue since for example when exiting a game from my script AM will simultaneously launch a game, which is a pretty big conflict. Solved by simply killing AM.

- when my Python script exits, it then relaunches Attract Mode, so the player can manually choose games again.


I'm glad to share it if there's interest, but I made it for Linux so I'd have to make a few mods if someone wanted to use it on Windows.

And if any Attract Mode devs have interest in implementing this natively in AM, I'd be glad to help. I think this is what would be required:

- have AM listen for keystrokes and/or joystick action while a ROM is playing. Possibly solvable by a secondary script that sends an activity notice to AM whenever there's activity (maybe by sending dummy keypresses to the AM interface?).

- or if AM was remote controllable, an external script could simply tell Attract Mode to launch new games at will. For example if I could run "attract_mode_cli mame/dkong" or maybe send a command through a webserver or a network socket, then an external script could handle the screensaver part but still play nice with AM.

Maybe someone can improve a solution if you post the code...
I think you need to use the github channel if you want the main developer to answer.
Title: Re: Possible to make a screensaver that cycles through games? (solved, sort of)
Post by: spud1 on October 13, 2018, 06:52:19 AM
Hi wrybread. I would be very interested in your code if you are willing to publish it please. I'm using linux/ raspberry pi. Thanks.
Title: Re: Possible to make a screensaver that cycles through games? (solved, sort of)
Post by: justez on April 10, 2020, 11:18:16 AM
I am also interested in this script or similar, has anyone finally been able to do it?




Title: Re: Possible to make a screensaver that cycles through games? (solved, sort of)
Post by: wrybread on September 24, 2020, 03:26:49 PM
Ak sorry, the forum wasn't notifying me of replies.

If anyone still wants it, email me at my username at gmail.
Title: Re: Possible to make a screensaver that cycles through games? (solved, sort of)
Post by: mrchrister on October 05, 2020, 08:56:27 PM
I wrote a screensaver in ahk for anyone interested. Google how to download and install ahk for Windows if you haven't heard of it. It's easy to use.

Just add games to the list you'd like to see displayed. I posted my list at the bottom if you want to use that.

Copy mame64.exe to a new instance (in my case groovymame64_223.exe).
Don't point it to your main mame64.exe. Instead copy mame64.exe to a second instance in the same mame folder that you're only using for the screensaver. This is necessary because the script will otherwise close your mame games you are playing. It's a pretty simple script ;)

You also need to update the buttons that will close the screensaver and return to attract mode. In my case its
      1::
      2::
      1joy7::
      1joy8::
      2joy7::
      2joy8::

And don't forget to update the paths in the script and you are good to go.

One more thing: Time_to_start defines the screensaver to start after 5 minutes. For testing you should set it to something like 30000 (30s). Don't do anything below 10s or you might have trouble turning it off lol

Code: [Select]
#NoEnv
#Persistent

Time_to_start=400000

list =
(
2020bb
64street
88games
)



GroupAdd, screensaver, ahk_exe attract.exe
GroupAdd, screensaver, ahk_exe groovymame64_223.exe

SetTimer, MameRelaunch, %Time_to_start%
return

MameRelaunch:


if WinActive("ahk_group screensaver")
{
StringSplit, ListArray, list, `n`r
Process, Close, groovymame64_223.exe
sleep 500
random, selected, 1, %ListArray0%
check := ListArray%selected%
Run, C:\Games\Emulators\Groovymame\groovymame64_223.exe -sound none -inipath C:\Games\Emulators\Groovymame\ -homepath C:\Games\Emulators\Groovymame\ %check%
return

}


#IfWinActive, ahk_exe groovymame64_223.exe
{
1::
2::
1joy7::
1joy8::
2joy7::
2joy8::
Process, Close, attract.exe
Process,Close,groovymame64_223.exe
Run, c:\Games\AttractMode\attract.exe --config c:\games\attractmode
SetTimer, MameRelaunch, %Time_to_start%
return
}




Here is my complete list of games I have in the screensaver. It's almost all horizontal games and from my Top500

Code: [Select]
list =
(
2020bb
64street
88games
airbustr
alexkidd
aliens
aliensyn
alpham2
alpine
altbeast
androdun
aof3
aoh
aquarush
arabfgt
arabian
archrivl
armwar
astdelux
astorm
asurabus
athena
avengers
avsp
avspirit
baddudes
bakubaku
bangball
bangbead
batcir
battlera
bayroute
bchopper
berzerk
bigfight
bigkarnk
biomtoy
bionicc
bjourney
blazeon
blazstar
bldyror2
blitz
blitz
blkheart
blktiger
blockhl
blockout
bloodwar
bmaster
bnzabros
bombjack
bonkadv
boogwingu
bosco
brapboys
breakrev
bssoccer
bstars2
btoads
bubblem
bubbles
bublbob2
bublbobl
buckrog
bucky
burningf
cadash
captaven
captcomm
carket
cawing
cbaj
cbasebal
chinagat
choplift
chukatai
cloak
clshroad
cninja
cobracom
columns
commando
contra
cotton
cotton2
cottonbm
crimec
crimfght
crkdown
crospang
crysking
csclub
cshift
ctribe
cupfinal
cyberbal
cyberlip
cybots
daraku
darius
darius2
dariusg
dbreed
ddragon
ddragon2
ddsom
ddtod
deathsml
defender
demonwld
denjinmk
deroon
dharma
dino
dmnfrnt
doapp
dondokod
dowild
drgnbstr
drmario
dynagear
dynwar
ecofghtr
edf
edrandy
ehrgeiz
eightman
elevator
elvactr
emeralda
eprom
eswat
excitebk
extdwnhl
fantjour
fatfury3
fbfrenzy
ffight
fgtlayer
flamegun
flipshot
footchmp
ga2
gaia
gaiapols
ganryu
garou
gauntdl
gauntleg
gauntlet
gaxeduel
gberet
gdarius
gdarius2
gforce2
ghostb
ghostlop
ghouls
gigawing
gng
goldnaxe
gradius
gradius3
gradius4
gratia
grdians
growl
gtmr
gundamex
gunforc2
gunforce
hattrick
hcastle
hellfire
hharry
hook
htchctch
hvysmsh
hyperath
hyperath
hyprduel
ikari3
indytemp
inthunt
jjsquawk
joemacr
jojo
jojo
jojoban
joust
joyjoy
junglek
junofrst
karnov
kbash
keith
kicker
kidniki
kingofb
kinst
kinst
kinst2
kinst2
kizuna
klax
knights
kod
kof2000
kof96
kof98
kov
kov2
landmakr
lastbld2
lbowling
ldrun
legendoh
lightbr
liquidk
locomotn
lresort
mace
mace
machbrkr
macross2
madgear
magdrop3
magerror
maglord
mario
martmast
marvland
matrim
mcatadv
megaman2
mercs
metalb
metamrph
metmqstr
miexchng
mk2
mmatrix
momoko
moomesa
motos
mpatrol
mrdrillr
msgogo
msh
mshvsf
mslug
mslug2
mslug3
mslug4
mslug5
mslugx
msword
mtlchamp
mtrap
mtwins
mushitam
mutnat
mvsc
mwalk
mysticri
mystwarr
nagano98
nagano98
nam1975
narc
nbahangt
nbajam
nbbatman
ncommand
nemesis
nemo
neodrift
ninjak
nitd
nslasher
nspirit
nwarr
ohmygod
openice
ordyne
orlegend
oscar
osman
outfxies
outzone
overtop
p47
p47aces
pacland
parodius
pblbeach
pbobble2
pbobble4
penbros
pepper2
pgm
pgoal
pigout
pigskin
pktgaldx
pkunwar
plotting
plsmaswd
popeye
pow
prehisle
primrage
progear
pulirula
pulstar
punisher
punkshot
pururun
puyopuy2
puzzledp
puzzli2
puzzloop
pwrgoal
pzloop2
qix
rallyx
rambo3
rampage
rastan
raystorm
rbff2
rbtapper
recalh
ringdest
ringking
riotcity
riskchal
rmpgwt
roboarmy
robocop
robocop2
robotron
rodland
rohgau
rollerg
roms
rotd
rsgun
rthun2
rthunder
rtype
rtype2
rtypeleo
rungun
rushhero
rvschool
sabotenb
sailormn
salamand
salmndr2
samsh5sp
samsho2
samsho3
scontra
secretag
sengoku
sengoku3
senkyu
sexyparo
sf2ce
sfa2
sfa3
sfex2p
sfexa
sfiii2n
sfiii3n
sfiiin
sgemf
shadfrce
sharrier
shdancer
shimpact
shinobi
shocktr2
shocktro
sidearms
silentd
silkroad
simpbowl
simpsons
skykid
slammast
slapshot
snowbro2
snowbros
socbrawl
sokyugrt
soldivid
sonicwi2
soulclbr
spang
spdodgeb
speedspn
spelunkr
spf2t
spidman
spinmast
splatter
ssf2t
ssideki3
ssriders
stakwin2
stdragon
stonebal
strahl
stratof
strider
stvbios
suprmrio
suratk
svc
tapper
tbowl
tbyahhoo
teddybb
tehkanwc
tekken3
tektagt
tengai
terraf
tetrisp2
tgm2
theroes
thndrx2
thndzone
thoop
thunderx
tigeroad
timber
tmnt
tmnt2
tmnt22pu
tnzs
toki
tokkae
tophuntr
trackfld
trojan
ts2
tumblep
turfmast
twinspri
uccops
ultennis
umk3
unsquad
uopoko
vamphalf
vball
vendetta
vf
vigilant
viostorm
vsav
wakuwak7
wardner
warriorb
waterski
watrball
wb3
wbml
wboy
wg3dh
whp
willow
winspike
wiz
wizdfire
wjammers
wof
wow
wrally
wwfmania
wwfwfest
xevi3dg
xexex
xmcota
xmen
xmultipl
xmvsf
xsleena
zerowing
zookeep
)