MainCfg
GameData = S_SacredAbyss_V1.0_save.dat


Clear Unlockables
Clear Emblems
Clear ExtraEmblems
Clear ConditionSets

Unlockable 1
Name = Emblem Hints
Objective = Load the level
Type = EmblemHints
Height = 20
ConditionSet = 1

Unlockable 2
Name = Play as Fang
Objective = Load the level
Height = 0
ConditionSet = 1
Type = None
NoChecklist = true

Unlockable 3
Name = Play as Metal Sonic
Objective = Load the level
Height = 0
ConditionSet = 1
Type = None
NoChecklist = true

Unlockable 23
Name = Play as Amy
Objective = Make adding emblems way harder than it has to be.
Height = 0
ConditionSet = 1
Type = None
NoChecklist = true

ConditionSet 1
Condition1 = MapVisited 1

Level 1
Levelname = Sacred Abyss
Act = 1
Music = MAP01M
TypeOfLevel = Singleplayer
NextLevel = 2
SkyNum = 302
RecordAttack = true
LevelSelect = 1

Emblem 6
Hint = Wooden arches by a dark lakebed filled with spirits. Machines aren't afraid.
Type = Skin
Tag = 0
MapNum = 1
Sprite = X
Color = SKINCOLOR_BLACK
Var = 5

Emblem 2
Hint = A leap of faith in a hidden path. Glide a second time on butterfly wings.
Type = Skin
Tag = 1
MapNum = 1
Sprite = W
Color = SKINCOLOR_RED
Var = 2

Emblem 3
Hint = Atop a waterfall in a secluded cave. Rest your tails with the butterflies.
Type = Skin
Tag = 2
MapNum = 1
Sprite = V
Color = SKINCOLOR_YELLOW
Var = 1

Emblem 1
Hint = Take the high road over stone arches. Butterflies carry Sonic even higher.
Type = Skin
Tag = 3
MapNum = 1
Sprite = U
Color = SKINCOLOR_BLUE
Var = 0

Emblem 5
Hint = Sniper's secret stash. Find the right rock to drill.
Type = Skin
Tag = 4
MapNum = 1
Sprite = Y
Color = SKINCOLOR_PURPLE
Var = 4

Emblem 4
Hint = A bustable block where Knuckles can't go. A butterfly-spring-trick.
Type = Skin
Tag = 5
MapNum = 1
Sprite = Z
Color = SKINCOLOR_PINK
Var = 3


Freeslot
MT_BUTTERFLYSPRING
MT_BUTTERFLYEFFECT
S_BUTTERFLYSPRINGSTANDBY1
S_BUTTERFLYSPRINGSTANDBY2
S_BUTTERFLYSPRINGSTANDBY3
S_BUTTERFLYSPRINGSPRUNG0
S_BUTTERFLYSPRINGSPRUNG1
S_BUTTERFLYSPRINGSPRUNG2
S_BUTTERFLYSPRINGSPRUNG3
S_BUTTERFLYSPRINGSPRUNG4
S_BUTTERFLYEFFECTINIT
S_BUTTERFLYEFFECT0
S_BUTTERFLYEFFECT1
S_BUTTERFLYEFFECT2
S_BUTTERFLYEFFECT3
S_BUTTERFLYEFFECT4
S_BUTTERFLYEFFECT5
S_BUTTERFLYEFFECT6
S_BUTTERFLYEFFECT7
S_BUTTERFLYEFFECT8
S_BUTTERFLYREMOTE1
S_BUTTERFLYREMOTE2
S_BUTTERFLYREMOTE3
S_BUTTERFLYREMOTE4
S_BUTTERFLYDUAL0
S_BUTTERFLYDUAL1
S_BUTTERFLYDUAL2
S_BUTTERFLYDUAL3
MT_WIPSJAR
MT_WIPSSHOT
MT_WIPSCHARGE
MT_WIPSTRAIL
S_WIPSJARLOOK
S_WIPSJARSTANDBY
S_WIPSJARCHARGE
S_WIPSJARSHOT1
S_WIPSJARSHOT2
S_WIPSSETUP1
S_WIPSSETUP2
S_WIPSSETUP3
S_WIPSSETUP4
S_WIPSSIN1
S_WIPSSIN2
S_WIPSSIN3
S_WIPSSIN4
S_WIPSSIN5
S_WIPSSIN6
S_WIPSSHOT1
S_WIPSSHOT2
S_WIPSCHARGE1
S_WIPSCHARGE2
S_WIPSCHARGE3
S_WIPSTRAIL1
S_WIPSTRAIL2
S_WIPSTRAIL3
SPR_BUTS # lol
SPR_WIPS # Weird Interdimensional Plasma Storage

# Guess who's still using SOC in 2020.

Object MT_BUTTERFLYSPRING
MapThingNum = 2300
SpawnState = S_BUTTERFLYSPRINGSTANDBY1
SpawnHealth = 1
RaiseState = S_BUTTERFLYSPRINGSPRUNG0
Radius = 48*FRACUNIT
Height = 48*FRACUNIT
DispOffset = 0
Mass = 1 # No actual force on the spring, we just want to trigger on collision and change the player state.
Damage = 0 # 
PainChance = 1 # And this means it lets you keep spinning
Flags = MF_SOLID|MF_NOGRAVITY|MF_SPRING

Object MT_BUTTERFLYEFFECT
MapThingNum = -1
SpawnState = S_BUTTERFLYEFFECTINIT
SpawnHealth = 1
Radius = 0
Height = 0
Flags = MF_NOCLIP|MF_NOGRAVITY|MF_RUNSPAWNFUNC


#Floaaty Standby animation
State S_BUTTERFLYSPRINGSTANDBY1
SpriteName = BUTS
SpriteFrame = FF_FULLBRIGHT|A
Duration = 5
Next = S_BUTTERFLYSPRINGSTANDBY2


State S_BUTTERFLYSPRINGSTANDBY2
SpriteName = BUTS
SpriteFrame = FF_FULLBRIGHT|B
Duration = 5
Next = S_BUTTERFLYSPRINGSTANDBY3


State S_BUTTERFLYSPRINGSTANDBY3
SpriteName = BUTS
SpriteFrame = FF_FULLBRIGHT|C
Duration = 5
Next = S_BUTTERFLYSPRINGSTANDBY1

#Once sprung, become springn't for a few seconds to avoid chainspringing.
State S_BUTTERFLYSPRINGSPRUNG0
SpriteName = NULL
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|B
Action = A_SetObjectFlags
Var1 = MF_NOCLIP|MF_NOGRAVITY
Var2 = 0
Duration = 0
Next = S_BUTTERFLYSPRINGSPRUNG1

State S_BUTTERFLYSPRINGSPRUNG1
SpriteName = NULL
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|B
Action = A_RemoteAction
Var1 = MT_BUTTERFLYEFFECT
Var2 = S_BUTTERFLYREMOTE4
Duration = 0
Next = S_BUTTERFLYSPRINGSPRUNG2

State S_BUTTERFLYSPRINGSPRUNG2
SpriteName = NULL
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|B
Action = A_PlaySound
Var1 = SFX_SPIN
Var2 = 1
Duration = 0
Next = S_BUTTERFLYSPRINGSPRUNG3


State S_BUTTERFLYSPRINGSPRUNG3
SpriteName = NULL
Action = A_SpawnObjectRelative
Var1 = 0
Var2 = MT_BUTTERFLYEFFECT
Duration = 120
Next = S_BUTTERFLYSPRINGSPRUNG4

#Okay that's long enough you can respring.
State S_BUTTERFLYSPRINGSPRUNG4
SpriteName = NULL
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|B
Action = A_SetObjectFlags
Var1 = MF_SOLID|MF_NOGRAVITY|MF_SPRING
Var2 = 0
Duration = 1
Next = S_BUTTERFLYSPRINGSTANDBY1


State S_BUTTERFLYEFFECTINIT
SpriteName = NULL
SpriteFrame = FF_FULLBRIGHT|A
Action = A_RemoteAction
Var1 = MT_PLAYER
Var2 = S_BUTTERFLYREMOTE2
Duration = 1
Next = S_BUTTERFLYEFFECT0

State S_BUTTERFLYEFFECT0
SpriteName = NULL
SpriteFrame = FF_FULLBRIGHT|A
Action = A_RemoteAction
Var1 = MT_PLAYER
Var2 = S_BUTTERFLYREMOTE3
Duration = 0
Next = S_BUTTERFLYEFFECT1

State S_BUTTERFLYEFFECT1
SpriteName = NULL
SpriteFrame = FF_FULLBRIGHT|A
Action = A_FindTarget
Var1 = MT_PLAYER
Var2 = 0
Duration = 1
Next = S_BUTTERFLYEFFECT2

State S_BUTTERFLYEFFECT2
SpriteName = NULL
SpriteFrame = FF_FULLBRIGHT|A
Action = A_Repeat
Var1 = 10
Var2 = S_BUTTERFLYEFFECT3
Duration = 0
Next = S_NULL

State S_BUTTERFLYEFFECT3
SpriteName = BUTS
SpriteFrame = FF_FULLBRIGHT|A
Action = A_DualAction
Var1 = S_BUTTERFLYDUAL0
Var2 = S_BUTTERFLYDUAL1
Duration = 1
Next = S_BUTTERFLYEFFECT4


State S_BUTTERFLYEFFECT4
SpriteName = BUTS
SpriteFrame = FF_FULLBRIGHT|A
Action = A_DualAction
Var1 = S_BUTTERFLYDUAL0
Var2 = S_BUTTERFLYDUAL1
Duration = 1
Next = S_BUTTERFLYEFFECT5


State S_BUTTERFLYEFFECT5
SpriteName = BUTS
SpriteFrame = FF_FULLBRIGHT|B
Action = A_DualAction
Var1 = S_BUTTERFLYDUAL0
Var2 = S_BUTTERFLYDUAL1
Duration = 1
Next = S_BUTTERFLYEFFECT6

State S_BUTTERFLYEFFECT6
SpriteName = BUTS
SpriteFrame = FF_FULLBRIGHT|B
Action = A_DualAction
Var1 = S_BUTTERFLYDUAL0
Var2 = S_BUTTERFLYDUAL1
Duration = 1
Next = S_BUTTERFLYEFFECT7


State S_BUTTERFLYEFFECT7
SpriteName = BUTS
SpriteFrame = FF_FULLBRIGHT|C
Action = A_DualAction
Var1 = S_BUTTERFLYDUAL0
Var2 = S_BUTTERFLYDUAL1
Duration = 1
Next = S_BUTTERFLYEFFECT8


State S_BUTTERFLYEFFECT8
SpriteName = BUTS
SpriteFrame = FF_FULLBRIGHT|C
Action = A_DualAction
Var1 = S_BUTTERFLYDUAL0
Var2 = S_BUTTERFLYDUAL1
Duration = 1
Next = S_BUTTERFLYEFFECT2







State S_BUTTERFLYDUAL0
Action = A_RemoteAction
Var1 = MT_PLAYER
Var2 = S_BUTTERFLYREMOTE1

State S_BUTTERFLYDUAL1
Action = A_CapeChase
Var1 = (-12<<16)
Var2 = (-2<<16)

State S_BUTTERFLYDUAL2
Action = A_FindTarget
Var1 = MT_BUTTERFLYSPRING
Var2 = 0

State S_BUTTERFLYDUAL3
Action = A_CapeChase
Var1 = 0
Var2 = 0

State S_BUTTERFLYREMOTE1
Action = A_ZThrust
Var1 = 0
Var2 = 65536

State S_BUTTERFLYREMOTE2
Action = A_ZThrust
Var1 = -480*FRACUNIT
Var2 = 1

State S_BUTTERFLYREMOTE3
Action = A_DualAction
Var1 = S_BUTTERFLYDUAL2
Var2 = S_BUTTERFLYDUAL3


State S_BUTTERFLYREMOTE4
Action = A_RandomState
Var1 = S_NULL
Var2 = S_NULL


Object MT_WIPSJAR
MapThingNum = 2301
SpawnState = S_WIPSJARLOOK
SeeState = S_WIPSJARCHARGE
SpawnHealth = 1
PainState = S_XPLD1
DeathSound = sfx_pop
DeathState = S_XPLD1
Radius = 16*FRACUNIT
Height = 16*FRACUNIT
DispOffset = 0
Mass = 1 #
Damage = 0 # 
PainChance = 1 # 
Flags = MF_ENEMY|MF_SPECIAL|MF_NOGRAVITY|MF_SHOOTABLE

State S_WIPSJARLOOK
SpriteName = WIPS
SpriteFrame = D
Action = A_Look
Var1 = 1
Duration = 1
Next = S_WIPSJARLOOK


State S_WIPSJARCHARGE
SpriteName = WIPS
SpriteFrame = FF_ANIMATE|E
Action = None
Var1 = 1
Var2 = 1
Duration = 28
Next = S_WIPSJARSHOT1


State S_WIPSJARSHOT1
SpriteName = WIPS
SpriteFrame = G
Action = A_FireShot
Var1 = MT_WIPSSHOT
Var2 = 0
Duration = 10
Next = S_WIPSJARSHOT2

State S_WIPSJARSHOT2
SpriteName = WIPS
SpriteFrame = H
Action = NonH
Duration = 10
Next = S_WIPSJARSTANDBY


State S_WIPSJARSTANDBY
SpriteName = WIPS
SpriteFrame = D
Action = None
Duration = 100
Next = S_WIPSJARLOOK

OBJECT MT_WIPSSHOT
SpawnState = S_WIPSSETUP1
SeeSound = sfx_s3k43
SpawnHealth = 1
DeathState = S_WIPSSHOT1
Radius = 16*FRACUNIT
Height = 16*FRACUNIT
DispOffset = 0
DispOffset = 0
Speed = 10
Mass = 1 #
Damage = 0 # 
PainChance = 1 # 
Flags = MF_NOGRAVITY|MF_MISSILE|MF_PAIN

State S_WIPSSETUP1
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|A
Duration = 1
Action = None
Next = S_WIPSSETUP2


State S_WIPSSETUP2
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|A
Duration = 1
Action = A_ZThrust
Var1 = 3
Var2 = 65537
Next = S_WIPSSETUP3

State S_WIPSSETUP3
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|A
Duration = 1
Action = A_ChangeAngleRelative
Var1 = 90
Var2 = 90
Next = S_WIPSSETUP4

State S_WIPSSETUP4
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|A
Duration = 1
Action = A_Thrust
Var1 = -10
Var2 = 0
Next = S_WIPSSIN1


State S_WIPSSIN1
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|A
Duration = 1
Action = A_Thrust
Var1 = 1
Var2 = 0
Next = S_WIPSSIN2


State S_WIPSSIN2
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|A
Duration = 1
Action = A_SpawnObjectRelative
Var1 = 0
Var2 = MT_WIPSTRAIL
Next = S_WIPSSIN3


State S_WIPSSIN3
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|A
Duration = 0
Action = A_Repeat
Var1 = 20
Var2 = S_WIPSSIN1
Next = S_WIPSSIN4


State S_WIPSSIN4
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|A
Duration = 0
Action = A_ChangeAngleRelative
Var1 = 180
Var2 = 180
Next = S_WIPSSIN5

State S_WIPSSIN5
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|A
Duration = 0
Action = A_SetCustomValue
Var1 = 1
Var2 = 2
Next = S_WIPSSIN6

State S_WIPSSIN6
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|A
Duration = 0
Action = A_CheckCustomValue
Var1 = 4
Var2 = S_WIPSSHOT1
Next = S_WIPSSIN1




State S_WIPSSHOT1
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|A
Duration = 1
Action = A_FindTarget
Var1 = MT_PLAYER
Var2 = 0
Next = S_WIPSSHOT2

State S_WIPSSHOT2
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|A
Duration = 1
Action = A_FireShot
Var1 = MT_WIPSCHARGE
Var2 = -32
Next = S_NULL


OBJECT MT_WIPSTRAIL
SpawnState = S_WIPSTRAIL1
SpawnHealth = 1
DeathState = S_NULL
Radius = 16*FRACUNIT
Height = 16*FRACUNIT
DispOffset = 0
DispOffset = 0
Speed = 0
Mass = 1 #
Damage = 0 # 
PainChance = 1 # 
Flags = MF_NOGRAVITY|MF_PAIN

State S_WIPSTRAIL1
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS50|A
Duration = 10
Next = S_WIPSTRAIL2

State S_WIPSTRAIL2
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS60|B
Duration = 10
Next = S_WIPSTRAIL3

State S_WIPSTRAIL3
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS70|C
Duration = 10
Next = S_NULL

OBJECT MT_WIPSCHARGE
SpawnState = S_WIPSCHARGE1
SpawnHealth = 1
SeeSound = sfx_doorc1
DeathState = S_NULL
DeathSound = sfx_s3k43
Radius = 16*FRACUNIT
Height = 16*FRACUNIT
DispOffset = 0
DispOffset = 0
Speed = 0
Mass = 1 #
Damage = 0 # 
PainChance = 1 # 
Flags = MF_NOGRAVITY|MF_PAIN|MF_MISSILE

State S_WIPSCHARGE1
SpriteName = WIPS
SpriteFrame = FF_FULLBRIGHT|TR_TRANS40|A
Duration = 1
Action = A_SpawnObjectRelative
Var1 = 0
Var2 = MT_WIPSTRAIL
Next = S_WIPSCHARGE1

