Vs Sonic.exe Psych Engine Port May 2026
function onSongStart() triggerEvent('Screen Shake', '0.05,0.1', '0.2,0.1') setProperty('defaultCamZoom', 0.7) end function onBeatHit() if curBeat % 8 == 0 then triggerEvent('Add Camera Zoom', '0.03', '0.03') end end
For , use DialogueBoxPsych . 6. Lua Scripting (Optional but Powerful) Psych Engine allows per-song Lua scripts in data/songs/too-slow/script.lua : vs sonic.exe psych engine port
{ "animations": [ {"name": "idle", "anim": "idle", "fps": 24, "loop": true, "indices": []}, {"name": "singLEFT", "anim": "singLEFT", "fps": 24, "loop": false}, {"name": "singDOWN", "anim": "singDOWN", "fps": 24, "loop": false}, {"name": "singUP", "anim": "singUP", "fps": 24, "loop": false}, {"name": "singRIGHT", "anim": "singRIGHT", "fps": 24, "loop": false} ], "position": [700, 100], "camera_position": [0, 0], "flip_x": false, "healthicon": "sonic_exe_icon", "healthbar_colors": [150, 0, 0] } Repeat for , GF , and Sonic.exe (opponent). 3. Stage Porting Create Stage JSON data/stages/sonic_stage.json : function onSongStart() triggerEvent('Screen Shake', '0
mods/ └── vs_sonic_exe/ ├── data/ │ ├── songs/ │ ├── characters/ │ └── stages/ ├── songs/ ├── images/ ├── sounds/ └── _metadata.xml Step 1 – Convert Sprites Psych Engine uses .xml for sprite sheets (Flash-like). Original mod uses .txt (Sparrow) or .json . Use FNF Sprite Sheet Converter or manually convert. Use FNF Sprite Sheet Converter or manually convert
This recreates EXE’s signature screen shake and zoom effects. Add song to Freeplay Edit mods/vs_sonic_exe/data/freeplaySonglist.json :