1 2
5 6
Post subject: Sonic TAS tools (was: Lua HUD for Sonic games)
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
[edit] Table of contents
  1. TAS Map Pack
  2. Gens rerecording with Camera Hack/solidity display
  3. Lua TAS HUD

1. TAS Map Pack For the meaning of the solidity overlays, see the section on the camera hack versions of Gens, below.
2. Gens rerecording with Camera Hack/solidity display Here are versions of Gens compiled with Upthorn's and Nitsuja's camera hack, solidity display and hitbox display. It is only safe to use them for the corresponding games (and some limited hacks of each). There are some modifications of mine which hopefully will eventually be merged into SVN; they improve the hitbox display for the main character (including insta-shield support for Sonic), adds support for the 2P Tails and makes use of the collision response list in Sonic 3/Sonic & Knuckles/Sonic 3 & Knuckles. With 'num lock' on, the base address of objects is shown, as well as the angle on the ground. To use the base address, prepend "FF" to the value shown and you have its base RAM address. With 'scroll lock' on, camera hack is disabled; otherwise, you can scroll through objects with 'page up'/'page down' or return to Sonic with 'home'. If the selected object is offscreen, the emulator will display centered on the selected object. While rings and sprites show, only rings on the same vertical slice as Sonic (give or take) can be taken, and Tails (or Sonic) will generally not interact with sprites that are offscreen. Solidity is displayed as color overlays: green overlay means only the top is solid (ground); red overlay means all but top solid (wall/ceiling); blue overlay means all solid (ground/wall/ceiling); no overlay means not solid. Sonic and Tails have two hitboxes: the inner (pink) one is for interaction with things that can hurt Sonic (or which Sonic can collect), the outer (white) one is for solid objects, platforms and terrain. Sprites with red hitboxes always hurt; sprites with green hitboxes have special collision, with no main pattern; purple hitboxes are badniks/bosses; cyan are generally monitors and scattering/attracted rings. In Sonic 3, Sonic & Knuckles and Sonic 3 & Knuckles, a white hitbox in a sprite with normally another color means this sprite is currently not interacting with the player. For the player characters, blue boxes with 'plus' signs on them are drawn. These are the anchor points for sensor rays that detect terrain collision; to make things simple, assume only these points can collide with terrain. The anchor points along the top and bottom edges check, respectively, for ceilings and floors; those on the left and right edges check only for walls. A white plus sign allows zipping when embedded into terrain, the black ones do not.
3. Lua TAS HUD This script is now hosted on GitHub You can download the latest version of the Lua HUD (released Mar 12, 2015) here. To use it, extract the contents of the file anywhere and select 'sonic-hud.lua' from Gens. Compatibility list: What the script does:
  • Expanded game HUD showing score, rings, level time (including frames), number of emeralds collected (chaos, super or time emeralds) and whether a time warp is possible (and which kind).
  • Character HUDs for both players, showing position (down to subpixel level), speed and slope angle. For player 1, the current shield, the number of lives and of continues are also shown; for player 2, there is an indicator of whether Tails is being controlled by the CPU or by a (presumably human) player. Both players also feature a jump predictor whenever you are not in read-only playback of a movie; the jump predictor shows what will be your speed if you hold the 'C' button for the next two frames (for optimal benefit, avoid using that button); for S2 and SCD, this speed is calculated as it will be without holding the forward direction, due to the air speed cap in those games. Also, lines show the level edges so that you know where you will be stopped.
  • Boss HUDs, showing number of hits, a timer showing remaining invulnerability time (in frames) and position (pixel level). S2 Boom and SCD do not feature boss HUDs, but all other games in the compatibility list do.
  • Dynamic status HUDs, showing several (most? all?) relevant timers (see below for a list), as well as the current charge in a spindash or peelout.
  • The ability to disable the original game HUDs. The current method is very robust and fast, but could potentially cause desynchs; for this reason, it is disabled by default, and it is not recommended to be used while recording movies.
  • The ability to skip "boring stuff". This is disabled by default. You can optionally toggle skipping of score tallies in all supported games (it is on by default, but does nothing unless you enable the skipping of generic "boring" stuff).
  • The ability to disable Hyper Sonic's hyperflash. This includes a graphical glitch fix. As far as I can tell, the method used causes no desynchs, so it is on by default.
  • The ability to disable the extremely annoying S3, SK and S3K super/hyper music. This is disabled by default.
  • The ability to disable all of these Lua HUDs with a simple variable. Combined with the disabling of the original HUDs, this can make for a very clean screen. For obvious reasons, this is off by default.
  • A configuration menu with persistent settings, allowing you to easily toggle all the available options.
All HUDs are semi-transparent so that they do not get too much in the way. They are positioned assuming that the input display, frame counter and lag frames are shown in the upper right corner. The timers (all in frames) currently watched by this script are: post-hit invulnerability timer (for both players); drowning timer (for both players); insta-shield (Sonic, S3/SK/S3&K); flight timer and flight boost timer (Tails, except S2); speed shoes timer; invincibility timer; super/hyper form timer; frames until time warp (SCD); horizontal scroll delay for main character (S2, S3, S&K and hacks, and select S1 hacks); for 2p Tails, respawn and despawn timers and frames until CPU takes over. The boss post-hit invulnerability timers are also watched and displayed, but they are displayed in the boss' respective HUDs. Also, slope horizontal move lock timers for both players are also watched and displayed in the respective character HUD. Changelog: Mar 12/2015:
  • Some improvements for SCD.
Jan 08/2014:
  • Fixed Sonic CD issues from previous build.
Jan 08/2014:
  • Replaced score display by camera position display.
  • Added a level bounds display which shows where the player is stopped. Yellow is for player 1, magenta for player 2; magenta is drawn after, so if only magenta is being shown, then both are being coincident. These displays are keyed by the character's HUDs, and will only display if those are also being displayed. The computations in the games for level bounds use the player's centerpoint; the HUD uses their hitbox instead. This means that the boundary will shift when the character's size changes.
  • Found and added horizontal scroll delay for s1tails and for s1knux.
  • Fixed boss code tables for S&K and S3&Amy
  • Build scripts now skips missing ROMs and warns about it.
Jun 28/2013:
  • Fixed horizontal scroll delay for non-S3/S&K/S3&K.
  • Better object-oriented model including: class/extends syntax to declare a class/declare that it is derived from another class; automatically created <classname>.new method that allocates a new instance and calls the constructor you define (<classname>:constructor); Java-like super method to call the next constructor up on the class hierarchy; widget abstract class will throw an informative error if used.
  • Error handling code to check that (1) UI widgets only accept widgets as children and that (2) functions are supplied for callbacks.
  • ROM checker no longer caches the return value of s1tails_check -- it is only ever called once per ROM anyway.
  • Fixed two of Hyper Sonic's icons.
  • Icons are dynamically loaded as needed, instead of all at once at startup.
Sep 5/2012:
  • Added horizontal scroll delay support for S2, S3, S&K, and their supported hacks.
  • Fixed bugs 'Sonic 3 & Amy' hack.
Aug 25 2012:
  • Sonic 3 & Amy Rose support;
  • Updated Charmy in Sonic 1 support to v1.1;
  • Perfect rings counter in S2;
Apr 15 2012:
  • Updated support to Amy in Sonic 2 hack to version 1.5.
Oct 11/2010:
  • Fixes error in plain Sonic 3 with the boss tables introduced in previous version.
  • Updated to Amy in Sonic 2 v1.2.
  • Tracking Tails despawn timer as well.
  • Improved Tails flight icon again.
  • Now also watching slope horizontal move lock timers.
  • Super Amy support for Amy in Sonic 2.
Sep 27/2010:
  • Revamped the ROM detection and feature set code.
  • Added several hacks to the compatibility list.
Jan 22 2012:
  • Updated support to Amy in Sonic 2 hack to version 1.5.
Apr 15/2011: Oct 11/2010:
  • Fixes error in plain Sonic 3 with the boss tables introduced in previous version.
  • Updated to Amy in Sonic 2 v1.2.
  • Tracking Tails despawn timer as well.
  • Improved Tails flight icon again.
  • Now also watching slope horizontal move lock timers.
  • Super Amy support for Amy in Sonic 2.
Sep 27/2010:
  • Revamped the ROM detection and feature set code.
  • Added several hacks to the compatibility list.
Oct 2/2010:
  • Added instashield timer.
  • Improved Tails' flight icon.
  • Fixed Marble Garden 1 mini-boss HUD.
  • Compatibility update for latest version of Amy Rose in Sonic 1.
  • When disabling or enabling the original HUD in Sonic 1 and Sonic 1-based hacks through the configuration menu, you no longer have to wait for the next act for it to be restored.
Sep 27/2010:
  • Revamped the ROM detection and feature set code.
  • Added several hacks to the compatibility list.
Sep 3/2010:
  • Fixed support for S&K and plain S3.
  • Fixed jump predictor for S2K.
  • Added Upthorn's code to disable super/hyper music in S3, S&K and S3&K.
  • Reorganized code into multiple source files, all of which include the files it needs. All the scripts directly in the "sonic" subdirectory are standalone scripts included by the main HUD script and conditionally toggled on or off.
  • Added configuration menu and persistent settings.
  • Fixed behavior of script when it was started and when loading a saved state.
  • Score tallies for all supported games can now be skipped.
Aug 9/2010: Knuckles in Sonic 2 also features boss hit counts/timers now. Aug 8/2010:
  • A slight redesign, replacing the boxes with the minus/plus signs by a larger (but thinner) bar glued to the screen edge. This is to make it easier to bring back a disabled box (by Fitts' law).
  • Hit counters and invulnerability timers for all bosses in S1 (including hacks), S2 (not including S2Boom), S3K (but not plain S3). Neither is available for SCD.
  • Tails flight boost timer. This factors in the vertical limit and limiting upward speed, as well as the actual timer.
  • Raiscan's code to skip S3K score tally, slightly modified.

The rest of the original post now follows.[end edit] I am not entirely sure where this topic should go, but given the Rewind Lua script (and other fun scripts), I think this is a safe bet; if this is not the correct location, I ask an admin to move it to the correct location. I have been working on improving the Lua HUD I developed for TASing S3&K; in its current revision (available at the end of the post), it also tracks seconds before drowning and the times before Tails respawns or is taken over by the CPU. Not only that, but it also works now on all Genesis 16-bit Sonic games (Sonic 1, Sonic 2, Sonic 3, Sonic & Knuckles, Sonic 2 & Knuckles, Sonic 3 & Knuckles), as well as 2 hacks (Knuckles in Sonic 1 and Tails in Sonic 1). It probably works for other S1/S2/S3 hacks, but these are the ones I tested with. There are a few things I would like to do, but haven't been able to; I am hoping someone has the knowledge for it. First, I'd like to extend the script for Sonic CD also; however, there is very scarce information about this game anywhere. There are a few memory offsets in the Gens source, which help; but about the best I have found elsewhere is this; neither include some information I would like were I to include SCD support, such as how SCD spindash and peel out work, as well as time warps (how long until a warp, where the time direction is stored). Other timers (drowning, speed shoes, invincibility) are easy, so I am not worried about them; but determining the game 'mode' is something I would like, if anyone knows how to do it (i.e., knowing when to show the Lua HUD, as is done for all supported games). Something else I have been unable to do is hide the original game HUD. I actually found a hackish way to do it in S1 (and the hacks), but not for the other games: ensuring that the byte at address 0xffd040 (the second object in the list) is always zero prevents the HUD from showing (this is not in the file linked above). Does anyone know if there is a similar procedure for S2/S3/S3&K? I am hoping that something similar will work for them, and for SCD (but I haven't tried yet for SCD); but except for SCD, it won't be the second object as that is Tails (and it isn't any object I tried thus far with S2). Anyway, that is what I can remember at this time.
Marzo Junior
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
After some digging around, I managed to figure out the remaining addresses for Sonic CD, so it works completely now; the OP has been updated to point to the new scripts. I figured out ways to disable the HUD in Sonic CD, as well as Sonic 1 (and hacks); however, when I tested, they caused desynchs in the published movies. So unless someone knows how to do it without causing desynchs, I guess I'll leave it as is.
Marzo Junior
Emulator Coder, Skilled player (1310)
Joined: 12/21/2004
Posts: 2687
Hiding the game's HUD without causing desyncs is definitely possible in Gens. Here's a demonstration script that deletes the whole player object in S3&K without causing desyncs (Sonic is invisible but you can play normally or watch movies):
local function dostuff()

	-- you can write whatever you want here to cause visible effects.
	-- trash all the RAM if you want, it won't cause desyncs.

	-- in this demonstration, I'll delete the player object to make Sonic invisible:
	memory.writelong(0xffb000,0)

end

local tempstate = savestate.create()
local incallback
gens.registerbefore(function()
	-- display a "fake" frame
	if incallback then return end
	incallback = true
	savestate.save(tempstate)
	dostuff()
	-- run for 2 frames because that's the display latency of this game
	local frames,attempts = 2,0
	while frames > 0 and attempts < 8 do
		gens.emulateframeinvisible()
		if gens.lagged() then
			attempts = attempts + 1 -- run an extra frame for each lag frame
		else
			frames = frames - 1
		end
	end
	incallback = false
end)
gens.registerafter(function()
	-- advance to the next real frame without drawing it
	if incallback then return end
	incallback = true
	savestate.load(tempstate)
	gens.emulateframeinvisible()
	incallback = false
end)
gens.registerexit(function()
	-- restore the state if we abort while things are messed up
	if incallback then savestate.load(tempstate) end
end)
I'm pretty sure that can be modified to hide the HUD instead of the player and to work in Sonic CD instead of S3&K.
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
That is an interesting solution: you are correct, it does make it possible to hide the original HUDs in S1 and SCD without desynching, yes. It will take some thought to integrate it with the jump predictor in a way that does not slow the emulation to a crawl, though, as well as the new HUD drawing.
Marzo Junior
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
I uploaded a new version of the script, fixing a bug with solo Tails in Sonic 2. I also redesigned everything, making the script object-oriented for several design benefits. Hiding the game HUD for S1 and SCD using Nitsuja's code is straightforward, but I haven't included it in the script above -- it causes a slight visual discrepancy which is annoying for TASing, forcing you to constantly rely on the jump predictor.
Marzo Junior
Emulator Coder, Skilled player (1310)
Joined: 12/21/2004
Posts: 2687
Which visual discrepancy is that? If you mean that the display no longer lags 2 frames behind, that's actually a benefit for TASing (and normal playing for that matter). There's actually an option in the graphics menu to get that same effect without needing a Lua script. But I haven't tried this script with everything else here (especially the jump predictor), so there's probably some other related weirdness I don't know about.
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
Hm. I guess I found the lack of latency odd. Anyway, here is the raw script integrating the HUD disabling code for S1 (and variants) and SCD with the Lua HUD and jump predictor. Both the original HUD disabling code and the jump predictor can be independently toggled with global variables at lines 131-132. Since there are multiple frame advances per frame, emulation can be quite slow with everything on. By the way: it seems that combining multiple scripts that do save states/frame advances/state loads lead to odd behavior. For example, using the script you posted above in conjunction with the jump predictor from the Lua HUD causes Sonic to jump around like a madman. I am guessing that this is because even gens.emulateframeinvisible calls registered Lua functions, which causes corruption of the intermediary saved states used by the scripts. I guess that the only way to solve this would be to allow a script to temporarily disable other Lua callbacks. Done correctly, this could even replace the use of 'incallback' variables by a more robust mechanism.
Marzo Junior
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
New version of the script, fixing bug introduced recently on continues display; also, finished object-oriented design for interface by introducing clickable widgets. The combine script that removes the original S1/SCD huds is here (script only).
Marzo Junior
Player (37)
Joined: 9/9/2006
Posts: 388
Shame theres no progress on the Sonic 2/3/3&K HUD removal.
A whisper in the wind~~
HHS
Active player (286)
Joined: 10/8/2006
Posts: 356
In Sonic & Knuckles, you can write 0x4E75 to 0xDB44 to remove the HUD. In Sonic 2 rev. 1, write 0x4E75 to 0x40D8A.
Player (37)
Joined: 9/9/2006
Posts: 388
HHS wrote:
In Sonic & Knuckles, you can write 0x4E75 to 0xDB44 to remove the HUD. In Sonic 2 rev. 1, write 0x4E75 to 0x40D8A.
You sure about this? I took the demoscript posted by nitsuja and made the appropriate change and I couldn't get the HUD to go with Sonic2 (W) [!]. ( http://gens-lua.pastebin.com/m6640e57 ) Nor with S&K (W) [!] ( http://gens-lua.pastebin.com/m24cf1a6e )
A whisper in the wind~~
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
HHS wrote:
In Sonic & Knuckles, you can write 0x4E75 to 0xDB44 to remove the HUD. In Sonic 2 rev. 1, write 0x4E75 to 0x40D8A.
This causes desynchs; I had already tried something similar for S2 (today, about an hour or so ago, using Game Genie codes) having discovered it through S2 disassemblies. In any event, a Lua script can't write to ROM addresses, only to RAM, so this is out of the question anyway.
DDRKhat wrote:
You sure about this? I took the demoscript posted by nitsuja and made the appropriate change and I couldn't get the HUD to go with[snip]
HHS was talking about modifying the rom itself; Lua can't do that. Nor do you have to: I have just finished modifying the script so that it also works with S2 (it is here, script only). I am still looking for what I need to do in SK/S3&K (and plain S3 will be though as there are no disassemblies for it anywhere), so it won't work there if you try it.
Marzo Junior
HHS
Active player (286)
Joined: 10/8/2006
Posts: 356
Oh, it seems that the memory functions can't write to the ROM. In that case, try memory.writebyte(0xfffff711,128) for S&K. This moves the HUD off the screen. It probably works in Sonic 3 too. In Sonic 2, the 0x40d8a address was wrong, the right address turned out to be 0x40804. But since ROM writes don't work, you have to write 0 to 0xfffff711. This has the side effect that rings will disappear. Edit: OK, marzojr's method was better. I didn't notice that there was a registerexec function.
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
HHS wrote:
In that case, try memory.writebyte(0xfffff711,128) for S&K. This moves the HUD off the screen. It probably works in Sonic 3 too. In Sonic 2, the 0x40d8a address was wrong, the right address turned out to be 0x40804. But since ROM writes don't work, you have to write 0 to 0xfffff711. This has the side effect that rings will disappear.
I had already tried it earlier today for S2, and noticed the ring disappearing effect, which is why I ditched it in favor of killing the HUD drawing function just before it actually draws the HUD (I am using Lua to overwrite a register just before a check is made which cancels the HUD draw; I watch a big enough chunk to make sure the overwrite happens before the check). I haven't tried it for S3/S3&K -- I had assumed it would yield a similar result (hiding the rings). But the fact that I can write 128 there to move the HUD offscreen is intriguing; I will look into it.
Marzo Junior
HHS
Active player (286)
Joined: 10/8/2006
Posts: 356
Yeah, as long as the byte isn't 0, the game adds 143 to it to make the HUD's horizontal position. It starts out as -111 and is incremented by 8 until it becomes 1.
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
As it turns out, S3&K is *great* for removing the HUD! With nothing but the following:
memory.writebyte(0xfff711,128)
memory.registerwrite(0xfff711, function(address, range)
	if memory.readbyte(0xfff711) ~= 128 then
		memory.writebyte(0xfff711,128)
	end
end)
the current any% run synchs up fine up until the end of Launch Base 2 (which is as far as I have watched).
Marzo Junior
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
Here is the script that removes the HUD for all Sonic games. It is a pity that Sonic 1/2/CD aren't done nowhere nearly as elegantly as Sonic 3 & K... Edit: Actually, Sonic 2 can be done almost as elegantly by moving the hud offscreen too; the new script is here. But Knuckles in Sonic 2 is annoying as hell, now that I have tested it, and can't be done either the new or the old way... Anyway, I'll try Sonic 1 & hacks & CD before tackling S2&K. Edit 2: Knuckles in Sonic 2 done too; just needed the right address.
Marzo Junior
Player (37)
Joined: 9/9/2006
Posts: 388
Using your latest script, marzojr I (poorly?) added a small toggle variable toggle for the LUA hud (defaulted to false) so that someone may use your script to disable the games hud while not using your lua hud whilst not having to sacrifice small parts of the screen for the blue [+]. Hope you don't mind. Here is the script.
A whisper in the wind~~
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
You are still allowing jump prediction to go on (lines 1631-1633), which emulate a couple of frames into the future; without the HUD to display it, this is just wasted emulation. Slightly better would be to exit prematurely from the create_hud function right at the top. Moreover, as-is the variable is misnamed: it disabled the Lua HUD if it is false, so a better name would be "enable_lua_hud" instead. Either that or switch the comparison in line 1642 from == to ~=. I assume that this is for making movie files without the original or Lua HUDs, right? Edit: a thought I just had: maybe the little [+] boxes should appear only on mouse over?
Marzo Junior
Player (37)
Joined: 9/9/2006
Posts: 388
marzojr wrote:
You are still allowing jump prediction to go on (lines 1631-1633), which emulate a couple of frames into the future; without the HUD to display it, this is just wasted emulation. Slightly better would be to exit prematurely from the create_hud function right at the top. Moreover, as-is the variable is misnamed: it disabled the Lua HUD if it is false, so a better name would be "enable_lua_hud" instead. Either that or switch the comparison in line 1642 from == to ~=. I assume that this is for making movie files without the original or Lua HUDs, right? Edit: a thought I just had: maybe the little [+] boxes should appear only on mouse over?
That is the intention of the script yes. I suppose I should have simply posted saying "I would like it if there was a toggle for the LUA HUD also". How is it I trigger "Jump Prediction" ? Whilst I'm making little requests. Don't suppose you could add nitsuja's FastForward During "IsBoring()" script with variable toggle but eliminate the part that fast-forwards while the player is off-screen? (I personally find it difficult to keep track of whats going on when it zips at those parts)
A whisper in the wind~~
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
DDRKhat wrote:
That is the intention of the script yes. I suppose I should have simply posted saying "I would like it if there was a toggle for the LUA HUD also".
Understood. The next version has it in a way that also disables the Lua HUD in its entirety, even the jump predictor.
DDRKhat wrote:
How is it I trigger "Jump Prediction" ?
If you (1) have the toggle on (it is on by default), (2) are inside a game level (including some special stages) and (3) either recording OR not playing a movie, a second set of speed values will appear in the character HUD between the speed values and the angle. In this case, each character HUD will have 4 lines, the 3rd being the jump prediction: this is what the character's speed will be like if you press the 'c' button for the next two frames (in S2/SCD, both of which have air speed limits if you hold in the forward direction, the left/right directions will be cleared for the prediction).
DDRKhat wrote:
Whilst I'm making little requests. Don't suppose you could add nitsuja's FastForward During "IsBoring()" script with variable toggle but eliminate the part that fast-forwards while the player is off-screen? (I personally find it difficult to keep track of whats going on when it zips at those parts)
For S2 and S3/S3&K, there is no real problem; but for S1/SCD, I have no idea how to determine if the score tally is on or not. If anyone can chip in, I'd appreciate. Other than that, it is fairly easy to add the boring stuff skipper. In fact, I just finished the HUD disabling code: it turns out that I can push the HUDs offscreen in S1 and SCD too, without causing desynchs and without recourse to Nitsuja's script above. The HUDs are sprites in these two games, which means I had to push them *just* offscreen so that they don't unload. The new script is here; I haven't updated the 7z file because MediaFire seems to be down. In this new version, I add a toggle for the entire Lua HUD, added a partial skip of boring stuff (level tallies are not skipped) with its own toggle, a disabler of Hyper Sonic's hyperlaunch flash (with its own toggle), made toggle widgets show only on mouse contact if they are inactive, swapped back [+] and [-] (as I noticed they were inverted) and implemented the above changes to disabling the original HUDs. Edit: forgot to mention fixing a couple bugs in SCD. Also, if anyone knows how to disable the SCD warp direction indicators (you know, the 'past' and 'future' images that appear after you go past a sign) I'd appreciate knowing -- the way I was doing it didn't work all levels, and caused other issues.
Marzo Junior
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
As it turns out, exactly as it was the script caused a desynch in Tails in Sonic 1. I modified the script to move the HUD in the other direction in S1 & hacks, which requires less distance and it works. The fixed script is here.
Marzo Junior
Player (37)
Joined: 9/9/2006
Posts: 388
Thanks for taking these silly requests of mine.
A whisper in the wind~~
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
The new version of the 7z is up. It is the same images with the new script linked at my previous post.
Marzo Junior
marzojr
He/Him
Experienced player (762)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
As it turns out, the S3/SK/S3&K version of the HUD disabling causes a desynch in the 100% run. I found a workable replacement for SK/S3&K, based on the S2 trick, but I am still investigating the equivalent for S3. I will update this post and the first post when I find it. Edit: New version whose original HUD removal doesn't desynch in S3&K any% and 100%.
Marzo Junior
1 2
5 6