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 - quantumpencil

Pages: 1 2 [3]
51
Hey guys,

I've been getting interested in modding the executable directly, I was wondering where I mind find a description of the community's current cumulative knowledge about its structure? (If such a thing exists). In particular I'm interested in knowing if anyone has bothered to map-out the battle module (figure out it subroutines, so that it can be hacked to do things like process new status ailments, or its handling of elemental weaknesses can be modified?)

Best,

QP

52
Does anyone happen to have a working copy of this? I've recently gotten to the point in my mod where I feel I'm ready to start working on models for some new enemies I've created, but I can't finding a working download for this.

Thanks in advance for any assistance.

Best,

QP

53
I've been trying to implement some new status ailments into a mod I'm working on via character AI. I was wondering if there is a script for "pre-attack" similar to the one enemies have in their own scripts? I saw a few people discussing a pre-attack script online (Particularly Yojimbo, who used it to make a cool poison disease status) but I don't see a pre-attack script in wal-market.

This is how I want to implement Vanish. I want to add general counter scripts that will respond to certain actions by setting a character's 41f0 value to 1. Then, in a pre-turn script that gives the character a 9/10 chance to have 255 physical evade, and add general counter scripts to remove the status by unflagging that index. The game doesn't seem to use the values at 41f0 and later for very much, so it should work if there is a pre-attack script.

Thanks,

QP

EDIT: It seems post-attack script is actually pre-attack script, based on my testing. Zombie, Disease, and Blink are now successfully implemented =D


54
Forgive me, but what is the battle block? Is that a special set of addresses for storing variables accessible to all actors in a battle?

Which addresses are included in the battle block? A look through the Manhole scripts seems to suggest 21A0 is one such address. Are there others?

Best,

QP

55
Another question:

For some reason, I cannot save changes to formations. I instead get an out of bounds exception whenever trying to click "done" while editing formations -- even if I don't change anything.

The odd thing is the application will show that it has changed the formation data right up until I create scene.bin, at which point it will revert back O_o?

56
Do you have a specific goal in mind? Are you looking to score an industry job, to make games, to program personal projects, to make your own product?

There is really no shortcut to learning how to program besides just working on programming projects. I'd recommend you spend a little bit of time studying the basics and working on simple projects -- any university intro course should work well. I strongly recommend Harvard's CS50, I took it when I was a freshman and it pretty much turned me from "not a programmer" into "able to teach myself whatever I want." It's also free online through edX https://www.edx.org/. It's a great way to get your feet wet enough that you stop worrying about drowning and can start piecing together a nice stroke =p.

You'll learn basic theory and get hands on experience with fairly low level things like for an intro course, and you'll also get to do cool little projects with a lot of guidance to get you going. Don't worry about the choice of language. I've met great programmer's who are the natives of many different languages. Knowing x y or z language doesn't make you a better programmer than not knowing x y and z language. It's all about what you can do with a tool, about honing your design and problem solving skills. If you understand how to design software and have well-honed problem solving chops learning a new language isn't very difficult. That said, I am slightly biased towards C because I think it's good to be introduced to pointers and really understand the difference between values/references very early on.

After CS50, I recommend you use MIT's OCW to go through some upper level courses depending on your interests --- whatever you choose I suggest you at least take algorithms and data structures and learn them really well. Try to implement every data structure you learn about in C, and try to implement the algorithms you learn at least once both normally and recursively.

Concurrently, I recommend you find little projects you have fun working on and just code. Code something every day, whether it's an AI script in this game (which is basically assembly and therefore a really good way to cement your knowledge of control flow and machine logic), an open source project or just little utilities for your own use to help you with routine parts of your job/daily routine.

57
Since the original version of this post, I've gotten much better at handling types using this assembly style programming language (Too used to text editors and loosely typed languages, so most of my hojo script worked fine after I fixed typing problems.)

There are a few outstanding things that annoy me. I was trying to implement a Swallow/Regurgitate mechanic for the Land worm enemy last night using the imprisoned status. I had it counter with an attack that causes imprison and deactivate the target masks script. Then I copied the target mask into self.4300 for later use (I also tried storing in it in a local variable.) Later on, after a counter in main had incremented to five, I instructed it to re-target self.4300 , remove imprison, and re-enable its script.

It just didn't work at all. Despite literally using the same code Carry Armor uses, the land worm constantly seemed to get confused and end up targeting the wrong enemy with regurgitate, as though the script wasn't able to modify the value at self.4300. I understand what a 0x value is, and I've been operating under the assumption that 1x value is an address that stores a 0x value -- but I read through the wiki and there was a mention of scope, so I'm wondering if that may have been my issue.

Can some explain in detail the "scope" of address types 10, 11, 12, and 13? Which ones can be modified during what parts of a script?

Best,

QP

58
Hi all, I'm working on a rewrite of the AI for FFVII and right now I'm working on the first encounter with Reno. I added a main script to the pyramid to make the fight more interesting, here it is:

local var 0100 = 0 (in header script)
0x000   If ( (LocalVar:0100 <= 3) )
0x000   {
0x00F   Display String: "The pyramid is getting harder!"
0x02F   LocalVar:0100 <- LocalVar:0100 + 1
0x039   If ( (LocalVar:0100 == 4) )
0x039   {
0x042   Self.Flag:PhysicalImmune <- 1
0x04C   Self.Flag:MagicalImmune <- 1
0x056   LocalVar:0100 <- 5
0x05C      SCRIPT END

Now the issue is that this script loops forever, but I'd like it only to be active whenever the pyramid is "active." So I tried everything I could think of, and nothing worked. This included:

1: Using the self.enabled mask as a condition (so I nested the entirety of the above loop in a "only do this when self.flag.enabled == 1 condition) which apparently caused the game to hang (so that's out)
2: Using self.death as a condition (even after modifying the pyramid's death counter script to work with it) which just didn't work as apparently the pyramid won't die.

Is there a good known trick for just outright disabling the main loop given in one of the counterscripts or something?

Thanks a ton,

Best,

QP

EDIT: So, I still haven't figured out why the above two approaches don't work (Like why using the enabled conditions causes the game to hang) but I did find a solution. Though it isn't listed on the wiki, http://wiki.qhimm.com/view/FF7/Battle/Battle_Scenes/Battle_AI_Addresses here, 4024 appears to be a flag for whether or not the main script is active, so self.4024 ==0 fixed the problem =)

59
Very useful Sega chief! That should speed things up quite nicely.

Out of curiosity, have you ever made an AI script which counters a *missed* attack? I wrote a general counter script for the ghost enemy which vanishes if he is hit by an attack and then if he's already vanished, casts fire on anyone who tries to physically hit him (to punish them for being dumb.) However the condition isn't activating, and I can only imagine that's because the counter script only triggers when damage is actually dealt, and not just when an attempt at doing damage is made. I looked through the opcode list but didn't see anyway to resolve this issue.

I suppose I could always just alter the vanish thing so that he can be hit... but that seems like it kills the point of vanish -_-.

EDIT: I just realized this is supposed to be only for PrC related things, so i'll move this conversation. sorry about that!

60
Gameplay / Re: Help with Bizarro Sephiroth's AI
« on: 2014-11-18 20:39:10 »
Scene 232/234 are Bizarro three party left and right, and they both have the same bug. Whenever you're fighting them, if the core in scene 233 is dead, they'll cast stigma. If not, they'll spam heartless angel... whereas it should really be the other way around based on the behavior of the other fights.

Here is how far I've gotten. So if you look in Bizarro's pre-battle AI script in scene 233, there are set-ups for globals which track the death of parts of Bizarro between battles (beginning at 0x190). I'm not sure which variable is tracking what body part, but one of them is tracking the main core in scene 233. I don't see any bad references to any of these variables in either 232 or 234 though, which I should find around the control flow for turn 4 in 232 at 0x42B -- either that or somewhere in the code there should be an issue where local variable 0040's death attribute used in the control flow (which tracks left and right cores death) is not being properly set, and is in fact 0 whenever the main core has been killed.

if local variable 0000.death == 0 {
    if local variable 0040.death  ==  0 (i.e it is not dead) {
        cast stigma
    }
}

else {
    if local variable 0000.death ==0{
        cast heartless angel
    }
}

which seems right, but that's not what he does

61
Gotcha, thanks so much. So just to make sure I've got this straight -- It'd be better to copy over all the AI changes I've made to a clean scene.bin, and then re-edit the scene. When re-editing, the "path of minimal bugs" would be to individually copy every attack I've created/edited from my modified file to the clean one, and then to re-edit the stats (rather than copying/pasting the whole enemy, which might create bugs with the attacks). And never synch anything, ever.

62
Ah, yes I have done that extensively -_-.

Alright, so is the best thing to do at this point just start fresh and remod/edit scene.bin, this time not using the synch option? I assume it's fine to synch attacks, just not enemies/stats?


63
Thanks for the issue with cripshay, fixed that.

I do have the steam version installed alongside the version I'm modding, so I'll try removing that and seeing if it fixes the issue -- but I made other changes to this same kernel.bin using wall market and all of those are working fine, so I doubt that's the issue.

I was thinking about this today (after much wiki reading), if something were off with the Scene Look-up, then when I begin the fight I should be seeing a valid fight from the game just misplaced. That's not what's going on, though. Instead what happened here was that it seemed like the correct "fight" loaded, and three normal grunts (located in the same scene as Air Buster) took his place in the middle of my party, all kind of clustered together on top of each other, and classed as long range (couldn't be attacked.) I also had another issue in a random battle where there appeared to be two random guards standing on top of each other, and one of them was classified as long range and couldn't be attacked.

I'd like the old versions of Proud Clod if you have them just to see if that's it though the more I think about it the more I think it may be something besides the look-up table.

I also noticed that my version of proud clod gives me an "index outside the bounds of array" error whenever I open the formations tool, even if I don't save or modify anything. It does this for every scene.

64
Gameplay / Re: Help with Bizarro Sephiroth's AI
« on: 2014-11-18 05:26:19 »
Took another look today, I don't think it's 0x180 (At least I can't figure out why it would be), but I'm going to try messing with it and see if it works.

65
Is it possible to reverse an overwrite made with the copy tool? It's fine if it requires some work, but I have accidentally pasted an enemy over "cripshaw" which does not appear in any other scenes, and I would like to get that enemy back. Unfortunately I've also already made substantial modifications to my scene.bin, fixed tons of AI bugs, etc... so I really don't want to start fresh and lose those changes.

If it takes some work to recover cripshaw that's fine, I'd really like some guidance on how I might go about doing that.

I was also wondering if there are known issues with the latest version Proud Clod regarding encounter calls getting screwed up? I was play-testing today and for some strange reason when I was supposed to fight Air Buster I ended up just fighting a bunch of random guards. Is there I way known solution or another tool I can use to edit which formation is being called for a boss fight? Where is that data stored?

My understanding from reading this thread is that something has gotten messed up with kernel.bin look-ups, and that the solution should be in a "readme" but I don't seem to be able to find that readme anywhere. The application claims the lookups there appear to be correct, though it has made modifications in the past.

Best,

QP

66
Gameplay / Help with Bizarro Sephiroth's AI
« on: 2014-11-17 02:42:01 »
Hello qhimmers, I've been going through the AI scripts trying to fix some AI bugs. I recently started working on Bizarro's AI and it's been a real doozy. I managed to fix the issue with the Bizarro Sephiroth AI in scene 229 so that he uses the correct attack loop by deleting a bad assignment at 0x097. Right now I'm trying to edit the AI for the encounter in 232, but I can't actually find the bug. Apparently in this scene there should be a bug where Sephiroth is casting Stigma when he's supposed to use Heartless Angel. Obviously I could switch the attacks but that'd be a cop out -- so I'm trying to find the logical error. I expected it to be pretty simple but unless I'm misunderstanding something the code looks *completely* fine to me. Starting with the masks at 0x42E all of the conditions which are being checked seem to be the correct conditions.

Can anyone find the logic error here causing the wrong attack to be triggered?

Thanks in advance.

Pages: 1 2 [3]