Join for the best strats! 😅
I don't understand the timing rules. The rules say the timing ends when the final boss is hit with the seed - however, the seeds are not used in the final boss.
Also, the only run currently in Standard Any% stops the timer when the IGT final time screen is shown - not on last hit on the final boss.
The game's graphics files can be modified with a few tools. To extract graphics you can use a tool like XnaConvert, see: https://github.com/Athari/XnaConvert
However, converting images back to XNB files the game understands is a bit more problematic. As far as I know, there isn't readily in circulation any XNB Content Pipeline tool that supports XNA Framework 3.1 (XNB Version 4) anymore (which Defy Gravity uses), and as such, things get a bit hairy.
However, I went and reverse-engineered the format with the help of of some disassemblers, hex editors, spec sheets for XNA Framework 4.0 XNB files (XNB Version 5), a lot of time and dumb luck, and I have whipped up a quick commandline tool to fill that void.
You can grab my ImageToXNB from here: https://github.com/jkarkkainen/ImageToXNB
Please do post your graphics mods if you happen to do any, whether it's awesome or crappy or stupid or funny or anything at all!
The preferred home of the program is now DefyGravityPracticeMod GitHub Repository, so post any issues or feature modification (game bugfixes, new features to practice mod, etc.) there. Download the latest release
This post won't be updated further.
[Section=About] The Practice Mod modifies the game in such a way that practicing speedrunning strats in different levels is easier. Features include single-level practice mode, with or without checkpoints active, as well as a level changer.
Also included is a timing fix for computers affected with the slowdown, and in-fact the timing fix is the recommended way to play for anyone. VSync needs to be on for this fix to work.
In case the smooth timing fix doesn't work for everyone (it should work, but of course things can happen and PC configurations vary), you will see a small red dot in the left corner. It is designed to be very, very unobtrusive, as to not affect gameplay or distract in any way. This dot means you should use the experimental timing fix, which synchronizes frames so that there is always internal 60Hz updates.
The smooth fix is the recommended one (toggled with F1 while on practice mode, and remembered outside of practice mode and saved in config) for a reason: the 60Hz synchronized internal updates introduces a small stutter, that's sometimes luckily unnnoticeable, but sometimes very pronounced.
Synchronize mode (experimental fix) can be enabled with F2 while on practice mode.
You can of course play with the red dot on, but that means the runs aren't eligible for speedrun.com verifications, as there is potential for abuse with it.
The official home of the Defy Gravity Practice Mod is https://github.com/jkarkkainen/DefyGravityPracticeMod
[Section=Updates] [big]Version 8.3[/big] Added texturepack support and autoupdater.
[big]Version 6[/big] Combined timing fix with isFixedTimeStep -fix without needing the synchronizing fix. This results in the best possible timing fix for Defy Gravity - VSync keeps the logic updates to 60Hz with dropping updates or catching up, resulting in the smoothest possible, yet correct experience.
In case it happens that the framerate doesn't stabilize in-game to 60 fps, the mod draws a small, nearly unnoticeable (to be as unobtrusive as possible) red dot in the left corner when not in Practice Mode. In case you keep seeing this red dot, your computer still can't do consistent 60 fps, and you have to forego the smoothness with the syncronized version.
F1 to enable the smooth timing fix F2 to enable syncronized timing fix (in case the fps still doesn't keep up)
[big]Version 5[/big]
- Implemented experimental timing fix. Press F2 to toggle it. Added to saved config.
- Added VSync toggle to F3. Added to saved config.
For best results with the experimental timing fix, activate both the old slowdown fix and the experimental one. Without both of them, you WILL get correct updates, but it will be a bit jerky, as the experimental fix has to play catch-up every now and then.
Vsync toggle is kind of a novelty: sure, you could run the game with 1200 fps, but as the internal logic is updated only 60 fps, and there is no graphics element interpolation between frames, you won't get anything out of it.
[big]Version 4[/big] Added proper identifier by changing the assembly name of the executable. Eases identifying in the autosplitter.
[big]Version 3[/big]
- Changed the hotkey for enabling practice mode back to F10 - I forgot F12 was the default screenshot key in Steam (which is why I've been using F10 for my default hotkey, but completely forgot)
- Included the slowdown fix as a toggleable option so I can just keep modifying one version of the mod. When in practice mode, toggle the slowdown fix with F1. The practice mode doesn't need to be on for it to be active. The setting is also saved and loaded when the game is started.
- Fixed the game bug where the showLevelTime -setting isn't respected or saved at all.
[big]Version 2[/big]
- The IGT level timer is now reset whenever you start the level from beginning when in practice. This means when you die with checkpoints active but haven't activated any yet, or when your checkpoints are disabled and you die.
- Added Tab -button to toggle HARD mode. Eases the navigation of levels a bit.
[Section=Hey There!] I modified the game exe and implemented an individual level practicing functionality.
By pressing F10, you activate Practice Mode. Practice mode means that when you reach the exit, instead of loading the next level, the current level is restarted. You can toggle two practice modes (or practice off) with F10:
- Level Practice with checkpoints When exiting, current level is reloaded. When dying, player is respawned to last checkpoint, as usual.
- Level Practice without checkpoints When exiting OR dying, the current level is reloaded. Checkpoints are skipped.
Pressing PageUp and PageDown loads the previous or next level, respectively. The loaded levels are cycled from Normal 1 to 24 to Hard 1 to 24, both directions.
To prevent subterfuge, when the practice controls are active, the text "Level Practice" and level index and difficulty if hard is shown on the top-left corner.
When inside the practice mode, the following keys are also active: F1 - Disable Fixed Timestep (Old slowdownfix) F2 - Enable Experimental Timing Fix F3 - VSync off
Best results for fixing timing and framerate is to enable both F1 and F2. All the settings are remembered, so to resume normal play with the settings on, just cycle out of practice mode with F10. The settings are also saved and loaded on game start.
Happy practicing, and do tell me if something isn't working right! I'll be happy to fix if any problems arise!
PS. ALL the exes across ALL systems should be now compatible with the autosplitter! Do note that using the autosplitter with practice mode and especially changing levels manually WILL mess up your splits.The reason it's supported is that you can use LiveSplit for timing, undo the splits and then do a proper run with practice mode off, all without closing or restarting any progams.
EDIT: One bug I found out was that if you spam the PageDown (or previous level key) the game will crash. So, easy does, after the level fade-in has started, it's safe to press again.
Also, any suggestions for the mod? I was thinking about resetting the timer on death if practice mode is on and checkpoints are disabled. Anything else? How would you like to see the practice mod work with the autosplitter? For instance, everytime the timer is reset, I could set the autosplitter to duplicate current split and split - that wouid keep a record of the practice run, but it would DEFINITELY mess up your splits.
Throw anything you think about to me, and I'll see if it's feasible and I have the time to do it!
[section=Ideas] Fix level timer not resetting when entering main menu[big][big]DONE[/big][/big] Not a big deal, but it annoys the heck out of me.
Find out how to make the game frame-rate independent[big][big]DONE[/big][/big] Most probably this will be so big an ordeal that I'm not even gonna attempt it. However, I have a few ideas that, if any of them pan out, would actually make the fix quite simple. We'll see.
Fix animations when in slowdownfix -mode[big][big]FIXED IN EXPERIMENTAL[/big][/big] The running animation can be so hectic that it's actually distracting.
Autosplitter coupling[big][big]DONE[/big][/big] Hmm. How about if the autosplitter checks whether we are in practice mode or not, and if we are, restart the timer on dying (if we are in no checkpoint mode) and level exit, but on level exit save the time to a UI control where you show the last level exit time? This wouldn't mess up the splits at all, and you'd get some feedback on how well you did.
Hard mode toggle [big][big]DONE[/big][/big] In addition to cycling the levels through hard mode, add a Key to toggle Hard mode. What would be a good key for it? Tab?
Fix in-game timer [big][big]DONE[/big][/big] Currently the in-game level timer keeps on going when dying. If you are practicing with checkpoints, you might actually want this behaviour, but when you are practicing without checkpoints, you'd most probably want to reset the timer everytime you die.
[Section=Bug Reports] If you have any issues with the mod, you can either comment on this post, or visit the mod's GitHub Issues page
and create a new issue. Feature requests are also welcome.
I took the liberty of extracting the icon from the game to be used as the favicon for the theme of the game page
Now that there is an autosplitter (which unfortunately might or might not work) and the game has in-game level timer, I think gametime should be added to the game configuration, if not the default, then at least as a possibility?
UPDATE2: Autosplitter now disables itself if using practice mod and the practice mode is on. When the practice mode is off, the autosplitter works normally. The splits are also reset if the timer is running and you enter practice mode. This behaviour can be disabled from the settings.
UPDATE: Autosplitter updated, changed the method in-game timer is counted and used from .the leveltimer inside the game. Should be more robust on the autospitters side, but do comment on this thread if everything gets wonky. If you are using the LiveSplit -provided version, the update happens automatically.
Also, added another UI element (that gets automatically created if you enable it in the Autsplitter settings) for Last Level IGT. This is mostly for helping with practice mode, but can be useful for running independent levels in general as well as debugging.
Timer is now reset when game exits.
I'll implement the practice mode disabling and loadless instead of igt soon-ish
EDIT: Autosplitter submitted to LiveSplit autosplitters list. The autosplitter now can be activated from the Edit Splits...->Activate -button, and there is no need to download anything else anymore manually. This has the added benefit of getting updates everytime they happen without needing to download stuff yourself.
NOTE: IF you activate the autosplitter from the Edit Splits...->Activate -button, you NEED to remove the Edit Layout...->Scriptable Autosplitter Component that house the manually downloaded autosplitter. If you don't do this, the autosplitter gets activated twice, and messed up splits ensues.
I've setup an autosplitter for Defy Gravity. You can grab it here:
https://github.com/jkarkkainen/DefyGravityASL
There still seems to be some kinks, so it might happen that the correct values aren't found, in which case the autosplitter either just doesn't do anything or might even go haywire and mess-up your splits. This also why I haven't submitted it yet to be automatically setup with LiveSplit.
However, I have tested it with two different systems locally, so it SHOULD or at least MIGHT work properly. Any help testing it appreciated!
(PS. Those who already tried it out, make sure you have the latest version - I updated the memory pattern, which seems to be much more consistent - at least on the platforms I tried out on)
There are also some example splits files and example layouts.
Usage instructions forthcoming in a day or two. But the gist of it: Add Scriptable Autosplitter -component, browse to the .asl -file, and you should be golden (if it works for you). New game starts the timer, level change splits, loading times are removed, and gametime is straight from the in-game level timer.
EDIT: If you try it out, do come back to me with whether or not it actually worked. Like I said, there are some kinks there (specifically the memory scanner pattern doesn't always hold true, and seems to be different on different systems). Also, if you could, a bit about your system: Windows version, 32/64bit, etc.
I got a bit interested, and tried to find the demo. I couldn't find it anywhere. I couldn't find where to buy the full game either.
Links appreciated, thanks.
EDIT: Found some for the demo. https://www.newgrounds.com/portal/view/631751 http://www.crazygames.com/game/narcissus
Well, this is weird. I changed the favicon for a game I moderate (STATUS: INSANE https://www.speedrun.com/STATUS_INSANE), and it changed it... but not on the pages favicon - it changed only in the gamelist that is shown on profile.
I thought it had something to do with cache issues, so tried to force refresh bypassing cache, to no avail. I then checked the page source, and what did I see? The right, my submitted favicon link commented out, and the default favicon link active just under it.
Did I mess up somewhere? Have I not understood something? Or is it a site bug?
Most of the people are fine playing the demo on the site proper, but someone might find a use for this (as I did). Here is a quick'n'dirty javascript-bookmarklet that opens the Escape Goat Demo url in a 2x scale window of the game. (736x448)
javascript:(function()%7BgoatWindow%20%3D%20window.open(%22http%3A%2F%2Fplayescapegoat.com%2F%22%2C%20%22Escape%20Goat%20Demo%22%2C%20%22toolbar%3Dno%2Cwidth%3D736%2Cheight%3D448%22)%7D)()
Just copy that to newly created bookmarks URL/address bar, and after it you can just click select the bookmark and the demo opens.
When uploading splits to Splits I/O and adding the URL to the run, the splits default to Real Time. How to change it so that it shows up as Game Time in the run page itself?
Is there a checkmark somewhere in the game page that toggles whether the timer is an ingame-timer or real time? I found one toggle, but it just listed two timers, but having to timers (both realtime and gametime) side-by-side makes no sense for this game...
EDIT: Also, I tested it out, but even if I have the run time set as game time, the splits still show only the realtime.
I think there should've been more threads here. What happened to them, or is this something that's wrong on my end?
Here is always the newest version of the needed files
https://github.com/jkarkkainen/StatusInsaneASL
EDIT5: ASL file no longer needed to manually set up - use Edit Splits... and simply activate the autosplitter! Automatically links to the newest version and comes straight from LiveSplit autosplitter database. You need to visit the repository in case you want example splits or layouts.
EDIT4: Modified game .dll no longer needed for Autosplitter - the needed variables are now exposed in the official build. So, only the ASL -file is needed!
EDIT3: Automatic splitter updated now with support for 100% runs. Added also some rationalising on when to actually stop the timer, so from now on it should be safe to wonder around levels and only register timer stop when finishing, or skipping levels (timer-wise that is). Probably not needed, but still, it's there and it makes the whole thing more robust usable. Also, timer is now automatically set to track GameTime so no need to do it manually.
EDIT2: Got permission from the dev to distribute the autosplit compatiibility modded game .dll. Also added usage instructions.
Here is the github-repo for the files. As of now, currently only works with a modified game that exposes the currently loaded level ID.
EDIT: It wouldn't be that complicated to add pause for loading levels (the frame when the next scene is loaded to the frame when the scene actually switches on), so computer loading performance would be nullified completely. Your thoughts on this Serd?
Also, I might be able to squeeze the item collection data to the automatic splitter for 100% runs.
Also, I'll ask the dev if I can distribute the autosplitter enabled game .dll alongside the ASL and LSS files.
I just noticed the category is actually Any% Glitchless instead of Any%. Is this intended, or should be change it to Any%? If not, perhaps we could add an Any% category to the side of the Any% Glitchless....
And also, maybe 100%/100% Glitchless as well.
I have a proposal about changing when to start and stop the timer. The reasons for that will be clear in a while, but first let me define the proposal:
Timer start At first frame Igor's Room has been loaded. The player is able to move at this point.
Timer end The last frame before the first frame of the outro, Grande Finale.
The reason I'm proposing this is because I managed to whip up an automatic splitter based on level change. This would give frame-precise timing, and would also remove the impreciseness of starting as well as the need to check out the first frame that starts fading out for proper time - thus, the recorded time would be easily read from the video. Of course it still needs to be verified, but precision would improve.
The autosplitter isn't 100% finished yet, and it might require patching on Frostbullet's side (however, it's a very simple addition, and shouldn't present much of a pressure work-wise), so we can discuss this in the meantime. I'm sure they'll conform - I can do the work for them if needed :D
If needed and requested, I can provide anyone interested with a modified game .dll that enables automatic splitting, as well as the needed LiveSplit ASL and split-files.