Author Topic: Question about the final battle of the game (1 on 1 with sephiroth) vid added  (Read 40371 times)

JordieBo

  • *
  • Posts: 215
    • View Profile
Sorry to double post again but i found this too funny not to post. Well i guess this is what i get for just playing around with stuff i know nothing about. Tried to change Sephiroths general counter and well look what happened! Not what i wanted to see!
 


good job i backed it up haha.

IT'S MISSINGNO!  :-o

ff7rules

  • *
  • Posts: 423
    • View Profile
Sorry to double post again but i found this too funny not to post. Well i guess this is what i get for just playing around with stuff i know nothing about. Tried to change Sephiroths general counter and well look what happened! Not what i wanted to see!
 


good job i backed it up haha.

IT'S MISSINGNO!  :-o

LMFAO hes back oh noes! I actually

Anyway My good friend Hotdog made an amazing discover today which i think has helped us all he found the opcodes for the battles without meaning to!
Recently He found a Gameshark cheat code site for ff7 thought nothing of it. But today hotdog discovered something this list is the battle opcodes! http://viper.shadowflareindustries.com/index.php?doc=ff7enemieshtml hows this work? Well you see for example i will use safer sephiroth he has 2  battles i don't know why look at the code on the left its 039C   Safer Sephiroth Big deal right well guess what Safer Sephiroth-battle ( 00, 9C, 03 ) im sure you will get the idea how it works now and if this has been discovered before sorry i didn't know. So now we have the list thanks to Viper for these codes!
« Last Edit: 2009-02-15 14:54:43 by ff7rules »

ff7rules

  • *
  • Posts: 423
    • View Profile
I have a question about Sephiroths script how do i know which part or code is used for clouds counter when Sephiroth uses cut. I know it will be located in the general counter part aswell which helps is it this byte and offset that controls whether or not cloud counters Sephiroths cut or not?  (0x001E | 60.PushByte(00) post battle i think) im guessing its this, what can i do to change it?

nfitc1

  • *
  • Posts: 3008
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
Actually it's in Sephiroth's Main Script.

Code: [Select]
0x0000 | 12.PushValue(0000)
0x0003 | 02.LoadAddr(2060)
0x0006 | 90.SetAddr
0x0007 | 12.PushValue(0020)
0x000A | 02.LoadAddr(2050)
0x000D | 01.LoadAddr(4060)
0x0010 | 80.MaskSet
0x0011 | 60.PushByte(10)
0x0013 | 40.IfEqual
0x0014 | 90.SetAddr
0x0015 | 12.PushValue(2070)
0x0018 | 02.LoadAddr(0020)
0x001B | 90.SetAddr
0x001C | 60.PushByte(20)
0x001E | 61.PushWord(03BF)
0x0021 | 92.RunCmd

1:
0x0022 | 12.PushValue(2060)
0x0025 | 02.LoadAddr(0020)
0x0028 | 90.SetAddr
2:
0x0029 | 12.PushValue(2070)
0x002C | 02.LoadAddr(0000)
0x002F | 90.SetAddr
3:
0x0030 | 60.PushByte(01)
0x0032 | 60.PushByte(00)
0x0034 | 92.RunCmd

0x0035 | 73.ScriptEnd

This section that I've isolated says
1. set self mask to opponent
2. choose target as self
3. opponent attack self

His death counter will then activate, ending the battle. If you do 0 damage (almost not possible), then his general counter will activate, ending the battle.

ff7rules

  • *
  • Posts: 423
    • View Profile
OH I SEE NOW! thanks alot man im pretty sure i now know what im doing :wink: Also i tried stealing form him and that ended the battle lol

ff7rules

  • *
  • Posts: 423
    • View Profile
Sorry to bother you again but i have a new problem. I added some script to sephirioth and like i expected the file got bigger so i cut down some of the padding. The file says its smaller (6 kb) however when i use scenereader to put it all back it says in Cdmage the file will be trundicated. Is there anyway around this as i thought deleting some of the padding added by the script i added would of worked? Also this IS sephiroths script right? I'm sure it is, if not I'm clueless.

http://www.imagenerd.com/show.php?_img=seps_script-VPD3r.png


EDIT: Problem solved!!! I have to delete the exact amount of FF from the bytes i added no more no less hopefully have a vid of the new final battle soon.

« Last Edit: 2009-02-21 20:40:21 by ff7rules »

ff7rules

  • *
  • Posts: 423
    • View Profile
Sorry to triple post but i have some news on sephiroth. I have managed to do 2 things i wanted to do 1 make it so he dies like a regular enemy which is good and make it so he doesn't use cut. I'm now in the process of wanting to give him Ultima and Deen. Gjoerulv (sorry if i spelt your name wrong) has been helping me alot with this so big thanks goes out to him and everyone else who's helped me thus far. I have a new problem and i know exactly why it is i think, the headers are wrong again. I thought i got how you worked them out but i guess not. Anyway back to the sephiroth script i have it so i want to cast either deen or ultima at random but it doesn't work he just does nothing just like Cactuar did. So thought id post what Ive done so far and see if anyone can tell me if I'm doing the right things or not. I will produce a video of what i have done so far if it is requested :)

http://www.imagenerd.com/uploads/sepsai-9QzOy.png

http://www.imagenerd.com/uploads/sephelp2-i3xdi.png

This is all confusing stuff to me but I'm gonna do it.
« Last Edit: 2009-02-21 20:51:07 by ff7rules »

nfitc1

  • *
  • Posts: 3008
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
#1. Do not multi-post unless the topic you're posting in is NOT on the first page of topics.

#2. That first image isn't even showing the same scene. If that's OK then don't worry about it, but I thought you wanted to change the final 1-1 battle. If that's the case it'll need to be in the same scene.


Yes your headers are wrong. You need each section to point to the byte AFTER the previous section's 73h.

20 00 50 00 91 00 5B 00 FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF A4 00

Your script is all wrong too. You've got a jump in there to script address 0x8601?! You also have an absolute jump back to the beginning of the script. Basically, your jumps are all wrong.
Jumps are, unlike the header, script-relative addresses stored in Big-Endian (Most significant [greatest] value last). It's better for you to write all the script out and see the actual addresses within the script. Those are the addresses you'll want to jump to.
ex:
Init Script:
0x00: 12 60 20
0x03: 10 A0 20
...
Main Script:
0x00 12 70 20
0x03 10 A0 20
0x06 60 01
0x08 80

These are the addresses you'll want to jump to. Not "jump this many bytes ahead" or "jump to this address within the collective script". You can't jump scripts and do not create a loop you can't get out of. You put that "Jump to beginning" in your init script. Bad idea. The battle will never get farther than Sephiroth performing something over and over. That is assuming, of course, that it gets past that "JZ 0x8601".
I don't really have the time at the moment to attempt to correct it. Just know for now that it's wrong.

ff7rules

  • *
  • Posts: 423
    • View Profile
#1. Do not multi-post unless the topic you're posting in is NOT on the first page of topics.

#2. That first image isn't even showing the same scene. If that's OK then don't worry about it, but I thought you wanted to change the final 1-1 battle. If that's the case it'll need to be in the same scene.


Yes your headers are wrong. You need each section to point to the byte AFTER the previous section's 73h.

20 00 50 00 91 00 5B 00 FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF A4 00

Your script is all wrong too. You've got a jump in there to script address 0x8601?! You also have an absolute jump back to the beginning of the script. Basically, your jumps are all wrong.
Jumps are, unlike the header, script-relative addresses stored in Big-Endian (Most significant [greatest] value last). It's better for you to write all the script out and see the actual addresses within the script. Those are the addresses you'll want to jump to.
ex:
Init Script:
0x00: 12 60 20
0x03: 10 A0 20
...
Main Script:
0x00 12 70 20
0x03 10 A0 20
0x06 60 01
0x08 80

These are the addresses you'll want to jump to. Not "jump this many bytes ahead" or "jump to this address within the collective script". You can't jump scripts and do not create a loop you can't get out of. You put that "Jump to beginning" in your init script. Bad idea. The battle will never get farther than Sephiroth performing something over and over. That is assuming, of course, that it gets past that "JZ 0x8601".
I don't really have the time at the moment to attempt to correct it. Just know for now that it's wrong.

Thanks for all this help NFITIC1 and sorry about posting multiple times i won't do it again. I got really confused with the "86 01" bit i thought i had to put the offset where the attack ID was but now i know thats definitely not the case lol. I see this is gonna be one of those things that takes months to grasp, All i get now is a black screen no battle i can't understand why though should i quit trying and try something else? Just a bit dishearted by all this thought i really had it  :|

gjoerulv

  • *
  • Posts: 1225
  • me
    • View Profile
    • My Youtube
I think the problem might have been that you jumped to the the offset in the scene as a whole, not starting counting at the beginning of the section. The 1st byte of each section must be treated as offset 0x0000 when calculating a jump. If you understand this it's pretty obvious you where miles of with 0x8601. No AI is that long. The jump can't find the location 0x8601.

And you really shouldn't getting into loops. Unless you have some mechanic that checks if the loop should end you should try it. But this loop wasn't supposed to be was it? :P

ok enough of that.

1st as I see in the 2nd picture you shouldn't insert ultima between Cut and Done-in. Insert it at the end. Otherwise Ultima will get data from Done-in and Done-in will get data from ultima. Always store the attacks in the same order in attack data, attack IDs and attack names.

2nd why does the AI start at another offset at edited one?

3rd offset 0x1218 in the edited one needs to be A0h, not 0Ah. 20A0h flopped is A020h. (20 A0 -> A0 20)

There are other issues (where does setup end for instance).

Here is some image help:



ff7rules

  • *
  • Posts: 423
    • View Profile
Hey man thanks for these pics really helped me out. Ive just literally been playing around tonight in hex editor and managed to do something pretty funny. Sephiroth uses cut on cloud. Cloud then counter attacks himself the script isn't finished yet though so i was just testing it really see if the headers worked and such. Heres what i have so far Only thing I'm not sure about is IfZeroGoTo bit but ill post a video of cloud owning himself tommorrow. Its 4 am and I'm tired  :lol: thats how decicated i am to this.

Oh yeah and......

 
Quote
I think the problem might have been that you jumped to the the offset in the scene as a whole, not starting counting at the beginning of the section. The 1st byte of each section must be treated as offset 0x0000 when calculating a jump. If you understand this it's pretty obvious you where miles of with 0x8601. No AI is that long. The jump can't find the location 0x8601.

That was just me been a rtard i didn't actually realize i had done that until i looked tonight. I added Ultima right after Done-In but haven't got sephy to use it yet I'm looking forward to what strange animation he will have when he uses it. He might just use cut. He might break dance he might just stand there i don't mind long as its a good fight.

http://www.imagenerd.com/uploads/sepscriptwip-p8vgU.png

I'm sure ill have done something wrong but hopefully it won't be as critical as last time :-P

If the headers are wrong it might of been because i was tired either that or I'm dumb. I now know its after 73 then the 12 which you read from the offset like Gjoerulv showed in his pics. sorry if i didn't explain that very well.

« Last Edit: 2009-02-22 03:02:48 by ff7rules »

gjoerulv

  • *
  • Posts: 1225
  • me
    • View Profile
    • My Youtube
You're missing 4 bytes. The 1st pointer must always point to offset 0x0020. Insert FF FF FF FF before AC 00. As it is now your setup starts at 0x0027 which should be main. The header is always 32 bytes long (or 20h). As it is now, the bytes from 0x1C to 0x26 are useless.

The inside jump doesn't make any sense, It simply jumps to the next byte. Now Seph may cast Ultima (1/8 chance), attack Cloud and then Cloud will attack himself lol. You need to swap the bytes at 0x66 and 0x67 to 12 70 20 (not 12 20 70), then Cloud will attack Sephiroth again.

If you make the AI exactly like in my pics you won't have any probs I hope.

ff7rules

  • *
  • Posts: 423
    • View Profile
You're missing 4 bytes. The 1st pointer must always point to offset 0x0020. Insert FF FF FF FF before AC 00. As it is now your setup starts at 0x0027 which should be main. The header is always 32 bytes long (or 20h). As it is now, the bytes from 0x1C to 0x26 are useless.

The inside jump doesn't make any sense, It simply jumps to the next byte. Now Seph may cast Ultima (1/8 chance), attack Cloud and then Cloud will attack himself lol. You need to swap the bytes at 0x66 and 0x67 to 12 70 20 (not 12 20 70), then Cloud will attack Sephiroth again.

If you make the AI exactly like in my pics you won't have any probs I hope.

I copied everything you did from the pic you showed me just to see if it would work and i get the same result as before sephy does nothing just stands there. Maybe hes not meant to cast magic  :lol: At least he doesn't die in one hit now lol. Also in SceneEdit i can't view his script its just blank  :?
« Last Edit: 2009-02-22 13:10:30 by ff7rules »

gjoerulv

  • *
  • Posts: 1225
  • me
    • View Profile
    • My Youtube
Make sure the pointers at offset 0xE80 are correct. You know, where the whole AI section of the scene starts.
You could send me that scene and I'll look into it. Oh and you should add Sephiroth's 0x402C = 1h in the setup. I forgot that. And, just for fun, you could try the other body animation on the new attacks. The 04h one; see if anything happens.

ff7rules

  • *
  • Posts: 423
    • View Profile
I have no idea how to add his other body animations for his magic attacks but heres the file of what Ive done so far http://www.megaupload.com/?d=O9J0T9UZ If i made any mistakes could you let me know i just wanna learn everything i can thanks man. EDIT: changed the link it was the wrong version.

How does the headers work at 0xE80 in what way are they connected with the AI?

06 00 6C 03 FF FF 20 00 7F 01 FF FF 2B 03 FF FF
 Thats what i have
« Last Edit: 2009-02-22 15:08:32 by ff7rules »

ff7rules

  • *
  • Posts: 423
    • View Profile
For some reason post repeated twice  :? ill edit this 1 when i next reply unless theres away to delete it?
« Last Edit: 2009-02-22 15:13:17 by ff7rules »

nfitc1

  • *
  • Posts: 3008
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
Those three Words (byte-pairs) are pointers to the header of the monsters' AI scripts. The first one should always be 06 00 and the second one will point to the address of the next monsters' AI relative to 0xE80. So if second script starts at 0x1200 and there's not a third monster then these three Words will be:
06 00 80 04 FF FF because E80 + 480 = 1200 (in hex of course). Make sure they're pointing to the beginning of the monster's AI header too (the first byte of the init script even if that monster doesn't have an init script).

ff7rules

  • *
  • Posts: 423
    • View Profile
Ah i see now its like how many bytes it needs to jump to get to that start of the AI? 0000 = Start of headers for that enemy like in Gjoerulvs pic? If thats so how the hell do you work out E80 + 480 = 1200 does E80 have a special number or something or do you literally have to count how many bytes seprates em?

nfitc1

  • *
  • Posts: 3008
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
0xE80 is always the address of those pointers in each scene. So the first enemy's AI always starts at 0xE86. These are going to be absolutes.

gjoerulv

  • *
  • Posts: 1225
  • me
    • View Profile
    • My Youtube
ok, quick feedback on the scene. You did not add the attacks (Deen and Ultima) to Sephiroth's data, but you did add some extra IDs to the attack ID list and names including Deen which was already there, so I removed 'em. Deen was also added at the end of Attack data (which I also removed). You don't have to add an attack to the lists if it's already there.
I added 04h at offset 0x38A and 0x38B to tie an animation to the attacks. Look at 0x39C - 0x39F to see the attack ID I added there. (talking offset now I mean the scene as a whole, not just the AI). The animation added are the same as Sephy's done in lol, but You can change 'em back to 03h to use the Cut animation (offset  0x38A and 0x38B).

The pointers at 0xE80 was correct but Sephiroth's header was again messed up. The header is always 32 bytes long, or 20h, and need to start where those main pointers point at (the ones at 0xE80). I think you thought correctly, but the sections start offsets was all mess up because of the extra bytes at the start.

Here is the scene http://www.megaupload.com/?d=R18YZX32

ff7rules

  • *
  • Posts: 423
    • View Profile
ok, quick feedback on the scene. You did not add the attacks (Deen and Ultima) to Sephiroth's data, but you did add some extra IDs to the attack ID list and names including Deen which was already there, so I removed 'em. Deen was also added at the end of Attack data (which I also removed). You don't have to add an attack to the lists if it's already there.
I added 04h at offset 0x38A and 0x38B to tie an animation to the attacks. Look at 0x39C - 0x39F to see the attack ID I added there. (talking offset now I mean the scene as a whole, not just the AI). The animation added are the same as Sephy's done in lol, but You can change 'em back to 03h to use the Cut animation (offset  0x38A and 0x38B).

The pointers at 0xE80 was correct but Sephiroth's header was again messed up. The header is always 32 bytes long, or 20h, and need to start where those main pointers point at (the ones at 0xE80). I think you thought correctly, but the sections start offsets was all mess up because of the extra bytes at the start.

Here is the scene http://www.megaupload.com/?d=R18YZX32

Thanks NFITC1 for that info i had no idea that was the case. GJ i tried that scene out and well something really werid happened i either attack sephiroth with braver then he cut me twice then he like does his done in animation but drops his sword and flys away (no joke) Then i get Game Over ill have alook at it now see if i can figure out whats wrong thanks for doing having alook at it i guess its still trial and error for me still oh well :)
« Last Edit: 2009-02-22 18:27:53 by ff7rules »

gjoerulv

  • *
  • Posts: 1225
  • me
    • View Profile
    • My Youtube
lol would love to see a video of it!

But you know there is an extra scripts starting at 0xC80. This may f**** up the battle if you want it normally.

ff7rules

  • *
  • Posts: 423
    • View Profile
Video coming up! ill edit it in when its uploaded

EDIT Video is uploaded waiting for it to process.
 
Vids done http://www.youtube.com/watch?v=wASMd1DsHpM

EDIT: After looking at the scene in Hex editor I'm really confused. It looks like you deleted all the other headers except the 1 to tell it to go to done-In animation?
As far as i can see heres how it goes

Use cut if attacked or wait an amount of time to use cut anyway
after cut use done- in then game over instead of end the battle. Is it just done- in = end of the battle no matter what? i will try changing it to cut and let you know what happens.

EDIT: Some bad news I'm afraid i now know whats happening after changing done-in casting magic to cut i see whats going on. I had 20 fights in a row 6 of them Sephiroth just died the other 4 he used cut over and over again. But then he did actual damage and killed me in one swoop I'm guessing that damage was "Deen"(hit me for 1565) and another time hit me for alot more(Ultima). So that's it folks sephiroth can only use the damage value in his cut. No magic animations since cut is classed as a "cut" attack if i was to change this might i get a different result? I will try now.

Out of luck sephiroths Cut is not a cut attack.

Thinking what about the other sephiroth the one from the flashback would replacing the two be hard?

Well with what i got to work with heres a vid http://www.youtube.com/watch?v=XRj9l0ErTM0
« Last Edit: 2009-02-24 03:07:09 by ff7rules »

nfitc1

  • *
  • Posts: 3008
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
Yeah, he doesn't have casting animation, does he? Unfortunately I don't know much about animating these figures so I couldn't answer this, but wouldn't it be possible to "borrow" the skeleton from the Sephiroth in the flashback to make a casting animation?

Other than that the video looks great. Sephiroth seems a good challenge when 1-1.

Personal opinion; You should add the following to Sephiroth's Death Counter script:

12 60 20
02 20 00
90
12 70 20
02 00 00
90
60 14
61 86 00
92

That will force Cloud to use Omnislash when Sephiroth's HP are 0. :D Then he can perform his normal dying animation. Well, I guess the only set-back to this is that Cloud MIGHT do two Omnislashes in a row. One via a command by the player, the other forced by Sephiroth's Main Script...

ff7rules

  • *
  • Posts: 423
    • View Profile
Yeah, he doesn't have casting animation, does he? Unfortunately I don't know much about animating these figures so I couldn't answer this, but wouldn't it be possible to "borrow" the skeleton from the Sephiroth in the flashback to make a casting animation?

Other than that the video looks great. Sephiroth seems a good challenge when 1-1.

Personal opinion; You should add the following to Sephiroth's Death Counter script:

12 60 20
02 20 00
90
12 70 20
02 00 00
90
60 14
61 86 00
92

That will force Cloud to use Omnislash when Sephiroth's HP are 0. :D Then he can perform his normal dying animation. Well, I guess the only set-back to this is that Cloud MIGHT do two Omnislashes in a row. One via a command by the player, the other forced by Sephiroth's Main Script...

Thanks for this idea! Im definetly gonna add this as he has the same HP as Ruby Weapon anyway so it wouldn't matter if he did two limit breaks. Also i think it would make the fight all the more epic if i added a dialog box just before he uses the last omnislash. But i dunno what he could say i don't wanna ruin the whole moment by saying something cloud wouldn't say or sephiroth wouldn't say remember he returns in advent children so could refer to that? If people think this is a silly idea i won't do it im gonna add what you said to do now though NFITC1 thanks.  :wink: If its possible to "borrow" the flashbacks animation for casting magic im all for it if someone knows how to pull this off.

I tried the script you posted the battle works but when hes at 0 HP i got Data Error sceen 925 code 32 i might know why this is though ill edit this post if what i try works.
« Last Edit: 2009-02-24 14:44:53 by ff7rules »