Final Fantasy Hacktics

Modding => Help! => Topic started by: DarthFutuza on March 18, 2019, 12:23:24 pm

Title: Battle Event Editing
Post by: DarthFutuza on March 18, 2019, 12:23:24 pm
Hello helpful forum goers,

I'm trying to figure out how to add new mid-battle events (sorry if I'm using the wrong term, might be why I can't find instructions on what I want to do).  I get the impression this has something to do with modifying the attack.out, but I'm not really sure where to start.  What I want to do is this: Take a battle without a mid-battle event, say Eldibis/Deep Dungeon, and add a condition with something like if(Ramza's HP < 25%) startDialogueEvent();  And then Ramza would yell something at Eldibis or whatever and then go back to fighting.

Do I need to overwrite one of the pre-existing event slots (say 491 since its unused), or can I just use the existing battle event (115 I think?) and add what I need to it using EasyVent?  Where does editing the Attack.out come in, etc?
Title: Re: Battle Event Editing
Post by: Nyzer on March 18, 2019, 02:46:56 pm
You'll need to mess with event conditionals for that. It will take a whole new event, too - I mean, maybe in theory ypu could just use If commands to pack it all in the pre-battle event and just refer to it again but I honestly don't know.

http://ffhacktics.com/smf/index.php?topic=6694.0

I've never set this up myself so I couldn't tell you more than that, sorry.
Title: Re: Battle Event Editing
Post by: 3lric on March 18, 2019, 09:14:58 pm
You need to edit the attack.out event conditions spreadsheet and then apply that data to your attack.out file (either via hex edit or using orgASM). You can find the conditions sheet in ravens old tutorial, or in his workbooks. I prefer the former, but thats just me.

I wrote a short tutorial on editing worldmap flow, but the idea is pretty much the same.

Ive done extensive work with event conditions, so if you have more questions, dont hesistate to ask. Though i cant always promise a prompt response (dont ask in PM though, its better if its public so other people can get an answer about it too)


EXAMPLE:

This here is the Undead Algus battle, from WotL that we ported to TLW

0100FD01010019000601
01007E0000000400A500040003000500A50001000500030001000B00A50019000701
01007F0000000400A500040003000500A50001000500030001000800A500190019000801
0600A500000019000901

So lets break this down, taking into account that these are in reverse hex bytes, we will break these down into 4 numbers each to keep it simple

The first condition:
this one is pretty straight forward, standard event call



0100        FD01        0100        1900        0601       
IFVariable 01FD= 1Run Event ->0106



The second condition:
this one is full of untrimmed WotL Fuckery, but a good example to learn from I guess



0100        7E00        0000        0400        A500        0400        0300        0500        A500        0100        0500        0300        0100        0B00        A500        1900        0701       
IFVariable 007E= 0Unit is Present ->00A5Unit is Present ->0003Unit is Alive ->00A5TRUEUnit is Alive ->0003TRUEUnits Turn ->00A5Run Event ->0107


So in this one, if variable 7E is 0, and both (00A5) Algus and (0003) Ramza are present and Alive, then event number 107 will play on Algus' next turn. At the end of that event, variable 7E is changed to 1 (in the event itself, via a event command), which makes it so the event doesn't simply replay on an infinite loop.


The third condition:
this one is full of more untrimmed WotL Fuckery, but still good example to learn from I guess



0100        7F00        0000        0400        A500        0400        0300        0500        A500        0100        0500        0300        0100        0800        A500        1900        1900        0801       
IFVariable 007F= 0Unit is Present ->00A5Unit is Present ->0003Unit is Alive ->00A5TRUEUnit is Alive ->0003TRUEUnits Health ->00A5Less than 25%     Run Event ->0108


So in this one, if variable 7F is 0, and both (00A5) Algus and (0003) Ramza are present and Alive, but Algus' health is below 25%, then event number 108 will play. At the end of that event, variable 7F is changed to 1 (in the event itself, via a event command), which makes it so the event doesn't simply replay on an infinite loop.

Keep in mind that Percent values are in hex, we use 19 here, because 19 in hex is 25 in decimal.


The fourth/last condition:
another one that is pretty straight forward, standard closing event for a boss




0600        A500        0000        1900        0901       
Unit is Dead ->00A50000Run Event ->0109



I hope this makes sense. I haven't used tables on the forum in quite some time, so this took longer to explain than i thought it would lol

EDIT: I also wanted to add, the reason I said these are sort of an untrimmed WotL fuckery type is mess is because we really don't need to check that both Ramza and Algus are present in the above strings, we know they are, because Algus is set via ENTD with his 00A5 ID (for TLW) and Ramza is required in the battle and in chapter 4 where this event takes place, he has his 0003 ID, so even checking for those two things is a bit redundant, but I just took the commands as they were and posted them for breakdown, since it also helps if you ever have a character who could potentially have a bonus scene in a battle based on whether or not they are present, like Agrias does at Golgorand if she is in the battle.
Title: Re: Battle Event Editing
Post by: DarthFutuza on March 19, 2019, 02:34:55 pm
Okay thanks for the information guys, I didn't realize attack.out dealt with mid battle conditions as well as other things.  Looks like I will need to reserve a new event and edit the attack.out to point to it after setting up a condition.  Thanks for the hex tutorial Elric should be helpful, though I've done this thing before its just been a while so its a good refresher.  I'll give it a try and let you know how it goes.
Title: Re: Battle Event Editing
Post by: Nyzer on March 19, 2019, 09:26:11 pm
And yeah, with Elric detailing all that, I'm pretty sure you could indeed just combine it all into one event if you used variable checks and JumpForward.
Provided you have space in the event for that, anyway.
Title: Re: Battle Event Editing
Post by: 3lric on March 20, 2019, 06:28:50 pm
Quote from: DarthFutuza on March 19, 2019, 02:34:55 pm
Okay thanks for the information guys, I didn't realize attack.out dealt with mid battle conditions as well as other things.  Looks like I will need to reserve a new event and edit the attack.out to point to it after setting up a condition.  Thanks for the hex tutorial Elric should be helpful, though I've done this thing before its just been a while so its a good refresher.  I'll give it a try and let you know how it goes.


It wasnt really a hex tutorial. It was a mini tutorial on how some of the commands work and letting you know its in reverse hex bytes. Knowing how to hex edit doesnt immediately mean you know what our commands are, lol.

Youre welcome either way though
Title: Re: Battle Event Editing
Post by: DarthFutuza on March 21, 2019, 12:45:05 am
Quote from: Elric on March 20, 2019, 06:28:50 pm
It wasnt really a hex tutorial. It was a mini tutorial on how some of the commands work and letting you know its in reverse hex bytes. Knowing how to hex edit doesnt immediately mean you know what our commands are, lol.

Yeah, my bad I didn't really know how to refer to it since I hadn't read it in full yet, it was useful regardless now that I have gotten to it.  :D

Quick question, a lot of events I'm looking through seem to look for some seemingly extra variables on most of the event condition checks.
eg:

  0100 7D00 0000 0100 8000 0000       0400 2400       0500 2400            0100      0400 2A00          0500 2A00      0100    0B00           2A00              1900          C001
//if   varD7==0   if  var08==0       ifUnitExists(42)      ifHP(Meliadoul HP > 1%)     ifUnitExists(A2) ifHP(Vormav > 1%) ifATReached(Vormav) LoadEvent(01C0)

Here it checks if both 007D and 0008 are set to 0.  Do we know why it does this and why its relevant/needed?  As you explained, most events set a variable to 1 to indicate its done the event and we don't need to do it again.  But why two different ones?  Is this standard procedure for multiple chained events (set multiple variables for each one)?  (I checked on the wiki's variable reference (http://ffhacktics.com/wiki/Variables#Biographies_.2F_Persons) and it seems like these are temporary/unknown variables so I'm not sure what else they would be.)

Edit: Bleh spacing
Title: Re: Battle Event Editing
Post by: 3lric on March 21, 2019, 12:48:17 am
Variable 7D is the temp variable that is used in the event itself, to make sure that it doesnt repeat, as mentioned.

Variable 08 is end of battle.

in that case those would be two very different things,
<--(Ignore this derp, dunno what i was talking about here) however you broke it down wrong. The bytes are reversed, not the hex in the bytes themselves

Example: 0123 would be 2301, not 3210.

So it's not Variable 08, but rather Variable 80. Which was intended to be used for 2 things and was never actually utilized in game.

EDIT: Hold for more info




0100     7D00     0000     0100     8000     0000     0400     2400     0500     2400     0100     0400     2A00    0500     2A00     0100     0B00     2A00     1900     C001     
IF     VARI 7D     ==00     IF     VARI 80     ==00     UNIT PRESENT ->     ID=24     UNIT ALIVE ->     ID=24     IF     UNIT PRESENT ->     ID=2A    UNIT ALIVE ->     ID=2A     IF     UNIT TURN ->    ID=2A     RUN EVENT ->     01C0     

Title: Re: Battle Event Editing
Post by: DarthFutuza on March 21, 2019, 12:51:19 am
Ah okay that makes sense on that one.  Is variable 08 the standard way to check to see if the battle is over/still happening or unique to this instance/event?  I didn't see any reference to that on the variable reference, maybe its just out of date.

EDIT:
Quote from: Elric on March 21, 2019, 12:48:17 am
however you broke it down wrong. The bytes are reversed, not the hex in the bytes themselves

Example: 0123 would be 2301, not 3210.

Oh yeah, you're right.  Good catch.  Mel is totally 2A, not 24.  I messed that up in my head because 2A == 42 in deci, whoops.  (The other stuff is obviously backwards too XD).
Title: Re: Battle Event Editing
Post by: 3lric on March 21, 2019, 01:02:45 am
Quote from: DarthFutuza on March 21, 2019, 12:51:19 am
Ah okay that makes sense on that one.  Is variable 08 the standard way to check to see if the battle is over/still happening or unique to this instance/event?  I didn't see any reference to that on the variable reference, maybe its just out of date.


You are misunderstanding. The variable in that event is 80, not 08. 80 was intended to be used for something, but ended up not being utilized in game.

This quote from Cheetahs tutorial might make more sense for you

QuoteExample 1: Normal

Orbonne Monastery
ENTD: 183

01 00 FD 01 01 00 19 00 04 00

Orbonne Battle (Gafgarion and Agrias chat)
01 00 7F 00 00 00 01 00 80 00 00 00 04 00 17 00 04 00 34 00 0B 00 17 00 05 00 17 00 01 00 05 00 34 00 01 00 19 00 05 00

Orbonne Battle (Abducting the Princess)
01 00 80 00 00 00 16 00 19 00 06 00

First Line: Checks that boolean "FD 01" is present and runs even script "04 00". This is the standard opening of every event or battle.

Second Line: Checks that booleans "7F 00" and "80 00" are not present. This is because part of the event that is run with this activates boolean "7F 00" so that this Event Conditional will not trigger multiple times. It checks that "80 00" hasn't been run because that is the end of the battle, preventing this script to be run after the end of the battle had occurred. The game then checks to see that units "17" and "34" are present, checks that it is unit "17" turn, and that units "17" and "34" are both alive. Then runs event "05 00", which happens to contain the boolean "7F 00" so that it will be considered present.

Third Line: Checks to make sure boolean "80 00" is not present. Checks to see that all enemies are dead. Runs event script "06 00".


This ^ is very old info, so when we pair it with what we have on the wiki, we know that:

Quote0x0080    0x8005791C    0x01       Orbonne: Gafgarion's Turn (unused)
Mandalia: Victory (unused)


So i apologize for mispeaking, it wasn't for the end of the battle (except for mandalia, which it was also unused at)

As to why it would be used in any other event, i cannot say for certain, however it could be that they intended to have more types of things that could be checked for, that were never implemented, or it could just be a bit of junk code that was never removed.
Title: Re: Battle Event Editing
Post by: DarthFutuza on March 21, 2019, 01:21:26 am
All good this helps a lot.  80 is the beginning of a new set of stuff in memory, plus when size switches from words to the miscellaneous bit section.  Also, probably not coincidence that happens after 128 total words (which is ~2048 bits which is the max memory size of the playstation's RAM if I recall right).  I dunno why it would necessarily need to check that, but it might be some sort of max memory/capacity check.

EDIT: Nope can't be that, playstation has 2 MB lol, not 256 bytes.  ¯\_(ツ)_/¯
Title: Re: Battle Event Editing
Post by: 3lric on March 21, 2019, 01:52:56 am
The more you look thru the bits of the game code, the more you will find weird things that don't make much sense.

There is a ton of redundancies in the worldmap conditions as well, but i don't know that anyone has ever bothered to trim it and remove any redundant coding yet. Kinda doubt it since like, all of 5 people even touch that sheet, lol.
Title: Re: Battle Event Editing
Post by: DarthFutuza on March 21, 2019, 03:25:23 pm
I might try that next, but what I had in mind for my changes isn't really that big of a scope to require new map stuff.

Thanks to your help I was able to get the last bit of what I was missing working and I understand attack.out pretty well.  Now I just have to add details and polish things up.  Maybe add one more event depending on how ambitious I'm feeling.

(https://i.imgur.com/isI5zVo.png)
Woo, battle events.
Title: Re: Battle Event Editing
Post by: 3lric on March 21, 2019, 09:28:23 pm
Events are easy, ive made over 200 of em :P

You just gotta want it (and have a lot of motivation)
Title: Re: Battle Event Editing
Post by: RJ Cid on April 02, 2019, 09:53:03 am
Hello all!

Been learning more about some sprite editing and now that I'm getting familiar with CDMage I'm curious about a few things...

In vanilla, Cloud comes in at LV.1 and this was considered unpopular and changed in 1.3 (which is the version I'd like to practice the editing on ;) ). I actually prefer to get some of my special characters at LV.1 so that I have more control over their leveling progressions. Are there any drawbacks to doing this? And how would I go about making it happen?

Also, I'm having the worst time getting the event portraits to change colors... Looked into a sprite editing tutorial video and read everything posted on this site, but no matter what combo I implement, I can't get the portrait to out of those reverse colors. Any common mistakes I should consider? I'm using the sprite files from this site, and everything else changes over just fine.

Lastly, how do I edit abilities? I'd like to add one, or make it learnable like Ultima to a certain class what can't be fully mastered. You can just answer that one with a link on this site. Thank you so much... I love you  :cool:
Title: Re: Battle Event Editing
Post by: Nyzer on April 02, 2019, 10:33:04 pm
Best not to jump in to someone else's topic to post unrelated questions, dude.

QuoteIn vanilla, Cloud comes in at LV.1 and this was considered unpopular and changed in 1.3 (which is the version I'd like to practice the editing on ;) ). I actually prefer to get some of my special characters at LV.1 so that I have more control over their leveling progressions.
... how would I go about making it happen?


FFTPatcher. Specifically the ENTD tab.

QuoteAre there any drawbacks to doing this?


Well, if you intend for your mod to be playable by other people, you can easily end up convincing your players not to use that character.

There's a potential workaround there, though. If you're never going to use that party member in any further events, and thus don't need them to have a single specific Unit ID, you can always add a duplicate, not-present unit at level 1 and give the player a choice before the end of the recruitment event as to whether they'd want a level 1 character or a matching-party-level character. Depending on their choice, remove the one used in the event while adding in the duplicate, then end the event.

It's not a great workaround, mind you. It's always best to just have one unit ID for your special character.

A better workaround would be to adjust the character's level directly, which I believe is possible through some complicated event editing - there's a method to set up variables to point at a character's stats in a way that allows you to adjust them - but I don't yet know how it's done, myself.

QuoteAlso, I'm having the worst time getting the event portraits to change colors... Looked into a sprite editing tutorial video and read everything posted on this site, but no matter what combo I implement, I can't get the portrait to out of those reverse colors. Any common mistakes I should consider? I'm using the sprite files from this site, and everything else changes over just fine.


Reverse colors? I don't know what you're talking about.

Best guess is you're trying to use the same palette for both the sprite and the portrait, and it doesn't work that way. Portraits use Palette 9 and above. Best to use GraphicsGale, as it lets you see and adjust your 16-color palettes at all times. Though it takes a small amount of fiddling to switch between current palettes.

QuoteLastly, how do I edit abilities? I'd like to add one, or make it learnable like Ultima to a certain class what can't be fully mastered. You can just answer that one with a link on this site. Thank you so much... I love you  :cool:


Again, FFTPatcher. This time, the Abilities and Skill Sets tabs. Look at how skills like Ultima and Zodiark work for reference. If you know how some of them have been altered in Jot5 you can open the release version of Chapter 1 and see some other options as well (though a fair number of ability changes are also due to ASM hacks, which are done with a different tool and can't be seen with FFTPatcher).

FFTPatcher is a very simple tool with a very wide scope of what it can change; I'd strongly recommend you spend a lot of time going through it and learning what you can do, as poking around with it can save you a ton of questions in the future.
Title: Re: Battle Event Editing
Post by: 3lric on April 03, 2019, 12:00:42 am
Load the sprite in palette editor by Xif, to get rid of the reverse colors in the portrait
Title: Re: Battle Event Editing
Post by: RJ Cid on April 03, 2019, 03:59:00 pm
Thanks Elric! Much obliged  :cool:
Title: Re: Battle Event Editing
Post by: DarthFutuza on November 22, 2019, 12:31:10 pm
I figured I'd just keep going with this topic since I'm editing my event again to try and add some more features and have more event questions.

1) I wanted to try adding another new event, but I wanted to set a variable that I can have the world instructions check for when a map is visited.  That said I'm not sure how to actually set that variable.  There's a SETVar (175) option available in EasyVent Editor, that appears to do what I want, but it mentions that I have to have an event instruction upgrade hack (http://xifanie.ffhacktics.com/EventInstructionUpgrade.xml).  I was just wondering if the hack is necessary to set variables, or if there's a simpler way/another tool that could be used just for editing variables before I bother adding the hack?  Information is just so scattered and there's a ton of out of date stuff that's been replaced with newer methods I thought I should just check first, before I go ahead.  Nyzer answered this.  :)  Use the add/AND/or etc cmds silly.

2) Is there a Brave Story editing tutorial somewhere?  I just want to add a new character entry and update a previously existing one with more info as a result of my new event.  I noticed Elric mentioned (http://ffhacktics.com/smf/index.php?topic=8229.msg196208#msg196208) it was coming soon, but I couldn't find anything else.  I suppose this probably works with some variation on the SETVar command, where I activate one of the unused slots (http://ffhacktics.com/wiki/Variables#Biographies_.2F_Persons) to 'reveal' it and then use tacttext to supply the text? Solved.  See here (http://ffhacktics.com/smf/index.php?topic=12338.msg226994).

3) Is there any information available on using rumors to trigger events/changing what rumors show up in the bar/adding new rumors that when listened to, set/modify variables?  (Sorta like how the vanilla game did it with the Beowulf/Cloud/Reis sidequest)?  I imagine that's probably pretty similar to the previous question, of setting the variable to change which rumors show up, along with a little extra something somewhere to tell the game to check if the player bothered reading the rumor.
Title: Re: Battle Event Editing
Post by: Nyzer on November 22, 2019, 01:04:54 pm
1) SET is only available with the upgrade, but other commands such as ZERO and ADD are just available normally.
Title: Re: Battle Event Editing
Post by: DarthFutuza on November 22, 2019, 01:09:17 pm
Quote from: Nyzer on November 22, 2019, 01:04:54 pm
1) SET is only available with the upgrade, but other commands such as ZERO and ADD are just available normally.

Ah perfect, thanks Nyzer, I guess I missed all those logic commands.  I can just use traditional register style AND/ORS then to edit it.  Well then the set one is just extra fancy stuff that's not really needed.   :)
Title: Re: Battle Event Editing
Post by: Nyzer on November 22, 2019, 02:22:13 pm
Check out the event commands at http://ffhacktics.com/wiki/Event_Instructions - it shows which ones are upgrades and which aren't.
Title: Re: Battle Event Editing
Post by: DarthFutuza on November 26, 2019, 03:00:15 am
So I figured out 2) myself, I think I'll make a tutorial (http://ffhacktics.com/smf/index.php?topic=12338.msg226994) when I have some time since there isn't a pre-existing one that I know about.  It turns out it's easy pezy. 
Title: Re: Battle Event Editing
Post by: DarthFutuza on March 08, 2020, 12:14:55 am
Hello. So I got another two questions, that I'm sure is easy for you guys, but I can't seem to find the information I'm looking for.  How do you load a specific map for a new event/scenario?

Say I wanted to do something like: player arrives at location (say Warjilis) and certain variable (https://ffhacktics.com/wiki/Variables#Miscellaneous_Bits) is set to 1, load an event, but load it at a location other than Warjilis?  eg: Load the event at Nelveska Temple. 

Eg something like:
0100 B000 0100 1900 EC01 0200
//if var == 1, load 0x1EC, fadein
How would I add the right map to the cmd?  Or should I just do that right at the beginning of the event being loaded with:
ChangeMap(070,x00)
Reveal(060)
//rest of planned event

My second question, is how to add the Join After Event prompt to an event?  (I know I can do it with premade events that are listed in the ENTD tab of the FFTPatcher, but what about for new events?)
Title: Re: Battle Event Editing
Post by: Nyzer on March 08, 2020, 12:33:08 am
Attack.OUT editing.

You choose the map and the ENTD for the event with it.
Title: Re: Battle Event Editing
Post by: Xifanie on March 08, 2020, 12:40:21 am
You should only ever use ChangeMap() if you don't need to change the ATTACK.OUT data (such as the ENTD or songs) and you can essentially squeeze what would normally be 2+ events into one. Otherwise, just the plain old ATTACK.OUT editor to change the loaded map.

What you described is really a non-issue because there is no coding or anything that associates a map to a particular world map location. It's all editable in the ATTACK.OUT editor.

Quote from: DarthFutuza on November 22, 2019, 12:31:10 pm3) Is there any information available on using rumors to trigger events/changing what rumors show up in the bar/adding new rumors that when listened to, set/modify variables?  (Sorta like how the vanilla game did it with the Beowulf/Cloud/Reis sidequest)?  I imagine that's probably pretty similar to the previous question, of setting the variable to change which rumors show up, along with a little extra something somewhere to tell the game to check if the player bothered reading the rumor.
I think @RavenOfRazgriz was the one who figured that out? I just remember it's not nearly as simple as it seems... not sure if it's been documented.
Title: Re: Battle Event Editing
Post by: DarthFutuza on March 08, 2020, 12:52:07 am
Hmmm, okay.  I think I figured out what I was doing wrong.  I was trying to find a matching scenario for 491-499 for the events, but it only goes up to 01EA(490 - Bethla Garrison Sluice Hint) in the editor.  I suppose I have to reuse a previously existing scenario then?  Is there anyway to create new Attack.out data/scenarios for unused events like 0195 or 0491?  (I'm trying to add content to the original game, without breaking it as much as possible.)

This is a small event so I could probably just use ChangeMap() if there's no other options.
Title: Re: Battle Event Editing
Post by: DarthFutuza on March 10, 2020, 02:19:24 am
So after reading more posts on the forums and doing more searches it looks like there's no way to add new events given that the scenario list is full and the unused ones are apparently unusable (https://ffhacktics.com/wiki/Event_Scripts_and_Scenario_Order_correlation) (at least without doing some very drastic assembly hacking which is probably not worth the work to me) :(  I can however, replace the tutorial events so there's at least some room to work with since that won't affect the main game itself.  Guess I'll try that first. :)
Title: Re: Battle Event Editing
Post by: 3lric on March 10, 2020, 06:26:50 am
Quote from: DarthFutuza on March 10, 2020, 02:19:24 amSo after reading more posts on the forums and doing more searches it looks like there's no way to add new events given that the scenario list is full and the unused ones are apparently unusable (https://ffhacktics.com/wiki/Event_Scripts_and_Scenario_Order_correlation) (at least without doing some very drastic assembly hacking which is probably not worth the work to me) :(  I can however, replace the tutorial events so there's at least some room to work with since that won't affect the main game itself.  Guess I'll try that first. :)

You cant use the tutorial events. Those slots are not useable as we previously thought... You can use TLW, is has a lot of free event slots.
Title: Re: Battle Event Editing
Post by: DarthFutuza on April 21, 2020, 10:42:53 am
Quote from: Elric on March 10, 2020, 06:26:50 amYou cant use the tutorial events. Those slots are not useable as we previously thought... You can use TLW, is has a lot of free event slots.
Aww darn.  Well I guess that works, how did you guys manage to free additional event slots while also adding more?
Title: Re: Battle Event Editing
Post by: Xifanie on April 21, 2020, 11:30:42 am
Quote from: DarthFutuza on April 21, 2020, 10:42:53 amAww darn.  Well I guess that works, how did you guys manage to free additional event slots while also adding more?
Vanilla uses 'setup' events that have no use other than padding in a way that helps avoid otherwise avoidable bugs.
So regular, non-battle events in vanilla always use 2 slots, but they really only need one.

The only issue we encountered was special portraits not rendering properly unless there was an event between a hard save and the event with the special portrait. Or something. Anyway that means 1 event slot freed for every scenario in the game. All the events had to be reorganized, and it took a lot of time and effort.

Gotta thank @Elric for that 💜