1 2
21 22 23
28 29
Twisted_Eye
He/Him
Active player (398)
Joined: 10/17/2005
Posts: 632
Location: Seattle, WA
Oh the trading isn't necessary? Awesome. I knew I was a frame down in the talking bits at the start, but I thought that I had calculated front talking to be faster. It's an easy fix that doesn't affect manipulation, as well the stairs and cart. Thank you! I'll get to work adding those in and redoing the miniboss. --for some reason I left this text in the field and never posted it, but I'll still leave it there and act like it's an edit anyway, cause that's how I roll. http://dehacked.2y.net/microstorage.php/info/535938144/ZeldaOoS-TE-1%20Dmi.vbm I improved the miniboss to 7 frames over Swordless's run. The winning idea was cutting out the final slash by turning the first into a spin slash. It required delaying pulling out the bomb a few frames but it worked out. Since the spin slashes are started as soon as possible, I don't know if more frames can be saved. Actually I just thought of another thing to try for two or three frames, but anyway here you go. Also, I swapped out the sword instead of the bombs. I'm going to test if getting in one or even two bomb blasts on the boss would save time, despite having to go into the menu to pull the sword back out mid-battle. Thanks to the TAS Movie Editor program it'd be pretty easy to change back to putting away the bombs if I have to without having to redo much. That handy app has made this much easier. Using it to easily add a sword stroke at a waiting sequence makes manipulation easy--now to manipulate the boomerang-weilding Goriyas to all die to one bomb blast for max time saved in the Master Key chest's room. Having them die to sword will be slower, even IF I can position them in a way as one swing will push them all down a hole. ...OR I could start storing a spin-slash before entering the room, that'd probably be best for sword path. It'd also be better that they die on the floor so that hopefully I can get rupees are maybe bombs out of them. OH and I was only able to add the lost frames in the camp scene, the manipulation is just too fickle elsewhere. Unfortunately, apparently from entering the dungeon to the death of the miniboss I ended up exactly 8 frames behind, which I guess can all be attributed to that very first room with the Stalfos. Just could NOT get decent manipulation there. I'm happy with this all, though, onward ho.
Experienced player (504)
Joined: 1/12/2007
Posts: 682
Your progress is looking great. I wouldn't worry about being behind by a small number of frames, because you'll almost certainly end up ahead by a small number of frames later on. The manipulation in this game is too horrible to care about such minor differences. I did notice a few things that were improvable, and Tompa already pointed out most of them. The only thing that sticks out to me now is when you throw the bomb, it's much faster to throw it with the sword button, then press the bomb button on the next frame. This cancels the little delay that occurs when throwing a bomb. Otherwise though, I'm happy to see you're optimistic about working on this game. Hopefully you can keep it up longer than I/Soulrivers/Tompa did. I've kind of been on-and-off working on OoA again lately; it would be nice if both games were being properly worked on at the same time for once. :)
Twisted_Eye
He/Him
Active player (398)
Joined: 10/17/2005
Posts: 632
Location: Seattle, WA
I had noticed that button pressing effect when I was setting up the bomb in the miniboss room, completely didn't think to pull it back out to the earlier bomb, thank you! I saved 7 frames there and 3 more on the last swing at the miniboss. Ready to move on now. Boss Chest key proving verrry difficult to optimize. Finally get a good starting setup, but they all walk away from each other. I try any of the other two dozen I can manipulate easily, and one of them is always hanging out on the back wall. The best I was able to do ended up losing 52 frames to Soulrivers/Tompa. Upside? I saved 5*3* frames to the fight with Aquamentus, thanks to the bombs. I'm pretty happy with this so far. http://dehacked.2y.net/microstorage.php/info/181829504/ZeldaOoS-TE-End%201.vbm
Twisted_Eye
He/Him
Active player (398)
Joined: 10/17/2005
Posts: 632
Location: Seattle, WA
Alright, here's the final version of Dungeon 1. http://dehacked.2y.net/microstorage.php/info/1213607078/ZeldaOoS-TE-End%201%20-%20Final.vbm http://www.youtube.com/watch?v=LCqxa24-Sz8 Two seconds ahead of the previous WIP, and I'm done. I've already spent half the day manipulating drops from the bushes, tree, and leaves, took a break to post this youtube. Gotta dance with Rosa, grab the Rod of Seasons and then the shovel and THEN start the next dungeon...Fun fun!
Tompa
Any
Editor, Expert player (2215)
Joined: 8/15/2005
Posts: 1941
Location: Mullsjö, Sweden
Nice boss fight. I didn't know you could use bombs against him while he's still in the air. I'll need to rewrite both the bomb route and the ember seed ones, hopefully they will still work out well. Keep it up.
Twisted_Eye
He/Him
Active player (398)
Joined: 10/17/2005
Posts: 632
Location: Seattle, WA
It's slow going but I haven't given up. I realized that Rosa took different paths in her sneaking-back-down screens, so I had to figure out manipulating that. Then I had to manipulate something good out of a pile of leaves in the second screen, and all it would give me was ember seeds, which I needed eventually anyway. Now I'm trying to manipulate something good out of the bushes in front of the portal twice, namely Red Rupees or a Fairy. I intend to hit up Maple after dungeon 2 to get the Power Ring lvl-2 and hopefully enough rupees to get the rest I need for Dmitri and ooh maybe some bombs. I keep telling myself that the game will get easier as it goes along, though manipulating Pegasus Seeds is probably not going to be super-fun. Has anybody successfully found a way around the sequence with the two jumpy Subrosians that steal your feather and bury it? I have a couple ideas to try, but I'm curious to see what anyone else has come up with. It'll save a large amount of time to skip that crap.
Tompa
Any
Editor, Expert player (2215)
Joined: 8/15/2005
Posts: 1941
Location: Mullsjö, Sweden
I can start with the Subrosians that steal your feather. I have tried the following methods (Without success): Jump as far as possible with feather+pegasus seeds. Jump as short as possible. Jump to try to activate the cutscene but then fall into the lava. Jump as far to the left/right as possible. Jump and get hit by a bomb when the cutscene starts to be blasted away. If you have any other ideas, feel free to test. Bombs shouldn't be bought, "just" manipulate them. I'll fix routes and such for that (As well as seeds). Just don't waste any like you did in the first dungeon, or else it may screw things up. Manipulating the Power Ring will be insanely hard. She can drop 30 different rings, not sure if all rings have the same probability. But as she won't always drop a ring, the chances are very low to get one. I should check how much it will actually save to have the ring, if it even saves anything...
Joined: 5/9/2005
Posts: 752
Twisted Eye wrote:
I intend to hit up Maple after dungeon 2 to get the Power Ring lvl-2...
This is probably a silly question but as this is the second quest, can you not get the Power Ring lvl-3 and any other ring from using the ring secret? Edit; Nevermind, re-read the last page. I would still say your sanity has enough to manipulate without using the Ring Secret, or any of the others, though.
Tompa
Any
Editor, Expert player (2215)
Joined: 8/15/2005
Posts: 1941
Location: Mullsjö, Sweden
I even mentioned it earlier in the topic, I'm stupid... Yeah, just use a ring secret to get the rings you need. I'm feeling so dumb now.
Twisted_Eye
He/Him
Active player (398)
Joined: 10/17/2005
Posts: 632
Location: Seattle, WA
In regards to feather: Yeah, I tried those myself, too, and couldn't get them to work. I'll see if there's any possible part of the lava that can be pegasus/damage boost/feathered over. If it can get a full four tiles, I know of one spot in particular to try, one screen north or so. In regards to Ring Secret: I don't want to use any of the Secrets. I used a password to start the Hero's Quest to get a fuller ending. The Ring and Item Secrets are passwords, and, in my view, breaking site rules. Plus, this is probably going to be the only Seasons run done, so I'd rather keep it more pure. Oh and yeah I'm definitely not buying anything, I was just saying that if Maple dropped bombs, I'd be glad to pick 'em up.
Tompa
Any
Editor, Expert player (2215)
Joined: 8/15/2005
Posts: 1941
Location: Mullsjö, Sweden
How is it going? Getting anywhere?
Twisted_Eye
He/Him
Active player (398)
Joined: 10/17/2005
Posts: 632
Location: Seattle, WA
I've been having a hard time getting the time and the motivation. Lately, I've been feeling like there's something more pressing than spending an hour or two working out the sword slashes to manipulate drops from the bushes after the Rosa dance and those same bushes on the return trip. I also just realized that when walking between screens, you can gain a free pixel by pressing the perpendicular direction at the right frame. Link will slide a pixel or so (on normal ground) for free, so this can be used to cut off a frame of that silly diagonal movement. I'd always just handled all of the diagonal movements at once so I'm sure I could go back and save a few frames earlier. I can't even say for sure whether it would desync the run until I try it. In the end, I want to keep working on this and think about it from time to time, but I've just been devoting myself to other things lately, mostly just personal IRL issues.
Tompa
Any
Editor, Expert player (2215)
Joined: 8/15/2005
Posts: 1941
Location: Mullsjö, Sweden
For those who don't know: Swodless Link has been working on Oracle of Seasons for awhile now. He's currently on his way to the 4th dungeon. Parts of his run have been put up on his youtube channel found here.
Joined: 5/12/2010
Posts: 38
I haven't seen this mentioned in this thread so forgive me if this is known or being passed around. I've been playing with manipulating things in OoA for a while too just to make my game simpler. I found where the RNG is and how it's generated and how to predict what it will be. It's stored as a word at 0xFF94 and is generated like this:
now = [0XFF94]
next = (now * 3) AND 0xFF00
next += ( ( (next >> 8) and 0xFF) + (current AND 0xFF) ) AND 0xFF
in lua script it's like this:
next = bit.band( current * 3, 0XFF00 )
next = next + bit.band( bit.rshift( next, 8 ) + bit.band( current, 0xFF ), 0xFF )
-Sword swipes and shovel digs do this once. -Monsters call this twice. I'm assuming for a new direction and a distance of travel. -If the current value meets some condition when an enemy dies or pot is lifted or dirt is dug, an item will be dropped. Another call determines what is dropped (so one step when you dig and find nothing, two steps if you dig and find something). -Keese call this every other frame so if there are Keese in the screen then chances are manipulating will be difficult while they're roaming around. -Maple calls this once when her shadow appears and once when she appears. She then calls this 15 different times to see what gets dropped. -Moving to a new room does this 256 times regardless of the contents of the new room. I think things like enemy positions and facing direction are decided here. I've yet to find what any values do under different conditions (maple drops, gasha seed items, etc). I DO know that a value of 0x00D8 will dig up a huge rupee. :) I have a little LUA script to tell me what the next relevant values will be.
Language: lua

function DEC_HEX(IN) local B,K,OUT,I,D=16,"0123456789ABCDEF","",0 while IN>0 do I=I+1 IN,D=math.floor(IN/B),math.mod(IN,B)+1 OUT=string.sub(K,D,D)..OUT end return string.sub( "0000" .. OUT, -4 ) end function get_next( now, iteration ) if iteration > 257 then return end next = bit.band( now * 3, 0XFF00 ) next = next + bit.band( bit.rshift( next, 8 ) + bit.band( now, 0xFF ), 0xFF ) if iteration == 1 then print( "Sword swing/shovel use: "..DEC_HEX( next ) ) elseif iteration == 2 then print( "Monster Action/dug up item: "..DEC_HEX( next ) ) elseif iteration == 3 then print( "Dropped Item: "..DEC_HEX( next ) ) elseif iteration == 256 then print( "New Area: "..DEC_HEX( next ) ) end get_next( next, iteration + 1) end local next local now next = 2 --to prevent nil comparison when the script starts while true do now = memory.readword( 0xFF94 ) if now ~= next then print( "Currently: " .. DEC_HEX( now ) ) get_next( now, 1 ) next = now print( "===================" ) end vba.frameadvance() end
I don't know how to clear the console so it's constantly adding text every time the RNG changes per frame (room changes will usually show two or three changes since it's displaying per frame). Hopefully, someone will find this useful.
Editor, Active player (476)
Joined: 5/23/2006
Posts: 361
Location: Washington, United States
That's really great that you located the RNG code! Awhile back, I briefly tried to find out how the RNG worked, but was only able to find the FF94 RAM address (I couldn't find out where in the ROM it was being used). I'm just curious, now - what ROM offset is the starting point of that code? I think this is a major step towards understanding the manipulation in the game. Not that I've done any TASing of OoA/S, but it seems to me that the most useful thing right now would be to "look ahead" in the RNG to sweep out what value would be most useful for a particular room or series of rooms. Any kind of pre-planning would significantly help with the effort of manipulation.
Joined: 5/12/2010
Posts: 38
There are actually two functions that do this. They're identical except one "preserves" the values in the registers it uses. 0x043E: (this one preserves)
push hl
push bc
ld a, [0xFF94]
ld l, a
ld c, a
ld a, [0xFF95]
ld h, a
ld b, a
add hl, hl
add hl, bc
ld a, h
ld [0xFF95], a
add a, c
ld [0xFF94], a
pop bc
pop hl
0x0453: (this one discards hl and bc)
ld a, [0xFF94]
ld l, a
ld c, a
ld a, [0xFF95]
ld h, a
ld b, a
add hl, hl
add hl, bc
ld a, h
ld [0xFF95], a
add a, c
ld [0xFF94], a
If I were to write that in an upper level language, it'd be like:
__int32 RNG_0 = (word*)[0xFF94];
__int32 RNG_1 = (word*)[0xFF94];
RNG_0 = RNG_0 + RNG_0;
RNG_0 = RNG_0 + RNG_1;
(byte*)[0xFF95] = ( ( RNG_0 AND 0xFF00 ) >> 8 ) AND 0xFF;
(byte*)[0xFF94] = ( (byte*)[0xFF95] + (RNG_1 AND 0xFF) ) AND 0xFF;
I'm not sure if that's very clear or not. I don't usually write code like that (I program in VB.NET mostly). I do know that that LUA code that I wrote can predict the future values with accuracy although I'm not sure what all increases it and how much. Maple's interaction is what I'm trying to manipulate now because she won't give me the heart piece and I'm at the final Black Tower. I can't directly confirm, but I have no reason to believe that the RNG functions differently in OoS although the location of the actual generator and the stored address might be different.
Tompa
Any
Editor, Expert player (2215)
Joined: 8/15/2005
Posts: 1941
Location: Mullsjö, Sweden
Pretty nice stuff there. I found the RNG address awhile ago and have been using it a lot since that. I also tried to find a value that will tell you what item you'll get from enemies/pot/bushes etc., but failed doing so. Using your lua will make things a lot better and easier though. So I'll check this out for sure. Hopefully, if I find this being useful enough for the TAS, Swordless will start using it too. Thanks a lot at least!
Joined: 5/12/2010
Posts: 38
I'd like to dive in to this more, but I can't find a good technical document on the structure of a GBC ROM. If I knew where each of the code blocks started I could probably find where the item drop tables are. Can anyone point me to a good doc?
Warepire
He/Him
Editor
Joined: 3/2/2010
Posts: 2178
Location: A little to the left of nowhere (Sweden)
NFITC1 wrote:
I'd like to dive in to this more, but I can't find a good technical document on the structure of a GBC ROM. If I knew where each of the code blocks started I could probably find where the item drop tables are. Can anyone point me to a good doc?
Don't know how much it helps you but each ROM bank is 16 kilobytes (or 0x4000 bytes). Bank 0 (address range 0x0000-0x3FFFF) is always present, the other bank is switchable if the ROM file exceeds 32 Kb in size, the switchable bank have the address range of 0x4000 to 0x7FFF. Tables should be locked to a single bank. Logically functions in bank 0 can carry over into another bank, but functions can probably not carry over between switchable banks. (I have not studied this case a lot though)
Joined: 5/12/2010
Posts: 38
Warepire wrote:
Don't know how much it helps you but each ROM bank is 16 kilobytes (or 0x4000 bytes). Bank 0 (address range 0x0000-0x3FFFF) is always present, the other bank is switchable if the ROM file exceeds 32 Kb in size, the switchable bank have the address range of 0x4000 to 0x7FFF. Tables should be locked to a single bank. Logically functions in bank 0 can carry over into another bank, but functions can probably not carry over between switchable banks. (I have not studied this case a lot though)
I know about that, but that's the memory of the GBC itself. I want to know about the ROM as in which structures are actual code and which ones are tables and maps and graphics and such. I don't know the difference yet. I've just been plowing through block 0 and happened across the RNG. As for functions carrying over, the results can, but one function can't call a function in another block other than block 0 if I'm understanding it correctly.
Warepire
He/Him
Editor
Joined: 3/2/2010
Posts: 2178
Location: A little to the left of nowhere (Sweden)
NFITC1 wrote:
Warepire wrote:
Don't know how much it helps you but each ROM bank is 16 kilobytes (or 0x4000 bytes). Bank 0 (address range 0x0000-0x3FFFF) is always present, the other bank is switchable if the ROM file exceeds 32 Kb in size, the switchable bank have the address range of 0x4000 to 0x7FFF. Tables should be locked to a single bank. Logically functions in bank 0 can carry over into another bank, but functions can probably not carry over between switchable banks. (I have not studied this case a lot though)
I know about that, but that's the memory of the GBC itself. I want to know about the ROM as in which structures are actual code and which ones are tables and maps and graphics and such. I don't know the difference yet. I've just been plowing through block 0 and happened across the RNG. As for functions carrying over, the results can, but one function can't call a function in another block other than block 0 if I'm understanding it correctly.
To find graphics and maps you should look for load instructions pointing to the vram/oam and DMA transfer starts in the code. The source for those loads should be graphics. Also try to look through the rom in tile/map edtors for GameBoy. You can look at the pandocs to find the data structure of tiles and maps. Best way to find the executable code is to basicly just to trace it using a hexeditor and instruction reference or a disassembler. (I suggest a combination of both) What does not appear to be executable code or graphics should be various tables.
Joined: 5/12/2010
Posts: 38
Warepire wrote:
To find graphics and maps you should look for load instructions pointing to the vram/oam and DMA transfer starts in the code. The source for those loads should be graphics. Also try to look through the rom in tile/map edtors for GameBoy. You can look at the pandocs to find the data structure of tiles and maps. Best way to find the executable code is to basicly just to trace it using a hexeditor and instruction reference or a disassembler. (I suggest a combination of both) What does not appear to be executable code or graphics should be various tables.
This has been my approach so far with the exception of tile/map editors. I'll incorporate those in and see what comes out. That's likely easier than try to trace the code. Thanks for the advice.
Tompa
Any
Editor, Expert player (2215)
Joined: 8/15/2005
Posts: 1941
Location: Mullsjö, Sweden
A new Oracle of Seasons WIP for the interested ones. http://www.youtube.com/watch?v=HM-L003sytU This finishes the 4th dungoen, Dancing Dragon Dungeon.
Joined: 3/11/2008
Posts: 583
Location: USA
I'd suggest getting the Bomber's Ring (place two bombs) as a possible time-saver for esp. dungeon 2 (chain-bomb room, face miniboss), but, according to an item FAQ, it is only acquirable in Ages and only Goron Dancing Platinum at that. Instead I'll give you a very strange tip that I accidentally discovered: Hitting Din in the Onox fight does not immediately abort your spin attack, it merely freezes it in place. With this (and, recommended, possibly required?: a Green Holy Ring to not take damage from the electricity, though it still shocks you) you may hit Onox multiple times with a single spin attack, as the frozen-in-place-from-shock causes your sword to stay out longer than his invincibility timer. This probably works other places, but what other fights have an enemy that takes multiple swordspins to defeat with something to shock you that is not that enemy? edit: Pegasus seed use for the Poison Moth was tested, right? Though I think I can see how it wouldn't help, as the time gained by getting hits in faster (when it outpaces your walk-speed) would be then lost in the walk to the door/Element of Season.
Tompa
Any
Editor, Expert player (2215)
Joined: 8/15/2005
Posts: 1941
Location: Mullsjö, Sweden
Yeah, it's known that you could make double hits against Onox. The problem with getting a ring is that it takes a very long time to get. First you need to bump into Maple and manipulate the right ring. Then you'll have to appraise it. There's no way this would be faster. Level 1 sword does 4 damage to him. He starts with 80 HP and once it reaches 40 he goes into his second phase. The double hits that you can do with three hearts would bring his health down to 24. It is possible, by using the sword and Roc's Cape, to hit Onox without touching Din. And as the cape is required for the last phase anyway, this won't be an extra item switch. Using a Pegasus Seed against the Moth would most likely be slightly faster. But it wasn't even tested because there was only one seed left, and using that to run to the tree saves a lot more. Current progress: Inside the fifth dungeon: Unicorn's Cave.
1 2
21 22 23
28 29