News:

11 March 2016 - Forum Rules

Main Menu

Secret of Mana, Turbo - Beta 210915

Started by Queue, January 31, 2019, 06:45:12 PM

Previous topic - Next topic

hmsong

Quote from: kethinov on April 14, 2020, 05:30:45 PM
Dummied events is a shorthand for any event that is not called anywhere in the vanilla script. Most of the time it means an event pointer that points to an empty (zero byte) event. But sometimes when people talk about dummied events, they are referring to events in the event list that have actual executable code but are never used or called e.g. the event I restored in the Frosty the Friendly Alchemist hack that is fully functional but unused by vanilla.

Ahh, okay, but are there any situations where the seemingly "dummy" events are already in use?  For example, events that have nothing but 00s, but it's being used by another event?

kethinov

None of the dummied events are used by vanilla, but several are used by other hack authors. I've used quite a few.

hmsong

Ah, okay.  So... I'm sorry to ask you this, but could you explain your Mana Fortress Neko event that I'm confused about?  Specifically,

'[Event 4F1: Dummied Out]-[Event 4FB: Dummied Out]
@OFF $CA4D89
\event \if_flag== 4F 1F \goto 659
\event \if_flag== 4F 00 \goto 678
\event \end


I get that event 4F1 will make the NPC do different event, depending on... something, but how does event 4F1 know that?  Specifically, 4F 1F and 4F 00.  I have no idea what that came from, and I don't even see the pattern.  4F 00 apparently has something to do with the beginning of the game, whereas 4F 1F is near the end of the game, but how do you determine that?  Where are those values coming from?  I'm quite confused.  Thanks.

kethinov


'[Event 4F1: Dummied Out]-[Event 4FB: Dummied Out]
@OFF $CA4D89


This declares intent to write code to CA/4D89.

\event \if_flag== 4F 1F \goto 659

This writes a new event there which checks if event flag 4F (Mana Fortress bridges status) is between 1 and F (any of the bridges are extended). If so, it calls event 659, which is another dummied out event I have written new code to for that hack. That new event shows a special item ring for Mana Fortress Neko, creating the new item ring that didn't exist in vanilla.

\event \if_flag== 4F 00 \goto 678

If not, it calls event 678, which is another dummied out event I have written new code to for that hack. That new event calls the original item ring.

\event \end

This ends the event code.

hmsong

Oh wow.  Amazing.  How did you know event 4F is bridge extension status?  I'm looking at the code, and I don't get it:


[Event 4F: Save Dialogue Jumper]
0910A0: 5E                             ;Close Currency Window.
0910A1: 10 50                          ;Jump To Event 50: Save Dialogue.
0910A3: 00                             ;End Of Event.

kethinov

Event 4F is a different thing from event flag 4F. The event flag list is a completely separate list.

hmsong

Oh, dang it.  Could you tell me which bank has the event flags?  I'd love to take a look at it.

kethinov

The event flags are in RAM space, not ROM space. They're basically just a bunch of random things stored in memory to track the game's state, largely having to do with which events have already happened and which haven't. A lot of the events in the event system will either set new event flags or examine the contents of others.

Queue

Not enough time for a proper post, but wanted to quickly drop off some data:
' empty events:
' 000     ! used extensively
' 00C-00F .
' 014-01D .
' 02E     .
' 033-037 .
' 039     - used by Revisit_Sunken_Continent (in-place 039-03E)
' 03A-03E ^
' 043     .
' 044     .
' 045     - used by New_Game_Plus
' 046     - used by New_Game_Plus
' 048-04E .
' 061     .
' 066-06F .
' 071-080 .
' 085     .
' 086     - used by Day_Night_Cycle
' 087     - used by Day_Night_Cycle
' 088-08D .
' 08E     ! used by map 15, object 7
' 08F     ! used by map 15, object 8
' 090-098 .
' 09A-0A5 .
' 0A6     ! used by map 256, object 1
' 0A7     .
' 0A8     ! used by map 256, object 2
' 0AC     .
' 0AD     .
' 0AF     .
' 0BF     .
' 0C1-0C3 .
' 0C5-0CC .
' 0D6-0D9 .
' 0DD     .
' 0DE     .
' 0E4     .
' 0F6     .
' 129     .
' 12A     .
' 14F     .
' 15B     .
' 176     .
' 178-17D .
' 19D     ! used by event 191
' 1A4     .
' 1A8-1AA .
' 1AB     - used by VWF_Edition and Relocalized
' 1F1     .
' 1F3     - used by New_Game_Plus
' 1F7     .
' 1F8     - used by VWF_Edition and Relocalized
' 1F9     - used by VWF_Edition and Relocalized
' 1FA     - used by VWF_Edition and Relocalized
' 1FB     - used by VWF_Edition and Relocalized
' 1FC     - used by VWF_Edition and Relocalized
' 214-217 .
' 21A     .
' 21B     .
' 25C     ! used by map 336, auto event
' 27A     - used by VWF_Edition and Relocalized
' 27B     .
' 283     .
' 299     ! used by events 295,298 (not used by VWF_Edition and Relocalized)
' 2A9     ! used by events 2A5,2A8 (not used by VWF_Edition and Relocalized)
' 2CB     .
' 2DF     ! used by events 2E1-2E7 (not used by VWF_Edition and Relocalized)
' 2FF     .
' 316     .
' 317     .
' 31A-31F .
' 329-32F .
' 349-34F .
' 361     .
' 362     .
' 377     .
' 379-37B .
' 38A     .
' 394     .
' 395     .
' 39D     .
' 3A0     .
' 3AB     .
' 3BE     .
' 3BF     .
' 3F1-3FE .
' 401     - used by Restore_Unused_Fanfares, conflicts with map 15
' 401     ! used by map 15, object 2
' 402     ! used by map 15, object 3
' 403     ! used by map 15, object 4
' 404     ! used by map 15, object 5
' 405     ! used by map 15, object 6
' 406     .
' 407     .
' 40A     - used by Frosty_the_Friendly_Alchemist (in-place 40A-40F)
' 40B-40F ^
' 41D     .
' 41F     .
' 427     .
' 42E     .
' 438-43F ~ vanilla space used by Killable_Snowmen (without True_Monster_Names)
' 441-44F ~ vanilla space used by Faerie_Coconut or Stardust_Herb
' 45C-45F .
' 461-47B .
' 481     .
' 487     - used by Centered_Inn_Bed (in-place 487-495)
' 488-495 ^
' 496-49E .
' 4A6-4A9 .
' 4BA-4BC .
' 4C7     .
' 4CC-4CF .
' 4D1-4D3 .
' 4D5-4D7 .
' 4D9-4DF .
' 4EB     - used by VWF_Edition and Relocalized
' 4EC-4EF .
' 4F1     - used by Neko_And_Watts_In_Fortress (in-place 4F1-4FB)
' 4F2-4FB ^
' 4FC     .
' 4FE     .
' 4FF     .
' 50B-50F .
' 512-51A .
' 51C     .
' 534-53F .
' 545     .
' 546     .
' 548     .
' 549     .
' 55F     .
' 56D-56F .
' 579-57F .
' 591     .
' 595     .
' 59C     .
' 5B5-5CF .
' 5D0     - used by Revisit_Pure_Land (in-place 5D0-5D7)
' 5D1-5D5 ^
' 5D6     - used by VWF_Edition and Relocalized
' 5D7     - used by VWF_Edition and Relocalized
' 5FA-5FD .
' 60A     ! used by events 600,604 (not used by VWF_Edition and Relocalized)
' 60B     ! used by events 600-602 (not used by VWF_Edition and Relocalized)
' 60C     ! used by events 600,601 (not used by VWF_Edition and Relocalized)
' 60D     .
' 60E     .
' 62F     .
' 630     .
' 631     .
' 634     .
' 635     ! used by maps 194,197, auto event
' 639     .
' 63C     .
' 640     .
' 645     .
' 649-64E .
' 64F     ! used by map 15, auto event
' 652-657 .
' 659     - used by Neko_And_Watts_In_Fortress (in-place 659-65E)
' 65A-65E ^
' 678     - used by Neko_And_Watts_In_Fortress (in-place 678-67D)
' 679-67D ^
' 6A0-6AF .
' 6B9-6C5 ~ vanilla space used by Herbal_Boost
' 6C6     .
' 6D2-6D6 .
' 73B     .
' 73C     .
' 740-742 .
' 743-747 - used by Revisit_Goblin_Village (in-place 743-747, fall-through to 748)
' 74B-77F .
' 7A1-7BF .
' 7DF-7F1 .
' 7F2     - used by Early_Luna
' 7FC     - used by VWF_Edition and Relocalized

Preliminary list of empty events and whether they're:
. actually unused (marked with a period)
! used by vanilla stuff (marked with an exclamation point)
- used by a mod for events (marked with a hyphen)
~ used by a mod as arbitrary non-event data (marked with a tilde)
^ is used to point up an entry for mod events that are dumped in-place; the subsequent events are still available if relocated.

Any that are listed as used, I am sure of, but there's a chance I overlooked something for any listed as unused; I need to make a few more passes over different systems that can specify events to double-check. There are 2048 events total so it's pretty laborious.

hmsong

Quote from: kethinov on April 15, 2020, 06:18:19 AM
The event flags are in RAM space, not ROM space. They're basically just a bunch of random things stored in memory to track the game's state, largely having to do with which events have already happened and which haven't. A lot of the events in the event system will either set new event flags or examine the contents of others.

Okay, I have no idea what that means.  But there are ways to track down the event flags, right?  I mean, I'm guessing that's how you created your Luka's Pet and various Watts/Nekos (such as when they appear or disappear).  If I wanted to play around with event flags, where do I look?  Could you please help me?



@Queue

Holy crap, that Neko shop thing was a lot of work.  But it's finally done:


'[Event 65 - Initial Neko Shop]
@OFF $C91233
\event \text_open \gold_show
'TEXT _ ^P u r r f e c t l y _ p r i c e l e s s \n
'TEXT _ i t e m s _ a v a i l a b l e ! \n
'TEXT _ (
'\event \text_opt_start \text_opt_define= 03
\event \flag== FA 01 ' Initial Neko Shop
TEXT _ ^P u r r f e c t ! _ ^U n i q u e _ i t e m s \n
TEXT _ a v a i l a b l e ! \n
TEXT _ _ (
\event \text_opt_start \text_opt_define= 04

'[Event 1DF - Various Nekos in the Beginning]
@OFF $C98144
'TEXT ^N ^E ^K ^O : ^M e o w , _ b u s y _ t r a v e l e r s ! \n
\event \flag== FA 01 ' Initial Neko Shop
TEXT ^N ^E ^K ^O : ^I _ h a v e _ i t e m s , _ n y a ! \n
@OFF $C98195
'\event \goto 301
\event \goto 4F1

'[Event 23C - Upperland Neko]
@OFF $C99D7C
'TEXT _ ^W h a t _ c a n _ ^I _ d o _ f o r _ y o u ? \n
\event \flag== FA 06 ' Upperland Neko Shop
TEXT _ ^H o w _ c a n _ ^I _ h e l p _ y o u ? \n

'[Event 318 - Mountain Neko]
@OFF $C9CD58
\event \flag== FA 0E ' Tasnica Shop

'[Event 319 - Grand Palace Neko]
@OFF $C9CDFE
'TEXT _ ^H a v e _ e v e r y t h i n g _ y o u _ n e e d ? \n
\event \flag== FA 0F ' Grand Palace Neko Shop
TEXT _ ^W h a t _ c a n _ ^I _ d o _ f o r _ y o u ? \n

'[Event 65F - Ice Country Neko]
@OFF $CA8962
'\event \lock \gather \camera_center
\event \lock
\event \flag== FA 01 ' Initial Neko Shop
@OFF $CA8993
'\event \wait_input
\event \call 480 ' event 480 - \lock \gather \camera_center
@OFF $CA89B2 ' Ice Country Neko Shop Pointer
'\event \goto 308
\event \goto 310 ' Call Shop List

'[Event 4F1: Dummied Out]-[Event 4FB: Dummied Out]
@OFF $CA4D89
\event \if_flag== 4F 1F \goto 659
\event \if_flag== 4F 00 \goto 678
\event \end

'[Event 659: Dummied Out]-[Event 65E: Dummied Out]
@OFF $CA895C
\event \flag== FA 0F ' Grand Palace Neko Shop
\event \goto 312
\event \end

'[Event 678: Dummied Out]-[Event 67D: Dummied Out]
@OFF $CA8E69
\event \flag== FA 01 ' Initial Neko Shop
\event \goto 312
\event \end

IF [Text]
IF VWF_Edition
IFNOT Relocalized
'[Event 65 - Initial Neko Shop]
@OFF $E0612F ' event 65
ADR $C91233 ' vanilla
@OFF $E07F32 ' event 65
ADR $800000

'[Event 1DF - Various Nekos in the Beginning]
@OFF $E0659D ' event 1DF
ADR $E197A4
@OFF $E083A0 ' event 1DF
ADR $800000
@OFF $E197A4
\event \wait_input \text_clear \call 480 \gold_show
'TEXT ^N e k o : ^M e o w , _ b u s y _ t r a v e l e r s ! \n
\event \flag== FA 01 ' Initial Neko Shop
TEXT ^N e k o : ^I _ h a v e _ i t e m s , _ n y a ! \n
TEXT _ ^I ` l l _ e v e n _ s a v e _ t h e _ g a m e ! \n
TEXT _ _ ( _
\event \text_opt_start \text_opt_define= 04
TEXT ^S a v e _ _
\event \text_opt_define= 0A
TEXT ^B u y _ _
\event \text_opt_define= 0F
TEXT ^S e l l _ )
'\event \text_opt_end== \goto 0FF \goto 04F \goto 301 \goto 313 \end
\event \text_opt_end== \goto 0FF \goto 04F \goto 4F1 \goto 313 \end

'[Event 23C - Upperland Neko]
@OFF $E066B4 ' event 23C
ADR $E1BE2B
@OFF $E084B7 ' event 23C
ADR $800000
@OFF $E1BE2B
\event \text_open
TEXT ^N e k o : ^P u r r f e c t _ w e a t h e r !
\event \wait_input \text_clear \call 480 \gold_show
'TEXT _ ^W h a t _ c a n _ ^I _ d o _ f o r _ y o u ? \n
\event \flag== FA 06 ' Upperland Neko Shop
TEXT _ ^H o w _ c a n _ ^I _ h e l p _ y o u ? \n
TEXT _# 02 (
\event \text_opt_start \text_opt_define= 04
TEXT ^S a v e
\event \text_opt_define= 0A
TEXT ^B u y
\event \text_opt_define= 0F
TEXT ^S e l l _ )
\event \text_opt_end== \goto 0FF \goto 04F \goto 306 \goto 313 \end

'[Event 318 - Mountain Neko]
@OFF $E20A4F
\event \flag== FA 0E ' Tasnica Shop

'[Event 319 - Grand Palace Neko]
@OFF $E0694B ' event 319
ADR $E20ACD
@OFF $E0874E ' event 319
ADR $800000
@OFF $E20ACD
\event \text_open
TEXT ^N e k o : ^F i n a l l y _ o n _ y o u r _ w a y ? \n
TEXT _ ^G o o d _ l u c k !
\event \wait_input \text_clear \call 480 \gold_show
'TEXT _ ^H a v e _ e v e r y t h i n g _ y o u _ n e e d ? \n
\event \flag== FA 0F ' Grand Palace Neko Shop
TEXT _ ^W h a t _ c a n _ ^I _ d o _ f o r _ y o u ? \n
TEXT _# 02 (
\event \text_opt_start \text_opt_define= 04
TEXT ^B u y
\event \text_opt_define= 09
TEXT ^S e l l _ )
\event \text_opt_end== \goto 0FF \goto 30F \goto 313 \end

'[Event 65F - Ice Country Neko]
@OFF $E2E1D5
\event \lock
\event \flag== FA 01 ' Initial Neko Shop
@OFF $E2E206
\event \call 480 ' event 480 - \lock \gather \camera_center
@OFF $E2E22A ' Ice Country Neko Shop Pointer
\event \goto 310 ' Call Shop List

'[Event 4F1: Dummied Out]-[Event 4FB: Dummied Out]
@OFF $E293F6
\event \if_flag== 4F 1F \goto 659
\event \if_flag== 4F 00 \goto 678
\event \end

'[Event 659: Dummied Out]-[Event 65E: Dummied Out]
@OFF $E2E1CF
\event \flag== FA 0F ' Grand Palace Neko Shop
\event \goto 312
\event \end

'[Event 678: Dummied Out]-[Event 67D: Dummied Out]
@OFF $E2E916
\event \flag== FA 01 ' Initial Neko Shop
\event \goto 312
\event \end
ENDIF x3

IF [Text]
IF Relocalized
'[Event 65 - Initial Neko Shop]
@OFF $E0612F ' event 65
ADR $C91233 ' vanilla
@OFF $E07F32 ' event 65
ADR $800000

'[Event 1DF - Various Nekos in the Beginning]
@OFF $E19810
\event \flag== FA 01 ' Initial Neko Shop
TEXT ^N e k o : ^I _ h a v e _ i t e m s , _ n y a ! \n
@OFF $E19866
\event \goto 4F1

'[Event 23C - Upperland Neko]
@OFF $E1BEB8
'TEXT _ ^W h a t _ c a n _ ^I _ d o _ f o r _ y o u ? \n
\event \flag== FA 06 ' Upperland Neko Shop
TEXT _ ^H o w _ c a n _ ^I _ h e l p _ y o u ? \n

'[Event 318 - Mountain Neko]
@OFF $E20AB8
\event \flag== FA 0E ' Tasnica Shop

'[Event 319 - Grand Palace Neko]
@OFF $E20B63
'TEXT _ ^H a v e _ e v e r y t h i n g _ y o u _ n e e d ? \n
\event \flag== FA 0F ' Grand Palace Neko Shop
TEXT _ ^W h a t _ c a n _ ^I _ d o _ f o r _ y o u ? \n

'[Event 65F - Ice Country Neko]
@OFF $E2E2A6
\event \lock
\event \flag== FA 01 ' Initial Neko Shop
@OFF $E2E2D7
\event \call 480 ' event 480 - \lock \gather \camera_center
@OFF $E2E2FB ' Ice Country Neko Shop Pointer
\event \goto 310 ' Call Shop List

'[Event 4F1: Dummied Out]-[Event 4FB: Dummied Out]
@OFF $E29489
\event \if_flag== 4F 1F \goto 659
\event \if_flag== 4F 00 \goto 678
\event \end

'[Event 659: Dummied Out]-[Event 65E: Dummied Out]
@OFF $E2E2A0
\event \flag== FA 0F ' Grand Palace Neko Shop
\event \goto 312
\event \end

'[Event 678: Dummied Out]-[Event 67D: Dummied Out]
@OFF $E2E9E4
\event \flag== FA 01 ' Initial Neko Shop
\event \goto 312
\event \end
ENDIF x2


Half of these are sort-of-bug-fixes (Neko not selling the contents from the last shop).  However, I had to change Neko's TEXTs, so I don't know if they can qualify as actual "bug fixes", and not "content changes".  In any case, please delete the previous codes and put this in the package.

StarWyvern

 Thanks for the updated link.  ;D I got it just fine now.
Insert "Witty Text" here.

reconstructingmana

The script augmentation project (it's more than a retranslation) will be in four phases:

1)Match up existing English translations with the original Japanese.
2)Make a preliminary translation based on the above.
3)Augment the translation with authentic sources which were not part of the original script.
4)Assign tags as necessary.

I am making headway into phase 1 but it will take a very long time with one person doing it.  If anyone wants to help with the (very tedious) data entry, it will be much appreciated.  Send me a DM.

I have procured many of the sources for phase 3, but they will not arrive from Japan for several weeks, so there is plenty of time to complete phase 1 and phase 2.

LightBaneX

Little question, was the effects of each weapon changed? I notice I am using the axe which the in game menu displays as effective against certain enemies. But I am using it and it is making balloons on the enemies.

hmsong

Quote from: LightBaneX on April 16, 2020, 04:58:50 PM
Little question, was the effects of each weapon changed? I notice I am using the axe which the in game menu displays as effective against certain enemies. But I am using it and it is making balloons on the enemies.

You're gonna have to include more detail.  Which specific weapon (and level of the weapon) were you using?  And did you have some sort of saber on? (Light Saber -- Balloon patch?)

LightBaneX

Quote from: hmsong on April 16, 2020, 07:26:59 PM
You're gonna have to include more detail.  Which specific weapon (and level of the weapon) were you using?  And did you have some sort of saber on? (Light Saber -- Balloon patch?)

I was using the level 4 axe, Francisca. No sabers, I only have access to undine, gnome, and recently jinn anyways. I was wondering if weapon effects at each level were changed, because I don't think any axe can balloon in the original. Also, the description in the in game menu just said effective against 2 enemy types. Yet I was doing balloons. If it helps, my secondary equipped weapon was sahagin spear, I believe the level 3 javelin.

Queue

Okay, finally getting in a proper reply. I've been helping someone clean out a flooded storage unit (and making trips to a landfill). It's been super fun.




LightBaneX, block is just super good. It's been discussed to death earlier in this thread (I don't expect everyone to have read this thread, just pointing that out that's something I'm aware of). A partial summary:
- I didn't make Manual_Block and I find it hard to edit; I did manage to add Blocking_Drains_Stamina eventually at least
- I don't like finicky timed blocks; I like blocking as a state where you can turtle and decide what to do next
- You can't do anything while blocking, so it doesn't matter if you can't get hurt, you also aren't attacking
- The player should be rewarded for tactical play (one char blocks everything, while other char attacks)
- It makes some bosses who rely heavily on blockable attacks a joke to fight: this is a reward for a player remembering to block; the best example might be Spiky Tiger, who is normally a rather BS fight, especially considering it's early game where the player's still learning the ropes, but if you block he's a proper difficulty (easy) for being only the third boss
- Block protects from melee and non-spell enemy attacks: some "fancy" enemy / boss attacks that seem like spells are part of the melee system, actual spells ignore blocking
- Even with how good it is, you can both easily go through the game without using it, and it's literally faster (if you care about being faster) to not use it; if it was worse it would just be not worth using ever

While I would like to polish the manual blocking mechanic further, it's low on my to-do list because it works (both literally functions as expected and it fulfills its objectives), while there are still bugs to squash and new things to make elsewhere.

Speaking of bugs, no, no weapons had their procs changed (yet, I keep meaning to add something to the L2 Spear, L2 Bow and L4 Boomerang, but haven't).

You're probably running into a bug where you have the stats for one weapon but the graphics of another equipped. I don't remember the exact process to make it happen (which is part of why I haven't gotten around to fixing it). This game's speed running community probably has notes on it. The L3 Spear has Balloon as a proc, so that's almost definitely where you were getting that effect from.




hmsong, what kethinov did was pick 3 unused events (it doesn't technically matter which, he just made sure there was enough free space without relocating them to add the event code he needed), have a shared Neko event jump to the first of his events which decided between two further events based on an event flag, and each of those events set event flag FA (like you're doing) to control which shop to show, so that one initial event could show two different shops. Because the shop flag is set during what is essentially the buy event (they all eventually lead to event 312), it suffers from the same sell-before-buy wrong shop issue.

Like kethinov said, event flags aren't a table of data somewhere in the ROM, they're numbers held in RAM (and in save data when you save and load) which the game uses to make decisions. In RAM they're at $7ECF00-$7ECFFF, so 256 bytes in a block. When you load a save, they're copied from the save to $7ECF00, and when you save your game, they're copied from $7ECF00 to one of the 4 save data "slots" (depending on which "slot" you saved to). When you start a new game, they're all initialized to 00, so all flags start at 0 and are changed by events.

To answer questions about how to know which events are unused, and what event flags do, the answer is the same for both: to begin, use somedit to get preliminary info.
In the "Events & Dialogue" section, there are "Edit" and "Search" tabs. Pick search, pick the "Event" sub-tab, and enter an event number and click search. Likewise for the "Event Flag" sub-tab. While it's not 100% accurate, it's a good starting point and more importantly, very easy to use.

To be more accurate for either requires searching for event numbers and event flag numbers among various parts of the game's data because somedit parses some things wrong, or seems to just entirely miss a few things.

I'm trying to catalog event usage as notes in the Turbo ZPS file; I had done so months ago but that data was unfortunately lost and I hadn't wanted to re-do the work until now. -_-

I'm really happy with what you're doing with the Neko shops, but this past week I've been overhauling how event patches work in the Turbo ZPS, so the bad news is it's going to take a little more work to get them adapted for use with the new system. Let me finish it and then I'll get your patch integrated and explain stuff.

A "quick" example of the new system; the following:
&(mods)\Misc\WhipGather
REQ [Quality_of_Life]
REQ No_Whip_Tile_Gather
ASM <.asm>
FILE <VWF>
FILE <Reloc>
&(mods)\Misc\WhipGather\.asm

'[Event 6D7: Prepare For Whip Post Jump]
@OFF $CA90D0
'\event \lock
'\event \gather
'\event \camera_center
\event \flag== 03 01
\event \whip_post
\event \end
' padding
RAW 00 00 00 00

''[Event 6D8: Initial Whip Check]
'@OFF $CA90DA
'\event \if_stats1==_leader== E4 04 \goto 6D7
'\event \end

&(mods)\Misc\WhipGather\VWF
REQ [Text]
REQ VWF_Edition ' compat
IF Relocalized
REQ FALSE
ENDIF
ASM <.asm>
&(mods)\Misc\WhipGather\VWF\.asm

'[Event 6D7: Prepare For Whip Post Jump]
@OFF $E2EB9D
\event \flag== 03 01
\event \whip_post
\event \end
' padding
RAW 00 00 00 00

&(mods)\Misc\WhipGather\Reloc
REQ [Text]
REQ Relocalized ' compat
ASM <.asm>
&(mods)\Misc\WhipGather\Reloc\.asm

'sig 06 03 2D08 300301 1F10 00
'[Event 6D7: Prepare For Whip Post Jump]
@OFF $E2EC6F
\event \flag== 03 01
\event \whip_post
\event \end
' padding
RAW 00 00 00 00

...becomes the much more concise:
&(mods)\Misc\WhipGather
REQ [Quality_of_Life]
REQ No_Whip_Tile_Gather
ASM <.asm>
&(mods)\Misc\WhipGather\.asm

%OFF% Event6D7
\event \flag== 03 01
\event \whip_post
\event \end
' padding
RAW 00 00 00 00


No need for byte signature notes, event number comments, manually typed addresses or triplicated data.

It gets trickier when you want to make changes to text, but even then it's still an easier system. I'm currently still converting all existing event patches to that format.




--- Will edit this post / reply again with more after lunch, gotta run! ---

reconstructingmana

After two grueling days of tedious work, Phase 1 is almost complete.  98% of what remains involves matching up existing unofficial translations to the text.

Going through the entire script, I realize that a project like this has more value than originally thought.  There are still a lot of nuances in the original Japanese that are unfortunately not present in the 2018 retranslation.  Furthermore, the retranslation followed Woolsey more closely than I realized. 

I'm hoping that I can start Phase 2 tomorrow.  The good news is that my work from a few years back was quite thorough and a lot of it is already done! 

hmsong

@Queue

Oh my.  That'll be quite helpful.  I don't know if use the new Event method to track down where the original code was (from learning POV, being able to track down where the original code was useful).  In any case, changing all Events to the new method must be quite a lot of work, esp since you have to track down all the other changes that you did.


@reconstructingmana

Wow.  Indeed, I'd like translation patch that follows the original Japanese script.  Japan generally has the "more-make-sense-in-context" things than Western ones.  I don't know how much you changed between yours and Relocalized, since I thought Relocalized did a fine job.  Or does Japanese version give more info the the story? (such as how Luka knew Randi's mother before she became the tree?)

reconstructingmana

#1338
@hmsong

I looked at the page for Relocalized.  FuSoYa did not go back to the original Japanese; it appears that the Relocalized hack may have?

I don't think a strict literal translation is ever going to come off well in a game, except for academic purposes.  Text has to be added/changed for context, clarity, characterization, flow, etc.  That being said, I can not begin to say how much stuff still did not make it into the 2018 remake.  This was probably to make it flow better for voice actors, and keep it from becoming overly wordy.  Swear words and violent content were also left out.  It is very possible that Relocalized went back and got all these things, but I'm going to avoid reading it for now so as not to subconsciously affect my own work. 

Furthermore, if one only sticks to the Japanese script, they miss out some nice touches that Woolsey added in, as well as some things that were added in the 2018 version.  I can't imagine Secret of Mana without, "Emperor Vandole is a DOG!"

I more or less finished phase 1 today, which means that phase 2 will be underway soon.  I have a better sense of the script than ever, seeing four or five different translations depending on the part of the game.  Phase 2 is the preliminary translation of the entire script, consulting with a panel of fluent speakers that I've gathered.  A lot of this work was already done a few years back.

But where I really hope to differ is taking my many years of research from the blog and additional authentic sources I have and add to and enhance the game's experience through the script.  At this point, I'm thinking that the inn dialogue in the remake would not work well in the SNES version verbatim, but that doesn't mean that there aren't some good tidbits that can be worked in here and there.     

Queue

hmsong, yeah, it's taking longer than I expected to convert stuff. I ended up burning all my Secret of Mana time over the past few days on it; the radio silence was me not even having enough time left after hammering away on the event patch conversions to visit the forums. I forgot that quite so many patches had modified events, but I'm positive the effort will be worthwhile, especially for implementing the "script augmentation project".

After you see things in action, and get a grasp on how you add a label within an event to let you specify where to patch, I think you'll find it to be much easier. Also, all 3 existing event sets (Vanilla, VWF, Relocalized) are now inside the Turbo ZPS in their entirety, so are available as reference.




reconstructingmana, I'm trying to wrap up what I think is the last of the preparatory stuff regarding importing an entire event set. Once done there, I need to export the following (partly to make sure you have the data, but also so I have a full plan for re-importing it):
- money
- status effect messages
- spell names
- weapon names
- equipment names
- item names
- ring menu text
- enemy names
- weapon descriptions
- spell descriptions
- location names
- magic rope and Flammie drum error messages
- various menu screen text
- the game's intro text scroll

You may have some or all of the above already. If you lack any of that, let me know and I can get it done first.

I also need to verify any name length limitations for the above. While we'll have functionally unlimited ROM space to hold the data, some aspects of the UI can't accommodate text over a certain length. For example, at the blacksmith, to upgrade a weapon, there's a maximum length to a weapon's name above which the UI fails. I think I recall it being 16, though no Vanilla weapon or item name is more than 14 characters long.

Timbo's Relocalized project was focused on names of people, places and things, and terminology (Lucre vs. Gold); it uses FuSoYa's VWF Edition script as a base and makes almost no changes to it (just replacing names, and a few instances of decensoring some Vanilla text choices). I'd still recommend against looking at it until you're happy with your name choices and use it as a later cross-reference rather than letting his choices affect your choices.