Posts for Lil_Gecko

1 2
20 21
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
Some changes compared to the video. - First fight against Steiner. The fight end when Steiner has lost 169 hp. Now Zidane max damage is 92, Cinna 32 and Blank 46 so a total of 170. In order to make Cinna deal 32 damage we need : [3rd byte of the RNG] mod 3 = 1 AND [4th byte of the RNG] mod Strength = 7. It took a bit of time to have the RNG in the proper position but even with that defeating him with only 3 hits is faster, so this was changed. - After the Plant Brain, Zidane will now be revived in order to make it to level 2 and gain 26 more hp well needed for Black Waltz 1. At the moment I just defeated Black Waltz 1 and Sealion with a Trance Bar at 242/255, so only one hit away. Meaning Black Waltz 2 is gonna be ended in only 2 little rounds :)
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
Some (very little) news. The "Escape" trick (Pressing R1+L1 after selecting a target to skip the characters animation) I just saw on DarkKobold's run of FF8 is also working here. So some more frames saved in the first fight. No luck with the skipping one turn of the ennemies on the King Leo fight. Out of the 600 next positions of the RNG, only 3 works for that and they all involve fake magic use so they take more time than having the 3 ennemies using physical attacks. Anyway, back to gaining control of Steiner 260 frames ahead of the test run.
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
Zanoab wrote:
Sorry for not posting in awhile (college work started piling up) but nice work. The desyncs mysteriously stopped and nothing strange seems to be happening. I think skipping the Moonstone might be a good thing. I only see it helpful against Black Waltz 2 and Black Waltz 3 (second fight) which could be manipulated. Lua can read/write to files. local SomeVariable = io.open(FileLocation,"a") SomeVariable:write(StringToWrite) SomeVariable can of course be anything. You should use "a" for open type because you want to add to the end of the file (or create if it doesn't exist yet). Using "w" will clear the file everytime (which means you will have to move the log elsewhere before restarting the script) and "r" only reads data from the file (you can't write). If nobody has done it yet, I'm going to take a look at how the RNG affects initializing battle data (ATE, etc.). Maybe I can come up with something interesting.
Ah thanks for the lua thing, it's gonna be really helpful. About the Moonstone, I'm starting rethinking about it. I'll have to time it. As the Trance Bar is filled when it reaches 255 and it's increasing by [Spirit-[RN*7]] Mod Spirit everytime you get hit (RN is the 6th byte of the RNG), the minimum number of hits before you can Trance with 24 Spirit is 12. So with enough luck manipulation, Zidane will be able to Trance right at the start of Black Waltz 2. As for the RNG affecting initializing battle: The Full ATB of characters or ennemies is determined by : (60-Speed)*160 Starting ATB : 2 differents RNG. The first one for Ennemie's ATB a few frame after the black screen. The second one for your characters ATB some hundreds frame later. On each one the first 4 bytes are used. 1st byte = ennemy 1, 2nd byte = ennemy 2 and so on... Then using thoses RN the starting ATB is calculated by : [RN*257] Mod Full ATB Now as the Speed only influences the length of the ATB bar and not how fast it fills (which is 14 per frame at full speed with normal status), there's some interesting stuff that can be done and way easier to calculate. For exemple in the second fight, King Leo, Zenero and Benero have an ATB length of 6560 while Zidane and Blank have 5920. So if we can have Zidane or Blank attacking first and then a second character get is ATB filled while one of the ennemy's ATB is still under 630, we can skip his turn using the ATB on Wait trick. For exemple I had this configuration : Benero = 96 and Zidane =5654 , Blank = 5564 Zidane attacks first, Blank stop the ATBs (Benero is now at 452), Zidane gets his second turn before Benero. Unfortunately this configuration makes King Leo use Poly and wastes too much time but I'll keep searching. EDIT : Yep, the Moonstone will be skipped.
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
Well as for now I'm stuck at the first battle, with days and days of testing. I found a few days ago that pressing X, or X+circle or L1+L2+R1 and so on with all kind of key combinations on certain frames before and after the Squaresoft logo at the beginning also change the list of random numbers. You might think it's easy and just look at the random table after trying a combination but every combination has an influence on the number of lag frame during the intro. So when you try a combination you have to watch the entire intro to know what the ATB will be. To add to the difficulty, having the ATB set properly (meaning one character act right away while the ATB of Cinna is fuller than Baku's one) isn't enough as you need Cinna to be able to steal the Mage Masher without too much delay (I'd say one move of the pointer at most). Yesterday I've written a lua that try different key combination, goes to the battle and print the ATB, I've started it before going out and when I came back, I found out that psxjin had crashed and I couldn't see any of the results. Does anybody know a way to save the results somewhere after every try so I can still have the results even if it crashes ? Also, even if I'm not sure it's gonna be soon that I'll be back to the World Map, route planning after that will be really appreciated. EDIT : Nevermind, after countless tries, I finally got the ABSOLUTE perfect first battle (saved 134 frames over the testrun). I also removed the HERE icon. The other fights being WAY easier to manipulate, I should be back to the world map within a week.
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
Well, remember it's just a test for now and very far from an optimized run. As I'm understanding more and more about lua and how the rng works I'll have to restart from the beginning. For exemple, delaying the press on "New Game" by 14 frames instead of 3 is saving around 100 frames on the first fight (so around 90 total) and it's still not perfect. About the moonstone, it is slower to take it than to just use luck manipulation on the Black Waltzes and beast killer is provided with the Leather Wrist stolen in the evil forest but since there's a long time before I can obtain shell elsewhere, it will probably save time in the long run so I think I'll go ahead and take it. Thanks for that.
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
You have to use psxjin 2.0.1, otherwise, with psxjin 2.0.2 for exemple, it will desync at the exact moment you said.
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
Thanks. The Leather Wrist is gonna be enough for Zidane to make critical hits as shown right away in the Baku fight. So here it goes : up to World Map. http://www.megaupload.com/?d=EL4NEXQF Ideas for the next parts ? Things I've missed I should have take ?
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
I just wrote a lua program that let me know how to make critical hits and here's what I got. If Spirit is between........................................Random Number needed in the 4th byte 18-23.............................................................No critical hit possible 24-27.............................................................079 086 093 100 193 200 28-31.............................................................086 093 100 165 172 179 186 193 200 32-35.............................................................079 086 093 100 36-39.............................................................079 086 093 100 151 158 165 172 179 186 193 200 40-43.............................................................No critical hit possible 44-47.............................................................065 079 086 093 100 151 172 186 193 200 48-50.............................................................079 086 093 100 151 158 165 172 179 186 193 200 So my question is where would be the earliest place I can find something to boost the spirit of my characters ?
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
Actually, if I'm reading it correctly it's just saying you what cards the opponent is gonna have if you wait X frames before starting the game, for X going to right away to a 255 frames delay so you'll know on what frame to press X to have the card you want.
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
exileut wrote:
I must be really dumb. It took me 6400 frames (54 increases of the pointer) before a value fell into the 0-15 range. I did indeed steal the mage masher making me think I partially understand this. You guys seem to be doing it in 2 seconds max. I have RAM watch on address 0007B720. The value of that address (0007B720) at the start of my battle is 8007B857. I open RAM Search. I check the "Greater than or equal to" option button. (to get the full table of numbers... I think) Under "Specific address" I type 7B857. My results show: Address (0007B857). Value (11). . . My next (0-15) value isn't until Address (0007B88D). Value (0). Is this list static and created when I start a new game? Is my only option to find ways to increase the pointer faster? EDIT: After watching your input file and staring at all kinds of memory viewers I realize I have no clue what I'm doing.
Actually you did everything right. You just had a different list of numbers than me, and your list was pretty bad for stealing the Mage Masher. What numbers are going to be in the list is determined based on which frame you pressed "New Game". Just delaying the moment you pressed new game by one frame is gonna give you a whole new list of numbers which may result on a faster steal. If not try delaying by 2 frames and so on. EDIT : I've redone the beginning using a 3 frames delay before selecting "New Game". The list of random numbers was WAY better. The first fight is now faster and better looking as the Masked Man only use his turn to kill Cinna. The second battle is also faster as Zidane can act right away and the ennemies still don't use magic. A few frames are also gain on the sword fight by having more left and right that are slightly faster. I think this one is good enough to start with. http://www.megaupload.com/?d=BCH9TXFY
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
Dada wrote:
Lil_Gecko, could you send me your movie file? I presume you're using the NTSC version (a CD-ROM version identifier would be nice)? I'd like to give this a try to see if I get the same result and if I can fix it. Also, I presume you're using PSXjin?
Thanks Dada. I'm using psxjin 2.0.1 The version I'm using is SLUS-01251 Here's the movie : http://www.megaupload.com/?d=XLJW6GQ9
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
I have to admit I'm kinda confuse with your desync problem. I don't know anything about emulators so I can't help with that but I've now tried for myself to play 2 differents movies on 3 differents computers over and over, and I always got the exact same lag frames and RNG, no desync at all. Do you use the latest version of psxjin ? Edit : I don't know anything about lua either but I hope that is going to help you solve your problem. Also I've made a little test run up to the sword fight : http://www.youtube.com/watch?v=c2Px_LUaivA and the sound is sometimes really annoying. Is there any way to correct that even if it's just for the encode and not while playing ?
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
DoctorJohn wrote:
Done uploading yet? Its been 3 days....
http://tasvideos.org/forum/viewtopic.php?t=11132 Submission + encode here
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
Well it's not exactly that, it's just that I don't have enough knowledge of the game to know what strategy would be faster, what item I should pick to have the more powerful characters and so on. So yeah I could probably make a TAS of it, but it would be extremely far from optimized. About random battles : Every X frames (X depending on what place you are) the game will perform 2 checks - Are you moving or not ? If not, obviously nothing happened and the game continues normally. If you are then a second check is performed. - We have got 3 values here : * Distance variable => it increases everytime you move and can be find at 7AE50 when you are on the world map and at 7AE4C everywhere else. * Location variable => the probability of a random encounter on the place you are. It's located at 7954F * Random number => As seen on the previous post. Still the 3rd byte that is being used for that purpose. Now that we got those 3 values, here is the formula (thanks to o I O I 00 I O I o from gamefaqs for that) : if (Distance variable * Location variable)/8 > Random Number then you got a battle. But honestly, as distance variable and random number will change constantly, it would be impossible to optimised the "avoid random battles" without a lua script doing it for you.
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
exileut wrote:
Having the ATB on wait makes sense for manipulating enemy commands. When I was testing this last year I tried stealing on every frame for 10 seconds and never got the correct item. It didn't seem to matter what the pointers address value was. I'm curious how anyone was able to steal the mage masher at all. I think about 100 people have done a test run of the first battle.
When you press X to choose the target of your steal attempt, the game will wait 73 frames then it will look at a random number to choose what object you will steal. If this number is 0 you steal the very rare item. If this number is between 0 and 15 you'll steal the rare item If this number is between 0 and 63 you'll steal the normal item Otherwise you'll steal the common one. The pointer at 7b720 gives you a 4 bytes adress on the table of random numbers. The 3rd byte of this adress is the number used for the stolen object. Let's take an exemple. I want to steal the Mage Masher. It's a rare item so I'll need the random number to be between 0 and 15 (0 can be included since the Masked Man doesn't have a very rare item). Now I'll look at 7b720 to see where the pointer is on the table. Let's say it gives me 8007b866. So I go to Memory Search and go down to 7b866 and start to browse the table to find what next random number is between 0 and 15. I find 5 at the adress 7b871. Since I need this adress to be the third byte of the adress pointed by 7b720, I now know that I'll need the value 8007b86f (7b871 - 0x2) in 7b720 to steal the Mage Masher. Also remember that you'll need this value 73 frames after you've pressed X to choose the target of your steal attempt. To summarize : Find the next number in the table that is between 0 and 15. Substract 0x2 to its adress and you got the value you'll need in 7b720,4h Go back to your game and find on which frame 7b720,4h will have that value using Memory Watch. Substract 73 frames and you got the first frame where you can press X to choose the target of your steal attempt and steal the Mage Masher. Finally, I've tried to be the more clear possible but my english isn't very good so excuse me if I wasn't.
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
exileut wrote:
Hey get back to ff8 :) The address I was watching was 0007B720. My first frame of battle input is 10899 and the value is 87. My battle is completely different than zanoab's. Taking actions or the enemy taking actions advances the value. As does waiting. You're right about the character switch button not advancing the value. I don't even know what that value signifies but more addresses would be helpful.
0007b720 is the adress of a pointer. it's 4 bytes and in hexadecimal. When you start the game its value should be 8007b724. Then from 7b724 to 7b92f it's a table containing 523 numbers that will be used for the random purpose. When the game needs a random number it will look at 7b720 and will go to the adress corresponding to that value. For exemple if the value of 7b720 is 8007b724, the game will use the numbers stored at 7b724 , 7b725 , 7b726 , 7b727 as random numbers. If 7b720 is 8007b7d0 it will use 7b7d0 , 7b7d1 , 7b7d2 , 7b7d3, and so on... The value of 7b720 increased by 1 every X frames. I'm not sure how exactly X is being calculated but during FMV, and when your in the menu X=0 and the RNG is freezed. In the world map X=1. As far as I can tell there is no way to make it moves faster or slower. When 7b720 reaches the value 8007b92e its value is reset to 8007b724 and all the numbers stored in the table are changed then the process described above restart. So that's why the ATB has to be put on WAIT style, so you can delay the moment the ennemy is taking its action and make it use a different RN, where not in WAIT style no matter what you do it'll always make the same move.
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
Zanoab wrote:
PSXjin seems to have inconsistent lag frames and I have no idea why. At the first real ingame input, the lag frame counter could be anywhere between 564 to 575. When I recorded the first battle, the lag counter was in the upper portion but when I replay the movie, the RNG would be 2 samples slower which results in a different battle.
That's strange. I've tried to replay the same movies many times on two differents computer and the movie synced perfectly everytime. Same lag frames, RNG changing on the same frame everytime. So in my case, psxjin answered all the desync issues. But I still got the problem of all characters, chocobo, zeppelin,... being white on the world map as shown above. And of course ATB as to be put on "Wait" style for luck manipulation (RNG will still move even if the ennemy's ATB bar is on wait. Possibility to hit the ennemy twice before he acts, .... )
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
DarkKobold wrote:
PSXjin is the answer.
Well I've got more graphical problems with PSXjin. It lags a ton on my computer and I got the same problem on the world map (characters, chocobos,... are all white) I know it's probably just a simple thing to do on the Graphic configuration but I can't find what to do to fix this.
Lil_Gecko
He/Him
Experienced Forum User, Published Author, Player (94)
Joined: 4/7/2011
Posts: 520
Hi. I have started a any% TAS of Final Fantasy IX a while ago and got some questions about it. The only way I've found to have the movie synced everytime is to record and play with No Sound plugin. Others SPU just messed the RNG and make your movie desync everytime you'll need a random number. So is a TAS with no sound acceptable here ? Second problem : When playing with PCSX-rr or PSXjin I got this on the world map : [URL=http://img96.imageshack.us/i/ff9worldmap.jpg/][/URL] while playing with pSx v1.13, everything is fine. Any idea how to correct this ? Finally, I'll need help with lua script since I don't know anything about it. I would need a script that does : From a savestate : - Force a value x in the address A1 and a value y in the address A2 - Press X - Move forward for z frames. - Get the value in an address A3. For y = 0 to 65535 If possible having the results in a list so I could quickly check what value of y gives what value in A3 it would be perfect. Anyway, thanks in advance.
1 2
20 21