Generic Base Conversations
So I’ve had a functional base conversation system integrated with Support Rework, but there was no way to have base conversations without messing with support levels and having Support Rework installed. For the past… couple weeks or so, I’ve been completely rewriting the base conversation system and splitting it from Support Rework.
Do the titles text, music, etc. seem random to you? That’s because they pretty much are. Head into the “How to” > Example section to see how I pulled this off!
Supported features:
- A base conversation table that’s easy to use. Not a disgustingly massive CSV anymore!
- Displaying a specified background (Required with the generic event)
- Defining an optional ASM usability pointer for each menu item
- Defining a title for each base conversation
- Defining an ASM text getter if no title is detected
- Having music to play during the conversation. If none is specified, MUSI/MUNO will be used
- Showing text during the event (the conversation itself, also required for the generic event)
- Giving an item to a character (if the character doesn’t exist, no effect)
- Loading units into your party (define a pointer to UNIT data)
- As a catch-all, defining a custom event to play instead of the generic event (more advanced conversation techniques, i.e. TEXTCONT, multiple text IDs/backgrounds, etc.)
- Defining an importance value for each conversation (number of exclamation points on the far right to show for the menu item similar to stars in Tellius)
- B press handling on the menu to go back to the prep screen
- Specify an event ID to use with similar behavior to chapter talk events
- No known hack conflicts including the Skill System!
How to: Uh I don't have a joke for this one; you guys write the text not me.
As always, you’ll find all materials you need in the folder link in the OP.
This comes with my Prep Screen Hack installed. It’s required for making the prep screen usability function properly.
You’ll need to integrate the CSV with that hack. This hack replaces the support viewer handler proc, so you don’t need to change the effect pointer. You’ll need to make the “greyed out” usability BaseConvoUsability|IsPointer. You can change the text to whatever you like with the other fields.
Doing this makes sure that the player can’t enter the convo viewer screen if none are viewable.
Now that that’s out of the way, you’re going to want BaseConvos.event included in your buildfile.
There’s pretty much nothing you need to worry about from this file unless you don’t want text IDs 0x2D through 0x34 consumed. These are used by default, but you can use any other text IDs by having those text IDs defined in your text buildfile.
For allocating those text IDs:
## BaseConvoTextID1
[X]
## BaseConvoTextID2
[X]
## BaseConvoTextID3
[X]
## BaseConvoTextID4
[X]
## BaseConvoTextID5
[X]
## BaseConvoTextID6
[X]
## BaseConvoTextID7
[X]
## BaseConvoTextID8
[X]
What you really need to concern yourself with is BaseConvoTable.event. This is where you’ll define the behavior of your conversations.
Example behavior shown in the video (don't mind my nonsensical debug text):
Chapter(MilitaryAccept3)
Entry
bg(0x30)
name(Military3AcceptNameText)
text(Support1Text)
music(Aquatic_Ruin)
Entry
bg(0x2F)
name(Military4AcceptRetreatNameText)
text(Support2Text)
item(SilverSword,Zaheva)
music(Venus_Lighthouse)
importance(2)
Entry
name(Military5AcceptRetreatLeaveNameText)
event(BaseConvoTestEvent)
Entry
bg(0x2D)
name(Military6AcceptRetreatLeaveNameText)
text(Military1BeginningText)
item(Elixir,0xFF)
music(Derris_Kharlan_Appear)
importance(2)
Entry
bg(0x2C)
name(Military7AcceptRetreatLeaveNameText)
text(Military1SylvaineBriefingText)
importance(1)
Entry
bg(0x2B)
name(Merc1NameText)
text(Military1EndingBeginningText)
music(Last_Battle_Decision)
unit(LoadBaseConvoSylvaine)
importance(3)
Entry
bg(0x2A)
name(Merc2BanditNameText)
text(Military1ForrestBattleText)
item(SteelBlade,Madeleine)
music(Green_Emerald)
importance(1)
Entry
bg(0x29)
name(Merc3BanditNameText)
text(Military1ChristinaBattleText)
music(Oil_Ocean)
unit(LoadBaseConvoChristinaForrest)
importance(3)
Chapter(MilitaryAcceptRetreat4)
Entry
bg(0x10)
name(Military6AcceptRetreatLeaveNameText)
text(Support3Text)
music(Casino_Night)
Entry
bg(0x13)
name(Military7AcceptRetreatLeaveNameText)
text(Support1Text)
music(Heavens_Gate)
...
// Later at the bottom of the file...
ALIGN 4
BaseConvoTestEvent: // Refer to the generic event in BaeConvos.event.
EVBIT_T 0x4
SetBackground(0x10) // REQUIRED, Load a background!
MUSC A_Tragic_Decision
TEXTSTART
TEXTSHOW Military4AcceptRetreatTactDecisionText // Example usage of a custom event: TEXTCONT with music changes.
TEXTEND
MUSC Emergency
TEXTCONT
TEXTEND
REMA
FADI 0x5 // This fade is highly recommended.
CLEAN // This is REQUIRED.
SVAL 0xB 0x1 // REQUIRED to mark when events are finished running.
NoFade
ENDA
LoadBaseConvoSylvaine:
UNIT Sylvaine ArmoredWyvernLord Sylvaine Level(9,Ally,True) [0xFF,0] 0x00 0x00 0x00 0x00 [SilverLongbow] NoAI
UNIT
LoadBaseConvoChristinaForrest:
UNIT Christina Cavalier_F Sylvaine Level(9,Ally,True) [0xFF,0] 0x00 0x00 0x00 0x00 [SteelBlade] NoAI
UNIT Forrest Cavalier Sylvaine Level(9,Ally,True) [0xFF,0] 0x00 0x00 0x00 0x00 [ShortSpear] NoAI
UNIT
I’ve tried to make this as easy to use as possible with macros. Start writing convos for a chapter with the Chapter(chapter) macro. Head each individual new entry with the Entry command.
The two required components of each base conversation are the bg and text components. Bad things will happen if you don’t define these. All other fields are optional (though the name field for the title of the base convo is required unless you have a text getter).
Visit ConvoTableDefs.event for all available macros! Any others not mentioned here are optional. These macros can go in any order you like within a single entry. The order in which the entries are written are the order in which they will appear in the conversation viewer.
Quick note on custom events:
You may have noticed the event field which allows you to play a custom event instead of the generic event. This is a “catch-all” in case these macros don’t suit your needs (TEXTCONT, multiple items given, multiple text IDs, etc.). This is extremely versatile, though there are a few requirements to make your event run properly.
-
EVBIT_T 0x4is needed at the beginning of the event. - Loading a background is necessary at the beginning of the event.
- Fading before exit is highly recommended.
- After the fade, the commands
CLEANandSVAL 0x1 0xBare necessary before exit.
There can be no more than 8 base conversations per chapter! This is due to graphical limitations.
Finally, you’re going to want this defined somewhere in your text buildfile. This is the text that displays at the bottom of the base conversation screen.
## BaseConvoSelectConvoText
Select a conversation.[X]
This is completely independent from Support Rework, but that doesn’t mean I haven’t designed parts of it to play nicely with that future integration. Like the text getter for titles as well as allocating some of the convo entry space for future use there. Support Rework acting as an extension of this (or maybe the other way around idk yet) will be coming in the future.
I’m open to suggestions for whatever you may want to see in the generic event. The code for this was written in C, so let me know if you have questions about that or about the system in general. (Shoutouts to @StanH for the pretty amazing CHAX system that made this revision way less painful than it would have been with handwritten asm again!)
(Also while I’m here, I may as well mention I fixed the bug with the prep screen hack where the greyed out description text would not be gotten properly. I’ve also updated Repointers.event with a couple fixes/aditions.)