• Welcome to Final Fantasy Hacktics. Please login or sign up.
 
April 18, 2024, 01:30:19 pm

News:

Please use .png instead of .bmp when uploading unfinished sprites to the forum!


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.

Topics - Arimala

1
PSX FFT Hacking / Help with Raven's Workbooks and more
September 20, 2021, 02:15:36 am
I was testing some asm hacks with my patch and came across a small error in PSXfin when I tested the "Equip X and Gender Equips" hack that came from raven's workbooks download here: https://ffhacktics.com/smf/index.php?topic=7271. PSXfin did not crash and the game ran just fine but I saw this pop up:
cuebin: read sector out of range (234992, max=234992)
cuebin: read sector out of range (235024, max=234992)
cuebin: read sector out of range (235056, max=234992)
cuebin: read sector out of range (235088, max=234992)
cuebin: read sector out of range (235120, max=234992)

Is this something that will break the iso? If so is there a fix or more up to date hack that can accomplish the same thing? Or is this just down to PSXfin and is it time to move on to a new emulator?

I am also curious about the other worksheets and which ones work correctly, specifically these:
Pride's Weapon Proc Rate ASM
Secondadvent's Critical Hit Rate
Pride's Job Defense Boost ASM

Last question, I noticed in the conflict checker that Secondadvent's Critical Hit Rate hack and Glain's Apply Defense (v2) hack overlap in the BATTLE.BIN. From what I can tell, it looks like both of those are located in the 'free space' or whatever its called so I should be able to move one or the other correct? Those are the only 2 hacks that I have seen a conflict with in the checker and I was really hoping to use both.  -After relearning how the conflict checker works I realized it is possible to move since the conflict is not highlighted in red.

After successfully testing 27 custom formula hacks my patch is so close to finally doing a playthrough!  I have 20 more hacks or so to test and see if they are working correctly in game, so any insight into these would be greatly appreciated.
2
I am a complete newbie to formula hacking, but like most people I find the swordskills a bit overpowered, so I have been attempting to learn some minor asm hacking to get this much needed formula into my game.  I watched Xifanie's tutorials on how to use the FFT Hack Template, and got started from there. I tried adding in the /X later in the formula, after 'lw r2, 0x2D90(r2)' as well as an attempt at putting the command in after 'lbu r2, 0x0000(r2). All the 0's in the lbu command tell me that is almost for sure the wrong place for a div command. These 2 attempts ended in either the game freezing when i selected a target or glitched out damage prediction.

I even attempted saving it in the slot for formula 18. When I did this formula 18 froze the game, and for some reason the swordskills I kept as formula 2D even froze the game.. even though I did not change a thing on those skills or touch the formula. Not sure what that was about.

So I tried inserting the raw code for the Store PA and WP + Y routine with my div and mflo commands in... this version of the hack always ends in the game freezing when I go to select my target.

BATTLE.BIN
0x0018F6C4 E4101580 formula 2D

BATTLE.BIN
0x801510E4 addiu r29, r29, 0xFFE8
0x801510E8 sw r31, 0x0010(r29)
0x801510EC jal 0x80188510 Physical Evade Calculation
0x801510F0 nop
0x801510F4 bne r2, r0, 0x8015118C
0x801510F8 nop
0x801510FC lui r5, 0x8019
0x80151100 lw r5, 0x2D94(r5) Load Attacker's Stats
0x80151104 lui r2, 0x8019
0x80151108 lbu r2, 0x3902(r2) Load Weapon Power
0x8015110C lui r3, 0x8019
0x80151110 lbu r3, 0x38FA(r3) Load Ability Y
0x80151114 lui r4, 0x8019
0x80151118 lbu r4, 0x0036(r4) Load Attacker's PA
0x8015111C lbu r5, 0x38F9(r5) Load Ability's X
0x80151120 addu r2, r2, r3 WP + Y
0x80151124 div r2, r5
0x80151128 mflo r2 (WP + Y) / X
0x8015112C nop
0x80151130 lui r1, 0x8019
0x80151134 sh r2, 0x38D0(r1) Store (WP + Y) / X as YA
0x80151138 lui r1, 0x8019
0x8015113C sh r4, 0x38CE(r1) Store PA as XA
0x80151140 jr r31
0x80151144 nop
0x80151148 jal 0x80185FA4 Element Strengthen Calculation
0x8015114C nop
0x80151150 jal 0x801886A4 Physical Damage Calculation
0x80151154 nop
0x80151158 jal 0x80186FD0 Weapon Elemental = Swordskill Routine (Fixed by Xifanie.)
0x8015115C nop
0x80151160 lui r2, 0x8019
0x80151164 lw r2, 0x2D90(r2)
0x80151168 nop
0x8015116C lbu r2, 0x0000(r2)
0x80151170 nop
0x80151174 beq r2, r0, 0x8015118C
0x80151178 nop
0x8015117C jal 0x801870FC Elemental Absorption
0x80151180 nop
0x80151184 jal 0x80187EB4 Status Proc
0x80151188 nop
0x8015118C lw r31, 0x0010(r29)
0x80151190 nop
0x80151194 jr r31
0x80151198 nop



I find it hard to believe no one has modified formula 2D in some way similar to this.. considering the common opinion within this community is that the swordskills have always been overpowered.

We need more WP, PA formula hacks!

Please help.

edit: all attempts were made with a patched iso and then a fresh iso as well
3
I have play tested my entire patch all the way up to the bed desert boss fight.. The main purpose of my patch was to make most of the boss fight conditions "defeat all enemies" including the Bed Desert fight vs Balk. I have not seen any major glitches or bugs until this fight and I cannot seem to figure out what is going wrong other than the fact I know it has to do with the step involving the test.evt and cdmage.

There is nothing added into this event thats special.. all I did was change the "display conditions" part so it would show the defeat all enemies screen, but the event wont even get that far.
This is where it freezes every time, right after everyone gets poisoned and kneels down:

The music keeps playing but nothing ever happens on screen

Even when I extract a fresh test.evt from an original iso and just add 1 random custom event in(doesn't even have to be the bed desert event).. this bed desert fight will still freeze at the same spot, so the problem cant be the bed desert battle event right?

not sure if this will help...Bed Desert event:
Offset(x002C4000)
//Remove the previous line if you wish not to override the offset in CONFIG.INI.
//Remove the previous line if you wish text to compile directly after instructions.

Erase(x03,x00)
Erase(x78,x00)
Erase(x79,x00)
Erase(x7A,x00)
Erase(x7B,x00)
Erase(x7C,x00)
Camera(+00872,+00019,+00728,+00238,+02208,+00000,+04096,+00001)
WaitForInstruction(x04,x00)
UnitAnim(x00,x00,x02,x00,x00)
{63}(rAA)
Camera(+00584,-00172,+01064,+00430,+03584,+00000,+04096,+00180)
LoadEVTCHR(x01,x64,x00)
{4D}(r40)
WaitForInstruction(x04,x00)
Wait(00040)
DisplayMessage(x10,x11,x0001,x2B,x00,x00,+00006,+00008,+00000,x03)
WaitForInstruction(x01,x00)
WaitForInstruction(x34,x00)
SaveEVTCHR(x01)
WarpUnit(x03,x00,005,002,x00,x02)
Draw(x03,x00)
Draw(x78,x00)
Draw(x79,x00)
Draw(x7A,x00)
Draw(x7B,x00)
Draw(x7C,x00)
UnitAnim(x00,x01,x02,x00,x00)
Sound(x0078)
Wait(00100)
{47}(r2B00000503000001)
{48}()
SpriteMove(x64,x00,+00000,+00088,+00000,x00,x01,+00001)
WaitSpriteMove(x64,x00)
Draw(x64,x00)
AddUnit(x64,x00,x01)
RotateUnit(x2B,x00,x00,x00,x00,000)
Wait(00012)
RotateUnit(x80,x00,x00,x00,x00,000)
Wait(00006)
RotateUnit(x82,x00,x00,x00,x00,000)
Wait(00010)
RotateUnit(x84,x00,x00,x00,x00,000)
Wait(00004)
RotateUnit(x81,x00,x00,x00,x00,000)
Wait(00008)
RotateUnit(x83,x00,x00,x00,x00,000)
{63}(rCA)
Camera(+00728,+00067,+00392,+00462,+02496,+00000,+04096,+00064)
WaitForInstruction(x04,x00)
Wait(00030)
Effect(x021C,x64,005,003,x00)
DisplayMessage(x10,x92,x0002,x2B,x00,x00,+00000,+00010,-00002,x02)
WaitForInstruction(x01,x00)
DisplayMessage(x10,x91,x0003,x03,x00,x00,+00000,+00000,+00002,x03)
WaitForInstruction(x01,x00)
ChangeDialog(x02,x0004,x00,x00)
WaitForInstruction(x01,x00)
ChangeDialog(x01,x0005,x00,x00)
WaitForInstruction(x01,x00)
ChangeDialog(x02,x0006,x00,x00)
WaitForInstruction(x01,x00)
ChangeDialog(x01,xFFFF,x00,x00)
Wait(00004)
ChangeDialog(x02,xFFFF,x00,x00)
WaitForInstruction(x01,x00)
Wait(00020)
EffectStart()
UnitAnim(x2B,x00,x58,x02,x00)
Wait(00006)
UnitAnim(x2B,x00,x59,x02,x00)
Wait(00008)
Sound(x0041)
UnitAnim(x2B,x00,x5A,x02,x00)
Wait(00016)
UnitAnim(x2B,x00,x59,x02,x00)
Wait(00008)
UnitAnim(x2B,x00,x5B,x02,x00)
Wait(00006)
UnitAnim(x2B,x00,x5C,x02,x00)
Wait(00006)
UnitAnim(x2B,x00,x5D,x02,x00)
Wait(00008)
UnitAnim(x2B,x00,x5E,x02,x00)
Wait(00010)
Sound(x0030)
UnitAnim(x2B,x00,x5D,x02,x00)
Wait(00006)
UnitAnim(x2B,x00,x5C,x02,x00)
Wait(00002)
UnitAnim(x2B,x00,x5F,x02,x00)
Wait(00002)
UnitAnim(x2B,x00,x60,x02,x00)
Wait(00004)
UnitAnim(x64,x00,x6D,x02,x00)
SpriteMove(x64,x00,-00028,-00089,+00118,x00,x01,+00001)
WaitSpriteMove(x64,x00)
BlockStart()
UnitAnim(x03,x00,x66,x02,x00)
Wait(00010)
UnitAnim(x03,x00,x67,x02,x00)
Wait(00008)
UnitAnim(x03,x00,x68,x02,x00)
Wait(00010)
UnitAnim(x03,x00,x67,x02,x00)
Wait(00008)
UnitAnim(x03,x00,x69,x02,x00)
Wait(00006)
UnitAnim(x03,x00,x6A,x02,x00)
Wait(00006)
UnitAnim(x03,x00,x6B,x02,x00)
Wait(00006)
BlockEnd()
BlockStart()
UnitAnim(x2B,x00,x61,x02,x00)
Wait(00006)
UnitAnim(x2B,x00,x62,x02,x00)
Wait(00008)
UnitAnim(x2B,x00,x63,x02,x00)
Wait(00024)
UnitAnim(x2B,x00,x62,x02,x00)
Wait(00008)
UnitAnim(x2B,x00,x61,x02,x00)
Wait(00006)
UnitAnim(x2B,x00,x64,x02,x00)
Wait(00006)
UnitAnim(x2B,x00,x65,x02,x00)
Wait(00008)
UnitAnim(x2B,x00,x02,x00,x00)
BlockEnd()
SpriteMove(x64,x00,-00023,-00093,+00104,x00,x01,+00008)
WaitSpriteMove(x64,x00)
SpriteMove(x64,x00,-00019,-00089,+00075,x00,x01,+00008)
WaitSpriteMove(x64,x00)
SpriteMove(x64,x00,-00014,-00074,+00049,x00,x01,+00008)
WaitSpriteMove(x64,x00)
SpriteMove(x64,x00,-00009,-00055,+00028,x00,x01,+00007)
WaitSpriteMove(x64,x00)
SpriteMove(x64,x00,-00004,-00029,+00013,x00,x01,+00006)
WaitSpriteMove(x64,x00)
SpriteMove(x64,x00,+00000,-00002,+00000,x00,x01,+00005)
WaitSpriteMove(x64,x00)
{1C}(r02)
EffectEnd()
Wait(00020)
Erase(x64,x00)
Wait(00050)
EffectStart()
{1C}(r01)
InflictStatus(x03,x00,x02,x0C,x00)
WaitForInstruction(x43,x00)
InflictStatus(x78,x00,x02,x0C,x00)
WaitForInstruction(x43,x00)
InflictStatus(x79,x00,x02,x0C,x00)
WaitForInstruction(x43,x00)
InflictStatus(x7A,x00,x02,x0C,x00)
WaitForInstruction(x43,x00)
InflictStatus(x7B,x00,x02,x0C,x00)
WaitForInstruction(x43,x00)
InflictStatus(x7C,x00,x02,x0C,x00)
WaitForInstruction(x43,x00)
Wait(00040)
RemoveUnit(x64,x00)
DisplayMessage(x10,x91,x0007,x03,x00,x00,+00012,+00000,-00008,x01)
WaitForInstruction(x01,x00)
DisplayMessage(x10,x92,x0008,x2B,x00,x00,+00000,+00010,+00000,x01)
WaitForInstruction(x01,x00)
ChangeDialog(x01,x0009,x00,x00)
WaitForInstruction(x01,x00)
ChangeDialog(x02,x000A,x00,x00)
WaitForInstruction(x01,x00)
ChangeDialog(x01,x000B,x00,x00)
WaitForInstruction(x01,x00)
ChangeDialog(x02,x000C,x00,x00)
WaitForInstruction(x01,x00)
Sound(x0041)
UnitAnim(x03,x00,x02,x00,x00)
Wait(00020)
ChangeDialog(x01,x000D,x00,x00)
WaitForInstruction(x01,x00)
ChangeDialog(x02,x000E,x00,x00)
WaitForInstruction(x01,x00)
ChangeDialog(x01,xFFFF,x00,x00)
Wait(00008)
ChangeDialog(x02,xFFFF,x00,x00)
WaitForInstruction(x01,x00)
Wait(00030)
{1C}(r02)
Camera(+00504,-00268,+00952,+00302,+03584,+00000,+04096,+00128)
Wait(00030)
DarkScreen(x00,x01,012,064,x00,004)
WaitForInstruction(x36,x00)
Wait(00030)
DisplayConditions(x08,060)
WaitForInstruction(x38,x00)
WaitForInstruction(x04,x00)
DisplayConditions(x00,060)
WaitForInstruction(x38,x00)
RemoveDarkScreen()
WaitForInstruction(x36,x00)
{1C}(r01)
Wait(00040)
UnitAnim(x2B,x00,x03,x00,x00)
UnitAnim(x03,x00,x03,x00,x00)
Wait(00014)
UnitAnim(x81,x00,x03,x00,x00)
UnitAnim(x79,x00,x03,x00,x00)
Wait(00008)
UnitAnim(x83,x00,x03,x00,x00)
UnitAnim(x7A,x00,x03,x00,x00)
Wait(00012)
UnitAnim(x82,x00,x03,x00,x00)
UnitAnim(x7B,x00,x03,x00,x00)
Wait(00010)
UnitAnim(x80,x00,x03,x00,x00)
UnitAnim(x7C,x00,x03,x00,x00)
Wait(00014)
UnitAnim(x84,x00,x03,x00,x00)
RemoveUnit(x85,x00)
RemoveUnit(x86,x00)
{63}(rA8)
EventEnd()

//INSTRUCTION SECTION END -  TEXT START
//Message x01
{font:08}Balk{br}
{font:00}...They're all spread?{br}
{br}
Nice wind. Should be enough{br}
to float them around in{br}
the air for most of the day.{end}

//Message x02
{font:08}Balk{br}
{font:00}Uh{D11D}oh...Didn't think I'd{br}
see you here...{end}

//Message x03
{font:08}{Ramza}{br}
{font:00}What are the Shrine Knights{br}
doing here?{br}
You said, "spread"...{br}
What the hell did you spread?{end}

//Message x04
{font:08}Balk{br}
{font:00}Wanna know...?{br}
{br}
I guess I can tell you{br}
because there's nothing{br}
you can do now.{end}

//Message x05
{font:08}{Ramza}{br}
{font:00}Spill it!{br}
What did you spread?{end}

//Message x06
{font:08}Balk{br}
{font:00}This!{end}

//Message x07
{font:08}{Ramza}{br}
{font:00}Poison!?{end}

//Message x08
{font:08}Balk{br}
{font:00}That's right. I spread this{br}
to the Hokuten Province.   {br}
Any soldier who inhales this{br}
will be too sick to fight!{end}

//Message x09



I tried this with 1.91 easyvent.. until i saw there was a new version out.. so i went into 2.0, made a new custom event for the bed desert boss fight, compiled it in and imported with cdmage and it still freezes.

I have completely hit a wall with this, any help would be much appreciated.


4
Help! / I want to defeat all enemies!
November 18, 2016, 03:46:04 pm
hello, I was looking to change the winning conditions of pretty much all the story battles in the game that have 'defeat x-unit' to 'defeat all enemies'

I have been working on a somewhat vanilla patch recently after a couple years away from all the editors and I cant seem to figure out which procedure is the most up-to-date.
I also have zero experience with xml editors and hex editors.

I tried using the battle evend conditionals editor spreadsheet with no success..

what I tried: I had a saved state for underground book storage 5th floor so I tested that with replacing 06002500000019003301 with 06002500160019003301 pasted the blue section into the attack.out (using HxD.. not sure whats good) starting at offset x014E70. I made sure to write over and not insert paste and then hit save, imported the attack.out to my iso and tested it out. The battle started right up with no text or the winning conditions displaying..it was just ramza's turn. The battle was also never ending even when rofel died and ramza turned into treasure.

So I was wondering if I was going about this all wrong or am I on the right track, just doing it wrong by jumping right in and not understanding hex.



5
Hey all, somewhat new to the site, i have been doing minor changes to the original game...like making battles harder by adding more units to fight and what not... So I have been using the event editor, reading up on the tutorials to edit the story battles, the last thing I have left. 

I have searched quite a lot but haven't been able to find what I was looking for...In some of the story battles more units join the battle after "X" happens (like a guy whistles, or something like that) so I have been trying to use the spritemove command for the extra units that I am adding to walk into the battle with the rest of the units that normally do so and I keep getting stuff like...


unit facing isn't important in this, i know that is messed up, I am just trying to fix it so the guy is actually standing on one panel and not in the middle of two. The way the map is set up he should only be moving on the Y axis but I even tried changing around the axis with no success

this is what i have added into the original event if it helps..
ColorUnit(x88,x00,x01,-006,-004,-002,000)
SpriteMove(x88,x00,+00016,+00000,+00000,x00,x01,+00000)
UnitAnim(x88,x00,x03,x00,x00)
Draw(x88,x00)
ColorUnit(x88,x00,x08,+000,+000,+000,004)
SpriteMove(x88,x00,-00016,+00000,+00000,x00,x01,+00020)
WaitSpriteMove(x88,x00)
UnitAnim(x88,x00,x02,x00,x00)


I based it off of the code I saw at http://ffhacktics.com/smf/index.php?topic=9506.msg185603#msg185603. My use of it might be wrong though as I am still trying to figure everything out with easyvent. I have tried several different combos messing with the xyz but I cant seem to figure it out. If anyone could help me out with this or if you know a better way of acheiving the "walk onto the battlefield effect" it would save me a lot of time doing guess and check with the editor. thanks in advance