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

Queue

Phanna's grandfather's event (155) has a bug in Vanilla and VWF; Relocalized sorta fixes it buts adds a different bug. I need to work that out before adding abort support to it.

Rudolf's event (37C) sets a flag at the end of the event, so can't be aborted without a technical side effect (event flag 26 not incrementing from 0 to 1 even though you talked to Rudolf). However, nothing differentiates between that flag being 0 or 1 (as far as I can tell), so while technically wrong, it wouldn't hurt anything, so I'll add it.

The crying moogles don't have anything critical (namely flags being set) in their event (24B) after the first abort which is why I had let them be aborted, but it looks like I still shouldn't since you only get one chance to see the text and it automatically prevents you from re-reading it anyway.

In all cases, thanks a bunch. A second set of eyes on these is a huge help.




I'm hammering away at reconstructingmana's retranslation, working on a script (code) to process and integrate the translated script (text) into the game. Making steady progress, but still plenty to do. Hoping to have some screenshots in the next few days, to be followed by something actually usable.

hmsong

reconstructingmana is done?  Hot damn.  I figured it'd take at least a month or something (expected longer than that).

As you noticed, I'm not trying to say you made a mistake or anything.  Just indicating what I saw, then notifying you.  So please don't feel obligated to fix anything.  Well, I'm sure you're already doing that (or maybe the correct sentence is that "I'm sure you're already not doing that"?).

Queue

Well, it's more like things are complete enough for testing. Multiple passes over the script (text) will surely occur. I'm not converting the translation for use in-game by hand: that would necessitate it being 100% done; I'm writing a script (code) that matches the translated text up with the text in the vanilla events, then formats it to fit in the textboxes. Aside from just more time proofreading and refining the script (text), checking things in-game can't be beat for working out kinks in how some text looks in-game.

Quote from: hmsongSo please don't feel obligated to fix anything.
I value your opinion and I think you've pointed out things that are legitimate concerns. In the case of Rudolf or the coward guard, I just hadn't analyzed the events closely enough to realize they were safe to abort, and basically the inverse for the moogles. There are something like 715 events with text in them, so it's quite possible that I botched making one abortable here or there.

hmsong

Okay, few things:

1. For Aborted Dialog, the dialog from the guy who tells you to fetch the Golden Key from Mara is abortable.  The question is, should his dialog be abortable?  While you can make him repeat himself, his dialog is kinda important (he tells you where to get the key).  I dunno.  It's similar to how Jekt tells you where the next dungeon is (which is why I'm guessing you made so that his dialog isn't abortable -- although Luka telling you where to go is abortable -- hmm... consistency may be necessary).

2. While [Functional_Fashion] is ON, when I equip an equipment, the character changes his color (obviously).  However, when I sell the equipment that the character is wearing, the color does not change back to the default color.  It's nothing important, but I figured I should mention it.

3. Most importantly, one of the soldiers in Tasnica entrance has his dialog all wrong.  It shows gold, then he says what Jema says when you first enter.  It's all weird.  I'm not sure which patch is causing that.  I haven't played the whole thing through, so I'm not sure, but I sure hope there aren't any others like that.  I was checking for abortableness, so I didn't actually read any of the NPC's dialogs.  It would be bad if the dialogs got screwed up somewhere.

Queue

1) My rule was any dialog that can be repeated, even if it gives a hint, and doesn't interfere with game state (NPC position, event flags), is fair game to abort. If the player skips a hint and can't figure out what to do, that's their own fault (and can be remedied by them going around and speaking to NPCs without skipping text to find the hint they missed). Abortable dialog is primarily so if you talk to an NPC again on accident, you don't have to suffer through repeated text.

Looking at the Jehk / Joch events, I accidentally missed those events for Relocalized; they were intended to be abortable and are for VWF / Vanilla.

2) Whoops, I must have missed making unequip-by-selling reset the character palette. I'll want to fix that.

3) Good catch, and unfortunately this is due to Neko_Distribution_Network using Event178; VWF and Relocalized use that event (and some others that aren't used by Vanilla). I hadn't double-checked that for you when integrating. I think my "empty events" data (in the Turbo ZPS file) now lists everything except Neko_Distribution_Network, so it should be usable to find a different space to use. Also, I left some commented out proposals in Neko_Distribution_Network that I wanted your thoughts on.

hmsong

#1385
I saw the "EVENT DATA" in the ZPS, and I'm sad to say that I didn't really fully understand all of it.  Starting with, I understand the labels, but I don't understand how those labels are translated into actual specific addresses.  I mean, I get that it's connected to a particular event, but which part of the specific event?  And so on and so forth.  I'm so sorry for not being able to understand, despite you going out of your way to make stuffs in effort to make me understand.  But I'll eventually learn (hopefully).

I saw the Neko Distribution Network part that was commented out (it uses the event088 for Ice Neko, instead of creating a whole new event 649).  I don't know how that will work, but if that works, then yes, I'd prefer to your link to event 088 (I want to avoid creating new events if I can avoid it).  Having said that, wouldn't that screw with Relocalized?  I don't know which has more space to work with, but if Relocalized/VWF has shorter bytes, then it might overflow into different events.  Then again, I suppose you probably checked all that.

I also noticed that you used event 312 (uses the IF events) instead of 310 (just calls the shops).  If that works, then yeah, I sure would like that (I know that Ice Neko was doing stuff in weird order, relative to other Nekos).  I'm always for simplifying the hacks.  It's just that my limited knowledge can't process all that, much less rearrange things.

As for replacing Event178, I can just use Event649, assuming Ice Neko uses event088 (although I would prefer event31A to be Upperland Neko and 649 to be Grand Palace Neko).  Actually, could you please do that for me?  I fear I'm going to screw something up, since I don't fully understand the shortcuts yet.  Thanks.

A side note:  For Aborted Dialog, when Luka is locked in her own dungeon, she has that one-time dialog (similar to how moogles have that one-time dialog in the Upperland).  Perhaps you'd make it so that it's not abortable?

reconstructingmana

Quote from: hmsong on May 05, 2020, 11:19:18 PM
reconstructingmana is done?  Hot damn.  I figured it'd take at least a month or something (expected longer than that).

Not quite.  ;)

The rough draft is done.  It's under review by other folks atm. 

But this is only the second phase of the project (a relocalization of the original Japanese).  The third phase is new material, and two of my sources have yet to arrive from Japan. 

hmsong

QuoteThe third phase is new material, and two of my sources have yet to arrive from Japan.

What?  I get that new materials may be necessary, but you need something from Japan?  Japanese manual?  Japanese game?  Because those can be found online.  Dunno what other sources there are.

reconstructingmana

Quote from: hmsong on May 07, 2020, 12:43:51 AM
What?  I get that new materials may be necessary, but you need something from Japan?  Japanese manual?  Japanese game?  Because those can be found online.  Dunno what other sources there are.

What I have for Phase 3 so far:

1)Text cut out of the original game.  AFAIK, their events have been deleted as well, so something would have to be created.
2)Content from the cut prologues of the remake.  We can speculate forever on whether they were incomplete, low quality, ran out of budget, etc.  But there's a few tidbits here and there that flesh out some things.
3)Content from the cut side quests of the remake.  See above. 
4)Content from the remake's inn conversations. 
5)Japanese Guides --- not all have been scanned online, and less have been translated.  There's information in these guides that was part of previews/teasers and the strategy guide for the game that you would not learn simply playing Secret of Mana. 

Then of course, any localization involves paraphrasing, and I already worked a lot of things into Phase 2 to make the script clearer. 

The overall goal of the Script Augmentation Project is to flesh out as much of the game's scenario as possible. 

hmsong

I see.  I only have this for guide:
https://www.nintendo.co.jp/clvs/manuals/ja/pdf/CLV-P-VABRJ.pdf

I can read some of it, but not understand most of it.

reconstructingmana

Quote from: hmsong on May 07, 2020, 01:36:50 AM
I see.  I only have this for guide:
https://www.nintendo.co.jp/clvs/manuals/ja/pdf/CLV-P-VABRJ.pdf

I can read some of it, but not understand most of it.

Yeah, that's the one with the prerelease map.

hmsong

Jeez.  I've been going through all of the events to see if there's anything I can use for Dispel Inn, but I can't find it at all.  Apparently, a never-before-seen event would have to be created, and I have no idea how to do that.  There's events called, "\heal_all", "\cure_all", and "\refresh_hud" (not sure what that last one is), but I have no idea how to use them to create the dispel effect.

Queue

Quote from: hmsongI saw the "EVENT DATA" in the ZPS, and I'm sad to say that I didn't really fully understand all of it.
Plenty of it isn't obvious or is nearly contradictory. In time you'll wrap your head around more of it.

Quote from: hmsongI understand the labels, but I don't understand how those labels are translated into actual specific addresses.  I mean, I get that it's connected to a particular event, but which part of the specific event?
Any event label that isn't the standard Event### (so any that are like Event###.Patch_Name) the patch author (namely, you or me) places in the primary event scripts.

For example, search the Turbo ZPS file for "@OFF Event065.Neko_Distribution_Network.goto" and you'll find it in 3 places: the Relocalized, VWF and Vanilla primary event scripts. Here's what the Relocalized Event065 looks like:
@OFF Event065 ' $E11506
\event \text_open
@OFF Event065.Neko_Distribution_Network
\event \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= 04
TEXT ^B u y _ _
\event \text_opt_define= 09
TEXT ^S e l l _ )
\event \text_opt_end== \goto 311
@OFF Event065.Neko_Distribution_Network.goto
\event \goto 301 \goto 313 \end

Note how @OFF Event065.Neko_Distribution_Network is just before \event   \gold_show and @OFF Event065.Neko_Distribution_Network.goto is just before \event   \goto 301; I added those labels in the same spot for all 3 scripts, so when you use %OFF% Event065.Neko_Distribution_Network and %OFF% Event065.Neko_Distribution_Network.goto, it overwrites \gold_show and \goto 301 (with \call 088 and \goto 312, respectively).

There's nothing automatic about adding the labels, you just go add them, and then use them in your patch. If all three primary event scripts get the same label added in equivalent spots, then your patch can use a single %OFF% Event###.whatever label to make the same change regardless of which event script is active (as long as you avoid altering text, pretty much). With the upcoming addition of the Script Augmentation Project, it will require adding the label(s) to the right spot in it as well, but that should be far less painful than byte pattern searches.

Quote from: hmsongI saw the Neko Distribution Network part that was commented out (it uses the event088 for Ice Neko, instead of creating a whole new event 649).  I don't know how that will work, but if that works, then yes, I'd prefer to your link to event 088 (I want to avoid creating new events if I can avoid it).  Having said that, wouldn't that screw with Relocalized?
Ice Neko is weird and doesn't open the gold display right away, so it calls different events that open the gold display before the buy / sell menus (and calls a save event that doesn't close the gold display since it isn't open). My changes just make Ice Neko like the others so it opens the gold display right away and then uses the typical Neko set of events for Save, Buy and Sell.

I don't actually understand your concern regarding Relocalized (or VWF, etc.) and space. If this is just related to Event178, VWF (and so Relocalized) use some events that were unused in Vanilla, and 178 happened to be one of them. The Neko events in VWF and Relocalized are barely changed so space constraints are generally the same for them.

Quote from: hmsongI also noticed that you used event 312 (uses the IF events) instead of 310 (just calls the shops).
Event310 is a generic Buy / Sell dialog that then goto's 312. Ice Neko only calls 310 because 310 opens the gold display.

Quote from: hmsongA side note:  For Aborted Dialog, when Luka is locked in her own dungeon, she has that one-time dialog (similar to how moogles have that one-time dialog in the Upperland).  Perhaps you'd make it so that it's not abortable?
Whoops, yeah I shouldn't have made this one abortable.

Quote from: hmsongJeez.  I've been going through all of the events to see if there's anything I can use for Dispel Inn, but I can't find it at all.  Apparently, a never-before-seen event would have to be created, and I have no idea how to do that.  There's events called, "\heal_all", "\cure_all", and "\refresh_hud" (not sure what that last one is), but I have no idea how to use them to create the dispel effect.
Yeah, that's why I didn't get that implemented yet. It's unfortunately not simple.

\refresh_hud means... well HUD is heads-up display, and is referring to the UI at the bottom of the screen that shows your health, stamina, etc. Refresh in the context of software interfaces usually means to redraw it because something changed. So that command makes the UI at the bottom update after changing player health via script (like via \heal_all). If you change the player's health but don't issue the \refresh_hud command, the player's health may not show the updated value until something else causes a HUD refresh (like taking combat damage).

The \stats1 commands let you manually set various values in the top 0x100 bytes of player stats, which include stuff like status effects (90 and 91), buffs (B0), and so on. So it's probably possible to do the same things dispel does via events, it's just tedious and will likely take up too much space to try and cram into an unused gap.

Quote from: hmsongDunno what other sources there are.
reconstructingmana is pretty much the expert on what Secret of Mana lore is out there. While I like their Mana Redux blog in general, I think https://manaredux.blogspot.com/2019/04/early-world-maps-redux.html is an especially fun write-up.

hmsong

QuoteNote how @OFF Event065.Neko_Distribution_Network is just before \event   \gold_show and @OFF Event065.Neko_Distribution_Network.goto is just before \event   \goto 301; I added those labels in the same spot for all 3 scripts, so when you use %OFF% Event065.Neko_Distribution_Network and %OFF% Event065.Neko_Distribution_Network.goto, it overwrites \gold_show and \goto 301 (with \call 088 and \goto 312, respectively).

Oh, so there was something in the primary event scripts that linked the non-standard event in all three text edits.  I didn't see that in the Event Data (or maybe it's in a way that I just didn't understand).  So if I were to create a non-standard event (let's just say, Event001.Random_Change), I would first need to put Event001.Random_Change in the primary event script for all three text edits, then I can just use Event001.Random_Change to change things in all three.

Do I understand correctly?


For Ice Neko, please change it in your new method (usage of Event088 and 310).  That "standardizes" things, which is better.

I was rambling incoherently when I mentioned that the changes may screw with reloc.  Even I don't know what I was talking about, now that I look back.

Now, about the space usage, I figured that in the future, there may be situations that needs new events (such as Dispel Inn).  But as I understood recently, you need the empty event spaces to create new events.  In Neko Distribution case, I just needed 6-byte (consecutive) space for each of my new events (it's not like I could have used event 02E, 061, 085, 0A7, 0AF, and 0BF, since they were all 1-byte spaces).  But maybe something in the future may need more consecutive bytes than that.  So I figured I should leave the large space for the future, just in case.

QuoteYeah, that's why I didn't get that implemented yet. It's unfortunately not simple.

I see that now.  Is there a way for <something> to auto-cast Dispel Magic without <something> going through the motion of casting (or the spell animation), whenever characters sleep in an inn or something?

Quoteit's just tedious and will likely take up too much space to try and cram into an unused gap.

That's exactly why I wanted to leave large empty spaces in the events.  One day, I hope you can rearrange the used events for the extra contents, just so there would be large empty spaces for the unused events.  There are too many small-byte unused events, which can't be used for anything.  But that'll be a huge project, since it requires you to redo many many things.


Holy crap, I didn't know there was a documented Mana Redux.  I just heard vague rumors about it (with no real source).  That was interesting.

Queue

Version 2020-05-08:
https://filebin.net/7spaiz2xfys6b2i1/SoM_Turbo.200508.zip

Changes:
- Implemented Text\Event_Fixes; currently only for 1 Vanilla event and 1 Relocalized event, but will be expanded in the future
- Improved Bug_Fixes\Gather_Party_Fix; prevents additional offscreen character softlocks and improves camera panning when a player is offscreen
- The Helper_Script (ZPS_Helper.bat) now does some headered ROM sanity checks post-patching and shows an error message if applicable
- Minor optimization to Quality_of_Life\CPUs_Dont_Block_Screen
- Minor optimization to Quality_of_Life\Walk_To_Edges_Of_Screen
- Bugfix for Miscellaneous\Day_Night_Cycle; fixed background color losing time of day tint as reported by Mr X {here} (it was due to viewing a fullscreen menu, like Stats)
- Bugfix for Graphics\Functional_Fashion; fixes lack of color change when selling equipped equipment
- Bugfix and improvements for Quality_of_Life\Neko_Distribution_Network
- Adjustments to Text\Abortable_Dialog

Technical Changes:
- Added support for negative BRA/BEQ/BNE literals (-$01 through -$80)
- Prep work for Text\Script_Augmentation_Project

This was mostly a bug fixing release aside from preparatory work for the Script Augmentation Project.




hmsong, it does sound like you understand. I'd suggest looking in the Turbo ZPS at how I added various patch-specific labels to the events to get a feel for it. Search for "patch-specific" (without quotes) and note the decent sized list of them below each block of standard event labels. Pick one and then search for it to see how it's placed within the primary events scripts.

I changed the Ice Neko event, etc. And the conflict due to event 178 shouldn't exist now.

I do like your reasoning regarding using the smaller gaps when possible. For large new events, there is a lot of space available in bank C9 starting at $C9F2D7. For examples of how I've used it, check New_Game_Plus, Day_Night_Cycle and Revisit_Goblin_Village. You'd snag a chunk of bytes from there and then use Event###* and Event###^ to redirect the event to the space chosen between $C9F2D7 and $C9FFFF. Kethinov intends to use some of that space for his next big project, but it's easy to move stuff in ZPS, so if you choose a spot that conflicts, the address would just get changed. This is a step more complicated than just jamming stuff into existing event space, but is more flexible.

The event system can't cast spells. Adding the capability for it to do so would probably be extremely complicated. The most likely solution to having the inn mimic dispel is to note down exactly what character data dispel sets (see SSE.Func.Detrimental.Dispel_Magic for reference; each STA+X   $E1## there is probably going to need to be replicated), then replicate it using \stats1_boy==, \stats1_girl== and \stats1_sprite==. This will make for a very bulky event, so you'd likely need to use new allocated event space, like I mentioned New_Game_Plus, Day_Night_Cycle and Revisit_Goblin_Village do.

Reorganizing all events to compact the unused space is probably overkill. Like mentioned above, there's lots of unused space in bank C9 already, you just have to modify Event###* to relocate an event to use it.

hmsong

Awesome.  Thanks.

If someone's large project (ie kethinov) uses my event, then I don't mind my events being moved elsewhere, assuming it doesn't actually affect the effects of the patch.

QuoteThe event system can't cast spells. Adding the capability for it to do so would probably be extremely complicated. The most likely solution to having the inn mimic dispel is to note down exactly what character data dispel sets (see SSE.Func.Detrimental.Dispel_Magic for reference; each STA+X   $E1## there is probably going to need to be replicated), then replicate it using \stats1_boy==, \stats1_girl== and \stats1_sprite==. This will make for a very bulky event, so you'd likely need to use new allocated event space, like I mentioned New_Game_Plus, Day_Night_Cycle and Revisit_Goblin_Village do.

This seems like something that's way way beyond me.  I couldn't even understand how SSE.Func.Detrimental.Dispel_Magic worked (I still don't know what STA+X or any of that other weird... stuff is).  Sigh.  I can only hope that at some point, you'd have the time to work on dispel inn.  As Luka said, "I'll just keep hoping for a miracle."

QuoteReorganizing all events to compact the unused space is probably overkill. Like mentioned above, there's lots of unused space in bank C9 already, you just have to modify Event###* to relocate an event to use it.

Yeah, I figured that would be the case.  Well, as long as there are empty spaces for other projects (like kethinov and reconstructingmana), then that's fine, I suppose.

reconstructingmana

I started work on Phase 3 (new content), as Phase 2 (relocalization) is currently under review.  The folks who I consulted during the preliminary translation are quite busy at the moment, so I am still seeking other folks who know the Japanese language well and have been involved in this sort of thing before.  Having a thorough review is extremely important to the overall quality.  If worse comes to worse, we could call this V1.0 of the relocalization pending further help, but I imagine that would be a lot more work on Queue if we had to implement yet another script into the game.

For phase 3, so far I have compiled material from the cut side quests and prologues of the 2018 remake, as well as the inn conversations.  Very little of this material works well in the context of the SNES game, so we're only using a few bits here and there.  My Japanese guides were supposed to have arrived by today (I ordered them in the middle of April), and when they do, that will be the final source for new content. 

hmsong

QuoteFor phase 3, so far I have compiled material from the cut side quests and prologues of the 2018 remake, as well as the inn conversations.  Very little of this material works well in the context of the SNES game, so we're only using a few bits here and there.  My Japanese guides were supposed to have arrived by today (I ordered them in the middle of April), and when they do, that will be the final source for new content. 

Wuw, so that's what you meant by extra contents.  I never played the new Secret of Mana, so I didn't understand what you meant when you said extra content.  I just figured it'd be some extra words here and there when the dialog happens or something.  Will it have the expanded contents, as the "initial plan before cartridge" Mana Redux that Queue pointed out? 

reconstructingmana

Quote from: hmsong on May 09, 2020, 05:02:55 AM
Wuw, so that's what you meant by extra contents.  I never played the new Secret of Mana, so I didn't understand what you meant when you said extra content.  I just figured it'd be some extra words here and there when the dialog happens or something.  Will it have the expanded contents, as the "initial plan before cartridge" Mana Redux that Queue pointed out?

Anything along those lines would be wild speculation.  We know what the earlier concept looked like, but we don't know what the actual content was. 

Queue

First shot of some SAP text finally in game:


This was not manually formatted and inserted, but the result of the automation script I've been working on (which is good!). Lots of issues still, but finally have it functional enough to at least not corrupt the ROM. Will definitely need to deal with some issues in the spreadsheet so that I don't need to special case every event to get things working, but I have more work to do before bringing up any specifics.

No time for anything else at the moment though!