[PSX/PC] Field Editor - Makou Reactor (2.1.0)

  • Thread starter Thread starter myst6re
  • Start date Start date
Status
Not open for further replies.
I know what you mean, but at this point im dedicated.
It is colossal work and im still doing it alone.

But on other forums and stuff people have raged at the subtitles so i wanna do my best to make it all optional to keep a good size crowd happy.

All i need is that variable thing. Thats it. And were good again. It will be finished because i can make 2 seperate versions of each area with too many texts and 7th heaven will use it instead based on the variable. Its all good
 
That's a fatal flaw in your logic.  FFX didn't add caption boxes - because it was using audio. And no-one raged.  The people raging are asking you to - in my view - do a totally unrealistic amount of work simply to cater to their nostalgia for normal boxes.

If you are using audio... then you have every right to treat it as FFX.  FFX creators did not say "We better add normal boxes".  It's up to you, of course, but catering to both camps may make this job impossible to finish.

Good luck :)
 
Maybe, maybe,,,
I prefer the subtitles personally. And i want to do them over the normal boxes.

The followers are complaining because they dont want the subs.
Im choosing to do them for many reasons though.
I'll get it eventually
 
this is newb to ask this but how do u add a party member lol, im trying to re-add aeirth after cloud says LETS GO but its not working when adding/creating her.
 
Look at places where party members are added.  This thread isn't for questions on things like this.
 
Myst6re has graciously added 2 more opcodes that can be used with my new DLL - soon for use to modders. 

1A - Read and Save to whole Savemap
1B - Check if Red is called Nanaki (all case) - for use with my Reunion mod.

Thanks!

Function of 1A will be

Hex:

From (2 byte address - savemap 0000 to 10F5, or 5000 to 50FF (this will use temp bank)
To (2 byte address - same as above)
Absolute Value (max 4 bytes,  ignored if From is not FFFF)
Flag (tells whether from is a pointer, whether To is a pointer, and specifies the byte read/write mode)

Flag:  1,2,3,4 (read/write 1, 2, 3, or 4 bytes)
0x10 (To is a pointer)
0x20 (From is a pointer)
Obviously 0x30 means both are pointers

so if you had (all below are hex)

From: 5000
To: BA4
Absolute : 0
Flag: 11

This would copy a ONE byte value FROM the ADDRESS found at temp bank, Byte 0 TO BA4 (which happens to be Bank 1, Byte 0)
5000 with the flag telling it it's a pointer means that Temp Bank, Byte 0 in this case may have address 200....  so it would be THIS address copied from
 
Last edited:
http://blackchocobo.sourceforge.net/wiki/index.php?title=Savemap#Character_Record

Code: [Select]
Code:
Write/Read entire savemap (from=1272, to=20670, absValue=0, flag=1)Write/Read entire savemap (from=1273, to=20672, absValue=0, flag=1)Write/Read entire savemap (from=1274, to=20674, absValue=0, flag=1)Var[6][190] = Var[6][190] * 132 (16 bit)Var[6][190] = Var[6][190] + 84 (16 bit)Var[6][190] = Var[6][190] + 44 (16 bit)Var[6][192] = Var[6][192] * 132 (16 bit)Var[6][192] = Var[6][192] + 84 (16 bit)Var[6][192] = Var[6][192] + 44 (16 bit)Var[6][194] = Var[6][194] * 132 (16 bit)Var[6][194] = Var[6][194] + 84 (16 bit)Var[6][194] = Var[6][194] + 44 (16 bit)Write/Read entire savemap (from=20670, to=20670, absValue=0, flag=18)Write/Read entire savemap (from=20672, to=20672, absValue=0, flag=18)Write/Read entire savemap (from=20674, to=20674, absValue=0, flag=18)If Var[6][190] == 0 (else goto label 5)    If Var[6][192] == 0 (else goto label 5)        If Var[6][194] == 0 (else goto label 5)            Game OverLabel 5
The above code with my opcode will check if all 3 members in party have 0 HP and initiate game over if so.  This is more involved than a usual read operation, because it requires finding the current members and then calculating offsets.  Hopefully Myst6re will add a hex toggle, as this looks crap in decimal.  In hex:
Code: [Select]
Code:
Write/Read entire savemap (from=4F8, to=50BE, absValue=0, flag=1)Write/Read entire savemap (from=4F9, to=50C0, absValue=0, flag=1)Write/Read entire savemap (from=4FA, to=50C2, absValue=0, flag=1)Var[6][BE] = Var[6][BE] * 84 (16 bit)Var[6][BE] = Var[6][BE] + 54 (16 bit)Var[6][BE] = Var[6][BE] + 2C (16 bit)Var[6][C0] = Var[6][C0] * 84 (16 bit)Var[6][C0] = Var[6][C0] + 54 (16 bit)Var[6][C0] = Var[6][C0] + 2C (16 bit)Var[6][C2] = Var[6][C2] * 84 (16 bit)Var[6][C2] = Var[6][C2] + 54 (16 bit)Var[6][C2] = Var[6][C2] + 2C (16 bit)Write/Read entire savemap (from=50BE, to=50BE, absValue=0, flag=12)Write/Read entire savemap (from=50C0, to=50C0, absValue=0, flag=12)Write/Read entire savemap (from=50C2, to=50C2, absValue=0, flag=12)If Var[6][BE] == 0 (else goto label 5) [16 bit read]    If Var[6][C0] == 0 (else goto label 5)        If Var[6][C2] == 0 (else goto label 5)            Game OverLabel 5
 
Last edited:
Is there any documentation to this, or did people just start fiddling and eventually work out how it works?

I am interested in editing the possible chocobo prizes for the chocobo races, and also the enemy spawn chances for battles.
 
Is there any documentation to this, or did people just start fiddling and eventually work out how it works?

I am interested in editing the possible chocobo prizes for the chocobo races, and also the enemy spawn chances for battles.
The encounter rates for each field can be seen with Tools -> Encounters. At the top you'll see the Battle Rate. The farther the bar is to the right, the higher the frequency of random encounters.
 
Time to put this battle mode nonsense to bed.

Because this game is probably the most cobbled together thing I've ever seen, this Field Battle Mode flag (not to be confused with the Battle Type or the Battle Formation flag, set in Scene) stuff is a total nonsense when you look at what's going on.  The game actually only uses 16 bits for the Field Battle Mode - despite the fact there is a "Field Battle Mode (2)" which appears to allow 32 bits.  The engine simply does not support it.  Instead, the flags are converted to a 2 byte value. Regardless of the flag set in Field Battle Mode (1), the same counterpart will be set with Field Battle Mode (2).  Example:

Flag 1 in Field Battle Mode (1) is "Do not show Battle Rewards". This will set the exact same bit in FF7 memory as Flag 1 in Field Battle Mode (2).  The value in memory is 0x80 at CC0DC6.

Field Battle Mode (1) is actually only Flags 0-7 + Flag 16.  Why 16?  because that is the Disable Game Over flag, which gets its own byte to itself (CC0DC5).  In actual fact, this is a shoddy - and I do mean SHODDY - shoehorned fix. Clearly, the 16 bits (instead of 8) is there in Field Battle Mode (1) purely so the Disable Game Over byte can be set.  Flags 8-15 simply cannot be used in Field Battle Mode (1) - though I assume any of those being set to 1 will result in Disable Game Over, since CC0DC5 will then be non zero.

So, what about Field Battle Mode (2)?  Well, this is a jumble too.  The engine makes sure that the flags set here will set the same 2 byte value at CC0DC6 (+ Disable Game Over bit at CC0DC5). Flag 0-7 of Field Battle Mode (2) is the same as Flag 0-7 of Field Battle Mode (1). But Flag 24 becomes the Disable Game Over (it's Flag 16 in Field Battle Mode (1) ).  Flag 16 in Field Battle Mode (2) is Disable Victory Celebration Music, which is actually given the value 0x100 at CC0DC6. It's the only flag that can't be set with Field Battle Mode (1). 

Rather than think of this in terms of field flags, it's much easier to think of it as a memory value.  The value the engine actually makes use of.

The memory values at at CC0DC6/9A88A6 are:

Field Battle Mode (2). Current Makou flags in square brackets.
0x01: Unused [Flag 8]
0x02: Enable countdown timer [Flag 7]
0x04: Preemptive Strike [Flag 6]
0x08: Cannot escape from battle [Flag 5]
0x10: Unused [Flag 4]
0x20: Do not play victory fanfare music [Flag 3]
0x40: Activate Battle Arena [Flag 2]
0x80: Disable Rewards [Flag 1]
0x100: Disable Victory Celebration [Flag 16]
0x200: Unused [Flag 15]
0x400: Unused [Flag 14]
0x800: Unused [Flag 13]
0x1000: Unused [Flag 12]
0x2000: Unused [Flag 11]
0x4000: Unused [Flag 10]
0x8000: Unused [Flag 9]

And Disable Game Over is set as Value 0x01 at  CC0DC5 [Flag 24].  It must be noted that although 24 bits can be reflected from CC0DC5 using Field Battle Mode (2), only the 16 bits at CC0DC6 will be copied to battle memory (9A88A6) making them effective.  Game Over flag is not copied.  The engine checks for it at CC0DC5 - not at 9A88A5 when the battle ends.

Basically, as I noted on the github, Makou Reactor should do away with Field Battle Mode (1) and only allow the "32 bit version"  - although it should simply show to the user flag 1-17, with flag 17 being "Disable Game Over".   In other words, the non usable flags should be hidden and effective ones translated by Makou Reactor.
 
Last edited:
Is there a particular reason as to why when i step on a new walkmesh i make the game crashes instantly?
 
master branch looks a little dusty, what is going on in develop? https://github.com/myst6re/makoureactor/branches.

edit: now I remember why I'm a nodejs dev   :?
Myst does not like to work on master he likes to work on the develop branch. Looks like the last merge was a PR i made in december to generate an appimage. Seams that is not working correctly I should lookin to fixing that.

Is there a particular reason as to why when i step on a new walkmesh i make the game crashes instantly?
No one can help you unless you say what version your runing?

try the last stable release..  if that works and you were using master consider making in an issue on github if one does not alreay exsist.
 
I'm using the latest version. Sorry i thought that would be a given. It's 1.7.2
 
Last edited:
I'm using the latest version. Sorry i thought that would be a given. It's 1.7.2
Ahh for some reason i thought we had CI builds for windows .. ill add that to my todo list..
 
Are we able to get resize all text option?  Really painful to do scene by scene.
 
Are we able to get resize all text option?  Really painful to do scene by scene.
Hi genesis063 et al. Can anyone tell me where is the option to resize windows? I cannot find it.

Regards
 
In the script itself. Usually you call a window and then the text it should display.
 
Status
Not open for further replies.
Back
Top