Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Karifean

Pages: 1 [2] 3
I seriously do not get how this works. As far as I can tell, there are two different lines that end up storing another enemy in a variable:

Code: [Select]
LocalVar:00XX <-  (AllyMask.EnemyID == ???)


LocalVar:00XX <-  (BitCount(Self.FormationNumber) == ActiveMask.FormationNumber)
LocalVar:00XX <-  (LocalVar:00XX.EnemyID == ???)

Both of them are used quite a bunch of times. The Rufus battle uses both; Rufus uses the top version, Dark Nation uses the bottom version. And yet, I can't quite see through it. Sometimes it randomly stops working, especially when using "manipulation" - as in changing the Self variable for a moment to have another enemy execute an attack. And what is does that line in the middle actually do?

To give a more concrete example, I have modified Dark Nation to use a custom skill (ID 03E9h/1001) on Rufus if it dies and Rufus is still alive. The following code comes into play:

Dark Nation's Pre-Battle Script:

Code: [Select]
0x000LocalVar:0020 <-  (BitCount(Self.FormationNumber) == ActiveMask.FormationNumber)
0x014LocalVar:0020 <-  (LocalVar:0020.EnemyID == 68)
0x022TargetMask <- AllyMask
0x029Perform("Reflect"[0011], EnemyAttack)

and Dark Nation's Death Counter Script, naturally:

Code: [Select]
0x000 If ( (LocalVar:0020.Status:Death == 0) )
0x000 {
0x00D TargetMask <- LocalVar:0020
0x014 Perform(1001, EnemyAttack)

And yet, Dark Nation did nothing. How come?

Just noticed what may have been the problem. In your code, you set the address 4024 of all the Pyramids to 0. That adress is the "MainScriptActive" flag. I on the other hand have been setting address 4023, the "Enabled" flag, to 0.

I'll try it and see if it's the crucial point.

Edit: Indeed it was. This is the final Death Counter script I used:

Code: [Select]
0x000Self.Status:Haste <- 0
0x00ASelf.Status:Regen <- 0
0x014TargetMask <-  (LocalVar:0020.FormationNumber == 0)
0x022TargetMask.Flag:MainScriptActive <- 0
0x02CTargetMask <-  (LocalVar:0020.FormationNumber == 1)
0x03ATargetMask.Flag:MainScriptActive <- 0
0x044TargetMask <-  (LocalVar:0020.FormationNumber == 2)
0x052TargetMask.Flag:MainScriptActive <- 0
0x05CTargetMask <- LocalVar:0020
0x063Perform("Delete Pyramids"[0197], EnemyAttack)

Delete Pyramids is now simply (Report), but with the target selection Sega posted and the Shout element. That way, the only way the player can put the Death weakness to use is with Blade Beam. Could've also done it with a Death weakness to a status effect, but it's fine.

For some reason, I'm unable to reproduce it. I don't know why, it just won't work.

The Death Counter script now looks like this:

Code: [Select]
0x000Self.Status:Haste <- 0
0x00ASelf.Status:Regen <- 0
0x014LocalVar:0000 <- 0
0x01A If ( (FlagBit(LocalVar:0000).Status:Imprisoned == 1) )
0x01A {
0x028 Display String: "imprisoned enemy"
0x03A TargetMask <-  (LocalVar:0020.FormationNumber == LocalVar:0000)
0x049 Perform("Delete Pyramids"[0197], EnemyAttack)
0x04F TargetMask.Flag:Enabled? <- 0
0x059LocalVar:0000 <- LocalVar:0000 + 1
0x063 If ( (LocalVar:0000 >= 3) ) // Else goes to 0x01A
0x063 {
0x06C TargetMask <- Self
0x073 Perform("(Report)"[0164], EnemyAttack)

What's strange is that the test message "imprisoned enemy" is displayed correctly, but Reno shows no signs of using his ability at all. The If query also works as the message is not displayed if no character is trapped when Reno dies. The ability also seems to work since I had him use it on himself in the Pre-Battle script and he did show his hurt animation - which he doesn't do in the Death Counter. It's as if for some odd reason he just doesn't use the ability at all. And as a result of that the battle doesn't end. (It does if there's no imprisoned enemy). Actually, since the Pyramid becomes untargetable, he might even be using the ability, but he neither visibly does his hurt animation, nor does the battle end. Then again, that is probably just because of the Enabled=0 line. I don't get it.

The ability itself has Attack Damage Type 40h (also tried 42h, doesn't seem to matter) and is Shout-elemental but besides also being targetable is a clone of the (Report) move. I also tested giving Reno a Shout Death Weakness and he DID die when using it on himself so yeah, no problem there.

And simply setting HP to 0 didn't work either. In fact, the Pyramid stayed targetable and would refuse to die (Sephi's Yummy Mummy A comes to mind), so I quickly abandoned the idea.

And before someone assumes it's because of the LocalVar0020:FormationNumber == LocalVar0000 targeting, I have the same targeting system in my Use Pyramid routine and it works fine there (I use a different variable because 0000 is my turn counter):

Code: [Select]
0x01A LocalVar:0040 <- Random MOD 3
0x022 LocalVar:0040 <- LocalVar:0040 + 1 MOD 3
0x02F TargetMask <- FlagBit(LocalVar:0040)
0x037 If ( ( (TargetMask.Status:Death == 0)  And  (TargetMask.Status:Imprisoned == 0) ) )
0x037 {
0x04F LocalVar:0060 <-  (LocalVar:0020.FormationNumber == LocalVar:0040)
0x05E LocalVar:0060.Flag:Enabled? <- 1
0x068 LocalVar:0060.Flag:MainScriptActive <- 1
0x072 LocalVar:0060.Status:Death <- 0
0x07C LocalVar:0060.HP <- LocalVar:0060.MHP
0x08B Perform(349 + LocalVar:0040, EnemyAttack)

I'm kind of stumped.

Unfortunately, that was not it. I did indeed still have Reno use (Report) because the Turks' fleeing animation is one of the few unique death animations that don't cause infinite Wait Mode and will thus work fine. I even moved the Pyramids' use of Vanish just after the Remove Imprisoned line, so it should be EXACTLY as if you'd kill a Pyramid (except for the flags on the Pyramids themselves).

No dice, it does not work. Since the Pyramids do vanish in an IF query that checks for Imprisoned characters, the game obviously still recognizes them as Imprisoned characters, but removing it simply seems to not work.

A bit on the subject, how do you use AI scripting to force an enemy's death exactly as if they'd died regularly?

This is Reno's Death Counter, btw:

Code: [Select]
Death Counter:
0x000 11 0000
0x003 60 00
0x005 90
0x006 12 2070
0x009 02 0020
0x00C 02 4060
0x00F 80
0x010 01 0000
0x013 40
0x014 90
0x015 12 2070
0x018 10 4023
0x01B 80
0x01C 60 00
0x01E 90
0x01F 12 2070
0x022 10 4024
0x025 80
0x026 60 00
0x028 90
0x029 01 0000
0x02C 87
0x02D 00 401F
0x030 80
0x031 60 01
0x033 40
0x034 70 0068
0x037 11 0000
0x03A 87
0x03B 10 4023
0x03E 80
0x03F 60 01
0x041 90
0x042 11 0000
0x045 87
0x046 10 401F
0x049 80
0x04A 60 00
0x04C 90
0x04D 12 0040
0x050 02 2060
0x053 90
0x054 12 2060
0x057 02 2070
0x05A 90
0x05B 60 20
0x05D 61 014E
0x060 92
0x061 12 2060
0x064 02 0040
0x067 90
0x068 11 0000
0x06B 01 0000
0x06E 60 01
0x070 30
0x071 90
0x072 01 0000
0x075 60 03
0x077 42
0x078 70 0006
0x07B 12 2060
0x07E 10 4008
0x081 80
0x082 60 00
0x084 90
0x085 12 2060
0x088 10 400F
0x08B 80
0x08C 60 00
0x08E 90
0x08F 93 Reno “Hmph. I'll be back.”
0x0AA FF
0x0AB 12 2060
0x0AE 10 402C
0x0B1 80
0x0B2 60 01
0x0B4 90
0x0B5 12 2070
0x0B8 02 20A0
0x0BB 90
0x0BC 60 20
0x0BE 61 0164
0x0C1 92
0x0C2 73

And the "Disassembled" version:

Code: [Select]
0x000LocalVar:0000 <- 0
0x006TargetMask <-  (LocalVar:0020.FormationNumber == LocalVar:0000)
0x015TargetMask.Flag:Enabled? <- 0
0x01FTargetMask.Flag:MainScriptActive <- 0
0x029 If ( (FlagBit(LocalVar:0000).Status:Imprisoned == 1) )
0x029 {
0x037 FlagBit(LocalVar:0000).Flag:Enabled? <- 1
0x042 FlagBit(LocalVar:0000).Status:Imprisoned <- 0
0x04D LocalVar:0040 <- Self
0x054 Self <- TargetMask
0x05B Perform("Vanish"[014E], EnemyAttack)
0x061 Self <- LocalVar:0040
0x068LocalVar:0000 <- LocalVar:0000 + 1
0x072 If ( (LocalVar:0000 >= 3) ) //Note: The else goes back to the second line, 0x006.
0x072 {
0x07B Self.Status:Haste <- 0
0x085 Self.Status:Regen <- 0
0x08F Display String: "Reno “Hmph. I'll be back.”"
0x0AB Self.Flag:Unknown(00001000) <- 1
0x0B5 TargetMask <- Self
0x0BC Perform("(Report)"[0164], EnemyAttack)

LocalVar:0020 refers to all Pyramids.

So I'm making a mod with direct battle transitions, Hojo-style. One major problem that arises is the Imprisoned status. Some enemies in the gauntlet - in this case Reno - are capable of inflicting this status effect on party members. Problem is, if it is not remedied until the enemy is defeated, it will never go away. The character will remain inactive forever.

Obviously, I have the un-imprison routine (sets Flag:Enabled to 1 and Status:Imprisoned to 0) in Reno's Death Counter script and even in the following enemy's (Sample:H0512's) Pre-Battle script. Doesn't matter, the characters remain Imprisoned. I have no idea why the status refuses to be remedied. Making the Pyramids use their Vanish skill also doesn't work.

I even tried making Reno's (Report) ability target all party members and remove the Imprisoned status. It ended in a Game Over, don't ask me why.

Yeah, that was the other possibility. Though I had really hoped not to have to do that. Seems like I'm out of options, though.

I can maybe help with the accessory thing. As far as I know, accessories are removed along with Materia with the '17' function in 'Modules - Display Menu' (they're used in Shinra tower to un-equip party members before the Gunners and Rufus fights; these are in the 'direct' group of their respective field screens if you want to look at them).

Ah, thank you. The MENU opcode seems to do all kinds of stuff with your inventory. Well that at least solves that issue. Though that makes me wonder... what if you've filled your materia inventory and then you're forced to unequip them? I might have to test that.

Are you trying to get rid of KOTR for the boss-rush mod? I thought a potential work-around might have been to remove the party's Materia/Accessory by using '17' for each party member in turn (changing 'Short', the field below it, determines which party member it affects). This puts every Materia in the inventory assuming there's space. I'd have thought you could then 'target' KOTR and other banned Materia using Remove Materia under Party & Inventory (it looks like it asks for AP as an identifier as well as the Materia itself) but I just tested it with Fire Materia sitting at 0 AP and it was a no-go, unfortunately.

Yeah, KotR, Mime, Double Cut and the Master X Materia. It also removes Elixirs, Megalixirs, Hero Drinks and Ribbons, though the latter weren't removed if you still had them equipped, I should be able to fix that with the MENU command you posted.

The problem is that both the Remove Materia and Amount of Materia opcodes don't seem to do anything. I tested both ways (either just not letting you into the Hall of Battles or removing the forbidden materia upon entering) both with either 0 or 500k AP and neither worked out. Guess I'll have to rely on the players.

It doesn't happen in the game and you can't set it via script like that. :( Any Item manipulation occurs from the item inventory, not equipped things.

Materia doesn't work like this either. :O There's not a function that just remove one specific materia either. That's a bit surprising.

So basically there's no way? That bites.

And sith, I think you misunderstood. You can unequip accessories ingame with the triangle/menu button. The question was whether it's possible to force this via field scripting.

Is there any way to check for specific materia or remove them? The designated opcodes don't seem to work at all.

The only scripts I could think of that do this are the Huge Materia and the initiation of the Yuffie sidequest, but both of those seem to be hardcoded using the MENU opcode.

On a similar note, is it possible to unequip all party members' accessories?

Interesting bit of information. I think the Death Counters still activate, though. Schizo has his 402C flag set to 1 (and if any head dies first, it sets the 402C flag of the other head to 0) and still has a Death Counter.

Jhowever why not force a new battle scene (that's identical in layout but different boss) with the next boss? Or terminate Palmer in a different way and then jump to another battle? Isn't that what happens with life sephiroth in the final battle scenes? I'm not familiar with FF7 scripting for the battles but it would seem to be logical in any case to do that (hey logic and programing sometimes do not mix I've noticed).

The reason I don't do that is because that would reset charges of, say, All and Final Attack and also heal all status ailments - both of which I explicitly do NOT want.

Scripting and Reverse Engineering / AI Editing: Flag 402C
« on: 2013-08-30 23:58:57 »
So in the midst of all the unknown addresses in the ProudClod.dat and WallMarket.dat, there is address 402C. Has anyone ever found out what exactly it does?

I'm asking because it has become important for me right now. I am trying to make a boss rush gauntlet and certain bosses would cause trouble. Palmer is a perfect example. If you delete his whole Death Counter, the next formation in the gauntlet will be invisible and as soon as you press the triangle button, you can no longer select commands and the battle is frozen. Likewise, if you don't delete his Death Counter, his "final attack" (where he runs off and gets hit by the truck) initiates Wait Mode, but never goes back to Active Mode so the next battle in the gauntlet is screwed just as much.

HOWEVER if you set flag 402C to 1 in his Pre-Battle script, it works fine! It also works for the other troublesome enemies (basically all the ones that don't have a red-flashing death animation) such as Rufus or Dyne. This is super-convenient, but I'm kind of interested in what the flag actually DOES, so... does anyone know?

Oh wow, now it works. Thanks ^^

For some reason, WallMarket doesn't work for me. As soon as I try to open it, I immediatly get the error message "WallMarket has stopped working". This happens on a Windows 7 Laptop, a Windows 7 PC and on a Windows XP Laptop. I have the zlib1.dll file as well as the Basic Pack and Framework at a higher version than is required. I've tried older versions of WM, I've tried using settings for incompatibility, I've tried running as administrator. To no avail. (ProudClod, on the other hand, works fine)

Any help?

Okay, this worked pretty well overall, but there's a few issues that remain.

Firstly, a random Masamune appears arbitrarily during any of Sephiroth's animation at a weird location. I think it's always a bit below the blade, as in the direction the blade is curved in. It doesn't appear in Kimera and I don't really know why this happens. I could deal with it, but it just looks ugly.

Secondly, animations work great. But there's one little issue that's left. I'd like it if Sephiroth had the Octaslash ability. For that one, I used Big Brawl as base. Now for one, I tried all animations on the list and the spellcasting ones are the ones that work... kind of. Sephiroth of course teleports all over the place, hits 8 times, and then stays at an arbitrary spot. Problem is for one, he doesn't move back to his original spot, two, if I try to have him do it twice, the "smoke" animation of Big Brawl is still played but Sephiroth doesn't teleport and hit people and there are no damage figures. It only works again if I completely reset FF7.

So I gave an enemy the model of Party Member Sephiroth. Problem is, his Masamune is missing. Any way this can be fixed?

And on a side note, can you use the animations of PM Sephiroth without too much trouble or is it going to be tough? (So far all the ones I've tried just froze the fight)

Just tested this on a test enemy. It was supposed to write "YES" if one of the characters nullifies or absorbs water, otherwise "NO". It worked exactly as it should. Awesome!

This is the code I used:

Code: [Select]
0x000 02 20A0
0x003 60 40
0x005 96
0x006 02 2070
0x009 01 4058
0x00C 80
0x00D 60 05
0x00F 42
0x010 70 001B
0x013 93 YES
0x018 72 001F
0x01B 93 NO

Edit: Now this is strange. I could swear it worked before, but now, FF7 crashes every time I start the battle against the enemy with the above script.

Edit2: Never mind, I just failed.

Ah, the page for opcode 96 in WallMarketHelp really helped a lot. That also explains the GreatestElementalDamage address. I hope it also works on characters. I'll try.

So Sephiroth just checks for Earth and picks other elemental spells by other conditions. But this should be enough knowledge to work out the AI I wanted. Thanks to both of you!

Unfortunately, I don't have WallMarket available right now either, but I've been told his AI first chooses targets with the "GreatestElementalDamage" address, but then just throws that plan out the window and directly chooses its actions depending on the Formation ID. They also said that sometimes if they used Sephiroth outside of the flashback, he used spells the enemies absorbed. So it doesn't seem like Sephiroth's AI holds the answer, sadly.

Okay, I'm stumped on this one. I'm trying to make an enemy not use his elemental attack if 2 party members absorb it. I just can't figure out how you can check to see if a party member absorbs an element.

Any ideas?

Releases / gjoerulv's "Hardcore" mod
« on: 2009-08-19 08:38:23 »
Sure, just use WallMarket.

Releases / gjoerulv's "Hardcore" mod
« on: 2009-08-18 07:59:58 »
I got a question: how did you get the characters' names into in-battle dialogues (SOLDIER-Trio)?

FF7 Tools / Official Proud Clod 1.0 Topic
« on: 2009-08-18 07:24:31 »
Sounds very nice!!

Btw, I'm aware of the problems I would get if I change Model IDs - because of the scripts in the AI that change animations. I simply wanted to create a new enemy and assign the right model. :wink:

FF7 Tools / Official Proud Clod 1.0 Topic
« on: 2009-08-17 16:27:31 »
Got a question: Will PrC be able to change models of enemies in next version? I've been looking for a possibility to do that easily.

Oh, and what animation ID will hide the attack name?

Releases / gjoerulv's "Hardcore" mod
« on: 2009-07-31 11:27:50 »
I feel there are enough modding tools available for anyone to make a mod like this one without too much trouble.

Uh good... but how do you make special encounters like the SOLDIER-Trio when picking up that codecard in the ShinRa-Building. I know that you have to insert BATTLE(00,xx,xx) into meteor and then replace the old flevel.lgp with the new one, but how do you determine what formation ID to use where the x's are?

I tried it like the following: Scene 1 contains Formation ID 0000 to 0003 - for testing I just edited one of its enemies and put it into the third formation i.e. 0002. Then i wrote BATTLE(00,02,00) into the right space in Meteor. It didn't work...

Pages: 1 [2] 3