Character/Stage .DEF. This is imperative —
[Info]
name =
displayname =
versiondate =
mugenversion = 1.0
author =
pal.defaults =
Spoiler: Converting to SFFv2 (click to see content)
Converting to SFFv2 is simple to do with FF3. With that all you really need to do is import all ACT's to the SFF then save as 1.0.
It's best to keep all shared palettes ( the ones you see in play, not portraits and others ) in group 1.
[Palette Keymap]
a=1
b=2
c=3
x=4
y=5
z=6
;;Hold S —
a2=7
b2=8
c2=9
x2=10
y2=11
z2=12
Palette area of .DEF's that use SFFv1 need to be replaced with this. Though you can choose between a limitless amount of palettes, there are still only 12 PalNo's ( ReMapPal does nothing to PalNo's ) so the best default idea ( unless you create a picker ) is to set ReMapPal dest index to PalNo.
[State ]
type=remappal
trigger1=stateno=5900
source=1,1 ;; Group,Index
dest=1,palno ;; Group,Index
A Picker where you pick your palette on round one only is basically what you will see below. Setting up an interface with numbers involves a lot of math ( how your numbers are positioned in the SFF / Positioning them on both P1 and P2 sides ) so it would basically vary for everyone so I'm not gonna cover that.
[Statedef -1]
[State ]
type=ctrlset
trigger1=ishelper ;; keyctrl=1 for helpers enables access to this statedef. With it one of the benefits is you can re map all palettes with one controller
value=0
[State ]
type=helper
trigger1=!numhelper(256)
trigger1=roundno=1&&stateno=5900
id=256
stateno=256
[State ]
type=remappal
trigger1=numhelper(256)
source=1,1
dest=1,helper(256),var(0)
[Statedef 256]
[State ]
type=assertspecial
trigger1=ishelper(256)
flag=intro
[State ]
type=varset
triggerall=ishelper(256)
trigger1=!time ;; Map on Initiation to PalNo
var(0)=root,palno
[State ]
type=varset
triggerall=ishelper(256)
trigger1=var(0)<1||var(0)>180 ;; Total Number of Palettes should be this number.
var(0)=1+(var(0)<1)*179
[State ]
type=varadd
triggerall=ishelper(256)
trigger1=!var(10)
trigger1=root,command="holdup"||root,command="holddown"||root,command="holdback"||root,command="holdfwd"
var(0)=1-(root,command="holddown"||root,command="holdback"&&facing=1||root,command="holdfwd"&&facing=-1)*2
[State ]
type=varadd
triggerall=ishelper(256)
trigger1=(root,command="holdup"||root,command="holddown"||root,command="holdback"||root,command="holdfwd")&&!var(10)||var(10)
var(10)=1
[State ]
type=varset
triggerall=ishelper(256)
trigger1=!time||var(10)>=17 ;; A delay for the hold button commands because cycling will be way too fast without it.
var(10)=0
[State ]
type=destroyself
triggerall=ishelper(256)
trigger1=root,command="A"||root,command="B"||root,command="C"||root,command="X"||root,command="Y"||root,command="Z"||root,command="S"||roundstate=2
Spoiler: The simplest way of converting to AILevel is also the most flexible (click to see content)
[State WinMugen AI Impossible Commands]
type=varset
trigger1=command="CPU1"||command="CPU2"
var(59)=1 ;; if you're still supporting WinMugen and you do scaling with 3 different levels it's best to set [1,2] as easy [3,5] as normal and [6,8] as hard. when you convert this to 1.0 you'd just look at the word in options menu for the difficulty instead of the number ( this actually does something now btw ).
[State Converted to 1.0 AILevel ( AI Off )]
type=varset
trigger1=!ailevel
var(59)=0 ;; AI is off. Another plus about 1.0 is you can re-gain control of the AI the second you press Ctrl+1
[State Converted to 1.0 AILevel ( AI On )]
type=varset
trigger1=ailevel
var(59)=ailevel ;; like any real fighting game the difficulty will be determined by what you set it to in options. this is only good for scaled AI. if you only do one level just set it to 1.
Survival Mode doesn't use the options setting. In Mugen.CFG there's an area that says ""AI Ramping"". Configure how it works in Survival there. By default it starts at Level 1 Easy and increases 1 Level for every 2 Rounds you win.
By keeping your variable you can override it entirely.
Spoiler: Everything you need to know about VictoryQuotes (click to see content)
Quotes is a constant like [Data] [Size] [Velocity] [Movement]
Format is
[ Quote ]
victory0="quote goes here"
and the ranging is 0-99 not 1-100.
It's important you put them in order because it makes character specifics easier, and it's best to put those at the beginning or the end.
EG: 0-4 are VS Ryu
[State ]
type=victoryquote
trigger1=p2name="Ryu"
value=0+(random%5)
Non character specifics would go underneath all of the character specifics with ""1"" as the trigger. This is so you don't have to list every single name that is character specific but to not trigger against them.
[State ]
type=victoryquote
trigger1=1
value=5+(random%95)
If the condition of the first controllers trigger is true ( enemy is ryu ) that one is read first and it's the only one that triggers. if it's false it moves on and triggers what's after it. Meaning p2name!="every character specific" is redundant.
These controllers can either go in the win state ( 180 ) or -1 -2 -3.
Victory portrait is 9000,2.
WinMugen characters can have quotes. They just can't be manipulated with this controller.
Spoiler: Converting to VolumeScale (click to see content)
volume = -255 -128 0 128 255
volumescale = 0 25 50 75 100
This is what I use because logically it's equivalent to each other.
Personally I don't use values outside of these because it's easy to convert and they're effective to my desires.
Batch replace each value. That's it.