Skip to content

Instantly share code, notes, and snippets.

@DashLt
Last active February 7, 2025 01:34
Show Gist options
  • Save DashLt/dbf445e6f087559681a7073cb958c5b5 to your computer and use it in GitHub Desktop.
Save DashLt/dbf445e6f087559681a7073cb958c5b5 to your computer and use it in GitHub Desktop.
A guide to unlock all songs in vivid/stasis.

vivid/stasis full unlock

Developed for vivid/stasis 4.0.5. Unlocks all songs and all difficulties.

Instructions

  1. Optional: Head to C:\Program Files (x86)\Steam\steamapps\common\vividstasis\ and make a backup of data.win.
  2. Download the GUI-windows-latest-isBundled-false-isSingleFile-true artifact from this pull request to UndertaleModTool. (If this request is merged, simply download the latest version of UndertaleModTool.)
  3. Download gml_GlobalScript_process_song_unlocks.asm, attached to this gist. Save it in an new, empty folder.
  4. Launch UndertaleModTool. Open C:\Program Files (x86)\Steam\steamapps\common\vividstasis\data.win.
  5. At the top of UndertaleModTool, head to Scripts -> Resource Repackers -> ImportASM.csx. Select the folder you saved gml_GlobalScript_process_song_unlocks.asm in.
  6. Save the data.win file, overwriting the existing one.
  7. Launch vivid/stasis and enjoy the full game!
:[0]
b [42]
> gml_Script_process_song_unlocks (locals=7, argc=0)
:[1]
pushglb.v global.song_list
call.i array_length(argc=1)
pop.v.v local.song_count
push.i 272472484
setowner.e
call.i @@NewGMLArray@@(argc=0)
pop.v.v local.unlocks
pushi.e 0
pop.v.i local.i
:[2]
pushloc.v local.i
pushloc.v local.song_count
cmp.v.v LT
bf [41]
:[3]
push.i 272472485
setowner.e
pushi.e 1
conv.b.v
pushi.e 1
conv.b.v
pushi.e 1
conv.b.v
pushi.e 1
conv.b.v
call.i @@NewGMLArray@@(argc=4)
pop.v.v local.su
call.i @@Global@@(argc=0)
pushi.e -9
pushloc.v local.i
conv.v.i
push.v [array]self.song_list
pushi.e -9
push.v [stacktop]self.unlock
pop.v.v local.u
b [40]
:[4]
pushloc.v local.u
pushi.e -9
push.v [stacktop]self.type
dup.v 0
push.l 0
cmp.l.v EQ
bt [9]
:[5]
dup.v 0
push.l 1
cmp.l.v EQ
bt [10]
:[6]
dup.v 0
push.l 2
cmp.l.v EQ
bt [20]
:[7]
dup.v 0
push.l 3
cmp.l.v EQ
bt [23]
:[8]
b [26]
:[9]
push.i 272367610
setowner.e
pushi.e 1
conv.b.v
pushi.e -7
pushi.e 0
pop.v.v [array]self.su
b [26]
:[10]
pushglb.v global.profile_file
call.i ini_open(argc=1)
popz.v
pushi.e 0
conv.i.v
pushloc.v local.u
pushi.e -9
push.v [stacktop]self.key
pushloc.v local.u
pushi.e -9
push.v [stacktop]self.section
call.i ini_read_real(argc=3)
pop.v.v local.u_value
call.i ini_close(argc=0)
popz.v
pushloc.v local.u
pushi.e -9
push.v [stacktop]self.per_difficulty
conv.v.b
bf [17]
:[11]
pushi.e 0
pop.v.i local.d
:[12]
pushloc.v local.d
pushloc.v local.u_value
cmp.v.v LT
bf [14]
:[13]
push.i 272367610
setowner.e
pushi.e 1
conv.b.v
pushi.e -7
pushloc.v local.d
conv.v.i
pop.v.v [array]self.su
push.v local.d
push.e 1
add.i.v
pop.v.v local.d
b [12]
:[14]
call.i @@Global@@(argc=0)
pushi.e -9
pushloc.v local.i
conv.v.i
push.v [array]self.song_list
pushi.e -9
push.v [stacktop]self.has_encore
conv.v.b
not.b
bf [16]
:[15]
push.i 272367610
setowner.e
pushi.e -7
pushi.e 2
push.v [array]self.su
pushi.e -7
pushi.e 3
pop.v.v [array]self.su
:[16]
b [19]
:[17]
pushloc.v local.u_value
pushi.e 0
cmp.i.v GT
bf [19]
:[18]
push.i 272367610
setowner.e
pushi.e 1
conv.b.v
pushi.e -7
pushi.e 0
pop.v.v [array]self.su
:[19]
b [26]
:[20]
call.i @@Global@@(argc=0)
pushi.e -9
pushloc.v local.u
pushi.e -9
push.v [stacktop]self.node_id
conv.v.i
push.v [array]self.unlocked_event_nodes
pop.v.v local.u_value
pushloc.v local.u_value
pushi.e 0
cmp.i.v GT
bf [22]
:[21]
push.i 272367610
setowner.e
pushi.e 1
conv.b.v
pushi.e -7
pushi.e 0
pop.v.v [array]self.su
:[22]
b [26]
:[23]
pushglb.v global.profile_file
call.i ini_open(argc=1)
popz.v
pushi.e 0
conv.i.v
pushloc.v local.u
pushi.e -9
push.v [stacktop]self.map_id
push.s "map{0}progress"@12610
conv.s.v
call.i string(argc=2)
push.s "soundscan"@3465
conv.s.v
call.i ini_read_real(argc=3)
pop.v.v local.u_value
call.i ini_close(argc=0)
popz.v
pushloc.v local.u_value
pushloc.v local.u
pushi.e -9
push.v [stacktop]self.ep_req
cmp.v.v GTE
bf [25]
:[24]
push.i 272367610
setowner.e
pushi.e 1
conv.b.v
pushi.e -7
pushi.e 0
pop.v.v [array]self.su
:[25]
b [26]
:[26]
popz.v
pushloc.v local.u
pushi.e -9
push.v [stacktop]self.type
push.l 1
cmp.l.v NEQ
bt [28]
:[27]
pushloc.v local.u
pushi.e -9
push.v [stacktop]self.per_difficulty
pushi.e 0
cmp.b.v EQ
b [29]
:[28]
push.e 1
:[29]
bf [40]
:[30]
pushi.e 1
pop.v.i local.d
:[31]
pushloc.v local.d
pushi.e 3
cmp.i.v LT
bf [33]
:[32]
push.i 272367610
setowner.e
pushi.e -7
pushi.e 0
push.v [array]self.su
pushi.e -7
pushloc.v local.d
conv.v.i
pop.v.v [array]self.su
push.v local.d
push.e 1
add.i.v
pop.v.v local.d
b [31]
:[33]
push.i 272367610
setowner.e
pushi.e -7
pushi.e 0
push.v [array]self.su
conv.v.b
bf [38]
:[34]
call.i @@Global@@(argc=0)
pushi.e -9
pushloc.v local.i
conv.v.i
push.v [array]self.song_list
pushi.e -9
push.v [stacktop]self.has_encore
conv.v.b
not.b
bt [36]
:[35]
pushglb.v global.highscores
pushi.e -9
pushloc.v local.i
conv.v.i
push.v [arraypushaf]self.normal
pushi.e 2
pushaf.e
pushi.e -9
push.v [stacktop]self.score
push.i 950000
cmp.i.v GTE
b [37]
:[36]
push.e 1
:[37]
b [39]
:[38]
push.e 0
:[39]
conv.b.v
pushi.e -7
pushi.e 3
pop.v.v [array]self.su
:[40]
pushloc.v local.su
pushi.e -7
pushloc.v local.i
conv.v.i
pop.v.v [array]self.unlocks
push.v local.i
push.e 1
add.i.v
pop.v.v local.i
b [2]
:[41]
pushloc.v local.unlocks
pop.v.v global.unlocked_songs
call.i gml_Script_process_soundscan_unlocks(argc=0)
popz.v
exit.i
:[42]
push.i [function]gml_Script_process_song_unlocks
conv.i.v
pushi.e -1
conv.i.v
call.i method(argc=2)
dup.v 0
pushi.e -1
pop.v.v [stacktop]self.process_song_unlocks
popz.v
:[end]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment