Use of ePSXe before 2.0 is highly discouraged. Mednafen, RetroArch, and Duckstation are recommended for playing/testing, pSX is recommended for debugging.
Quote from: Rurusachi on July 10, 2025, 04:19:53 amI don't really know what's going on here. You'll need to explain what you've changed for me to be able to help. Or make a patch of your modded rom and send it (not the rom itself. I'd recommend bsdiff for making patches)
Make sure the ability has an AP slot assigned for the race you've added it to (On the Ability's Learning tab).
Also make sure you've set the Ability's max AP (on the Job's Ability Set tab since Abilities can have different max ap for each job)
You only need the first effect here.
I'm guessing you're the person that also asked about this on Discord but I'll post my answer here as well:
Unfotunately proper cutscene editing isn't really possible yet. Events are written in a scripting language that I haven't fully reverse-engineered yet. The editor can only change the strings that are used in each event. The strings are referenced by index in the event's string table. So a decompiled script would contain something like showDialogue(speakingUnit, stringIndex).
So for now all you can really change is the contents of each speech bubble
Nice that you got it working! Thanks for writing out the steps.
I'll see if I can reproduce that bug myself but I didn't have any issues like that when I tested.
Yeah it rebuilds the internal filesystem so there's no guarantee that any offsets stay the same. That's why I tried to include all the features of previous tools. Is there anything you need that the editor can't currently do?
If you mean the mission rewards you get after completing a mission (2x Gikhet Lead and 2x Faren Pollen for Stranger in the Woods) then they're 2-byte values starting 0x50 in the quest data structure. The 2-byte value contains both the amount and the item id. The lower 10 bits are the item id and the upper 6 bits are the amount. So for example 2x Gihket Lead is 0x9DD because the lower 10 bits of that is 0x1DD (which is Gikhet Lead) and the upper 6 bits is 2 (I've attached a simple visual example). If you're familiar with bit shifting and logical operators the calculation would be: (amount << 10) | item
(Sorry if you already knew all/most of this. I'd rather be too detailed than too simple. If you have more questions it might be easier to ask me on the Discord server. I check it a lot more often than I check the forum)
Quote from: Nyzer on June 09, 2025, 02:18:29 pmPatches are always meant to be applied to clean vanilla copies of the game.
Quote from: Ethereal Embrace on July 10, 2025, 09:14:35 pmI did not do that last part, thanks.I'm guessing you're trying to load a modded rom (or a non-US version). If it's a modded rom then there's something wrong with some data. The logs should tell you exactly what failed to load or you can post the logs here so I can check.
I now have this error lol.
Quote from: Ethereal Embrace on July 10, 2025, 05:40:59 pmI see, that's very convoluted but interesting. Thanks for responding.Did you miss this steps?:
I decided to try out the editor but when I try opening the file, I get this error. Any idea what it means?
Quote from: Ethereal Embrace on July 10, 2025, 01:32:11 pmNo, I didn't know that, thank you! I knew about the item IDs but I couldn't parse where the number of said items came into it. This is very helpful.Yes. I've found the data for it, I just haven't added it to the editor yet. The law bonuses start at 0x054147A0 in a vanilla ROM. It's an array of 50 8-byte data structures. Each one has 3 2-byte item ids and 2 bytes of padding. I also took a look at the code just now to figure out exactly how law bonuses work:
I guess my next question is: is there any way to change judge bonuses for upholding the law in a mission?
void FUN_give_law_bonuses(int param_1) {
uint max_slot;
for (max_slot = 0;
(max_slot < 4 && (GLOBAL_law_bonus_story_progress_gates[max_slot] < FUN_get_story_progress()));
max_slot = max_slot + 1) {}
max_slot = (max_slot + 1) * 10;
byte law_bonus_streak = FUN_get_law_bonus_streak();
if (3 < law_bonus_streak) {
*(byte *)(param_1 + 0x85) = 3;
} else {
*(byte *)(param_1 + 0x85) = law_bonus_streak;
}
for (int slot = 0; slot < *(byte *)(param_1 + 0x85); slot = slot + 1) {
ushort stored_index = GLOBAL_law_bonus_stored_indices[slot];
uint max_received = FUN_get_stored_value(stored_index);
if (max_received < max_slot) {
FUN_set_stored_value(stored_index, max_received + 1 & 0xff);
}
else {
uint random_number = FUN_rand?();
max_received = FUN_modulo?(random_number >> 0x10,max_slot);
}
ushort* law_bonuses = FUN_get_law_bonus(max_received);
ushort item_id = law_bonuses[slot];
*(ushort *)(param_1 + slot * 2 + 0x86) = item_id;
FUN_give_item(item_id, 1);
}
return;
}
Page created in 0.023 seconds with 27 queries.