Faherya

The Knight of the Sad Figure
Veteran
Joined
Jul 25, 2013
Messages
234
Reaction score
528
First Language
Portuguese
Primarily Uses
RMVXA
Hello, folks. How are you?
Some people here already know me, I work as a literary editor. I often receive RPG Maker projects to review and I would like to discuss with you a small problem that I find in all of them. Have any of you already submitted a project to a proofreader or translator? Well, one of the problems caused by the way the RPG Maker works is to make our work immensely difficult. Or at least not encourage developers to collaborate with us. Here is an example. It sounds like a very simple message, right?


Let's see what it looks like when we are going to treat the text. Oh, wait, where is it? Well, certainly spread out on some map, inside some event page. Yeah, we'll have to look for it. And when we finally find it, look at what it looks like:

Code:
\c[9]\n[1]:\c[0]
Hello, \.\c[9]\n[2]\c[0]!\. Did you find the \i[147]\c[3]Sword\c[0]?\|
I've heard that it could be on the river.
God have mercy on this project. Or rather, those responsible for dealing with this text. The first problem is, of course, that the text is all over the place. The second problem is that the messages are infested with formatting characters. Make no mistake, little grasshopper. Your translator will charge you for characters, including each backslash embellishing your narrative. And believe me when I say that, alone, they can cost you dearly depending on the size of the project. Ah, it is also worth mentioning that the work in panning the text through the game also counts.

So, how do we solve this? The first thing to do is to organize the texts all together. We don't want to waste time looking for everything, message by message. A simple code can help, RPG Maker VX Ace even has a module that we can only expand:


Realize that we need to use double backslashes. Escape characters are called, which will consider the second bars as part of the text.

Yes, at the end of the project this module will be giant, monstrously colossal. But all the editors, translators and proofreaders involved in the project will thank you with tons of cookies for doing such a beautiful job. It's infinitely more professional than leaving your things lying around, isn't it? And what would you call this message within the game? You see, it’s very easy. Use a Script Call:

Ruby:
$game_message.add(Vocab::Message001)
Okay, I'm using RM VX Ace to illustrate, but what matters here is the concept. Reviewing: Just as you have a bank of items, characters, enemies and abilities, have a bank of texts. It's like organizing your room. I hope that this topic sheds some light on anyone who is lost in this regard. I would like to thank Syureri and Gabriel N. for clarifying the example codes. Their work. Some tips to make the process even more efficient:

1) Even if you use a text bank, it is not a good idea to send raw texts. That is, full of formatting characters. Remember that the professional will charge you for characters.
2) For very large works, consider using a translation platform. They are sites specialized in organizing this type of thing. Ex:
Text Master, Mota Word.
3) There are also websites specialized in connecting translators to their clients, however they do not help in the organization. If you need a professional, you will certainly find it at:
My Translation, Translators Base, Proz, Translators Cafe etc.
 

gstv87

Veteran
Veteran
Joined
Oct 20, 2015
Messages
1,979
Reaction score
970
First Language
Spanish
Primarily Uses
RMVXA
instead of constants in a module, try a module manager, with symbols:
Code:
module Vocab
Constant000 = "string000"
Constant001 = "string,001"
...

end

$game_message.add(Vocab::Constant000)
Code:
module STRManager
  def self.txt
    return @txt
  end

def self.[](id)
  begin
   return self.txt[id.to_sym]
  rescue
   return nil
  end
end

@txt = {
  :string001 => "string001";
  :string002 => "string002";
  ...
}
end

class Manager
  def get_dlg(id)
   return STRManager[id]
  end
end

Manager.get_dlg(:string001) => "string001"
by using
Code:
def self.[](id)
  return @txt[id]
end
you allow the usage of Module[Id] instead of Module::Constant, which, since the internal arrangement of the module would be an array, can be shift'ed, pop'ed, reverse'ed, and otherwise modified as you like.
by putting a class and functions to handle it, you can also add an intermediate step if you need to re-format the string:
Code:
:string001 => "This\0is\0a\0special\0string\0with\0control\0characters"

def get_dlg(id)
  return STRManager[id].gsub("\0", " ")
end

get_dlg(:string001) => "This is a special string with control characters"
and, that'll ease up the formatting for the writing team.
 
Last edited:

TheoAllen

Self-proclaimed jack of all trades
Veteran
Joined
Mar 16, 2012
Messages
4,842
Reaction score
5,524
First Language
Indonesian
Primarily Uses
RMVXA
The problem with such a script call is, you only add a message. And adding faceset, and everything else is more convenient in the default editor. And that means, writing a custom script so that your own escape character is replaced by the text is much more QoL than your script call

I've made a prototype text manager back in December 2019. And it was intended to work for both VXA and MV

However, due to conflicting interests, I halted this project for now.
EDIT:
And it is supposed to work like this
Screenshot_9.png
Replaced by the actual text. Anyone may take this idea to actually write an actual script/plugin.
 
Last edited:

gstv87

Veteran
Veteran
Joined
Oct 20, 2015
Messages
1,979
Reaction score
970
First Language
Spanish
Primarily Uses
RMVXA
And adding faceset, and everything else is more convenient in the default editor
ahem.


Code:
Manager.parse_dlg(:Actor, :line)
been there since 2017 :D



I can even manually override the module, and pass it custom lines directly from the event page:
Code:
line = "Custom line put together on the fly"
Manager.parse_dlg(:Actor, line)
and it'll bring up everything on it's place: Color, name, colon, color change, space, line, wait for next page.
there's still one dialogue block in the demo I put together, that I haven't fixed TO THIS DAY, and it still prints out without the formatting, which is a traditional editor-made dialogue.
everything else that looks correct? it's handled by the manager..... even from events that don't exist in the editor.
that's why I came up with this: I got tired of fixing dialogue blocks one at a time.
 
Last edited:

Eliaquim

Raze: The Rakuen Zero's Guardian!
Veteran
Joined
May 22, 2018
Messages
1,076
Reaction score
446
First Language
Portuguese - Br
Primarily Uses
RMMV
For Mv, I like to use that from Iavra. Make all your text in a JSON file.

But also, there is the converter tool for mv now on steam. With a little work, the developer can extract the text to excel and filter the commands related to message text.

\c[9]\n[1]:\c[0]
Hello, \.\c[9]\n[2]\c[0]!\. Did you find the \i[147]\c[3]Sword\c[0]?\|
I've heard that it could be on the river.
ahhhahahahahahaha xD
 

Faherya

The Knight of the Sad Figure
Veteran
Joined
Jul 25, 2013
Messages
234
Reaction score
528
First Language
Portuguese
Primarily Uses
RMVXA
You have excellent solutions there. As long as there is a solution, the best is the one that works for you and your team. Apparently, it is a topic that has already been discussed a lot here, but I was always unlucky not to find a project with a job well done in this area. :kaopride:
 

TheoAllen

Self-proclaimed jack of all trades
Veteran
Joined
Mar 16, 2012
Messages
4,842
Reaction score
5,524
First Language
Indonesian
Primarily Uses
RMVXA
@gstv87 no, you don't get me. While your solution is great, I have *faceset* with emotions. I sure can put the face name and face index, but I do not see the *actual* face emotion. For constructing an actual dialogue, I prefer a built-in editor, so I know the actual graphics, and the text. And doing it back and forth to script editor is simply inconvenient. I can do this if I built a separate editor.

Screenshot_10.png
 

gstv87

Veteran
Veteran
Joined
Oct 20, 2015
Messages
1,979
Reaction score
970
First Language
Spanish
Primarily Uses
RMVXA
I have *faceset* with emotions.
every faceset is just a bitmap, and the system only requires a starting coordinate to take the measurement to retrieve the square that is the actual face.
doesn't matter if you have 1 or 15 faces..... in fact, I'm working with independent faces in parallel to RTP faces.
look at the $ signs, those are single images, the manager brings in the whole image in that case.
you can also rig it for animation as well.... just add an extra step to splice the image into individual frames.
to the purposes of *splitting the work of handling messages* away from the editor and handling it by code, anything goes.
 

TheoAllen

Self-proclaimed jack of all trades
Veteran
Joined
Mar 16, 2012
Messages
4,842
Reaction score
5,524
First Language
Indonesian
Primarily Uses
RMVXA
every faceset is just a bitmap, and the system only requires a starting coordinate to take the measurement to retrieve the square that is the actual face.
what I'm saying is, it is easier to construct a text with the face graphics next to it. Not just an arbitrary number of the coordinate. And it is easier to pick visually which rather than remember it and type in numbers.

In case if it wasn't clear enough.
 

Kes

Veteran
Veteran
Joined
Aug 3, 2012
Messages
21,791
Reaction score
11,006
First Language
English
Primarily Uses
RMVXA
This has nothing to do with mechanics.
[MOVE]General Discussion[/MOVE]
 

gstv87

Veteran
Veteran
Joined
Oct 20, 2015
Messages
1,979
Reaction score
970
First Language
Spanish
Primarily Uses
RMVXA
@TheoAllen yes, but that's precisely why I got rid of that system: each single block needs their own image.
if I have to change the image for whatever reason, or the formatting of the text, or split the lines at some point, I have to modify each block individually.
by assigning each actor their own formatting, I can just reference everything to that and change everything with one change.
 

TheoAllen

Self-proclaimed jack of all trades
Veteran
Joined
Mar 16, 2012
Messages
4,842
Reaction score
5,524
First Language
Indonesian
Primarily Uses
RMVXA
@gstv87 okay, but did you get what I mean by faceset emotion though?
If you're using emotion, i.e, one actor has many expressions, it is still easier to change the block individually.
 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Profile Posts

I wonder what cat meat tastes like.
Some call him... the wacky one.
Writing out an idea for the No Travel Game Jam. I have a general plot and challenge written out, it's just a matter of filling the rest in and making it interesting.
A definite difficult time right now. How is everyone doing during this pandemic? I already have seen furloughs and layoffs.
Hollow 1977 wrote on Archeia's profile.
Hope you and your family are doing well during this difficult time. :)

Forum statistics

Threads
95,646
Messages
930,709
Members
125,972
Latest member
Wutong
Top