Posts for marzojr

marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
@Kugawa: I tried to eject Sonic from that wall in Sandopolis 1, and failed utterly -- I even tried using a LUA script to write to RAM, directly setting pixel/subpixel position to all values that would be possible to attain normally. So I don't think it is possible. I think it doesn't work because Sonic is too wide and too tall.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
FuzZerd: I see no reason why it wouldn't synch; as far as I know (which includes looking at a S3&K disassembly to look where the number of lives is used), there are very few places where the value is checked (as opposed to changed), none of which should affect synch -- the only values checked for are 0 (can't pause if you have 0 lives), if it becomes zero after a death and if it is more than 99 when saving. In the SRAM, the number of lives of a save is also handled by a single byte (for each save), and SRAM saves no information which could conceivably cause such a desynch. After I looked this up, and I verified that, in a way, the movie in this submission can be used as its own verification movie :-) If you take the SRAM you get at the end of playing this movie, and play the hex-edited movie without savestate dependency, it will still synch. Edit: or, of course, if you apply the anchor savestate procedure described in the submission to the SRAM you get from playing the submission to the end and use the anchor savestate generated this way to play the movie. Also: what score counter glitch? Side note: I hadn't noticed before, but I gain exactly 2616 lives in this run, doubling the number of lives I had at the end of the verification movie and ending with exactly 42 lives. Nice :-) Edit: fixing math fail. Note to self: no more posting at 2AM.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
Nach wrote:
marzojr wrote:
Indeed, going by Kyman's reply above, Nach voted 0.1 for entertainment in the S3&K run, and probably voted the same way for FuzZerd's Sonic run. I seriously doubt that he finds that little entertainment value in Genesis Sonic runs...
I didn't vote THAT low.
You are right, of course; I should have checked that there was some leeway due to rounding errors; I apologize for the mistake.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
I agree with Raiscan that there should not be limits placed on voting. Which is why I actually suggested the use of something other than the average value of all votes to determine the final rating of a movie. The problem with the average is that it isn't robust -- any outliers will alter the average and make it stop being truly representative of any trends in the sample. The median, on the other hand, is very robust -- it is robust right up until the point where the "outliers" drowns the data so much that you should just throw the data away and start anew. It is great for filtering out "noise" and revealing any actual trends in a sample of data.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
Indeed, going by Kyman's reply above, Nach voted 0.1~1.0 for entertainment in the S3&K run, and probably voted the same way for FuzZerd's Sonic run. I seriously doubt that he finds that little entertainment value in Genesis Sonic runs... Edit: Assumed the lowest bound for the rating due to ignoring the possibility of rounding errors; fixed.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
I just stumbled upon this, while actually looking at the ratings of FuzZerd's Sonic run ([1401] Genesis Sonic the Hedgehog by FuzZerd, upthorn & carretero in 15:51.73). If there is a significant concern about outliers (in this case, votes widely divergent from all other votes) screwing up a movie's rating, you may consider using a more robust estimator such as the median. With the median, any single extreme vote is unlikely to affect the result (as it happens with the mean), particularly for a small number of votes.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
It was written by Nitsuja and Upthorn; nowadays, it is on the Gens source tree and can be compiled in by defining a few variables. I have compiled versions for the latest SVN with the options listed in the submissions for Sonic 1, Sonic 2, Sonic 3&K and Sonic CD. A quick primer: Scroll lock toggles the camhack on or off (it is the opposite of scroll lock). If camhack is on and the currently selected object (starts on Sonic) moves offscreen, the camera will center on that object. You can cycle through objects with page up/page down (useful to watch what Tails is doing), or press 'home' to return to Sonic. Numlock toggles display of ground angles and object RAM addresses; the RAM addresses have to be prepended with FF. Most of the time, you should leave numlock off. The solidity display uses color overlays to indicate solidity of tiles; a green overlay indicates that the tile is top solid, a red overlay indicates solidity from the bottom and sides, a blue overlay indicates solidity on all sides, and no overlay means no solidity.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
@Derakon: it is a LUA script, actually; it is included in the linked HUD and enabled by default, but here is the relevant code: Download disable_hyperflash.lua
Language: lua

memory.registerexec(0x810, function() -- Point the write destination away from the DMA memory-mapped vport and into -- an unused word-sized RAM address. The theory is that all instructions are -- still executed in each frame, but their effects are nullified. memory.setregister("a6", 0xffcfcc) end) -- Fix graphical glitch resulting from above fix. memory.registerexec(0x1a516, function() local reg = memory.getregister("a0") if memory.readbyte(reg + 0xa) == 0 then memory.writeword(reg + 0xa, memory.readword(0xffb00a)) end end)
The second function (the graphical glitch fix) is entirely Upthorn's, but his original version of the script to disable the hyperflash caused desynchs which are not present in the version above.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
A note for judges and admins: should it be decided to reject the movie because the game is over-represented, don't feel bad about doing it -- this is a labor of love, and I only submitted it to increase visibility.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
Paused: here. This starts from the same savestate as the full movie, and goes directly to Doomsday zone. I play it only until the point where the boss is loaded (because that boss is annoying as hell to optimize), at which point it is 22 frames slower than the full movie. But now is the point I was dreading all along: submitting the movie. I don't know if the site software accepts savestate-anchored GMVs, since the format does not allow embedding of the savestate in the GMV. And the same goes for SRAM. Hm. I think I'll poke around in IRC.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
Uff, finally something I like for Death Egg. I have a new WIP, but first a small preamble: in the wake of the release of Gens 11b by Adelikat -- which I was essentially already using -- and the fact that it embeds input into the savestate, making it (the savestate) not very compatible with Gens 11a, I decided to revise the procedure to generate the starting save state for the run (the old savestate is still good, mind you, it is just that the old procedure which was the issue, as it required too much dexterity to pull off). The new procedure I am using goes like this:
  1. Play the verification movie until the end; make sure to go until after the last input and stop the movie. This will generate SRAM. Note: This movie, particularly the first half of it, is terribly unoptimized since I played most of it in real time.
  2. Make sure that you do a soft reset and go to the starting menu to make sure that the SRAM has been properly generated (there should be a save with all emeralds).
  3. Go into the SRAM directory and make a backup copy of the S3&K SRAM. We will need this shortly.
  4. PAUSE the emulation.
  5. Start recording a new movie; do NOT check "Record from now and make a savestate". The movie name is irrelevant; if you paid attention to the above step, Gens will be paused.
  6. Make a savestate.
  7. Advance one frame.
  8. Load the savestate you just made. These 3 steps ensure that the movie has an empty input list.
  9. Stop the movie.
  10. Go to the SRAM directory and replace the S3&K SRAM with the 'dirty' backup copy you made in step 3.
  11. Open the movie you created in step 5. Make sure that "Clear SRAM" is UNCHECKED, and that emulation is paused.
  12. Start recording a new movie; make sure that "Record from now and make a savestate" is CHECKED. The movie name is irrelevant.
  13. Gens will prompt for the state file name; select one you will remember: this is the anchor savestate.
That was long... but it ensures consistent starting savestates. There does seem to be some variation, but it seems related to PSG starting state and doesn't seem to affect synch. There is one major advantage from this method: if you hex edit the movie to eliminate the savestate anchor (change byte 0x16 from 0x5f to 0x1f) and use the dirty SRAM from step 3, the movie will still synch -- if you make sure that "Clear SRAM" is UNCHECKED when you load the movie.
With that out of the way: here is the new WIP, which finishes the game. And here are the savestates generated by the above procedure: Gens 11a savestate; Gens 11b savestate. This WIP has one further 44-frame improvement for the any% run in Hidden Palace due to a better fight with Knuckles; final time is 0:18::26. Sky Sanctuary is identical to the any% run (one of the earlier versions, at any rate). I tried very hard to die at the starting cutscene by scrolling objects offscreen, but always came up slightly short of the mark. Death Egg 1 was annoying as hell. The time I gained from having Tails, as well as better optimization in the path to Hyper Sonic, all led to a light bridge blocking the route used in the 100% run. Waiting for it to go out would cost me all but 17 of the frames I had gained thus far; I used an alternate route that is slightly slower than the one in the 100% run, but which is faster than waiting. I don't think it is possible to gain enough frames to get to the 100% route before the light bridge appears. Slightly better optimization overall leads to a final time of 0:53::16, which is 3 seconds 47 frames faster than the 100% run. Death Egg 2 was another pain; it desynched whenever I tried something else in Death Egg 1. That should teach me to finalize Death Egg 1 before doing Death Egg 2... When I lose the shield at 0:09-0:10, I do it so I don't lose any frames from that -- I timed it so that if I spindashed 1 frame earlier, I wouldn't hit the ground and be able to jump. The resulting time gain from being able to walk through that badnik is great :-) At 0:16-0:17, that serpentine drop is hard as hell to pull off; it is worth it though. A couple of new shortcuts, an annoying sub-boss, and the battle copied from the any% run later mean a time of 1:59::33 for this level -- an improvement of 9 seconds, 13 frames over the 100% run, and a sub 2 minutes time for this level. Doomsday zone is another annoying as hell level because of luck issues. This level is also NOT a fixed length auto-scroller! I managed to do what I had deemed impossible earlier -- collect ALL rings -- but it loses too much time, so it is not on the movie. I managed to improve this level by a few frames -- last hit is at 1:30::36, last visible time is 1:33:53 (both of which show a 4 frame improvement over the 100% run), while the timer stops at 1:34::33 (3 frames better than 100% run).
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
Ah, I knew it was doable. I haven't used Upthorn's path to the speed shoes yet (meaning that this can be further improved by 2 frames), but I did manage to optimize the path from the speed shoes to the end by a further 17 frames; meaning we now have a more comfortable 0:33 in the level. Here is the WIP. Comment: yes, I do press forward in the air above the speed cap at frame 3352; I need this so I can make that jump at frame 3424.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
I have a new version, linked in the first post. The changes are:
  • 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.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
You may be joking, but that may indeed be possible: FuzZerd "wastes" 2 frames between the second and third hit on the boss, and I am pretty sure it might be possible to optimize that route for at least 1 more frame; these combined would bring the time down to 0:33::59, a very high 0:33 but 0:33 still :-)
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
@FuzZerd: I hadn't seen your edit before. I uploaded the video to my MediaFire account; here it is. edit: Microstorage seems to be back up.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
GGG wrote:
Angel Island 2: I've been watching the movie marzoJr (here) and I've seen in the following image, which sonic makes do the double jump and lands in inside the soil. Could it be possible?
If you frame advance it, you will notice that Hyper Sonic doesn't actually double-jump into the ground once, but twice: once to embed his lower portion into the ground (which enables a shallow zip right to the good spot) and the second time to completely enter the ground. Regular Sonic not only cannot get high enough with enough horizontal velocity to get in the ground like that, but using a bubble bounce would have the disastrous result of getting Sonic stuck in the wall with no way out.
GGG wrote:
Hidrocity 2 (death)
The newest death (where I manage to lock the screen during the transition resulting) is impossible to reproduce because it requires a very long zip (and regular Sonic only gets a short one). The next-to-last death is essentially the one in the movie -- right down to subpixel position and same input, but 1 frame longer nevertheless. As I said in the description, even :-)
GGG wrote:
Sandopolis 1
Which glitch? All glitches in this level involving entering the ground require either Hyper Sonic or a bubble bounce, neither of which are available in the run. If you mean the zip at the start, only Tails and Knuckles can do it -- Sonic is too tall and too wide for it (believe me, I tried). If you mean getting on the top of the level: Sonic might be able to do it in two places: one on which he would lose time and one on which it would be moot. The former is at the start, right after Sonic gets the fire shield; after a few moving spiked crushers, Sonic is at the second highest spot in the level without a ceiling, with a slope where Tails could abuse the slope for extra height and fly high enough that Sonic might be able to get on the top. That would mean waiting for Tails, but even worse: Sonic can't move topside nowhere near as well as Hyper Sonic, and would lose time. The other spot is at the end of the level -- at the spot in the run where Sonic scrolls down the screen and Tails flies Sonic past an unbreakable wall, there is an upper level to which Tails could fly Sonic; from there, Sonic could get on top of the level, it being the highest spot all around. This would be a waste, because Hyper Sonic starts falling right after that... Anywhere other than those two spots and Sonic can't make it above the level -- even Hyper Sonic can barely make it with the aid of Tails, and he jumps far more than any other character. But nice tries :-)
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
Aglar: you are right, it was improvable. This WIP, when the boss fight is included, will be about 30 frames faster than FuzZerd's. It might be improvable even more, this was only my third attempt. Re: keeping speed on jumps: you only lose horizontal speed in a jump when your vertical speed is upward and between 0 and 1024 subpixels; if it is higher than that, if it is downward, or if you hit a ceiling before you get to that range, you won't lose horizontal speed (well, in S2 and SCD you also lose horizontal speed during a jump if you press forward while on air and above the speed limit, but I think you already know that).
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
Aglar: Do you mind sharing that route? I am curious about how it goes.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
It is tricky, yes. One thing which may help (and may shave a few frames in GHZ1) is a slight optimization you can do to spindashes; I noticed at least one in GHZ1 where you can do it. When on level ground (angle 0), and your speed (on the next frame) is less than 128 subpixels/frame, you can hold L+R for 1 frame to set it to 128 subpixels/frame and then press D+back for 1 frame to brake for 1 more frame and duck at the same time. You will be able to start charging the spindash in the next frame, which may shave one or more frames. Example: frame 815, advance to 816 holding L+R, press D+L on the next frame advance and charging the spindash removes 1 frame. Using this, a 1-frame jump, and some slight changes in deceleration pattern, and using the L+R/D+L trick again for the next spindash, I can get a fully charged spindash 5 frames earlier than your WIP (0:06::22 as opposed to 0:06::27).
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
Thats a nice work there. Can't wait to see how act 3 will turn out. I have a very important piece of advice for you: try to optimize the levels before Labyrinth Zone as best as you can before trying to tackle it. That zone will frustrate you to no end with the ease with which it desynchs due to lag when you change earlier levels.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
GGG: So, the run sat for two days over in the S3K thread waiting for feedback and you waited until it was submitted to mention possible improvements? That is a really nasty habit of yours...
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
@Harmonik: Not that I know of; this field is presented in the submission as being the "branch" to which the run belongs. Although it most likely will be reset on publication to "Sonic+Tails any%" (or even empty) because there isn't a "glitchless" branch and the previous version has a blank branch.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
If I understood it correctly, this also explains why hitting the lamppost causes the glitch to fail -- since I have enough rings, the lamppost creates a new sprite (the special stage stars) which takes the location the walk on water object (remember, Hyper Sonic can stop or turn aronud without creating dust by using the hyper launch ability); then the boss takes a different slot, and the stars (which are probably deleted by then anyway) will give way to the new water walking object. Man, that was one hell of a coincidence :-) Anyway, thanks for the work! I now know for sure it is highly unlikely to make it work for Sonic.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
Noob Irdoh: That is only a suggestion; if you have a better suggestion, by all means use it instead. Other suggestions are frame 59745 and 59858.
Marzo Junior
marzojr
He/Him
Experienced Forum User, Published Author, Experienced player (752)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
The link is corrupted. I don't think anyone is able to *see* the movie. I would recommend avoiding uploading files with certain characters in their filenames. OK characters are:
  • Alphanumeric characters;
  • dashes;
  • underscores;
  • periods;
  • tildes.
Conversely, characters which are not OK are basically anything else. If you do use anything else, you have to URL encode the characters. The angle and square brackets are the worst offenders because they are used respectively by html and BBCode; this may cause URLs to be chopped off because of failed parsing. Here is the fixed link to the movie, using URL encoded brackets, parenthesis, spaces and exclamation point: Dynamite Duke by wwmarx. I haven't watched the movie yet, but will soon.
Marzo Junior