1 2
11 12 13
20 21
Player (215)
Joined: 2/12/2006
Posts: 373
Location: Oregon
I've completed Aitos Act 2. Unfortunately, I didn't get quite as nice of a starfall pattern this time, so I lost 15 frames fighting the boss, but that's more than made up for by the time to crystallization being 21 frames faster. I also shaved off 19 frames leading up to the boss. So in total, I managed to shave off 25 more frames. I actually tried hexing in my Aitos WIP to see if I could get the same starfall pattern, but interestingly enough I didn't. So apparently actions outside of the levels also influence starfall patterns. I can see there's more waiting to be done in Aitos, which I'll leave to Dunnius since Dunnius is better at being entertaining while waiting in the sims. http://dehacked.2y.net/microstorage.php/info/892863207/ActRaiser_%28U%29_Aitos_Act_2_Done.smv
Active player (423)
Joined: 9/7/2007
Posts: 329
So it is faster to avoid getting that magic scroll in Act 2? I thought it would have been faster since it is not out of the way because it can be obtained in a single jump-slash without stopping beforehand. Actraiser is hostile toward hex editing in general. One time I made a minor edit in Fillmore's sim and it desynced in Bloodpool's sim. There is random single frame lag in the simulations and the number of frames before the construction periods where it calculates where to build is somewhat random. I wonder if the crystallization time is somewhat random or if there is a frame rule.
Player (215)
Joined: 2/12/2006
Posts: 373
Location: Oregon
With enough manipulation, one cast will do the trick without waiting for very long. So trying to beat the boss in two casts would be pointless, as we'd have to wait for that second cast to finish too.
Active player (423)
Joined: 9/7/2007
Posts: 329
I checked the published run to see if it used two stardusts. There was a stardust at the end, and it does not delay the time it takes for the "act clear" message. It takes 333 frames from the frame where the boss's health bar shows zero health to the first frame where the "act clear" message shows up regardless of whether the stardust is currently being cast at time of the final blow. But since that one stardust does do lots of damage, the question is whether a second stardust would deliver the final blow faster then the sword. Also, getting the second scroll changes the RNG, so that effects things as well.
Player (215)
Joined: 2/12/2006
Posts: 373
Location: Oregon
I took another look at it: yes, the flag can be obtained with just one jump-slash, but there are a few frames of delay upon landing. Admittedly that's insignificant, but what is significant is that I can't find a quick way to bypass the multi-eyed monster after the jump. Simply walking up will cause you to get hit. Trying to do another jump slash doesn't make the monster red long enough to prevent you getting hit. Heck, just standing there and slashing doesn't work since the monster starts moving again even before you do. I did think to try not getting hit somewhere earlier, but I don't really see any good places to do so, since they all involve monsters that take more than one hit to kill. Yes, there are some times where I don't get hit by those multi-hit monsters, but in all those cases the invulnerability period also lets me bypass multi-hit monsters that come a little later. Do you see a good way to get the flag without a major delay? Because I don't. Regardless of how we do this, I think we'll get a minimum 65 frame delay (about 5 frames delay upon landing + 3 slashes) reaching the boss, very likely more.
Active player (423)
Joined: 9/7/2007
Posts: 329
Here is my test that gets the scroll, and it only costs 16 frames! This can probably be optimized more, but at least it is possible. http://dehacked.2y.net/microstorage.php/info/687406975/ActRaiser_%28U%29_Got_Aitos_Act_2_Scroll.smv
Player (215)
Joined: 2/12/2006
Posts: 373
Location: Oregon
*smacks forehead*. Of course! I don't have to keep moving forward in that particular jump since the main direction to move is downward anyway. I even thought of that right before you actually did it. I'll see if I can optimize that. Now that we have a way to get that scroll with little delay, I guess I'll see whether or not using two scrolls gets us enough improvement on the boss. EDIT:So far, after doing a little optimization, getting that scroll delays getting to the boss by 15 frames. Let's see how the boss fight goes. Optimizing when there's more than one cast involved is gonna be a pain... EDIT: The best I've been able to manage is crystallizing at the exact same frame as before. So the actual boss fight/crystallization part was 15 frames shorter, but the 15 frame delay before the fight cancels that out. Unless I'm missing something, trying out another pattern of stardust involves a delay of at least 9 more frames up to the boss fight. But that hasn't helped either. Here's the two-scroll version of crystallizing at 120431 frames: http://dehacked.2y.net/microstorage.php/info/1315049831/ActRaiser_%28U%29_Got_Aitos_Act_2_Scroll.smv EDIT: Revisited the one-star version and managed to shave off another frame.
Active player (423)
Joined: 9/7/2007
Posts: 329
The two stardust version looks good. It is funny that it ended at the same frame as the old one stardust version. But now it looks like the one stardust version will be faster since it has been improved by a frame. I can't think of anything to improve either version.
Player (215)
Joined: 2/12/2006
Posts: 373
Location: Oregon
Since you were gone for a few days I went ahead and saw what I could do for the waiting in Aitos. I've also finished Marahna Act 1 and managed to shave off 9 frames. Here's the WIP: http://dehacked.2y.net/microstorage.php/info/676366735/ActRaiser_%28U%29_Marahna_Act_1_Finished.smv Go ahead and critique the Aitos waiting. If you feel it needs to be changed, I'd be willing to hex in my current Marahna Act 1 playthrough, or even redo it if hexing doesn't work. A note for when you start the Marahna sim: It'd be preferable to wait until the population reaches 1900 before starting Act 2 -- I need all the life I can get for Act 2 since there's so many things where getting hit is the best way to bypass them. As for time saved so far over Ogreslayer's run: 26465 frames, or about 7 minutes and 21 seconds.
Active player (423)
Joined: 9/7/2007
Posts: 329
While I was waiting to see the result of the boss battle, I was also working on the Aitos simulation, which is halfway done. I was planning to hex edit that in when I got the smv. I noticed that you got all the items in Aitos. Well, surprisingly, it is 2 frames slower to do that, plus 8 frames slower later on to skip past the extra items since they are put at the beginning of the list. I am going to redo the sim since I already completed it up to that point. I like the dancing that you did, and I will incorporate that in. I couldn't think of a way to do that, which is why I haven't done it yet. The boss fight in Marahna Act 1 is awesome. I love the constant attacking without getting hit. I was planning to wait for the population to be 1900 before Act 2 for the extra HP. In Aitos, I was unable to find a way to get the Sheep's Fleece and Source of Magic before Act 2. The extra HP from the extra level would have helped in there as well.
Player (215)
Joined: 2/12/2006
Posts: 373
Location: Oregon
I did the dancing by playing in slow motion instead of either full speed or frame advance. In SNES9x it's under Config->Speed->Set Speed. I usually did it at either 50% or 25%. Also, I'm think I'm going to go ahead and stick in subtitles to reduce the monotony of waiting in the sims. I got permission to use FatRatKnight's lua script. I've written some content, so I'm going to go ahead and time it, then put up the script so you guys can critique it.
Active player (423)
Joined: 9/7/2007
Posts: 329
You mean the script developed for EVO? I have been keeping a list of things that I did in the simulation which would be perfect for that script.
Player (215)
Joined: 2/12/2006
Posts: 373
Location: Oregon
OK, Here's the script with some subs through Fillmore Act 2. http://lua.pastey.net/126262 Nothing in there so far is final. It's just a very rough draft. Make sure that you're using a recent svn version of SNES9x 1.51. You can go to the snes9x-rr downloads page and get either the r51 binary or the latest binary (r70 as of the time I typed this). If you don't use a sufficiently recent version the font will be too large. I don't know if you'll want to add subs, Dunnius, but in case you do: To add subs, go to the section with all the lines beginning with "S(". After the "S(", there are three comma-separated numbers to put in: first is the frame to start displaying the message, second is the Y position to start drawing the message, and third is the number of frames to display the message. Then type in three comma-separated strings, each in one set of quotes. Each string represents one line. If you don't want to display anything on a line, just don't put anything between the quotes. Don't forget to add a closing ")" after all of that. You'll probably have to mess around with how much text to put on each line since if a line is too long it just cuts off text instead of wrapping it. Make sure to have the text in the order that it'll appear in-game. I suggest you set hotkeys for reloading lua scripts. Go to Config->Hotkeys then select "Tools" from the drop-down list. You should be able to set the hotkey from there. Then when you want to mess around with a sub, make a savestate before the part where the sub actually occurs. If you want to try it again after making changes, reload the savestate and reload the script using whatever hotkey you set for that, otherwise the script might not work right.
Editor, Skilled player (1172)
Joined: 9/27/2008
Posts: 1085
Didn't wait long after I gave my permission, eh? A good start, though. Ah, so you added duration. However, why did you add a j variable? Oh, because things are out of sync with what you did, so you used an extra variable to make up for that. Turning MsgDuration into a table is fine. Though, now looking over my old code prior to your changes, I see a few things I could fix up a little...
function NewMsg(Index)

    MsgTmr= MsgDuration[Index]
    Line[1]= L1[Index]
    Line[2]= L2[Index]
    Line[3]= L3[Index]
    MY= y[Index]
end


function DispMsg()
    if MsgTmr > 0 then
        MsgTmr= MsgTmr - 1
        for n= 1, 3 do
            if Line[n] then
                gui.text(MX,MY+9*(n-1),Line[n])
            end
        end
    end
end



while t[i] do
    if t[i] <= movie.framecount() then
        NewMsg(i)
        i= i+1
    end
    DispMsg()
    snes9x.frameadvance()
end
Just find the proper spot for these to replace older code, get rid of all the j variables, and you'll be on your way. Additionally, defining empty strings are now optional. In any case, it's slightly less messy and a little easier to make future changes if any are needed. I haven't been following any progress here, due to the fact it would involve tracking down the ROM, but seeing these subtitles makes me want to see what's going on now. Perhaps I should add a little something to make it load-state stable... Stick this somewhere before all the text, and hopefully it'll work.
function FindIndex()
    MsgTmr= 0
    i= 1
    while t[i] and (t[i] < movie.framecount()) do
        i= i+1
    end
end

savestate.registerload(FindIndex)
Player (215)
Joined: 2/12/2006
Posts: 373
Location: Oregon
Thanks for the cleanup. If you save state while a subtitle is being displayed, you won't get the subtitle when you reload. But that's such a small thing I'm not sure we should bother fixing it. Here's the current script: http://lua.pastey.net/126322 Awesome that we don't have to reload the script everytime we reload a state anymore. And unused lines don't need to have anything written for them anymore.
Editor, Skilled player (1172)
Joined: 9/27/2008
Posts: 1085
Hmm... One thing I failed to mention is simply this: The function must be BELOW where local i is defined. It is above local i, and therefore doesn't see it. It picks a global i and uses that instead. Solution: Move either the function down, or local i up. Either way, this function needs to be below local i or else it won't see it. As for why I didn't originally stick local i up with the rest of the variables... Er, good question... Second, just looking at the original while loops I put in there, once the last subtitle is displayed, it exits the while t do loop and starts running the next loop indefinitely, regardless of state-loads. So loading states after the last subtitle will fail here. Solution: See that while true do loop? Change that to while not t do. Additionally, insert a while true do just before the while t do loop and add an extra end at the end of file. That should help. Never really cared about making it state-load stable before now, as it worked well enough for my needs when creating my subtitles for E.V.O. . But a few fixes here, and things should work out fine for you. EDIT: ... Well then, something happened while I was making my post. Hunh...
Player (215)
Joined: 2/12/2006
Posts: 373
Location: Oregon
Sorry, I figured out the local i thing before I saw your post. That's why I edited my post above with the corrected script.
Editor, Skilled player (1172)
Joined: 9/27/2008
Posts: 1085
It still has the fix for when you run out of subtitles and want to re-load. Try out the current script, run through all its subtitles, and then load an earlier state. You'll probably never see them again. Without a fix, anyway.
Player (215)
Joined: 2/12/2006
Posts: 373
Location: Oregon
OK, here's the next one, then: http://lua.pastey.net/126324
Editor, Skilled player (1172)
Joined: 9/27/2008
Posts: 1085
I just had to go on a quest to perfect a freaking awesome subtitles script. (EDIT2: Link removed) May as well not clutter too much here. Now you can insert any number of lines without a need to change code to support that many lines! Hey, maybe you want four or five lines at times! EDIT: Now it allows multiple subtitles at once! Threw in variable x position for whatever reason. I can foresee a desire to have a variable x-position and multiple different subtitles at once. Someone's going to want that, somewhere, someday. (EDIT: And now I've inserted just that.) It's going to happen, man! But hey, I decided to learn how to use functions that take a variable number of arguments, so I'm getting more practice. And co-routines and threads are fun as well, having just now tried it out.
Player (215)
Joined: 2/12/2006
Posts: 373
Location: Oregon
Um.. wow. Are you planning to add toaster support next? :P I wonder if this subtitle script stuff should be spun off into a separate thread. Maybe on the Tool-Assisted Laboratory board?
Active player (423)
Joined: 9/7/2007
Posts: 329
Here is the WIP with Aitos completed. It ended up being 5 frames faster. http://dehacked.2y.net/microstorage.php/info/686729894/ActRaiser_%28U%29_Zidanax_and_Dunnius_Aitos_done.smv The lua script looks good, FatRatKnight. I can see this being used in many future TASes. Edit: And yeah, there should be a thread on the Tool-Assisted Laboratory board. That way it will be noticed by more people.
Player (215)
Joined: 2/12/2006
Posts: 373
Location: Oregon
Alright, Marahna Act 1 has been hex-edited in: http://dehacked.2y.net/microstorage.php/info/468178683/ActRaiser_%28U%29_Zidanax_and_Dunnius_Marahna_Act_1_Done.smv Unfortunately, the time to crystallization is only 4 frames less than before, not 5. I don't think there's anything I can do about that, because the time to the last hit on the boss is 5 frames less as expected.
Active player (423)
Joined: 9/7/2007
Posts: 329
Joined: 4/30/2008
Posts: 39
Impressive.. but Marahna Act 2 is a painful, painful stage. I wouldn't mind story-related subtitles. Help fill in some waiting times. Man, it's cold leaving that guy to die in Aitos. What happens when you rain on him?
1 2
11 12 13
20 21