Forums » General StepMania » How to Script Option Changes During a Song

1
Hi there. Does anyone remember or have seen songs that have option changes, or "distractions", set effects on the arrows while playing a song? Where I've seen it being used:

Mungyodance 3 EXTRA MODE
In the groove survival? (not sure but I think it was an extra mode in ITG
Metal Crusher, Undertale Chart. (only the arrow effects, not the backgrounds)

As far as I know, the only way to edit effects like this are in a .lua script file, which I don't know how to edit yet.

I'm having alot of fun messing with the new chart effects in SM5 using the editor, like the ones used often in official PIU charts. Although, access to the change of option effects like "drunk" "spinning arrows~" "mini~" along with the variables that set how they look, would be AMAZING.

Please, if anyone can help me out here, I would greatly appreciate it!
Reply
I have searched some more and found it looks like the arrow effects are in the .xml of the simfile. here is a sample from an .xml from WinDEU's works.

-- Beat start, Beat end, Mods, Player specific

meteor_mods = {

{0,200,'2.25x,-999999% Cover','end'},

{0,200,'*10000 No Beat','end'},
{7.022,19.375,'*10000 150% Beat','end'},
{20.699,33.934,'*10000 150% Beat','end'},
{35.258,47.610,'*10000 150% Beat','end'},
{77.610,98.783,'*10000 150% Beat','end'},

{0.000,6.742,'*16 Stealth,*0 Flip,*0 Invert,*0 2.25x,*10000 Dark','end'},
{6.300,0.055,'*10000 50% Stealth,*10000 Invert,*10000 0.5x','len'},
{6.521,0.055,'*10000 50% Stealth,*10000 Flip,*10000 No Invert,*10000 1.1x','len'},
{6.631,0.055,'*10000 50% Stealth,*10000 -100% Invert,*10000 Flip,*10000 1.7x','len'},
{6.742,7.243,'*10000 50% Stealth,*10000 2.25x,*10000 No Flip,*10000 No Invert,*4 No Dark','end'},
{6.852,8.000,'*2 No Stealth','end'},

{7.183,0.11029*3,'*16 Wave','len'},
{7.514,0.11029*3,'*16 -100% Wave','len'},
{7.845,0.11029*3,'*16 Wave','len'},
{8.175,0.11029*3,'*16 -100% Wave','len'},
{8.506,0.11029*3,'*16 Wave','len'},
{8.837,0.11029*3,'*16 -100% Wave','len'},
{9.168,0.11029*2,'*16 Wave','len'},
{9.389,0.11029*3,'*16 -100% Wave','len'},
{9.720,0.11029*2,'*16 Wave','len'},
{10.050,0.11029*2,'*16 -100% Wave','len'},
{10.271,0.11029*2,'*16 Wave','len'},
{10.492,0.11029*2,'*8 No Wave','len'},

{14.242,0.11029*3,'*16 Wave','len'},
{14.573,0.11029*3,'*16 -100% Wave','len'},
{14.903,0.11029*3,'*16 Wave','len'},
{15.234,0.11029*6,'*16 -100% Wave','len'},
{15.896,0.11029*3,'*16 Wave','len'},
{16.227,0.11029*3,'*16 -100% Wave','len'},
{16.558,0.11029*2,'*16 Wave','len'},
{16.778,0.11029*3,'*16 -100% Wave','len'},
{17.109,0.11029*2,'*16 Wave','len'},
{17.330,0.11029*2,'*16 -100% Wave','len'},
{17.550,0.11029*2,'*16 Wave','len'},
{17.771,0.11029*3,'*16 -100% Wave','len'},
{18.102,0.11029*3,'*16 Wave','len'},
{18.443,0.11029*3,'*16 -100% Wave','len'},
{18.764,0.11029*6,'*16 Wave','len'},
{19.425,0.11029*3,'*16 -100% Wave','len'},
{19.756,0.11029*3,'*16 Wave','len'},
{19.977,0.11029*3,'*16 -100% Wave','len'},
{20.308,0.11029*3,'*8 No Wave','len'},

{21.080,0.110,'*16 Stealth','len'},
{21.190,0.110,'*16 No Stealth,Bumpy','len'},

{21.300,35.418,'*16 Overhead,*8 No Centered,Bumpy,*4 No Reverse,*4 No Flip','end'},
{21.521,0.111,'*4 50% Reverse,*4 50% Flip','len'},
{25.050,0.111,'*4 50% Reverse,*4 50% Flip','len'},
{32.109,0.111,'*4 50% Reverse,*4 50% Flip','len'},
{21.852,0.111,'*16 200% Distant,*8 100% Centered','len'},
{22.183,0.111,'*16 200% Hallway,*8 -100% Centered','len'},
{22.514,0.111,'*16 200% Distant,*8 100% Centered','len'},
{22.845,0.111,'*16 200% Hallway,*8 -100% Centered','len'},
{23.175,0.111,'*16 200% Distant,*8 100% Centered','len'},
{23.506,0.111,'*16 200% Hallway,*8 -100% Centered','len'},
{24.168,0.111,'*16 200% Distant,*8 100% Centered','len'},
{24.389,0.111,'*16 200% Hallway,*8 -100% Centered','len'},
{24.609,0.111,'*16 200% Distant,*8 100% Centered','len'},

Does anyone have any advice on how to set some of this up? Tutorials? or even any way to contact someone who knows how this works?

I'm very determined to figure this out. So I will stay online here constantly.

Thanks!
Reply
I can explain how that works. I was actually working on converting it to SM5. (but I'm really lazy so that hasn't happened.)

The mod table (the table that you posted) is run through a mod reader (look for ApplyGameCommand in that same file near a bunch of if statements).

ApplyGameCommand can't be used in SM5 anymore, however, so reading mods from a mod table is a lot more complicated. Requires some knowledge with lua string manipulation. I can explain it more in depth, if you want.

Last edited: 14 May 2016 10:33pm

<YungDaVinci> but what does it mean
<YungDaVinci> what is kyzentun
<Kyzentun> It means Kyzentun.
<Jousway> what the fuck is a Kyzentun
Reply
You'd need to use the PlayerOptions API, which can take a string of mod options to set to a specific player. This code should work for reading the mods table in that format. Note that I changed the positioning of the 'end'/'len' param, because I think it reads a little better.

Last edited: 18 May 2016 3:13pm

Reply
I'm bumping this thread to provide some information about this. I'm not fluent in scripting yet, but this is what I know. Hope this helps. =3

Shouldn't we be able to do this using the "#ATTACKS:;" tag in the ssc files? Those tags act just like how .crs files worked in ITG. the example you provided definitely looks doable in loading it into a core .ssc file. Here, let me show you an example.

http://pastebin.com/jPPbLJV7

https://www.youtube.com/watch?v=fG97uUaM2LM (1:16, is where this string of attacks start.)

This was a sample I made a while back using the attacks tag to see how well they work. The only issue with it right now is, manually inputting them in the ssc file since adding attacks via the editor is broken right now.

This way, is however limited to the mods and the mods only like brake, flip, etc. You would have to use luas and whatnot for the wag effect and stuff like that. Hope this helped somewhat.

Last edited: 10 August 2016 6:53pm

4 panel and 5 panel player simfile artist.
Reply
I'm still trying to learn the old way using .crs files.

#MODS:TIME=0.000:END=1.000=*1 100% Beat;

It kind of works, but it's not really suitable for crazy modifications; like what TaroNuke and WinDEU uses.

(I would also be really nice of somebody posted a tutorial on lua scripting for mods)

Last edited: 5 September 2016 6:38pm

(・-・)
Reply