• Welcome to Final Fantasy Hacktics. Please login or sign up.
 

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

41
Help! / Re: Ganesha file exports
February 13, 2021, 09:51:34 pm
Here are all the relevant links on maps from the FFHacktics wiki.
https://ffhacktics.com/wiki/Maps/GNS
https://ffhacktics.com/wiki/MAP/
https://ffhacktics.com/wiki/Maps/Texture
https://ffhacktics.com/wiki/Maps/Mesh
https://ffhacktics.com/wiki/Maps/Sectors

General tools download area, links to the latest versions of Ganesha (including source code and what looks like a local copy of Python 2.7) and it's color plugin/update are here. Also of interest is a tool called Map2gl, whose instructions are in the second link.
https://ffhacktics.com/wiki/Tools
https://ffhacktics.com/wiki/Map2gl

Note that there are limits on the filesize of each map, as determined by the number of free bytes available in the last CD sector of each map.
https://ffhacktics.com/wiki/Maps/Sectors

You may be able to get around that by rebuilding a disc image from the game files using Cebix's psxbuild tool:
https://github.com/cebix/psximager

If you can and it works, then the game uses the directory and subdirectory sectors to navigate to and load files. If it doesn't work, it uses custom LBA tables and you'll need to consult with your nearest ASM hacker. Looking for the text "load" at the Routines page of the FFHacktics wiki, there are subroutines for both loading files and loading data, so it could use both... maybe one for navigating within files, and another for loading files or parts of files.
https://ffhacktics.com/wiki/Routine_Locations
https://ffhacktics.com/wiki/Load_File_(0x13bc14)
https://ffhacktics.com/wiki/Load_Data_From_Disc_(0x11bd0)
https://ffhacktics.com/wiki/Load_Data_From_Disc_(0x11bf4)
https://ffhacktics.com/wiki/Load_Data_From_Disc_(0x44694)

Some of those routines have comments which say they accept an LBA as a parameter, so it's used somewhere. Importing modified maps and updating sub/directory sectors and LBA tables is best done programmatically, consult with the FFTPatcher maintainer once your team figures this out.

I don't know anything about Maya or Blender, but you could repost this and any new information that pops up on a their respective message boards and see if it resembles something that already exists. It's very likely that FFTs maps were made using 3D modeling software from back in the day, on a workstation that is roughly equivalent to a low end cell phone today.

edit

Apparently Satchmo III did some work on this, might be a good idea to coordinate with him on it.
https://ffhacktics.com/smf/index.php?topic=11942

Doing a stream on your work process or showcasing your results on social media is a good idea, as it might attract a reverse engineer and python coder who can make such a plugin.
42
For future reference, are you referring to AKAO sequences?


The last link is especially interesting because it has filenames and addresses of routines used in FF7 to process sounds, as well as a basic interface of what those routines do were they C/C++ code. One could post those routines from FF7 here and see if that information can be used to locate the same routines in FFT, thereby gaining information about sound processing FFT with the minimum of effort.
43
Help! / Re: ASM understanding
February 08, 2021, 09:18:48 pm
Quote from: Orkney on February 08, 2021, 02:41:35 pmIf there is some piece of code that are'nt relevant, it'll make the understanding of it more difficult (for me at least).

For the depht i believe there's at least another river with 2 depht (i remember some character with the nose in the water)... 
Finath River has 2 depth water. Thieves Fort, the battle where you kill Miluda, the river valley fight just before the end of Chapter 2... there are a decent amount of 2 depth water areas.

Now that I think about it, the first battle in the game at Orbonne might have water deeper than 2 depth, so maybe that's the other one besides Bethla Sluice (to clarify, Bethla Sluice is the battle where you need to move Ramza to the two switches to open the flood gates).

Quote from: Orkney on February 08, 2021, 02:41:35 pmBut the way it's coded i think that float is checked ok, because the unit will be above water (and can use weapon guard)
I didn't think of that. You're probably right.

Quote from: Orkney on February 08, 2021, 02:41:35 pmFor the chocobo part i never mount chocobo, but maybe they can swim and the unit will use weapon guard.

This frog and chicken thing will remain a mystery :) Maybe they swim too so they are checked (Independently of the fact that they can't use reaction ability...)

The end of the code is weird too, why r2 is multiplied by 2 !? in the return routine the only check is r2 <1 --> weapon guard usable (but writing this  i realize there is other return routine, the answer may be over there)
The easiest way to find out for sure is to set up a test scenario. Staring at code will only do so much, eventually you need to debug it. I'm not yet familiar enough with MIPS to step through the code and understand what it's doing - and emulators don't have print terminals like high level programming languages - so the next best thing is to see what happens when you remove parts of the code. By seeing what happens when a piece of code is removed, you can divine what it seems to do.

1. Edit RAM addresses to give yourself some weapons with very high W-Ev, like the Nagrarock. Give everyone in your party weapon guard. Make sure you have a way to inflict frog and chicken, and you have a chocobo. The gameshark handbook is useful for this:
http://m-l.org/~greerga/fftnet/fftmech/fftgs41.txt

2. Make a save state in a battle with 2 depth water, nerf the enemies so they're harmless, and get everyone positioned in the water.

3. Open the memory viewer in pSX (or duckstation), go to the address where the routine is located, and zero out one line (4 bytes, starting at an address divisible by 4) in the routine. Only zero out the stuff you're not sure of, no point in testing what you already know works.

4. Test out the various scenarios in your post which I quoted above. Make note of what happens in each scenario when you zero out each part of the routine.

5. Reload the save state to undo you zero-ing out, move to the next address divisible by 4, zero out 4 bytes, and repeat the process at step #4.
44
Help! / Re: ASM understanding
February 07, 2021, 05:15:14 pm
Quote from: Orkney on February 07, 2021, 08:40:57 amHi, i ran into a section of code i don't understand (again)

It's in the routine Weapon_Guard_Usability

The routine returns r2 = 1 if you can't use weapon gaurd and r2 = 0 if you can

It checks several things :
- If the target as don't act --> r2 = 1  and branch to end
- If the target is being ridden (?) --> r2 = 1 and branch to end
- If depht is < 2 --> r2 = 0 and branch to end
At this point, the rest of the routine check for situations where the depht is >= 2
- If the target as chicken, frog or float --> r2 = 0 : ??? Ok for float but why frog and chicken ?!
- The end checks movements abilities that will get rid of depht

Frog and chicken can't use weapon guard do they ?  :shock:
Is there a game mechanics that i'm missing ?

And the being ridden control ? Which unit can be mounted and is using weapon guard?
There are oversights like this here and there. IIRC frog and chicken prevent reactions and movement skills, so frog/chicken can't trigger weapon guard unless you remove that flag and undo any hard-coding. I could be wrong though, I didn't look at those statuses in FFTPatcher.

Ideally the routine would check all the status effects present for the "Can't use reaction or movement skills" and rely on that; maybe by iterating through them and checking if they're present and if they have that flag, all in a subroutine you can call when dealing with all reactions and things that prevent evasion if you're turning weapon guard into an innate-all form of evasion.

If you want to be even more abstract, you could make a more generalized subroutine that checks if an arbitrary bit in an arbitrary byte in a status effect is set. You could probably rig it to need one register as a parameter, by loading the byte to check in the lower half of the register and the bit to check in the upper half. There are only 2 bytes worth of bits in the flags section of the Status Effects table, though there are apparently 2 unused bytes, and other bytes and bit flags which are used.

Note that the "Can React" flag is set when the bit is NOT set, according to the Gameshark tab of FFTPatcher.

Chocobos can be ridden. None of them have weapon guard or use weapons (hence no W-Ev), but again they probably didn't finalize all that stuff until late in development (or they had poor coordination between developers, or both), by which point no one would strip out useless code unless they needed to meet RAM constraints or something.

The float thing I think has to do with height putting someone out of or into range if you are below or above them and using certain melee weapons or skills. Put float on someone and hang out on a rock in Mandalia to see for yourself.

Water depth >= 2 only exists in the Bethla Garrison Sluice battle, and unless you bring a unit with Walk Under Water (Mindflayers IIRC) or maybe the movement skill that lets you move and act while in water, you shouldn't be able to enter that water. It's another edge case that they prepared for but ultimately never encountered because they didn't create circumstances for it to trigger.
45
PSX FFT Hacking / Re: ASM Requests
February 06, 2021, 11:28:28 am
Quote from: Squaresoft on February 05, 2021, 05:12:24 pmOh my, Glain did it and it WORKS LIKE A CHARM, even in TLW 1.06, thank you!.
This?
WORLD_WORLD_BIN
0x42D6C
40100700
2010E200
00210200
0680023C
20204400
B8108424
01008290
FF00C330
06006210
0F008330
0E006328
FAFF0314
02008424
02000010
00000000
0040C634
01001026
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
0x44B08
0680013C
0x44B28
0680013C
40280300
20286500
00290500
20082500
B8102124
01002294
62008594
00000000
0200A214
02002124
620080A4
0F002530
F8FF0514
00000000
F8FF2120
01002294
64008594
00000000
0200A214
02002124
640080A4
0F002530
F8FF0514
00000000
F8FF2120
01002294
66008594
00000000
0200A214
02002124
660080A4
0F002530
F8FF0514
00000000
F8FF2120
62008194
64008294
00000000
02004114
00000000
620080A4
66008294
00000000
02004114
00000000
620080A4
64008194
00000000
02004114
80101400
640080A4

Instead of preventing Chemist & Throw Item / Mediator & Monster Talk / Ninja & Two Swords / Monk & Martial Arts, this hack prevents all inherent abilities from being equipped. So in vanilla it alters nothing, but it will adjust to whatever you do in FFTPatcher. If you're feeling silly, you can do things like giving Knights innate Equip Armor / Equip Sword / Equip Shield to prevent the player from equipping junk. It does not stack with the previous hack; you can't ban specific combos.

It also prevents equipping multiple copies of a single R/S/M ability, which again has no effect in vanilla, but is probably desirable if you're using a "merge Support/Movement" hack.
46
Help! / Re: Golem HP
January 31, 2021, 06:38:06 pm
Ctrl f golem through these pages.

https://ffhacktics.com/smf/index.php?topic=12518.msg228353#msg228353

https://ffhacktics.com/smf/index.php?topic=10381.msg220911#msg220911

https://ffhacktics.com/smf/index.php?topic=11211.msg218573#msg218573

Wiki:
https://ffhacktics.com/w/index.php?search=golem&title=Special%3ASearch&go=Go

Haven't looked at it, but with Dokurider's notes/hacks and the wiki pages, you could set the golem's "HP" to 1.
47
Help! / Re: Brainstorming faith and brave revisited
January 24, 2021, 08:41:46 am
My take on brave/faith is that the major issue is at the extremes, or at one extreme or another.
* 100 Brave means reactions always trigger, 0 means they never do.
* 0 Faith means total immunity to Faith based skills, and you are nerfed if that's all you got.

Solution which minimally affects the game is to set a floor, ceiling, or both to brave and faith wherever they're used.

Reaction trigger rate - vanilla:
Brave / 100
Min: 0%
Max: 100%

Reaction trigger rate - mod:
(Brave / 3) + 34
Min: 34%
Max: 67%

Note that the modded min/max are roughly equidistant from 50%. If you want the average to be lower, then lower the floor, change the divisor, or both. If you want it to be higher, then increase the floor, change the divisor, or both.

If you want more variance, reduce the divisor and reduce the floor. I wouldn't go above a 75% maximum reaction trigger rate.

I recommend you make successful reaction triggers decrement Brave by 1 to 4 Brave, the amount up to you.

Things that don't trigger - like Abandon, which is a 2x bonus to all evasions - should be Support skills. Weapon Guard should be innate to all... by removing the check for the Weapon Guard skill in the evasion routines, not by giving it to everyone. Otherwise you end up with Monks using it as it's cheap and Monk is just beyond Knight.

Unarmed formula - vanilla:
Current PA * Current PA * Brave / 100
Min: 0 damage
Max: 999 damage (at 100 brave and 32 PA, lower if you add berserk, doesn't count zodiac compats)

Unarmed formula - mod:
Base PA * Current PA * ((Brave / 2) + 50)
Min (worst case): 1 damage (Female Wizard at level 1 with 2 base PA, 1 current PA, 0 Brave - this minimum increases with base PA)
Min (realistic): 2 damage (Male Knight at level 1 with 5 base PA, 1 current PA, 0 Brave)
Max: 999 damage (at 100 brave, 19 base PA, 52 current PA, lower if you add berserk, doesn't count zodiac compats)

Much more reasonable damage.

You can add checks to skills that modify SP/PA/MA so they fail if the new value will be outside a certain range of the base stat plus gear bonus. The acceptable range depends on what you're doing with base stats, growths, and gear stat bonuses. If you're sticking with vanilla it's hard since they vary so much, you'll need to do some multiplication to get at anything within 20% above or below the base stat plus gear bonus. If you reduce the stats as I plan to, +- 3 for PA/MA and 2 for SP is good.

With current PA limited to +-20% of base PA + gear PA bonus, maximum damage for a human is:
Max: 513 damage (at 19 base PA, +3 gear PA bonus, 27 current PA, 100 Brave).

That's still a lot of damage, which is why I want to reduce most PA/MA growths and multiplier to max out at maybe 12.


This is another example of problems at the extremes.



As for alternate mechanics for Brave, I had some interesting conversations elsewhere about making brave affect critical hit, status proc, skill proc, and knockback rates; and evasion. I prefer additive bonuses/penalties because multiplicative ones add up very quick and I want to turn Invisible into Blink without making "Abandon + Blink + Blind your enemies" into "hold A to win" for FFT.

Critical, status/skill proc, and knockback bonus formula:
Base rates + (Brave / 8)
Min: Base rates + 0
Max: Base rates + 12

Evasion bonus formula:
Base evasion totals + ((100 - Brave) / 8)
Min: Base evasion + 0
Max: Base evasion + 12

tl;dr

Higher Brave:
* Critical hit, status proc, skill proc, and knockback rates bonus increases.
* Evasion bonus decreases.

Lower Brave:
* Critical hit, status proc, skill proc, and knockback rates bonus decreases.
* Evasion bonus increases.



Faith damage/healing/hit-rate modifier - vanilla:
Faith / 100
Min: 0% of original value
Max: 100% of original value

Faith damage/healing/hit-rate modifier - mod:
(Faith / 3) + 67
Min: 67% of original value
Max: 100% of original value

This retains the vanilla mechanic of faith being a buff or debuff, depending on the situation. If you use a hack that makes only caster or target faith matter, then you reduce the complexity/severity of this mechanic and in some cases remove parts of it. Not making a value judgement, it's your show.
48
PSX FFT Hacking / Re: ASM Requests
January 24, 2021, 08:00:07 am
Quote from: Squaresoft on January 23, 2021, 09:19:43 pm3) An ASM to set X-Job have Y-Skill greyed out for selection.
(Just like Chemist has Throw Item greyed out)
I can't find it, but I think Glain or maybe pokeytax wrote a hack that makes inherent skills (the 4 reaction, support, or movement skills any job class can have permanently equipped in hidden slots) unequippable by players and generated AI characters.
49
https://ffhacktics.com/wiki/Handle_Memory_Card_Menu
^Someone disassembled this recently.

https://ffhacktics.com/wiki/Memory_Card_Format
https://ffhacktics.com/wiki/World_Stats
https://ffhacktics.com/wiki/Item_Inventory
https://ffhacktics.com/wiki/Variables
^All this stuff is probably saved, maybe some other stuff too as per the first link in this post.

My bad, I was going through "Recent posts" and didn't notice this is the FFTA board. I'd look on data crystal and the RHDN site/forums first.

You could use a hex editor.

I use spreadsheets for this sort of thing. I use a python script to rip the data, another to write the data. The actual data is edited in a spreadsheet, usually with a key/legend, a digits tab for all the possible values you'd be looking at (and for hlookup/vlookups in the preview sheet), and a preview sheet that displays your changes. It's faster and simpler than Raven's method of making spreadsheets, and easier to navigate values by using arrow keys, but it doesn't abstract as much guts away from the end user as his do so it has a learning curve for them.

Note that there's also a bit of a learning curve in making spreadsheets, but I can answer any questions you have about the simpler ones I use.

I know nothing about VBA in spreadsheets as I use Libre Office. If you use Excel (and want to mandate it for your users) you can make a button that does the patching for you instead of going through the trouble of forcing users to install python, saving as a CSV, navigating via command line, and invoking the python interpreter.

Libre Office probably has scripting capabilities, but again I know nothing about it. It probably won't work in Excel, but then again Libre Office is free so you could just require it for end users.

I'll upload a couple I made for another game so you can peruse them. Feel free to steal the python scripts.

Note that the monster spreadsheet is quite a bit more complex than the others as it requires an external program to automate insertion/exporting files. Otherwise the end users must import a patched monster file for all 255 monsters manually with CD Mage.
50
Bugs and Suggestions / Re: Return location in the wiki
January 15, 2021, 11:42:34 pm
I'm sure there's a convention, but you could avoid having to deal with it by renaming "return locations" to "called from locations".

IIRC, a jal executes the next line of code, then jumps to wherever it's going. So the return location should be the 2nd line after the jal.

jal
whatever, executed before the jump
whatever, return location

I would verify that first though

https://chortle.ccsu.edu/AssemblyTutorial/Chapter-26/ass26_4.html
^Seems like it's the 2nd location after the jal.
QuoteVery Tricky: the middle step of the machine cycle has already incremented the PC by four. At this point the PC holds the address of the instruction just after the jal instruction. Now the execute phase of the jal instruction adds four to that address and puts the result in $ra. So now $ra holds the address of the second instruction after the jal instruction.

The correct return address is "address of the jal plus eight". This is because: (i) returning from the subroutine to the jal instruction would be a disaster (since it would execute again, sending control back to the subroutine), and (ii) the instruction following the jal is a branch delay slot.
51
Help! / Re: ASM understanding
January 13, 2021, 09:43:43 pm
Quote from: Glain on January 12, 2021, 06:00:40 pmThey're two separate routines that happen to be placed next to each other.  They both have a closing jr (at 0x186d24 and 0x186d50, respectively).  Neither one has a nop, but what's the relevance of that?  They are referenced in the formula pointer table, of course...
Ah, I glossed over it and missed the jr's because I expected nop's after them. My bad.

Quote from: Glain on January 12, 2021, 06:00:40 pm1.  I'm unaware of unknown skill bytes.  If you wanted to consolidate the routines into one by, say, providing the action offset as an argument, it looks like you could save some space.  It doesn't seem like anything amazing though, unless there are a bunch more routines like this.
Another instance of "not checking before I speak" syndrome, I was thinking of items. Looking at skills there isn't much free room, maybe one or two bits each that one can hack from the range, AoE, vertical, CT, MP cost, and formula bytes.

Quote from: Glain on January 12, 2021, 06:00:40 pm2.  Are you asking if the AI would use Cheer Up?  I haven't tested that, although I can't say I remember enemy mediators using Praise very often...
I think I saw an enemy mediator use Preach once, but I'm probably mistaken and the brave/faith modification skills seem low priority... but I was asking if the AI would use a skill that consolidates PA/MA/SP/CT/Brave/Faith changes into a new formula that uses bits in the assorted skill bytes to determine the stat affected.

I assume it needs additional changes to the AI routines to work, or a flag consolidation to specify the stat affected for both the skill effects and for the AI to consider.

Given that a lot of skills wouldn't do anything with those flags, it might make more sense to consider a set of flags as parameters to a formula, whose context varies depending on the formula. The things that never change between all formulas would get/retain their own flags whose meaning never varies no matter the formula used, and those that do change between most formulas would be moved to the parameter flags and their specific meaning would vary depending on the formula used.

Dedicating a byte or two to parameter flags and putting them in a position where they can be loaded with the fewest instructions might make a formula de-harcoding and consolidation project easier, if those flags would get checked the most often in formula routines.

If that's not clear, for a game I'm currently working on, byte 0x0c of skill data is the formula, and bytes 0x01 to 0x04 mean any of a number of things depending on the formula. Therefore bytes 0x01 to 0x04 are parameters to byte 0x0c, when you think about it.

Something like that.

Random Question: are some of the tables for skills 0x170 and above smaller than those above them? I just checked the gameshark tab after changing the item used bytes for Potion and Hi-Potion and those bytes are sequential. Seems to indicate that 0x170 and above don't have the full range of bytes under the "Attributes" heading as skills 0x000 to 0x16f.

I ask because I'll need to make data-editing spreadsheets that generate paste-able hex tables (the FFTPatcher tables, in base 16 form in the manner they exist in the game) if I want to complete my master plan RE a commented disassembly. If those skills don't have entries in an "Skill Attributes" table then I need to account for that. I can figure it out on my own if you are busy, I'm just asking in case you already know and can save me some time later.

If those skills have entries in a "Skill Attributes" table, and you have hacks that can reconfigure them to function like other skills, you should consider making those bytes editable in FFTPatcher if it's not a hassle.
52
Help! / Re: ASM understanding
January 12, 2021, 03:34:47 pm
Quote from: Glain on January 12, 2021, 09:24:27 am2.  Generally speaking, it's absolutely not safe, and it should be assumed that a crash would result.  This will usually corrupt the stack pointer and saved register values, unless you've accounted for that.  It can be made to work in very specialized cases with the right (hacky) setup.
IIRC some of the formulas - I think the stat boosts for Yell and Accumulate - lack a closing jr and nop, and are actually sequential. Are they actually part of a larger routine, or referenced in a pointer table somewhere?

https://ffhacktics.com/wiki/3A_%2BBrave_(Y)
00186d00: 3c028019 lui r2,0x8019         
00186d04: 904238fa lbu r2,0x38fa(r2)     
00186d08: 3c038019 lui r3,0x8019         
00186d0c: 8c632d90 lw r3,0x2d90(r3)     
00186d10: 34420080 ori r2,r2,0x0080     
00186d14: a0620016 sb r2,0x0016(r3)      ; Store Y as 0x80 + Br decrement (boost)
00186d18: 3c038019 lui r3,0x8019         
00186d1c: 8c632d90 lw r3,0x2d90(r3)     
00186d20: 34020001 ori r2,r0,0x0001     
00186d24: 03e00008 jr r31               
00186d28: a0620025 sb r2,0x0025(r3)      ; Store attack type as Psuedo-Status

https://ffhacktics.com/wiki/39_%2BSP_(Y)
00186d2c: 3c028019 lui r2,0x8019
00186d30: 904238fa lbu r2,0x38fa(r2)
00186d34: 3c038019 lui r3,0x8019
00186d38: 8c632d90 lw r3,0x2d90(r3)
00186d3c: 34420080 ori r2,r2,0x0080
00186d40: a0620012 sb r2,0x0012(r3)      Store Y as 0x80 + SP decrement (boost)
00186d44: 3c038019 lui r3,0x8019
00186d48: 8c632d90 lw r3,0x2d90(r3)
00186d4c: 34020001 ori r2,r0,0x0001
00186d50: 03e00008 jr r31
00186d54: a0620025 sb r2,0x0025(r3)      Store attack type as Pseudo-Status

Huh, I didn't misremember.

1. Given that there's a lot of redundancy here, how much space could one save by consolidating these and similar ones and using one of the unknown skill bytes as bit flags to specifiy effects?

2. Do you know if the AI use #1 correctly without modification, or must I investigate that too?
53
You could use FFTPatcher to change the flags so they always trigger traps, giving away their locations. Painful though.

If you want to fool around with display effects, I would set a read breakpoint on a memory address for the move-find item table (maybe use the gameshark tab to locate that address) for a specific battlefield item, then see where it goes. Also search the wiki and see if anything is on there, maybe you can change one of the effects like level down to something else, or make it display a message.

That's not really what you're asking for though, I know.
54
Help! / Re: ASM understanding
January 11, 2021, 11:29:52 pm
Quote from: Glain on January 11, 2021, 09:19:21 amIt's just redundant.

This happens a lot in the vanilla code, where it's like the compiler generated code to do one thing (in this case, set the action's CT), then generated code to do another thing (set the action's type), and just mashed them together without taking into account that it could have just reused the value in r3 instead of reloading the action pointer.

(Vanilla code isn't going to branch into the middle of the routine, and the only branches inside the routine skip to the end of the routine, so those two bits of code will always be run in sequence.)
1. Do you have any additional advice for spotting redundant code?

2. Is it safe to jump into the middle of another subroutine? Is it advisable (seems no to me, harder to track and debug, almost like a goto)?
55
Help! / Re: ASM understanding
January 10, 2021, 08:10:56 pm
1. Check if something else branches to the addresses from 1891d0 to 1891dc by searching the wiki for those values
2. Try nop-ing (zero out 4 bytes of an instruction) the first and second instance and see what happens. Do it twice: first time just see if the skill seems to function, second time look at registers and step through it instruction by instruction to see what's happening internally.

Maybe one of them is redundant? *shrugs*
56
The special pages of the wiki have a few useful tools.

Orphaned pages are those that aren't linked to anywhere. If a disassembled routine is missing, look there first.

Double redirects is often informative.

All pages with a given prefix helps with searching in some cases.

List of redirects is handy.

List of duplicated files can in some cases help you find causes of increased hosting costs, but probably not for our wiki unless there's another spammer attack.

57
Quote from: darkskyx on December 31, 2020, 05:37:37 amIt was not placed in a protected folder, I have it on a folder on my Desktop. Anyway, I "fixed" it by not installing the new update.
In my experience, anything outside of the system and program files folders gives me a warning when I try to execute it.

I use this to add apps to the Windows start menu:
https://www.windowscentral.com/add-app-shortcuts-start-menu-manually-windows-10

I also use Open-Shell as a replacement for the Windows start menu.
58
If something is present in let us say Battle.bin but not the Routines page, then look at the "What links here" link on the sidebar. For example:
https://ffhacktics.com/wiki/Special:WhatLinksHere/Store_Reaction/Proc_ID_and_Target
BATTLE.BIN ‎ (← links)
02 Dmg (Weapon) ‎ (← links)
001876e4 - 0018772c (redirect page) ‎ (← links)
If it's missing a link to the Routines page, you could try adding it to that page. Do you need help editing the wiki? Why don't you give it a try and tell us if you have any problems?

As for duplicates, I would hesitate to mess around with them too much as someone may be doing something there that they didn't tell you about. Maybe edit the Talk page of that page and make a note that it's a duplicate, and link to the duplicate.

You usually want to retain the version with the most comments, but you don't want to mess up the link structure of the wiki either... hence why I advise caution with deletion and redirection.

It won't kill anyone to have a few duplicates floating around, especially if there are notes about them possibly being duplicates present.
59
Hacking/Patching Tools / Re: Formula mapping
December 28, 2020, 05:40:13 am
I noticed a few issues with the wiki too. Some routines overlap with others, some are missing, and some are duplicates.

It's not a serious issue for my purposes until I get around to getting them all in one place, and even then all I would need to do is disassemble the file in which it's found and add that routine.

It could be a serious issue if someone is trying to do something with that routine. It will all eventually get disassembled and dumped somewhere, probably when someone is working on a mod and needs a hack that modifies that routine and an assembly language hacker is interested in it.

Reasons a section of RAM may be missing from the routine locations for a file:
  • The missing area may not be a routine, but a table. These are the things that FFTPatcher edits.
  • The missing area may be empty space, junk that is never called anywhere, or malfunctioning code that makes no sense and can be safely removed.
60
Hacking/Patching Tools / Re: Formula mapping
December 23, 2020, 05:15:36 am
Quote from: Orkney on December 22, 2020, 02:31:14 pmWell, I'm completely out of it...

I don't understand much of what you're saying.
What is your native language? I may be able to find some resources for you in your language so we can leap the language barrier. Besides, there are a few speakers of other languages here who can help you.

Quote from: Orkney on December 22, 2020, 02:31:14 pmYou're talking about formatting the raw code of the wiki in a form that's more convenient to program?
Yes. Besides that:
1. There are a lot of tools for different operating systems to deal with text files.
2. It's the easiest format to write your own programs for.
3. Programmer's tools like Integrated Development Environments (IDEs) or programmer's text editors allow you to highlight syntax, do simultaneous editing, and fold code, as well as quickly navigate through a file with the Find and/or Replace dialogs.

Quote from: Orkney on December 22, 2020, 02:31:14 pmI was just trying to format it to understand it better (at my humble level), as EnderC suggested.
At this stage I haven't written any ASM code yet, I've only read most of the tutorials and links on the site.
I apologize for coming on so strong. I'm just sharing my own findings in case anyone else is interested.

It's your life, and you should do what works best for yourself. If that's Excel spreadsheets, by all means keep doing as you are; your personal goals should matter more to you than my goals and failures.

You can do quite a lot with spreadsheets, so it's not a dead end by any means.

Quote from: Orkney on December 22, 2020, 02:31:14 pmI understand that you want to give names to groups of lines (like the confusion example), so that you can then call them up and have them substituted again by the original code . But how can we create these labels (in what form? in what programme?), and above all how can we use them again?
You could use anything that edits a text (*.txt) file. Notepad would work, though it would be painful to use with so few features.

I use the program Notepad2 to do most of my work - it is a very fast but has everything I need for most tasks - though Notepad++ (which is more like an IDE) is good as well.

I have like 20 different text editors installed on my primary computer, from back when I was testing out different ones to see which I liked. I couldn't tell you what most of them do without spending a day testing them all again (and actually taking notes this time), but there are plenty of options for Windows, Mac, and Linux.

Labels are useful because without them you need to manually tell the assembler (the program or tool which turns the code on the wiki into bytes that run on a PS1 emulator) what address to jump to for jal opcodes and various other opcodes. Needing to manually calculate all that stuff is a nightmare, though I assume you could do it in a spreadsheet (for all of BATTLE.BIN it would be an enormous spreadsheet, you'd probably need tens of gigabytes of RAM to open it) and have the spreadsheet automatically generate these addresses based on a starting address you input somewhere.

Pseudo-instructions are to my limited knowledge useful primarily because they let you use labels.

If you don't use labels or automatically generate addresses, you need to manually edit them whenever you add or delete a line of assembly code, or you are stuck keeping everything where it currently is. This is very limiting. Right now it's dealt with by jumping to free space somewhere, doing stuff there, and then jumping back; but that wastes I think 2 lines of code at least, and there's a limited amount of free space.

With labels and pseudo-instructions, we would never need to jump to free space, and we would have fewer limits on what we could do, and editing assembly would be considerably easier.